diff options
| author | Bruce Hill <bruce@bruce-hill.com> | 2024-04-23 13:04:31 -0400 |
|---|---|---|
| committer | Bruce Hill <bruce@bruce-hill.com> | 2024-04-23 13:04:31 -0400 |
| commit | 005427744daa8d70abeffde9a05831b4bdb0682f (patch) | |
| tree | a64e9b9b29c0b0f16ce1226d958393f94a9c7805 | |
| parent | 7a175d3b45287b02c5981d09d8120553583f50d5 (diff) | |
Prevent shadowing variables
| -rw-r--r-- | typecheck.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/typecheck.c b/typecheck.c index e0235308..229a8cd2 100644 --- a/typecheck.c +++ b/typecheck.c @@ -111,9 +111,11 @@ void bind_statement(env_t *env, ast_t *statement) } case Declare: { auto decl = Match(statement, Declare); + const char *name = Match(decl->var, Var)->name; + if (get_binding(env, name)) + code_err(decl->var, "A %T called '%s' has already been defined", get_binding(env, name)->type, name); bind_statement(env, decl->value); type_t *type = get_type(env, decl->value); - const char *name = Match(decl->var, Var)->name; CORD code = CORD_cat(env->scope_prefix ? env->scope_prefix : "$", name); set_binding(env, name, new(binding_t, .type=type, .code=code)); break; |
