ソースを参照

lower L7: an empty procedure body is still a body

PROCEDURE P(...); BEGIN END P had astStmt = NoNode, which LowerDecls
reads as a definition-module heading and skips (no function emitted).
Block now marks an empty BEGIN...END with an empty NkBlock.

Suite 204/204; FIXPOINT OK (3,524,768 bytes).
Eric Streit 4 日 前
親
コミット
7613a86e8f
2 ファイル変更、2596 行追加、2582 行削除
  1. 8 1
      compiler/src/M2.atg
  2. 2588 2581
      compiler/src/M2.lst

+ 8 - 1
compiler/src/M2.atg

@@ -1286,7 +1286,14 @@ PRODUCTIONS
   Block<pn: SymTab.Name>                (. VAR m2: SymTab.Name; .)
     = DeclSeq                           (. astBlkDecls := astDecl;
                                            astStmt := AST.NoNode; .)
-      [ "BEGIN"
+      [ "BEGIN"                         (. (* an empty body is still a
+                                             body: mark it so Lower
+                                             does not read it as a
+                                             definition heading *)
+                                           IF astStmt = AST.NoNode THEN
+                                             astStmt :=
+                                               AST.MakeNode(AST.NkBlock)
+                                           END; .)
         [ StatSeq ] ]
       "END"
       GetIdent<m2>                      (. IF NOT SymTab.Equal(pn, m2) THEN

ファイルの差分が大きいため隠しています
+ 2588 - 2581
compiler/src/M2.lst


この差分においてかなりの量のファイルが変更されているため、一部のファイルを表示していません