diff options
author | Kristian Monsen <kristianm@google.com> | 2010-09-30 15:42:16 +0100 |
---|---|---|
committer | Steve Block <steveblock@google.com> | 2010-10-07 10:59:29 +0100 |
commit | bec39347bb3bb5bf1187ccaf471d26247f28b585 (patch) | |
tree | 56bdc4c2978fbfd3d79d0d36d5d6c640ecc09cc8 /JavaScriptCore/qt/api | |
parent | 90b7966e7815b262cd19ac25f03aaad9b21fdc06 (diff) | |
download | external_webkit-bec39347bb3bb5bf1187ccaf471d26247f28b585.zip external_webkit-bec39347bb3bb5bf1187ccaf471d26247f28b585.tar.gz external_webkit-bec39347bb3bb5bf1187ccaf471d26247f28b585.tar.bz2 |
Merge WebKit at r68651 : Initial merge by git.
Change-Id: I3d6bff59f17eedd6722723354f386fec9be8ad12
Diffstat (limited to 'JavaScriptCore/qt/api')
-rw-r--r-- | JavaScriptCore/qt/api/qscriptengine.cpp | 23 | ||||
-rw-r--r-- | JavaScriptCore/qt/api/qscriptengine.h | 5 | ||||
-rw-r--r-- | JavaScriptCore/qt/api/qscriptengine_p.cpp | 14 | ||||
-rw-r--r-- | JavaScriptCore/qt/api/qscriptengine_p.h | 8 | ||||
-rw-r--r-- | JavaScriptCore/qt/api/qscriptoriginalglobalobject_p.h | 11 | ||||
-rw-r--r-- | JavaScriptCore/qt/api/qscriptvalue.cpp | 23 | ||||
-rw-r--r-- | JavaScriptCore/qt/api/qscriptvalue.h | 3 | ||||
-rw-r--r-- | JavaScriptCore/qt/api/qscriptvalue_p.h | 35 |
8 files changed, 121 insertions, 1 deletions
diff --git a/JavaScriptCore/qt/api/qscriptengine.cpp b/JavaScriptCore/qt/api/qscriptengine.cpp index 7ef7c8e..607b0b9 100644 --- a/JavaScriptCore/qt/api/qscriptengine.cpp +++ b/JavaScriptCore/qt/api/qscriptengine.cpp @@ -25,6 +25,8 @@ #include "qscriptprogram_p.h" #include "qscriptsyntaxcheckresult_p.h" #include "qscriptvalue_p.h" +#include <QtCore/qdatetime.h> +#include <QtCore/qnumeric.h> /*! Constructs a QScriptEngine object. @@ -368,6 +370,27 @@ QScriptValue QScriptEngine::newArray(uint length) } /*! + Creates a QtScript object of class Date with the given \a value + (the number of milliseconds since 01 January 1970, UTC). +*/ +QScriptValue QScriptEngine::newDate(qsreal value) +{ + return QScriptValuePrivate::get(d_ptr->newDate(value)); +} + +/*! + Creates a QtScript object of class Date from the given \a value. + + \sa QScriptValue::toDateTime() +*/ +QScriptValue QScriptEngine::newDate(const QDateTime& value) +{ + if (value.isValid()) + return QScriptValuePrivate::get(d_ptr->newDate(qsreal(value.toMSecsSinceEpoch()))); + return QScriptValuePrivate::get(d_ptr->newDate(qSNaN())); +} + +/*! Returns this engine's Global Object. By default, the Global Object contains the built-in objects that are diff --git a/JavaScriptCore/qt/api/qscriptengine.h b/JavaScriptCore/qt/api/qscriptengine.h index b85dc52..281707f 100644 --- a/JavaScriptCore/qt/api/qscriptengine.h +++ b/JavaScriptCore/qt/api/qscriptengine.h @@ -23,11 +23,12 @@ #include "qscriptprogram.h" #include "qscriptstring.h" #include "qscriptsyntaxcheckresult.h" +#include "qscriptvalue.h" #include <QtCore/qobject.h> #include <QtCore/qshareddata.h> #include <QtCore/qstring.h> -class QScriptValue; +class QDateTime; class QScriptEnginePrivate; // FIXME: Remove this once QScriptContext is properly defined. @@ -69,6 +70,8 @@ public: QScriptValue newObject(); QScriptValue newArray(uint length = 0); + QScriptValue newDate(qsreal value); + QScriptValue newDate(const QDateTime& value); QScriptValue globalObject() const; private: friend class QScriptEnginePrivate; diff --git a/JavaScriptCore/qt/api/qscriptengine_p.cpp b/JavaScriptCore/qt/api/qscriptengine_p.cpp index a708a34..89054c0 100644 --- a/JavaScriptCore/qt/api/qscriptengine_p.cpp +++ b/JavaScriptCore/qt/api/qscriptengine_p.cpp @@ -146,6 +146,20 @@ QScriptValuePrivate* QScriptEnginePrivate::newArray(uint length) return new QScriptValuePrivate(this, array); } +QScriptValuePrivate* QScriptEnginePrivate::newDate(qsreal value) +{ + JSValueRef exception = 0; + JSValueRef argument = JSValueMakeNumber(m_context, value); + JSObjectRef result = JSObjectMakeDate(m_context, /* argumentCount */ 1, &argument, &exception); + + if (exception) { + setException(exception, NotNullException); + return new QScriptValuePrivate(); + } + + return new QScriptValuePrivate(this, result); +} + QScriptValuePrivate* QScriptEnginePrivate::globalObject() const { JSObjectRef globalObject = JSContextGetGlobalObject(m_context); diff --git a/JavaScriptCore/qt/api/qscriptengine_p.h b/JavaScriptCore/qt/api/qscriptengine_p.h index eec1929..4603b91 100644 --- a/JavaScriptCore/qt/api/qscriptengine_p.h +++ b/JavaScriptCore/qt/api/qscriptengine_p.h @@ -77,16 +77,19 @@ public: QScriptValuePrivate* newObject() const; QScriptValuePrivate* newArray(uint length); + QScriptValuePrivate* newDate(qsreal value); QScriptValuePrivate* globalObject() const; inline QScriptStringPrivate* toStringHandle(const QString& str) const; inline operator JSGlobalContextRef() const; + inline bool isDate(JSValueRef value) const; inline bool isArray(JSValueRef value) const; inline bool isError(JSValueRef value) const; inline bool objectHasOwnProperty(JSObjectRef object, JSStringRef property) const; inline QVector<JSStringRef> objectGetOwnPropertyNames(JSObjectRef object) const; + private: QScriptEngine* q_ptr; JSGlobalContextRef m_context; @@ -226,6 +229,11 @@ QScriptEnginePrivate::operator JSGlobalContextRef() const return m_context; } +bool QScriptEnginePrivate::isDate(JSValueRef value) const +{ + return m_originalGlobalObject.isDate(value); +} + bool QScriptEnginePrivate::isArray(JSValueRef value) const { return m_originalGlobalObject.isArray(value); diff --git a/JavaScriptCore/qt/api/qscriptoriginalglobalobject_p.h b/JavaScriptCore/qt/api/qscriptoriginalglobalobject_p.h index 31e94f7..2bd945f 100644 --- a/JavaScriptCore/qt/api/qscriptoriginalglobalobject_p.h +++ b/JavaScriptCore/qt/api/qscriptoriginalglobalobject_p.h @@ -43,6 +43,7 @@ public: inline bool objectHasOwnProperty(JSObjectRef object, JSStringRef property) const; inline QVector<JSStringRef> objectGetOwnPropertyNames(JSObjectRef object) const; + inline bool isDate(JSValueRef value) const; inline bool isArray(JSValueRef value) const; inline bool isError(JSValueRef value) const; @@ -61,6 +62,8 @@ private: JSValueRef m_errorPrototype; JSObjectRef m_functionConstructor; JSValueRef m_functionPrototype; + JSObjectRef m_dateConstructor; + JSValueRef m_datePrototype; // Reference to standard JS functions that are not exposed by JSC C API. JSObjectRef m_hasOwnPropertyFunction; @@ -78,6 +81,7 @@ QScriptOriginalGlobalObject::QScriptOriginalGlobalObject(JSGlobalContextRef cont initializeMember(globalObject, propertyName.get(), "Array", m_arrayConstructor, m_arrayPrototype); initializeMember(globalObject, propertyName.get(), "Error", m_errorConstructor, m_errorPrototype); initializeMember(globalObject, propertyName.get(), "Function", m_functionConstructor, m_functionPrototype); + initializeMember(globalObject, propertyName.get(), "Date", m_dateConstructor, m_datePrototype); propertyName.adopt(JSStringCreateWithUTF8CString("hasOwnProperty")); m_hasOwnPropertyFunction = const_cast<JSObjectRef>(JSObjectGetProperty(m_context, globalObject, propertyName.get(), &exception)); @@ -126,6 +130,8 @@ QScriptOriginalGlobalObject::~QScriptOriginalGlobalObject() JSValueUnprotect(m_context, m_errorPrototype); JSValueUnprotect(m_context, m_functionConstructor); JSValueUnprotect(m_context, m_functionPrototype); + JSValueUnprotect(m_context, m_dateConstructor); + JSValueUnprotect(m_context, m_datePrototype); JSValueUnprotect(m_context, m_hasOwnPropertyFunction); JSValueUnprotect(m_context, m_getOwnPropertyNamesFunction); JSGlobalContextRelease(m_context); @@ -170,6 +176,11 @@ inline QVector<JSStringRef> QScriptOriginalGlobalObject::objectGetOwnPropertyNam return names; } +inline bool QScriptOriginalGlobalObject::isDate(JSValueRef value) const +{ + return isType(value, m_dateConstructor, m_datePrototype); +} + inline bool QScriptOriginalGlobalObject::isArray(JSValueRef value) const { return isType(value, m_arrayConstructor, m_arrayPrototype); diff --git a/JavaScriptCore/qt/api/qscriptvalue.cpp b/JavaScriptCore/qt/api/qscriptvalue.cpp index a7d0b7b..8a7a6c4 100644 --- a/JavaScriptCore/qt/api/qscriptvalue.cpp +++ b/JavaScriptCore/qt/api/qscriptvalue.cpp @@ -324,6 +324,17 @@ bool QScriptValue::isArray() const } /*! + Returns true if this QScriptValue is an object of the Date class; + otherwise returns false. + + \sa QScriptEngine::newDate() +*/ +bool QScriptValue::isDate() const +{ + return d_ptr->isDate(); +} + +/*! Returns true if this QScriptValue is of the Object type; otherwise returns false. @@ -488,6 +499,18 @@ QScriptValue QScriptValue::toObject() const } /*! + Returns a QDateTime representation of this value, in local time. + If this QScriptValue is not a date, or the value of the date is + NaN (Not-a-Number), an invalid QDateTime is returned. + + \sa isDate() +*/ +QDateTime QScriptValue::toDateTime() const +{ + return d_ptr->toDateTime(); +} + +/*! Calls this QScriptValue as a function, using \a thisObject as the `this' object in the function call, and passing \a args as arguments to the function. Returns the value returned from diff --git a/JavaScriptCore/qt/api/qscriptvalue.h b/JavaScriptCore/qt/api/qscriptvalue.h index 991a6a0..bd33849 100644 --- a/JavaScriptCore/qt/api/qscriptvalue.h +++ b/JavaScriptCore/qt/api/qscriptvalue.h @@ -26,6 +26,7 @@ class QScriptEngine; class QScriptValuePrivate; +class QDateTime; class QScriptValue; typedef QList<QScriptValue> QScriptValueList; @@ -112,6 +113,7 @@ public: bool isObject() const; bool isError() const; bool isArray() const; + bool isDate() const; QString toString() const; qsreal toNumber() const; @@ -122,6 +124,7 @@ public: quint32 toUInt32() const; quint16 toUInt16() const; QScriptValue toObject() const; + QDateTime toDateTime() const; QScriptValue call(const QScriptValue& thisObject = QScriptValue(), const QScriptValueList& args = QScriptValueList()); diff --git a/JavaScriptCore/qt/api/qscriptvalue_p.h b/JavaScriptCore/qt/api/qscriptvalue_p.h index 6fbf98b..f98a06a 100644 --- a/JavaScriptCore/qt/api/qscriptvalue_p.h +++ b/JavaScriptCore/qt/api/qscriptvalue_p.h @@ -26,6 +26,7 @@ #include <JavaScriptCore/JavaScript.h> #include <JavaScriptCore/JSRetainPtr.h> #include <JSObjectRefPrivate.h> +#include <QtCore/qdatetime.h> #include <QtCore/qmath.h> #include <QtCore/qnumeric.h> #include <QtCore/qshareddata.h> @@ -102,6 +103,7 @@ public: inline bool isObject(); inline bool isFunction(); inline bool isArray(); + inline bool isDate(); inline QString toString() const; inline qsreal toNumber() const; @@ -113,6 +115,7 @@ public: inline QScriptValuePrivate* toObject(QScriptEnginePrivate* engine); inline QScriptValuePrivate* toObject(); + inline QDateTime toDateTime(); inline QScriptValuePrivate* prototype(); inline void setPrototype(QScriptValuePrivate* prototype); @@ -462,6 +465,20 @@ bool QScriptValuePrivate::isArray() } } +bool QScriptValuePrivate::isDate() +{ + switch (m_state) { + case JSValue: + if (refinedJSValue() != JSObject) + return false; + // Fall-through. + case JSObject: + return m_engine->isDate(*this); + default: + return false; + } +} + QString QScriptValuePrivate::toString() const { switch (m_state) { @@ -662,6 +679,24 @@ QScriptValuePrivate* QScriptValuePrivate::toObject() return new QScriptValuePrivate; } +QDateTime QScriptValuePrivate::toDateTime() +{ + if (!isDate()) + return QDateTime(); + + JSValueRef exception = 0; + qsreal t = JSValueToNumber(*m_engine, *this, &exception); + + if (exception) { + m_engine->setException(exception, QScriptEnginePrivate::NotNullException); + return QDateTime(); + } + + QDateTime result; + result.setMSecsSinceEpoch(qint64(t)); + return result; +} + inline QScriptValuePrivate* QScriptValuePrivate::prototype() { if (isObject()) { |