DEADSOFTWARE

Добавлены открытые массивы
[dsw-obn.git] / oberon.h
index 86f95def78e74ccd07b87b82e8bdeefde13601eb..189369b9c0cb324564b82aca21b21000a416e944 100644 (file)
--- a/oberon.h
+++ b/oberon.h
@@ -39,6 +39,7 @@ struct gen_context_s
        gcc_jit_result * gcc_result;
        gen_block_t * block;
        unsigned record_count;
+       gcc_jit_lvalue * gcc_alloc;
 };
 
 typedef struct oberon_type_s oberon_type_t;
@@ -84,7 +85,8 @@ enum
        OBERON_TYPE_PROCEDURE,
        OBERON_TYPE_ARRAY,
        OBERON_TYPE_RECORD,
-       OBERON_TYPE_POINTER
+       OBERON_TYPE_POINTER,
+       OBERON_TYPE_REAL
 };
 
 /*
@@ -114,6 +116,8 @@ struct oberon_type_s
        oberon_type_t * base;
        oberon_object_t * decl;
 
+       oberon_module_t * module;
+
        int recursive;
        int initialized;
        gen_type_t * gen_type;
@@ -228,7 +232,8 @@ struct oberon_context_s
        char c;
        int token;
        char * string;
-       int integer;
+       long integer;
+       double real;
        /*** END SCANER DATA ***/
 
        /*** PARSER DATA ***/
@@ -238,6 +243,7 @@ struct oberon_context_s
 
        oberon_type_t * int_type;
        oberon_type_t * bool_type;
+       oberon_type_t * real_type;
        oberon_type_t * void_type;
        oberon_type_t * void_ptr_type;
        oberon_scope_t * world_scope;
@@ -255,7 +261,9 @@ enum
        MODE_INDEX,
        MODE_FIELD,
        MODE_DEREF,
-       MODE_NIL
+       MODE_NIL,
+       MODE_NEW,
+       MODE_REAL
 };
 
 enum
@@ -289,9 +297,11 @@ struct oberon_item_s
        int is_item; // == 1
        oberon_type_t * result;
        oberon_expr_t * next;
+       int read_only;
 
        int mode;
-       int integer;
+       long integer;
+       double real;
        int boolean;
        oberon_object_t * var;
 
@@ -306,6 +316,7 @@ struct oberon_oper_s
        int is_item; // == 0
        oberon_type_t * result;
        oberon_expr_t * next;
+       int read_only;
 
        int op;
        oberon_expr_t * left;
@@ -318,6 +329,7 @@ union oberon_expr_u
                int is_item;
                oberon_type_t * result;
                oberon_expr_t * next;
+               int read_only;
        };
 
        oberon_item_t item;