Changeset 846 for trunk/src/script/api/qscriptcontext.cpp
- Timestamp:
- May 5, 2011, 5:36:53 AM (14 years ago)
- Location:
- trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk
- Property svn:mergeinfo changed
/branches/vendor/nokia/qt/4.7.2 (added) merged: 845 /branches/vendor/nokia/qt/current merged: 844 /branches/vendor/nokia/qt/4.6.3 removed
- Property svn:mergeinfo changed
-
trunk/src/script/api/qscriptcontext.cpp
r651 r846 1 1 /**************************************************************************** 2 2 ** 3 ** Copyright (C) 201 0Nokia Corporation and/or its subsidiary(-ies).3 ** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). 4 4 ** All rights reserved. 5 5 ** Contact: Nokia Corporation (qt-info@nokia.com) … … 162 162 { 163 163 JSC::CallFrame *frame = QScriptEnginePrivate::frameForContext(this); 164 QScript::APIShim shim(QScript::scriptEngineFromExec(frame)); 164 165 JSC::JSValue jscValue = QScript::scriptEngineFromExec(frame)->scriptValueToJSCValue(value); 165 166 frame->setException(jscValue); … … 184 185 { 185 186 JSC::CallFrame *frame = QScriptEnginePrivate::frameForContext(this); 187 QScript::APIShim shim(QScript::scriptEngineFromExec(frame)); 186 188 JSC::ErrorType jscError = JSC::GeneralError; 187 189 switch (error) { … … 219 221 { 220 222 JSC::CallFrame *frame = QScriptEnginePrivate::frameForContext(this); 223 QScript::APIShim shim(QScript::scriptEngineFromExec(frame)); 221 224 JSC::JSObject *result = JSC::throwError(frame, JSC::GeneralError, text); 222 225 return QScript::scriptEngineFromExec(frame)->scriptValueFromJSCValue(result); … … 266 269 { 267 270 const JSC::CallFrame *frame = QScriptEnginePrivate::frameForContext(this); 271 QScript::APIShim shim(QScript::scriptEngineFromExec(frame)); 268 272 return QScript::scriptEngineFromExec(frame)->scriptValueFromJSCValue(frame->callee()); 269 273 } … … 287 291 { 288 292 JSC::CallFrame *frame = const_cast<JSC::ExecState*>(QScriptEnginePrivate::frameForContext(this)); 293 QScript::APIShim shim(QScript::scriptEngineFromExec(frame)); 289 294 290 295 if (frame == frame->lexicalGlobalObject()->globalExec()) { … … 295 300 //for a js function 296 301 if (frame->codeBlock() && frame->callee()) { 302 if (!QScriptEnginePrivate::hasValidCodeBlockRegister(frame)) { 303 // We have a built-in JS host call. 304 // codeBlock is needed by retrieveArguments(), but since it 305 // contains junk, we would crash. Return an invalid value for now. 306 return QScriptValue(); 307 } 297 308 JSC::JSValue result = frame->interpreter()->retrieveArguments(frame, JSC::asFunction(frame->callee())); 298 309 return QScript::scriptEngineFromExec(frame)->scriptValueFromJSCValue(result); … … 305 316 306 317 //for a native function 307 if (!frame->optionalCalleeArguments()) { 318 if (!frame->optionalCalleeArguments() 319 && QScriptEnginePrivate::hasValidCodeBlockRegister(frame)) { // Make sure we don't go here for host JSFunctions 308 320 Q_ASSERT(frame->argumentCount() > 0); //we need at least 'this' otherwise we'll crash later 309 321 JSC::Arguments* arguments = new (&frame->globalData())JSC::Arguments(frame, JSC::Arguments::NoParameters); … … 319 331 When a function is called as constructor, the thisObject() 320 332 contains the newly constructed object to be initialized. 333 334 \note This function is only guaranteed to work for a context 335 corresponding to native functions. 321 336 */ 322 337 bool QScriptContext::isCalledAsConstructor() const 323 338 { 324 339 JSC::CallFrame *frame = const_cast<JSC::ExecState*>(QScriptEnginePrivate::frameForContext(this)); 340 QScript::APIShim shim(QScript::scriptEngineFromExec(frame)); 325 341 326 342 //For native functions, look up flags. … … 356 372 { 357 373 const JSC::CallFrame *frame = QScriptEnginePrivate::frameForContext(this); 374 QScript::APIShim shim(QScript::scriptEngineFromExec(frame)); 358 375 JSC::CallFrame *callerFrame = frame->callerFrame()->removeHostCallFrameFlag(); 359 376 return QScriptEnginePrivate::contextForFrame(callerFrame); … … 407 424 context. 408 425 426 \note The activation object might not be available if there is no 427 active QScriptEngineAgent, as it might be optimized. 428 409 429 \sa argument(), argumentsObject() 410 430 */ … … 413 433 { 414 434 JSC::CallFrame *frame = const_cast<JSC::ExecState*>(QScriptEnginePrivate::frameForContext(this)); 435 QScript::APIShim shim(QScript::scriptEngineFromExec(frame)); 415 436 JSC::JSObject *result = 0; 416 437 … … 465 486 466 487 If \a activation is not an object, this function does nothing. 488 489 \note For a context corresponding to a JavaScript function, this is only 490 guaranteed to work if there was an QScriptEngineAgent active on the 491 engine while the function was evaluated. 467 492 */ 468 493 void QScriptContext::setActivationObject(const QScriptValue &activation) … … 478 503 JSC::CallFrame *frame = QScriptEnginePrivate::frameForContext(this); 479 504 QScriptEnginePrivate *engine = QScript::scriptEngineFromExec(frame); 505 QScript::APIShim shim(engine); 480 506 JSC::JSObject *object = JSC::asObject(engine->scriptValueToJSCValue(activation)); 481 507 if (object == engine->originalGlobalObjectProxy) … … 522 548 JSC::CallFrame *frame = const_cast<JSC::ExecState*>(QScriptEnginePrivate::frameForContext(this)); 523 549 QScriptEnginePrivate *engine = QScript::scriptEngineFromExec(frame); 550 QScript::APIShim shim(engine); 524 551 JSC::JSValue result = engine->thisForContext(frame); 525 552 if (!result || result.isNull()) … … 537 564 { 538 565 JSC::CallFrame *frame = QScriptEnginePrivate::frameForContext(this); 566 QScript::APIShim shim(QScript::scriptEngineFromExec(frame)); 539 567 if (!thisObject.isObject()) 540 568 return; … … 663 691 const JSC::CallFrame *frame = QScriptEnginePrivate::frameForContext(this); 664 692 QScriptEnginePrivate *engine = QScript::scriptEngineFromExec(frame); 693 QScript::APIShim shim(engine); 665 694 QScriptValueList result; 666 695 JSC::ScopeChainNode *node = frame->scopeChain(); … … 701 730 JSC::CallFrame *frame = QScriptEnginePrivate::frameForContext(this); 702 731 QScriptEnginePrivate *engine = QScript::scriptEngineFromExec(frame); 732 QScript::APIShim shim(engine); 703 733 JSC::JSObject *jscObject = JSC::asObject(engine->scriptValueToJSCValue(object)); 704 734 if (jscObject == engine->originalGlobalObjectProxy) … … 730 760 QScriptValue QScriptContext::popScope() 731 761 { 762 activationObject(); //ensure the creation of the normal scope for native context 732 763 JSC::CallFrame *frame = QScriptEnginePrivate::frameForContext(this); 733 764 JSC::ScopeChainNode *scope = frame->scopeChain(); 734 765 Q_ASSERT(scope != 0); 735 766 QScriptEnginePrivate *engine = QScript::scriptEngineFromExec(frame); 767 QScript::APIShim shim(engine); 736 768 QScriptValue result = engine->scriptValueFromJSCValue(scope->object); 737 769 if (!scope->next) {
Note:
See TracChangeset
for help on using the changeset viewer.