X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=oberon.h;h=f29aa4d4a780b18af1a526bcbc9556580f3d94ff;hb=90ad7d921e60c24b11bc08cd173c0e1c80f9b06d;hp=7ed16291b9b4da45a0c1b9bb7db798b1e427f067;hpb=390a7e053165954865bc013a7c7057982c206453;p=dsw-obn.git diff --git a/oberon.h b/oberon.h index 7ed1629..f29aa4d 100644 --- a/oberon.h +++ b/oberon.h @@ -1,39 +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_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 +{ + OBERON_CLASS_VAR, + OBERON_CLASS_TYPE, + OBERON_CLASS_PROC +}; + +struct oberon_object_s { - char * name; - oberon_type_t * type; - oberon_var_t * next; + char * name; + int class; + + 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_scope_t * decl; void (* begin)(); }; @@ -48,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; }; @@ -60,7 +80,8 @@ struct oberon_context_s enum { MODE_VAR, MODE_INTEGER, - MODE_BOOLEAN + MODE_BOOLEAN, + MODE_CALL }; enum { @@ -93,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