dvander@11: /* dvander@11: * Copyright (C) 2012 David Anderson dvander@11: * dvander@11: * This file is part of JITCraft. dvander@11: * dvander@11: * JITCraft 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@11: * Foobar 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@11: * JITCraft. 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@11: namespace jc { 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@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@54: Type *getPrimitiveForTag(Handle); dvander@11: Type *getPrimitive(PrimitiveType type) { dvander@11: return primitiveTypes_[type]; dvander@11: } dvander@41: dvander@41: Type *getReference(Handle type); dvander@41: Type *unsafeArray(Handle contained, int elements); dvander@41: Type *newFunction(Handle returnType, Handle args); dvander@45: dvander@45: void accept(VirtualObjectVisitor *visitor); dvander@11: }; dvander@11: dvander@11: } dvander@11: dvander@11: #endif // _include_jitcraft_type_manager_h_