[flang] cleanup after extraction and merging
authorpeter klausler <pklausler@nvidia.com>
Wed, 20 Mar 2019 18:49:32 +0000 (11:49 -0700)
committerpeter klausler <pklausler@nvidia.com>
Wed, 20 Mar 2019 18:49:32 +0000 (11:49 -0700)
Original-commit: flang-compiler/f18@6314daadc1a610d1c0e97780ff3d5eba398e7407
Reviewed-on: https://github.com/flang-compiler/f18/pull/346
Tree-same-pre-rewrite: false

flang/lib/parser/parse-tree.cc
flang/lib/parser/parse-tree.h

index a4a6cb4..114dc20 100644 (file)
@@ -18,7 +18,7 @@
 #include "../common/indirection.h"
 #include <algorithm>
 
-// So "delete Expr::typedExpr;" calls an external destructor.
+// So "delete Expr;" calls an external destructor for its typedExpr.
 namespace Fortran::evaluate {
 struct GenericExprWrapper {
   ~GenericExprWrapper();
index 0d9bf5a..421753f 100644 (file)
@@ -549,7 +549,7 @@ WRAPPER_CLASS(NamedConstant, Name);
 // R1023 defined-binary-op -> . letter [letter]... .
 // R1414 local-defined-operator -> defined-unary-op | defined-binary-op
 // R1415 use-defined-operator -> defined-unary-op | defined-binary-op
-// The Name here is stored without the dots; e.g., FOO, not .FOO.
+// The Name here is stored with the dots; e.g., .FOO.
 WRAPPER_CLASS(DefinedOpName, Name);
 
 // R608 intrinsic-operator ->
@@ -2389,10 +2389,10 @@ struct ComputedGotoStmt {
 };
 
 // R1162 stop-code -> scalar-default-char-expr | scalar-int-expr
-struct StopCode {
-  UNION_CLASS_BOILERPLATE(StopCode);
-  std::variant<ScalarDefaultCharExpr, ScalarIntExpr> u;
-};
+// We can't distinguish character expressions from integer
+// expressions during parsing, so we just parse an expr and
+// check its type later.
+WRAPPER_CLASS(StopCode, Scalar<Expr>);
 
 // R1160 stop-stmt -> STOP [stop-code] [, QUIET = scalar-logical-expr]
 // R1161 error-stop-stmt ->
@@ -2879,6 +2879,7 @@ struct GenericSpec {
   EMPTY_CLASS(ReadUnformatted);
   EMPTY_CLASS(WriteFormatted);
   EMPTY_CLASS(WriteUnformatted);
+  CharBlock source;
   std::variant<Name, DefinedOperator, Assignment, ReadFormatted,
       ReadUnformatted, WriteFormatted, WriteUnformatted>
       u;