DEADSOFTWARE

Реализованы неявные объявления типов наперёд
[dsw-obn.git] / oberon.h
index becdd78e6cf530ec53d67ab0ce1ed9b86ab818ef..41cec621e9dc6983297d651bcfe9f955e078d497 100644 (file)
--- a/oberon.h
+++ b/oberon.h
@@ -15,20 +15,21 @@ typedef struct
 typedef struct
 {
        gcc_jit_type * gcc_type;
+       gcc_jit_struct * gcc_struct;
 } gen_type_t;
 
 typedef struct
 {
-        char stub[16];
-        gcc_jit_lvalue * gcc_lvalue;
-        gcc_jit_param * gcc_param;
+       gcc_jit_lvalue * gcc_lvalue;
+       gcc_jit_param * gcc_param;
+       gcc_jit_field * gcc_field;
 } gen_var_t;
 
 typedef struct
 {
-        gcc_jit_context * gcc_context;
-        gcc_jit_block * gcc_block;
-        gcc_jit_result * gcc_result;
+       gcc_jit_context * gcc_context;
+       gcc_jit_block * gcc_block;
+       gcc_jit_result * gcc_result;
 } gen_context_t;
 
 typedef struct oberon_type_s oberon_type_t;
@@ -69,7 +70,9 @@ enum
        OBERON_TYPE_INTEGER,
        OBERON_TYPE_BOOLEAN,
        OBERON_TYPE_PROCEDURE,
-       OBERON_TYPE_ARRAY
+       OBERON_TYPE_ARRAY,
+       OBERON_TYPE_RECORD,
+       OBERON_TYPE_POINTER
 };
 
 /*
@@ -101,6 +104,8 @@ struct oberon_type_s
        oberon_type_t * base;
        oberon_object_t * decl;
 
+       int recursive;
+       int initialized;
        gen_type_t * gen_type;
 };
 
@@ -120,7 +125,8 @@ enum
        OBERON_CLASS_PROC,
        OBERON_CLASS_PARAM,
        OBERON_CLASS_VAR_PARAM,
-       OBERON_CLASS_CONST
+       OBERON_CLASS_CONST,
+       OBERON_CLASS_FIELD
 };
 
 /*
@@ -138,6 +144,7 @@ struct oberon_object_s
        char * name;
        int class;
 
+       int linked;
        oberon_type_t * type;
        oberon_item_t * value;
        oberon_object_t * next;
@@ -209,7 +216,9 @@ enum
        MODE_VAR,
        MODE_INTEGER,
        MODE_BOOLEAN,
-       MODE_CALL
+       MODE_CALL,
+       MODE_INDEX,
+       MODE_FIELD
 };
 
 enum
@@ -242,6 +251,8 @@ struct oberon_item_s
        int boolean;
        oberon_object_t * var;
 
+       oberon_item_t * parent;
+
        int num_args;
        oberon_expr_t * args;
 };