diff options
author | Yann Herklotz <ymherklotz@gmail.com> | 2017-03-22 14:17:29 +0000 |
---|---|---|
committer | Yann Herklotz <ymherklotz@gmail.com> | 2017-03-22 14:17:29 +0000 |
commit | f12ccd62ecf08774ce599a2e15d9042500d2760a (patch) | |
tree | 12012ae296025441c3329e23a7290732cf33c36c /c_compiler/src/declaration.cpp | |
parent | 190b7a0e5d45367230795ac0bdf6fc2f248ba9e1 (diff) | |
download | Compiler-f12ccd62ecf08774ce599a2e15d9042500d2760a.tar.gz Compiler-f12ccd62ecf08774ce599a2e15d9042500d2760a.zip |
Adding test and break working
Diffstat (limited to 'c_compiler/src/declaration.cpp')
-rw-r--r-- | c_compiler/src/declaration.cpp | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/c_compiler/src/declaration.cpp b/c_compiler/src/declaration.cpp index 417aa84..eb98480 100644 --- a/c_compiler/src/declaration.cpp +++ b/c_compiler/src/declaration.cpp @@ -9,7 +9,7 @@ // Declaration definition Declaration::Declaration(const std::string& id, Expression* initializer) - : id_(id), initializer_(initializer) + : id_(id), initializer_(initializer), extern_declaration_(false) {} void Declaration::print() const @@ -36,13 +36,15 @@ void Declaration::printXml() const VariableStackBindings Declaration::printAsm(VariableStackBindings bindings, unsigned& label_count) const { (void)label_count; + if(!extern_declaration_) + { + if(initializer_ == nullptr) + printf("\t.comm\t%s,4,4\n", id_.c_str()); + else + printf("\t.data\n\t.globl\t%s\n%s:\n\t.word\t%d\n", + id_.c_str(), id_.c_str(), initializer_->constantFold()); + } - if(initializer_ == nullptr) - printf("\t.comm\t%s,4,4\n", id_.c_str()); - else - printf("\t.data\n\t.globl\t%s\n%s:\n\t.word\t%d\n", - id_.c_str(), id_.c_str(), initializer_->constantFold()); - bindings.insertBinding(id_, type_, -1); return bindings; } @@ -95,6 +97,11 @@ void Declaration::setInitializer(Expression* initializer) initializer_ = expression_ptr; } +void Declaration::setExternDeclaration(bool is_extern) +{ + extern_declaration_ = is_extern; +} + DeclarationPtr Declaration::getNext() const { return next_declaration_; |