QScriptValue QScriptDeclarativeClass::property(const QScriptValue &v, const Identifier &name) { QScriptValuePrivate *d = QScriptValuePrivate::get(v); if (!d->isObject()) return QScriptValue(); JSC::ExecState *exec = d->engine->currentFrame; JSC::JSObject *object = d->jscValue.getObject(); JSC::PropertySlot slot(const_cast<JSC::JSObject*>(object)); JSC::JSValue result; JSC::Identifier id(exec, (JSC::UString::Rep *)name); if (const_cast<JSC::JSObject*>(object)->getOwnPropertySlot(exec, id, slot)) { result = slot.getValue(exec, id); return d->engine->scriptValueFromJSCValue(result); } return QScriptValue(); }
QScriptDeclarativeClass::Value QScriptDeclarativeClass::functionValue(const QScriptValue &v, const Identifier &name) { QScriptValuePrivate *d = QScriptValuePrivate::get(v); if (!d->isObject()) return Value(); QScript::APIShim shim(d->engine); JSC::ExecState *exec = d->engine->currentFrame; JSC::JSObject *object = d->jscValue.getObject(); JSC::PropertySlot slot(const_cast<JSC::JSObject*>(object)); JSC::JSValue result; JSC::Identifier id(exec, (JSC::UString::Rep *)name); if (const_cast<JSC::JSObject*>(object)->getOwnPropertySlot(exec, id, slot)) { result = slot.getValue(exec, id); if (QScript::isFunction(result)) return jscToValue(result); } return Value(); }