aboutsummaryrefslogtreecommitdiffstats
path: root/c_compiler/src/expression.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'c_compiler/src/expression.cpp')
-rw-r--r--c_compiler/src/expression.cpp28
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.