224 QScriptObject *obj = static_cast<QScriptObject*>(callee); |
224 QScriptObject *obj = static_cast<QScriptObject*>(callee); |
225 QScriptObjectDelegate *delegate = obj->delegate(); |
225 QScriptObjectDelegate *delegate = obj->delegate(); |
226 QScriptClass *scriptClass = static_cast<ClassObjectDelegate*>(delegate)->scriptClass(); |
226 QScriptClass *scriptClass = static_cast<ClassObjectDelegate*>(delegate)->scriptClass(); |
227 |
227 |
228 QScriptEnginePrivate *eng_p = scriptEngineFromExec(exec); |
228 QScriptEnginePrivate *eng_p = scriptEngineFromExec(exec); |
229 //JSC::ExecState *oldFrame = eng_p->currentFrame; |
229 JSC::ExecState *oldFrame = eng_p->currentFrame; |
230 eng_p->pushContext(exec, JSC::JSValue(), args, callee, true); |
230 eng_p->pushContext(exec, JSC::JSValue(), args, callee, true); |
231 QScriptContext *ctx = eng_p->contextForFrame(eng_p->currentFrame); |
231 QScriptContext *ctx = eng_p->contextForFrame(eng_p->currentFrame); |
232 |
232 |
233 QScriptValue defaultObject = ctx->thisObject(); |
233 QScriptValue defaultObject = ctx->thisObject(); |
234 QScriptValue result = qvariant_cast<QScriptValue>(scriptClass->extension(QScriptClass::Callable, qVariantFromValue(ctx))); |
234 QScriptValue result = qvariant_cast<QScriptValue>(scriptClass->extension(QScriptClass::Callable, qVariantFromValue(ctx))); |
235 if (!result.isObject()) |
235 if (!result.isObject()) |
236 result = defaultObject; |
236 result = defaultObject; |
|
237 eng_p->popContext(); |
|
238 eng_p->currentFrame = oldFrame; |
237 return JSC::asObject(eng_p->scriptValueToJSCValue(result)); |
239 return JSC::asObject(eng_p->scriptValueToJSCValue(result)); |
238 } |
240 } |
239 |
241 |
240 bool ClassObjectDelegate::hasInstance(QScriptObject* object, JSC::ExecState *exec, |
242 bool ClassObjectDelegate::hasInstance(QScriptObject* object, JSC::ExecState *exec, |
241 JSC::JSValue value, JSC::JSValue proto) |
243 JSC::JSValue value, JSC::JSValue proto) |