diff options
Diffstat (limited to 'c_compiler/src/expression.cpp')
-rw-r--r-- | c_compiler/src/expression.cpp | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/c_compiler/src/expression.cpp b/c_compiler/src/expression.cpp index cdf7d0a..e00c9b0 100644 --- a/c_compiler/src/expression.cpp +++ b/c_compiler/src/expression.cpp @@ -46,6 +46,16 @@ std::string Expression::id() const return ""; } +ExpressionPtr Expression::getLhs() const +{ + throw std::runtime_error("Error : Cannot get lhs"); +} + +ExpressionPtr Expression::getRhs() const +{ + throw std::runtime_error("Error : Cannot get rhs"); +} + void Expression::linkExpression(Expression *next_expression) { ExpressionPtr expression_ptr(next_expression); @@ -64,6 +74,10 @@ OperationExpression::OperationExpression(Expression* lhs, Expression* rhs) : lhs_(lhs), rhs_(rhs) {} +OperationExpression::OperationExpression(ExpressionPtr lhs, Expression* rhs) + : lhs_(lhs), rhs_(rhs) +{} + int OperationExpression::constantFold() const { throw std::runtime_error("Error : Cannot constant fold expression\n"); @@ -83,6 +97,16 @@ void OperationExpression::expressionDepth(unsigned& depth_count) const depth_count = rhs_depth_count; } +ExpressionPtr OperationExpression::getLhs() const +{ + return lhs_; +} + +ExpressionPtr OperationExpression::getRhs() const +{ + return rhs_; +} + void OperationExpression::evaluateExpression(VariableStackBindings bindings, unsigned& label_count) const { // I can just evaluate the lhs with the same entry stack position @@ -542,6 +566,10 @@ AssignmentExpression::AssignmentExpression(Expression* lhs, Expression* rhs) : OperationExpression(lhs, rhs) {} +AssignmentExpression::AssignmentExpression(ExpressionPtr lhs, Expression* rhs) + : OperationExpression(lhs, rhs) +{} + VariableStackBindings AssignmentExpression::printAsm(VariableStackBindings bindings, unsigned& label_count) const { // TODO add stack and store results in there, also for addition and multiplication. |