diff --git a/src/oberon-internals.h b/src/oberon-internals.h
index 528842bb6c8b24f0503c85b1b45ca3d0ed9ae551..d9f311911b94022a2ca7a7a7d6fdb08c869c33f2 100644 (file)
--- a/src/oberon-internals.h
+++ b/src/oberon-internals.h
typedef struct oberon_context_t oberon_context_t;
typedef struct oberon_scope_t oberon_scope_t;
+typedef struct oberon_location_t oberon_location_t;
+typedef struct oberon_scanner_t oberon_scanner_t;
typedef struct oberon_item_t oberon_item_t;
typedef struct oberon_oper_t oberon_oper_t;
typedef union oberon_expr_t oberon_expr_t;
gen_module_t * gen_mod;
};
-typedef const char * (*ModuleImportCallback)(const char * name);
+struct oberon_location_t
+{
+ const char * source;
+ int line;
+ int col;
+};
+
+struct oberon_scanner_t
+{
+ char * source;
+ char * code;
+};
+
+typedef oberon_scanner_t * (*ModuleImportCallback)(const char * name);
struct oberon_context_t
{
/*** SCANER DATA ***/
const char * code;
int code_index;
+ oberon_location_t loc;
+ oberon_location_t xloc;
char c;
int token;
MODE_TYPE,
MODE_SET,
MODE_LEN,
- MODE_SYSBYTE
+ MODE_SYSBYTE,
+ MODE_AS
};
enum oberon_operator_kind
OP_GEQ,
OP_CAST,
+ OP_HARDCAST,
OP_IS,
OP_RANGE,
oberon_oper_t oper;
};
+extern oberon_context_t *
+oberon_create_context(ModuleImportCallback import_module);
+
+extern void
+oberon_destroy_context(oberon_context_t * ctx);
+
+extern oberon_module_t *
+oberon_compile_module(oberon_context_t * ctx, oberon_scanner_t * s);
+
#endif // OBERON_INTERNALS_H