diff options
author | Olivier Goffart <ogoffart@trolltech.com> | 2009-07-15 14:48:03 (GMT) |
---|---|---|
committer | Olivier Goffart <ogoffart@trolltech.com> | 2009-07-16 09:54:57 (GMT) |
commit | adb1182d4cb600f48b5858dd78b4b6a6c43a89cd (patch) | |
tree | e28b463adc196baf0f507ea5239bdff5d10f76bf /src/script/api/qscriptengine.cpp | |
parent | 7496ce1de03c9e11e710dbd4dae2056a21f5addd (diff) | |
download | Qt-adb1182d4cb600f48b5858dd78b4b6a6c43a89cd.zip Qt-adb1182d4cb600f48b5858dd78b4b6a6c43a89cd.tar.gz Qt-adb1182d4cb600f48b5858dd78b4b6a6c43a89cd.tar.bz2 |
Convert the strings or number value to jscvalue when they are used with an engine
Also change the stringValue not to be a pointer. This fixes a memory
leak.
Diffstat (limited to 'src/script/api/qscriptengine.cpp')
-rw-r--r-- | src/script/api/qscriptengine.cpp | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/src/script/api/qscriptengine.cpp b/src/script/api/qscriptengine.cpp index 702851a..116e449 100644 --- a/src/script/api/qscriptengine.cpp +++ b/src/script/api/qscriptengine.cpp @@ -869,15 +869,17 @@ JSC::JSValue QScriptEnginePrivate::scriptValueToJSCValue(const QScriptValue &val QScriptValuePrivate *vv = QScriptValuePrivate::get(value); if (!vv) return JSC::JSValue(); - switch (vv->type) { - case QScriptValuePrivate::JSC: - return vv->jscValue; - case QScriptValuePrivate::Number: - return JSC::jsNumber(currentFrame, vv->numberValue); - case QScriptValuePrivate::String: - return JSC::jsString(currentFrame, QScript::qtStringToJSCUString(*vv->stringValue)); + if (vv->type != QScriptValuePrivate::JSC) { + Q_Q(QScriptEngine); + Q_ASSERT(!vv->engine || vv->engine == q); + vv->engine = q; + if (vv->type == QScriptValuePrivate::Number) { + vv->initFromJSCValue(JSC::jsNumber(currentFrame, vv->numberValue)); + } else { //QScriptValuePrivate::String + vv->initFromJSCValue(JSC::jsString(currentFrame, QScript::qtStringToJSCUString(vv->stringValue))); + } } - return JSC::JSValue(); + return vv->jscValue; } void QScriptEnginePrivate::releaseJSCValue(JSC::JSValue value) @@ -933,7 +935,7 @@ JSC::JSValue QScriptEnginePrivate::jscValueFromVariant(const QVariant &v) case QScriptValuePrivate::Number: return JSC::jsNumber(currentFrame, p->numberValue); case QScriptValuePrivate::String: { - JSC::UString str = QScript::qtStringToJSCUString(*p->stringValue); + JSC::UString str = QScript::qtStringToJSCUString(p->stringValue); return JSC::jsString(currentFrame, str); } } |