X-Git-Url: http://deadsoftware.ru/gitweb?p=dsw-obn.git;a=blobdiff_plain;f=oberon.h;h=9956fdc09d0a9bc77edff1d295ce48b7d4f35ee5;hp=d481e130b6e89c06e8b3227cc882e2be2339ecbc;hb=c15b86365824545bdee7d813ce0c796f1bdff592;hpb=679da1b129ba6077d1c44ebdf260d3813afdcf65 diff --git a/oberon.h b/oberon.h index d481e13..9956fdc 100644 --- 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);