aboutsummaryrefslogtreecommitdiffstats
path: root/c_compiler/include
diff options
context:
space:
mode:
Diffstat (limited to 'c_compiler/include')
-rw-r--r--c_compiler/include/expression.hpp13
-rw-r--r--c_compiler/include/type.hpp47
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 &reg, 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 &reg, 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 &reg, 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 &reg, 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 &reg, 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 &reg, 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 &reg, 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 &reg, 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 &reg, 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 &reg, const int &position) const;
+ virtual void store(const int &position) const;
};
#endif