summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorWarwick Allison <warwick.allison@nokia.com>2009-11-10 00:17:33 (GMT)
committerWarwick Allison <warwick.allison@nokia.com>2009-11-10 00:17:33 (GMT)
commite93a22d8cb01a419fe9000bac166ed76f7fef3a5 (patch)
tree864953bcb6c4b06665b5497bd8073e7b866ba371 /src
parentae1c70f4cf4f217d3cf0ad2f598cafc122a562ae (diff)
parentfc5fd47fc7e7d87d17386e23690af4fec80dae05 (diff)
downloadQt-e93a22d8cb01a419fe9000bac166ed76f7fef3a5.zip
Qt-e93a22d8cb01a419fe9000bac166ed76f7fef3a5.tar.gz
Qt-e93a22d8cb01a419fe9000bac166ed76f7fef3a5.tar.bz2
Merge branch 'kinetic-declarativeui' of git@scm.dev.nokia.troll.no:qt/kinetic into kinetic-declarativeui
Diffstat (limited to 'src')
-rw-r--r--src/declarative/qml/qmlcontext.cpp3
-rw-r--r--src/declarative/qml/qmlexpression.cpp12
-rw-r--r--src/declarative/qml/qmlrewrite.cpp8
-rw-r--r--src/declarative/qml/qmlrewrite_p.h2
-rw-r--r--src/declarative/qml/qmlxmlhttprequest.cpp136
-rw-r--r--src/declarative/util/qmlanimation.cpp2
-rw-r--r--src/declarative/util/qmlanimation_p_p.h6
-rw-r--r--src/declarative/util/qmltransition.cpp10
-rw-r--r--src/script/api/qscriptengine.cpp31
-rw-r--r--src/script/api/qscriptengine.h1
-rw-r--r--src/script/bridge/qscriptdeclarativeclass.cpp33
-rw-r--r--src/script/bridge/qscriptdeclarativeclass_p.h1
12 files changed, 165 insertions, 80 deletions
diff --git a/src/declarative/qml/qmlcontext.cpp b/src/declarative/qml/qmlcontext.cpp
index f8e685a..105c673 100644
--- a/src/declarative/qml/qmlcontext.cpp
+++ b/src/declarative/qml/qmlcontext.cpp
@@ -48,6 +48,7 @@
#include <QtCore/qvarlengtharray.h>
#include <QtCore/qdebug.h>
#include <private/qmlbindingoptimizations_p.h>
+#include <private/qscriptdeclarativeclass_p.h>
#include <QtDeclarative/qmlinfo.h>
QT_BEGIN_NAMESPACE
@@ -69,7 +70,7 @@ void QmlContextPrivate::addScript(const QString &script, QObject *scopeObject,
QmlEnginePrivate *enginePriv = QmlEnginePrivate::get(engine);
QScriptEngine *scriptEngine = QmlEnginePrivate::getScriptEngine(engine);
- QScriptContext *scriptContext = scriptEngine->pushCleanContext();
+ QScriptContext *scriptContext = QScriptDeclarativeClass::pushCleanContext(scriptEngine);
scriptContext->pushScope(enginePriv->contextClass->newContext(q, scopeObject));
QScriptValue scope = scriptEngine->newObject();
diff --git a/src/declarative/qml/qmlexpression.cpp b/src/declarative/qml/qmlexpression.cpp
index faf9f5a..d2d60ee 100644
--- a/src/declarative/qml/qmlexpression.cpp
+++ b/src/declarative/qml/qmlexpression.cpp
@@ -47,6 +47,7 @@
#include "QtCore/qdebug.h"
#include "qmlcompiler_p.h"
#include <QtScript/qscriptprogram.h>
+#include <private/qscriptdeclarativeclass_p.h>
Q_DECLARE_METATYPE(QList<QObject *>);
@@ -117,7 +118,7 @@ void QmlExpressionPrivate::init(QmlContext *ctxt, void *expr, QmlRefCount *rc,
}
#endif
- QScriptContext *scriptContext = scriptEngine->pushCleanContext();
+ QScriptContext *scriptContext = QScriptDeclarativeClass::pushCleanContext(scriptEngine);
scriptContext->pushScope(ep->contextClass->newContext(ctxt, me));
#if !defined(Q_OS_SYMBIAN)
@@ -305,7 +306,7 @@ QVariant QmlExpressionPrivate::evalQtScript(QObject *secondaryScope, bool *isUnd
if (!data->expressionFunctionValid) {
- QScriptContext *scriptContext = scriptEngine->pushCleanContext();
+ QScriptContext *scriptContext = QScriptDeclarativeClass::pushCleanContext(scriptEngine);
scriptContext->pushScope(ep->contextClass->newContext(data->context(), data->me));
if (data->expressionRewritten) {
@@ -314,7 +315,12 @@ QVariant QmlExpressionPrivate::evalQtScript(QObject *secondaryScope, bool *isUnd
} else {
QmlRewrite::RewriteBinding rewriteBinding;
- const QString code = rewriteBinding(data->expression);
+ bool ok = true;
+ const QString code = rewriteBinding(data->expression, &ok);
+ if (!ok) {
+ scriptEngine->popContext();
+ return QVariant();
+ }
data->expressionFunction = scriptEngine->evaluate(code, data->url.toString(), data->line);
}
diff --git a/src/declarative/qml/qmlrewrite.cpp b/src/declarative/qml/qmlrewrite.cpp
index b86f2f2..32e2fef 100644
--- a/src/declarative/qml/qmlrewrite.cpp
+++ b/src/declarative/qml/qmlrewrite.cpp
@@ -49,7 +49,7 @@ DEFINE_BOOL_CONFIG_OPTION(rewriteDump, QML_REWRITE_DUMP);
namespace QmlRewrite {
-QString RewriteBinding::operator()(const QString &code)
+QString RewriteBinding::operator()(const QString &code, bool *ok)
{
Engine engine;
NodePool pool(QString(), &engine);
@@ -57,6 +57,12 @@ QString RewriteBinding::operator()(const QString &code)
Parser parser(&engine);
lexer.setCode(code, 0);
parser.parseStatement();
+ if (!parser.statement()) {
+ if (ok) *ok = false;
+ return QString();
+ } else {
+ if (ok) *ok = true;
+ }
return rewrite(code, 0, parser.statement());
}
diff --git a/src/declarative/qml/qmlrewrite_p.h b/src/declarative/qml/qmlrewrite_p.h
index 914f997..a5cb841 100644
--- a/src/declarative/qml/qmlrewrite_p.h
+++ b/src/declarative/qml/qmlrewrite_p.h
@@ -69,7 +69,7 @@ class RewriteBinding: protected AST::Visitor
TextWriter *_writer;
public:
- QString operator()(const QString &code);
+ QString operator()(const QString &code, bool *ok = 0);
protected:
using AST::Visitor::visit;
diff --git a/src/declarative/qml/qmlxmlhttprequest.cpp b/src/declarative/qml/qmlxmlhttprequest.cpp
index 0c0cd9c..f51b59f 100644
--- a/src/declarative/qml/qmlxmlhttprequest.cpp
+++ b/src/declarative/qml/qmlxmlhttprequest.cpp
@@ -54,8 +54,37 @@
#include <QtCore/qdebug.h>
-// ### Find real values
-#define INVALID_STATE_ERR ((QScriptContext::Error)15)
+// From DOM-Level-3-Core spec
+// http://www.w3.org/TR/DOM-Level-3-Core/core.html
+#define INDEX_SIZE_ERR 1
+#define DOMSTRING_SIZE_ERR 2
+#define HIERARCHY_REQUEST_ERR 3
+#define WRONG_DOCUMENT_ERR 4
+#define INVALID_CHARACTER_ERR 5
+#define NO_DATA_ALLOWED_ERR 6
+#define NO_MODIFICATION_ALLOWED_ERR 7
+#define NOT_FOUND_ERR 8
+#define NOT_SUPPORTED_ERR 9
+#define INUSE_ATTRIBUTE_ERR 10
+#define INVALID_STATE_ERR 11
+#define SYNTAX_ERR 12
+#define INVALID_MODIFICATION_ERR 13
+#define NAMESPACE_ERR 14
+#define INVALID_ACCESS_ERR 15
+#define VALIDATION_ERR 16
+#define TYPE_MISMATCH_ERR 17
+
+#define THROW_DOM(error, desc) \
+{ \
+ QScriptValue errorValue = context->throwError(QLatin1String(desc)); \
+ errorValue.setProperty(QLatin1String("code"), error); \
+ return errorValue; \
+}
+
+#define THROW_SYNTAX(desc) \
+ return context->throwError(QScriptContext::SyntaxError, QLatin1String(desc));
+#define THROW_REFERENCE(desc) \
+ return context->throwError(QScriptContext::ReferenceError, QLatin1String(desc));
#define D(arg) (arg)->release()
#define A(arg) (arg)->addref()
@@ -1189,10 +1218,11 @@ void QmlXMLHttpRequest::destroyNetwork()
static QScriptValue qmlxmlhttprequest_open(QScriptContext *context, QScriptEngine *engine)
{
QmlXMLHttpRequest *request = qobject_cast<QmlXMLHttpRequest *>(context->thisObject().data().toQObject());
- if (!request) return context->throwError(QScriptContext::ReferenceError, QLatin1String("Not an XMLHttpRequest object"));
+ if (!request)
+ THROW_REFERENCE("Not an XMLHttpRequest object");
if (context->argumentCount() < 2 || context->argumentCount() > 5)
- return context->throwError(QScriptContext::SyntaxError, QLatin1String("Incorrect argument count"));
+ THROW_DOM(SYNTAX_ERR, "Incorrect argument count");
// Argument 0 - Method
QString method = context->argument(0).toString().toUpper();
@@ -1200,23 +1230,21 @@ static QScriptValue qmlxmlhttprequest_open(QScriptContext *context, QScriptEngin
method != QLatin1String("PUT") &&
method != QLatin1String("HEAD") &&
method != QLatin1String("POST"))
- return context->throwError(QScriptContext::SyntaxError, QLatin1String("Unsupported method"));
+ THROW_DOM(SYNTAX_ERR, "Unsupported HTTP method type");
// Argument 1 - URL
- QUrl url(context->argument(1).toString()); // ### Need to resolve correctly
+ QUrl url(context->argument(1).toString());
if (url.isRelative()) {
- QmlContext *ctxt = QmlEnginePrivate::get(engine)->currentExpression?QmlEnginePrivate::get(engine)->currentExpression->context():0;
- if (ctxt)
- url = ctxt->resolvedUrl(url);
- else
- return context->throwError(QScriptContext::SyntaxError, QLatin1String("Relative URLs not supported"));
+ QmlContext *ctxt = QmlEnginePrivate::get(engine)->getContext(context);
+ Q_ASSERT(ctxt);
+ url = ctxt->resolvedUrl(url);
}
// Argument 2 - async (optional)
if (context->argumentCount() > 2 && !context->argument(2).toBoolean())
- return context->throwError(QScriptContext::SyntaxError, QLatin1String("Synchronous call not supported"));
+ THROW_DOM(NOT_SUPPORTED_ERR, "Synchronous XMLHttpRequest calls are not supported");
// Argument 3/4 - user/pass (optional)
@@ -1241,15 +1269,16 @@ static QScriptValue qmlxmlhttprequest_open(QScriptContext *context, QScriptEngin
static QScriptValue qmlxmlhttprequest_setRequestHeader(QScriptContext *context, QScriptEngine *engine)
{
QmlXMLHttpRequest *request = qobject_cast<QmlXMLHttpRequest *>(context->thisObject().data().toQObject());
- if (!request) return context->throwError(QScriptContext::ReferenceError, QLatin1String("Not an XMLHttpRequest object"));
+ if (!request)
+ THROW_REFERENCE("Not an XMLHttpRequest object");
if (context->argumentCount() != 2)
- return context->throwError(QScriptContext::SyntaxError, QLatin1String("Incorrect argument count"));
+ THROW_SYNTAX("Incorrect argument count");
if (request->readyState() != QmlXMLHttpRequest::Opened ||
request->sendFlag())
- return context->throwError(INVALID_STATE_ERR, QLatin1String("Invalid state"));
+ THROW_DOM(INVALID_STATE_ERR, "Invalid state");
QString name = context->argument(0).toString();
@@ -1288,13 +1317,14 @@ static QScriptValue qmlxmlhttprequest_setRequestHeader(QScriptContext *context,
static QScriptValue qmlxmlhttprequest_send(QScriptContext *context, QScriptEngine *engine)
{
QmlXMLHttpRequest *request = qobject_cast<QmlXMLHttpRequest *>(context->thisObject().data().toQObject());
- if (!request) return context->throwError(QScriptContext::ReferenceError, QLatin1String("Not an XMLHttpRequest object"));
+ if (!request)
+ THROW_REFERENCE("Not an XMLHttpRequest object");
if (request->readyState() != QmlXMLHttpRequest::Opened)
- return context->throwError(INVALID_STATE_ERR, QLatin1String("Invalid state"));
+ THROW_DOM(INVALID_STATE_ERR, "Invalid state");
if (request->sendFlag())
- return context->throwError(INVALID_STATE_ERR, QLatin1String("Invalid state"));
+ THROW_DOM(INVALID_STATE_ERR, "Invalid state");
QByteArray data;
if (context->argumentCount() > 0)
@@ -1308,7 +1338,8 @@ static QScriptValue qmlxmlhttprequest_send(QScriptContext *context, QScriptEngin
static QScriptValue qmlxmlhttprequest_abort(QScriptContext *context, QScriptEngine *engine)
{
QmlXMLHttpRequest *request = qobject_cast<QmlXMLHttpRequest *>(context->thisObject().data().toQObject());
- if (!request) return context->throwError(QScriptContext::ReferenceError, QLatin1String("Not an XMLHttpRequest object"));
+ if (!request)
+ THROW_REFERENCE("Not an XMLHttpRequest object");
request->abort();
@@ -1319,15 +1350,16 @@ static QScriptValue qmlxmlhttprequest_getResponseHeader(QScriptContext *context,
{
Q_UNUSED(engine)
QmlXMLHttpRequest *request = qobject_cast<QmlXMLHttpRequest *>(context->thisObject().data().toQObject());
- if (!request) return context->throwError(QScriptContext::ReferenceError, QLatin1String("Not an XMLHttpRequest object"));
+ if (!request)
+ THROW_REFERENCE("Not an XMLHttpRequest object");
if (context->argumentCount() != 1)
- return context->throwError(QScriptContext::SyntaxError, QLatin1String("Incorrect argument count"));
+ THROW_SYNTAX("Incorrect argument count");
if (request->readyState() != QmlXMLHttpRequest::Loading &&
request->readyState() != QmlXMLHttpRequest::Done &&
request->readyState() != QmlXMLHttpRequest::HeadersReceived)
- return context->throwError(INVALID_STATE_ERR, QLatin1String("Invalid state"));
+ THROW_DOM(INVALID_STATE_ERR, "Invalid state");
QString headerName = context->argument(0).toString();
@@ -1338,15 +1370,16 @@ static QScriptValue qmlxmlhttprequest_getAllResponseHeaders(QScriptContext *cont
{
Q_UNUSED(engine)
QmlXMLHttpRequest *request = qobject_cast<QmlXMLHttpRequest *>(context->thisObject().data().toQObject());
- if (!request) return context->throwError(QScriptContext::ReferenceError, QLatin1String("Not an XMLHttpRequest object"));
+ if (!request)
+ THROW_REFERENCE("Not an XMLHttpRequest object");
if (context->argumentCount() != 0)
- return context->throwError(QScriptContext::SyntaxError, QLatin1String("Incorrect argument count"));
+ THROW_SYNTAX("Incorrect argument count");
if (request->readyState() != QmlXMLHttpRequest::Loading &&
request->readyState() != QmlXMLHttpRequest::Done &&
request->readyState() != QmlXMLHttpRequest::HeadersReceived)
- return context->throwError(INVALID_STATE_ERR, QLatin1String("Invalid state"));
+ THROW_DOM(INVALID_STATE_ERR, "Invalid state");
return QScriptValue(request->headers());
}
@@ -1356,7 +1389,8 @@ static QScriptValue qmlxmlhttprequest_readyState(QScriptContext *context, QScrip
{
Q_UNUSED(engine)
QmlXMLHttpRequest *request = qobject_cast<QmlXMLHttpRequest *>(context->thisObject().data().toQObject());
- if (!request) return context->throwError(QScriptContext::ReferenceError, QLatin1String("Not an XMLHttpRequest object"));
+ if (!request)
+ THROW_REFERENCE("Not an XMLHttpRequest object");
return QScriptValue(request->readyState());
}
@@ -1365,11 +1399,12 @@ static QScriptValue qmlxmlhttprequest_status(QScriptContext *context, QScriptEng
{
Q_UNUSED(engine)
QmlXMLHttpRequest *request = qobject_cast<QmlXMLHttpRequest *>(context->thisObject().data().toQObject());
- if (!request) return context->throwError(QScriptContext::ReferenceError, QLatin1String("Not an XMLHttpRequest object"));
+ if (!request)
+ THROW_REFERENCE("Not an XMLHttpRequest object");
if (request->readyState() == QmlXMLHttpRequest::Unsent ||
request->readyState() == QmlXMLHttpRequest::Opened)
- return context->throwError(INVALID_STATE_ERR, QLatin1String("Invalid state"));
+ THROW_DOM(INVALID_STATE_ERR, "Invalid state");
if (request->errorFlag())
return QScriptValue(0);
@@ -1381,11 +1416,12 @@ static QScriptValue qmlxmlhttprequest_statusText(QScriptContext *context, QScrip
{
Q_UNUSED(engine)
QmlXMLHttpRequest *request = qobject_cast<QmlXMLHttpRequest *>(context->thisObject().data().toQObject());
- if (!request) return context->throwError(QScriptContext::ReferenceError, QLatin1String("Not an XMLHttpRequest object"));
+ if (!request)
+ THROW_REFERENCE("Not an XMLHttpRequest object");
if (request->readyState() == QmlXMLHttpRequest::Unsent ||
request->readyState() == QmlXMLHttpRequest::Opened)
- return context->throwError(INVALID_STATE_ERR, QLatin1String("Invalid state"));
+ THROW_DOM(INVALID_STATE_ERR, "Invalid state");
if (request->errorFlag())
return QScriptValue(0);
@@ -1397,19 +1433,21 @@ static QScriptValue qmlxmlhttprequest_responseText(QScriptContext *context, QScr
{
Q_UNUSED(engine)
QmlXMLHttpRequest *request = qobject_cast<QmlXMLHttpRequest *>(context->thisObject().data().toQObject());
- if (!request) return context->throwError(QScriptContext::ReferenceError, QLatin1String("Not an XMLHttpRequest object"));
+ if (!request)
+ THROW_REFERENCE("Not an XMLHttpRequest object");
if (request->readyState() != QmlXMLHttpRequest::Loading &&
request->readyState() != QmlXMLHttpRequest::Done)
return QScriptValue(QString());
- else
+ else
return QScriptValue(request->responseBody());
}
static QScriptValue qmlxmlhttprequest_responseXML(QScriptContext *context, QScriptEngine *engine)
{
QmlXMLHttpRequest *request = qobject_cast<QmlXMLHttpRequest *>(context->thisObject().data().toQObject());
- if (!request) return context->throwError(QScriptContext::ReferenceError, QLatin1String("Not an XMLHttpRequest object"));
+ if (!request)
+ THROW_REFERENCE("Not an XMLHttpRequest object");
if (request->readyState() != QmlXMLHttpRequest::Loading &&
request->readyState() != QmlXMLHttpRequest::Done)
@@ -1422,7 +1460,8 @@ static QScriptValue qmlxmlhttprequest_onreadystatechange(QScriptContext *context
{
Q_UNUSED(engine)
QmlXMLHttpRequest *request = qobject_cast<QmlXMLHttpRequest *>(context->thisObject().data().toQObject());
- if (!request) return context->throwError(QScriptContext::ReferenceError, QLatin1String("Not an XMLHttpRequest object"));
+ if (!request)
+ THROW_REFERENCE("Not an XMLHttpRequest object");
if (context->argumentCount())
request->setCallback(context->argument(0));
@@ -1459,6 +1498,13 @@ void qt_add_qmlxmlhttprequest(QScriptEngine *engine)
prototype.setProperty(QLatin1String("responseXML"), engine->newFunction(qmlxmlhttprequest_responseXML), QScriptValue::ReadOnly | QScriptValue::PropertyGetter);
prototype.setProperty(QLatin1String("onreadystatechange"), engine->newFunction(qmlxmlhttprequest_onreadystatechange), QScriptValue::PropertyGetter | QScriptValue::PropertySetter);
+ // State values
+ prototype.setProperty(QLatin1String("UNSENT"), 0, QScriptValue::ReadOnly | QScriptValue::Undeletable | QScriptValue::SkipInEnumeration);
+ prototype.setProperty(QLatin1String("OPENED"), 1, QScriptValue::ReadOnly | QScriptValue::Undeletable | QScriptValue::SkipInEnumeration);
+ prototype.setProperty(QLatin1String("HEADERS_RECEIVED"), 2, QScriptValue::ReadOnly | QScriptValue::Undeletable | QScriptValue::SkipInEnumeration);
+ prototype.setProperty(QLatin1String("LOADING"), 3, QScriptValue::ReadOnly | QScriptValue::Undeletable | QScriptValue::SkipInEnumeration);
+ prototype.setProperty(QLatin1String("DONE"), 4, QScriptValue::ReadOnly | QScriptValue::Undeletable | QScriptValue::SkipInEnumeration);
+
// Constructor
QScriptValue constructor = engine->newFunction(qmlxmlhttprequest_new, prototype);
constructor.setProperty(QLatin1String("UNSENT"), 0, QScriptValue::ReadOnly | QScriptValue::Undeletable | QScriptValue::SkipInEnumeration);
@@ -1467,6 +1513,28 @@ void qt_add_qmlxmlhttprequest(QScriptEngine *engine)
constructor.setProperty(QLatin1String("LOADING"), 3, QScriptValue::ReadOnly | QScriptValue::Undeletable | QScriptValue::SkipInEnumeration);
constructor.setProperty(QLatin1String("DONE"), 4, QScriptValue::ReadOnly | QScriptValue::Undeletable | QScriptValue::SkipInEnumeration);
engine->globalObject().setProperty(QLatin1String("XMLHttpRequest"), constructor);
+
+ // DOM Exception
+ QScriptValue domExceptionPrototype = engine->newObject();
+ domExceptionPrototype.setProperty("INDEX_SIZE_ERR", INDEX_SIZE_ERR, QScriptValue::ReadOnly | QScriptValue::Undeletable | QScriptValue::SkipInEnumeration);
+ domExceptionPrototype.setProperty("DOMSTRING_SIZE_ERR", DOMSTRING_SIZE_ERR, QScriptValue::ReadOnly | QScriptValue::Undeletable | QScriptValue::SkipInEnumeration);
+ domExceptionPrototype.setProperty("HIERARCHY_REQUEST_ERR", HIERARCHY_REQUEST_ERR, QScriptValue::ReadOnly | QScriptValue::Undeletable | QScriptValue::SkipInEnumeration);
+ domExceptionPrototype.setProperty("WRONG_DOCUMENT_ERR", WRONG_DOCUMENT_ERR, QScriptValue::ReadOnly | QScriptValue::Undeletable | QScriptValue::SkipInEnumeration);
+ domExceptionPrototype.setProperty("INVALID_CHARACTER_ERR", INVALID_CHARACTER_ERR, QScriptValue::ReadOnly | QScriptValue::Undeletable | QScriptValue::SkipInEnumeration);
+ domExceptionPrototype.setProperty("NO_DATA_ALLOWED_ERR", NO_DATA_ALLOWED_ERR, QScriptValue::ReadOnly | QScriptValue::Undeletable | QScriptValue::SkipInEnumeration);
+ domExceptionPrototype.setProperty("NO_MODIFICATION_ALLOWED_ERR", NO_MODIFICATION_ALLOWED_ERR, QScriptValue::ReadOnly | QScriptValue::Undeletable | QScriptValue::SkipInEnumeration);
+ domExceptionPrototype.setProperty("NOT_FOUND_ERR", NOT_FOUND_ERR, QScriptValue::ReadOnly | QScriptValue::Undeletable | QScriptValue::SkipInEnumeration);
+ domExceptionPrototype.setProperty("NOT_SUPPORTED_ERR", NOT_SUPPORTED_ERR, QScriptValue::ReadOnly | QScriptValue::Undeletable | QScriptValue::SkipInEnumeration);
+ domExceptionPrototype.setProperty("INUSE_ATTRIBUTE_ERR", INUSE_ATTRIBUTE_ERR, QScriptValue::ReadOnly | QScriptValue::Undeletable | QScriptValue::SkipInEnumeration);
+ domExceptionPrototype.setProperty("INVALID_STATE_ERR", INVALID_STATE_ERR, QScriptValue::ReadOnly | QScriptValue::Undeletable | QScriptValue::SkipInEnumeration);
+ domExceptionPrototype.setProperty("SYNTAX_ERR", SYNTAX_ERR, QScriptValue::ReadOnly | QScriptValue::Undeletable | QScriptValue::SkipInEnumeration);
+ domExceptionPrototype.setProperty("INVALID_MODIFICATION_ERR", INVALID_MODIFICATION_ERR, QScriptValue::ReadOnly | QScriptValue::Undeletable | QScriptValue::SkipInEnumeration);
+ domExceptionPrototype.setProperty("NAMESPACE_ERR", NAMESPACE_ERR, QScriptValue::ReadOnly | QScriptValue::Undeletable | QScriptValue::SkipInEnumeration);
+ domExceptionPrototype.setProperty("INVALID_ACCESS_ERR", INVALID_ACCESS_ERR, QScriptValue::ReadOnly | QScriptValue::Undeletable | QScriptValue::SkipInEnumeration);
+ domExceptionPrototype.setProperty("VALIDATION_ERR", VALIDATION_ERR, QScriptValue::ReadOnly | QScriptValue::Undeletable | QScriptValue::SkipInEnumeration);
+ domExceptionPrototype.setProperty("TYPE_MISMATCH_ERR", TYPE_MISMATCH_ERR, QScriptValue::ReadOnly | QScriptValue::Undeletable | QScriptValue::SkipInEnumeration);
+
+ engine->globalObject().setProperty(QLatin1String("DOMException"), domExceptionPrototype);
}
#include "qmlxmlhttprequest.moc"
diff --git a/src/declarative/util/qmlanimation.cpp b/src/declarative/util/qmlanimation.cpp
index 94cdadf..435ddae 100644
--- a/src/declarative/util/qmlanimation.cpp
+++ b/src/declarative/util/qmlanimation.cpp
@@ -388,7 +388,7 @@ void QmlAbstractAnimation::setRepeat(bool r)
int QmlAbstractAnimation::currentTime()
{
- return qtAnimation()->currentTime();
+ return qtAnimation()->currentLoopTime();
}
void QmlAbstractAnimation::setCurrentTime(int time)
diff --git a/src/declarative/util/qmlanimation_p_p.h b/src/declarative/util/qmlanimation_p_p.h
index 1372343..21c0284 100644
--- a/src/declarative/util/qmlanimation_p_p.h
+++ b/src/declarative/util/qmlanimation_p_p.h
@@ -108,7 +108,7 @@ public:
protected:
virtual void updateCurrentTime(int) {}
- virtual void updateState(State /*oldState*/, State newState)
+ virtual void updateState(State newState, State /*oldState*/)
{
if (newState == Running) {
if (animAction)
@@ -147,9 +147,9 @@ protected:
if (animValue)
animValue->setValue(value.toDouble());
}
- virtual void updateState(State oldState, State newState)
+ virtual void updateState(State newState, State oldState)
{
- QVariantAnimation::updateState(oldState, newState);
+ QVariantAnimation::updateState(newState, oldState);
if (newState == Running) {
//check for new from every loop
if (fromSourced)
diff --git a/src/declarative/util/qmltransition.cpp b/src/declarative/util/qmltransition.cpp
index d61359d..7eb9e53 100644
--- a/src/declarative/util/qmltransition.cpp
+++ b/src/declarative/util/qmltransition.cpp
@@ -74,7 +74,7 @@ public:
ParallelAnimationWrapper(QObject *parent) : QParallelAnimationGroup(parent) {}
QmlTransitionPrivate *trans;
protected:
- virtual void updateState(QAbstractAnimation::State oldState, QAbstractAnimation::State newState);
+ virtual void updateState(QAbstractAnimation::State newState, QAbstractAnimation::State oldState);
};
class QmlTransitionPrivate : public QObjectPrivate
@@ -124,13 +124,13 @@ void QmlTransitionPrivate::AnimationList::append(QmlAbstractAnimation *a)
parent->group->addAnimation(a->qtAnimation());
}
-void ParallelAnimationWrapper::updateState(QAbstractAnimation::State oldState, QAbstractAnimation::State newState)
+void ParallelAnimationWrapper::updateState(QAbstractAnimation::State newState, QAbstractAnimation::State oldState)
{
- QParallelAnimationGroup::updateState(oldState, newState);
+ QParallelAnimationGroup::updateState(newState, oldState);
//XXX not 100% guaranteed to be at end (if there are many zero duration animations at the end)?
if (newState == Stopped &&
- ((direction() == QAbstractAnimation::Forward && currentTime() == duration()) ||
- (direction() == QAbstractAnimation::Backward && currentTime() == 0)))
+ ((direction() == QAbstractAnimation::Forward && currentLoopTime() == duration()) ||
+ (direction() == QAbstractAnimation::Backward && currentLoopTime() == 0)))
{
trans->complete();
}
diff --git a/src/script/api/qscriptengine.cpp b/src/script/api/qscriptengine.cpp
index de759c6..216f325 100644
--- a/src/script/api/qscriptengine.cpp
+++ b/src/script/api/qscriptengine.cpp
@@ -1137,7 +1137,7 @@ void QScriptEnginePrivate::mark(JSC::MarkStack& markStack)
QScriptContext *context = q->currentContext();
while (context) {
- JSC::ScopeChainNode *node = ((JSC::ExecState *)context)->scopeChain();
+ JSC::ScopeChainNode *node = frameForContext(context)->scopeChain();
JSC::ScopeChainIterator it(node);
for (it = node->begin(); it != node->end(); ++it) {
JSC::JSObject *object = *it;
@@ -2288,35 +2288,6 @@ QScriptContext *QScriptEngine::pushContext()
return d->contextForFrame(newFrame);
}
-/*!
- Enters a new execution context and returns the associated
- QScriptContext object.
-
- Once you are done with the context, you should call popContext() to
- restore the old context.
-
- By default, the `this' object of the new context is the Global Object.
- The context's \l{QScriptContext::callee()}{callee}() will be invalid.
-
- Unlike pushContext(), the default scope chain is reset to include
- only the global object and the QScriptContext's activation object.
-
- \sa popContext()
-*/
-QScriptContext *QScriptEngine::pushCleanContext()
-{
- Q_D(QScriptEngine);
-
- JSC::CallFrame* newFrame = d->pushContext(d->currentFrame, d->currentFrame->globalData().dynamicGlobalObject,
- JSC::ArgList(), /*callee = */0, false, true);
-
- if (agent())
- agent()->contextPush();
-
- return d->contextForFrame(newFrame);
-}
-
-
/*! \internal
push a context for a native function.
JSC native function doesn't have different stackframe or context. so we need to create one.
diff --git a/src/script/api/qscriptengine.h b/src/script/api/qscriptengine.h
index de4dc02..7db61e1 100644
--- a/src/script/api/qscriptengine.h
+++ b/src/script/api/qscriptengine.h
@@ -160,7 +160,6 @@ public:
QScriptContext *currentContext() const;
QScriptContext *pushContext();
- QScriptContext *pushCleanContext();
void popContext();
bool canEvaluate(const QString &program) const;
diff --git a/src/script/bridge/qscriptdeclarativeclass.cpp b/src/script/bridge/qscriptdeclarativeclass.cpp
index f0c1c45..b5d9bf5 100644
--- a/src/script/bridge/qscriptdeclarativeclass.cpp
+++ b/src/script/bridge/qscriptdeclarativeclass.cpp
@@ -44,6 +44,7 @@
#include "qscriptobject_p.h"
#include <QtScript/qscriptstring.h>
#include <QtScript/qscriptengine.h>
+#include <QtScript/qscriptengineagent.h>
#include <private/qscriptengine_p.h>
#include <private/qscriptvalue_p.h>
#include <private/qscriptqobject_p.h>
@@ -217,6 +218,38 @@ QScriptValue QScriptDeclarativeClass::scopeChainValue(QScriptContext *context, i
return QScriptValue();
}
+/*!
+ Enters a new execution context and returns the associated
+ QScriptContext object.
+
+ Once you are done with the context, you should call popContext() to
+ restore the old context.
+
+ By default, the `this' object of the new context is the Global Object.
+ The context's \l{QScriptContext::callee()}{callee}() will be invalid.
+
+ Unlike pushContext(), the default scope chain is reset to include
+ only the global object and the QScriptContext's activation object.
+
+ \sa QScriptEngine::popContext()
+*/
+QScriptContext * QScriptDeclarativeClass::pushCleanContext(QScriptEngine *engine)
+{
+ if (!engine)
+ return 0;
+
+ QScriptEnginePrivate *d = QScriptEnginePrivate::get(engine);
+
+ JSC::CallFrame* newFrame = d->pushContext(d->currentFrame,
+ d->currentFrame->globalData().dynamicGlobalObject,
+ JSC::ArgList(), /*callee = */0, false, true);
+
+ if (engine->agent())
+ engine->agent()->contextPush();
+
+ return d->contextForFrame(newFrame);
+}
+
QScriptDeclarativeClass::~QScriptDeclarativeClass()
{
}
diff --git a/src/script/bridge/qscriptdeclarativeclass_p.h b/src/script/bridge/qscriptdeclarativeclass_p.h
index 4e06931..d0e653d 100644
--- a/src/script/bridge/qscriptdeclarativeclass_p.h
+++ b/src/script/bridge/qscriptdeclarativeclass_p.h
@@ -77,6 +77,7 @@ public:
static QScriptValue property(const QScriptValue &, const Identifier &);
static QScriptValue scopeChainValue(QScriptContext *, int index);
+ static QScriptContext *pushCleanContext(QScriptEngine *);
class Q_SCRIPT_EXPORT PersistentIdentifier
{