aboutsummaryrefslogtreecommitdiffstats
path: root/c_compiler/include/type.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'c_compiler/include/type.hpp')
-rw-r--r--c_compiler/include/type.hpp82
1 files changed, 59 insertions, 23 deletions
diff --git a/c_compiler/include/type.hpp b/c_compiler/include/type.hpp
index bd9fd4b..8c881c1 100644
--- a/c_compiler/include/type.hpp
+++ b/c_compiler/include/type.hpp
@@ -13,15 +13,14 @@ typedef std::shared_ptr<Type> TypePtr;
class Type : public Node
{
public:
- virtual void print() const;
- virtual void printXml() const;
- virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned& label_count) const;
-
- virtual std::string getType() const = 0;
-
- virtual TypePtr type();
- virtual TypePtr type(Type* type_ptr);
- virtual TypePtr type(TypePtr type_ptr);
+ virtual void print() const = 0;
+ virtual void printXml() const = 0;
+ virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned &label_count) const = 0;
+
+ virtual TypePtr type() = 0;
+ virtual TypePtr type(Type *type_ptr) = 0;
+ virtual TypePtr type(TypePtr type_ptr) = 0;
+
virtual void setSigned(bool _signed);
virtual void setExtern(bool _extern);
virtual void setStatic(bool _static);
@@ -31,16 +30,35 @@ public:
class Array : public Type
{
+private:
+ int size_;
+ TypePtr type_;
public:
- Array();
- virtual std::string getType() const;
+ Array(const int &size, TypePtr type_);
+
+ virtual void print() const;
+ virtual void printXml() const;
+ virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned &label_count) const;
+
+ virtual TypePtr type();
+ virtual TypePtr type(Type *type_ptr);
+ virtual TypePtr type(TypePtr type_ptr);
};
class Pointer : public Type
{
+private:
+ TypePtr type_;
public:
Pointer();
- virtual std::string getType() const;
+
+ virtual void print() const;
+ virtual void printXml() const;
+ virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned &label_count) const;
+
+ virtual TypePtr type();
+ virtual TypePtr type(Type *type_ptr);
+ virtual TypePtr type(TypePtr type_ptr);
};
class TypeContainer : public Type
@@ -56,10 +74,14 @@ protected:
public:
TypeContainer();
- virtual std::string getType() const;
+ virtual void print() const;
+ virtual void printXml() const;
+ virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned &label_count) const;
+
virtual TypePtr type();
- virtual TypePtr type(Type* type_ptr);
+ virtual TypePtr type(Type *type_ptr);
virtual TypePtr type(TypePtr type_ptr);
+
virtual void setSigned(bool _signed);
virtual void setExtern(bool _extern);
virtual void setStatic(bool _static);
@@ -70,39 +92,53 @@ public:
class Specifier : public Type
{
public:
- virtual std::string getType() const = 0;
+ virtual void print() const = 0;
+ virtual void printXml() const = 0;
+ virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned &label_count) const = 0;
+
+ virtual TypePtr type();
+ virtual TypePtr type(Type *type_ptr);
+ virtual TypePtr type(TypePtr type_ptr);
};
class Int : public Specifier
{
public:
Int();
-
- virtual std::string getType() const;
+
+ virtual void print() const;
+ virtual void printXml() const;
+ virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned &label_count) const;
};
class Void : public Specifier
{
public:
Void();
-
- virtual std::string getType() const;
+
+ virtual void print() const;
+ virtual void printXml() const;
+ virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned &label_count) const;
};
class Char : public Specifier
{
public:
Char();
-
- virtual std::string getType() const;
+
+ virtual void print() const;
+ virtual void printXml() const;
+ virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned &label_count) const;
};
class Float : public Specifier
{
public:
Float();
-
- virtual std::string getType() const;
+
+ virtual void print() const;
+ virtual void printXml() const;
+ virtual VariableStackBindings printAsm(VariableStackBindings bindings, unsigned &label_count) const;
};
#endif