aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/qml/v8/qv8engine_p.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/qml/qml/v8/qv8engine_p.h')
-rw-r--r--src/qml/qml/v8/qv8engine_p.h503
1 files changed, 81 insertions, 422 deletions
diff --git a/src/qml/qml/v8/qv8engine_p.h b/src/qml/qml/v8/qv8engine_p.h
index 5ae0963178..61db8a79b3 100644
--- a/src/qml/qml/v8/qv8engine_p.h
+++ b/src/qml/qml/v8/qv8engine_p.h
@@ -62,39 +62,24 @@
#include <QtCore/QElapsedTimer>
#include <QtCore/QThreadStorage>
-#include <private/qv8_p.h>
#include <qjsengine.h>
#include <qjsvalue.h>
-#include "qjsvalue_p.h"
#include "qjsvalueiterator_p.h"
-#include "qscriptoriginalglobalobject_p.h"
-#include "qscripttools_p.h"
+#include "private/qintrusivelist_p.h"
#include <private/qqmlpropertycache_p.h>
-#include "qv8objectresource_p.h"
-#include "qv8contextwrapper_p.h"
-#include "qv8qobjectwrapper_p.h"
-#include "qv8stringwrapper_p.h"
-#include "qv8typewrapper_p.h"
-#include "qv8listwrapper_p.h"
-#include "qv8variantwrapper_p.h"
-#include "qv8valuetypewrapper_p.h"
-#include "qv8sequencewrapper_p.h"
-#include "qv8jsonwrapper_p.h"
-
-namespace v8 {
-
-// Needed for V8ObjectSet
-inline uint qHash(const v8::Handle<v8::Object> &object, uint seed = 0)
-{
- return (object->GetIdentityHash() ^ seed);
-}
-
-}
+#include <private/qv4qobjectwrapper_p.h>
+#include <private/qv4value_p.h>
+#include <private/qv4object_p.h>
QT_BEGIN_NAMESPACE
+namespace QV4 {
+ struct ArrayObject;
+ struct ExecutionEngine;
+ struct Value;
+}
// Uncomment the following line to enable global handle debugging. When enabled, all the persistent
// handles allocated using qPersistentNew() (or registered with qPersistentRegsiter()) and disposed
@@ -102,32 +87,11 @@ QT_BEGIN_NAMESPACE
// a handle, qFatal() is called.
// #define QML_GLOBAL_HANDLE_DEBUGGING
-#define V8ENGINE() ((QV8Engine *)v8::External::Cast(*args.Data())->Value())
-#define V8FUNCTION(function, engine) v8::FunctionTemplate::New(function, v8::External::New((QV8Engine*)engine))->GetFunction()
-#define V8THROW_ERROR(string) { \
- v8::ThrowException(v8::Exception::Error(v8::String::New(string))); \
- return v8::Handle<v8::Value>(); \
-}
-#define V8THROW_TYPE(string) { \
- v8::ThrowException(v8::Exception::TypeError(v8::String::New(string))); \
- return v8::Handle<v8::Value>(); \
-}
-#define V8ENGINE_ACCESSOR() ((QV8Engine *)v8::External::Cast(*info.Data())->Value());
-#define V8THROW_ERROR_SETTER(string) { \
- v8::ThrowException(v8::Exception::Error(v8::String::New(string))); \
- return; \
-}
+#define V4THROW_ERROR(string) \
+ ctx->throwError(QString::fromUtf8(string));
-#define V8ASSERT_TYPE(condition, string) \
- if (!(condition)) { \
- v8::ThrowException(v8::Exception::TypeError(v8::String::New(string))); \
- return v8::Handle<v8::Value>(); \
- }
-#define V8ASSERT_TYPE_SETTER(condition, string) \
- if (!(condition)) { \
- v8::ThrowException(v8::Exception::TypeError(v8::String::New(string))); \
- return; \
- }
+#define V4THROW_TYPE(string) \
+ ctx->throwTypeError(QStringLiteral(string));
#define V8_DEFINE_EXTENSION(dataclass, datafunction) \
static inline dataclass *datafunction(QV8Engine *engine) \
@@ -147,19 +111,6 @@ QT_BEGIN_NAMESPACE
return rv; \
} \
-template<class T>
-inline T *v8_resource_cast(v8::Handle<v8::Object> object) {
- QV8ObjectResource *resource = static_cast<QV8ObjectResource *>(object->GetExternalResource());
- return (resource && (quint32)resource->resourceType() == (quint32)T::V8ResourceType)?static_cast<T *>(resource):0;
-}
-
-template<class T>
-inline T *v8_resource_check(v8::Handle<v8::Object> object) {
- T *resource = static_cast<T *>(object->GetExternalResource());
- Q_ASSERT(resource && resource->resourceType() == (quint32)T::V8ResourceType);
- return resource;
-}
-
// Used to allow a QObject method take and return raw V8 handles without having to expose
// v8 in the public API.
// Use like this:
@@ -172,50 +123,52 @@ inline T *v8_resource_check(v8::Handle<v8::Object> object) {
// valid during the call. If the return value isn't set within myMethod(), the will return
// undefined.
class QV8Engine;
-class QQmlV8Function
+class QQmlV4Function
{
public:
- int Length() const { return _ac; }
- v8::Local<v8::Value> operator[](int idx) { return (*_a)->Get(idx); }
- QQmlContextData *context() { return _c; }
- v8::Handle<v8::Object> qmlGlobal() { return *_g; }
- void returnValue(v8::Handle<v8::Value> rv) { *_r = rv; }
- QV8Engine *engine() const { return _e; }
+ int length() const { return argc; }
+ QV4::Value operator[](int idx) { return args[idx]; }
+ QQmlContextData *context() { return ctx; }
+ QV4::Value qmlGlobal() { return global; }
+ void setReturnValue(const QV4::Value &rv) { *retVal = rv; }
+ QV8Engine *engine() const { return e; }
private:
friend class QV8QObjectWrapper;
- QQmlV8Function();
- QQmlV8Function(const QQmlV8Function &);
- QQmlV8Function &operator=(const QQmlV8Function &);
+ friend struct QV4::QObjectMethod;
+ QQmlV4Function();
+ QQmlV4Function(const QQmlV4Function &);
+ QQmlV4Function &operator=(const QQmlV4Function &);
- QQmlV8Function(int length, v8::Handle<v8::Object> &args,
- v8::Handle<v8::Value> &rv, v8::Handle<v8::Object> &global,
+ QQmlV4Function(int length, QV4::Value *args,
+ QV4::Value *rv, const QV4::Value &global,
QQmlContextData *c, QV8Engine *e)
- : _ac(length), _a(&args), _r(&rv), _g(&global), _c(c), _e(e) {}
-
- int _ac;
- v8::Handle<v8::Object> *_a;
- v8::Handle<v8::Value> *_r;
- v8::Handle<v8::Object> *_g;
- QQmlContextData *_c;
- QV8Engine *_e;
+ : argc(length), args(args), retVal(rv), global(global), ctx(c), e(e) {}
+
+ int argc;
+ QV4::Value *args;
+ QV4::Value *retVal;
+ QV4::Value global;
+ QQmlContextData *ctx;
+ QV8Engine *e;
};
-class QQmlV8Handle
+class Q_QML_PRIVATE_EXPORT QQmlV4Handle
{
public:
- QQmlV8Handle() : d(0) {}
- QQmlV8Handle(const QQmlV8Handle &other) : d(other.d) {}
- QQmlV8Handle &operator=(const QQmlV8Handle &other) { d = other.d; return *this; }
-
- static QQmlV8Handle fromHandle(v8::Handle<v8::Value> h) {
- return QQmlV8Handle(*h);
- }
- v8::Handle<v8::Value> toHandle() const {
- return v8::Handle<v8::Value>((v8::Value *)d);
+ QQmlV4Handle() : d(0) {}
+ QQmlV4Handle(const QQmlV4Handle &other) : d(other.d) {}
+ QQmlV4Handle &operator=(const QQmlV4Handle &other) { d = other.d; return *this; }
+ explicit QQmlV4Handle(const QV4::Value &v) : d(v.val) {}
+
+ QV4::Value toValue() const {
+ QV4::Value v;
+ v.val = d;
+ return v;
}
+
private:
- QQmlV8Handle(void *d) : d(d) {}
- void *d;
+ QQmlV4Handle(quint64 h) : d(h) {}
+ quint64 d;
};
class QObject;
@@ -224,39 +177,17 @@ class QQmlValueType;
class QNetworkAccessManager;
class QQmlContextData;
-class Q_AUTOTEST_EXPORT QV8GCCallback
-{
-private:
- class ThreadData;
-public:
- static void garbageCollectorPrologueCallback(v8::GCType, v8::GCCallbackFlags);
- static void registerGcPrologueCallback();
-
- class Q_AUTOTEST_EXPORT Node {
- public:
- typedef void (*PrologueCallback)(Node *node);
- Node(PrologueCallback callback);
- ~Node();
-
- QIntrusiveListNode node;
- PrologueCallback prologueCallback;
- };
-
- static void addGcCallbackNode(Node *node);
-};
-
class Q_QML_PRIVATE_EXPORT QV8Engine
{
- typedef QSet<v8::Handle<v8::Object> > V8ObjectSet;
+ friend class QJSEngine;
+ typedef QSet<QV4::Object *> V8ObjectSet;
public:
static QV8Engine* get(QJSEngine* q) { Q_ASSERT(q); return q->handle(); }
- static QJSEngine* get(QV8Engine* d) { Q_ASSERT(d); return d->q; }
+// static QJSEngine* get(QV8Engine* d) { Q_ASSERT(d); return d->q; }
+ static QV4::ExecutionEngine *getV4(QJSEngine *q) { return q->handle()->m_v4Engine; }
+ static QV4::ExecutionEngine *getV4(QV8Engine *d) { return d->m_v4Engine; }
- enum ContextOwnership {
- AdoptCurrentContext,
- CreateNewContext
- };
- QV8Engine(QJSEngine* qq, ContextOwnership ownership = CreateNewContext);
+ QV8Engine(QJSEngine* qq);
virtual ~QV8Engine();
// This enum should be in sync with QQmlEngine::ObjectOwnership
@@ -269,24 +200,8 @@ public:
void initQmlGlobalObject();
void setEngine(QQmlEngine *engine);
QQmlEngine *engine() { return m_engine; }
- v8::Local<v8::Object> global() { return m_context->Global(); }
- v8::Handle<v8::Context> context() const { return m_context; }
-
- inline void registerValue(QJSValuePrivate *data);
- inline void unregisterValue(QJSValuePrivate *data);
- inline void invalidateAllValues();
-
- inline void registerValueIterator(QJSValueIteratorPrivate *data);
- inline void unregisterValueIterator(QJSValueIteratorPrivate *data);
- inline void invalidateAllIterators();
-
- QV8ContextWrapper *contextWrapper() { return &m_contextWrapper; }
- QV8QObjectWrapper *qobjectWrapper() { return &m_qobjectWrapper; }
- QV8TypeWrapper *typeWrapper() { return &m_typeWrapper; }
- QV8ListWrapper *listWrapper() { return &m_listWrapper; }
- QV8VariantWrapper *variantWrapper() { return &m_variantWrapper; }
- QV8ValueTypeWrapper *valueTypeWrapper() { return &m_valueTypeWrapper; }
- QV8SequenceWrapper *sequenceWrapper() { return &m_sequenceWrapper; }
+ QJSEngine *publicEngine() { return q; }
+ QV4::Value global();
void *xmlHttpRequestData() { return m_xmlHttpRequestData; }
@@ -295,55 +210,13 @@ public:
QQmlContextData *callingContext();
- v8::Local<v8::Array> getOwnPropertyNames(v8::Handle<v8::Object>);
- inline QJSValuePrivate::PropertyFlags getPropertyFlags(v8::Handle<v8::Object> object, v8::Handle<v8::Value> property);
- void freezeObject(v8::Handle<v8::Value>);
-
- inline QString toString(v8::Handle<v8::Value> string);
- inline QString toString(v8::Handle<v8::String> string);
- static QString toStringStatic(v8::Handle<v8::Value>);
- static QString toStringStatic(v8::Handle<v8::String>);
- static inline bool startsWithUpper(v8::Handle<v8::String>);
-
- QVariant toVariant(v8::Handle<v8::Value>, int typeHint);
- v8::Handle<v8::Value> fromVariant(const QVariant &);
- inline bool isVariant(v8::Handle<v8::Value>);
-
- // Compile \a source (from \a fileName at \a lineNumber) in QML mode
- v8::Local<v8::Script> qmlModeCompile(const QString &source,
- const QString &fileName = QString(),
- quint16 lineNumber = 1);
- v8::Local<v8::Script> qmlModeCompile(const char *source, int sourceLength = -1,
- const QString &fileName = QString(),
- quint16 lineNumber = 1);
-
- // Return the QML global "scope" object for the \a ctxt context and \a scope object.
- inline v8::Local<v8::Object> qmlScope(QQmlContextData *ctxt, QObject *scope);
-
- // Return a JS wrapper for the given QObject \a object
- inline v8::Handle<v8::Value> newQObject(QObject *object);
- inline v8::Handle<v8::Value> newQObject(QObject *object, const ObjectOwnership ownership);
- inline bool isQObject(v8::Handle<v8::Value>);
- inline QObject *toQObject(v8::Handle<v8::Value>);
-
- // Return a JS string for the given QString \a string
- inline v8::Local<v8::String> toString(const QString &string);
-
- // Create a new value type object
- inline v8::Handle<v8::Value> newValueType(QObject *, int coreIndex, QQmlValueType *);
- inline v8::Handle<v8::Value> newValueType(const QVariant &, QQmlValueType *);
- inline bool isValueType(v8::Handle<v8::Value>) const;
- inline QVariant toValueType(v8::Handle<v8::Value> obj);
+ void freezeObject(const QV4::Value &value);
- // Create a new sequence type object
- inline v8::Handle<v8::Value> newSequence(int sequenceType, QObject *, int coreIndex, bool *succeeded);
+ QVariant toVariant(const QV4::Value &value, int typeHint);
+ QV4::Value fromVariant(const QVariant &);
- // Create a new QVariant object. This doesn't examine the type of the variant, but always returns
- // a QVariant wrapper
- inline v8::Handle<v8::Value> newQVariant(const QVariant &);
-
- // Return the JS string key for the "function is a binding" flag
- inline v8::Handle<v8::String> bindingFlagKey() const;
+ // Return a JS string for the given QString \a string
+ QV4::Value toString(const QString &string);
// Return the network access manager for this engine. By default this returns the network
// access manager of the QQmlEngine. It is overridden in the case of a threaded v8
@@ -354,15 +227,7 @@ public:
const QStringHash<bool> &illegalNames() const;
inline void collectGarbage() { gc(); }
- static void gc();
-
- v8::Handle<v8::Value> throwException(v8::Handle<v8::Value> value);
-
-#ifdef QML_GLOBAL_HANDLE_DEBUGGING
- // Used for handle debugging
- static void registerHandle(void *);
- static void releaseHandle(void *);
-#endif
+ void gc();
static QMutex *registrationMutex();
static int registerExtension();
@@ -370,49 +235,25 @@ public:
inline Deletable *extensionData(int) const;
void setExtensionData(int, Deletable *);
- inline v8::Handle<v8::Value> makeJSValue(bool value);
- inline v8::Local<v8::Value> makeJSValue(int value);
- inline v8::Local<v8::Value> makeJSValue(uint value);
- inline v8::Local<v8::Value> makeJSValue(double value);
- inline v8::Handle<v8::Value> makeJSValue(QJSValue::SpecialValue value);
- inline v8::Local<v8::Value> makeJSValue(const QString &value);
-
- inline QScriptPassPointer<QJSValuePrivate> evaluate(const QString &program, const QString &fileName = QString(), quint16 lineNumber = 1);
- QScriptPassPointer<QJSValuePrivate> evaluate(v8::Handle<v8::Script> script, v8::TryCatch& tryCatch);
-
- QScriptPassPointer<QJSValuePrivate> newArray(uint length);
- v8::Local<v8::Object> newVariant(const QVariant &variant);
-
- v8::Local<v8::Array> variantListToJS(const QVariantList &lst);
- inline QVariantList variantListFromJS(v8::Handle<v8::Array> jsArray)
- { V8ObjectSet visitedObjects; return variantListFromJS(jsArray, visitedObjects); }
+ QV4::Value variantListToJS(const QVariantList &lst);
+ inline QVariantList variantListFromJS(QV4::ArrayObject *array)
+ { V8ObjectSet visitedObjects; return variantListFromJS(array, visitedObjects); }
- v8::Local<v8::Object> variantMapToJS(const QVariantMap &vmap);
- inline QVariantMap variantMapFromJS(v8::Handle<v8::Object> jsObject)
- { V8ObjectSet visitedObjects; return variantMapFromJS(jsObject, visitedObjects); }
+ QV4::Value variantMapToJS(const QVariantMap &vmap);
+ inline QVariantMap variantMapFromJS(QV4::Object *object)
+ { V8ObjectSet visitedObjects; return variantMapFromJS(object, visitedObjects); }
- v8::Handle<v8::Value> variantToJS(const QVariant &value);
- inline QVariant variantFromJS(v8::Handle<v8::Value> value)
+ QV4::Value variantToJS(const QVariant &value);
+ inline QVariant variantFromJS(const QV4::Value &value)
{ V8ObjectSet visitedObjects; return variantFromJS(value, visitedObjects); }
- v8::Handle<v8::Value> jsonValueToJS(const QJsonValue &value);
- QJsonValue jsonValueFromJS(v8::Handle<v8::Value> value);
- v8::Local<v8::Object> jsonObjectToJS(const QJsonObject &object);
- QJsonObject jsonObjectFromJS(v8::Handle<v8::Value> value);
- v8::Local<v8::Array> jsonArrayToJS(const QJsonArray &array);
- QJsonArray jsonArrayFromJS(v8::Handle<v8::Value> value);
+ QV4::Value metaTypeToJS(int type, const void *data);
+ bool metaTypeFromJS(const QV4::Value &value, int type, void *data);
- v8::Handle<v8::Value> metaTypeToJS(int type, const void *data);
- bool metaTypeFromJS(v8::Handle<v8::Value> value, int type, void *data);
-
- bool convertToNativeQObject(v8::Handle<v8::Value> value,
+ bool convertToNativeQObject(const QV4::Value &value,
const QByteArray &targetType,
void **result);
- QVariant &variantValue(v8::Handle<v8::Value> value);
-
- QJSValue scriptValueFromInternal(v8::Handle<v8::Value>) const;
-
// used for console.time(), console.timeEnd()
void startTimer(const QString &timerName);
qint64 stopTimer(const QString &timerName, bool *wasRunning);
@@ -420,54 +261,15 @@ public:
// used for console.count()
int consoleCountHelper(const QString &file, quint16 line, quint16 column);
- QObject *qtObjectFromJS(v8::Handle<v8::Value> value);
-
- static QDateTime qtDateTimeFromJsDate(double jsDate);
-
- void addRelationshipForGC(QObject *object, v8::Persistent<v8::Value> handle);
- void addRelationshipForGC(QObject *object, QObject *other);
-
- static v8::Handle<v8::Value> getPlatform(v8::Local<v8::String> property, const v8::AccessorInfo &info);
- static v8::Handle<v8::Value> getApplication(v8::Local<v8::String> property, const v8::AccessorInfo &info);
-#ifndef QT_NO_IM
- static v8::Handle<v8::Value> getInputMethod(v8::Local<v8::String> property, const v8::AccessorInfo &info);
-#endif
-
- struct ThreadData {
- ThreadData();
- ~ThreadData();
- v8::Isolate* isolate;
- bool gcPrologueCallbackRegistered;
- QIntrusiveList<QV8GCCallback::Node, &QV8GCCallback::Node::node> gcCallbackNodes;
- };
-
- static bool hasThreadData();
- static ThreadData* threadData();
- static void ensurePerThreadIsolate();
-
- v8::Persistent<v8::Object> m_strongReferencer;
+ QObject *qtObjectFromJS(const QV4::Value &value);
protected:
QJSEngine* q;
QQmlEngine *m_engine;
- bool m_ownsV8Context;
- v8::Persistent<v8::Context> m_context;
- QScriptOriginalGlobalObject m_originalGlobalObject;
- v8::Persistent<v8::String> m_bindingFlagKey;
+ QV4::ExecutionEngine *m_v4Engine;
- QV8StringWrapper m_stringWrapper;
- QV8ContextWrapper m_contextWrapper;
- QV8QObjectWrapper m_qobjectWrapper;
- QV8TypeWrapper m_typeWrapper;
- QV8ListWrapper m_listWrapper;
- QV8VariantWrapper m_variantWrapper;
- QV8ValueTypeWrapper m_valueTypeWrapper;
- QV8SequenceWrapper m_sequenceWrapper;
- QV8JsonWrapper m_jsonWrapper;
-
- v8::Persistent<v8::Function> m_getOwnPropertyNames;
- v8::Persistent<v8::Function> m_freezeObject;
+ QV4::PersistentValue m_freezeObject;
void *m_xmlHttpRequestData;
@@ -481,161 +283,18 @@ protected:
QHash<QString, quint32> m_consoleCount;
- QObject *m_platform;
- QObject *m_application;
-
- QVariant toBasicVariant(v8::Handle<v8::Value>);
+ QVariant toBasicVariant(const QV4::Value &);
- void initializeGlobal(v8::Handle<v8::Object>);
-
- double qtDateTimeToJsDate(const QDateTime &dt);
+ void initializeGlobal();
private:
- QVariantList variantListFromJS(v8::Handle<v8::Array> jsArray, V8ObjectSet &visitedObjects);
- QVariantMap variantMapFromJS(v8::Handle<v8::Object> jsObject, V8ObjectSet &visitedObjects);
- QVariant variantFromJS(v8::Handle<v8::Value> value, V8ObjectSet &visitedObjects);
-
- static v8::Persistent<v8::Object> *findOwnerAndStrength(QObject *object, bool *shouldBeStrong);
-
- typedef QScriptIntrusiveList<QJSValuePrivate, &QJSValuePrivate::m_node> ValueList;
- ValueList m_values;
- typedef QScriptIntrusiveList<QJSValueIteratorPrivate, &QJSValueIteratorPrivate::m_node> ValueIteratorList;
- ValueIteratorList m_valueIterators;
+ QVariantList variantListFromJS(QV4::ArrayObject *array, V8ObjectSet &visitedObjects);
+ QVariantMap variantMapFromJS(QV4::Object *object, V8ObjectSet &visitedObjects);
+ QVariant variantFromJS(const QV4::Value &value, V8ObjectSet &visitedObjects);
Q_DISABLE_COPY(QV8Engine)
};
-// Allocate a new Persistent handle. *ALL* persistent handles in QML must be allocated
-// using this method.
-template<class T>
-v8::Persistent<T> qPersistentNew(v8::Handle<T> that)
-{
- v8::Persistent<T> rv = v8::Persistent<T>::New(that);
-#ifdef QML_GLOBAL_HANDLE_DEBUGGING
- QV8Engine::registerHandle(*rv);
-#endif
- return rv;
-}
-
-// Register a Persistent handle that was returned to you by V8 (such as by
-// v8::Context::New). This allows us to do handle tracking on these handles too.
-template<class T>
-void qPersistentRegister(v8::Persistent<T> handle)
-{
-#ifdef QML_GLOBAL_HANDLE_DEBUGGING
- QV8Engine::registerHandle(*handle);
-#else
- Q_UNUSED(handle);
-#endif
-}
-
-// Dispose and clear a persistent handle. *ALL* persistent handles in QML must be
-// disposed using this method.
-template<class T>
-void qPersistentDispose(v8::Persistent<T> &that)
-{
-#ifdef QML_GLOBAL_HANDLE_DEBUGGING
- QV8Engine::releaseHandle(*that);
-#endif
- that.Dispose();
- that.Clear();
-}
-
-QString QV8Engine::toString(v8::Handle<v8::Value> string)
-{
- return m_stringWrapper.toString(string->ToString());
-}
-
-QString QV8Engine::toString(v8::Handle<v8::String> string)
-{
- return m_stringWrapper.toString(string);
-}
-
-bool QV8Engine::isVariant(v8::Handle<v8::Value> value)
-{
- return m_variantWrapper.isVariant(value);
-}
-
-v8::Local<v8::Object> QV8Engine::qmlScope(QQmlContextData *ctxt, QObject *scope)
-{
- return m_contextWrapper.qmlScope(ctxt, scope);
-}
-
-bool QV8Engine::isQObject(v8::Handle<v8::Value> obj)
-{
- return obj->IsObject()?m_qobjectWrapper.isQObject(v8::Handle<v8::Object>::Cast(obj)):false;
-}
-
-QObject *QV8Engine::toQObject(v8::Handle<v8::Value> obj)
-{
- return obj->IsObject()?m_qobjectWrapper.toQObject(v8::Handle<v8::Object>::Cast(obj)):0;
-}
-
-v8::Handle<v8::Value> QV8Engine::newQObject(QObject *object)
-{
- return m_qobjectWrapper.newQObject(object);
-}
-
-v8::Handle<v8::Value> QV8Engine::newQObject(QObject *object, const ObjectOwnership ownership)
-{
- if (!object)
- return v8::Null();
-
- v8::Handle<v8::Value> result = newQObject(object);
- QQmlData *ddata = QQmlData::get(object, true);
- if (ownership == JavaScriptOwnership && ddata) {
- ddata->indestructible = false;
- ddata->explicitIndestructibleSet = true;
- }
- return result;
-}
-
-v8::Local<v8::String> QV8Engine::toString(const QString &string)
-{
- return m_stringWrapper.toString(string);
-}
-
-v8::Handle<v8::Value> QV8Engine::newValueType(QObject *object, int property, QQmlValueType *type)
-{
- return m_valueTypeWrapper.newValueType(object, property, type);
-}
-
-v8::Handle<v8::Value> QV8Engine::newValueType(const QVariant &value, QQmlValueType *type)
-{
- return m_valueTypeWrapper.newValueType(value, type);
-}
-
-bool QV8Engine::isValueType(v8::Handle<v8::Value> obj) const
-{
- return obj->IsObject()?m_valueTypeWrapper.isValueType(v8::Handle<v8::Object>::Cast(obj)):false;
-}
-
-QVariant QV8Engine::toValueType(v8::Handle<v8::Value> obj)
-{
- return obj->IsObject()?m_valueTypeWrapper.toVariant(v8::Handle<v8::Object>::Cast(obj)):QVariant();
-}
-
-v8::Handle<v8::Value> QV8Engine::newSequence(int sequenceType, QObject *object, int property, bool *succeeded)
-{
- return m_sequenceWrapper.newSequence(sequenceType, object, property, succeeded);
-}
-
-v8::Handle<v8::String> QV8Engine::bindingFlagKey() const
-{
- return m_bindingFlagKey;
-}
-
-// XXX Can this be made more optimal? It is called prior to resolving each and every
-// unqualified name in QV8ContextWrapper.
-bool QV8Engine::startsWithUpper(v8::Handle<v8::String> string)
-{
- v8::String::Value value(string);
- Q_ASSERT(*value != NULL);
- uint16_t c = **value;
- return (c >= 'A' && c <= 'Z') ||
- (c > 127 && QChar::category(c) == QChar::Letter_Uppercase);
-}
-
QV8Engine::Deletable *QV8Engine::extensionData(int index) const
{
if (index < m_extensionData.count())
@@ -646,6 +305,6 @@ QV8Engine::Deletable *QV8Engine::extensionData(int index) const
QT_END_NAMESPACE
-Q_DECLARE_METATYPE(QQmlV8Handle)
+Q_DECLARE_METATYPE(QQmlV4Handle)
#endif // QQMLV8ENGINE_P_H