diff options
Diffstat (limited to 'c_compiler/src/declaration.cpp')
-rw-r--r-- | c_compiler/src/declaration.cpp | 50 |
1 files changed, 49 insertions, 1 deletions
diff --git a/c_compiler/src/declaration.cpp b/c_compiler/src/declaration.cpp index b151077..c16c6d5 100644 --- a/c_compiler/src/declaration.cpp +++ b/c_compiler/src/declaration.cpp @@ -8,10 +8,14 @@ // Declaration definition -Declaration::Declaration(const std::string& id, Expression* initializer) +Declaration::Declaration(const std::string &id, Expression *initializer) : id_(id), initializer_(initializer), extern_declaration_(false) {} +Declaration::Declaration(const std::string &id, ExpressionPtr initializer) + :id_(id), initializer_(initializer), extern_declaration_(false) +{} + void Declaration::print() const { if(next_declaration_ != nullptr) @@ -73,6 +77,17 @@ VariableStackBindings Declaration::localAsm(VariableStackBindings bindings, unsi return bindings; } +void Declaration::countDeclarations(unsigned &declaration_count) const +{ + if(next_declaration_ != nullptr) + next_declaration_->countDeclarations(declaration_count); + + if(next_list_declaration_ != nullptr) + next_list_declaration_->countDeclarations(declaration_count); + + ++declaration_count; +} + void Declaration::linkDeclaration(Declaration* next_declaration) { DeclarationPtr decl_ptr(next_declaration); @@ -111,6 +126,11 @@ DeclarationPtr Declaration::getNextListItem() const return next_list_declaration_; } +ExpressionPtr Declaration::getInitializer() const +{ + return initializer_; +} + std::string Declaration::getId() const { return id_; @@ -120,3 +140,31 @@ TypePtr Declaration::getType() const { return type_; } + + +// Array declaration class + +ArrayDeclaration::ArrayDeclaration(const std::string &id, ExpressionPtr initializer, const unsigned &size) + : Declaration(id, initializer), size_(size) +{} + +VariableStackBindings ArrayDeclaration::printAsm(VariableStackBindings bindings, unsigned &label_count) const +{ + return bindings; +} + +VariableStackBindings ArrayDeclaration::localAsm(VariableStackBindings bindings, unsigned &label_count) const +{ + return bindings; +} + +void ArrayDeclaration::countDeclarations(unsigned &declaration_count) const +{ + if(next_declaration_ != nullptr) + next_declaration_->countDeclarations(declaration_count); + + if(next_list_declaration_ != nullptr) + next_list_declaration_->countDeclarations(declaration_count); + + declaration_count += size_; +} |