diff options
Diffstat (limited to 'c_compiler/src/bindings.cpp')
-rw-r--r-- | c_compiler/src/bindings.cpp | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/c_compiler/src/bindings.cpp b/c_compiler/src/bindings.cpp index 4315407..80375e7 100644 --- a/c_compiler/src/bindings.cpp +++ b/c_compiler/src/bindings.cpp @@ -1,10 +1,12 @@ #include "bindings.hpp" +#include <iostream> + // VariableStackBindings definition VariableStackBindings::VariableStackBindings() - : stack_counter(4) + : stack_counter(4), current_register(2) {} void VariableStackBindings::insertBinding(std::string id, TypePtr type, int32_t stack_position) @@ -21,6 +23,21 @@ void VariableStackBindings::increaseStackPosition() stack_counter += 4; } +void VariableStackBindings::resetRegister() +{ + current_register = 2; +} + +void VariableStackBindings::increaseRegister() +{ + if(current_register == 15) + current_register = 24; + else if(current_register == 25) + std::cerr << "Error : cannot allocate more registers" << std::endl; + else + current_register++; +} + int32_t VariableStackBindings::getCurrentStackPosition() const { return stack_counter; @@ -36,6 +53,11 @@ int32_t VariableStackBindings::getStackPosition(const std::string &id) const else return 0; } +int8_t VariableStackBindings::getCurrentRegister() const +{ + return current_register; +} + bool VariableStackBindings::bindingExists(const std::string &id) const { auto binding = bindings.find(id); |