diff options
| author | Bruce Hill <bruce@bruce-hill.com> | 2024-09-08 21:55:15 -0400 |
|---|---|---|
| committer | Bruce Hill <bruce@bruce-hill.com> | 2024-09-08 21:55:15 -0400 |
| commit | a4fff5cb49b25aca4c889ec312ddf4c6c530c69b (patch) | |
| tree | 0ba91f8fcc500383db55fdde1012c19b4d703cb9 /environment.c | |
| parent | eb47f61450349b1be4e72ffe6f36273a1d01a428 (diff) | |
Bugfix for default arguments not supporting enclosing types
Diffstat (limited to 'environment.c')
| -rw-r--r-- | environment.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/environment.c b/environment.c index be0db696..3cb47b90 100644 --- a/environment.c +++ b/environment.c @@ -347,6 +347,7 @@ env_t *load_module_env(env_t *env, ast_t *ast) env_t *module_env = fresh_scope(env); module_env->code = new(compilation_unit_t); module_env->namespace = new(namespace_t, .name=file_base_name(name)); + module_env->namespace_bindings = module_env->locals; Table$str_set(module_env->imports, name, module_env); for (ast_list_t *stmt = Match(ast, Block)->statements; stmt; stmt = stmt->next) @@ -366,6 +367,14 @@ env_t *global_scope(env_t *env) return scope; } +env_t *namespace_scope(env_t *env) +{ + env_t *scope = new(env_t); + *scope = *env; + scope->locals = new(Table_t, .fallback=env->namespace_bindings ? env->namespace_bindings : env->globals); + return scope; +} + env_t *fresh_scope(env_t *env) { env_t *scope = new(env_t); @@ -491,6 +500,7 @@ env_t *namespace_env(env_t *env, const char *namespace_name) *ns_env = *env; ns_env->locals = new(Table_t, .fallback=env->locals); ns_env->namespace = new(namespace_t, .name=namespace_name, .parent=env->namespace); + ns_env->namespace_bindings = ns_env->locals; return ns_env; } |
