aboutsummaryrefslogtreecommitdiff
path: root/environment.h
diff options
context:
space:
mode:
Diffstat (limited to 'environment.h')
-rw-r--r--environment.h31
1 files changed, 20 insertions, 11 deletions
diff --git a/environment.h b/environment.h
index a03ccd42..64b59594 100644
--- a/environment.h
+++ b/environment.h
@@ -6,21 +6,30 @@
#include "builtins/table.h"
typedef struct {
- table_t globals, types;
- table_t *locals;
- CORD imports;
- CORD typedefs;
- CORD typecode;
- CORD staticdefs;
- CORD funcs;
- CORD main;
+ CORD imports;
+ CORD typedefs;
+ CORD typecode;
+ CORD staticdefs;
+ CORD funcs;
+ CORD main;
+} compilation_unit_t;
+
+typedef struct {
+ table_t *types, *globals, *locals;
+ compilation_unit_t *code;
} env_t;
typedef struct {
- CORD code;
- type_t *type;
+ CORD code;
+ type_t *type;
} binding_t;
-env_t *new_environment(void);
+env_t *new_compilation_unit(void);
+env_t *fresh_scope(env_t *env);
+__attribute__((noreturn))
+void compiler_err(file_t *f, const char *start, const char *end, const char *fmt, ...);
+binding_t *get_binding(env_t *env, const char *name);
+void set_binding(env_t *env, const char *name, binding_t *binding);
+#define code_err(ast, ...) compiler_err((ast)->file, (ast)->start, (ast)->end, __VA_ARGS__)
// vim: ts=4 sw=0 et cino=L2,l1,(0,W4,m1,\:0