Changeset 55426 in webkit


Ignore:
Timestamp:
Mar 2, 2010 1:20:20 PM (14 years ago)
Author:
eric@webkit.org
Message:

2010-03-02 Jedrzej Nowacki <jedrzej.nowacki@nokia.com>

Reviewed by Simon Hausmann.

Introduce a new class; QScriptString.

The QScriptString class should act as a handle to "interned"
strings in a QScriptEngine.

[Qt] QtScript should provide QScriptString
https://bugs.webkit.org/show_bug.cgi?id=34843

  • qt/api/QtScript.pro:
  • qt/api/qscriptengine.cpp: (QScriptEngine::toStringHandle):
  • qt/api/qscriptengine.h:
  • qt/api/qscriptengine_p.h: (QScriptEnginePrivate::toStringHandle):
  • qt/api/qscriptstring.cpp: Added. (QScriptString::QScriptString): (QScriptString::~QScriptString): (QScriptString::operator=): (QScriptString::isValid): (QScriptString::operator==): (QScriptString::operator!=): (QScriptString::toArrayIndex): (QScriptString::toString): (QScriptString::operator QString): (qHash):
  • qt/api/qscriptstring.h: Added.
  • qt/api/qscriptstring_p.h: Added. (QScriptStringPrivate::QScriptStringPrivate): (QScriptStringPrivate::~QScriptStringPrivate): (QScriptStringPrivate::get): (QScriptStringPrivate::isValid): (QScriptStringPrivate::operator==): (QScriptStringPrivate::operator!=): (QScriptStringPrivate::toArrayIndex): (QScriptStringPrivate::toString): (QScriptStringPrivate::id):
  • qt/tests/qscriptstring/qscriptstring.pro: Added.
  • qt/tests/qscriptstring/tst_qscriptstring.cpp: Added. (tst_QScriptString::tst_QScriptString): (tst_QScriptString::~tst_QScriptString): (tst_QScriptString::test): (tst_QScriptString::hash): (tst_QScriptString::toArrayIndex_data): (tst_QScriptString::toArrayIndex):
  • qt/tests/tests.pro:
Location:
trunk/JavaScriptCore
Files:
5 added
7 edited
1 copied

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/ChangeLog

    r55403 r55426  
     12010-03-02  Jedrzej Nowacki  <jedrzej.nowacki@nokia.com>
     2
     3        Reviewed by Simon Hausmann.
     4
     5        Introduce a new class; QScriptString.
     6
     7        The QScriptString class should act as a handle to "interned"
     8        strings in a QScriptEngine.
     9
     10        [Qt] QtScript should provide QScriptString
     11        https://bugs.webkit.org/show_bug.cgi?id=34843
     12
     13        * qt/api/QtScript.pro:
     14        * qt/api/qscriptengine.cpp:
     15        (QScriptEngine::toStringHandle):
     16        * qt/api/qscriptengine.h:
     17        * qt/api/qscriptengine_p.h:
     18        (QScriptEnginePrivate::toStringHandle):
     19        * qt/api/qscriptstring.cpp: Added.
     20        (QScriptString::QScriptString):
     21        (QScriptString::~QScriptString):
     22        (QScriptString::operator=):
     23        (QScriptString::isValid):
     24        (QScriptString::operator==):
     25        (QScriptString::operator!=):
     26        (QScriptString::toArrayIndex):
     27        (QScriptString::toString):
     28        (QScriptString::operator QString):
     29        (qHash):
     30        * qt/api/qscriptstring.h: Added.
     31        * qt/api/qscriptstring_p.h: Added.
     32        (QScriptStringPrivate::QScriptStringPrivate):
     33        (QScriptStringPrivate::~QScriptStringPrivate):
     34        (QScriptStringPrivate::get):
     35        (QScriptStringPrivate::isValid):
     36        (QScriptStringPrivate::operator==):
     37        (QScriptStringPrivate::operator!=):
     38        (QScriptStringPrivate::toArrayIndex):
     39        (QScriptStringPrivate::toString):
     40        (QScriptStringPrivate::id):
     41        * qt/tests/qscriptstring/qscriptstring.pro: Added.
     42        * qt/tests/qscriptstring/tst_qscriptstring.cpp: Added.
     43        (tst_QScriptString::tst_QScriptString):
     44        (tst_QScriptString::~tst_QScriptString):
     45        (tst_QScriptString::test):
     46        (tst_QScriptString::hash):
     47        (tst_QScriptString::toArrayIndex_data):
     48        (tst_QScriptString::toArrayIndex):
     49        * qt/tests/tests.pro:
     50
    1512010-03-02  Oliver Hunt  <oliver@apple.com>
    252
  • trunk/JavaScriptCore/qt/api/QtScript.pro

    r53853 r55426  
    2222            $$PWD/qscriptengine_p.cpp \
    2323            $$PWD/qscriptvalue.cpp \
     24            $$PWD/qscriptstring.cpp \
    2425
    2526HEADERS +=  $$PWD/qtscriptglobal.h \
     
    2930            $$PWD/qscriptvalue_p.h \
    3031            $$PWD/qscriptconverter_p.h \
     32            $$PWD/qscriptstring.h \
     33            $$PWD/qscriptstring_p.h \
    3134
    3235
  • trunk/JavaScriptCore/qt/api/qscriptconverter_p.h

    r53850 r55426  
    2222
    2323#include <JavaScriptCore/JavaScript.h>
     24#include <QtCore/qnumeric.h>
    2425#include <QtCore/qstring.h>
    2526
     
    3435class QScriptConverter {
    3536public:
     37    static quint32 toArrayIndex(const JSStringRef jsstring)
     38    {
     39        // FIXME this function should be exported by JSC C API.
     40        QString qstring = toString(jsstring);
     41
     42        bool ok;
     43        quint32 idx = qstring.toUInt(&ok);
     44        if (!ok || toString(idx) != qstring)
     45            idx = 0xffffffff;
     46
     47        return idx;
     48    }
     49
    3650    static QString toString(const JSStringRef str)
    3751    {
  • trunk/JavaScriptCore/qt/api/qscriptengine.cpp

    r54580 r55426  
    8989
    9090/*!
     91  Returns a handle that represents the given string, \a str.
     92
     93  QScriptString can be used to quickly look up properties, and
     94  compare property names, of script objects.
     95
     96  \sa QScriptValue::property()
     97*/
     98QScriptString QScriptEngine::toStringHandle(const QString& str)
     99{
     100    return QScriptStringPrivate::get(d_ptr->toStringHandle(str));
     101}
     102
     103/*!
    91104  Returns a QScriptValue of the primitive type Null.
    92105
  • trunk/JavaScriptCore/qt/api/qscriptengine.h

    r54580 r55426  
    2121#define qscriptengine_h
    2222
     23#include "qscriptstring.h"
    2324#include <QtCore/qobject.h>
    2425#include <QtCore/qshareddata.h>
     
    3940    void collectGarbage();
    4041
     42    QScriptString toStringHandle(const QString& str);
     43
    4144    QScriptValue nullValue();
    4245    QScriptValue undefinedValue();
  • trunk/JavaScriptCore/qt/api/qscriptengine_p.h

    r53850 r55426  
    2323#include "qscriptconverter_p.h"
    2424#include "qscriptengine.h"
     25#include "qscriptstring_p.h"
    2526#include "qscriptvalue.h"
    2627#include <JavaScriptCore/JavaScript.h>
     
    4748    inline JSValueRef makeJSValue(bool number) const;
    4849    inline JSValueRef makeJSValue(QScriptValue::SpecialValue value) const;
     50
     51    inline QScriptStringPrivate* toStringHandle(const QString& str) const;
    4952
    5053    inline JSGlobalContextRef context() const;
     
    9194}
    9295
     96QScriptStringPrivate* QScriptEnginePrivate::toStringHandle(const QString& str) const
     97{
     98    return new QScriptStringPrivate(str);
     99}
     100
    93101JSGlobalContextRef QScriptEnginePrivate::context() const
    94102{
  • trunk/JavaScriptCore/qt/api/qscriptstring.h

    r55424 r55426  
    11/*
    2     Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies)
     2    Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
    33
    44    This library is free software; you can redistribute it and/or
     
    1818*/
    1919
    20 #ifndef qscriptengine_h
    21 #define qscriptengine_h
     20#ifndef qscriptstring_h
     21#define qscriptstring_h
    2222
    23 #include <QtCore/qobject.h>
     23#include "qtscriptglobal.h"
    2424#include <QtCore/qshareddata.h>
    2525#include <QtCore/qstring.h>
    2626
    27 class QScriptValue;
    28 class QScriptEnginePrivate;
     27class QScriptStringPrivate;
     28typedef QExplicitlySharedDataPointer<QScriptStringPrivate> QScriptStringPtr;
    2929
    30 // Internal typedef
    31 typedef QExplicitlySharedDataPointer<QScriptEnginePrivate> QScriptEnginePtr;
     30class Q_JAVASCRIPT_EXPORT QScriptString {
     31public:
     32    QScriptString();
     33    QScriptString(const QScriptString& other);
     34    ~QScriptString();
    3235
    33 class QScriptEngine : public QObject {
    34 public:
    35     QScriptEngine();
    36     ~QScriptEngine();
     36    QScriptString& operator=(const QScriptString& other);
    3737
    38     QScriptValue evaluate(const QString& program, const QString& fileName = QString(), int lineNumber = 1);
    39     void collectGarbage();
     38    bool isValid() const;
    4039
    41     QScriptValue nullValue();
    42     QScriptValue undefinedValue();
     40    bool operator==(const QScriptString& other) const;
     41    bool operator!=(const QScriptString& other) const;
     42
     43    quint32 toArrayIndex(bool* ok = 0) const;
     44
     45    QString toString() const;
     46    operator QString() const;
     47
    4348private:
    44     friend class QScriptEnginePrivate;
     49    QScriptString(QScriptStringPrivate* d);
    4550
    46     QScriptEnginePtr d_ptr;
     51    QScriptStringPtr d_ptr;
     52
     53    friend class QScriptStringPrivate;
    4754};
    4855
    49 #endif
     56uint qHash(const QScriptString& key);
     57
     58#endif // qscriptstring_h
  • trunk/JavaScriptCore/qt/tests/tests.pro

    r53850 r55426  
    11TEMPLATE = subdirs
    22SUBDIRS =   qscriptengine \
    3             qscriptvalue
     3            qscriptvalue \
     4            qscriptstring
Note: See TracChangeset for help on using the changeset viewer.