diff options
author | Olivier Goffart <ogoffart@trolltech.com> | 2009-08-24 08:34:57 (GMT) |
---|---|---|
committer | Olivier Goffart <ogoffart@trolltech.com> | 2009-08-24 08:34:57 (GMT) |
commit | 648498dd839d88ea6ce9889eb71e16ac9a42e988 (patch) | |
tree | 5615d0fda515bddbe915930679599f026a6fabda /src/script/api | |
parent | 351870317388ac7479b39015263f1db440cc6587 (diff) | |
download | Qt-648498dd839d88ea6ce9889eb71e16ac9a42e988.zip Qt-648498dd839d88ea6ce9889eb71e16ac9a42e988.tar.gz Qt-648498dd839d88ea6ce9889eb71e16ac9a42e988.tar.bz2 |
Fix QScriptContext::argumentObjects for function called with QScriptValue::call
They have the hostCallFrameFlag, but are function context, not <eval> context
Diffstat (limited to 'src/script/api')
-rw-r--r-- | src/script/api/qscriptcontext.cpp | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/src/script/api/qscriptcontext.cpp b/src/script/api/qscriptcontext.cpp index 0b1ca33..6a85ede 100644 --- a/src/script/api/qscriptcontext.cpp +++ b/src/script/api/qscriptcontext.cpp @@ -305,8 +305,8 @@ QScriptValue QScriptContext::argumentsObject() const { JSC::CallFrame *frame = const_cast<JSC::ExecState*>(QScriptEnginePrivate::frameForContext(this)); - if (frame == frame->lexicalGlobalObject()->globalExec() || frame->callerFrame()->hasHostCallFrameFlag()) { - // <global> or <eval> context doesn't have arguments. return an empty object + if (frame == frame->lexicalGlobalObject()->globalExec()) { + // <global> context doesn't have arguments. return an empty object return QScriptEnginePrivate::get(QScript::scriptEngineFromExec(frame))->newObject(); } @@ -316,6 +316,11 @@ QScriptValue QScriptContext::argumentsObject() const return QScript::scriptEngineFromExec(frame)->scriptValueFromJSCValue(result); } + if (frame->callerFrame()->hasHostCallFrameFlag()) { + // <eval> context doesn't have arguments. return an empty object + return QScriptEnginePrivate::get(QScript::scriptEngineFromExec(frame))->newObject(); + } + //for a native function if (!frame->optionalCalleeArguments()) { Q_ASSERT(frame->argumentCount() > 0); //we need at least 'this' otherwise we'll crash later |