diff options
| author | Bruce Hill <bruce@bruce-hill.com> | 2024-06-16 16:08:35 -0400 |
|---|---|---|
| committer | Bruce Hill <bruce@bruce-hill.com> | 2024-06-16 16:08:35 -0400 |
| commit | 9f8be0c5029a69bfa9796ac31866658b9da70390 (patch) | |
| tree | 5a9b74da9d766921daa78f9f6557f80facd5ef36 /environment.c | |
| parent | 7dcb5bea3f32f7f122aea323995fe1da55cb8316 (diff) | |
Support library name as a separate environment field from namespace
Diffstat (limited to 'environment.c')
| -rw-r--r-- | environment.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/environment.c b/environment.c index 1ba4bf05..aca60d28 100644 --- a/environment.c +++ b/environment.c @@ -11,7 +11,7 @@ type_t *TEXT_TYPE = NULL; -env_t *new_compilation_unit(void) +env_t *new_compilation_unit(CORD *libname) { env_t *env = new(env_t); env->code = new(compilation_unit_t); @@ -19,6 +19,7 @@ env_t *new_compilation_unit(void) env->globals = new(table_t); env->locals = new(table_t, .fallback=env->globals); env->imports = new(table_t); + env->libname = libname; if (!TEXT_TYPE) TEXT_TYPE = Type(TextType, .env=namespace_env(env, "Text")); @@ -235,11 +236,13 @@ env_t *new_compilation_unit(void) return env; } -CORD namespace_prefix(namespace_t *ns) +CORD namespace_prefix(CORD *libname, namespace_t *ns) { CORD prefix = CORD_EMPTY; for (; ns; ns = ns->parent) prefix = CORD_all(ns->name, "$", prefix); + if (libname && *libname) + prefix = CORD_all(*libname, "$", prefix); return prefix; } @@ -250,7 +253,7 @@ env_t *load_module_env(env_t *env, ast_t *ast) if (cached) return cached; env_t *module_env = fresh_scope(env); module_env->code = new(compilation_unit_t); - module_env->namespace = new(namespace_t, .name=name, .parent=env->namespace), + module_env->namespace = new(namespace_t, .name=name); Table$str_set(module_env->imports, name, module_env); for (ast_list_t *stmt = Match(ast, Block)->statements; stmt; stmt = stmt->next) |
