diff --git a/oberon.h b/oberon.h
index ec742c6bd7af90c18b3850a37fe2163b12407de4..b2f0965f3c6acadd009dd22e99d4e5a1df8bc270 100644 (file)
--- a/oberon.h
+++ b/oberon.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_module_s oberon_module_t;
typedef struct oberon_context_s oberon_context_t;
void * gen_var;
};
+struct oberon_proc_s
+{
+ char * name;
+
+ oberon_proc_t * next;
+
+ void * gen_proc;
+};
+
struct oberon_module_s
{
char * name;
+
oberon_var_t * vars;
+ oberon_proc_t * procs;
void (* begin)();
};
oberon_module_t * mod;
oberon_type_t * types;
+ oberon_type_t * int_type;
+ oberon_type_t * bool_type;
+
void * gen_context;
};
MODE_BOOLEAN
};
-typedef struct
+enum {
+ OP_LOGIC_NOT,
+ OP_UNARY_MINUS,
+ OP_ADD,
+ OP_SUB,
+ OP_MUL,
+ OP_DIV,
+ OP_MOD,
+ OP_LOGIC_AND,
+ OP_LOGIC_OR,
+ OP_EQ,
+ OP_NEQ,
+ OP_LSS,
+ OP_LEQ,
+ OP_GRT,
+ OP_GEQ
+};
+
+typedef struct oberon_item_s oberon_item_t;
+typedef struct oberon_oper_s oberon_oper_t;
+typedef union oberon_expr_u oberon_expr_t;
+
+struct oberon_item_s
{
+ int is_item;
+ oberon_type_t * result;
+
int mode;
int integer;
int boolean;
oberon_var_t * var;
-} oberon_item_t;
+};
+
+struct oberon_oper_s
+{
+ int is_item;
+ oberon_type_t * result;
+
+ int op;
+ oberon_expr_t * left;
+ oberon_expr_t * right;
+};
+
+union oberon_expr_u
+{
+ struct {
+ int is_item;
+ oberon_type_t * result;
+ };
+
+ oberon_item_t item;
+ oberon_oper_t oper;
+};
oberon_context_t * oberon_create_context();
void oberon_destroy_context(oberon_context_t * ctx);