aboutsummaryrefslogtreecommitdiffstats
path: root/c_compiler/src
diff options
context:
space:
mode:
authorYann Herklotz <ymherklotz@gmail.com>2017-03-17 12:17:42 +0000
committerYann Herklotz <ymherklotz@gmail.com>2017-03-17 12:17:42 +0000
commit3d77964b5739146a5285d10543df7b51e066c239 (patch)
tree06206f8ff72629ef637bec920657d7f21591f65b /c_compiler/src
parentb23a8f1cedf222b583bc2fedf66b80d2e3c0d076 (diff)
downloadCompiler-3d77964b5739146a5285d10543df7b51e066c239.tar.gz
Compiler-3d77964b5739146a5285d10543df7b51e066c239.zip
Working functions
Diffstat (limited to 'c_compiler/src')
-rw-r--r--c_compiler/src/bindings.cpp5
-rw-r--r--c_compiler/src/function.cpp2
-rw-r--r--c_compiler/src/statement.cpp9
3 files changed, 4 insertions, 12 deletions
diff --git a/c_compiler/src/bindings.cpp b/c_compiler/src/bindings.cpp
index dda2ddc..05bd288 100644
--- a/c_compiler/src/bindings.cpp
+++ b/c_compiler/src/bindings.cpp
@@ -28,11 +28,6 @@ void VariableStackBindings::setStackPosition(int stack_counter)
stack_counter_ = stack_counter;
}
-void VariableStackBindings::resetExpressionStack()
-{
- expression_stack_ = -4;
-}
-
void VariableStackBindings::nextExpressionStackPosition()
{
expression_stack_ -= 4;
diff --git a/c_compiler/src/function.cpp b/c_compiler/src/function.cpp
index 4fb9d95..6f5ba7d 100644
--- a/c_compiler/src/function.cpp
+++ b/c_compiler/src/function.cpp
@@ -83,7 +83,7 @@ VariableStackBindings Function::printAsm(VariableStackBindings bindings) const
// Prints the asm for the compound statement in the function
statement_->printAsm(bindings);
- std::cout << "\tmove\t$sp,$fp\n\tlw\t$31," << memory_needed-4 << "($sp)\n\tlw\t$fp,"
+ std::cout << "0:\n\tmove\t$sp,$fp\n\tlw\t$31," << memory_needed-4 << "($sp)\n\tlw\t$fp,"
<< memory_needed-8 << "($sp)\n\taddiu\t$sp,$sp," << memory_needed
<< "\n\tjr\t$31\n\tnop\n";
diff --git a/c_compiler/src/statement.cpp b/c_compiler/src/statement.cpp
index e4b30ff..9c0db49 100644
--- a/c_compiler/src/statement.cpp
+++ b/c_compiler/src/statement.cpp
@@ -173,10 +173,7 @@ VariableStackBindings ExpressionStatement::printAsm(VariableStackBindings bindin
next_statement_->printAsm(bindings);
if(expression_ != nullptr)
- {
- bindings.resetExpressionStack();
expression_->printAsm(bindings);
- }
return bindings;
}
@@ -222,10 +219,10 @@ VariableStackBindings JumpStatement::printAsm(VariableStackBindings bindings) co
if(next_statement_ != nullptr)
next_statement_->printAsm(bindings);
- if(expression_ != nullptr) {
- bindings.resetExpressionStack();
+ if(expression_ != nullptr)
expression_->printAsm(bindings);
- }
+
+ std::cout << "\tj\t0f\n";
return bindings;
}