[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();
 }