index 9812f0ab7f5e2b56c243c94c97e6a0fc8ca86037..dc04ffe3423a03433323e677b23f82cd1e1513a0 100644 (file)
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");