DEADSOFTWARE

Добавлены модули
[dsw-obn.git] / oberon.h
index d481e130b6e89c06e8b3227cc882e2be2339ecbc..9956fdc09d0a9bc77edff1d295ce48b7d4f35ee5 100644 (file)
--- a/oberon.h
+++ b/oberon.h
@@ -136,12 +136,8 @@ enum
        OBERON_CLASS_PARAM,
        OBERON_CLASS_VAR_PARAM,
        OBERON_CLASS_CONST,
-       OBERON_CLASS_FIELD
-};
-
-enum
-{
-       OBERON_SYSPROC_ABS
+       OBERON_CLASS_FIELD,
+       OBERON_CLASS_MODULE
 };
 
 /*
@@ -178,6 +174,8 @@ struct oberon_object_s
        oberon_item_t * value;
        oberon_object_t * next;
 
+       oberon_module_t * module;
+
        gen_var_t * gen_var;
        gen_proc_t * gen_proc;
 };
@@ -193,10 +191,11 @@ struct oberon_object_s
 struct oberon_module_s
 {
        char * name;
+       int ready;
 
        oberon_scope_t * decl;
 
-       void (* begin)();
+       oberon_module_t * next;
 };
 
 /*
@@ -216,8 +215,11 @@ struct oberon_module_s
  *   world_scope -- область видимости "мир" - выше модуля.
  */
 
+typedef const char * (*ModuleImportCallback)(const char * name);
+
 struct oberon_context_s
 {
+       /*** SCANER DATA ***/
        const char * code;
        int code_index;
 
@@ -225,16 +227,20 @@ struct oberon_context_s
        int token;
        char * string;
        int integer;
+       /*** END SCANER DATA ***/
 
+       /*** PARSER DATA ***/
        oberon_scope_t * decl;
        oberon_module_t * mod;
+       /*** END PARSER DATA ***/
 
        oberon_type_t * int_type;
        oberon_type_t * bool_type;
        oberon_type_t * void_type;
        oberon_type_t * void_ptr_type;
        oberon_scope_t * world_scope;
-
+       oberon_module_t * module_list;
+       ModuleImportCallback import_module;
        gen_context_t * gen_context;
 };
 
@@ -316,7 +322,7 @@ union oberon_expr_u
        oberon_oper_t oper;
 };
 
-oberon_context_t * oberon_create_context();
+oberon_context_t * oberon_create_context(ModuleImportCallback import_module);
 void oberon_destroy_context(oberon_context_t * ctx);
 void oberon_register_global_type(oberon_context_t * ctx, oberon_type_t * type);
 oberon_module_t * oberon_compile_module(oberon_context_t * ctx, const char * code);