equal
deleted
inserted
replaced
159 \sa throwError(), state() |
159 \sa throwError(), state() |
160 */ |
160 */ |
161 QScriptValue QScriptContext::throwValue(const QScriptValue &value) |
161 QScriptValue QScriptContext::throwValue(const QScriptValue &value) |
162 { |
162 { |
163 JSC::CallFrame *frame = QScriptEnginePrivate::frameForContext(this); |
163 JSC::CallFrame *frame = QScriptEnginePrivate::frameForContext(this); |
|
164 QScript::APIShim shim(QScript::scriptEngineFromExec(frame)); |
164 JSC::JSValue jscValue = QScript::scriptEngineFromExec(frame)->scriptValueToJSCValue(value); |
165 JSC::JSValue jscValue = QScript::scriptEngineFromExec(frame)->scriptValueToJSCValue(value); |
165 frame->setException(jscValue); |
166 frame->setException(jscValue); |
166 return value; |
167 return value; |
167 } |
168 } |
168 |
169 |
181 \sa throwValue(), state() |
182 \sa throwValue(), state() |
182 */ |
183 */ |
183 QScriptValue QScriptContext::throwError(Error error, const QString &text) |
184 QScriptValue QScriptContext::throwError(Error error, const QString &text) |
184 { |
185 { |
185 JSC::CallFrame *frame = QScriptEnginePrivate::frameForContext(this); |
186 JSC::CallFrame *frame = QScriptEnginePrivate::frameForContext(this); |
|
187 QScript::APIShim shim(QScript::scriptEngineFromExec(frame)); |
186 JSC::ErrorType jscError = JSC::GeneralError; |
188 JSC::ErrorType jscError = JSC::GeneralError; |
187 switch (error) { |
189 switch (error) { |
188 case UnknownError: |
190 case UnknownError: |
189 break; |
191 break; |
190 case ReferenceError: |
192 case ReferenceError: |
216 \sa throwValue(), state() |
218 \sa throwValue(), state() |
217 */ |
219 */ |
218 QScriptValue QScriptContext::throwError(const QString &text) |
220 QScriptValue QScriptContext::throwError(const QString &text) |
219 { |
221 { |
220 JSC::CallFrame *frame = QScriptEnginePrivate::frameForContext(this); |
222 JSC::CallFrame *frame = QScriptEnginePrivate::frameForContext(this); |
|
223 QScript::APIShim shim(QScript::scriptEngineFromExec(frame)); |
221 JSC::JSObject *result = JSC::throwError(frame, JSC::GeneralError, text); |
224 JSC::JSObject *result = JSC::throwError(frame, JSC::GeneralError, text); |
222 return QScript::scriptEngineFromExec(frame)->scriptValueFromJSCValue(result); |
225 return QScript::scriptEngineFromExec(frame)->scriptValueFromJSCValue(result); |
223 } |
226 } |
224 |
227 |
225 /*! |
228 /*! |
263 QScriptContext represents an invocation of. |
266 QScriptContext represents an invocation of. |
264 */ |
267 */ |
265 QScriptValue QScriptContext::callee() const |
268 QScriptValue QScriptContext::callee() const |
266 { |
269 { |
267 const JSC::CallFrame *frame = QScriptEnginePrivate::frameForContext(this); |
270 const JSC::CallFrame *frame = QScriptEnginePrivate::frameForContext(this); |
|
271 QScript::APIShim shim(QScript::scriptEngineFromExec(frame)); |
268 return QScript::scriptEngineFromExec(frame)->scriptValueFromJSCValue(frame->callee()); |
272 return QScript::scriptEngineFromExec(frame)->scriptValueFromJSCValue(frame->callee()); |
269 } |
273 } |
270 |
274 |
271 /*! |
275 /*! |
272 Returns the arguments object of this QScriptContext. |
276 Returns the arguments object of this QScriptContext. |
284 \sa argument(), activationObject() |
288 \sa argument(), activationObject() |
285 */ |
289 */ |
286 QScriptValue QScriptContext::argumentsObject() const |
290 QScriptValue QScriptContext::argumentsObject() const |
287 { |
291 { |
288 JSC::CallFrame *frame = const_cast<JSC::ExecState*>(QScriptEnginePrivate::frameForContext(this)); |
292 JSC::CallFrame *frame = const_cast<JSC::ExecState*>(QScriptEnginePrivate::frameForContext(this)); |
|
293 QScript::APIShim shim(QScript::scriptEngineFromExec(frame)); |
289 |
294 |
290 if (frame == frame->lexicalGlobalObject()->globalExec()) { |
295 if (frame == frame->lexicalGlobalObject()->globalExec()) { |
291 // <global> context doesn't have arguments. return an empty object |
296 // <global> context doesn't have arguments. return an empty object |
292 return QScriptEnginePrivate::get(QScript::scriptEngineFromExec(frame))->newObject(); |
297 return QScriptEnginePrivate::get(QScript::scriptEngineFromExec(frame))->newObject(); |
293 } |
298 } |
320 contains the newly constructed object to be initialized. |
325 contains the newly constructed object to be initialized. |
321 */ |
326 */ |
322 bool QScriptContext::isCalledAsConstructor() const |
327 bool QScriptContext::isCalledAsConstructor() const |
323 { |
328 { |
324 JSC::CallFrame *frame = const_cast<JSC::ExecState*>(QScriptEnginePrivate::frameForContext(this)); |
329 JSC::CallFrame *frame = const_cast<JSC::ExecState*>(QScriptEnginePrivate::frameForContext(this)); |
|
330 QScript::APIShim shim(QScript::scriptEngineFromExec(frame)); |
325 |
331 |
326 //For native functions, look up flags. |
332 //For native functions, look up flags. |
327 uint flags = QScriptEnginePrivate::contextFlags(frame); |
333 uint flags = QScriptEnginePrivate::contextFlags(frame); |
328 if (flags & QScriptEnginePrivate::NativeContext) |
334 if (flags & QScriptEnginePrivate::NativeContext) |
329 return flags & QScriptEnginePrivate::CalledAsConstructorContext; |
335 return flags & QScriptEnginePrivate::CalledAsConstructorContext; |
353 Returns the parent context of this QScriptContext. |
359 Returns the parent context of this QScriptContext. |
354 */ |
360 */ |
355 QScriptContext *QScriptContext::parentContext() const |
361 QScriptContext *QScriptContext::parentContext() const |
356 { |
362 { |
357 const JSC::CallFrame *frame = QScriptEnginePrivate::frameForContext(this); |
363 const JSC::CallFrame *frame = QScriptEnginePrivate::frameForContext(this); |
|
364 QScript::APIShim shim(QScript::scriptEngineFromExec(frame)); |
358 JSC::CallFrame *callerFrame = frame->callerFrame()->removeHostCallFrameFlag(); |
365 JSC::CallFrame *callerFrame = frame->callerFrame()->removeHostCallFrameFlag(); |
359 return QScriptEnginePrivate::contextForFrame(callerFrame); |
366 return QScriptEnginePrivate::contextForFrame(callerFrame); |
360 } |
367 } |
361 |
368 |
362 /*! |
369 /*! |
410 */ |
417 */ |
411 |
418 |
412 QScriptValue QScriptContext::activationObject() const |
419 QScriptValue QScriptContext::activationObject() const |
413 { |
420 { |
414 JSC::CallFrame *frame = const_cast<JSC::ExecState*>(QScriptEnginePrivate::frameForContext(this)); |
421 JSC::CallFrame *frame = const_cast<JSC::ExecState*>(QScriptEnginePrivate::frameForContext(this)); |
|
422 QScript::APIShim shim(QScript::scriptEngineFromExec(frame)); |
415 JSC::JSObject *result = 0; |
423 JSC::JSObject *result = 0; |
416 |
424 |
417 uint flags = QScriptEnginePrivate::contextFlags(frame); |
425 uint flags = QScriptEnginePrivate::contextFlags(frame); |
418 if ((flags & QScriptEnginePrivate::NativeContext) && !(flags & QScriptEnginePrivate::HasScopeContext)) { |
426 if ((flags & QScriptEnginePrivate::NativeContext) && !(flags & QScriptEnginePrivate::HasScopeContext)) { |
419 //For native functions, lazily create it if needed |
427 //For native functions, lazily create it if needed |
475 "a different engine"); |
483 "a different engine"); |
476 return; |
484 return; |
477 } |
485 } |
478 JSC::CallFrame *frame = QScriptEnginePrivate::frameForContext(this); |
486 JSC::CallFrame *frame = QScriptEnginePrivate::frameForContext(this); |
479 QScriptEnginePrivate *engine = QScript::scriptEngineFromExec(frame); |
487 QScriptEnginePrivate *engine = QScript::scriptEngineFromExec(frame); |
|
488 QScript::APIShim shim(engine); |
480 JSC::JSObject *object = JSC::asObject(engine->scriptValueToJSCValue(activation)); |
489 JSC::JSObject *object = JSC::asObject(engine->scriptValueToJSCValue(activation)); |
481 if (object == engine->originalGlobalObjectProxy) |
490 if (object == engine->originalGlobalObjectProxy) |
482 object = engine->originalGlobalObject(); |
491 object = engine->originalGlobalObject(); |
483 |
492 |
484 uint flags = QScriptEnginePrivate::contextFlags(frame); |
493 uint flags = QScriptEnginePrivate::contextFlags(frame); |
519 */ |
528 */ |
520 QScriptValue QScriptContext::thisObject() const |
529 QScriptValue QScriptContext::thisObject() const |
521 { |
530 { |
522 JSC::CallFrame *frame = const_cast<JSC::ExecState*>(QScriptEnginePrivate::frameForContext(this)); |
531 JSC::CallFrame *frame = const_cast<JSC::ExecState*>(QScriptEnginePrivate::frameForContext(this)); |
523 QScriptEnginePrivate *engine = QScript::scriptEngineFromExec(frame); |
532 QScriptEnginePrivate *engine = QScript::scriptEngineFromExec(frame); |
|
533 QScript::APIShim shim(engine); |
524 JSC::JSValue result = engine->thisForContext(frame); |
534 JSC::JSValue result = engine->thisForContext(frame); |
525 if (!result || result.isNull()) |
535 if (!result || result.isNull()) |
526 result = frame->globalThisValue(); |
536 result = frame->globalThisValue(); |
527 return engine->scriptValueFromJSCValue(result); |
537 return engine->scriptValueFromJSCValue(result); |
528 } |
538 } |
534 If \a thisObject is not an object, this function does nothing. |
544 If \a thisObject is not an object, this function does nothing. |
535 */ |
545 */ |
536 void QScriptContext::setThisObject(const QScriptValue &thisObject) |
546 void QScriptContext::setThisObject(const QScriptValue &thisObject) |
537 { |
547 { |
538 JSC::CallFrame *frame = QScriptEnginePrivate::frameForContext(this); |
548 JSC::CallFrame *frame = QScriptEnginePrivate::frameForContext(this); |
|
549 QScript::APIShim shim(QScript::scriptEngineFromExec(frame)); |
539 if (!thisObject.isObject()) |
550 if (!thisObject.isObject()) |
540 return; |
551 return; |
541 if (thisObject.engine() != engine()) { |
552 if (thisObject.engine() != engine()) { |
542 qWarning("QScriptContext::setThisObject() failed: " |
553 qWarning("QScriptContext::setThisObject() failed: " |
543 "cannot set an object created in " |
554 "cannot set an object created in " |
660 QScriptValueList QScriptContext::scopeChain() const |
671 QScriptValueList QScriptContext::scopeChain() const |
661 { |
672 { |
662 activationObject(); //ensure the creation of the normal scope for native context |
673 activationObject(); //ensure the creation of the normal scope for native context |
663 const JSC::CallFrame *frame = QScriptEnginePrivate::frameForContext(this); |
674 const JSC::CallFrame *frame = QScriptEnginePrivate::frameForContext(this); |
664 QScriptEnginePrivate *engine = QScript::scriptEngineFromExec(frame); |
675 QScriptEnginePrivate *engine = QScript::scriptEngineFromExec(frame); |
|
676 QScript::APIShim shim(engine); |
665 QScriptValueList result; |
677 QScriptValueList result; |
666 JSC::ScopeChainNode *node = frame->scopeChain(); |
678 JSC::ScopeChainNode *node = frame->scopeChain(); |
667 JSC::ScopeChainIterator it(node); |
679 JSC::ScopeChainIterator it(node); |
668 for (it = node->begin(); it != node->end(); ++it) { |
680 for (it = node->begin(); it != node->end(); ++it) { |
669 JSC::JSObject *object = *it; |
681 JSC::JSObject *object = *it; |
698 "a different engine"); |
710 "a different engine"); |
699 return; |
711 return; |
700 } |
712 } |
701 JSC::CallFrame *frame = QScriptEnginePrivate::frameForContext(this); |
713 JSC::CallFrame *frame = QScriptEnginePrivate::frameForContext(this); |
702 QScriptEnginePrivate *engine = QScript::scriptEngineFromExec(frame); |
714 QScriptEnginePrivate *engine = QScript::scriptEngineFromExec(frame); |
|
715 QScript::APIShim shim(engine); |
703 JSC::JSObject *jscObject = JSC::asObject(engine->scriptValueToJSCValue(object)); |
716 JSC::JSObject *jscObject = JSC::asObject(engine->scriptValueToJSCValue(object)); |
704 if (jscObject == engine->originalGlobalObjectProxy) |
717 if (jscObject == engine->originalGlobalObjectProxy) |
705 jscObject = engine->originalGlobalObject(); |
718 jscObject = engine->originalGlobalObject(); |
706 JSC::ScopeChainNode *scope = frame->scopeChain(); |
719 JSC::ScopeChainNode *scope = frame->scopeChain(); |
707 Q_ASSERT(scope != 0); |
720 Q_ASSERT(scope != 0); |
731 { |
744 { |
732 JSC::CallFrame *frame = QScriptEnginePrivate::frameForContext(this); |
745 JSC::CallFrame *frame = QScriptEnginePrivate::frameForContext(this); |
733 JSC::ScopeChainNode *scope = frame->scopeChain(); |
746 JSC::ScopeChainNode *scope = frame->scopeChain(); |
734 Q_ASSERT(scope != 0); |
747 Q_ASSERT(scope != 0); |
735 QScriptEnginePrivate *engine = QScript::scriptEngineFromExec(frame); |
748 QScriptEnginePrivate *engine = QScript::scriptEngineFromExec(frame); |
|
749 QScript::APIShim shim(engine); |
736 QScriptValue result = engine->scriptValueFromJSCValue(scope->object); |
750 QScriptValue result = engine->scriptValueFromJSCValue(scope->object); |
737 if (!scope->next) { |
751 if (!scope->next) { |
738 // We cannot have a null scope chain, so just zap the object pointer. |
752 // We cannot have a null scope chain, so just zap the object pointer. |
739 scope->object = 0; |
753 scope->object = 0; |
740 } else { |
754 } else { |