[C++] Re-parse command when it turns out it is not actually a command
diff --git a/parser.cc b/parser.cc
index d02f622..9ad05cd 100644
--- a/parser.cc
+++ b/parser.cc
@@ -129,6 +129,8 @@
delete make_directives_;
}
+ void set_state(ParserState st) { state_ = st; }
+
private:
void Error(const string& msg) {
ERROR("%s:%d: %s", LOCF(loc_), msg.c_str());
@@ -157,6 +159,7 @@
CommandAST* ast = new CommandAST();
ast->set_loc(loc_);
ast->expr = ParseExpr(line.substr(1), ParseExprOpt::COMMAND);
+ ast->orig = line;
out_asts_->push_back(ast);
return;
}
@@ -518,6 +521,13 @@
parser.Parse();
}
+void ParseNotAfterRule(StringPiece buf, const Loc& loc,
+ vector<AST*>* out_asts) {
+ Parser parser(buf, loc, out_asts);
+ parser.set_state(ParserState::NOT_AFTER_RULE);
+ parser.Parse();
+}
+
void InitParser() {
Parser::Init();
}