diff options
Diffstat (limited to 'c_compiler/include')
-rw-r--r-- | c_compiler/include/expression.hpp | 13 | ||||
-rw-r--r-- | c_compiler/include/type.hpp | 47 |
2 files changed, 57 insertions, 3 deletions
diff --git a/c_compiler/include/expression.hpp b/c_compiler/include/expression.hpp index 5f50b60..f1dd31c 100644 --- a/c_compiler/include/expression.hpp +++ b/c_compiler/include/expression.hpp @@ -26,6 +26,7 @@ public: virtual void countArguments(unsigned &argument_count) const; virtual void expressionDepth(unsigned &depth_count) const; virtual std::string id() const; + virtual TypePtr getType(const VariableStackBindings &bindings) const = 0; void linkExpression(Expression* next_expression); ExpressionPtr nextExpression() const; @@ -44,6 +45,7 @@ public: virtual int constantFold() const; virtual void expressionDepth(unsigned &depth_count) const; + virtual TypePtr getType(const VariableStackBindings &bindings) const; ExpressionPtr getLhs() const; ExpressionPtr getRhs() const; @@ -54,8 +56,6 @@ public: class UnaryExpression : public Expression { public: - virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned &label_count) const = 0; - virtual void stackPosition(VariableStackBindings bindings, unsigned &depth_count) const; }; @@ -71,6 +71,7 @@ public: virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned &label_count) const; virtual void expressionDepth(unsigned &depth_count) const; virtual void stackPosition(VariableStackBindings bindings, unsigned &depth_count) const; + virtual TypePtr getType(const VariableStackBindings &bindings) const; }; class PostfixFunctionCall : public UnaryExpression @@ -85,6 +86,7 @@ public: virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned &label_count) const; virtual void countArguments(unsigned &argument_count) const; virtual void expressionDepth(unsigned &depth_count) const; + virtual TypePtr getType(const VariableStackBindings &bindings) const; void setPostfixExpression(Expression *postfix_expression); }; @@ -99,6 +101,7 @@ public: PostfixPostIncDecExpression(const std::string &_operator, Expression *postfix_expression); virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned &label_count) const; + virtual TypePtr getType(const VariableStackBindings &bindings) const; }; @@ -112,6 +115,7 @@ public: UnaryPreIncDecExpression(const std::string &_operator, Expression *unary_expression); virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned &label_count) const; + virtual TypePtr getType(const VariableStackBindings &bindings) const; }; class OperatorUnaryExpression : public UnaryExpression @@ -125,6 +129,7 @@ public: virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned &label_count) const; virtual void stackPosition(VariableStackBindings bindings, unsigned &depth_count) const; + virtual TypePtr getType(const VariableStackBindings &bindings) const; }; @@ -139,6 +144,7 @@ public: virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned &label_count) const; virtual void expressionDepth(unsigned &depth_count) const; + virtual TypePtr getType(const VariableStackBindings &bindings) const; }; class AdditiveExpression : public OperationExpression @@ -255,6 +261,7 @@ public: Expression *conditional_expression); virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned &label_count) const; + virtual TypePtr getType(const VariableStackBindings &bindings) const; }; class AssignmentExpression : public OperationExpression @@ -276,6 +283,7 @@ public: virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned &label_count) const; virtual void stackPosition(VariableStackBindings bindings, unsigned &depth_count) const; virtual std::string id() const; + virtual TypePtr getType(const VariableStackBindings &bindings) const; }; class Constant : public UnaryExpression @@ -287,6 +295,7 @@ public: virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned &label_count) const; virtual int constantFold() const; + virtual TypePtr getType(const VariableStackBindings &bindings) const; }; #endif diff --git a/c_compiler/include/type.hpp b/c_compiler/include/type.hpp index 8c22ab8..8f2cf08 100644 --- a/c_compiler/include/type.hpp +++ b/c_compiler/include/type.hpp @@ -20,12 +20,16 @@ public: virtual TypePtr type() = 0; virtual TypePtr type(Type *type_ptr) = 0; virtual TypePtr type(TypePtr type_ptr) = 0; + + virtual void increaseStackPosition(VariableStackBindings &bindings) const = 0; + virtual void load(const int ®, const int &position) const = 0; + virtual void store(const int &position) const = 0; virtual void setSigned(bool _signed); virtual void setExtern(bool _extern); virtual void setStatic(bool _static); virtual void setConst(bool _const); - virtual void setSize(int size); + virtual void setSize(int size); }; class Array : public Type @@ -43,6 +47,10 @@ public: virtual TypePtr type(); virtual TypePtr type(Type *type_ptr); virtual TypePtr type(TypePtr type_ptr); + + virtual void increaseStackPosition(VariableStackBindings &bindings) const; + virtual void load(const int ®, const int &position) const; + virtual void store(const int &position) const; }; class Pointer : public Type @@ -59,6 +67,10 @@ public: virtual TypePtr type(); virtual TypePtr type(Type *type_ptr); virtual TypePtr type(TypePtr type_ptr); + + virtual void increaseStackPosition(VariableStackBindings &bindings) const; + virtual void load(const int ®, const int &position) const; + virtual void store(const int &position) const; }; class TypeContainer : public Type @@ -81,6 +93,10 @@ public: virtual TypePtr type(); virtual TypePtr type(Type *type_ptr); virtual TypePtr type(TypePtr type_ptr); + + virtual void increaseStackPosition(VariableStackBindings &bindings) const; + virtual void load(const int ®, const int &position) const; + virtual void store(const int &position) const; virtual void setSigned(bool _signed); virtual void setExtern(bool _extern); @@ -95,6 +111,10 @@ public: virtual void print() const = 0; virtual void printXml() const = 0; virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned &label_count) const = 0; + + virtual void increaseStackPosition(VariableStackBindings &bindings) const = 0; + virtual void load(const int ®, const int &position) const = 0; + virtual void store(const int &position) const = 0; virtual TypePtr type(); virtual TypePtr type(Type *type_ptr); @@ -109,6 +129,22 @@ public: virtual void print() const; virtual void printXml() const; virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned &label_count) const; + virtual void increaseStackPosition(VariableStackBindings &bindings) const; + virtual void load(const int ®, const int &position) const; + virtual void store(const int &position) const; +}; + +class Short : public Specifier +{ +public: + Short(); + + virtual void print() const; + virtual void printXml() const; + virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned &label_count) const; + virtual void increaseStackPosition(VariableStackBindings &bindings) const; + virtual void load(const int ®, const int &position) const; + virtual void store(const int &position) const; }; class Void : public Specifier @@ -119,6 +155,9 @@ public: virtual void print() const; virtual void printXml() const; virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned &label_count) const; + virtual void increaseStackPosition(VariableStackBindings &bindings) const; + virtual void load(const int ®, const int &position) const; + virtual void store(const int &position) const; }; class Char : public Specifier @@ -129,6 +168,9 @@ public: virtual void print() const; virtual void printXml() const; virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned &label_count) const; + virtual void increaseStackPosition(VariableStackBindings &bindings) const; + virtual void load(const int ®, const int &position) const; + virtual void store(const int &position) const; }; class Float : public Specifier @@ -139,6 +181,9 @@ public: virtual void print() const; virtual void printXml() const; virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned &label_count) const; + virtual void increaseStackPosition(VariableStackBindings &bindings) const; + virtual void load(const int ®, const int &position) const; + virtual void store(const int &position) const; }; #endif |