--- : info maybe_formals '{' body '}'
--- { do (info_lbl, info1, info2) <- $1;
--- formals <- sequence $2;
--- stmts <- getCgStmtsEC (loopDecls $4)
--- blks <- code (cgStmtsToBlocks stmts)
--- code (emitInfoTableAndCode info_lbl info1 info2 formals blks) }
---
--- | info maybe_formals ';'
--- { do (info_lbl, info1, info2) <- $1;
--- formals <- sequence $2;
--- code (emitInfoTableAndCode info_lbl info1 info2 formals []) }
-
- : NAME maybe_formals '{' body '}'
- { do formals <- sequence $2;
- stmts <- getCgStmtsEC (loopDecls $4);
- blks <- code (cgStmtsToBlocks stmts);
- code (emitProc CmmNonInfo (mkRtsCodeLabelFS $1) formals blks) }
-
-info :: { ExtFCode (CLabel, [CmmLit],[CmmLit]) }
+ : info maybe_formals_without_kinds maybe_gc_block maybe_frame '{' body '}'
+ { do ((entry_ret_label, info, live, formals, gc_block, frame), stmts) <-
+ getCgStmtsEC' $ loopDecls $ do {
+ (entry_ret_label, info, live) <- $1;
+ formals <- sequence $2;
+ gc_block <- $3;
+ frame <- $4;
+ $6;
+ return (entry_ret_label, info, live, formals, gc_block, frame) }
+ blks <- code (cgStmtsToBlocks stmts)
+ code (emitInfoTableAndCode entry_ret_label (CmmInfo gc_block frame info) formals blks) }
+
+ | info maybe_formals_without_kinds ';'
+ { do (entry_ret_label, info, live) <- $1;
+ formals <- sequence $2;
+ code (emitInfoTableAndCode entry_ret_label (CmmInfo Nothing Nothing info) formals []) }
+
+ | NAME maybe_formals_without_kinds maybe_gc_block maybe_frame '{' body '}'
+ { do ((formals, gc_block, frame), stmts) <-
+ getCgStmtsEC' $ loopDecls $ do {
+ formals <- sequence $2;
+ gc_block <- $3;
+ frame <- $4;
+ $6;
+ return (formals, gc_block, frame) }
+ blks <- code (cgStmtsToBlocks stmts)
+ code (emitProc (CmmInfo gc_block frame CmmNonInfoTable) (mkRtsCodeLabelFS $1) formals blks) }
+
+info :: { ExtFCode (CLabel, CmmInfoTable, [Maybe LocalReg]) }