dvander@167: /* vim: set ts=4 sw=4 tw=99 et: dvander@167: * dvander@11: * Copyright (C) 2012 David Anderson dvander@11: * dvander@167: * This file is part of SourcePawn. dvander@11: * dvander@167: * SourcePawn is free software: you can redistribute it and/or modify it under dvander@11: * the terms of the GNU General Public License as published by the Free dvander@11: * Software Foundation, either version 3 of the License, or (at your option) dvander@11: * any later version. dvander@11: * dvander@167: * SourcePawn is distributed in the hope that it will be useful, but WITHOUT ANY dvander@11: * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS dvander@11: * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. dvander@11: * dvander@11: * You should have received a copy of the GNU General Public License along with dvander@167: * SourcePawn. If not, see http://www.gnu.org/licenses/. dvander@11: */ dvander@11: #ifndef _include_jitcraft_type_manager_h_ dvander@11: #define _include_jitcraft_type_manager_h_ dvander@11: dvander@11: #include "Barriers.h" dvander@11: #include "Types.h" dvander@45: #include "VirtualObjectVisitor.h" dvander@11: dvander@59: namespace ke { dvander@11: dvander@54: class String; dvander@54: dvander@11: class TypeManager dvander@11: { dvander@11: Zone *zone_; dvander@11: dvander@11: // Primitive type cache. dvander@71: Unbarriered voidType_; dvander@167: Unbarriered uncheckedType_; dvander@11: Unbarriered primitiveTypes_[PrimitiveTypes_Total]; dvander@14: Unbarriered referenceTypes_[PrimitiveTypes_Total]; dvander@11: dvander@11: public: dvander@11: TypeManager(Zone *zone); dvander@11: dvander@11: bool initialize(); dvander@11: dvander@11: Type *getPrimitive(PrimitiveType type) { dvander@11: return primitiveTypes_[type]; dvander@11: } dvander@41: dvander@71: Type *getVoid() { dvander@71: return voidType_; dvander@71: } dvander@167: Type *getUnchecked() { dvander@167: return uncheckedType_; dvander@167: } dvander@67: Type *getReference(Handle type, bool isConst); dvander@209: Type *newArray(Handle contained, int elements); dvander@188: Type *newExternalArray(Handle contained); dvander@145: Type *newEnum(Handle name); dvander@71: dvander@45: void accept(VirtualObjectVisitor *visitor); dvander@11: }; dvander@11: dvander@11: } dvander@11: dvander@11: #endif // _include_jitcraft_type_manager_h_