DEADSOFTWARE

Исправлен цикл REPEAT, исправлено использование HUGEINT как индекса массива
[dsw-obn.git] / src / oberon.c
index 72bf1c68b5a1f774c8284b4cab65a17c6adfc788..83f39cd2cebea39ac30fd54f1125ba11151bb045 100644 (file)
@@ -1995,7 +1995,7 @@ oberon_make_bin_op(oberon_context_t * ctx, int token, oberon_expr_t * a, oberon_
                                                expr = oberon_new_operator(OP_DIV, result, a, b);
                                                break;
                                        case MOD:
-                                               expr = oberon_new_operator(OP_DIV, result, a, b);
+                                               expr = oberon_new_operator(OP_MOD, result, a, b);
                                                break;
                                        default:
                                                printf("token %i line %i\n", token, ctx -> loc.line);
@@ -2412,8 +2412,7 @@ oberon_proc_decl_body(oberon_context_t * ctx, oberon_object_t * proc)
                oberon_error(ctx, "procedure name not matched");
        }
 
-       if(proc -> type -> base -> class == OBERON_TYPE_NOTYPE
-               && proc -> has_return == 0)
+       if(proc -> type -> base -> class == OBERON_TYPE_NOTYPE)
        {
                oberon_make_return(ctx, NULL);
        }
@@ -3496,7 +3495,7 @@ oberon_statement(oberon_context_t * ctx)
                        oberon_error(ctx, "condition must be boolean");
                }
 
-               oberon_generate_branch(ctx, cond, true, begin);
+               oberon_generate_branch(ctx, cond, false, begin);
        }
        else if(ctx -> token == FOR)
        {
@@ -4536,7 +4535,7 @@ oberon_make_ord_call(oberon_context_t * ctx, int num_args, oberon_expr_t * list_
        }
        else
        {
-               expr = oberon_cast_expr(ctx, arg, ctx -> int_type);
+               expr = oberon_cast_expr(ctx, arg, ctx -> shortint_type);
        }
        return expr;
 }