DEADSOFTWARE

Добавлены области видимости и вызовы процедур
[dsw-obn.git] / oberon.h
index b2f0965f3c6acadd009dd22e99d4e5a1df8bc270..f29aa4d4a780b18af1a526bcbc9556580f3d94ff 100644 (file)
--- a/oberon.h
+++ b/oberon.h
@@ -1,51 +1,58 @@
 #ifndef EMBEDED_OBERON_SCRIPT_H
 #define EMBEDED_OBERON_SCRIPT_H
 
-typedef struct oberon_var_s oberon_var_t;
 typedef struct oberon_type_s oberon_type_t;
-typedef struct oberon_proc_s oberon_proc_t;
+typedef struct oberon_object_s oberon_object_t;
 typedef struct oberon_module_s oberon_module_t;
 typedef struct oberon_context_s oberon_context_t;
+typedef struct oberon_scope_s oberon_scope_t;
 
-enum {
+struct oberon_scope_s
+{
+       oberon_context_t * ctx;
+       oberon_object_t * list;
+       oberon_scope_t * up;
+};
+
+enum
+{
        OBERON_TYPE_INTEGER,
        OBERON_TYPE_BOOLEAN,
 };
 
 struct oberon_type_s
 {
-       char * name;
        int class;
        int size;
-       oberon_type_t * next;
 
        void * gen_type;
 };
 
-struct oberon_var_s
+enum
 {
-        char * name;
-        oberon_type_t * type;
-        oberon_var_t * next;
-
-       void * gen_var;
+       OBERON_CLASS_VAR,
+       OBERON_CLASS_TYPE,
+       OBERON_CLASS_PROC
 };
 
-struct oberon_proc_s
+struct oberon_object_s
 {
        char * name;
+       int class;
 
-       oberon_proc_t * next;
+       oberon_type_t * type;
 
+       void * gen_var;
        void * gen_proc;
+
+       oberon_object_t * next;
 };
 
 struct oberon_module_s
 {
        char * name;
 
-       oberon_var_t * vars;
-       oberon_proc_t * procs;
+       oberon_scope_t * decl;
 
        void (* begin)();
 };
@@ -60,11 +67,12 @@ struct oberon_context_s
        char * string;
        int integer;
 
+       oberon_scope_t * decl;
        oberon_module_t * mod;
-       oberon_type_t * types;
 
        oberon_type_t * int_type;
        oberon_type_t * bool_type;
+       oberon_scope_t * world_scope;
 
        void * gen_context;
 };
@@ -72,7 +80,8 @@ struct oberon_context_s
 enum {
        MODE_VAR,
        MODE_INTEGER,
-       MODE_BOOLEAN
+       MODE_BOOLEAN,
+       MODE_CALL
 };
 
 enum {
@@ -105,7 +114,7 @@ struct oberon_item_s
        int mode;
        int integer;
        int boolean;
-       oberon_var_t * var;
+       oberon_object_t * var;
 };
 
 struct oberon_oper_s