diff options
author | Yann Herklotz <ymherklotz@gmail.com> | 2017-03-27 17:01:18 +0100 |
---|---|---|
committer | Yann Herklotz <ymherklotz@gmail.com> | 2017-03-27 17:01:18 +0100 |
commit | 2ce4a108c0493ad4524f2faaa98bd5431dd2a26e (patch) | |
tree | c67dfef2b4438b91fbf486a1114af2fcbdf7920c | |
parent | 77559b13dc6200a83808e5a592a67463b0e89598 (diff) | |
download | Compiler-2ce4a108c0493ad4524f2faaa98bd5431dd2a26e.tar.gz Compiler-2ce4a108c0493ad4524f2faaa98bd5431dd2a26e.zip |
Changing declarations
-rw-r--r-- | c_compiler/include/declaration.hpp | 2 | ||||
-rw-r--r-- | 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<ArrayDeclaration> next_array; + next_array = std::dynamic_pointer_cast<ArrayDeclaration>(declarator_); + if(next_array != nullptr) + next_array->countDeclarations(declaration_count); + declaration_count += size_; } |