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.cpp56
1 files changed, 56 insertions, 0 deletions
diff --git a/c_compiler/src/expression.cpp b/c_compiler/src/expression.cpp
index e65d2f7..fe5f1cf 100644
--- a/c_compiler/src/expression.cpp
+++ b/c_compiler/src/expression.cpp
@@ -39,6 +39,12 @@ std::string Expression::id() const
return "";
}
+TypePtr Expression::getType(const VariableStackBindings &) const
+{
+ // by default return largest size, which is 32 bits
+ return std::make_shared<Int>();
+}
+
void Expression::linkExpression(Expression *next_expression)
{
ExpressionPtr expression_ptr(next_expression);
@@ -80,6 +86,11 @@ void OperationExpression::expressionDepth(unsigned &depth_count) const
depth_count = rhs_depth_count;
}
+TypePtr OperationExpression::getType(const VariableStackBindings &bindings) const
+{
+ return lhs_->getType(bindings);
+}
+
ExpressionPtr OperationExpression::getLhs() const
{
return lhs_;
@@ -151,6 +162,11 @@ void PostfixArrayElement::expressionDepth(unsigned &depth_count) const
index_expression_->expressionDepth(depth_count);
}
+TypePtr PostfixArrayElement::getType(const VariableStackBindings &bindings) const
+{
+ return postfix_expression_->getType(bindings);
+}
+
// PostfixFunctionCall
@@ -212,6 +228,11 @@ void PostfixFunctionCall::expressionDepth(unsigned &depth_count) const
argument_expression_list_->expressionDepth(depth_count);
}
+TypePtr PostfixFunctionCall::getType(const VariableStackBindings &) const
+{
+ return std::make_shared<Int>();
+}
+
// Post increment and decrement definition
@@ -239,6 +260,11 @@ VariableStackBindings PostfixPostIncDecExpression::printAsm(VariableStackBinding
return bindings;
}
+TypePtr PostfixPostIncDecExpression::getType(const VariableStackBindings &bindings) const
+{
+ return postfix_expression_->getType(bindings);
+}
+
// Pre increment and decrement implementation
@@ -265,6 +291,11 @@ VariableStackBindings UnaryPreIncDecExpression::printAsm(VariableStackBindings b
return bindings;
}
+TypePtr UnaryPreIncDecExpression::getType(const VariableStackBindings &bindings) const
+{
+ return unary_expression_->getType(bindings);
+}
+
// Operator unary definition
@@ -315,6 +346,11 @@ void OperatorUnaryExpression::stackPosition(VariableStackBindings bindings, unsi
}
}
+TypePtr OperatorUnaryExpression::getType(const VariableStackBindings &bindings) const
+{
+ return cast_expression_->getType(bindings);
+}
+
// CastExpression definition
@@ -335,6 +371,11 @@ void CastExpression::expressionDepth(unsigned &depth_count) const
expression_->expressionDepth(depth_count);
}
+TypePtr CastExpression::getType(const VariableStackBindings &) const
+{
+ return type_;
+}
+
// Additive Expression definition
@@ -664,6 +705,11 @@ VariableStackBindings ConditionalExpression::printAsm(VariableStackBindings bind
return bindings;
}
+TypePtr ConditionalExpression::getType(const VariableStackBindings &bindings) const
+{
+ return std::make_shared<Int>();
+}
+
// Assignment Expression definition
@@ -754,6 +800,11 @@ std::string Identifier::id() const
return id_;
}
+TypePtr Identifier::getType(const VariableStackBindings &bindings) const
+{
+ return bindings.getType(id_);
+}
+
// Constant definition
@@ -773,3 +824,8 @@ int Constant::constantFold() const
{
return constant_;
}
+
+TypePtr Constant::getType(const VariableStackBindings &) const
+{
+ return std::make_shared<Int>();
+}