aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYann Herklotz <ymherklotz@gmail.com>2017-03-27 17:01:18 +0100
committerYann Herklotz <ymherklotz@gmail.com>2017-03-27 17:01:18 +0100
commit2ce4a108c0493ad4524f2faaa98bd5431dd2a26e (patch)
treec67dfef2b4438b91fbf486a1114af2fcbdf7920c
parent77559b13dc6200a83808e5a592a67463b0e89598 (diff)
downloadCompiler-2ce4a108c0493ad4524f2faaa98bd5431dd2a26e.tar.gz
Compiler-2ce4a108c0493ad4524f2faaa98bd5431dd2a26e.zip
Changing declarations
-rw-r--r--c_compiler/include/declaration.hpp2
-rw-r--r--c_compiler/src/declaration.cpp30
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_;
}