X-Git-Url: https://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Foberon.c;h=f67d3927dfdb0d72cbd620aeea0f4f606901376b;hb=f4aa48e4c1e3b81ccbe3da5c33fdaba3a46081dd;hp=1f33a03c9d82bc084e3ffb1b38777b6750bc9c2f;hpb=9f8036eb00032fa7f756113365cb42e05ab262df;p=dsw-obn.git diff --git a/src/oberon.c b/src/oberon.c index 1f33a03..f67d392 100644 --- a/src/oberon.c +++ b/src/oberon.c @@ -2444,6 +2444,11 @@ oberon_formal_pars(oberon_context_t * ctx, oberon_type_t * signature) { oberon_error(ctx, "function result is not type"); } + if(typeobj -> type -> class == OBERON_TYPE_RECORD + || typeobj -> type -> class == OBERON_TYPE_ARRAY) + { + oberon_error(ctx, "records or arrays could not be result of function"); + } signature -> base = typeobj -> type; } } @@ -3438,6 +3443,10 @@ oberon_case_statement(oberon_context_t * ctx) oberon_assert_token(ctx, ELSE); oberon_statement_seq(ctx); } + else + { + oberon_generate_trap(ctx, -1); + } oberon_generate_label(ctx, end); oberon_assert_token(ctx, END); @@ -3504,6 +3513,10 @@ oberon_with_statement(oberon_context_t * ctx) oberon_assert_token(ctx, ELSE); oberon_statement_seq(ctx); } + else + { + oberon_generate_trap(ctx, -2); + } oberon_generate_label(ctx, end); oberon_assert_token(ctx, END); @@ -3644,11 +3657,11 @@ oberon_statement(oberon_context_t * ctx) index = oberon_ident_item(ctx, iname); oberon_assert_token(ctx, ASSIGN); from = oberon_expr(ctx); - oberon_assign(ctx, from, index); oberon_assert_token(ctx, TO); bound = oberon_make_temp_var_item(ctx, index -> result); to = oberon_expr(ctx); - oberon_assign(ctx, to, bound); + oberon_assign(ctx, to, bound); // сначала temp + oberon_assign(ctx, from, index); // потом i if(ctx -> token == BY) { oberon_assert_token(ctx, BY);