summaryrefslogtreecommitdiffstats
path: root/src/script/api/qscriptengine.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/script/api/qscriptengine.cpp')
-rw-r--r--src/script/api/qscriptengine.cpp112
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) {