bool export = false;
Symbol* sym = NULL;
+ p->curr_block = ssa_block(p);
do
{
name = expect_text(p, IDENT);
}
}
while (matches(p, IDENT));
+ p->curr_block = NULL;
EXIT_RULE();
}
char* name = expect_text(p, IDENT);
bool export = accept(p, '*');
Symbol* proc = symbol_new(p, 0, name, SYM_PROC, export);
-// Type* proctype = calloc(1, sizeof(Type));
Type* proctype = symbol_newtype(p);
proctype->form = FORM_PROC;
proc->type = proctype;
if (accept(p, BEGIN))
{
- p->curr_block = ssa_block(p);
+ //proc_start();
+ SsaBlock* block = ssa_block(p);
p->curr_join = ssa_block(p);
+ block->links[1] = p->curr_join;
+
if (!matches(p, END))
{
- SsaBlock* block = statement_seq(p);
- ssa_print_block(p, block);
- ssa_print_block(p, p->curr_join);
- (void)block;
+ block->links[0] = statement_seq(p);
}
expect(p, END);
+
+ ssa_print_block(p, block);
+ //proc_end();
}
if (!matches(p, END_FILE))
SsaNode* ssa_call(SsaNode* func);
void ssa_call_add(SsaBlock* call, SsaNode* arg);
-
static SsaNode* binop(Parser* p, int op, SsaNode* left, SsaNode* right)
{
SsaNode* node = NULL;