aboutsummaryrefslogtreecommitdiffstats
path: root/c_compiler/include/expression.hpp
diff options
context:
space:
mode:
authorYann Herklotz <ymherklotz@gmail.com>2017-03-21 17:03:38 +0000
committerYann Herklotz <ymherklotz@gmail.com>2017-03-21 17:03:38 +0000
commit190b7a0e5d45367230795ac0bdf6fc2f248ba9e1 (patch)
treedc9a605ced1784faf80d71f7f59e49b79d6bb2c7 /c_compiler/include/expression.hpp
parentaf8b76d0a83813b3cebac7468db4bd64e534c235 (diff)
downloadCompiler-190b7a0e5d45367230795ac0bdf6fc2f248ba9e1.tar.gz
Compiler-190b7a0e5d45367230795ac0bdf6fc2f248ba9e1.zip
changed type layout to have all necessary information
Diffstat (limited to 'c_compiler/include/expression.hpp')
-rw-r--r--c_compiler/include/expression.hpp38
1 files changed, 23 insertions, 15 deletions
diff --git a/c_compiler/include/expression.hpp b/c_compiler/include/expression.hpp
index 1563211..21e5880 100644
--- a/c_compiler/include/expression.hpp
+++ b/c_compiler/include/expression.hpp
@@ -26,13 +26,11 @@ public:
virtual void print() const;
virtual void printXml() const;
virtual void countArguments(unsigned& argument_count) const;
- virtual void expressionDepth(unsigned& depth_count) const;
-
+ virtual void expressionDepth(unsigned& depth_count) const;
virtual int postfixStackPosition(VariableStackBindings bindings) const;
virtual void setPostfixExpression(Expression* postfix_expression);
-
virtual std::string id() const;
-
+
void linkExpression(Expression* next_expression);
ExpressionPtr nextExpression() const;
};
@@ -47,21 +45,14 @@ public:
OperationExpression(Expression* lhs, Expression* rhs);
virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned& label_count) const = 0;
+
virtual int constantFold() const;
virtual void expressionDepth(unsigned& depth_count) const;
+
void evaluateExpression(VariableStackBindings bindings, unsigned& label_count) const;
};
-class PostfixExpression : public Expression
-{
-public:
- PostfixExpression();
-
- virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned& label_count) const;
-};
-
-
class PostfixArrayElement : public Expression
{
public:
@@ -86,11 +77,28 @@ public:
void setPostfixExpression(Expression* postfix_expression);
};
+class PostfixPostIncDecExpression : public Expression
+{
+private:
+ std::string operator_;
+ ExpressionPtr postfix_expression_;
+
+public:
+ PostfixPostIncDecExpression(const std::string& _operator, Expression* postfix_expression);
+
+ virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned& label_count) const;
+
+};
+
-class UnaryExpression : public Expression
+class UnaryPreIncDecExpression : public Expression
{
+private:
+ std::string operator_;
+ ExpressionPtr unary_expression_;
+
public:
- UnaryExpression();
+ UnaryPreIncDecExpression(const std::string& _operator, Expression* unary_expression);
virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned& label_count) const;
};