48 #include "bridge/qscriptdeclarativeclass_p.h" |
48 #include "bridge/qscriptdeclarativeclass_p.h" |
49 #include "bridge/qscriptdeclarativeobject_p.h" |
49 #include "bridge/qscriptdeclarativeobject_p.h" |
50 #include "bridge/qscriptobject_p.h" |
50 #include "bridge/qscriptobject_p.h" |
51 #include "bridge/qscriptqobject_p.h" |
51 #include "bridge/qscriptqobject_p.h" |
52 #include "bridge/qscriptvariant_p.h" |
52 #include "bridge/qscriptvariant_p.h" |
53 #include "utils/qscriptdate_p.h" |
|
54 |
53 |
55 #include "DateConstructor.h" |
54 #include "DateConstructor.h" |
56 #include "DateInstance.h" |
55 #include "DateInstance.h" |
57 #include "Debugger.h" |
56 #include "Debugger.h" |
58 #include "ErrorInstance.h" |
57 #include "ErrorInstance.h" |
116 QString ToString(qsreal); |
115 QString ToString(qsreal); |
117 #else |
116 #else |
118 inline qsreal ToNumber(const QString &); |
117 inline qsreal ToNumber(const QString &); |
119 inline QString ToString(qsreal); |
118 inline QString ToString(qsreal); |
120 #endif |
119 #endif |
|
120 |
|
121 QDateTime MsToDateTime(JSC::ExecState *, qsreal); |
|
122 qsreal DateTimeToMs(JSC::ExecState *, const QDateTime &); |
121 |
123 |
122 //some conversion helper functions |
124 //some conversion helper functions |
123 inline QScriptEnginePrivate *scriptEngineFromExec(const JSC::ExecState *exec); |
125 inline QScriptEnginePrivate *scriptEngineFromExec(const JSC::ExecState *exec); |
124 bool isFunction(JSC::JSValue value); |
126 bool isFunction(JSC::JSValue value); |
125 |
127 |
203 static JSC::JSValue create(JSC::ExecState*, int type, const void *ptr); |
205 static JSC::JSValue create(JSC::ExecState*, int type, const void *ptr); |
204 bool hasDemarshalFunction(int type) const; |
206 bool hasDemarshalFunction(int type) const; |
205 |
207 |
206 inline QScriptValue scriptValueFromJSCValue(JSC::JSValue value); |
208 inline QScriptValue scriptValueFromJSCValue(JSC::JSValue value); |
207 inline JSC::JSValue scriptValueToJSCValue(const QScriptValue &value); |
209 inline JSC::JSValue scriptValueToJSCValue(const QScriptValue &value); |
|
210 static inline unsigned propertyFlagsToJSCAttributes(const QScriptValue::PropertyFlags &flags); |
208 |
211 |
209 static inline JSC::JSValue jscValueFromVariant(JSC::ExecState*, const QVariant &value); |
212 static inline JSC::JSValue jscValueFromVariant(JSC::ExecState*, const QVariant &value); |
210 static QVariant jscValueToVariant(JSC::ExecState*, JSC::JSValue value, int targetType); |
213 static QVariant jscValueToVariant(JSC::ExecState*, JSC::JSValue value, int targetType); |
211 static inline QVariant &variantValue(JSC::JSValue value); |
214 static inline QVariant &variantValue(JSC::JSValue value); |
212 static inline void setVariantValue(JSC::JSValue objectValue, const QVariant &value); |
215 static inline void setVariantValue(JSC::JSValue objectValue, const QVariant &value); |
213 |
216 |
214 static JSC::JSValue arrayFromStringList(JSC::ExecState*, const QStringList &lst); |
217 static JSC::JSValue arrayFromStringList(JSC::ExecState*, const QStringList &lst); |
215 static QStringList stringListFromArray(JSC::ExecState*, JSC::JSValue arr); |
218 static QStringList stringListFromArray(JSC::ExecState*, JSC::JSValue arr); |
216 |
219 |
217 static JSC::JSValue arrayFromVariantList(JSC::ExecState*, const QVariantList &lst); |
220 static JSC::JSValue arrayFromVariantList(JSC::ExecState*, const QVariantList &lst); |
218 static QVariantList variantListFromArray(JSC::ExecState*, JSC::JSValue arr); |
221 static QVariantList variantListFromArray(JSC::ExecState*, JSC::JSArray *arr); |
219 |
222 |
220 static JSC::JSValue objectFromVariantMap(JSC::ExecState*, const QVariantMap &vmap); |
223 static JSC::JSValue objectFromVariantMap(JSC::ExecState*, const QVariantMap &vmap); |
221 static QVariantMap variantMapFromObject(JSC::ExecState*, JSC::JSValue obj); |
224 static QVariantMap variantMapFromObject(JSC::ExecState*, JSC::JSObject *obj); |
222 |
225 |
223 JSC::JSValue defaultPrototype(int metaTypeId) const; |
226 JSC::JSValue defaultPrototype(int metaTypeId) const; |
224 void setDefaultPrototype(int metaTypeId, JSC::JSValue prototype); |
227 void setDefaultPrototype(int metaTypeId, JSC::JSValue prototype); |
225 |
228 |
226 static inline QScriptContext *contextForFrame(JSC::ExecState *frame); |
229 static inline QScriptContext *contextForFrame(JSC::ExecState *frame); |
344 JSC::JSGlobalData *globalData; |
347 JSC::JSGlobalData *globalData; |
345 JSC::JSObject *originalGlobalObjectProxy; |
348 JSC::JSObject *originalGlobalObjectProxy; |
346 JSC::ExecState *currentFrame; |
349 JSC::ExecState *currentFrame; |
347 |
350 |
348 WTF::RefPtr<JSC::Structure> scriptObjectStructure; |
351 WTF::RefPtr<JSC::Structure> scriptObjectStructure; |
|
352 WTF::RefPtr<JSC::Structure> staticScopeObjectStructure; |
349 |
353 |
350 QScript::QObjectPrototype *qobjectPrototype; |
354 QScript::QObjectPrototype *qobjectPrototype; |
351 WTF::RefPtr<JSC::Structure> qobjectWrapperObjectStructure; |
355 WTF::RefPtr<JSC::Structure> qobjectWrapperObjectStructure; |
352 |
356 |
353 QScript::QMetaObjectPrototype *qmetaobjectPrototype; |
357 QScript::QMetaObjectPrototype *qmetaobjectPrototype; |
376 QSet<QString> extensionsBeingImported; |
380 QSet<QString> extensionsBeingImported; |
377 |
381 |
378 QHash<intptr_t, QScript::UStringSourceProviderWithFeedback*> loadedScripts; |
382 QHash<intptr_t, QScript::UStringSourceProviderWithFeedback*> loadedScripts; |
379 QScriptValue m_currentException; |
383 QScriptValue m_currentException; |
380 |
384 |
|
385 QSet<JSC::JSObject*> visitedConversionObjects; |
|
386 |
381 #ifndef QT_NO_QOBJECT |
387 #ifndef QT_NO_QOBJECT |
382 QHash<QObject*, QScript::QObjectData*> m_qobjectData; |
388 QHash<QObject*, QScript::QObjectData*> m_qobjectData; |
383 #endif |
389 #endif |
384 |
390 |
385 #ifdef QT_NO_QOBJECT |
391 #ifdef QT_NO_QOBJECT |
635 } |
641 } |
636 } |
642 } |
637 return vv->jscValue; |
643 return vv->jscValue; |
638 } |
644 } |
639 |
645 |
|
646 inline unsigned QScriptEnginePrivate::propertyFlagsToJSCAttributes(const QScriptValue::PropertyFlags &flags) |
|
647 { |
|
648 unsigned attribs = 0; |
|
649 if (flags & QScriptValue::ReadOnly) |
|
650 attribs |= JSC::ReadOnly; |
|
651 if (flags & QScriptValue::SkipInEnumeration) |
|
652 attribs |= JSC::DontEnum; |
|
653 if (flags & QScriptValue::Undeletable) |
|
654 attribs |= JSC::DontDelete; |
|
655 attribs |= flags & QScriptValue::UserRange; |
|
656 return attribs; |
|
657 } |
|
658 |
640 inline QScriptValuePrivate::~QScriptValuePrivate() |
659 inline QScriptValuePrivate::~QScriptValuePrivate() |
641 { |
660 { |
642 if (engine) |
661 if (engine) |
643 engine->unregisterScriptValue(this); |
662 engine->unregisterScriptValue(this); |
644 } |
663 } |
842 return JSC::constructDate(exec, args); |
861 return JSC::constructDate(exec, args); |
843 } |
862 } |
844 |
863 |
845 inline JSC::JSValue QScriptEnginePrivate::newDate(JSC::ExecState *exec, const QDateTime &value) |
864 inline JSC::JSValue QScriptEnginePrivate::newDate(JSC::ExecState *exec, const QDateTime &value) |
846 { |
865 { |
847 return newDate(exec, QScript::FromDateTime(value)); |
866 return newDate(exec, QScript::DateTimeToMs(exec, value)); |
848 } |
867 } |
849 |
868 |
850 inline JSC::JSValue QScriptEnginePrivate::newObject() |
869 inline JSC::JSValue QScriptEnginePrivate::newObject() |
851 { |
870 { |
852 return new (currentFrame)QScriptObject(scriptObjectStructure); |
871 return new (currentFrame)QScriptObject(scriptObjectStructure); |
975 if (savedException) |
994 if (savedException) |
976 restoreException(exec, savedException); |
995 restoreException(exec, savedException); |
977 return str; |
996 return str; |
978 } |
997 } |
979 |
998 |
980 inline QDateTime QScriptEnginePrivate::toDateTime(JSC::ExecState *, JSC::JSValue value) |
999 inline QDateTime QScriptEnginePrivate::toDateTime(JSC::ExecState *exec, JSC::JSValue value) |
981 { |
1000 { |
982 if (!isDate(value)) |
1001 if (!isDate(value)) |
983 return QDateTime(); |
1002 return QDateTime(); |
984 qsreal t = static_cast<JSC::DateInstance*>(JSC::asObject(value))->internalNumber(); |
1003 qsreal t = static_cast<JSC::DateInstance*>(JSC::asObject(value))->internalNumber(); |
985 return QScript::ToDateTime(t, Qt::LocalTime); |
1004 return QScript::MsToDateTime(exec, t); |
986 } |
1005 } |
987 |
1006 |
988 inline QObject *QScriptEnginePrivate::toQObject(JSC::ExecState *exec, JSC::JSValue value) |
1007 inline QObject *QScriptEnginePrivate::toQObject(JSC::ExecState *exec, JSC::JSValue value) |
989 { |
1008 { |
990 #ifndef QT_NO_QOBJECT |
1009 #ifndef QT_NO_QOBJECT |