src/script/api/qscriptengine_p.h
changeset 33 3e2da88830cd
parent 30 5dc02b23752f
--- a/src/script/api/qscriptengine_p.h	Tue Jul 06 15:10:48 2010 +0300
+++ b/src/script/api/qscriptengine_p.h	Wed Aug 18 10:37:55 2010 +0300
@@ -50,7 +50,6 @@
 #include "bridge/qscriptobject_p.h"
 #include "bridge/qscriptqobject_p.h"
 #include "bridge/qscriptvariant_p.h"
-#include "utils/qscriptdate_p.h"
 
 #include "DateConstructor.h"
 #include "DateInstance.h"
@@ -119,6 +118,9 @@
     inline QString ToString(qsreal);
 #endif
 
+    QDateTime MsToDateTime(JSC::ExecState *, qsreal);
+    qsreal DateTimeToMs(JSC::ExecState *, const QDateTime &);
+
     //some conversion helper functions
     inline QScriptEnginePrivate *scriptEngineFromExec(const JSC::ExecState *exec);
     bool isFunction(JSC::JSValue value);
@@ -205,6 +207,7 @@
 
     inline QScriptValue scriptValueFromJSCValue(JSC::JSValue value);
     inline JSC::JSValue scriptValueToJSCValue(const QScriptValue &value);
+    static inline unsigned propertyFlagsToJSCAttributes(const QScriptValue::PropertyFlags &flags);
 
     static inline JSC::JSValue jscValueFromVariant(JSC::ExecState*, const QVariant &value);
     static QVariant jscValueToVariant(JSC::ExecState*, JSC::JSValue value, int targetType);
@@ -215,10 +218,10 @@
     static QStringList stringListFromArray(JSC::ExecState*, JSC::JSValue arr);
 
     static JSC::JSValue arrayFromVariantList(JSC::ExecState*, const QVariantList &lst);
-    static QVariantList variantListFromArray(JSC::ExecState*, JSC::JSValue arr);
+    static QVariantList variantListFromArray(JSC::ExecState*, JSC::JSArray *arr);
 
     static JSC::JSValue objectFromVariantMap(JSC::ExecState*, const QVariantMap &vmap);
-    static QVariantMap variantMapFromObject(JSC::ExecState*, JSC::JSValue obj);
+    static QVariantMap variantMapFromObject(JSC::ExecState*, JSC::JSObject *obj);
 
     JSC::JSValue defaultPrototype(int metaTypeId) const;
     void setDefaultPrototype(int metaTypeId, JSC::JSValue prototype);
@@ -346,6 +349,7 @@
     JSC::ExecState *currentFrame;
 
     WTF::RefPtr<JSC::Structure> scriptObjectStructure;
+    WTF::RefPtr<JSC::Structure> staticScopeObjectStructure;
 
     QScript::QObjectPrototype *qobjectPrototype;
     WTF::RefPtr<JSC::Structure> qobjectWrapperObjectStructure;
@@ -378,6 +382,8 @@
     QHash<intptr_t, QScript::UStringSourceProviderWithFeedback*> loadedScripts;
     QScriptValue m_currentException;
 
+    QSet<JSC::JSObject*> visitedConversionObjects;
+
 #ifndef QT_NO_QOBJECT
     QHash<QObject*, QScript::QObjectData*> m_qobjectData;
 #endif
@@ -637,6 +643,19 @@
     return vv->jscValue;
 }
 
+inline unsigned QScriptEnginePrivate::propertyFlagsToJSCAttributes(const QScriptValue::PropertyFlags &flags)
+{
+    unsigned attribs = 0;
+    if (flags & QScriptValue::ReadOnly)
+        attribs |= JSC::ReadOnly;
+    if (flags & QScriptValue::SkipInEnumeration)
+        attribs |= JSC::DontEnum;
+    if (flags & QScriptValue::Undeletable)
+        attribs |= JSC::DontDelete;
+    attribs |= flags & QScriptValue::UserRange;
+    return attribs;
+}
+
 inline QScriptValuePrivate::~QScriptValuePrivate()
 {
     if (engine)
@@ -844,7 +863,7 @@
 
 inline JSC::JSValue QScriptEnginePrivate::newDate(JSC::ExecState *exec, const QDateTime &value)
 {
-    return newDate(exec, QScript::FromDateTime(value));
+    return newDate(exec, QScript::DateTimeToMs(exec, value));
 }
 
 inline JSC::JSValue QScriptEnginePrivate::newObject()
@@ -977,12 +996,12 @@
     return str;
 }
 
-inline QDateTime QScriptEnginePrivate::toDateTime(JSC::ExecState *, JSC::JSValue value)
+inline QDateTime QScriptEnginePrivate::toDateTime(JSC::ExecState *exec, JSC::JSValue value)
 {
     if (!isDate(value))
         return QDateTime();
     qsreal t = static_cast<JSC::DateInstance*>(JSC::asObject(value))->internalNumber();
-    return QScript::ToDateTime(t, Qt::LocalTime);
+    return QScript::MsToDateTime(exec, t);
 }
 
 inline QObject *QScriptEnginePrivate::toQObject(JSC::ExecState *exec, JSC::JSValue value)