NativeExecutable* JITThunks::hostFunctionStub(VM* vm, NativeFunction function, NativeFunction constructor) { if (NativeExecutable* nativeExecutable = m_hostFunctionStubMap->get(std::make_pair(function, constructor))) return nativeExecutable; NativeExecutable* nativeExecutable = NativeExecutable::create(*vm, JIT::compileCTINativeCall(vm, function), function, MacroAssemblerCodeRef::createSelfManagedCodeRef(ctiNativeConstruct(vm)), constructor, NoIntrinsic); weakAdd(*m_hostFunctionStubMap, std::make_pair(function, constructor), PassWeak<NativeExecutable>(nativeExecutable)); return nativeExecutable; }
NativeExecutable* JITThunks::hostFunctionStub(JSGlobalData* globalData, NativeFunction function, NativeFunction constructor) { if (NativeExecutable* nativeExecutable = m_hostFunctionStubMap->get(function)) return nativeExecutable; NativeExecutable* nativeExecutable = NativeExecutable::create(*globalData, JIT::compileCTINativeCall(globalData, function), function, MacroAssemblerCodeRef::createSelfManagedCodeRef(ctiNativeConstruct()), constructor, NoIntrinsic); weakAdd(*m_hostFunctionStubMap, function, PassWeak<NativeExecutable>(nativeExecutable)); return nativeExecutable; }
JSObject* NPRuntimeObjectMap::getOrCreateJSObject(JSGlobalObject* globalObject, NPObject* npObject) { // If this is an NPJSObject, we can just get the JSObject that it's wrapping. if (NPJSObject::isNPJSObject(npObject)) return NPJSObject::toNPJSObject(npObject)->jsObject(); if (JSNPObject* jsNPObject = m_jsNPObjects.get(npObject)) return jsNPObject; JSNPObject* jsNPObject = JSNPObject::create(globalObject, this, npObject); weakAdd(m_jsNPObjects, npObject, JSC::Weak<JSNPObject>(jsNPObject, this, npObject)); return jsNPObject; }
RegExp* RegExpCache::lookupOrCreate(const String& patternString, RegExpFlags flags) { RegExpKey key(flags, patternString); if (RegExp* regExp = m_weakCache.get(key)) return regExp; RegExp* regExp = RegExp::createWithoutCaching(*m_globalData, patternString, flags); #if ENABLE(REGEXP_TRACING) m_globalData->addRegExpToTrace(regExp); #endif weakAdd(m_weakCache, key, PassWeak<RegExp>(regExp, this)); return regExp; }
NativeExecutable* JITThunks::hostFunctionStub(VM* vm, NativeFunction function, NativeFunction constructor, const String& name) { ASSERT(!isCompilationThread()); if (NativeExecutable* nativeExecutable = m_hostFunctionStubMap->get(std::make_pair(function, constructor))) return nativeExecutable; NativeExecutable* nativeExecutable = NativeExecutable::create( *vm, adoptRef(new NativeJITCode(JIT::compileCTINativeCall(vm, function), JITCode::HostCallThunk)), function, adoptRef(new NativeJITCode(MacroAssemblerCodeRef::createSelfManagedCodeRef(ctiNativeConstruct(vm)), JITCode::HostCallThunk)), constructor, NoIntrinsic, name); weakAdd(*m_hostFunctionStubMap, std::make_pair(function, constructor), Weak<NativeExecutable>(nativeExecutable, this)); return nativeExecutable; }
NativeExecutable* JITThunks::hostFunctionStub(JSGlobalData* globalData, NativeFunction function, ThunkGenerator generator, Intrinsic intrinsic) { if (NativeExecutable* nativeExecutable = m_hostFunctionStubMap->get(function)) return nativeExecutable; MacroAssemblerCodeRef code; if (generator) { if (globalData->canUseJIT()) code = generator(globalData); else code = MacroAssemblerCodeRef(); } else code = JIT::compileCTINativeCall(globalData, function); NativeExecutable* nativeExecutable = NativeExecutable::create(*globalData, code, function, MacroAssemblerCodeRef::createSelfManagedCodeRef(ctiNativeConstruct()), callHostFunctionAsConstructor, intrinsic); weakAdd(*m_hostFunctionStubMap, function, PassWeak<NativeExecutable>(nativeExecutable)); return nativeExecutable; }
NativeExecutable* JITThunks::hostFunctionStub(VM* vm, NativeFunction function, ThunkGenerator generator, Intrinsic intrinsic) { if (NativeExecutable* nativeExecutable = m_hostFunctionStubMap->get(std::make_pair(function, &callHostFunctionAsConstructor))) return nativeExecutable; MacroAssemblerCodeRef code; if (generator) { if (vm->canUseJIT()) code = generator(vm); else code = MacroAssemblerCodeRef(); } else code = JIT::compileCTINativeCall(vm, function); NativeExecutable* nativeExecutable = NativeExecutable::create(*vm, code, function, MacroAssemblerCodeRef::createSelfManagedCodeRef(ctiNativeConstruct(vm)), callHostFunctionAsConstructor, intrinsic); weakAdd(*m_hostFunctionStubMap, std::make_pair(function, &callHostFunctionAsConstructor), PassWeak<NativeExecutable>(nativeExecutable)); return nativeExecutable; }
NativeExecutable* JITThunks::hostFunctionStub(VM* vm, NativeFunction function, NativeFunction constructor, ThunkGenerator generator, Intrinsic intrinsic, const String& name) { ASSERT(!isCompilationThread()); ASSERT(vm->canUseJIT()); if (NativeExecutable* nativeExecutable = m_hostFunctionStubMap->get(std::make_tuple(function, constructor, name))) return nativeExecutable; RefPtr<JITCode> forCall; if (generator) { MacroAssemblerCodeRef entry = generator(vm); forCall = adoptRef(new DirectJITCode(entry, entry.code(), JITCode::HostCallThunk)); } else forCall = adoptRef(new NativeJITCode(JIT::compileCTINativeCall(vm, function), JITCode::HostCallThunk)); RefPtr<JITCode> forConstruct = adoptRef(new NativeJITCode(MacroAssemblerCodeRef::createSelfManagedCodeRef(ctiNativeConstruct(vm)), JITCode::HostCallThunk)); NativeExecutable* nativeExecutable = NativeExecutable::create(*vm, forCall, function, forConstruct, constructor, intrinsic, name); weakAdd(*m_hostFunctionStubMap, std::make_tuple(function, constructor, name), Weak<NativeExecutable>(nativeExecutable, this)); return nativeExecutable; }
void RootObject::addRuntimeObject(VM&, RuntimeObject* object) { ASSERT(m_isValid); weakAdd(m_runtimeObjects, object, JSC::Weak<RuntimeObject>(object, this)); }