aboutsummaryrefslogtreecommitdiffstats
path: root/c_compiler/src/declaration.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'c_compiler/src/declaration.cpp')
-rw-r--r--c_compiler/src/declaration.cpp30
1 files changed, 27 insertions, 3 deletions
diff --git a/c_compiler/src/declaration.cpp b/c_compiler/src/declaration.cpp
index 9f672db..ca8f1f5 100644
--- a/c_compiler/src/declaration.cpp
+++ b/c_compiler/src/declaration.cpp
@@ -161,11 +161,32 @@ ArrayDeclaration::ArrayDeclaration(Declaration *declarator, ExpressionPtr initia
void ArrayDeclaration::print() const
{
+ if(next_declaration_ != nullptr)
+ next_declaration_->print();
+ if(next_list_declaration_ != nullptr)
+ next_list_declaration_->print();
+
printf("Array Declaration\n");
+ declarator_->print();
}
-Bindings ArrayDeclaration::printAsm(Bindings bindings, int &) const
+void ArrayDeclaration::printXml() const
{
+ if(next_declaration_ != nullptr)
+ next_declaration_->printXml();
+ if(next_list_declaration_ != nullptr)
+ next_list_declaration_->printXml();
+ declarator_->printXml();
+}
+
+Bindings ArrayDeclaration::printAsm(Bindings bindings, int &label_count) const
+{
+ if(next_declaration_ != nullptr)
+ bindings = next_declaration_->printAsm(bindings, label_count);
+ if(next_list_declaration_ != nullptr)
+ bindings = next_list_declaration_->printAsm(bindings, label_count);
+ bindings = declarator_->printAsm(bindings, label_count);
+
return bindings;
}
@@ -173,7 +194,6 @@ Bindings ArrayDeclaration::localAsm(Bindings bindings, int &label_count) const
{
if(next_declaration_ != nullptr)
bindings = next_declaration_->localAsm(bindings, label_count);
-
if(next_list_declaration_ != nullptr)
bindings = next_list_declaration_->localAsm(bindings, label_count);
@@ -210,10 +230,14 @@ void ArrayDeclaration::countDeclarations(int &declaration_count) const
{
if(next_declaration_ != nullptr)
next_declaration_->countDeclarations(declaration_count);
-
if(next_list_declaration_ != nullptr)
next_list_declaration_->countDeclarations(declaration_count);
+ std::shared_ptr<ArrayDeclaration> next_array;
+ next_array = std::dynamic_pointer_cast<ArrayDeclaration>(declarator_);
+ if(next_array != nullptr)
+ next_array->countDeclarations(declaration_count);
+
declaration_count += size_;
}