summaryrefslogtreecommitdiffstats
path: root/src/script/api
diff options
context:
space:
mode:
authoraxis <qt-info@nokia.com>2010-03-11 09:15:55 (GMT)
committeraxis <qt-info@nokia.com>2010-03-11 09:42:47 (GMT)
commita375537d32bc33ba1154ec132f99f5a779bce067 (patch)
tree3c23e3b2c44fb52d7d62036fe7dd793e589841e8 /src/script/api
parent02f6da62a42bd1059eb0da091d1f46efbb919750 (diff)
parent1e9552f826c05bf9884fb2893dedca265ead363b (diff)
downloadQt-a375537d32bc33ba1154ec132f99f5a779bce067.zip
Qt-a375537d32bc33ba1154ec132f99f5a779bce067.tar.gz
Qt-a375537d32bc33ba1154ec132f99f5a779bce067.tar.bz2
Merge branch '4.7' of scm.dev.nokia.troll.no:qt/qt-s60-public
Conflicts: mkspecs/common/symbian/symbian.conf qmake/generators/makefile.h qmake/project.cpp src/3rdparty/webkit/WebCore/WebCore.pro src/src.pro
Diffstat (limited to 'src/script/api')
-rw-r--r--src/script/api/qscriptengine.cpp59
-rw-r--r--src/script/api/qscriptengine_p.h38
-rw-r--r--src/script/api/qscriptvalue.cpp2
-rw-r--r--src/script/api/qscriptvalue_p.h4
4 files changed, 62 insertions, 41 deletions
diff --git a/src/script/api/qscriptengine.cpp b/src/script/api/qscriptengine.cpp
index d2e96d1..024b4d0 100644
--- a/src/script/api/qscriptengine.cpp
+++ b/src/script/api/qscriptengine.cpp
@@ -563,7 +563,7 @@ JSC::JSValue JSC_HOST_CALL functionDisconnect(JSC::ExecState *exec, JSC::JSObjec
slot = arg1;
else {
QScript::SaveFrameHelper saveFrame(engine, exec);
- QString propertyName(QScriptEnginePrivate::toString(exec, arg1));
+ JSC::UString propertyName = QScriptEnginePrivate::toString(exec, arg1);
slot = QScriptEnginePrivate::property(exec, arg0, propertyName, QScriptValue::ResolvePrototype);
}
}
@@ -645,7 +645,7 @@ JSC::JSValue JSC_HOST_CALL functionConnect(JSC::ExecState *exec, JSC::JSObject *
slot = arg1;
else {
QScript::SaveFrameHelper saveFrame(engine, exec);
- QString propertyName = QScriptEnginePrivate::toString(exec, arg1);
+ JSC::UString propertyName = QScriptEnginePrivate::toString(exec, arg1);
slot = QScriptEnginePrivate::property(exec, arg0, propertyName, QScriptValue::ResolvePrototype);
}
}
@@ -723,19 +723,19 @@ JSC::JSValue JSC_HOST_CALL functionQsTranslate(JSC::ExecState *exec, JSC::JSObje
if ((args.size() > 4) && !args.at(4).isNumber())
return JSC::throwError(exec, JSC::GeneralError, "qsTranslate(): fifth argument (n) must be a number");
#ifndef QT_NO_QOBJECT
- QString context(args.at(0).toString(exec));
+ JSC::UString context = args.at(0).toString(exec);
#endif
- QString text(args.at(1).toString(exec));
+ JSC::UString text = args.at(1).toString(exec);
#ifndef QT_NO_QOBJECT
- QString comment;
+ JSC::UString comment;
if (args.size() > 2)
comment = args.at(2).toString(exec);
QCoreApplication::Encoding encoding = QCoreApplication::CodecForTr;
if (args.size() > 3) {
- QString encStr(args.at(3).toString(exec));
- if (encStr == QLatin1String("CodecForTr"))
+ JSC::UString encStr = args.at(3).toString(exec);
+ if (encStr == "CodecForTr")
encoding = QCoreApplication::CodecForTr;
- else if (encStr == QLatin1String("UnicodeUTF8"))
+ else if (encStr == "UnicodeUTF8")
encoding = QCoreApplication::UnicodeUTF8;
else
return JSC::throwError(exec, JSC::GeneralError, QString::fromLatin1("qsTranslate(): invalid encoding '%s'").arg(encStr));
@@ -744,11 +744,11 @@ JSC::JSValue JSC_HOST_CALL functionQsTranslate(JSC::ExecState *exec, JSC::JSObje
if (args.size() > 4)
n = args.at(4).toInt32(exec);
#endif
- QString result;
+ JSC::UString result;
#ifndef QT_NO_QOBJECT
- result = QCoreApplication::translate(context.toLatin1().constData(),
- text.toLatin1().constData(),
- comment.toLatin1().constData(),
+ result = QCoreApplication::translate(QScript::convertToLatin1(context).constData(),
+ QScript::convertToLatin1(text).constData(),
+ QScript::convertToLatin1(comment).constData(),
encoding, n);
#else
result = text;
@@ -774,25 +774,25 @@ JSC::JSValue JSC_HOST_CALL functionQsTr(JSC::ExecState *exec, JSC::JSObject*, JS
if ((args.size() > 2) && !args.at(2).isNumber())
return JSC::throwError(exec, JSC::GeneralError, "qsTranslate(): third argument (n) must be a number");
#ifndef QT_NO_QOBJECT
- QString context;
+ JSC::UString context;
QScriptContext *ctx = QScriptEnginePrivate::contextForFrame(exec);
if (ctx && ctx->parentContext())
context = QFileInfo(QScriptContextInfo(ctx->parentContext()).fileName()).baseName();
#endif
- QString text(args.at(0).toString(exec));
+ JSC::UString text = args.at(0).toString(exec);
#ifndef QT_NO_QOBJECT
- QString comment;
+ JSC::UString comment;
if (args.size() > 1)
comment = args.at(1).toString(exec);
int n = -1;
if (args.size() > 2)
n = args.at(2).toInt32(exec);
#endif
- QString result;
+ JSC::UString result;
#ifndef QT_NO_QOBJECT
- result = QCoreApplication::translate(context.toLatin1().constData(),
- text.toLatin1().constData(),
- comment.toLatin1().constData(),
+ result = QCoreApplication::translate(QScript::convertToLatin1(context).constData(),
+ QScript::convertToLatin1(text).constData(),
+ QScript::convertToLatin1(comment).constData(),
QCoreApplication::CodecForTr, n);
#else
result = text;
@@ -1580,9 +1580,9 @@ QRegExp QScriptEnginePrivate::toRegExp(JSC::ExecState *exec, JSC::JSValue value)
{
if (!isRegExp(value))
return QRegExp();
- QString pattern = toString(exec, property(exec, value, QLatin1String("source"), QScriptValue::ResolvePrototype));
+ QString pattern = toString(exec, property(exec, value, "source", QScriptValue::ResolvePrototype));
Qt::CaseSensitivity kase = Qt::CaseSensitive;
- if (toBool(exec, property(exec, value, QLatin1String("ignoreCase"), QScriptValue::ResolvePrototype)))
+ if (toBool(exec, property(exec, value, "ignoreCase", QScriptValue::ResolvePrototype)))
kase = Qt::CaseInsensitive;
return QRegExp(pattern, kase, QRegExp::RegExp2);
}
@@ -1591,7 +1591,9 @@ QRegExp QScriptEnginePrivate::toRegExp(JSC::ExecState *exec, JSC::JSValue value)
QVariant QScriptEnginePrivate::toVariant(JSC::ExecState *exec, JSC::JSValue value)
{
- if (isObject(value)) {
+ if (!value) {
+ return QVariant();
+ } else if (isObject(value)) {
if (isVariant(value))
return variantValue(value);
#ifndef QT_NO_QOBJECT
@@ -1637,7 +1639,7 @@ JSC::JSValue QScriptEnginePrivate::propertyHelper(JSC::ExecState *exec, JSC::JSV
}
if (!result && (resolveMode & QScriptValue::ResolveScope)) {
// ### check if it's a function object and look in the scope chain
- JSC::JSValue scope = property(exec, value, QString::fromLatin1("__qt_scope__"), QScriptValue::ResolveLocal);
+ JSC::JSValue scope = property(exec, value, "__qt_scope__", QScriptValue::ResolveLocal);
if (isObject(scope))
result = property(exec, scope, id, resolveMode);
}
@@ -2901,6 +2903,9 @@ JSC::JSValue QScriptEnginePrivate::create(JSC::ExecState *exec, int type, const
result = eng->newQObject(*reinterpret_cast<QObject* const *>(ptr));
break;
#endif
+ case QMetaType::QVariant:
+ result = jscValueFromVariant(exec, *reinterpret_cast<const QVariant*>(ptr));
+ break;
default:
if (type == qMetaTypeId<QScriptValue>()) {
result = eng->scriptValueToJSCValue(*reinterpret_cast<const QScriptValue*>(ptr));
@@ -2922,8 +2927,6 @@ JSC::JSValue QScriptEnginePrivate::create(JSC::ExecState *exec, int type, const
else {
QByteArray typeName = QMetaType::typeName(type);
- if (typeName == "QVariant")
- result = jscValueFromVariant(exec, *reinterpret_cast<const QVariant*>(ptr));
if (typeName.endsWith('*') && !*reinterpret_cast<void* const *>(ptr))
return JSC::jsNull();
else
@@ -3046,6 +3049,9 @@ bool QScriptEnginePrivate::convertValue(JSC::ExecState *exec, JSC::JSValue value
*reinterpret_cast<QVariantMap *>(ptr) = variantMapFromObject(exec, value);
return true;
} break;
+ case QMetaType::QVariant:
+ *reinterpret_cast<QVariant*>(ptr) = toVariant(exec, value);
+ return true;
default:
;
}
@@ -3096,9 +3102,6 @@ bool QScriptEnginePrivate::convertValue(JSC::ExecState *exec, JSC::JSValue value
return false;
*reinterpret_cast<QScriptValue*>(ptr) = eng->scriptValueFromJSCValue(value);
return true;
- } else if (name == "QVariant") {
- *reinterpret_cast<QVariant*>(ptr) = toVariant(exec, value);
- return true;
}
// lazy registration of some common list types
diff --git a/src/script/api/qscriptengine_p.h b/src/script/api/qscriptengine_p.h
index d0d020a..5166d89 100644
--- a/src/script/api/qscriptengine_p.h
+++ b/src/script/api/qscriptengine_p.h
@@ -123,6 +123,9 @@ namespace QScript
inline QScriptEnginePrivate *scriptEngineFromExec(const JSC::ExecState *exec);
bool isFunction(JSC::JSValue value);
+ inline void convertToLatin1_helper(const UChar *i, int length, char *s);
+ inline QByteArray convertToLatin1(const JSC::UString &str);
+
class UStringSourceProviderWithFeedback;
struct GlobalClientData : public JSC::JSGlobalData::ClientData
@@ -165,7 +168,7 @@ public:
static inline qint32 toInt32(JSC::ExecState *, JSC::JSValue);
static inline quint32 toUInt32(JSC::ExecState *, JSC::JSValue);
static inline quint16 toUInt16(JSC::ExecState *, JSC::JSValue);
- static inline QString toString(JSC::ExecState *, JSC::JSValue);
+ static inline JSC::UString toString(JSC::ExecState *, JSC::JSValue);
static inline QDateTime toDateTime(JSC::ExecState *, JSC::JSValue);
#ifndef QT_NO_REGEXP
@@ -181,8 +184,8 @@ public:
static inline JSC::JSValue property(JSC::ExecState*, JSC::JSValue, quint32 index,
int resolveMode = QScriptValue::ResolvePrototype);
static JSC::JSValue propertyHelper(JSC::ExecState*, JSC::JSValue, quint32, int resolveMode);
- static inline JSC::JSValue property(JSC::ExecState*, JSC::JSValue, const QString &, int resolveMode);
- static inline void setProperty(JSC::ExecState*, JSC::JSValue object, const QString &name, JSC::JSValue,
+ static inline JSC::JSValue property(JSC::ExecState*, JSC::JSValue, const JSC::UString &, int resolveMode);
+ static inline void setProperty(JSC::ExecState*, JSC::JSValue object, const JSC::UString &name, JSC::JSValue,
const QScriptValue::PropertyFlags &flags = QScriptValue::KeepExistingFlags);
static void setProperty(JSC::ExecState*, JSC::JSValue object, const JSC::Identifier &id, JSC::JSValue,
const QScriptValue::PropertyFlags &flags = QScriptValue::KeepExistingFlags);
@@ -191,7 +194,7 @@ public:
static QScriptValue::PropertyFlags propertyFlags(JSC::ExecState*, JSC::JSValue value,
const JSC::Identifier &id, const QScriptValue::ResolveFlags &mode);
static inline QScriptValue::PropertyFlags propertyFlags(JSC::ExecState*, JSC::JSValue value,
- const QString &name, const QScriptValue::ResolveFlags &mode);
+ const JSC::UString &name, const QScriptValue::ResolveFlags &mode);
static bool convertValue(JSC::ExecState*, JSC::JSValue value,
int type, void *ptr);
@@ -516,6 +519,21 @@ inline bool ToBool(const QString &value)
return !value.isEmpty();
}
+inline void convertToLatin1_helper(const UChar *i, int length, char *s)
+{
+ const UChar *e = i + length;
+ while (i != e)
+ *(s++) = (uchar) *(i++);
+ *s = '\0';
+}
+
+inline QByteArray convertToLatin1(const JSC::UString &str)
+{
+ QByteArray ba(str.size(), Qt::Uninitialized);
+ convertToLatin1_helper(str.data(), str.size(), ba.data());
+ return ba;
+}
+
} // namespace QScript
inline QScriptValuePrivate *QScriptEnginePrivate::allocateScriptValuePrivate(size_t size)
@@ -629,7 +647,7 @@ inline void QScriptValuePrivate::initFrom(const QString &value)
engine->registerScriptValue(this);
}
-inline JSC::JSValue QScriptEnginePrivate::property(JSC::ExecState *exec, JSC::JSValue value, const QString &name, int resolveMode)
+inline JSC::JSValue QScriptEnginePrivate::property(JSC::ExecState *exec, JSC::JSValue value, const JSC::UString &name, int resolveMode)
{
return property(exec, value, JSC::Identifier(exec, name), resolveMode);
}
@@ -655,13 +673,13 @@ inline JSC::JSValue QScriptEnginePrivate::property(JSC::ExecState *exec, JSC::JS
}
inline QScriptValue::PropertyFlags QScriptEnginePrivate::propertyFlags(JSC::ExecState *exec, JSC::JSValue value,
- const QString &name,
+ const JSC::UString &name,
const QScriptValue::ResolveFlags &mode)
{
return propertyFlags(exec, value, JSC::Identifier(exec, name), mode);
}
-inline void QScriptEnginePrivate::setProperty(JSC::ExecState *exec, JSC::JSValue objectValue, const QString &name,
+inline void QScriptEnginePrivate::setProperty(JSC::ExecState *exec, JSC::JSValue objectValue, const JSC::UString &name,
JSC::JSValue value, const QScriptValue::PropertyFlags &flags)
{
setProperty(exec, objectValue, JSC::Identifier(exec, name), value, flags);
@@ -677,7 +695,7 @@ inline JSC::JSValue QScriptValuePrivate::property(quint32 index, int resolveMode
return QScriptEnginePrivate::property(engine->currentFrame, jscValue, index, resolveMode);
}
-inline JSC::JSValue QScriptValuePrivate::property(const QString &name, int resolveMode) const
+inline JSC::JSValue QScriptValuePrivate::property(const JSC::UString &name, int resolveMode) const
{
JSC::ExecState *exec = engine->currentFrame;
return QScriptEnginePrivate::property(exec, jscValue, JSC::Identifier(exec, name), resolveMode);
@@ -701,7 +719,7 @@ inline void QScriptValuePrivate::setProperty(quint32 index, const JSC::JSValue &
QScriptEnginePrivate::setProperty(engine->currentFrame, jscValue, index, value, flags);
}
-inline void QScriptValuePrivate::setProperty(const QString &name, const JSC::JSValue &value,
+inline void QScriptValuePrivate::setProperty(const JSC::UString &name, const JSC::JSValue &value,
const QScriptValue::PropertyFlags &flags)
{
JSC::ExecState *exec = engine->currentFrame;
@@ -919,7 +937,7 @@ inline quint16 QScriptEnginePrivate::toUInt16(JSC::ExecState *exec, JSC::JSValue
return QScript::ToUInt16(toNumber(exec, value));
}
-inline QString QScriptEnginePrivate::toString(JSC::ExecState *exec, JSC::JSValue value)
+inline JSC::UString QScriptEnginePrivate::toString(JSC::ExecState *exec, JSC::JSValue value)
{
JSC::JSValue savedException;
saveException(exec, &savedException);
diff --git a/src/script/api/qscriptvalue.cpp b/src/script/api/qscriptvalue.cpp
index 7f1fdaa..414a45c 100644
--- a/src/script/api/qscriptvalue.cpp
+++ b/src/script/api/qscriptvalue.cpp
@@ -562,7 +562,7 @@ QScriptValue QScriptValue::scope() const
if (!d || !d->isObject())
return QScriptValue();
// ### make hidden property
- JSC::JSValue result = d->property(QLatin1String("__qt_scope__"), QScriptValue::ResolveLocal);
+ JSC::JSValue result = d->property("__qt_scope__", QScriptValue::ResolveLocal);
return d->engine->scriptValueFromJSCValue(result);
}
diff --git a/src/script/api/qscriptvalue_p.h b/src/script/api/qscriptvalue_p.h
index 77b7330..089b923 100644
--- a/src/script/api/qscriptvalue_p.h
+++ b/src/script/api/qscriptvalue_p.h
@@ -88,8 +88,8 @@ public:
inline JSC::JSValue property(const JSC::Identifier &id, int resolveMode) const;
inline JSC::JSValue property(quint32 index, int resolveMode) const;
- inline JSC::JSValue property(const QString &, int resolveMode) const;
- inline void setProperty(const QString &name, const JSC::JSValue &value,
+ inline JSC::JSValue property(const JSC::UString &, int resolveMode) const;
+ inline void setProperty(const JSC::UString &name, const JSC::JSValue &value,
const QScriptValue::PropertyFlags &flags);
inline void setProperty(const JSC::Identifier &id, const JSC::JSValue &value,
const QScriptValue::PropertyFlags &flags);