diff options
author | Yann Herklotz <ymherklotz@gmail.com> | 2017-03-18 14:42:43 +0000 |
---|---|---|
committer | Yann Herklotz <ymherklotz@gmail.com> | 2017-03-18 14:42:43 +0000 |
commit | 835458c3b1f055c2d2548c002120f73bb46877cc (patch) | |
tree | 1e9247e1de742962908cf6637408042f3a320e88 /c_compiler | |
parent | fac528593e216830c89360f5c6ce64dbe7c5176f (diff) | |
download | Compiler-835458c3b1f055c2d2548c002120f73bb46877cc.tar.gz Compiler-835458c3b1f055c2d2548c002120f73bb46877cc.zip |
Fixed compound statement
Diffstat (limited to 'c_compiler')
-rw-r--r-- | c_compiler/src/statement.cpp | 17 |
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); |