Beispiel #1
0
 vector<ByteCode> Program::binaries() const
 {
     vector<ByteCode> bins;
     cl_uint size;
     if((size = detail::programInfo<cl_uint>(_id, CL_PROGRAM_NUM_DEVICES)) == 0)
         return bins;
     vector<size_t> binSizes(size);
     if(!detail::programInfo(_id, CL_PROGRAM_BINARY_SIZES,
             binSizes.data(), size))
         return bins;
     vector<unsigned char*> binPtrs;
     for(size_t i = 0; i < size; ++i)
     {
         bins.push_back(ByteCode(binSizes[i], '\0'));
         binPtrs.push_back(bins[i].data());
     }
     cl_int error;
     if((error = clGetProgramInfo(_id, CL_PROGRAM_BINARIES, 
             size * sizeof(unsigned char*), binPtrs.data(), nullptr))
             != CL_SUCCESS)
     {
         detail::reportError("Program::binaries(): ", error);
         return vector<ByteCode>();
     }
     return bins;
 }
Beispiel #2
0
void TypeReader::deserializeClass(Type *type, json_t *classJSON)
{
    utString sbaseType = json_string_value(
        json_object_get(classJSON, "baseType"));

    if (sbaseType.size() > 0)
    {
        Type *baseType =
            type->getModule()->getAssembly()->getLuaState()->getType(
                sbaseType.c_str());
        lmAssert(baseType != NULL, "Unable to resolve type '%s' referenced as base of type '%s'",
                 sbaseType.c_str(), type->getFullName().c_str());
        type->setBaseType(baseType);
    }

    json_t *jinterfaces = json_object_get(classJSON, "interfaces");

    for (size_t i = 0; i < json_array_size(jinterfaces); i++)
    {
        json_t   *o     = json_array_get(jinterfaces, i);
        utString sface  = json_string_value(o);
        Type     *itype = type->getModule()->getAssembly()->getLuaState()->getType(
            sface.c_str());
        assert(itype);
        type->addInterface(itype);
    }

    json_t *jdelegateTypes = json_object_get(classJSON, "delegateTypes");

    for (size_t i = 0; i < json_array_size(jdelegateTypes); i++)
    {
        json_t   *o     = json_array_get(jdelegateTypes, i);
        utString stype  = json_string_value(o);
        Type     *itype = type->getModule()->getAssembly()->getLuaState()->getType(
            stype.c_str());
        assert(itype);
        type->addDelegateType(itype);
    }

    utString sdelegateReturnType = json_string_value(
        json_object_get(classJSON, "delegateReturnType"));

    if (sdelegateReturnType.size() > 0)
    {
        Type *delegateReturnType =
            type->getModule()->getAssembly()->getLuaState()->getType(
                sdelegateReturnType.c_str());
        assert(delegateReturnType);
        type->setDelegateReturnType(delegateReturnType);
    }

    // meta data

    MemberInfoReader::deserializeMetaInfo(type, json_object_get(classJSON, "metainfo"));

    // handle imports
    json_t *iarray = json_object_get(classJSON, "imports");
    for (size_t i = 0; i < json_array_size(iarray); i++)
    {
        json_t   *jimport = json_array_get(iarray, i);
        utString import   = json_string_value(jimport);

        Type *timport =
            type->getModule()->getAssembly()->getLuaState()->getType(
                import.c_str());
        type->addImport(timport);
    }

    json_t *jconstructor = json_object_get(classJSON, "constructor");
    if (jconstructor)
    {
        MethodBase *m = NULL;
        m = MethodReader::deserializeConstructorInfo(type, jconstructor);
        type->addMember(m);
    }

    // handle fields
    json_t *farray = json_object_get(classJSON, "fields");
    for (size_t i = 0; i < json_array_size(farray); i++)
    {
        json_t    *fo = json_array_get(farray, i);
        FieldInfo *f  = FieldInfoReader::deserializeFieldInfo(type, fo);
        type->addMember(f);
    }

    // handle properties

    json_t *parray = json_object_get(classJSON, "properties");
    for (size_t i = 0; i < json_array_size(parray); i++)
    {
        json_t       *po = json_array_get(parray, i);
        PropertyInfo *p  = PropertyInfoReader::deserializePropertyInfo(type, po);
        type->addMember(p);
    }

    // handle methods
    farray = json_object_get(classJSON, "methods");
    for (size_t i = 0; i < json_array_size(farray); i++)
    {
        json_t *fo = json_array_get(farray, i);

        MethodBase *m = NULL;
        m = MethodReader::deserializeMethodInfo(type, fo);
        type->addMember(m);
    }

    ByteCode *byteCode;

    byteCode = lmNew(NULL) ByteCode();
    byteCode->setBase64(utString(json_string_value(json_object_get(classJSON, "bytecode_staticinitializer"))));
#if LOOM_ENABLE_JIT
    byteCode->setBase64(utString(json_string_value(json_object_get(classJSON, "bytecode_staticinitializer_fr2"))));
#endif
    type->setBCStaticInitializer(byteCode);


    byteCode = lmNew(NULL) ByteCode();
    byteCode->setBase64(utString(json_string_value(json_object_get(classJSON, "bytecode_instanceinitializer"))));
#if LOOM_ENABLE_JIT
    byteCode->setBase64(utString(json_string_value(json_object_get(classJSON, "bytecode_instanceinitializer_fr2"))));
#endif
    type->setBCInstanceInitializer(byteCode);
}