X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;ds=inline;f=tools%2Fminiswig%2Ftree.h;h=387012ece01169244b719488a3c4ddc1494e4794;hb=f1e15f44f709d6b4fa45e858dc12d7d701ae8ddc;hp=f1149afb8b47ecb9744451504d966ea0de4cb557;hpb=60908c905544776c376421b8d3e12eeb936c068f;p=supertux.git diff --git a/tools/miniswig/tree.h b/tools/miniswig/tree.h index f1149afb8..387012ece 100644 --- a/tools/miniswig/tree.h +++ b/tools/miniswig/tree.h @@ -6,6 +6,7 @@ #include #include #include +#include class Namespace; @@ -47,7 +48,8 @@ private: class Type { public: Type() - : atomic_type(0), _const(false), _static(false), pointer(0), ref(0) + : atomic_type(0), _unsigned(false), _const(false), _static(false), + pointer(0), ref(0) { } void write_c_type(std::ostream& out) @@ -65,12 +67,15 @@ public: bool is_void() const { + if(atomic_type == 0) + return true; if(atomic_type == &BasicType::VOID && pointer == 0) return true; return false; } AtomicType* atomic_type; + bool _unsigned; bool _const; bool _static; // number of '*' in the type declaration... @@ -79,6 +84,28 @@ public: int ref; }; +class HSQUIRRELVMType : public AtomicType { +public: + HSQUIRRELVMType() + { + this->name = "HSQUIRRELVM"; + assert(_instance == 0); + _instance = this; + } + virtual ~HSQUIRRELVMType() + { + assert(_instance == this); + _instance = 0; + } + + static HSQUIRRELVMType* instance() + { + return _instance; + } +private: + static HSQUIRRELVMType* _instance; +}; + class StringType : public AtomicType { public: StringType() @@ -176,6 +203,19 @@ public: namespaces.push_back(ns); ns->parent = this; } + AtomicType* _findType(const std::string& name, bool godown = false) { + for(std::vector::iterator i = types.begin(); + i != types.end(); ++i) { + AtomicType* type = *i; + if(type->name == name) + return type; + } + if(godown && parent) + return parent->_findType(name, true); + + return 0; + } + Namespace* _findNamespace(const std::string& name, bool godown = false) { for(std::vector::iterator i = namespaces.begin(); i != namespaces.end(); ++i) {