DEADSOFTWARE

Добавлен порт COCO/R
[dsw-obn.git] / src / oberon.c
index 58823246bde98fb0e9ebedd171d7fe24e85659c4..cd7e97a18f3cb5531e77bd28d1253a62cdc92b85 100644 (file)
@@ -2447,6 +2447,12 @@ oberon_proc_decl(oberon_context_t * ctx)
        char * name;
        int export;
        int read_only;
+
+       if(ctx -> token == STAR)
+       {
+               oberon_assert_token(ctx, STAR);
+       }
+
        name = oberon_assert_ident(ctx);
        oberon_def(ctx, &export, &read_only);
 
@@ -2631,9 +2637,8 @@ oberon_field_list(oberon_context_t * ctx, oberon_type_t * rec, oberon_scope_t *
 static void
 oberon_type_record_body(oberon_context_t * ctx, oberon_type_t * rec)
 {
-       oberon_scope_t * modscope = ctx -> mod -> decl; 
        oberon_scope_t * oldscope = ctx -> decl;
-       ctx -> decl = modscope;
+       ctx -> decl = oldscope;
 
        if(ctx -> token == LPAREN)
        {
@@ -2674,11 +2679,11 @@ oberon_type_record_body(oberon_context_t * ctx, oberon_type_t * rec)
        this_scope -> parent = NULL;
        this_scope -> parent_type = rec;
 
-       oberon_field_list(ctx, rec, modscope);
+       oberon_field_list(ctx, rec, oldscope);
        while(ctx -> token == SEMICOLON)
        {
                oberon_assert_token(ctx, SEMICOLON);
-               oberon_field_list(ctx, rec, modscope);
+               oberon_field_list(ctx, rec, oldscope);
        }
 
        rec -> scope = this_scope;
@@ -3142,33 +3147,34 @@ oberon_prevent_undeclarated_procedures(oberon_context_t * ctx)
 static void
 oberon_decl_seq(oberon_context_t * ctx)
 {
-       if(ctx -> token == CONST)
+       while(ctx -> token >= CONST && ctx -> token <= VAR)
        {
-               oberon_assert_token(ctx, CONST);
-               while(ctx -> token == IDENT)
+               if(ctx -> token == CONST)
                {
-                       oberon_const_decl(ctx);
-                       oberon_assert_token(ctx, SEMICOLON);
+                       oberon_assert_token(ctx, CONST);
+                       while(ctx -> token == IDENT)
+                       {
+                               oberon_const_decl(ctx);
+                               oberon_assert_token(ctx, SEMICOLON);
+                       }
                }
-       }
-
-       if(ctx -> token == TYPE)
-       {
-               oberon_assert_token(ctx, TYPE);
-               while(ctx -> token == IDENT)
+               else if(ctx -> token == TYPE)
                {
-                       oberon_type_decl(ctx);
-                       oberon_assert_token(ctx, SEMICOLON);
+                       oberon_assert_token(ctx, TYPE);
+                       while(ctx -> token == IDENT)
+                       {
+                               oberon_type_decl(ctx);
+                               oberon_assert_token(ctx, SEMICOLON);
+                       }
                }
-       }
-
-       if(ctx -> token == VAR)
-       {
-               oberon_assert_token(ctx, VAR);
-               while(ctx -> token == IDENT)
+               else if(ctx -> token == VAR)
                {
-                       oberon_var_decl(ctx);
-                       oberon_assert_token(ctx, SEMICOLON);
+                       oberon_assert_token(ctx, VAR);
+                       while(ctx -> token == IDENT)
+                       {
+                               oberon_var_decl(ctx);
+                               oberon_assert_token(ctx, SEMICOLON);
+                       }
                }
        }
 
@@ -4958,7 +4964,10 @@ oberon_create_context(ModuleImportCallback import_module)
                /* Types */
                oberon_new_intrinsic_type(ctx, "BYTE", ctx -> system_byte_type);
                oberon_new_intrinsic_type(ctx, "PTR", ctx -> system_ptr_type);
+               oberon_new_intrinsic_type(ctx, "INT8", ctx -> byte_type);
+               oberon_new_intrinsic_type(ctx, "INT16", ctx -> shortint_type);
                oberon_new_intrinsic_type(ctx, "INT32", ctx -> int_type);
+               oberon_new_intrinsic_type(ctx, "INT64", ctx -> longint_type);
                oberon_new_intrinsic_type(ctx, "SET32", ctx -> set_type);
 
                /* Functions */