diff -r 627b6b94e774 -r 0784ac5cc347 jitcraft/TypeManager.cpp --- a/jitcraft/TypeManager.cpp Sat Jun 30 20:20:39 2012 -0700 +++ b/jitcraft/TypeManager.cpp Sat Jun 30 22:31:14 2012 -0700 @@ -17,6 +17,7 @@ */ #include "Types.h" #include "TypeManager.h" +#include "Zone.h" using namespace jc; @@ -35,6 +36,12 @@ return false; if ((primitiveTypes_[PrimitiveType_Native] = Type::NewPrimitive(zone_, PrimitiveType_Native)) == NULL) return false; + + for (unsigned i = 0; i < PrimitiveTypes_Total; i++) { + if ((referenceTypes_[i] = Type::NewReference(zone_, primitiveTypes_[i])) == NULL) + return false; + } + return true; } @@ -55,3 +62,20 @@ // :TODO: cache this. return Type::NewUnsafeArray(zone_, contained, elements); } + +Type * +TypeManager::getReference(Type *type) +{ + if (type->isFloat() || (type->isInt() && !type->tag())) + return referenceTypes_[type->primitive()]; + + // :TODO: cache this. + return Type::NewReference(zone_, type); +} + +Type * +TypeManager::newFunction(Type *returnType, FixedArray *args) +{ + // :TODO: cache this. + return Type::NewFunction(zone_, returnType, args); +}