aboutsummaryrefslogtreecommitdiffstats
path: root/c_compiler/src/declaration.cpp
diff options
context:
space:
mode:
authorYann Herklotz <ymherklotz@gmail.com>2017-03-22 14:17:29 +0000
committerYann Herklotz <ymherklotz@gmail.com>2017-03-22 14:17:29 +0000
commitf12ccd62ecf08774ce599a2e15d9042500d2760a (patch)
tree12012ae296025441c3329e23a7290732cf33c36c /c_compiler/src/declaration.cpp
parent190b7a0e5d45367230795ac0bdf6fc2f248ba9e1 (diff)
downloadCompiler-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.cpp21
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_;