From 2ce4a108c0493ad4524f2faaa98bd5431dd2a26e Mon Sep 17 00:00:00 2001 From: Yann Herklotz Date: Mon, 27 Mar 2017 17:01:18 +0100 Subject: Changing declarations --- c_compiler/include/declaration.hpp | 2 +- c_compiler/src/declaration.cpp | 30 +++++++++++++++++++++++++++--- 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/c_compiler/include/declaration.hpp b/c_compiler/include/declaration.hpp index b91835e..9fe4db2 100644 --- a/c_compiler/include/declaration.hpp +++ b/c_compiler/include/declaration.hpp @@ -64,7 +64,7 @@ public: ArrayDeclaration(Declaration *declarator, ExpressionPtr initializer, const int &size=0); virtual void print() const; - virtual void printXml() const {} + virtual void printXml() const; virtual Bindings printAsm(Bindings bindings, int &label_count) const; virtual Bindings localAsm(Bindings bindings, int &label_count) const; virtual void countDeclarations(int &declaration_count) const; 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 next_array; + next_array = std::dynamic_pointer_cast(declarator_); + if(next_array != nullptr) + next_array->countDeclarations(declaration_count); + declaration_count += size_; } -- cgit