p->curr_join = p->curr_join->next;
expect(p, END);
}
+ else if (matches(p, END) || matches(p,RETURN))
+ {
+ /* empty sequence */
+ }
else /* assignments/expressions */
{
SsaNode* expr = expression(p);
SsaBlock* block = ssa_block(p);
p->curr_join = ssa_block(p);
block->links[1] = p->curr_join;
-
- if (!matches(p, RETURN) && !matches(p, END))
- {
- block->links[0] = statement_seq(p);
- }
- else
- {
- block->links[0] = ssa_block(p);
- p->curr_block = block->links[0];
- }
-
+ block->links[0] = statement_seq(p);
if (proctype->base != &VoidType)
{
expect(p, RETURN);
expect(p, END);
ssa_print_graph(p, block);
-// /* parse the body of the procedure */
-// expect(p, BEGIN);
-// proc->value = ast_block();
-// if (!matches(p, RETURN) && !matches(p, END))
-// {
-// ast_block_add(proc->value, statement_seq(p));
-// }
-// if (proctype->base != &VoidType)
-// {
-// expect(p, RETURN);
-// AstNode* retval = expression(p);
-// check_type(p, proctype->base, retval);
-// ast_block_add(proc->value, ast_return(retval));
-// expect(p, ';');
-// }
-// expect(p, END);
-// symbol_closescope(p, scope);
-//
-// ast_print(p, proc->value);
-// (void)proc->value;
-
EXIT_RULE();
}