diff options
Diffstat (limited to 'src/script/api/qscriptengine.cpp')
-rw-r--r-- | src/script/api/qscriptengine.cpp | 112 |
1 files changed, 32 insertions, 80 deletions
diff --git a/src/script/api/qscriptengine.cpp b/src/script/api/qscriptengine.cpp index c3c8caf..9288723 100644 --- a/src/script/api/qscriptengine.cpp +++ b/src/script/api/qscriptengine.cpp @@ -343,15 +343,10 @@ public: namespace QScript { -struct GlobalClientData : public JSC::JSGlobalData::ClientData +void GlobalClientData::mark(JSC::MarkStack& markStack) { - GlobalClientData(QScriptEnginePrivate *e) - : engine(e) {} - virtual ~GlobalClientData() {} - virtual void mark(JSC::MarkStack& markStack) { engine->mark(markStack); } - - QScriptEnginePrivate *engine; -}; + engine->mark(markStack); +} class TimeoutCheckerProxy : public JSC::TimeoutChecker { @@ -452,11 +447,6 @@ qsreal integerFromString(const QString &str, int radix) return integerFromString(ba.constData(), ba.size(), radix); } -QScriptEnginePrivate *scriptEngineFromExec(const JSC::ExecState *exec) -{ - return static_cast<GlobalClientData*>(exec->globalData().clientData)->engine; -} - bool isFunction(JSC::JSValue value) { if (!value || !value.isObject()) @@ -995,26 +985,6 @@ void QScriptEnginePrivate::setDefaultPrototype(int metaTypeId, JSC::JSValue prot info->prototype = prototype; } -QScriptContext *QScriptEnginePrivate::contextForFrame(JSC::ExecState *frame) -{ - if (frame && frame->callerFrame()->hasHostCallFrameFlag() && !frame->callee() - && frame->callerFrame()->removeHostCallFrameFlag() == QScript::scriptEngineFromExec(frame)->globalExec()) { - //skip the "fake" context created in Interpreter::execute. - frame = frame->callerFrame()->removeHostCallFrameFlag(); - } - return reinterpret_cast<QScriptContext *>(frame); -} - -JSC::ExecState *QScriptEnginePrivate::frameForContext(QScriptContext *context) -{ - return reinterpret_cast<JSC::ExecState*>(context); -} - -const JSC::ExecState *QScriptEnginePrivate::frameForContext(const QScriptContext *context) -{ - return reinterpret_cast<const JSC::ExecState*>(context); -} - JSC::JSGlobalObject *QScriptEnginePrivate::originalGlobalObject() const { return globalData->head; @@ -1056,11 +1026,6 @@ void QScriptEnginePrivate::setGlobalObject(JSC::JSObject *object) } } -JSC::ExecState *QScriptEnginePrivate::globalExec() const -{ - return originalGlobalObject()->globalExec(); -} - /*! \internal @@ -2543,63 +2508,50 @@ QScriptValue QScriptEngine::create(int type, const void *ptr) QScriptValue QScriptEnginePrivate::create(int type, const void *ptr) { + Q_Q(QScriptEngine); Q_ASSERT(ptr != 0); QScriptValue result; QScriptTypeInfo *info = m_typeInfos.value(type); if (info && info->marshal) { - result = info->marshal(q_func(), ptr); + result = info->marshal(q, ptr); } else { // check if it's one of the types we know switch (QMetaType::Type(type)) { case QMetaType::Void: - result = QScriptValue(QScriptValue::UndefinedValue); - break; + return QScriptValue(q, QScriptValue::UndefinedValue); case QMetaType::Bool: - result = QScriptValue(*reinterpret_cast<const bool*>(ptr)); - break; + return QScriptValue(q, *reinterpret_cast<const bool*>(ptr)); case QMetaType::Int: - result = QScriptValue(*reinterpret_cast<const int*>(ptr)); - break; + return QScriptValue(q, *reinterpret_cast<const int*>(ptr)); case QMetaType::UInt: - result = QScriptValue(*reinterpret_cast<const uint*>(ptr)); - break; + return QScriptValue(q, *reinterpret_cast<const uint*>(ptr)); case QMetaType::LongLong: - result = QScriptValue(qsreal(*reinterpret_cast<const qlonglong*>(ptr))); - break; + return QScriptValue(q, qsreal(*reinterpret_cast<const qlonglong*>(ptr))); case QMetaType::ULongLong: #if defined(Q_OS_WIN) && defined(_MSC_FULL_VER) && _MSC_FULL_VER <= 12008804 #pragma message("** NOTE: You need the Visual Studio Processor Pack to compile support for 64bit unsigned integers.") - result = QScriptValue(qsreal((qlonglong)*reinterpret_cast<const qulonglong*>(ptr))); + return QScriptValue(q, qsreal((qlonglong)*reinterpret_cast<const qulonglong*>(ptr))); #elif defined(Q_CC_MSVC) && !defined(Q_CC_MSVC_NET) - result = QScriptValue(qsreal((qlonglong)*reinterpret_cast<const qulonglong*>(ptr))); + return QScriptValue(q, qsreal((qlonglong)*reinterpret_cast<const qulonglong*>(ptr))); #else - result = QScriptValue(qsreal(*reinterpret_cast<const qulonglong*>(ptr))); + return QScriptValue(q, qsreal(*reinterpret_cast<const qulonglong*>(ptr))); #endif - break; case QMetaType::Double: - result = QScriptValue(*reinterpret_cast<const double*>(ptr)); - break; + return QScriptValue(q, qsreal(*reinterpret_cast<const double*>(ptr))); case QMetaType::QString: - result = QScriptValue(q_func(), *reinterpret_cast<const QString*>(ptr)); - break; + return QScriptValue(q, *reinterpret_cast<const QString*>(ptr)); case QMetaType::Float: - result = QScriptValue(*reinterpret_cast<const float*>(ptr)); - break; + return QScriptValue(q, *reinterpret_cast<const float*>(ptr)); case QMetaType::Short: - result = QScriptValue(*reinterpret_cast<const short*>(ptr)); - break; + return QScriptValue(q, *reinterpret_cast<const short*>(ptr)); case QMetaType::UShort: - result = QScriptValue(*reinterpret_cast<const unsigned short*>(ptr)); - break; + return QScriptValue(q, *reinterpret_cast<const unsigned short*>(ptr)); case QMetaType::Char: - result = QScriptValue(*reinterpret_cast<const char*>(ptr)); - break; + return QScriptValue(q, *reinterpret_cast<const char*>(ptr)); case QMetaType::UChar: - result = QScriptValue(*reinterpret_cast<const unsigned char*>(ptr)); - break; + return QScriptValue(q, *reinterpret_cast<const unsigned char*>(ptr)); case QMetaType::QChar: - result = QScriptValue((*reinterpret_cast<const QChar*>(ptr)).unicode()); - break; + return QScriptValue(q, (*reinterpret_cast<const QChar*>(ptr)).unicode()); case QMetaType::QStringList: result = arrayFromStringList(*reinterpret_cast<const QStringList *>(ptr)); break; @@ -2610,38 +2562,38 @@ QScriptValue QScriptEnginePrivate::create(int type, const void *ptr) result = objectFromVariantMap(*reinterpret_cast<const QVariantMap *>(ptr)); break; case QMetaType::QDateTime: - result = q_func()->newDate(*reinterpret_cast<const QDateTime *>(ptr)); + result = q->newDate(*reinterpret_cast<const QDateTime *>(ptr)); break; case QMetaType::QDate: - result = q_func()->newDate(QDateTime(*reinterpret_cast<const QDate *>(ptr))); + result = q->newDate(QDateTime(*reinterpret_cast<const QDate *>(ptr))); break; #ifndef QT_NO_REGEXP case QMetaType::QRegExp: - result = q_func()->newRegExp(*reinterpret_cast<const QRegExp *>(ptr)); + result = q->newRegExp(*reinterpret_cast<const QRegExp *>(ptr)); break; #endif #ifndef QT_NO_QOBJECT case QMetaType::QObjectStar: case QMetaType::QWidgetStar: - result = q_func()->newQObject(*reinterpret_cast<QObject* const *>(ptr)); + result = q->newQObject(*reinterpret_cast<QObject* const *>(ptr)); break; #endif default: if (type == qMetaTypeId<QScriptValue>()) { result = *reinterpret_cast<const QScriptValue*>(ptr); if (!result.isValid()) - result = QScriptValue(QScriptValue::UndefinedValue); + return QScriptValue(q, QScriptValue::UndefinedValue); } #ifndef QT_NO_QOBJECT // lazy registration of some common list types else if (type == qMetaTypeId<QObjectList>()) { - qScriptRegisterSequenceMetaType<QObjectList>(q_func()); + qScriptRegisterSequenceMetaType<QObjectList>(q); return create(type, ptr); } #endif else if (type == qMetaTypeId<QList<int> >()) { - qScriptRegisterSequenceMetaType<QList<int> >(q_func()); + qScriptRegisterSequenceMetaType<QList<int> >(q); return create(type, ptr); } @@ -2650,9 +2602,9 @@ QScriptValue QScriptEnginePrivate::create(int type, const void *ptr) if (typeName == "QVariant") result = scriptValueFromVariant(*reinterpret_cast<const QVariant*>(ptr)); if (typeName.endsWith('*') && !*reinterpret_cast<void* const *>(ptr)) - result = QScriptValue(QScriptValue::NullValue); + return QScriptValue(q, QScriptValue::NullValue); else - result = q_func()->newVariant(QVariant(type, ptr)); + result = q->newVariant(QVariant(type, ptr)); } } } @@ -2667,8 +2619,8 @@ bool QScriptEnginePrivate::convert(const QScriptValue &value, int type, void *ptr, QScriptEnginePrivate *eng) { - if (!eng && value.engine()) - eng = QScriptEnginePrivate::get(value.engine()); + if (!eng) + eng = QScriptValuePrivate::getEngine(value); if (eng) { QScriptTypeInfo *info = eng->m_typeInfos.value(type); if (info && info->demarshal) { |