aboutsummaryrefslogtreecommitdiffstats
path: root/c_compiler/include/expression.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'c_compiler/include/expression.hpp')
-rw-r--r--c_compiler/include/expression.hpp110
1 files changed, 61 insertions, 49 deletions
diff --git a/c_compiler/include/expression.hpp b/c_compiler/include/expression.hpp
index 1377a22..0ded5c2 100644
--- a/c_compiler/include/expression.hpp
+++ b/c_compiler/include/expression.hpp
@@ -25,10 +25,10 @@ public:
virtual int constantFold() const;
virtual void print() const;
virtual void printXml() const;
- virtual void countArguments(unsigned& argument_count) const;
- virtual void expressionDepth(unsigned& depth_count) const;
+ virtual void countArguments(unsigned &argument_count) const;
+ virtual void expressionDepth(unsigned &depth_count) const;
virtual int postfixStackPosition(VariableStackBindings bindings) const;
- virtual void setPostfixExpression(Expression* postfix_expression);
+ virtual void setPostfixExpression(Expression *postfix_expression);
virtual std::string id() const;
virtual ExpressionPtr getLhs() const;
virtual ExpressionPtr getRhs() const;
@@ -44,17 +44,17 @@ protected:
ExpressionPtr lhs_;
ExpressionPtr rhs_;
public:
- OperationExpression(Expression* lhs, Expression* rhs);
- OperationExpression(ExpressionPtr lhs, Expression* rhs);
+ OperationExpression(Expression *lhs, Expression *rhs);
+ OperationExpression(ExpressionPtr lhs, Expression *rhs);
- virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned& label_count) const = 0;
+ virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned &label_count) const = 0;
virtual int constantFold() const;
- virtual void expressionDepth(unsigned& depth_count) const;
+ virtual void expressionDepth(unsigned &depth_count) const;
virtual ExpressionPtr getLhs() const;
virtual ExpressionPtr getRhs() const;
- void evaluateExpression(VariableStackBindings bindings, unsigned& label_count) const;
+ void evaluateExpression(VariableStackBindings bindings, unsigned &label_count) const;
};
@@ -63,7 +63,7 @@ class PostfixArrayElement : public Expression
public:
PostfixArrayElement();
- virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned& label_count) const;
+ virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned &label_count) const;
};
@@ -74,12 +74,12 @@ private:
ExpressionPtr argument_expression_list_;
public:
- PostfixFunctionCall(Expression* argument_expression_list = nullptr);
+ PostfixFunctionCall(Expression *argument_expression_list = nullptr);
- virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned& label_count) const;
- virtual void countArguments(unsigned& argument_count) const;
+ virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned &label_count) const;
+ virtual void countArguments(unsigned &argument_count) const;
- void setPostfixExpression(Expression* postfix_expression);
+ void setPostfixExpression(Expression *postfix_expression);
};
class PostfixPostIncDecExpression : public Expression
@@ -89,9 +89,9 @@ private:
ExpressionPtr postfix_expression_;
public:
- PostfixPostIncDecExpression(const std::string& _operator, Expression* postfix_expression);
+ PostfixPostIncDecExpression(const std::string &_operator, Expression *postfix_expression);
- virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned& label_count) const;
+ virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned &label_count) const;
};
@@ -103,9 +103,21 @@ private:
ExpressionPtr unary_expression_;
public:
- UnaryPreIncDecExpression(const std::string& _operator, Expression* unary_expression);
+ UnaryPreIncDecExpression(const std::string &_operator, Expression *unary_expression);
+
+ virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned &label_count) const;
+};
+
+class OperatorUnaryExpression : public Expression
+{
+private:
+ std::string operator_;
+ ExpressionPtr cast_expression_;
+
+public:
+ OperatorUnaryExpression(const std::string &_operator, Expression *cast_expression);
- virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned& label_count) const;
+ virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned &label_count) const;
};
@@ -116,9 +128,9 @@ private:
ExpressionPtr expression_;
public:
- CastExpression(Type* type, Expression* expression);
+ CastExpression(Type *type, Expression *expression);
- virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned& label_count) const;
+ virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned &label_count) const;
};
@@ -128,9 +140,9 @@ private:
std::string operator_;
public:
- AdditiveExpression(Expression* lhs, const std::string& _operator, Expression* rhs);
+ AdditiveExpression(Expression *lhs, const std::string &_operator, Expression *rhs);
- virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned& label_count) const;
+ virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned &label_count) const;
virtual int constantFold() const;
};
@@ -141,9 +153,9 @@ private:
std::string operator_;
public:
- MultiplicativeExpression(Expression* lhs, const std::string& _operator, Expression* rhs);
+ MultiplicativeExpression(Expression *lhs, const std::string &_operator, Expression *rhs);
- virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned& label_count) const;
+ virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned &label_count) const;
virtual int constantFold() const;
};
@@ -153,9 +165,9 @@ class ShiftExpression : public OperationExpression
private:
std::string operator_;
public:
- ShiftExpression(Expression* lhs, const std::string& _operator, Expression* rhs);
+ ShiftExpression(Expression *lhs, const std::string &_operator, Expression *rhs);
- virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned& label_count) const;
+ virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned &label_count) const;
virtual int constantFold() const;
};
@@ -165,9 +177,9 @@ class RelationalExpression : public OperationExpression
private:
std::string operator_;
public:
- RelationalExpression(Expression* lhs, const std::string& _operator, Expression* rhs);
+ RelationalExpression(Expression *lhs, const std::string &_operator, Expression *rhs);
- virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned& label_count) const;
+ virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned &label_count) const;
virtual int constantFold() const;
};
@@ -177,9 +189,9 @@ class EqualityExpression : public OperationExpression
private:
std::string operator_;
public:
- EqualityExpression(Expression* lhs, const std::string& _operator, Expression* rhs);
+ EqualityExpression(Expression *lhs, const std::string &_operator, Expression *rhs);
- virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned& label_count) const;
+ virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned &label_count) const;
virtual int constantFold() const;
};
@@ -187,9 +199,9 @@ public:
class AndExpression : public OperationExpression
{
public:
- AndExpression(Expression* lhs, Expression* rhs);
+ AndExpression(Expression *lhs, Expression *rhs);
- virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned& label_count) const;
+ virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned &label_count) const;
virtual int constantFold() const;
};
@@ -197,9 +209,9 @@ public:
class ExclusiveOrExpression : public OperationExpression
{
public:
- ExclusiveOrExpression(Expression* lhs, Expression* rhs);
+ ExclusiveOrExpression(Expression *lhs, Expression *rhs);
- virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned& label_count) const;
+ virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned &label_count) const;
virtual int constantFold() const;
};
@@ -207,9 +219,9 @@ public:
class InclusiveOrExpression : public OperationExpression
{
public:
- InclusiveOrExpression(Expression* lhs, Expression* rhs);
+ InclusiveOrExpression(Expression *lhs, Expression *rhs);
- virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned& label_count) const;
+ virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned &label_count) const;
virtual int constantFold() const;
};
@@ -217,9 +229,9 @@ public:
class LogicalAndExpression : public OperationExpression
{
public:
- LogicalAndExpression(Expression* lhs, Expression* rhs);
+ LogicalAndExpression(Expression *lhs, Expression *rhs);
- virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned& label_count) const;
+ virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned &label_count) const;
virtual int constantFold() const;
};
@@ -227,9 +239,9 @@ public:
class LogicalOrExpression : public OperationExpression
{
public:
- LogicalOrExpression(Expression* lhs, Expression* rhs);
+ LogicalOrExpression(Expression *lhs, Expression *rhs);
- virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned& label_count) const;
+ virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned &label_count) const;
virtual int constantFold() const;
};
@@ -242,20 +254,20 @@ private:
ExpressionPtr conditional_expression_;
public:
- ConditionalExpression(Expression* logical_or, Expression* expression,
- Expression* conditional_expression);
+ ConditionalExpression(Expression *logical_or, Expression *expression,
+ Expression *conditional_expression);
- virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned& label_count) const;
+ virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned &label_count) const;
};
class AssignmentExpression : public OperationExpression
{
public:
- AssignmentExpression(Expression* lhs, Expression* rhs);
- AssignmentExpression(ExpressionPtr lhs, Expression* rhs);
+ AssignmentExpression(Expression *lhs, Expression *rhs);
+ AssignmentExpression(ExpressionPtr lhs, Expression *rhs);
- virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned& label_count) const;
+ virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned &label_count) const;
};
@@ -264,9 +276,9 @@ class Identifier : public Expression
private:
std::string id_;
public:
- Identifier(const std::string& id);
+ Identifier(const std::string &id);
- virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned& label_count) const;
+ virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned &label_count) const;
virtual int postfixStackPosition(VariableStackBindings bindings) const;
virtual std::string id() const;
};
@@ -277,9 +289,9 @@ class Constant : public Expression
private:
int32_t constant_;
public:
- Constant(const int32_t& constant);
+ Constant(const int32_t &constant);
- virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned& label_count) const;
+ virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned &label_count) const;
virtual int constantFold() const;
};