src/script/api/qscriptengine_p.h
changeset 33 3e2da88830cd
parent 30 5dc02b23752f
equal deleted inserted replaced
30:5dc02b23752f 33:3e2da88830cd
    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