diff options
author | Yann Herklotz <ymherklotz@gmail.com> | 2017-03-23 12:51:24 +0000 |
---|---|---|
committer | Yann Herklotz <ymherklotz@gmail.com> | 2017-03-23 12:51:24 +0000 |
commit | 5e2dbac8d63b3a0031069495a0e1dafe825aba45 (patch) | |
tree | 2349e27d5a3c545b237406d8804e4bd9bfc7e4c5 /c_compiler/include/type.hpp | |
parent | c2cc9a2e0078d3e5f37e199ae87619884b91c89e (diff) | |
parent | aeb81c1a8959905878c242e752b596325325db8f (diff) | |
download | Compiler-5e2dbac8d63b3a0031069495a0e1dafe825aba45.tar.gz Compiler-5e2dbac8d63b3a0031069495a0e1dafe825aba45.zip |
Merge branch 'compiler' of github.com:LangProc/langproc-2016-cw-ymh15 into compiler
Diffstat (limited to 'c_compiler/include/type.hpp')
-rw-r--r-- | c_compiler/include/type.hpp | 82 |
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 |