X-Git-Url: https://deadsoftware.ru/gitweb?a=blobdiff_plain;f=oberon.h;h=ef9ad7f1c891223eb2241ef8d4020e3855a50645;hb=d1b4e7fdab92589146e19cf4b8b402edf4d6b33d;hp=d481e130b6e89c06e8b3227cc882e2be2339ecbc;hpb=679da1b129ba6077d1c44ebdf260d3813afdcf65;p=dsw-obn.git diff --git a/oberon.h b/oberon.h index d481e13..ef9ad7f 100644 --- a/oberon.h +++ b/oberon.h @@ -114,6 +114,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; @@ -136,12 +138,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 }; /* @@ -161,6 +159,8 @@ struct oberon_object_s { char * name; int class; + int export; + int read_only; int local; int linked; @@ -178,6 +178,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 +195,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 +219,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 +231,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; }; @@ -281,6 +291,7 @@ struct oberon_item_s int is_item; // == 1 oberon_type_t * result; oberon_expr_t * next; + int read_only; int mode; int integer; @@ -298,6 +309,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; @@ -310,13 +322,14 @@ union oberon_expr_u int is_item; oberon_type_t * result; oberon_expr_t * next; + int read_only; }; oberon_item_t item; 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);