src/TypeManager.h
author David Anderson <dvander@alliedmods.net>
Sun Aug 05 21:24:41 2012 -0700 (2012-08-05)
changeset 168 4d0fff61d65e
parent 167 cf82769eb136
child 185 10936f3a2ba3
permissions -rw-r--r--
Added runtime support for default arguments.
     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 *unsafeArray(Handle<Type> contained, int elements, bool isConst);
    57     Type *newEnum(Handle<String> name);
    58     Type *newFunction(Handle<Type> returnType, Handle<FixedArray> args,
    59                       Handle<FixedArray> deafults);
    60     Type *newNative(Handle<Type> returnType, Handle<FixedArray> args,
    61                     Handle<FixedArray> defaults, bool variadic);
    62     Type *newStruct(Handle<String> name, Handle<FixedArray> fields, Handle<Map> newMap);
    63     
    64     void accept(VirtualObjectVisitor *visitor);
    65 };
    66 
    67 }
    68 
    69 #endif // _include_jitcraft_type_manager_h_