Remove "All rights reserved" line from license headers.
[profile/ivi/qtdeclarative.git] / src / declarative / qml / v8 / qjsvalue_p.h
index 7b2a001..356e191 100644 (file)
@@ -1,8 +1,7 @@
 /****************************************************************************
 **
-** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
+** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/
 **
 ** This file is part of the QtScript module of the Qt Toolkit.
 **
@@ -16,7 +15,8 @@
 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
 **
 ** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
+** us via http://www.qt-project.org/.
+**
 ** $QT_END_LICENSE$
 **
 ****************************************************************************/
 #include <QtCore/qvarlengtharray.h>
 #include <qdebug.h>
 
-#include "qscripttools_p.h"
+#include <private/qintrusivelist_p.h>
 #include "qscriptshareddata_p.h"
 #include "qjsvalue.h"
 
 QT_BEGIN_NAMESPACE
 
+class QV8Engine;
+
 /*!
   \internal
   \class QJSValuePrivate
 */
 class QJSValuePrivate
         : public QSharedData
-        , public QScriptLinkedNode
 {
 public:
     inline QJSValuePrivate();
@@ -79,8 +80,7 @@ public:
     inline QJSValuePrivate(QV8Engine *engine, const QString& value);
     inline QJSValuePrivate(QV8Engine *engine, QJSValue::SpecialValue value);
     inline QJSValuePrivate(QV8Engine *engine, v8::Handle<v8::Value>);
-    inline void reinitialize();
-    inline void reinitialize(QV8Engine *engine, v8::Handle<v8::Value> value);
+    inline void invalidate();
 
     inline bool toBool() const;
     inline double toNumber() const;
@@ -130,15 +130,17 @@ public:
     template<typename T>
     inline QScriptPassPointer<QJSValuePrivate> property(T name) const;
     inline bool deleteProperty(const QString& name);
+    inline bool hasProperty(const QString &name) const;
+    inline bool hasOwnProperty(const QString &name) const;
     inline QJSValue::PropertyFlags propertyFlags(const QString& name) const;
     inline QJSValue::PropertyFlags propertyFlags(v8::Handle<v8::String> name) const;
 
     inline QScriptPassPointer<QJSValuePrivate> call(QJSValuePrivate* thisObject, const QJSValueList& args);
     inline QScriptPassPointer<QJSValuePrivate> call(QJSValuePrivate* thisObject, const QJSValue& arguments);
     inline QScriptPassPointer<QJSValuePrivate> call(QJSValuePrivate* thisObject, int argc, v8::Handle< v8::Value >* argv);
-    inline QScriptPassPointer<QJSValuePrivate> construct(int argc, v8::Handle<v8::Value> *argv);
-    inline QScriptPassPointer<QJSValuePrivate> construct(const QJSValueList& args);
-    inline QScriptPassPointer<QJSValuePrivate> construct(const QJSValue& arguments);
+    inline QScriptPassPointer<QJSValuePrivate> callAsConstructor(int argc, v8::Handle<v8::Value> *argv);
+    inline QScriptPassPointer<QJSValuePrivate> callAsConstructor(const QJSValueList& args);
+    inline QScriptPassPointer<QJSValuePrivate> callAsConstructor(const QJSValue& arguments);
 
     inline bool assignEngine(QV8Engine *engine);
     inline QV8Engine *engine() const;
@@ -147,6 +149,7 @@ public:
     inline operator v8::Handle<v8::Object>() const;
     inline v8::Handle<v8::Value> asV8Value(QV8Engine *engine);
 private:
+    QIntrusiveListNode m_node;
     QV8Engine *m_engine;
 
     // Please, update class documentation when you change the enum.
@@ -182,32 +185,10 @@ private:
     inline bool isNumberBased() const;
     inline bool isStringBased() const;
     inline bool prepareArgumentsForCall(v8::Handle<v8::Value> argv[], const QJSValueList& arguments) const;
-};
 
-// This template is used indirectly by the Q_GLOBAL_STATIC macro below
-template<>
-class QGlobalStaticDeleter<QJSValuePrivate>
-{
-public:
-    QGlobalStatic<QJSValuePrivate> &globalStatic;
-    QGlobalStaticDeleter(QGlobalStatic<QJSValuePrivate> &_globalStatic)
-        : globalStatic(_globalStatic)
-    {
-        globalStatic.pointer->ref.ref();
-    }
-
-    inline ~QGlobalStaticDeleter()
-    {
-        if (!globalStatic.pointer->ref.deref()) { // Logic copy & paste from SharedDataPointer
-            delete globalStatic.pointer;
-        }
-        globalStatic.pointer = 0;
-        globalStatic.destroyed = true;
-    }
+    friend class QV8Engine;
 };
 
-Q_GLOBAL_STATIC(QJSValuePrivate, InvalidValue)
-
 QT_END_NAMESPACE
 
 #endif