src/TypeManager.h
author David Anderson <dvander@alliedmods.net>
Sat Nov 17 23:11:38 2012 -0800 (2012-11-17)
changeset 209 5cbec15fadfe
parent 195 c1ba166f3fc4
child 233 bbb498ccb4ac
permissions -rw-r--r--
Split ArrayType from Type.
     1 /* vim: set ts=4 sw=4 tw=99 et:
     2  *
     3  * Copyright (C) 2012 David Anderson
     4  *
     5  * This file is part of SourcePawn.
     6  *
     7  * SourcePawn is free software: you can redistribute it and/or modify it under
     8  * the terms of the GNU General Public License as published by the Free
     9  * Software Foundation, either version 3 of the License, or (at your option)
    10  * any later version.
    11  * 
    12  * SourcePawn is distributed in the hope that it will be useful, but WITHOUT ANY
    13  * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
    14  * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
    15  *
    16  * You should have received a copy of the GNU General Public License along with
    17  * SourcePawn. If not, see http://www.gnu.org/licenses/.
    18  */
    19 #ifndef _include_jitcraft_type_manager_h_
    20 #define _include_jitcraft_type_manager_h_
    21 
    22 #include "Barriers.h"
    23 #include "Types.h"
    24 #include "VirtualObjectVisitor.h"
    25 
    26 namespace ke {
    27 
    28 class String;
    29 
    30 class TypeManager
    31 {
    32     Zone *zone_;
    33 
    34     // Primitive type cache.
    35     Unbarriered<Type> voidType_;
    36     Unbarriered<Type> uncheckedType_;
    37     Unbarriered<Type> primitiveTypes_[PrimitiveTypes_Total];
    38     Unbarriered<Type> referenceTypes_[PrimitiveTypes_Total];
    39 
    40   public:
    41     TypeManager(Zone *zone);
    42 
    43     bool initialize();
    44 
    45     Type *getPrimitive(PrimitiveType type) {
    46         return primitiveTypes_[type];
    47     }
    48 
    49     Type *getVoid() {
    50         return voidType_;
    51     }
    52     Type *getUnchecked() {
    53         return uncheckedType_;
    54     }
    55     Type *getReference(Handle<Type> type, bool isConst);
    56     Type *newArray(Handle<Type> contained, int elements);
    57     Type *newExternalArray(Handle<Type> contained);
    58     Type *newEnum(Handle<String> name);
    59     
    60     void accept(VirtualObjectVisitor *visitor);
    61 };
    62 
    63 }
    64 
    65 #endif // _include_jitcraft_type_manager_h_