diff options
Diffstat (limited to 'c_compiler/src/bindings.cpp')
-rw-r--r-- | c_compiler/src/bindings.cpp | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/c_compiler/src/bindings.cpp b/c_compiler/src/bindings.cpp index 944ce56..333f21d 100644 --- a/c_compiler/src/bindings.cpp +++ b/c_compiler/src/bindings.cpp @@ -9,11 +9,20 @@ VariableStackBindings::VariableStackBindings() void VariableStackBindings::insertBinding(std::string id, TypePtr type, int stack_position) { - DeclarationData decl_data; - decl_data.type = type; - decl_data.stack_position = stack_position; + auto binding = bindings_.find(id); - bindings_.insert(std::pair<std::string, DeclarationData>(id, decl_data)); + if(binding == bindings_.end()) + { + DeclarationData decl_data; + decl_data.type = type; + decl_data.stack_position = stack_position; + bindings_.insert(std::pair<std::string, DeclarationData>(id, decl_data)); + } + else + { + (*binding).second.stack_position = stack_position; + (*binding).second.type = type; + } } void VariableStackBindings::increaseStackPosition() |