[flang] some debugging after more testing
authorpeter klausler <pklausler@nvidia.com>
Mon, 1 Apr 2019 23:15:47 +0000 (16:15 -0700)
committerpeter klausler <pklausler@nvidia.com>
Mon, 1 Apr 2019 23:23:34 +0000 (16:23 -0700)
Original-commit: flang-compiler/f18@005b841dd1140a809fb8123ed5b02048b8e1a4d3
Reviewed-on: https://github.com/flang-compiler/f18/pull/373

flang/lib/parser/dump-parse-tree.h
flang/lib/parser/parse-tree-visitor.h
flang/lib/parser/stmt-parser.h

index 818e03e..287e9ee 100644 (file)
@@ -790,6 +790,8 @@ public:
   bool Pre(const parser::CharBlock &) { return true; }
   void Post(const parser::CharBlock &) {}
 
+  template<typename T> bool Pre(const parser::Statement<T> &) { return true; }
+  template<typename T> void Post(const parser::Statement<T> &) {}
   template<typename T> bool Pre(const parser::UnlabeledStatement<T> &) {
     return true;
   }
index 4434106..15a760a 100644 (file)
@@ -291,6 +291,23 @@ template<typename T, typename M> void Walk(DefaultChar<T> &x, M &mutator) {
   }
 }
 
+template<typename T, typename V> void Walk(const Statement<T> &x, V &visitor) {
+  if (visitor.Pre(x)) {
+    // N.B. The label, if any, is not visited.
+    Walk(x.source, visitor);
+    Walk(x.statement, visitor);
+    visitor.Post(x);
+  }
+}
+template<typename T, typename M> void Walk(Statement<T> &x, M &mutator) {
+  if (mutator.Pre(x)) {
+    // N.B. The label, if any, is not visited.
+    Walk(x.source, mutator);
+    Walk(x.statement, mutator);
+    mutator.Post(x);
+  }
+}
+
 template<typename T, typename V>
 void Walk(const UnlabeledStatement<T> &x, V &visitor) {
   if (visitor.Pre(x)) {
index 88affd1..021fa7f 100644 (file)
@@ -51,10 +51,8 @@ template<typename PA> inline constexpr auto statement(const PA &p) {
 // unlabeledStatement() is basically statement() for those few situations
 // in Fortran where a statement cannot have a label.
 template<typename PA> inline constexpr auto unlabeledStatement(const PA &p) {
-  return skipStuffBeforeStatement >>
-      sourced(
-          construct<UnlabeledStatement<typename PA::resultType>>(space >> p)) /
-      endOfStmt;
+  return space >>
+      sourced(construct<UnlabeledStatement<typename PA::resultType>>(p));
 }
 
 // This unambiguousStatement() variant of statement() provides better error