diff options
| author | Bruce Hill <bruce@bruce-hill.com> | 2025-02-09 13:57:54 -0500 |
|---|---|---|
| committer | Bruce Hill <bruce@bruce-hill.com> | 2025-02-09 13:57:54 -0500 |
| commit | be87d8169d98eb358891d155ce84cff311ec27c2 (patch) | |
| tree | a609244e8c1eae1f2a8679da4b8bdc83fdc8cf20 /environment.c | |
| parent | 6310f0565641dd64ae435c6a352c76e54fb9ddba (diff) | |
Convert the logic for finding closed variables to a more pure functional
style with fewer side effects
Diffstat (limited to 'environment.c')
| -rw-r--r-- | environment.c | 19 |
1 files changed, 3 insertions, 16 deletions
diff --git a/environment.c b/environment.c index 86a7ff16..1b33fd7a 100644 --- a/environment.c +++ b/environment.c @@ -646,22 +646,9 @@ env_t *namespace_env(env_t *env, const char *namespace_name) return ns_env; } -binding_t *get_binding(env_t *env, const char *name) +PUREFUNC binding_t *get_binding(env_t *env, const char *name) { - binding_t *b = Table$str_get(*env->locals, name); - if (!b) { - for (fn_ctx_t *fn_ctx = env->fn_ctx; fn_ctx; fn_ctx = fn_ctx->parent) { - if (!fn_ctx->closure_scope) continue; - b = Table$str_get(*fn_ctx->closure_scope, name); - if (b) { - Table$str_set(env->fn_ctx->closed_vars, name, b); - binding_t *b2 = new(binding_t, .type=b->type, .code=CORD_all("userdata->", name)); - Table$str_set(env->locals, name, b2); - return b2; - } - } - } - return b; + return Table$str_get(*env->locals, name); } binding_t *get_namespace_binding(env_t *env, ast_t *self, const char *name) @@ -702,7 +689,7 @@ binding_t *get_namespace_binding(env_t *env, ast_t *self, const char *name) return NULL; } -binding_t *get_lang_escape_function(env_t *env, const char *lang_name, type_t *type_to_escape) +PUREFUNC binding_t *get_lang_escape_function(env_t *env, const char *lang_name, type_t *type_to_escape) { if (!lang_name) lang_name = "Text"; binding_t *typeinfo = get_binding(env, lang_name); |
