/****************************************************************************
**
** Copyright (C) 2015 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the QtScript module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL-ONLY$
** GNU Lesser General Public License Usage
** This file may be used under the terms of the GNU Lesser
** General Public License version 2.1 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU Lesser General Public License version 2.1 requirements
** 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
** us via http://www.qt.io/contact-us/.
**
** $QT_END_LICENSE$
**
****************************************************************************/

#ifndef QSCRIPTVARIANT_P_H
#define QSCRIPTVARIANT_P_H

//
//  W A R N I N G
//  -------------
//
// This file is not part of the Qt API.  It exists purely as an
// implementation detail.  This header file may change from version to
// version without notice, or even be removed.
//
// We mean it.
//

#include <QtCore/qvariant.h>

#include "qscriptobject_p.h"

QT_BEGIN_NAMESPACE

namespace QScript
{

class QVariantDelegate : public QScriptObjectDelegate
{
public:
    QVariantDelegate(const QVariant &value);
    ~QVariantDelegate();

    virtual bool compareToObject(QScriptObject*, JSC::ExecState*, JSC::JSObject*);

    QVariant &value();
    void setValue(const QVariant &value);

    Type type() const;

private:
    QVariant m_value;
};

class QVariantPrototype : public QScriptObject
{
public:
    QVariantPrototype(JSC::ExecState*, WTF::PassRefPtr<JSC::Structure>,
                      JSC::Structure* prototypeFunctionStructure);
};

} // namespace QScript

QT_END_NAMESPACE

#endif
