From ea21d2beb6cbdac8f5b6811a0f01aa6d2ee2ddf3 Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Mon, 18 Jan 2016 17:04:37 -0700 Subject: add error for shadowing a type closes #61 --- src/analyze.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'src') diff --git a/src/analyze.cpp b/src/analyze.cpp index 17a703c439..06f27b323e 100644 --- a/src/analyze.cpp +++ b/src/analyze.cpp @@ -2072,6 +2072,18 @@ static VariableTableEntry *add_local_var(CodeGen *g, AstNode *source_node, Block if (existing_var) { add_node_error(g, source_node, buf_sprintf("redeclaration of variable '%s'", buf_ptr(name))); variable_entry->type = g->builtin_types.entry_invalid; + } else { + auto primitive_table_entry = g->primitive_type_table.maybe_get(name); + TypeTableEntry *type; + if (primitive_table_entry) { + type = primitive_table_entry->value; + } else { + type = find_container(context, name); + } + if (type) { + add_node_error(g, source_node, buf_sprintf("variable shadows type '%s'", buf_ptr(&type->name))); + variable_entry->type = g->builtin_types.entry_invalid; + } } context->variable_table.put(&variable_entry->name, variable_entry); -- cgit v1.2.3