diff options
Diffstat (limited to 'c_compiler/src/expression.cpp')
-rw-r--r-- | c_compiler/src/expression.cpp | 56 |
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>(); +} |