void JS_SetPrivate(IJS_Runtime* pJSRuntime, v8::Handle<v8::Object> pObj, void* p) { if(pObj.IsEmpty() || !pObj->InternalFieldCount()) return; CJS_PrivateData* pPrivateData = (CJS_PrivateData*)pObj->GetAlignedPointerFromInternalField(0); if(!pPrivateData) return; pPrivateData->pPrivate = p; }
inline void Wrap(v8::Handle<v8::Object> handle) { assert(persistent().IsEmpty()); assert(handle->InternalFieldCount() > 0); handle->SetAlignedPointerInInternalField(0, this); persistent().Reset(v8::Isolate::GetCurrent(), handle); MakeWeak(); }
bool isWrappedNPObject(v8::Handle<v8::Object> object) { if (object->InternalFieldCount() == npObjectInternalFieldCount) { const WrapperTypeInfo* typeInfo = static_cast<const WrapperTypeInfo*>(object->GetAlignedPointerFromInternalField(v8DOMWrapperTypeIndex)); return typeInfo == npObjectTypeInfo(); } return false; }
int JS_GetObjDefnID(v8::Handle<v8::Object> pObj) { if(pObj.IsEmpty() || !pObj->InternalFieldCount()) return -1; CJS_PrivateData* pPrivateData = (CJS_PrivateData*)pObj->GetAlignedPointerFromInternalField(0); if(pPrivateData) return pPrivateData->ObjDefID; return -1; }
static bool globalObjectPrototypeIsDOMWindow(v8::Handle<v8::Object> objectPrototype) { #if ENABLE(SHARED_WORKERS) // We can identify what type of context the global object is wrapping by looking at the // internal field count of its prototype. This assumes WorkerContexts and DOMWindows have different numbers // of internal fields, so a COMPILE_ASSERT is included to warn if this ever changes. DOMWindow has // traditionally had far more internal fields than any other class. COMPILE_ASSERT(V8DOMWindow::internalFieldCount != V8WorkerContext::internalFieldCount && V8DOMWindow::internalFieldCount != V8SharedWorkerContext::internalFieldCount, DOMWindowAndWorkerContextHaveUnequalFieldCounts); #endif return objectPrototype->InternalFieldCount() == V8DOMWindow::internalFieldCount; }
void JS_FreePrivate(v8::Handle<v8::Object> pObj) { if(pObj.IsEmpty() || !pObj->InternalFieldCount()) return; JS_FreePrivate(pObj->GetAlignedPointerFromInternalField(0)); pObj->SetAlignedPointerInInternalField(0, NULL); }