Loading commands/filesystem/find.cpp +24 −5 Changes for commands/filesystem/find.cpp: 24 added lines, 5 removed lines. Original line number Diff line number Diff line Loading @@ -634,7 +634,7 @@ namespace fresh { namespace cmd { else break; } std::vector<std::string> paths; std::vector paths; for(; i < argc; ++i){ std::string a = argv[i]; if(a == "!" || a == "(" || (a.size() > 1 && a[0] == '-')) break; Loading @@ -643,11 +643,30 @@ namespace fresh { namespace cmd { if(paths.empty()) paths.push_back("."); Parser p(s); for(; i < argc; ++i) p.toks.push_back(argv[i]); for(; i < argc; ++i) { std::string arg = argv[i]; // Split concatenated leading '(' (e.g. "(-name" -> "(" "-name") while (arg.size() > 1 && arg[0] == '(') { p.toks.push_back("("); arg = arg.substr(1); } // Split concatenated trailing ')' (e.g. "*.S)" -> "*.S" ")") std::size_t trailing_cnt = 0; while (arg.size() > 1 && arg.back() == ')') { trailing_cnt++; arg.pop_back(); } if (!arg.empty()) { p.toks.push_back(arg); } while (trailing_cnt--) { p.toks.push_back(")"); } } NodePtr expr; if(p.toks.empty()){ expr = std::make_unique<Const>(true); expr = std::make_unique(true); }else{ expr = p.parseExpr(); if(expr && p.more()){ p.error = "unexpected '" + p.peek() + "'"; expr.reset(); } Loading @@ -658,9 +677,9 @@ namespace fresh { namespace cmd { } if(!p.hasAction){ auto a = std::make_unique<And>(); auto a = std::make_unique(); a->l = std::move(expr); a->r = std::make_unique<Print>('\n'); a->r = std::make_unique('\n'); expr = std::move(a); } Loading Loading
commands/filesystem/find.cpp +24 −5 Changes for commands/filesystem/find.cpp: 24 added lines, 5 removed lines. Original line number Diff line number Diff line Loading @@ -634,7 +634,7 @@ namespace fresh { namespace cmd { else break; } std::vector<std::string> paths; std::vector paths; for(; i < argc; ++i){ std::string a = argv[i]; if(a == "!" || a == "(" || (a.size() > 1 && a[0] == '-')) break; Loading @@ -643,11 +643,30 @@ namespace fresh { namespace cmd { if(paths.empty()) paths.push_back("."); Parser p(s); for(; i < argc; ++i) p.toks.push_back(argv[i]); for(; i < argc; ++i) { std::string arg = argv[i]; // Split concatenated leading '(' (e.g. "(-name" -> "(" "-name") while (arg.size() > 1 && arg[0] == '(') { p.toks.push_back("("); arg = arg.substr(1); } // Split concatenated trailing ')' (e.g. "*.S)" -> "*.S" ")") std::size_t trailing_cnt = 0; while (arg.size() > 1 && arg.back() == ')') { trailing_cnt++; arg.pop_back(); } if (!arg.empty()) { p.toks.push_back(arg); } while (trailing_cnt--) { p.toks.push_back(")"); } } NodePtr expr; if(p.toks.empty()){ expr = std::make_unique<Const>(true); expr = std::make_unique(true); }else{ expr = p.parseExpr(); if(expr && p.more()){ p.error = "unexpected '" + p.peek() + "'"; expr.reset(); } Loading @@ -658,9 +677,9 @@ namespace fresh { namespace cmd { } if(!p.hasAction){ auto a = std::make_unique<And>(); auto a = std::make_unique(); a->l = std::move(expr); a->r = std::make_unique<Print>('\n'); a->r = std::make_unique('\n'); expr = std::move(a); } Loading