aboutsummaryrefslogtreecommitdiffstats
path: root/c_compiler/src/bindings.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'c_compiler/src/bindings.cpp')
-rw-r--r--c_compiler/src/bindings.cpp17
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()