diff options
author | Steve Block <steveblock@google.com> | 2010-02-15 12:23:52 +0000 |
---|---|---|
committer | Steve Block <steveblock@google.com> | 2010-02-16 11:48:32 +0000 |
commit | 8a0914b749bbe7da7768e07a7db5c6d4bb09472b (patch) | |
tree | 73f9065f370435d6fde32ae129d458a8c77c8dff /JavaScriptCore/qt/api | |
parent | bf14be70295513b8076f3fa47a268a7e42b2c478 (diff) | |
download | external_webkit-8a0914b749bbe7da7768e07a7db5c6d4bb09472b.zip external_webkit-8a0914b749bbe7da7768e07a7db5c6d4bb09472b.tar.gz external_webkit-8a0914b749bbe7da7768e07a7db5c6d4bb09472b.tar.bz2 |
Merge webkit.org at r54731 : Initial merge by git
Change-Id: Ia79977b6cf3b0b00c06ef39419989b28e57e4f4a
Diffstat (limited to 'JavaScriptCore/qt/api')
-rw-r--r-- | JavaScriptCore/qt/api/qscriptengine.cpp | 20 | ||||
-rw-r--r-- | JavaScriptCore/qt/api/qscriptengine.h | 2 | ||||
-rw-r--r-- | JavaScriptCore/qt/api/qscriptvalue_p.h | 28 |
3 files changed, 43 insertions, 7 deletions
diff --git a/JavaScriptCore/qt/api/qscriptengine.cpp b/JavaScriptCore/qt/api/qscriptengine.cpp index f12f410..fbeb902 100644 --- a/JavaScriptCore/qt/api/qscriptengine.cpp +++ b/JavaScriptCore/qt/api/qscriptengine.cpp @@ -86,3 +86,23 @@ void QScriptEngine::collectGarbage() { d_ptr->collectGarbage(); } + +/*! + Returns a QScriptValue of the primitive type Null. + + \sa undefinedValue() +*/ +QScriptValue QScriptEngine::nullValue() +{ + return QScriptValue(this, QScriptValue::NullValue); +} + +/*! + Returns a QScriptValue of the primitive type Undefined. + + \sa nullValue() +*/ +QScriptValue QScriptEngine::undefinedValue() +{ + return QScriptValue(this, QScriptValue::UndefinedValue); +} diff --git a/JavaScriptCore/qt/api/qscriptengine.h b/JavaScriptCore/qt/api/qscriptengine.h index cf61d35..b8bd5e6 100644 --- a/JavaScriptCore/qt/api/qscriptengine.h +++ b/JavaScriptCore/qt/api/qscriptengine.h @@ -38,6 +38,8 @@ public: QScriptValue evaluate(const QString& program, const QString& fileName = QString(), int lineNumber = 1); void collectGarbage(); + QScriptValue nullValue(); + QScriptValue undefinedValue(); private: friend class QScriptEnginePrivate; diff --git a/JavaScriptCore/qt/api/qscriptvalue_p.h b/JavaScriptCore/qt/api/qscriptvalue_p.h index 6a5b388..dea2298 100644 --- a/JavaScriptCore/qt/api/qscriptvalue_p.h +++ b/JavaScriptCore/qt/api/qscriptvalue_p.h @@ -24,6 +24,8 @@ #include "qscriptengine_p.h" #include "qscriptvalue.h" #include <JavaScriptCore/JavaScript.h> +#include <QtCore/qmath.h> +#include <QtCore/qnumeric.h> #include <QtCore/qshareddata.h> #include <QtCore/qvarlengtharray.h> @@ -337,7 +339,7 @@ bool QScriptValuePrivate::isNumber() { switch (m_state) { case CNumber: - return m_number; + return true; case JSValue: if (isObject()) return false; @@ -468,20 +470,30 @@ QString QScriptValuePrivate::toString() const qsreal QScriptValuePrivate::toNumber() const { - // TODO Check it. switch (m_state) { case JSValue: case JSNative: case JSObject: return JSValueToNumber(context(), value(), /* exception */ 0); case CNumber: - case CBool: return m_number; + case CBool: + return m_number ? 1 : 0; case Invalid: + return 0; case CSpecial: - return false; + return m_number == QScriptValue::NullValue ? 0 : qQNaN(); case CString: - return m_string.isEmpty(); + bool ok; + qsreal result = m_string.toDouble(&ok); + if (ok) + return result; + result = m_string.toInt(&ok, 0); // Try other bases. + if (ok) + return result; + if (m_string == "Infinity" || m_string == "-Infinity") + return qInf(); + return m_string.length() ? qQNaN() : 0; } Q_ASSERT_X(false, "toNumber()", "Not all states are included in the previous switch statement."); @@ -493,16 +505,18 @@ bool QScriptValuePrivate::toBool() const switch (m_state) { case JSValue: case JSNative: - case JSObject: return JSValueToBoolean(context(), value()); + case JSObject: + return true; case CNumber: + return !(qIsNaN(m_number) || !m_number); case CBool: return m_number; case Invalid: case CSpecial: return false; case CString: - return m_string.isEmpty(); + return m_string.length(); } Q_ASSERT_X(false, "toBool()", "Not all states are included in the previous switch statement."); |