aboutsummaryrefslogtreecommitdiffstats
path: root/c_compiler
diff options
context:
space:
mode:
authorYann Herklotz <ymherklotz@gmail.com>2017-03-18 14:42:43 +0000
committerYann Herklotz <ymherklotz@gmail.com>2017-03-18 14:42:43 +0000
commit835458c3b1f055c2d2548c002120f73bb46877cc (patch)
tree1e9247e1de742962908cf6637408042f3a320e88 /c_compiler
parentfac528593e216830c89360f5c6ce64dbe7c5176f (diff)
downloadCompiler-835458c3b1f055c2d2548c002120f73bb46877cc.tar.gz
Compiler-835458c3b1f055c2d2548c002120f73bb46877cc.zip
Fixed compound statement
Diffstat (limited to 'c_compiler')
-rw-r--r--c_compiler/src/statement.cpp17
1 files changed, 14 insertions, 3 deletions
diff --git a/c_compiler/src/statement.cpp b/c_compiler/src/statement.cpp
index 2720570..84f517a 100644
--- a/c_compiler/src/statement.cpp
+++ b/c_compiler/src/statement.cpp
@@ -59,8 +59,7 @@ VariableStackBindings CompoundStatement::printAsm(VariableStackBindings bindings
if(next_statement_ != nullptr)
next_statement_->printAsm(bindings, label_count);
- else
- std::cout << "# No statement\n";
+
if(declaration_ != nullptr)
bindings = declaration_->printAsm(bindings, label_count);
@@ -134,6 +133,9 @@ VariableStackBindings SelectionStatement::printAsm(VariableStackBindings binding
unsigned& label_count) const
{
std::cout << "# If Statement\n";
+ if(next_statement_ != nullptr)
+ next_statement_->printAsm(bindings, label_count);
+
unsigned if_label = label_count++;
condition_->printAsm(bindings, label_count);
@@ -192,6 +194,9 @@ VariableStackBindings ExpressionStatement::printAsm(VariableStackBindings bindin
unsigned& label_count) const
{
std::cout << "# Expression Statement\n";
+ if(next_statement_ != nullptr)
+ next_statement_->printAsm(bindings, label_count);
+
if(expression_ != nullptr)
expression_->printAsm(bindings, label_count);
@@ -314,7 +319,10 @@ WhileLoop::WhileLoop(Expression* condition, Statement* statement)
VariableStackBindings WhileLoop::printAsm(VariableStackBindings bindings,
unsigned& label_count) const
-{
+{
+ if(next_statement_ != nullptr)
+ next_statement_->printAsm(bindings, label_count);
+
int while_label = label_count++;
std::cout << "\tb\t$" << while_label << "_while_cond\n\tnop\n$" << while_label
@@ -334,6 +342,9 @@ ForLoop::ForLoop(Expression* initializer, Expression* condition,
VariableStackBindings ForLoop::printAsm(VariableStackBindings bindings, unsigned& label_count) const
{
+ if(next_statement_ != nullptr)
+ next_statement_->printAsm(bindings, label_count);
+
int for_label = label_count++;
initializer_->printAsm(bindings, label_count);