oberon_generate_return(oberon_context_t * ctx, oberon_expr_t * expr)
{
gen_module_t * m;
+ char prefix;
m = ctx -> mod -> gen_mod;
if(expr)
{
- oberon_error(ctx, "oberon_generate_return: TODO return expr");
+ push_expr(ctx, m -> fp, expr);
+ prefix = get_prefix(ctx, expr -> result);
+ fprintf(m -> fp, " %creturn\n", prefix);
}
else
{
}
}
-static void push_expr(oberon_context_t * ctx, FILE * fp, oberon_expr_t * expr);
-
static void
push_var(oberon_context_t * ctx, FILE * fp, oberon_object_t * var)
{
push_int(fp, item -> boolean);
break;
case MODE_CALL:
- oberon_error(ctx, "push_item: TODO call");
+ oberon_generate_call_proc(ctx, (oberon_expr_t *) item);
break;
case MODE_INDEX:
oberon_error(ctx, "push_item: TODO index");