void* JSObjectGetPrivate(JSObjectRef object) { JSObject* jsObject = toJS(object); if (jsObject->inherits(&JSCallbackObject<JSGlobalObject>::info)) return static_cast<JSCallbackObject<JSGlobalObject>*>(jsObject)->getPrivate(); else if (jsObject->inherits(&JSCallbackObject<JSObject>::info)) return static_cast<JSCallbackObject<JSObject>*>(jsObject)->getPrivate(); return 0; }
static CanvasStyle toHTMLCanvasStyle(ExecState*, JSValue value) { if (!value.isObject()) return CanvasStyle(); JSObject* object = asObject(value); if (object->inherits(&JSCanvasGradient::s_info)) return CanvasStyle(jsCast<JSCanvasGradient*>(object)->impl()); if (object->inherits(&JSCanvasPattern::s_info)) return CanvasStyle(jsCast<JSCanvasPattern*>(object)->impl()); return CanvasStyle(); }
DOMWindow* toDOMWindow(JSValue value) { if (!value.isObject()) return 0; JSObject* object = asObject(value); if (object->inherits(&JSDOMWindow::s_info)) return static_cast<JSDOMWindow*>(object)->impl(); if (object->inherits(&JSDOMWindowShell::s_info)) return static_cast<JSDOMWindowShell*>(object)->impl(); return 0; }
DOMWindow* toDOMWindow(JSValue value) { if (!value.isObject()) return 0; JSObject* object = asObject(value); if (object->inherits(JSDOMWindow::info())) return &jsCast<JSDOMWindow*>(object)->impl(); if (object->inherits(JSDOMWindowShell::info())) return &jsCast<JSDOMWindowShell*>(object)->impl(); return 0; }
static PassRefPtr<CanvasStyle> toHTMLCanvasStyle(ExecState*, JSValue value) { if (!value.isObject()) return 0; JSObject* object = asObject(value); if (object->inherits(&JSCanvasGradient::s_info)) return CanvasStyle::createFromGradient(jsCast<JSCanvasGradient*>(object)->impl()); if (object->inherits(&JSCanvasPattern::s_info)) return CanvasStyle::createFromPattern(jsCast<JSCanvasPattern*>(object)->impl()); return 0; }
static inline JSValue unwrapBoxedPrimitive(ExecState* exec, JSValue value) { if (!value.isObject()) return value; JSObject* object = asObject(value); if (object->inherits(&NumberObject::s_info)) return jsNumber(object->toNumber(exec)); if (object->inherits(&StringObject::s_info)) return jsString(exec, object->toString(exec)); if (object->inherits(&BooleanObject::s_info)) return object->toPrimitive(exec); return value; }
static PassRefPtr<CanvasStyle> toHTMLCanvasStyle(ExecState* exec, JSValue* value) { if (value->isString()) return CanvasStyle::create(static_cast<JSString*>(value)->value()); if (!value->isObject()) return 0; JSObject* object = static_cast<JSObject*>(value); if (object->inherits(&JSCanvasGradient::s_info)) return CanvasStyle::create(static_cast<JSCanvasGradient*>(object)->impl()); if (object->inherits(&JSCanvasPattern::s_info)) return CanvasStyle::create(static_cast<JSCanvasPattern*>(object)->impl()); return 0; }
JSValueRef JSObjectGetPrivateProperty(JSContextRef ctx, JSObjectRef object, JSStringRef propertyName) { ExecState* exec = toJS(ctx); APIEntryShim entryShim(exec); JSObject* jsObject = toJS(object); JSValue result; Identifier name(propertyName->identifier(&exec->globalData())); if (jsObject->inherits(&JSCallbackObject<JSGlobalObject>::s_info)) result = jsCast<JSCallbackObject<JSGlobalObject>*>(jsObject)->getPrivateProperty(name); else if (jsObject->inherits(&JSCallbackObject<JSNonFinalObject>::s_info)) result = jsCast<JSCallbackObject<JSNonFinalObject>*>(jsObject)->getPrivateProperty(name); return toRef(exec, result); }
JSValueRef JSCallbackFunction::toStringCallback(JSContextRef ctx, JSObjectRef, JSObjectRef thisObject, size_t, const JSValueRef[], JSValueRef* exception) { JSObject* object = toJS(thisObject); if (object->inherits(&JSCallbackObject<JSNonFinalObject>::s_info)) { for (JSClassRef jsClass = jsCast<JSCallbackObject<JSNonFinalObject>*>(object)->classRef(); jsClass; jsClass = jsClass->parentClass) if (jsClass->convertToType) return jsClass->convertToType(ctx, thisObject, kJSTypeString, exception); } else if (object->inherits(&JSCallbackObject<JSGlobalObject>::s_info)) { for (JSClassRef jsClass = jsCast<JSCallbackObject<JSGlobalObject>*>(object)->classRef(); jsClass; jsClass = jsClass->parentClass) if (jsClass->convertToType) return jsClass->convertToType(ctx, thisObject, kJSTypeString, exception); } return 0; }
bool JSObjectSetPrivate(JSObjectRef object, void* data) { JSObject* jsObject = toJS(object); if (jsObject->inherits(&JSCallbackObject<JSGlobalObject>::info)) { static_cast<JSCallbackObject<JSGlobalObject>*>(jsObject)->setPrivate(data); return true; } else if (jsObject->inherits(&JSCallbackObject<JSObject>::info)) { static_cast<JSCallbackObject<JSObject>*>(jsObject)->setPrivate(data); return true; } return false; }
JSTypedArrayType JSObjectGetTypedArrayType(JSContextRef ctx, JSObjectRef object) { ExecState* exec = toJS(ctx); APIEntryShim entryShim(exec); JSObject* jsObject = toJS(object); JSTypedArrayType type = kJSTypedArrayTypeNone; if( jsObject->inherits(JSArrayBufferView::info()) ) { type = TypedArrayTypes[jsObject->classInfo()->typedArrayStorageType]; } else if( jsObject->inherits(JSArrayBuffer::info()) ) { type = kJSTypedArrayTypeArrayBuffer; } return type; }
DOM::AbstractViewImpl *KJS::toAbstractView (JSValue *val) { JSObject *obj = val->getObject(); if (!obj) return 0; // the Window object is considered for all practical purposes as a descendant of AbstractView if (obj->inherits(&Window::info)) return static_cast<const Window *>(obj)->toAbstractView(); if (obj->inherits(&DOMAbstractView::info)) return static_cast<const DOMAbstractView *>(obj)->impl(); return 0; }
bool JSObjectSetPrivate(JSObjectRef object, void* data) { JSObject* jsObject = toJS(object); if (jsObject->inherits(&JSCallbackObject<JSGlobalObject>::s_info)) { jsCast<JSCallbackObject<JSGlobalObject>*>(jsObject)->setPrivate(data); return true; } if (jsObject->inherits(&JSCallbackObject<JSNonFinalObject>::s_info)) { jsCast<JSCallbackObject<JSNonFinalObject>*>(jsObject)->setPrivate(data); return true; } return false; }
void* JSObjectGetPrivate(JSObjectRef object) { JSObject* jsObject = uncheckedToJS(object); if (jsObject->inherits(&JSCallbackObject<JSGlobalObject>::s_info)) return jsCast<JSCallbackObject<JSGlobalObject>*>(jsObject)->getPrivate(); if (jsObject->inherits(&JSCallbackObject<JSDestructibleObject>::s_info)) return jsCast<JSCallbackObject<JSDestructibleObject>*>(jsObject)->getPrivate(); #if JSC_OBJC_API_ENABLED if (jsObject->inherits(&JSCallbackObject<JSAPIWrapperObject>::s_info)) return jsCast<JSCallbackObject<JSAPIWrapperObject>*>(jsObject)->getPrivate(); #endif return 0; }
void JSWeakObjectMapSet(JSContextRef ctx, JSWeakObjectMapRef map, void* key, JSObjectRef object) { if (!ctx) { ASSERT_NOT_REACHED(); return; } ExecState* exec = toJS(ctx); JSLockHolder locker(exec); JSObject* obj = toJS(object); if (!obj) return; ASSERT(obj->inherits(exec->vm(), JSProxy::info()) || obj->inherits(exec->vm(), JSCallbackObject<JSGlobalObject>::info()) || obj->inherits(exec->vm(), JSCallbackObject<JSDestructibleObject>::info())); map->map().set(key, obj); }
bool isArray(JSValue value) { if (!value.isObject()) return false; JSObject* object = asObject(value); return isJSArray(&m_exec->globalData(), object) || object->inherits(&JSArray::s_info); }
static EncodedJSValue JSC_HOST_CALL constructWithConstructor(ExecState* exec) { JSObject* constructor = exec->callee(); ASSERT(constructor->inherits(&JSNPObject::s_info)); return JSValue::encode(static_cast<JSNPObject*>(constructor)->callConstructor(exec)); }
static EncodedJSValue JSC_HOST_CALL callNPJSObject(ExecState* exec) { JSObject* object = exec->callee(); ASSERT(object->inherits(&JSNPObject::s_info)); return JSValue::encode(static_cast<JSNPObject*>(object)->callObject(exec)); }
JSValue *DOMMessageEventProtoFunc::callAsFunction(ExecState *exec, JSObject *thisObj, const List &args) { KJS_CHECK_THIS( KJS::DOMMessageEvent, thisObj ); DOM::MessageEventImpl& messageEvent = *static_cast<DOMMessageEvent *>(thisObj)->impl(); switch (id) { case DOMMessageEvent::InitMessageEvent: { JSObject* sourceObj = args[3]->getObject(); Window* sourceWin = 0; if (sourceObj && sourceObj->inherits(&Window::info)) sourceWin = static_cast<Window *>(sourceObj); KHTMLPart* part = 0; if (sourceWin) part = qobject_cast<KHTMLPart*>(sourceWin->part()); if (!part) { setDOMException(exec, DOM::DOMException::TYPE_MISMATCH_ERR); return jsUndefined(); } messageEvent.initMessageEvent(args[0]->toString(exec).domString(), // typeArg, args[1]->toBoolean(exec), // canBubbleArg args[2]->toBoolean(exec), // cancelableArg encapsulateMessageEventData( exec, exec->dynamicInterpreter(), args[3]), // dataArg args[4]->toString(exec).domString(), // originArg args[5]->toString(exec).domString(), // lastEventIdArg part); // sourceArg return jsUndefined(); } } return jsUndefined(); }
bool JSObjectDeletePrivateProperty(JSContextRef ctx, JSObjectRef object, JSStringRef propertyName) { ExecState* exec = toJS(ctx); APIEntryShim entryShim(exec); JSObject* jsObject = toJS(object); Identifier name(propertyName->identifier(&exec->globalData())); if (jsObject->inherits(&JSCallbackObject<JSGlobalObject>::s_info)) { jsCast<JSCallbackObject<JSGlobalObject>*>(jsObject)->deletePrivateProperty(name); return true; } if (jsObject->inherits(&JSCallbackObject<JSNonFinalObject>::s_info)) { jsCast<JSCallbackObject<JSNonFinalObject>*>(jsObject)->deletePrivateProperty(name); return true; } return false; }
JSValueRef JSObjectGetPrivateProperty(JSContextRef ctx, JSObjectRef object, JSStringRef propertyName) { ExecState* exec = toJS(ctx); APIEntryShim entryShim(exec); JSObject* jsObject = toJS(object); JSValue result; Identifier name(propertyName->identifier(&exec->vm())); if (jsObject->inherits(&JSCallbackObject<JSGlobalObject>::s_info)) result = jsCast<JSCallbackObject<JSGlobalObject>*>(jsObject)->getPrivateProperty(name); else if (jsObject->inherits(&JSCallbackObject<JSDestructibleObject>::s_info)) result = jsCast<JSCallbackObject<JSDestructibleObject>*>(jsObject)->getPrivateProperty(name); #if JSC_OBJC_API_ENABLED else if (jsObject->inherits(&JSCallbackObject<JSAPIWrapperObject>::s_info)) result = jsCast<JSCallbackObject<JSAPIWrapperObject>*>(jsObject)->getPrivateProperty(name); #endif return toRef(exec, result); }
bool JSObjectSetPrivateProperty(JSContextRef ctx, JSObjectRef object, JSStringRef propertyName, JSValueRef value) { ExecState* exec = toJS(ctx); APIEntryShim entryShim(exec); JSObject* jsObject = toJS(object); JSValue jsValue = value ? toJS(exec, value) : JSValue(); Identifier name(propertyName->identifier(&exec->globalData())); if (jsObject->inherits(&JSCallbackObject<JSGlobalObject>::s_info)) { jsCast<JSCallbackObject<JSGlobalObject>*>(jsObject)->setPrivateProperty(exec->globalData(), name, jsValue); return true; } if (jsObject->inherits(&JSCallbackObject<JSDestructibleObject>::s_info)) { jsCast<JSCallbackObject<JSDestructibleObject>*>(jsObject)->setPrivateProperty(exec->globalData(), name, jsValue); return true; } return false; }
DOM::EventImpl* KJS::toEvent(JSValue *val) { JSObject *obj = val->getObject(); if (!obj || !obj->inherits(&DOMEvent::info)) return 0; const DOMEvent *dobj = static_cast<const DOMEvent*>(obj); return dobj->impl(); }
void* JSObjectGetPrivate(JSObjectRef object) { JSObject* jsObject = uncheckedToJS(object); // Get wrapped object if proxied if (jsObject->inherits(JSProxy::info())) jsObject = jsCast<JSProxy*>(jsObject)->target(); if (jsObject->inherits(JSCallbackObject<JSGlobalObject>::info())) return jsCast<JSCallbackObject<JSGlobalObject>*>(jsObject)->getPrivate(); if (jsObject->inherits(JSCallbackObject<JSDestructibleObject>::info())) return jsCast<JSCallbackObject<JSDestructibleObject>*>(jsObject)->getPrivate(); #if JSC_OBJC_API_ENABLED if (jsObject->inherits(JSCallbackObject<JSAPIWrapperObject>::info())) return jsCast<JSCallbackObject<JSAPIWrapperObject>*>(jsObject)->getPrivate(); #endif return 0; }
BaseSamplerNode* SamplerApollo::willExecute(ExecState* exec, JSValue function, int32_t& lineNo) { ASSERT(lineNo == 0); if (!seenByProfiler(function)) return 0; JSObject* object = asObject(function); if (object->inherits(&JSFunction::info)) { JSFunction* jsFunction = asFunction(function); // we should take lineno only for non host functions // otherwise we end up with wrong line numbers for functions like // DOM functions, which should have 0 as line number // see bug 2587164 if (!jsFunction->isHostFunction()) lineNo = jsFunction->jsExecutable()->lineNo(); } BaseSamplerNode* samplerNode = getSamplerNodeFor(static_cast<JSCell*>(object)); if (!samplerNode) { // try to inject the object now // as it might have been created while sampling was disabled // this can happen when the sample buffer runs out of space ASSERT(exec->dynamicGlobalObject()); uint64_t globalObjectIdentifier = 0; JSGlobalObject* globalObject = exec->dynamicGlobalObject(); BaseSamplerNode* globalObjectSample = getSamplerNodeFor(globalObject); if (globalObjectSample) globalObjectIdentifier = globalObjectSample->identifier(); PassRefPtr<SamplerJSCellNode> samplerNodeRef = adoptRef(new SamplerJSCellNode(globalObjectIdentifier, static_cast<JSCell*>(object), sizeof(JSObject))); samplerNode = samplerNodeRef.get(); // the sampler might be stopped by the time we get here // and register node will not give an id // in this cases we just fail here if (!registerNode(samplerNodeRef)) return 0; } samplerDidEnterFunction(samplerNode->identifier(), lineNo); // do not increment invocationCount if sampling is paused // however, we called samplerDidEnterFunction because we need to keep the callstack in sync if (UNLIKELY(!samplingNow)) return samplerNode; samplerNode->willExecute(); return samplerNode; }
JSObject* addErrorInfo(ExecState* exec, JSObject* error, int line, const SourceCode& source) { JSGlobalData* globalData = &exec->globalData(); addErrorInfo(globalData, error, line, source); JSArray* stack = constructEmptyArray(exec); CallFrame* frame = exec; JSObject* stackFrame; CodeBlock* codeBlock; UString sourceURL; UString functionName; ReturnAddressPtr pc; while (!frame->hasHostCallFrameFlag()) { stackFrame = constructEmptyObject(exec); codeBlock = frame->codeBlock(); // sourceURL sourceURL = codeBlock->ownerExecutable()->sourceURL(); stackFrame->putWithAttributes( globalData, Identifier(globalData, sourceURLPropertyName), jsString(globalData, sourceURL), ReadOnly | DontDelete ); // line if (frame != exec) { line = codeBlock->lineNumberForBytecodeOffset(codeBlock->bytecodeOffset(pc)); } stackFrame->putWithAttributes( globalData, Identifier(globalData, linePropertyName), jsNumber(line), ReadOnly | DontDelete ); // function JSObject* function = frame->callee(); if (function && function->inherits(&JSFunction::s_info)) { functionName = asFunction(function)->calculatedDisplayName(exec); stackFrame->putWithAttributes( globalData, Identifier(globalData, functionPropertyName), jsString(globalData, functionName), ReadOnly | DontDelete ); } stack->push(exec, JSValue(stackFrame)); pc = frame->returnPC(); frame = frame->callerFrame(); } error->putWithAttributes(globalData, Identifier(globalData, stackPropertyName), stack, ReadOnly | DontDelete); return error; }
UString DebuggerCallFrame::calculatedFunctionName() const { if (!m_callFrame->codeBlock()) return UString(); JSObject* function = m_callFrame->callee(); if (!function || !function->inherits(&JSFunction::s_info)) return UString(); return asFunction(function)->calculatedDisplayName(m_callFrame); }
JSQuarantinedObjectWrapper* JSQuarantinedObjectWrapper::asWrapper(JSValue* value) { if (!value->isObject()) return 0; JSObject* object = static_cast<JSObject*>(value); if (!object->inherits(&JSQuarantinedObjectWrapper::s_info)) return 0; return static_cast<JSQuarantinedObjectWrapper*>(object); }
bool JSObjectSetPrivate(JSObjectRef object, void* data) { JSObject* jsObject = uncheckedToJS(object); if (jsObject->inherits(&JSCallbackObject<JSGlobalObject>::s_info)) { jsCast<JSCallbackObject<JSGlobalObject>*>(jsObject)->setPrivate(data); return true; } if (jsObject->inherits(&JSCallbackObject<JSDestructibleObject>::s_info)) { jsCast<JSCallbackObject<JSDestructibleObject>*>(jsObject)->setPrivate(data); return true; } #if JSC_OBJC_API_ENABLED if (jsObject->inherits(&JSCallbackObject<JSAPIWrapperObject>::s_info)) { jsCast<JSCallbackObject<JSAPIWrapperObject>*>(jsObject)->setPrivate(data); return true; } #endif return false; }
bool JSObjectDeletePrivateProperty(JSContextRef ctx, JSObjectRef object, JSStringRef propertyName) { ExecState* exec = toJS(ctx); APIEntryShim entryShim(exec); JSObject* jsObject = toJS(object); Identifier name(propertyName->identifier(&exec->vm())); if (jsObject->inherits(&JSCallbackObject<JSGlobalObject>::s_info)) { jsCast<JSCallbackObject<JSGlobalObject>*>(jsObject)->deletePrivateProperty(name); return true; } if (jsObject->inherits(&JSCallbackObject<JSDestructibleObject>::s_info)) { jsCast<JSCallbackObject<JSDestructibleObject>*>(jsObject)->deletePrivateProperty(name); return true; } #if JSC_OBJC_API_ENABLED if (jsObject->inherits(&JSCallbackObject<JSAPIWrapperObject>::s_info)) { jsCast<JSCallbackObject<JSAPIWrapperObject>*>(jsObject)->deletePrivateProperty(name); return true; } #endif return false; }