diff options
Diffstat (limited to 'c_compiler/src/bindings.cpp')
-rw-r--r-- | c_compiler/src/bindings.cpp | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/c_compiler/src/bindings.cpp b/c_compiler/src/bindings.cpp index e91d408..0fe4c2f 100644 --- a/c_compiler/src/bindings.cpp +++ b/c_compiler/src/bindings.cpp @@ -8,7 +8,7 @@ Bindings::Bindings() : break_label_(""), continue_label_(""), stack_counter_(0), expression_stack_(16) {} -void Bindings::insertBinding(const std::string &id, TypePtr type, const int &stack_position) +void Bindings::insertBinding(const std::string &id,const TypePtr &type, const int &stack_position) { auto binding = bindings_.find(id); @@ -26,6 +26,26 @@ void Bindings::insertBinding(const std::string &id, TypePtr type, const int &sta } } +void Bindings::insertBinding(const std::string &id, const TypePtr &type, const int &stack_position, const std::vector<int> array_sizes) +{ + auto binding = bindings_.find(id); + + if(binding == bindings_.end()) + { + DeclarationData decl_data; + decl_data.type = type; + decl_data.stack_position = stack_position; + decl_data.array_sizes = array_sizes; + bindings_.insert(std::make_pair(id, decl_data)); + } + else + { + (*binding).second.stack_position = stack_position; + (*binding).second.type = type; + (*binding).second.array_sizes = array_sizes; + } +} + int Bindings::insertStringLiteral(const std::string &string_literal) { string_literals.push_back(string_literal); |