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.cpp22
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);