summaryrefslogtreecommitdiffstats
path: root/doc/src/snippets/process/process.cpp
blob: ba74b608a8b67b0d17eaa0d7ee433b499c712656 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
/****************************************************************************
**
** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
** Contact: Nokia Corporation (qt-info@nokia.com)
**
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** No Commercial Usage
** This file contains pre-release code and may not be distributed.
** You may use this file in accordance with the terms and conditions
** contained in the either Technology Preview License Agreement or the
** Beta Release License Agreement.
**
** GNU Lesser General Public License Usage
** Alternatively, 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.
**
** In addition, as a special exception, Nokia gives you certain
** additional rights. These rights are described in the Nokia Qt LGPL
** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
** package.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3.0 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file.  Please review the following information to
** ensure the GNU General Public License version 3.0 requirements will be
** met: http://www.gnu.org/copyleft/gpl.html.
**
** If you are unsure which license is appropriate for your use, please
** contact the sales department at http://www.qtsoftware.com/contact.
** $QT_END_LICENSE$
**
****************************************************************************/

#include <QProcess>

bool zip()
{
//! [0]
    QProcess gzip;
    gzip.start("gzip", QStringList() << "-c");
    if (!gzip.waitForStarted())
        return false;

    gzip.write("Qt rocks!");
    gzip.closeWriteChannel();

    if (!gzip.waitForFinished())
        return false;

    QByteArray result = gzip.readAll();
//! [0]

    gzip.start("gzip", QStringList() << "-d" << "-c");
    gzip.write(result);
    gzip.closeWriteChannel();

    if (!gzip.waitForFinished())
        return false;

    qDebug("Result: %s", gzip.readAll().data());
    return true;
}


int main()
{
    zip();
    return 0;
}
nts.contains("peek(80); - return contents.contains(" Date: Mon, 8 Jun 2009 16:52:18 +0200 Subject: More entries for the change log --- dist/changes-4.5.2 | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/dist/changes-4.5.2 b/dist/changes-4.5.2 index 6049a4d..c2dda0f 100644 --- a/dist/changes-4.5.2 +++ b/dist/changes-4.5.2 @@ -82,6 +82,12 @@ Third party components * [252068] QFileDialog with QSortFilterProxyModel crashes * [254490] QFileDialog selectFile doesn't clear the selection if we call it several times. +- QGtkStyle + * [250731] Fixed a build issue with glib version lower than 2.3.2 + * [254342] Fixed a potential crash when system theme changes occur. + * [254614] Fixed an assert or warning related to GtkEntry focus handling + reported with certain versions of Gtk+. + - QMacStyle * [253339] Don't draw arrows on toolbuttons that have a menu and text only. * [252301] Ensure that small and mini spin boxes are drawn correctly. @@ -213,6 +219,10 @@ Third party components * [248848] Fixed an issue that would cause QIcon::pixmap() to reparse the SVG file, even though there was a cached pixmap for that size available. +- QToolButton + * [252554] Fixed a problem where text labels would be partially clipped + when using Qt::ToolButtonTextUnderIcon. + **************************************************************************** * Database Drivers * **************************************************************************** @@ -240,6 +250,8 @@ legacy freetype headers. BGR color layout. [196152] Fixed a problem with QPixmap::toImage() on big endian systems that would cause the R and B channels to be swapped for 32 bit pixmaps. +[251928] Made the file dialog show suffixes if no filter name is provided +when using the GTK+ file dialog. Qt for Windows -------------- -- cgit v0.12 From 79e2bc2bce3e5faa05872f662ab231c8b42d2612 Mon Sep 17 00:00:00 2001 From: Anders Bakken Date: Mon, 8 Jun 2009 10:01:26 -0700 Subject: Make the directfb plugin compile against 0.9 Not sure to what extent it actually works but atleast it compiles now. - A couple of image formats doesn't exist in 0.9 - IDirectFBSurface::ReleaseSource doesn't exist in 0.9 - IDirectFBWindow::SetBounds doesn't exist in 0.9 Reviewed-by: Donald --- .../gfxdrivers/directfb/qdirectfbpaintengine.cpp | 4 ++++ src/plugins/gfxdrivers/directfb/qdirectfbpixmap.cpp | 7 ++++++- src/plugins/gfxdrivers/directfb/qdirectfbscreen.cpp | 14 ++++++++++++++ src/plugins/gfxdrivers/directfb/qdirectfbscreen.h | 2 ++ .../gfxdrivers/directfb/qdirectfbwindowsurface.cpp | 17 ++++++++++++++--- 5 files changed, 40 insertions(+), 4 deletions(-) diff --git a/src/plugins/gfxdrivers/directfb/qdirectfbpaintengine.cpp b/src/plugins/gfxdrivers/directfb/qdirectfbpaintengine.cpp index 2fb533a..5be4d47 100644 --- a/src/plugins/gfxdrivers/directfb/qdirectfbpaintengine.cpp +++ b/src/plugins/gfxdrivers/directfb/qdirectfbpaintengine.cpp @@ -532,7 +532,9 @@ void QDirectFBPaintEngine::drawImage(const QRectF &r, const QImage &image, d->prepareForBlit(QDirectFBScreen::hasAlpha(imgSurface)); d->blit(r, imgSurface, sr); if (release) { +#if (Q_DIRECTFB_VERSION >= 0x010000) imgSurface->ReleaseSource(imgSurface); +#endif imgSurface->Release(imgSurface); } #endif @@ -897,7 +899,9 @@ void QDirectFBPaintEnginePrivate::end() { lockedMemory = 0; dfbDevice = 0; +#if (Q_DIRECTFB_VERSION >= 0x010000) surface->ReleaseSource(surface); +#endif surface->SetClip(surface, NULL); surface = 0; } diff --git a/src/plugins/gfxdrivers/directfb/qdirectfbpixmap.cpp b/src/plugins/gfxdrivers/directfb/qdirectfbpixmap.cpp index 18754f5..8184073 100644 --- a/src/plugins/gfxdrivers/directfb/qdirectfbpixmap.cpp +++ b/src/plugins/gfxdrivers/directfb/qdirectfbpixmap.cpp @@ -225,7 +225,9 @@ void QDirectFBPixmapData::copy(const QPixmapData *data, const QRect &rect) const DFBRectangle blitRect = { rect.x(), rect.y(), rect.width(), rect.height() }; DFBResult result = dfbSurface->Blit(dfbSurface, src, &blitRect, 0, 0); +#if (Q_DIRECTFB_VERSION >= 0x010000) dfbSurface->ReleaseSource(dfbSurface); +#endif if (result != DFB_OK) { DirectFBError("QDirectFBPixmapData::copy()", result); invalidate(); @@ -316,8 +318,9 @@ QPixmap QDirectFBPixmapData::transformed(const QTransform &transform, const DFBRectangle destRect = { 0, 0, size.width(), size.height() }; data->dfbSurface->StretchBlit(data->dfbSurface, dfbSurface, 0, &destRect); +#if (Q_DIRECTFB_VERSION >= 0x010000) data->dfbSurface->ReleaseSource(data->dfbSurface); - +#endif return QPixmap(data); } @@ -336,7 +339,9 @@ QImage QDirectFBPixmapData::toImage() const imgSurface->SetBlittingFlags(imgSurface, DSBLIT_NOFX); } imgSurface->Blit(imgSurface, dfbSurface, 0, 0, 0); +#if (Q_DIRECTFB_VERSION >= 0x010000) imgSurface->ReleaseSource(imgSurface); +#endif imgSurface->Release(imgSurface); return ret; } diff --git a/src/plugins/gfxdrivers/directfb/qdirectfbscreen.cpp b/src/plugins/gfxdrivers/directfb/qdirectfbscreen.cpp index 9e35a66..6a0c665 100644 --- a/src/plugins/gfxdrivers/directfb/qdirectfbscreen.cpp +++ b/src/plugins/gfxdrivers/directfb/qdirectfbscreen.cpp @@ -196,7 +196,9 @@ IDirectFBSurface *QDirectFBScreen::copyDFBSurface(IDirectFBSurface *src, surface->SetBlittingFlags(surface, flags); surface->Blit(surface, src, 0, 0, 0); +#if (Q_DIRECTFB_VERSION >= 0x010000) surface->ReleaseSource(surface); +#endif return surface; } @@ -317,7 +319,9 @@ IDirectFBSurface *QDirectFBScreen::copyToDFBSurface(const QImage &img, DFBResult result = dfbSurface->Blit(dfbSurface, imgSurface, 0, 0, 0); if (result != DFB_OK) DirectFBError("QDirectFBScreen::copyToDFBSurface()", result); +#if (Q_DIRECTFB_VERSION >= 0x010000) dfbSurface->ReleaseSource(dfbSurface); +#endif imgSurface->Release(imgSurface); #else // QT_NO_DIRECTFB_PREALLOCATED Q_ASSERT(image.format() == pixmapFormat); @@ -388,10 +392,12 @@ DFBSurfacePixelFormat QDirectFBScreen::getSurfacePixelFormat(QImage::Format form #endif case QImage::Format_RGB16: return DSPF_RGB16; +#if (Q_DIRECTFB_VERSION >= 0x010000) case QImage::Format_ARGB6666_Premultiplied: return DSPF_ARGB6666; case QImage::Format_RGB666: return DSPF_RGB18; +#endif case QImage::Format_RGB32: return DSPF_RGB32; case QImage::Format_ARGB32_Premultiplied: @@ -423,10 +429,12 @@ QImage::Format QDirectFBScreen::getImageFormat(IDirectFBSurface *surface) return QImage::Format_RGB555; case DSPF_RGB16: return QImage::Format_RGB16; +#if (Q_DIRECTFB_VERSION >= 0x010000) case DSPF_ARGB6666: return QImage::Format_ARGB6666_Premultiplied; case DSPF_RGB18: return QImage::Format_RGB666; +#endif case DSPF_RGB32: return QImage::Format_RGB32; case DSPF_ARGB: { @@ -780,7 +788,9 @@ static const FlagDescription blitDescriptions[] = { { " DSBLIT_DEINTERLACE", DSBLIT_DEINTERLACE }, { " DSBLIT_SRC_PREMULTCOLOR", DSBLIT_SRC_PREMULTCOLOR }, { " DSBLIT_XOR", DSBLIT_XOR }, +#if (Q_DIRECTFB_VERSION >= 0x010000) { " DSBLIT_INDEX_TRANSLATION", DSBLIT_INDEX_TRANSLATION }, +#endif { 0, 0 } }; @@ -1223,7 +1233,9 @@ void QDirectFBScreen::compose(const QRegion ®ion) blit(surface->image(), offset, r); } } +#if (Q_DIRECTFB_VERSION >= 0x010000) d_ptr->dfbSurface->ReleaseSource(d_ptr->dfbSurface); +#endif } // Normally, when using DirectFB to compose the windows (I.e. when @@ -1271,7 +1283,9 @@ void QDirectFBScreen::blit(const QImage &img, const QPoint &topLeft, return; } blit(src, topLeft, reg); +#if (Q_DIRECTFB_VERSION >= 0x010000) d_ptr->dfbSurface->ReleaseSource(d_ptr->dfbSurface); +#endif src->Release(src); } diff --git a/src/plugins/gfxdrivers/directfb/qdirectfbscreen.h b/src/plugins/gfxdrivers/directfb/qdirectfbscreen.h index 84199a2..440c472 100644 --- a/src/plugins/gfxdrivers/directfb/qdirectfbscreen.h +++ b/src/plugins/gfxdrivers/directfb/qdirectfbscreen.h @@ -178,10 +178,12 @@ inline bool QDirectFBScreen::hasAlpha(DFBSurfacePixelFormat format) case DSPF_ARGB2554: case DSPF_ARGB4444: case DSPF_AYUV: +#if (Q_DIRECTFB_VERSION >= 0x010000) case DSPF_A4: case DSPF_ARGB1666: case DSPF_ARGB6666: case DSPF_LUT2: +#endif return true; default: return false; diff --git a/src/plugins/gfxdrivers/directfb/qdirectfbwindowsurface.cpp b/src/plugins/gfxdrivers/directfb/qdirectfbwindowsurface.cpp index 330eb88..442f8dd 100644 --- a/src/plugins/gfxdrivers/directfb/qdirectfbwindowsurface.cpp +++ b/src/plugins/gfxdrivers/directfb/qdirectfbwindowsurface.cpp @@ -188,14 +188,25 @@ void QDirectFBWindowSurface::setGeometry(const QRect &rect, const QRegion &mask) if (!dfbWindow) createWindow(); - if (isResize && isMove) +#if (Q_DIRECTFB_VERSION >= 0x010000) + if (isResize && isMove) { result = dfbWindow->SetBounds(dfbWindow, rect.x(), rect.y(), rect.width(), rect.height()); - else if (isResize) + } else if (isResize) { result = dfbWindow->Resize(dfbWindow, rect.width(), rect.height()); - else if (isMove) + } else if (isMove) { result = dfbWindow->MoveTo(dfbWindow, rect.x(), rect.y()); + } +#else + if (isResize) { + result = dfbWindow->Resize(dfbWindow, + rect.width(), rect.height()); + } + if (isMove) { + result = dfbWindow->MoveTo(dfbWindow, rect.x(), rect.y()); + } +#endif #endif } -- cgit v0.12 From 1d3729c3e1348940b5f39fb1581af4d4f336fcf0 Mon Sep 17 00:00:00 2001 From: Anders Bakken Date: Mon, 8 Jun 2009 21:10:27 -0700 Subject: Make DirectFB compile with 0.9.22 Some options were added for 0.9.23. This change adds some ifdefs so DFB 0.9.22 compiles Reviewed-by: TrustMe --- src/plugins/gfxdrivers/directfb/qdirectfbscreen.cpp | 9 ++++++--- src/plugins/gfxdrivers/directfb/qdirectfbscreen.h | 2 ++ 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/plugins/gfxdrivers/directfb/qdirectfbscreen.cpp b/src/plugins/gfxdrivers/directfb/qdirectfbscreen.cpp index 6a0c665..f694ed9 100644 --- a/src/plugins/gfxdrivers/directfb/qdirectfbscreen.cpp +++ b/src/plugins/gfxdrivers/directfb/qdirectfbscreen.cpp @@ -786,8 +786,10 @@ static const FlagDescription blitDescriptions[] = { { " DSBLIT_DST_PREMULTIPLY", DSBLIT_DST_PREMULTIPLY }, { " DSBLIT_DEMULTIPLY", DSBLIT_DEMULTIPLY }, { " DSBLIT_DEINTERLACE", DSBLIT_DEINTERLACE }, +#if (Q_DIRECTFB_VERSION >= 0x000923) { " DSBLIT_SRC_PREMULTCOLOR", DSBLIT_SRC_PREMULTCOLOR }, { " DSBLIT_XOR", DSBLIT_XOR }, +#endif #if (Q_DIRECTFB_VERSION >= 0x010000) { " DSBLIT_INDEX_TRANSLATION", DSBLIT_INDEX_TRANSLATION }, #endif @@ -808,6 +810,7 @@ static const FlagDescription drawDescriptions[] = { +#if (Q_DIRECTFB_VERSION >= 0x000923) static const QByteArray flagDescriptions(uint mask, const FlagDescription *flags) { #ifdef QT_NO_DEBUG @@ -828,9 +831,6 @@ static const QByteArray flagDescriptions(uint mask, const FlagDescription *flags return (QLatin1Char(' ') + list.join(QLatin1String("|"))).toLatin1(); #endif } - - - static void printDirectFBInfo(IDirectFB *fb, IDirectFBSurface *primarySurface) { DFBResult result; @@ -855,6 +855,7 @@ static void printDirectFBInfo(IDirectFB *fb, IDirectFBSurface *primarySurface) dev.drawing_flags, ::flagDescriptions(dev.drawing_flags, drawDescriptions).constData(), (dev.video_memory >> 10)); } +#endif static inline bool setIntOption(const QStringList &arguments, const QString &variable, int *value) { @@ -1049,8 +1050,10 @@ bool QDirectFBScreen::connect(const QString &displaySpec) setGraphicsSystem(d_ptr); +#if (Q_DIRECTFB_VERSION >= 0x000923) if (displayArgs.contains(QLatin1String("debug"), Qt::CaseInsensitive)) printDirectFBInfo(d_ptr->dfb, d_ptr->dfbSurface); +#endif return true; } diff --git a/src/plugins/gfxdrivers/directfb/qdirectfbscreen.h b/src/plugins/gfxdrivers/directfb/qdirectfbscreen.h index 440c472..c105590 100644 --- a/src/plugins/gfxdrivers/directfb/qdirectfbscreen.h +++ b/src/plugins/gfxdrivers/directfb/qdirectfbscreen.h @@ -177,7 +177,9 @@ inline bool QDirectFBScreen::hasAlpha(DFBSurfacePixelFormat format) case DSPF_A1: case DSPF_ARGB2554: case DSPF_ARGB4444: +#if (Q_DIRECTFB_VERSION >= 0x000923) case DSPF_AYUV: +#endif #if (Q_DIRECTFB_VERSION >= 0x010000) case DSPF_A4: case DSPF_ARGB1666: -- cgit v0.12 From d6d586d4b05f416d89fcaf59c863245f1cb7d9ae Mon Sep 17 00:00:00 2001 From: Rohan McGovern Date: Wed, 3 Jun 2009 15:46:02 +1000 Subject: Fixed tst_qmake failing to compile when QMAKE_CROSS_COMPILED is defined. --- tests/auto/qmake/tst_qmake.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/auto/qmake/tst_qmake.cpp b/tests/auto/qmake/tst_qmake.cpp index 1178c81..1ba81bd 100644 --- a/tests/auto/qmake/tst_qmake.cpp +++ b/tests/auto/qmake/tst_qmake.cpp @@ -39,13 +39,14 @@ ** ****************************************************************************/ +#include + #if !defined(QMAKE_CROSS_COMPILED) #include "testcompiler.h" #include #include -#include class tst_qmake : public QObject { -- cgit v0.12 From ebbfbe432671d899fb08ac8775e6e36d86f1c010 Mon Sep 17 00:00:00 2001 From: Rohan McGovern Date: Tue, 9 Jun 2009 14:21:34 +1000 Subject: Fixed crash in tst_qcombobox when Qt is built in debug mode. "QTableWidget::setModel() - Changing the model of the QTableWidget is not allowed." --- tests/auto/qcombobox/tst_qcombobox.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/auto/qcombobox/tst_qcombobox.cpp b/tests/auto/qcombobox/tst_qcombobox.cpp index 816b2e8..5321348 100644 --- a/tests/auto/qcombobox/tst_qcombobox.cpp +++ b/tests/auto/qcombobox/tst_qcombobox.cpp @@ -2197,8 +2197,8 @@ void tst_QComboBox::noScrollbar() { QTableWidget *table = new QTableWidget(2,2); QComboBox comboBox; - comboBox.setView(table); comboBox.setModel(table->model()); + comboBox.setView(table); comboBox.show(); QTest::qWait(100); comboBox.resize(200, comboBox.height()); -- cgit v0.12 From bbc0850742f4f926876dc55478ff74aaa121846b Mon Sep 17 00:00:00 2001 From: Rohan McGovern Date: Tue, 9 Jun 2009 15:57:48 +1000 Subject: Fixed intermittent failure of tst_selftests. Allow more variance for the benchlibtickcounter selftest. --- tests/auto/selftests/tst_selftests.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/auto/selftests/tst_selftests.cpp b/tests/auto/selftests/tst_selftests.cpp index 6776b12..bdbfda3 100644 --- a/tests/auto/selftests/tst_selftests.cpp +++ b/tests/auto/selftests/tst_selftests.cpp @@ -97,7 +97,7 @@ inline bool qCompare variance = 0.001; } else if (r1.unit == "ticks") { - variance = 0.0001; + variance = 0.001; } if (variance == 0.) { /* No variance allowed - compare whole string */ -- cgit v0.12 From 67b3981e249db9c7c570ff9f77a867ca4c8b0dca Mon Sep 17 00:00:00 2001 From: Bernhard Rosenkraenzer Date: Fri, 5 Jun 2009 12:18:11 +0200 Subject: Make it possible to compile Qt 4.5 SSL support with OpenSSL 1.0.0 (-beta2, but 1.0.0 final shouldn't be very different) Merge-request: 449 Reviewed-by: Thiago Macieira --- src/network/ssl/qsslcertificate.cpp | 4 ++-- src/network/ssl/qsslsocket_openssl.cpp | 7 +++++++ src/network/ssl/qsslsocket_openssl_p.h | 4 ++++ src/network/ssl/qsslsocket_openssl_symbols.cpp | 23 +++++++++++++++++++++++ src/network/ssl/qsslsocket_openssl_symbols_p.h | 23 +++++++++++++++++++++++ 5 files changed, 59 insertions(+), 2 deletions(-) diff --git a/src/network/ssl/qsslcertificate.cpp b/src/network/ssl/qsslcertificate.cpp index 7b554dc..ccb3f06 100644 --- a/src/network/ssl/qsslcertificate.cpp +++ b/src/network/ssl/qsslcertificate.cpp @@ -362,7 +362,7 @@ QMultiMap QSslCertificate::alternateSubje if (!d->x509) return result; - STACK *altNames = (STACK *)q_X509_get_ext_d2i(d->x509, NID_subject_alt_name, 0, 0); + STACK_OF(GENERAL_NAME) *altNames = (STACK_OF(GENERAL_NAME)*)q_X509_get_ext_d2i(d->x509, NID_subject_alt_name, 0, 0); if (altNames) { for (int i = 0; i < q_sk_GENERAL_NAME_num(altNames); ++i) { @@ -383,7 +383,7 @@ QMultiMap QSslCertificate::alternateSubje else if (genName->type == GEN_EMAIL) result.insert(QSsl::EmailEntry, altName); } - q_sk_free(altNames); + q_sk_free((STACK*)altNames); } return result; diff --git a/src/network/ssl/qsslsocket_openssl.cpp b/src/network/ssl/qsslsocket_openssl.cpp index cb101af..88e432e 100644 --- a/src/network/ssl/qsslsocket_openssl.cpp +++ b/src/network/ssl/qsslsocket_openssl.cpp @@ -888,7 +888,14 @@ QSslCipher QSslSocketBackendPrivate::sessionCipher() const { if (!ssl || !ctx) return QSslCipher(); +#if OPENSSL_VERSION_NUMBER >= 0x10000000L + // FIXME This is fairly evil, but needed to keep source level compatibility + // with the OpenSSL 0.9.x implementation at maximum -- some other functions + // don't take a const SSL_CIPHER* when they should + SSL_CIPHER *sessionCipher = const_cast(q_SSL_get_current_cipher(ssl)); +#else SSL_CIPHER *sessionCipher = q_SSL_get_current_cipher(ssl); +#endif return sessionCipher ? QSslCipher_from_SSL_CIPHER(sessionCipher) : QSslCipher(); } diff --git a/src/network/ssl/qsslsocket_openssl_p.h b/src/network/ssl/qsslsocket_openssl_p.h index b3be42a..feab1c2 100644 --- a/src/network/ssl/qsslsocket_openssl_p.h +++ b/src/network/ssl/qsslsocket_openssl_p.h @@ -78,6 +78,10 @@ #include #include +#if OPENSSL_VERSION_NUMBER >= 0x10000000L +typedef _STACK STACK; +#endif + QT_BEGIN_NAMESPACE class QSslSocketBackendPrivate : public QSslSocketPrivate diff --git a/src/network/ssl/qsslsocket_openssl_symbols.cpp b/src/network/ssl/qsslsocket_openssl_symbols.cpp index 42c09f5..feec0a7 100644 --- a/src/network/ssl/qsslsocket_openssl_symbols.cpp +++ b/src/network/ssl/qsslsocket_openssl_symbols.cpp @@ -144,7 +144,11 @@ DEFINEFUNC(int, RAND_status, void, DUMMYARG, return -1, return) DEFINEFUNC(void, RSA_free, RSA *a, a, return, DUMMYARG) DEFINEFUNC(void, sk_free, STACK *a, a, return, DUMMYARG) DEFINEFUNC(int, sk_num, STACK *a, a, return -1, return) +#if OPENSSL_VERSION_NUMBER >= 0x10000000L +DEFINEFUNC2(void *, sk_value, STACK *a, a, int b, b, return 0, return) +#else DEFINEFUNC2(char *, sk_value, STACK *a, a, int b, b, return 0, return) +#endif DEFINEFUNC(int, SSL_accept, SSL *a, a, return -1, return) DEFINEFUNC(int, SSL_clear, SSL *a, a, return -1, return) DEFINEFUNC3(char *, SSL_CIPHER_description, SSL_CIPHER *a, a, char *b, b, int c, c, return 0, return) @@ -157,7 +161,11 @@ DEFINEFUNC(int, SSL_CTX_check_private_key, SSL_CTX *a, a, return -1, return) #endif DEFINEFUNC4(long, SSL_CTX_ctrl, SSL_CTX *a, a, int b, b, long c, c, void *d, d, return -1, return) DEFINEFUNC(void, SSL_CTX_free, SSL_CTX *a, a, return, DUMMYARG) +#if OPENSSL_VERSION_NUMBER >= 0x10000000L +DEFINEFUNC(SSL_CTX *, SSL_CTX_new, const SSL_METHOD *a, a, return 0, return) +#else DEFINEFUNC(SSL_CTX *, SSL_CTX_new, SSL_METHOD *a, a, return 0, return) +#endif DEFINEFUNC2(int, SSL_CTX_set_cipher_list, SSL_CTX *a, a, const char *b, b, return -1, return) DEFINEFUNC(int, SSL_CTX_set_default_verify_paths, SSL_CTX *a, a, return -1, return) DEFINEFUNC3(void, SSL_CTX_set_verify, SSL_CTX *a, a, int b, b, int (*c)(int, X509_STORE_CTX *), c, return, DUMMYARG) @@ -174,7 +182,11 @@ DEFINEFUNC(STACK_OF(SSL_CIPHER) *, SSL_get_ciphers, const SSL *a, a, return 0, r #else DEFINEFUNC(STACK_OF(SSL_CIPHER) *, SSL_get_ciphers, SSL *a, a, return 0, return) #endif +#if OPENSSL_VERSION_NUMBER >= 0x10000000L +DEFINEFUNC(const SSL_CIPHER *, SSL_get_current_cipher, SSL *a, a, return 0, return) +#else DEFINEFUNC(SSL_CIPHER *, SSL_get_current_cipher, SSL *a, a, return 0, return) +#endif DEFINEFUNC2(int, SSL_get_error, SSL *a, a, int b, b, return -1, return) DEFINEFUNC(STACK_OF(X509) *, SSL_get_peer_cert_chain, SSL *a, a, return 0, return) DEFINEFUNC(X509 *, SSL_get_peer_certificate, SSL *a, a, return 0, return) @@ -192,6 +204,16 @@ DEFINEFUNC3(void, SSL_set_bio, SSL *a, a, BIO *b, b, BIO *c, c, return, DUMMYARG DEFINEFUNC(void, SSL_set_accept_state, SSL *a, a, return, DUMMYARG) DEFINEFUNC(void, SSL_set_connect_state, SSL *a, a, return, DUMMYARG) DEFINEFUNC(int, SSL_shutdown, SSL *a, a, return -1, return) +#if OPENSSL_VERSION_NUMBER >= 0x10000000L +DEFINEFUNC(const SSL_METHOD *, SSLv2_client_method, DUMMYARG, DUMMYARG, return 0, return) +DEFINEFUNC(const SSL_METHOD *, SSLv3_client_method, DUMMYARG, DUMMYARG, return 0, return) +DEFINEFUNC(const SSL_METHOD *, SSLv23_client_method, DUMMYARG, DUMMYARG, return 0, return) +DEFINEFUNC(const SSL_METHOD *, TLSv1_client_method, DUMMYARG, DUMMYARG, return 0, return) +DEFINEFUNC(const SSL_METHOD *, SSLv2_server_method, DUMMYARG, DUMMYARG, return 0, return) +DEFINEFUNC(const SSL_METHOD *, SSLv3_server_method, DUMMYARG, DUMMYARG, return 0, return) +DEFINEFUNC(const SSL_METHOD *, SSLv23_server_method, DUMMYARG, DUMMYARG, return 0, return) +DEFINEFUNC(const SSL_METHOD *, TLSv1_server_method, DUMMYARG, DUMMYARG, return 0, return) +#else DEFINEFUNC(SSL_METHOD *, SSLv2_client_method, DUMMYARG, DUMMYARG, return 0, return) DEFINEFUNC(SSL_METHOD *, SSLv3_client_method, DUMMYARG, DUMMYARG, return 0, return) DEFINEFUNC(SSL_METHOD *, SSLv23_client_method, DUMMYARG, DUMMYARG, return 0, return) @@ -200,6 +222,7 @@ DEFINEFUNC(SSL_METHOD *, SSLv2_server_method, DUMMYARG, DUMMYARG, return 0, retu DEFINEFUNC(SSL_METHOD *, SSLv3_server_method, DUMMYARG, DUMMYARG, return 0, return) DEFINEFUNC(SSL_METHOD *, SSLv23_server_method, DUMMYARG, DUMMYARG, return 0, return) DEFINEFUNC(SSL_METHOD *, TLSv1_server_method, DUMMYARG, DUMMYARG, return 0, return) +#endif DEFINEFUNC3(int, SSL_write, SSL *a, a, const void *b, b, int c, c, return -1, return) DEFINEFUNC2(int, X509_cmp, X509 *a, a, X509 *b, b, return -1, return) #ifndef SSLEAY_MACROS diff --git a/src/network/ssl/qsslsocket_openssl_symbols_p.h b/src/network/ssl/qsslsocket_openssl_symbols_p.h index c6ae91e..bf5cfbb 100644 --- a/src/network/ssl/qsslsocket_openssl_symbols_p.h +++ b/src/network/ssl/qsslsocket_openssl_symbols_p.h @@ -256,7 +256,11 @@ int q_RAND_status(); void q_RSA_free(RSA *a); void q_sk_free(STACK *a); int q_sk_num(STACK *a); +#if OPENSSL_VERSION_NUMBER >= 0x10000000L +void * q_sk_value(STACK *a, int b); +#else char * q_sk_value(STACK *a, int b); +#endif int q_SSL_accept(SSL *a); int q_SSL_clear(SSL *a); char *q_SSL_CIPHER_description(SSL_CIPHER *a, char *b, int c); @@ -269,7 +273,11 @@ int q_SSL_CTX_check_private_key(SSL_CTX *a); #endif long q_SSL_CTX_ctrl(SSL_CTX *a, int b, long c, void *d); void q_SSL_CTX_free(SSL_CTX *a); +#if OPENSSL_VERSION_NUMBER >= 0x10000000L +SSL_CTX *q_SSL_CTX_new(const SSL_METHOD *a); +#else SSL_CTX *q_SSL_CTX_new(SSL_METHOD *a); +#endif int q_SSL_CTX_set_cipher_list(SSL_CTX *a, const char *b); int q_SSL_CTX_set_default_verify_paths(SSL_CTX *a); void q_SSL_CTX_set_verify(SSL_CTX *a, int b, int (*c)(int, X509_STORE_CTX *)); @@ -286,7 +294,11 @@ STACK_OF(SSL_CIPHER) *q_SSL_get_ciphers(const SSL *a); #else STACK_OF(SSL_CIPHER) *q_SSL_get_ciphers(SSL *a); #endif +#if OPENSSL_VERSION_NUMBER >= 0x10000000L +const SSL_CIPHER *q_SSL_get_current_cipher(SSL *a); +#else SSL_CIPHER *q_SSL_get_current_cipher(SSL *a); +#endif int q_SSL_get_error(SSL *a, int b); STACK_OF(X509) *q_SSL_get_peer_cert_chain(SSL *a); X509 *q_SSL_get_peer_certificate(SSL *a); @@ -304,6 +316,16 @@ void q_SSL_set_bio(SSL *a, BIO *b, BIO *c); void q_SSL_set_accept_state(SSL *a); void q_SSL_set_connect_state(SSL *a); int q_SSL_shutdown(SSL *a); +#if OPENSSL_VERSION_NUMBER >= 0x10000000L +const SSL_METHOD *q_SSLv2_client_method(); +const SSL_METHOD *q_SSLv3_client_method(); +const SSL_METHOD *q_SSLv23_client_method(); +const SSL_METHOD *q_TLSv1_client_method(); +const SSL_METHOD *q_SSLv2_server_method(); +const SSL_METHOD *q_SSLv3_server_method(); +const SSL_METHOD *q_SSLv23_server_method(); +const SSL_METHOD *q_TLSv1_server_method(); +#else SSL_METHOD *q_SSLv2_client_method(); SSL_METHOD *q_SSLv3_client_method(); SSL_METHOD *q_SSLv23_client_method(); @@ -312,6 +334,7 @@ SSL_METHOD *q_SSLv2_server_method(); SSL_METHOD *q_SSLv3_server_method(); SSL_METHOD *q_SSLv23_server_method(); SSL_METHOD *q_TLSv1_server_method(); +#endif int q_SSL_write(SSL *a, const void *b, int c); int q_X509_cmp(X509 *a, X509 *b); #ifdef SSLEAY_MACROS -- cgit v0.12 From 8de2e639825d1351f794f50e2cccd846aba7b8d2 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Tue, 9 Jun 2009 10:16:54 +0200 Subject: Bump qt-eclipse version number in docs --- tools/qdoc3/test/standalone-eclipse-integration.qdocconf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/qdoc3/test/standalone-eclipse-integration.qdocconf b/tools/qdoc3/test/standalone-eclipse-integration.qdocconf index 127b578..3a22886 100644 --- a/tools/qdoc3/test/standalone-eclipse-integration.qdocconf +++ b/tools/qdoc3/test/standalone-eclipse-integration.qdocconf @@ -7,5 +7,5 @@ HTML.footer = "


\n" \ "\n" \ "\n" \ "\n" \ - "\n" \ + "\n" \ "
Copyright © 2009 Nokia Corporation and/or its subsidiary(-ies)Trademarks
Qt Eclipse Integration 1.4.3
Qt Eclipse Integration 1.5.2
" -- cgit v0.12 From 6b628fb9754629cc8cdd5718edec296b02ab3b0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Trond=20Kjern=C3=A5sen?= Date: Tue, 9 Jun 2009 10:45:19 +0200 Subject: Fixed a compile issue on Solaris. GLchar is defined to be unsigned on Solaris for some reason. Reviewed-by: Tom --- demos/boxes/glshaders.cpp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/demos/boxes/glshaders.cpp b/demos/boxes/glshaders.cpp index b6999a8..05bbf71 100644 --- a/demos/boxes/glshaders.cpp +++ b/demos/boxes/glshaders.cpp @@ -58,7 +58,7 @@ GLShader::GLShader(const char *data, int size, GLenum shaderType) m_shader = glCreateShaderObjectARB(shaderType); GLint glSize = size; - glShaderSourceARB(m_shader, 1, &data, &glSize); + glShaderSourceARB(m_shader, 1, static_cast(&data), &glSize); glCompileShaderARB(m_shader); int status; glGetObjectParameterivARB(m_shader, GL_OBJECT_COMPILE_STATUS_ARB, &status); @@ -79,7 +79,7 @@ GLShader::GLShader(const QString& fileName, GLenum shaderType) GLint size = file.size(); const char *p = bytes.data(); file.close(); - glShaderSourceARB(m_shader, 1, &p, &size); + glShaderSourceARB(m_shader, 1, static_cast(&p), &size); glCompileShaderARB(m_shader); int status; glGetObjectParameterivARB(m_shader, GL_OBJECT_COMPILE_STATUS_ARB, &status); @@ -105,7 +105,7 @@ QString GLShader::log() glGetObjectParameterivARB(m_shader, GL_OBJECT_INFO_LOG_LENGTH_ARB, &length); char *log = new char[length + 1]; GLsizei glLength = length; - glGetInfoLogARB(m_shader, glLength, &glLength, log); + glGetInfoLogARB(m_shader, glLength, &glLength, static_cast(log)); log[glLength] = '\0'; QString result(log); delete log; @@ -184,7 +184,7 @@ QString GLProgram::log() glGetObjectParameterivARB(m_program, GL_OBJECT_INFO_LOG_LENGTH_ARB, &length); char *log = new char[length + 1]; GLsizei glLength = length; - glGetInfoLogARB(m_program, glLength, &glLength, log); + glGetInfoLogARB(m_program, glLength, &glLength, static_cast(log)); log[glLength] = '\0'; QString result(log); delete log; @@ -212,7 +212,7 @@ bool GLProgram::hasParameter(const QString& name) if (!failed()) { QByteArray asciiName = name.toAscii(); - return -1 != glGetUniformLocationARB(m_program, asciiName.data()); + return -1 != glGetUniformLocationARB(m_program, static_cast(asciiName.data())); } return false; } @@ -223,7 +223,7 @@ void GLProgram::setInt(const QString& name, int value) if (!failed()) { QByteArray asciiName = name.toAscii(); - int loc = glGetUniformLocationARB(m_program, asciiName.data()); + int loc = glGetUniformLocationARB(m_program, static_cast(asciiName.data())); glUniform1iARB(loc, value); } } @@ -234,7 +234,7 @@ void GLProgram::setFloat(const QString& name, float value) if (!failed()) { QByteArray asciiName = name.toAscii(); - int loc = glGetUniformLocationARB(m_program, asciiName.data()); + int loc = glGetUniformLocationARB(m_program, static_cast(asciiName.data())); glUniform1fARB(loc, value); } } @@ -246,7 +246,7 @@ void GLProgram::setColor(const QString& name, QRgb value) //qDebug() << "Setting color" << name; if (!failed()) { QByteArray asciiName = name.toAscii(); - int loc = glGetUniformLocationARB(m_program, asciiName.data()); + int loc = glGetUniformLocationARB(m_program, static_cast(asciiName.data())); //qDebug() << "Location of" << name << "is" << loc; QColor color(value); glUniform4fARB(loc, color.redF(), color.greenF(), color.blueF(), color.alphaF()); @@ -259,8 +259,8 @@ void GLProgram::setMatrix(const QString& name, const gfx::Matrix4x4f &mat) if (!failed()) { QByteArray asciiName = name.toAscii(); - int loc = glGetUniformLocationARB(m_program, asciiName.data()); + int loc = glGetUniformLocationARB(m_program, static_cast(asciiName.data())); //qDebug() << "Location of" << name << "is" << loc; glUniformMatrix4fvARB(loc, 1, GL_FALSE, mat.bits()); } -} \ No newline at end of file +} -- cgit v0.12 From d85d658881a424cf7d6be797d800c7821b21fffa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Abecasis?= Date: Tue, 9 Jun 2009 15:27:28 +0200 Subject: Skip empty parts in KDEDIRS If KDEDIRS was set to an empty string, this would unintentionally bring /share into the icon search path. Reviewed-by: Olivier Goffart --- src/gui/styles/qcommonstyle.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/styles/qcommonstyle.cpp b/src/gui/styles/qcommonstyle.cpp index f3d1537..9a4fc0f 100644 --- a/src/gui/styles/qcommonstyle.cpp +++ b/src/gui/styles/qcommonstyle.cpp @@ -848,7 +848,7 @@ void QCommonStylePrivate::lookupIconTheme() const dataDirs = QLatin1String("/usr/local/share/:/usr/share/"); dataDirs += QLatin1Char(':') + QApplicationPrivate::kdeHome() + QLatin1String("/share"); dataDirs.prepend(QDir::homePath() + QLatin1String("/:")); - QStringList kdeDirs = QString::fromLocal8Bit(getenv("KDEDIRS")).split(QLatin1Char(':')); + QStringList kdeDirs = QString::fromLocal8Bit(getenv("KDEDIRS")).split(QLatin1Char(':'), QString::SkipEmptyParts); foreach (const QString &dirName, kdeDirs) dataDirs.append(QLatin1String(":") + dirName + QLatin1String("/share")); iconDirs = dataDirs.split(QLatin1Char(':')); -- cgit v0.12 From c87d03e01a01fa84c7a14e9b330219f2a80f8ffa Mon Sep 17 00:00:00 2001 From: Thomas Zander Date: Tue, 9 Jun 2009 15:36:11 +0200 Subject: BT: Make the spreadsheet demo install its header files so it will compile after installing --- demos/spreadsheet/spreadsheet.pro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/demos/spreadsheet/spreadsheet.pro b/demos/spreadsheet/spreadsheet.pro index b62f244..6ed0016 100644 --- a/demos/spreadsheet/spreadsheet.pro +++ b/demos/spreadsheet/spreadsheet.pro @@ -27,7 +27,7 @@ build_all:!build_pass { # install target.path = $$[QT_INSTALL_DEMOS]/spreadsheet -sources.files = $$SOURCES $$RESOURCES *.pro images +sources.files = $$SOURCES $$RESOURCES *.pro images $$HEADERS sources.path = $$[QT_INSTALL_DEMOS]/spreadsheet INSTALLS += target sources -- cgit v0.12 From 1618a06367f4282b0eb308b4ba1acbcdc609689b Mon Sep 17 00:00:00 2001 From: David Boddie Date: Tue, 9 Jun 2009 17:26:32 +0200 Subject: Doc: Removed the misleading information about Thumb library sizes. Reviewed-by: Trust Me --- doc/src/installation.qdoc | 2 -- 1 file changed, 2 deletions(-) diff --git a/doc/src/installation.qdoc b/doc/src/installation.qdoc index 925a195..6a689f9 100644 --- a/doc/src/installation.qdoc +++ b/doc/src/installation.qdoc @@ -738,8 +738,6 @@ in the \l{Qt for Windows CE Requirements} document. \header \o Minimal \o Normal \o Minimal \o Normal \o Minimal \o Normal \o Minimal \o Normal \row \o linux-x86-g++ \o GCC 4.2.4 \o 1.7M \o 2.7M \o 3.3M \o 9.9M \o 653K \o 1.1M \o N/A \o 17M \row \o linux-arm-g++ \o GCC 4.1.1 \o 1.9M \o 3.2M \o 4.1M \o 11M \o 507K \o 1.0M \o N/A \o 17M - \row \o linux-arm-g++ (thumb) - \o GCC 4.1.1 \o 1.7M \o 2.8M \o 4.0M \o 9.8M \o 409K \o 796K \o N/A \o 17M \row \o linux-mips-g++ (MIPS32) \o GCC 4.2.4 \o 2.0M \o 3.2M \o 4.5M \o 12M \o 505K \o 1003K \o N/A \o 21M \endtable -- cgit v0.12 From c93f69f95a8c0a4eb3cd390c11266057b77c78b5 Mon Sep 17 00:00:00 2001 From: Thomas Zander Date: Tue, 9 Jun 2009 13:53:21 +0200 Subject: BT: Fix the installed browser source tree to compile. --- demos/browser/browser.pro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/demos/browser/browser.pro b/demos/browser/browser.pro index d970f99..13e8a1d 100644 --- a/demos/browser/browser.pro +++ b/demos/browser/browser.pro @@ -86,6 +86,6 @@ wince*: { # install target.path = $$[QT_INSTALL_DEMOS]/browser -sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS *.plist *.icns *.ico *.rc *.pro *.html *.doc images htmls +sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS *.plist *.icns *.ico *.rc *.pro *.html *.doc images htmls data sources.path = $$[QT_INSTALL_DEMOS]/browser INSTALLS += target sources -- cgit v0.12 From f4548a337bbc348065e8341df9445bf0fc7bc241 Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Tue, 9 Jun 2009 17:42:11 +0200 Subject: Fix the qitemdelgate test. the line edit was deleted when we press enter --- tests/auto/qitemdelegate/tst_qitemdelegate.cpp | 28 +++++++++++++------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/tests/auto/qitemdelegate/tst_qitemdelegate.cpp b/tests/auto/qitemdelegate/tst_qitemdelegate.cpp index 615ac01..50e1ff0 100644 --- a/tests/auto/qitemdelegate/tst_qitemdelegate.cpp +++ b/tests/auto/qitemdelegate/tst_qitemdelegate.cpp @@ -1034,7 +1034,7 @@ void tst_QItemDelegate::editorEvent() option.rect = rect; option.state |= QStyle::State_Enabled; - const int checkMargin = qApp->style()->pixelMetric(QStyle::PM_FocusFrameHMargin, 0, 0) + 1; + const int checkMargin = qApp->style()->pixelMetric(QStyle::PM_FocusFrameHMargin, 0, 0) + 1; QPoint pos = inCheck ? qApp->style()->subElementRect(QStyle::SE_ViewItemCheckIndicator, &option, 0).center() + QPoint(checkMargin, 0) : QPoint(200,200); QEvent *event = new QMouseEvent((QEvent::Type)type, @@ -1057,7 +1057,7 @@ void tst_QItemDelegate::enterKey_data() QTest::addColumn("widget"); QTest::addColumn("key"); QTest::addColumn("expectedFocus"); - + QTest::newRow("lineedit enter") << 1 << int(Qt::Key_Enter) << false; QTest::newRow("textedit enter") << 2 << int(Qt::Key_Enter) << true; QTest::newRow("plaintextedit enter") << 3 << int(Qt::Key_Enter) << true; @@ -1071,17 +1071,17 @@ void tst_QItemDelegate::enterKey() QFETCH(int, widget); QFETCH(int, key); QFETCH(bool, expectedFocus); - + QStandardItemModel model; model.appendRow(new QStandardItem()); - + QListView view; view.setModel(&model); view.show(); QApplication::setActiveWindow(&view); view.setFocus(); QTest::qWait(30); - + struct TestDelegate : public QItemDelegate { int widgetType; @@ -1089,7 +1089,7 @@ void tst_QItemDelegate::enterKey() { QWidget *editor = 0; switch(widgetType) { - case 1: + case 1: editor = new QLineEdit(parent); break; case 2: @@ -1103,25 +1103,25 @@ void tst_QItemDelegate::enterKey() return editor; } } delegate; - + delegate.widgetType = widget; - + view.setItemDelegate(&delegate); QModelIndex index = model.index(0, 0); view.setCurrentIndex(index); // the editor will only selectAll on the current index view.edit(index); QTest::qWait(30); - + QList lineEditors = qFindChildren(view.viewport(), QString::fromLatin1("TheEditor")); QCOMPARE(lineEditors.count(), 1); - - QWidget *editor = lineEditors.at(0); + + QPointer editor = lineEditors.at(0); QCOMPARE(editor->hasFocus(), true); - + QTest::keyClick(editor, Qt::Key(key)); QApplication::processEvents(); - - QCOMPARE(editor->hasFocus(), expectedFocus); + + QCOMPARE(editor && editor->hasFocus(), expectedFocus); } -- cgit v0.12 From 31f52b2354f5bb5044592ad93cb4e9f7a9d43ae6 Mon Sep 17 00:00:00 2001 From: Jens Bache-Wiig Date: Tue, 9 Jun 2009 19:47:45 +0200 Subject: BT: Fix missing animation in the Qt Demo Browser Change 259b65c2f5d736dd7f6d81b6390f54464dd5f183 prevents the animation from running on Windows. This is a partial revert that still preserves most of the performance fixes. Reviewed-by: ogoffart --- demos/qtdemo/mainwindow.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/demos/qtdemo/mainwindow.cpp b/demos/qtdemo/mainwindow.cpp index 16ca95f..8055fec 100644 --- a/demos/qtdemo/mainwindow.cpp +++ b/demos/qtdemo/mainwindow.cpp @@ -430,7 +430,9 @@ void MainWindow::focusInEvent(QFocusEvent *) if (MenuManager::instance()->ticker) MenuManager::instance()->ticker->pause(false); - this->switchTimerOnOff(true); + int code = MenuManager::instance()->currentMenuCode; + if (code == MenuManager::ROOT || code == MenuManager::MENU1) + this->switchTimerOnOff(true); this->pausedLabel->setRecursiveVisible(false); } @@ -443,7 +445,9 @@ void MainWindow::focusOutEvent(QFocusEvent *) if (MenuManager::instance()->ticker) MenuManager::instance()->ticker->pause(true); - this->switchTimerOnOff(false); + int code = MenuManager::instance()->currentMenuCode; + if (code == MenuManager::ROOT || code == MenuManager::MENU1) + this->switchTimerOnOff(false); this->pausedLabel->setRecursiveVisible(true); } -- cgit v0.12 From 141dccc381894b3a6f57b2a3a222f5c25eee9a5f Mon Sep 17 00:00:00 2001 From: Anders Bakken Date: Tue, 9 Jun 2009 13:44:59 -0700 Subject: Initialize xform_scale in constructor Though this variable always will be initialized in QX11PaintEngine::begin() valgrind complains about conditional jump or move depends on uninitialised value(s). Reviewed-by: Donald --- src/gui/painting/qpaintengine_x11_p.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/gui/painting/qpaintengine_x11_p.h b/src/gui/painting/qpaintengine_x11_p.h index f277eeb..f3dd283 100644 --- a/src/gui/painting/qpaintengine_x11_p.h +++ b/src/gui/painting/qpaintengine_x11_p.h @@ -153,6 +153,7 @@ public: txop = QTransform::TxNone; has_clipping = false; render_hints = 0; + xform_scale = 1; #ifndef QT_NO_XRENDER tessellator = 0; #endif -- cgit v0.12 From b2b0ac2f9abf58456e2dad2340c77c6004464a34 Mon Sep 17 00:00:00 2001 From: Rohan McGovern Date: Wed, 10 Jun 2009 12:47:15 +1000 Subject: Fixed compile of arthur tests when Qt is configured without opengl or qt3support. --- tests/arthur/common/common.pri | 2 +- tests/arthur/datagenerator/datagenerator.pro | 4 +++- tests/arthur/htmlgenerator/htmlgenerator.pro | 4 +++- tests/arthur/performancediff/performancediff.pro | 4 +++- tests/arthur/shower/shower.pro | 4 +++- 5 files changed, 13 insertions(+), 5 deletions(-) diff --git a/tests/arthur/common/common.pri b/tests/arthur/common/common.pri index 58cb636..1f84904 100644 --- a/tests/arthur/common/common.pri +++ b/tests/arthur/common/common.pri @@ -1,7 +1,7 @@ VPATH+=$$PWD INCLUDEPATH += $$PWD -contains(QT_CONFIG, opengl):DEFINES += BUILD_OPENGL +contains(QT_CONFIG, opengl)|contains(QT_CONFIG, opengles1)|contains(QT_CONFIG, opengles2):DEFINES += BUILD_OPENGL SOURCES += \ xmldata.cpp \ diff --git a/tests/arthur/datagenerator/datagenerator.pro b/tests/arthur/datagenerator/datagenerator.pro index c302969..9da6fcd 100644 --- a/tests/arthur/datagenerator/datagenerator.pro +++ b/tests/arthur/datagenerator/datagenerator.pro @@ -8,7 +8,9 @@ DEPENDPATH += . INCLUDEPATH += . DESTDIR = ../bin -QT += svg opengl xml qt3support +QT += svg xml +contains(QT_CONFIG, opengl)|contains(QT_CONFIG, opengles1)|contains(QT_CONFIG, opengles2):QT += opengl +contains(QT_CONFIG, qt3support):QT += qt3support # Input HEADERS += datagenerator.h \ diff --git a/tests/arthur/htmlgenerator/htmlgenerator.pro b/tests/arthur/htmlgenerator/htmlgenerator.pro index f74c460..4a1c8ba 100644 --- a/tests/arthur/htmlgenerator/htmlgenerator.pro +++ b/tests/arthur/htmlgenerator/htmlgenerator.pro @@ -9,7 +9,9 @@ DESTDIR = ../bin CONFIG += console -QT += svg opengl xml qt3support +QT += svg xml +contains(QT_CONFIG, opengl)|contains(QT_CONFIG, opengles1)|contains(QT_CONFIG, opengles2):QT += opengl +contains(QT_CONFIG, qt3support):QT += qt3support # Input HEADERS += htmlgenerator.h diff --git a/tests/arthur/performancediff/performancediff.pro b/tests/arthur/performancediff/performancediff.pro index 1c9b9fe..15d5ec5 100644 --- a/tests/arthur/performancediff/performancediff.pro +++ b/tests/arthur/performancediff/performancediff.pro @@ -9,7 +9,9 @@ DESTDIR = ../bin CONFIG += console -QT += xml opengl svg qt3support +QT += xml svg +contains(QT_CONFIG, opengl)|contains(QT_CONFIG, opengles1)|contains(QT_CONFIG, opengles2):QT += opengl +contains(QT_CONFIG, qt3support):QT += qt3support # Input HEADERS += performancediff.h diff --git a/tests/arthur/shower/shower.pro b/tests/arthur/shower/shower.pro index 000c6e4..c02ded0 100644 --- a/tests/arthur/shower/shower.pro +++ b/tests/arthur/shower/shower.pro @@ -7,7 +7,9 @@ DEPENDPATH += . INCLUDEPATH += . DESTDIR = ../bin -QT += xml opengl svg qt3support +QT += xml svg +contains(QT_CONFIG, opengl)|contains(QT_CONFIG, opengles1)|contains(QT_CONFIG, opengles2):QT += opengl +contains(QT_CONFIG, qt3support):QT += qt3support # Input HEADERS += shower.h -- cgit v0.12 From c0becf8cb47312ec14a2b28e2a76a1d87a8e183e Mon Sep 17 00:00:00 2001 From: Thomas Zander Date: Wed, 10 Jun 2009 11:18:37 +0200 Subject: BT: Fixes building qtdemo in the installed tree of sources. The QT_BUILD_TREE variable only works in the source or build dir, but fails in the demo which *install* the sources that should be buildable too. Reviewed-by: Marius Storm-Olsen --- demos/qtdemo/qtdemo.pro | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/demos/qtdemo/qtdemo.pro b/demos/qtdemo/qtdemo.pro index 2534b75..163ed17 100644 --- a/demos/qtdemo/qtdemo.pro +++ b/demos/qtdemo/qtdemo.pro @@ -1,6 +1,8 @@ CONFIG += assistant help x11inc TARGET = qtdemo -DESTDIR = $$QT_BUILD_TREE/bin +DEMO_DESTDIR = $$QT_BUILD_TREE +isEmpty(DEMO_DESTDIR):DEMO_DESTDIR=../.. +DESTDIR = $$DEMO_DESTDIR/bin OBJECTS_DIR = .obj MOC_DIR = .moc INSTALLS += target sources -- cgit v0.12 From 7886888d3e873500dd1ea7d3f450f7d7f87c0ea6 Mon Sep 17 00:00:00 2001 From: Richard Moe Gustavsen Date: Wed, 10 Jun 2009 11:37:53 +0200 Subject: BT: QtDemo works far to sluggish on mac Basically we need to revert more of Oliviers change. The reason is that we just cannot run the demo on mac without timer based updates (as opposed to graphics view itself tries to figure out when to update). The reason is that the demo uses QItemAnimations extensivelly, which again uses QTimelines, wich again uses separate timers. And on mac, because of coalesced updated, each item animation will result in an individual redrawing of the scene. Task-number: 255751 Reviewed-by: Olivier --- demos/qtdemo/mainwindow.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/demos/qtdemo/mainwindow.cpp b/demos/qtdemo/mainwindow.cpp index 8055fec..bfffba5 100644 --- a/demos/qtdemo/mainwindow.cpp +++ b/demos/qtdemo/mainwindow.cpp @@ -190,6 +190,7 @@ void MainWindow::switchTimerOnOff(bool on) if (on && !Colors::noTimerUpdate){ this->useTimer = true; + this->setViewportUpdateMode(QGraphicsView::NoViewportUpdate); this->fpsTime = QTime::currentTime(); this->updateTimer.start(int(1000 / Colors::fps)); } @@ -261,6 +262,7 @@ void MainWindow::tick() if (MenuManager::instance()->ticker) MenuManager::instance()->ticker->tick(); + this->viewport()->update(); if (this->useTimer) this->updateTimer.start(int(1000 / Colors::fps)); } -- cgit v0.12 From d0823a0113253cf52859e84f41db82e96b80331e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Trond=20Kjern=C3=A5sen?= Date: Wed, 10 Jun 2009 11:14:45 +0200 Subject: Make sure QImage::mirrored() doesn't crash if it runs out of memory. Task-number: 255742 Reviewed-by: Kim --- src/gui/image/qimage.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/gui/image/qimage.cpp b/src/gui/image/qimage.cpp index 70d4e2c..338ae77 100644 --- a/src/gui/image/qimage.cpp +++ b/src/gui/image/qimage.cpp @@ -4277,6 +4277,11 @@ QImage QImage::mirrored(bool horizontal, bool vertical) const int h = d->height; // Create result image, copy colormap QImage result(d->width, d->height, d->format); + + // check if we ran out of of memory.. + if (!result.d) + return QImage(); + result.d->colortable = d->colortable; result.d->has_alpha_clut = d->has_alpha_clut; -- cgit v0.12 From efa2b7e98dda8525f42f71b15847699e1c7829ca Mon Sep 17 00:00:00 2001 From: Richard Moe Gustavsen Date: Wed, 10 Jun 2009 12:08:46 +0200 Subject: Fix compile error on Tiger the "for-in" syntax is only available on 10.5+ Reviewed-by: MortenS --- src/3rdparty/phonon/qt7/quicktimevideoplayer.mm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/3rdparty/phonon/qt7/quicktimevideoplayer.mm b/src/3rdparty/phonon/qt7/quicktimevideoplayer.mm index 93867e2..02a594b 100644 --- a/src/3rdparty/phonon/qt7/quicktimevideoplayer.mm +++ b/src/3rdparty/phonon/qt7/quicktimevideoplayer.mm @@ -1041,7 +1041,8 @@ NSString* QuickTimeVideoPlayer::pathToCompactDisc() { PhononAutoReleasePool pool; NSArray *devices = [[NSWorkspace sharedWorkspace] mountedRemovableMedia]; - for (NSString *dev in devices) { + for (unsigned int i=0; i<[devices count]; ++i) { + NSString *dev = [devices objectAtIndex:i]; if (isCompactDisc(dev)) return [dev retain]; } -- cgit v0.12 From 5c7042862c74dd3a5666bb266eaed922407e9711 Mon Sep 17 00:00:00 2001 From: Markus Goetz Date: Wed, 10 Jun 2009 12:34:08 +0200 Subject: QSslSocket: Wrong warning message in startServerEncryption Reviewed-by: TrustMe --- src/network/ssl/qsslsocket.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/network/ssl/qsslsocket.cpp b/src/network/ssl/qsslsocket.cpp index cf2512e..18450de 100644 --- a/src/network/ssl/qsslsocket.cpp +++ b/src/network/ssl/qsslsocket.cpp @@ -1527,7 +1527,7 @@ void QSslSocket::startServerEncryption() { Q_D(QSslSocket); if (d->mode != UnencryptedMode) { - qWarning("QSslSocket::startClientEncryption: cannot start handshake on non-plain connection"); + qWarning("QSslSocket::startServerEncryption: cannot start handshake on non-plain connection"); return; } #ifdef QSSLSOCKET_DEBUG -- cgit v0.12 From e6652650fe1de6421b48fab076c5e80c0deddbd8 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Wed, 10 Jun 2009 12:47:46 +0200 Subject: Spelling in docs. --- tools/assistant/lib/qhelpsearchengine.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/assistant/lib/qhelpsearchengine.cpp b/tools/assistant/lib/qhelpsearchengine.cpp index 9025f4f..5e7974d 100644 --- a/tools/assistant/lib/qhelpsearchengine.cpp +++ b/tools/assistant/lib/qhelpsearchengine.cpp @@ -243,7 +243,7 @@ private: This enum type specifies the field names that are handled by the search engine. \value DEFAULT the default field provided by the search widget, several terms should be - splitted and stored in the wordlist except search terms enclosed in quotes. + split and stored in the word list except search terms enclosed in quotes. \value FUZZY a field only provided in use with clucene. Terms should be split in seperate words and passed to the search engine. \value WITHOUT a field only provided in use with clucene. Terms should be split in seperate -- cgit v0.12 From 941a03814a5f8f7be93425f71ee65a4222d16899 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Wed, 10 Jun 2009 12:28:10 +0200 Subject: don't let comments weaved into strings confuse us Reviewed-by: TrustMe Task-number: 254260 Testcase: 323072@p4 --- tools/linguist/shared/cpp.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tools/linguist/shared/cpp.cpp b/tools/linguist/shared/cpp.cpp index 0aab661..541543f 100644 --- a/tools/linguist/shared/cpp.cpp +++ b/tools/linguist/shared/cpp.cpp @@ -480,7 +480,9 @@ static bool matchString(QString *s) s->clear(); while (yyTok == Tok_String) { *s += yyString; - yyTok = getToken(); + do { + yyTok = getToken(); + } while (yyTok == Tok_Comment); } return matches; } -- cgit v0.12 From 2255027e66a5b3284438de26ab64aaa941489665 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Trond=20Kjern=C3=A5sen?= Date: Wed, 10 Jun 2009 13:01:01 +0200 Subject: Fixed non-working animations under X11 with the raster graphicssystem. Reviewed-by: jbache --- demos/qtdemo/colors.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/demos/qtdemo/colors.cpp b/demos/qtdemo/colors.cpp index 883b0fb..048cb98 100644 --- a/demos/qtdemo/colors.cpp +++ b/demos/qtdemo/colors.cpp @@ -337,7 +337,7 @@ void Colors::detectSystemResources() #if defined(Q_WS_X11) // check if X render is present: QPixmap tmp(1, 1); - if (!tmp.x11PictureHandle()){ + if (!tmp.x11PictureHandle() && tmp.paintEngine()->type() == QPaintEngine::X11){ Colors::xRenderPresent = false; if (Colors::verbose) qDebug("- X render not present"); -- cgit v0.12 From b0192e2cdf10313799cfda63d93361669e752645 Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Wed, 10 Jun 2009 13:30:30 +0200 Subject: Compilefix for QT_NO_TABLETEVENT and QT_NO_COMPLETER Task-number: 253086 Reviewed-by: Joerg --- src/gui/dialogs/qfiledialog_p.h | 3 +++ src/gui/kernel/qapplication.cpp | 6 ++++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/gui/dialogs/qfiledialog_p.h b/src/gui/dialogs/qfiledialog_p.h index ab4199e..a393ec7 100644 --- a/src/gui/dialogs/qfiledialog_p.h +++ b/src/gui/dialogs/qfiledialog_p.h @@ -275,7 +275,10 @@ public: // data QStringList watching; QFileSystemModel *model; + +#ifndef QT_NO_COMPLETER QFSCompletor *completer; +#endif //QT_NO_COMPLETER QFileDialog::FileMode fileMode; QFileDialog::AcceptMode acceptMode; diff --git a/src/gui/kernel/qapplication.cpp b/src/gui/kernel/qapplication.cpp index 4cf0ad7..9a3f266 100644 --- a/src/gui/kernel/qapplication.cpp +++ b/src/gui/kernel/qapplication.cpp @@ -3566,10 +3566,12 @@ bool QApplication::notify(QObject *receiver, QEvent *e) #if !defined(QT_NO_WHEELEVENT) || !defined(QT_NO_TABLETEVENT) else if ( # ifndef QT_NO_WHEELEVENT - e->type() == QEvent::Wheel || + e->type() == QEvent::Wheel +# else + false # endif # ifndef QT_NO_TABLETEVENT - e->type() == QEvent::TabletMove + || e->type() == QEvent::TabletMove || e->type() == QEvent::TabletPress || e->type() == QEvent::TabletRelease # endif -- cgit v0.12 From 26792835b56261b0a0080ea010205a0b3134830c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Trond=20Kjern=C3=A5sen?= Date: Wed, 10 Jun 2009 16:34:49 +0200 Subject: Fixed a compile failure on Solaris, really :) You can't static_cast from a signed to an unsigned type and vice versa. Reviewed-by: Kim --- demos/boxes/glshaders.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/demos/boxes/glshaders.cpp b/demos/boxes/glshaders.cpp index 05bbf71..094fd77 100644 --- a/demos/boxes/glshaders.cpp +++ b/demos/boxes/glshaders.cpp @@ -58,7 +58,7 @@ GLShader::GLShader(const char *data, int size, GLenum shaderType) m_shader = glCreateShaderObjectARB(shaderType); GLint glSize = size; - glShaderSourceARB(m_shader, 1, static_cast(&data), &glSize); + glShaderSourceARB(m_shader, 1, reinterpret_cast(&data), &glSize); glCompileShaderARB(m_shader); int status; glGetObjectParameterivARB(m_shader, GL_OBJECT_COMPILE_STATUS_ARB, &status); @@ -79,7 +79,7 @@ GLShader::GLShader(const QString& fileName, GLenum shaderType) GLint size = file.size(); const char *p = bytes.data(); file.close(); - glShaderSourceARB(m_shader, 1, static_cast(&p), &size); + glShaderSourceARB(m_shader, 1, reinterpret_cast(&p), &size); glCompileShaderARB(m_shader); int status; glGetObjectParameterivARB(m_shader, GL_OBJECT_COMPILE_STATUS_ARB, &status); @@ -105,7 +105,7 @@ QString GLShader::log() glGetObjectParameterivARB(m_shader, GL_OBJECT_INFO_LOG_LENGTH_ARB, &length); char *log = new char[length + 1]; GLsizei glLength = length; - glGetInfoLogARB(m_shader, glLength, &glLength, static_cast(log)); + glGetInfoLogARB(m_shader, glLength, &glLength, reinterpret_cast(log)); log[glLength] = '\0'; QString result(log); delete log; @@ -184,7 +184,7 @@ QString GLProgram::log() glGetObjectParameterivARB(m_program, GL_OBJECT_INFO_LOG_LENGTH_ARB, &length); char *log = new char[length + 1]; GLsizei glLength = length; - glGetInfoLogARB(m_program, glLength, &glLength, static_cast(log)); + glGetInfoLogARB(m_program, glLength, &glLength, reinterpret_cast(log)); log[glLength] = '\0'; QString result(log); delete log; @@ -212,7 +212,7 @@ bool GLProgram::hasParameter(const QString& name) if (!failed()) { QByteArray asciiName = name.toAscii(); - return -1 != glGetUniformLocationARB(m_program, static_cast(asciiName.data())); + return -1 != glGetUniformLocationARB(m_program, reinterpret_cast(asciiName.data())); } return false; } @@ -223,7 +223,7 @@ void GLProgram::setInt(const QString& name, int value) if (!failed()) { QByteArray asciiName = name.toAscii(); - int loc = glGetUniformLocationARB(m_program, static_cast(asciiName.data())); + int loc = glGetUniformLocationARB(m_program, reinterpret_cast(asciiName.data())); glUniform1iARB(loc, value); } } @@ -234,7 +234,7 @@ void GLProgram::setFloat(const QString& name, float value) if (!failed()) { QByteArray asciiName = name.toAscii(); - int loc = glGetUniformLocationARB(m_program, static_cast(asciiName.data())); + int loc = glGetUniformLocationARB(m_program, reinterpret_cast(asciiName.data())); glUniform1fARB(loc, value); } } @@ -246,7 +246,7 @@ void GLProgram::setColor(const QString& name, QRgb value) //qDebug() << "Setting color" << name; if (!failed()) { QByteArray asciiName = name.toAscii(); - int loc = glGetUniformLocationARB(m_program, static_cast(asciiName.data())); + int loc = glGetUniformLocationARB(m_program, reinterpret_cast(asciiName.data())); //qDebug() << "Location of" << name << "is" << loc; QColor color(value); glUniform4fARB(loc, color.redF(), color.greenF(), color.blueF(), color.alphaF()); @@ -259,7 +259,7 @@ void GLProgram::setMatrix(const QString& name, const gfx::Matrix4x4f &mat) if (!failed()) { QByteArray asciiName = name.toAscii(); - int loc = glGetUniformLocationARB(m_program, static_cast(asciiName.data())); + int loc = glGetUniformLocationARB(m_program, reinterpret_cast(asciiName.data())); //qDebug() << "Location of" << name << "is" << loc; glUniformMatrix4fvARB(loc, 1, GL_FALSE, mat.bits()); } -- cgit v0.12 From 96e370f5dd18c54c5afd5cbb8a3c141c4c3cbae3 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Wed, 10 Jun 2009 20:00:07 +0200 Subject: fix hover selection of source strings snatching ctrl-a from line edits seems to need a shortcut override for some time now --- tools/linguist/linguist/messageeditor.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tools/linguist/linguist/messageeditor.cpp b/tools/linguist/linguist/messageeditor.cpp index 53cbbea..c1d5fb37 100644 --- a/tools/linguist/linguist/messageeditor.cpp +++ b/tools/linguist/linguist/messageeditor.cpp @@ -502,6 +502,8 @@ bool MessageEditor::eventFilter(QObject *o, QEvent *e) m_pluralSource->getEditor()->copy(); return true; } + } else if (ke->key() == Qt::Key_A) { + return true; } } } else if (e->type() == QEvent::KeyPress) { -- cgit v0.12 From 7f30a96c2b444d4350aab8c76f129eb57b3bd6a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Trond=20Kjern=C3=A5sen?= Date: Thu, 11 Jun 2009 11:48:38 +0200 Subject: Fixed a problem with disappearing borders in a QTextFrame. The border was always drawn before the background, and if there were both a border and background brush set, the background ended up being drawn ontop of the border. Task-number: 255868 Reviewed-by: Samuel --- src/gui/text/qtextdocumentlayout.cpp | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/src/gui/text/qtextdocumentlayout.cpp b/src/gui/text/qtextdocumentlayout.cpp index c66d0c1..3019e60 100644 --- a/src/gui/text/qtextdocumentlayout.cpp +++ b/src/gui/text/qtextdocumentlayout.cpp @@ -855,6 +855,24 @@ void QTextDocumentLayoutPrivate::drawBorder(QPainter *painter, const QRectF &rec void QTextDocumentLayoutPrivate::drawFrameDecoration(QPainter *painter, QTextFrame *frame, QTextFrameData *fd, const QRectF &clip, const QRectF &rect) const { + + const QBrush bg = frame->frameFormat().background(); + if (bg != Qt::NoBrush) { + QRectF bgRect = rect; + bgRect.adjust((fd->leftMargin + fd->border).toReal(), + (fd->topMargin + fd->border).toReal(), + - (fd->rightMargin + fd->border).toReal(), + - (fd->bottomMargin + fd->border).toReal()); + + QRectF gradientRect; // invalid makes it default to bgRect + QPointF origin = bgRect.topLeft(); + if (!frame->parentFrame()) { + bgRect = clip; + gradientRect.setWidth(painter->device()->width()); + gradientRect.setHeight(painter->device()->height()); + } + fillBackground(painter, bgRect, bg, origin, gradientRect); + } if (fd->border != 0) { painter->save(); painter->setBrush(Qt::lightGray); @@ -875,24 +893,6 @@ void QTextDocumentLayoutPrivate::drawFrameDecoration(QPainter *painter, QTextFra painter->restore(); } - - const QBrush bg = frame->frameFormat().background(); - if (bg != Qt::NoBrush) { - QRectF bgRect = rect; - bgRect.adjust((fd->leftMargin + fd->border).toReal(), - (fd->topMargin + fd->border).toReal(), - - (fd->rightMargin + fd->border).toReal(), - - (fd->bottomMargin + fd->border).toReal()); - - QRectF gradientRect; // invalid makes it default to bgRect - QPointF origin = bgRect.topLeft(); - if (!frame->parentFrame()) { - bgRect = clip; - gradientRect.setWidth(painter->device()->width()); - gradientRect.setHeight(painter->device()->height()); - } - fillBackground(painter, bgRect, bg, origin, gradientRect); - } } static void adjustContextSelectionsForCell(QAbstractTextDocumentLayout::PaintContext &cell_context, -- cgit v0.12 From dd828f95c8f7bc000d808452eef062353ef7dd03 Mon Sep 17 00:00:00 2001 From: kh Date: Thu, 11 Jun 2009 12:11:11 +0200 Subject: No need to bookmark emty pages. Reviewed-by: kh --- tools/assistant/tools/assistant/centralwidget.cpp | 3 +++ tools/assistant/tools/assistant/mainwindow.cpp | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/tools/assistant/tools/assistant/centralwidget.cpp b/tools/assistant/tools/assistant/centralwidget.cpp index 52d48d5..95e458c 100644 --- a/tools/assistant/tools/assistant/centralwidget.cpp +++ b/tools/assistant/tools/assistant/centralwidget.cpp @@ -780,6 +780,9 @@ void CentralWidget::showTabBarContextMenu(const QPoint &point) menu.addSeparator(); QAction *newBookmark = menu.addAction(tr("Add Bookmark for this Page...")); + const QString &url = viewer->source().toString(); + if (url.isEmpty() || url == QLatin1String("about:blank")) + newBookmark->setEnabled(false); QAction *pickedAction = menu.exec(tabBar->mapToGlobal(point)); if (pickedAction == newPage) diff --git a/tools/assistant/tools/assistant/mainwindow.cpp b/tools/assistant/tools/assistant/mainwindow.cpp index 582eef3..ba22590 100644 --- a/tools/assistant/tools/assistant/mainwindow.cpp +++ b/tools/assistant/tools/assistant/mainwindow.cpp @@ -748,7 +748,7 @@ void MainWindow::copyAvailable(bool yes) void MainWindow::addNewBookmark(const QString &title, const QString &url) { - if (url.isEmpty()) + if (url.isEmpty() || url == QLatin1String("about:blank")) return; m_bookmarkManager->showBookmarkDialog(this, title, url); -- cgit v0.12 From 65c570e7b0c3699f58a7f271c934b384a7046029 Mon Sep 17 00:00:00 2001 From: kh Date: Thu, 11 Jun 2009 12:19:44 +0200 Subject: Fix wrong home shortcut, now set to ALT+Home. Task-number: 255875 Reviewed-by: kh --- tools/assistant/tools/assistant/mainwindow.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/assistant/tools/assistant/mainwindow.cpp b/tools/assistant/tools/assistant/mainwindow.cpp index ba22590..4fc0c78 100644 --- a/tools/assistant/tools/assistant/mainwindow.cpp +++ b/tools/assistant/tools/assistant/mainwindow.cpp @@ -468,7 +468,7 @@ void MainWindow::setupActions() menu = menuBar()->addMenu(tr("&Go")); m_homeAction = menu->addAction(tr("&Home"), m_centralWidget, SLOT(home())); - m_homeAction->setShortcut(tr("Ctrl+Home")); + m_homeAction->setShortcut(tr("ALT+Home")); m_homeAction->setIcon(QIcon(resourcePath + QLatin1String("/home.png"))); m_backAction = menu->addAction(tr("&Back"), m_centralWidget, SLOT(backward())); -- cgit v0.12 From e56fc59124b998b3f237945f4ec1343afe6676ba Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Thu, 11 Jun 2009 12:11:55 +0200 Subject: add plural rules for urdu --- tools/linguist/shared/numerus.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/linguist/shared/numerus.cpp b/tools/linguist/shared/numerus.cpp index 50e85cb..8e51114 100644 --- a/tools/linguist/shared/numerus.cpp +++ b/tools/linguist/shared/numerus.cpp @@ -246,6 +246,7 @@ static const QLocale::Language englishStyleLanguages[] = { QLocale::Turkmen, QLocale::Twi, QLocale::Uigur, + QLocale::Urdu, QLocale::Uzbek, QLocale::Volapuk, QLocale::Wolof, -- cgit v0.12 From fcfd6399dcccef350addb992067dccdc6bceb9c7 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Thu, 11 Jun 2009 12:18:11 +0200 Subject: fix arabic plurals --- tools/linguist/shared/numerus.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/linguist/shared/numerus.cpp b/tools/linguist/shared/numerus.cpp index 8e51114..c0960da 100644 --- a/tools/linguist/shared/numerus.cpp +++ b/tools/linguist/shared/numerus.cpp @@ -101,7 +101,7 @@ static const uchar arabicRules[] = Q_EQ, 1, Q_NEWRULE, Q_EQ, 2, Q_NEWRULE, Q_MOD_100 | Q_BETWEEN, 3, 10, Q_NEWRULE, - Q_MOD_100 | Q_NEQ, 0 }; + Q_MOD_100 | Q_NOT | Q_BETWEEN, 0, 2 }; static const uchar tagalogRules[] = { Q_LEQ, 1, Q_NEWRULE, Q_MOD_10 | Q_EQ, 4, Q_OR, Q_MOD_10 | Q_EQ, 6, Q_OR, Q_MOD_10 | Q_EQ, 9 }; @@ -127,7 +127,7 @@ static const char * const malteseForms[] = static const char * const welshForms[] = { "Nullar", "Singular", "Dual", "Sexal", "Plural", 0 }; static const char * const arabicForms[] = - { "Nullar", "Singular", "Dual", "Minority Plural", "Plural", "Plural Form for 100, 200, ...", 0 }; + { "Nullar", "Singular", "Dual", "Minority Plural", "Plural", "Plural (100-102, ...)", 0 }; static const char * const tagalogForms[] = { "Singular", "Plural (consonant-ended)", "Plural (vowel-ended)", 0 }; static const char * const catalanForms[] = { "Singular", "Undecal (11)", "Plural", 0 }; -- cgit v0.12 From dfb61e59f0a1c2113cc01c99c3fd052efa2b6c8e Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Wed, 10 Jun 2009 10:10:02 +0200 Subject: fix "make debug" under windows use relative path for include (like every other subtree does), otherwise $$fromfile() does not find the file, thus the template is unknown and thus the generic "first" target is used instead of "debug", which tries a generic build against non-existing release libs - boom. Reviewed-by: TrustMe --- src/phonon/phonon.pro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/phonon/phonon.pro b/src/phonon/phonon.pro index ec7e46a..9e7879f 100644 --- a/src/phonon/phonon.pro +++ b/src/phonon/phonon.pro @@ -1,5 +1,5 @@ TARGET = phonon -include($$QT_SOURCE_TREE/src/qbase.pri) +include(../qbase.pri) PHONON_MAJOR_VERSION = $${QT_MAJOR_VERSION} PHONON_MINOR_VERSION = 3 -- cgit v0.12 From 5717e44d47bf5f6be59a59844223ce71b094b08e Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Tue, 9 Jun 2009 17:08:44 +0200 Subject: turn qm generation into a build time target consequently, remove the qm files from the repository this uses some really black magic to convince qmake to do the right thing. this will be fixed properly in a later version. Reviewed-by: mariusSO --- projects.pro | 5 ++++- translations/assistant_adp_de.qm | Bin 23139 -> 0 bytes translations/assistant_adp_ja.qm | Bin 18357 -> 0 bytes translations/assistant_adp_pl.qm | Bin 22726 -> 0 bytes translations/assistant_adp_zh_CN.qm | Bin 16631 -> 0 bytes translations/assistant_adp_zh_TW.qm | Bin 16555 -> 0 bytes translations/assistant_de.qm | Bin 18688 -> 0 bytes translations/assistant_pl.qm | Bin 18457 -> 0 bytes translations/assistant_zh_CN.qm | Bin 15595 -> 0 bytes translations/assistant_zh_TW.qm | Bin 15567 -> 0 bytes translations/designer_de.qm | Bin 151189 -> 0 bytes translations/designer_ja.qm | Bin 105573 -> 0 bytes translations/designer_pl.qm | Bin 150544 -> 0 bytes translations/designer_zh_CN.qm | Bin 113745 -> 0 bytes translations/designer_zh_TW.qm | Bin 113449 -> 0 bytes translations/linguist_de.qm | Bin 45915 -> 0 bytes translations/linguist_ja.qm | Bin 30494 -> 0 bytes translations/linguist_pl.qm | Bin 50952 -> 0 bytes translations/linguist_zh_CN.qm | Bin 33492 -> 0 bytes translations/linguist_zh_TW.qm | Bin 33735 -> 0 bytes translations/qt_ar.qm | Bin 58499 -> 0 bytes translations/qt_de.qm | Bin 181348 -> 0 bytes translations/qt_es.qm | Bin 117693 -> 0 bytes translations/qt_fr.qm | Bin 148544 -> 0 bytes translations/qt_help_de.qm | Bin 9583 -> 0 bytes translations/qt_help_pl.qm | Bin 9058 -> 0 bytes translations/qt_help_zh_CN.qm | Bin 6434 -> 0 bytes translations/qt_help_zh_TW.qm | Bin 6384 -> 0 bytes translations/qt_iw.qm | Bin 55269 -> 0 bytes translations/qt_ja_JP.qm | Bin 64337 -> 0 bytes translations/qt_pl.qm | Bin 143971 -> 0 bytes translations/qt_pt.qm | Bin 78828 -> 0 bytes translations/qt_ru.qm | Bin 60815 -> 0 bytes translations/qt_sk.qm | Bin 79787 -> 0 bytes translations/qt_sv.qm | Bin 73493 -> 0 bytes translations/qt_uk.qm | Bin 81429 -> 0 bytes translations/qt_zh_CN.qm | Bin 118981 -> 0 bytes translations/qt_zh_TW.qm | Bin 118967 -> 0 bytes translations/qtconfig_pl.qm | Bin 17940 -> 0 bytes translations/qtconfig_zh_CN.qm | Bin 21688 -> 0 bytes translations/qtconfig_zh_TW.qm | Bin 20262 -> 0 bytes translations/qvfb_pl.qm | Bin 4742 -> 0 bytes translations/qvfb_zh_CN.qm | Bin 4853 -> 0 bytes translations/qvfb_zh_TW.qm | Bin 4853 -> 0 bytes translations/translations.pri | 38 +++------------------------------ translations/translations.pro | 41 ++++++++++++++++++++++++++++++++++++ 46 files changed, 48 insertions(+), 36 deletions(-) delete mode 100644 translations/assistant_adp_de.qm delete mode 100644 translations/assistant_adp_ja.qm delete mode 100644 translations/assistant_adp_pl.qm delete mode 100644 translations/assistant_adp_zh_CN.qm delete mode 100644 translations/assistant_adp_zh_TW.qm delete mode 100644 translations/assistant_de.qm delete mode 100644 translations/assistant_pl.qm delete mode 100644 translations/assistant_zh_CN.qm delete mode 100644 translations/assistant_zh_TW.qm delete mode 100644 translations/designer_de.qm delete mode 100644 translations/designer_ja.qm delete mode 100644 translations/designer_pl.qm delete mode 100644 translations/designer_zh_CN.qm delete mode 100644 translations/designer_zh_TW.qm delete mode 100644 translations/linguist_de.qm delete mode 100644 translations/linguist_ja.qm delete mode 100644 translations/linguist_pl.qm delete mode 100644 translations/linguist_zh_CN.qm delete mode 100644 translations/linguist_zh_TW.qm delete mode 100644 translations/qt_ar.qm delete mode 100644 translations/qt_de.qm delete mode 100644 translations/qt_es.qm delete mode 100644 translations/qt_fr.qm delete mode 100644 translations/qt_help_de.qm delete mode 100644 translations/qt_help_pl.qm delete mode 100644 translations/qt_help_zh_CN.qm delete mode 100644 translations/qt_help_zh_TW.qm delete mode 100644 translations/qt_iw.qm delete mode 100644 translations/qt_ja_JP.qm delete mode 100644 translations/qt_pl.qm delete mode 100644 translations/qt_pt.qm delete mode 100644 translations/qt_ru.qm delete mode 100644 translations/qt_sk.qm delete mode 100644 translations/qt_sv.qm delete mode 100644 translations/qt_uk.qm delete mode 100644 translations/qt_zh_CN.qm delete mode 100644 translations/qt_zh_TW.qm delete mode 100644 translations/qtconfig_pl.qm delete mode 100644 translations/qtconfig_zh_CN.qm delete mode 100644 translations/qtconfig_zh_TW.qm delete mode 100644 translations/qvfb_pl.qm delete mode 100644 translations/qvfb_zh_CN.qm delete mode 100644 translations/qvfb_zh_TW.qm create mode 100644 translations/translations.pro diff --git a/projects.pro b/projects.pro index 2596c0a..03ce098 100644 --- a/projects.pro +++ b/projects.pro @@ -37,7 +37,10 @@ for(PROJECT, $$list($$lower($$unique(QT_BUILD_PARTS)))) { } else:isEqual(PROJECT, docs) { contains(QT_BUILD_PARTS, tools):include(doc/doc.pri) } else:isEqual(PROJECT, translations) { - contains(QT_BUILD_PARTS, tools):include(translations/translations.pri) + contains(QT_BUILD_PARTS, tools) { + include(translations/translations.pri) # ts targets + SUBDIRS += translations # qm build step + } } else:isEqual(PROJECT, qmake) { # SUBDIRS += qmake } else { diff --git a/translations/assistant_adp_de.qm b/translations/assistant_adp_de.qm deleted file mode 100644 index 15ef713..0000000 Binary files a/translations/assistant_adp_de.qm and /dev/null differ diff --git a/translations/assistant_adp_ja.qm b/translations/assistant_adp_ja.qm deleted file mode 100644 index a3b4383..0000000 Binary files a/translations/assistant_adp_ja.qm and /dev/null differ diff --git a/translations/assistant_adp_pl.qm b/translations/assistant_adp_pl.qm deleted file mode 100644 index 1b144e1..0000000 Binary files a/translations/assistant_adp_pl.qm and /dev/null differ diff --git a/translations/assistant_adp_zh_CN.qm b/translations/assistant_adp_zh_CN.qm deleted file mode 100644 index 1685e47..0000000 Binary files a/translations/assistant_adp_zh_CN.qm and /dev/null differ diff --git a/translations/assistant_adp_zh_TW.qm b/translations/assistant_adp_zh_TW.qm deleted file mode 100644 index 8e055c4..0000000 Binary files a/translations/assistant_adp_zh_TW.qm and /dev/null differ diff --git a/translations/assistant_de.qm b/translations/assistant_de.qm deleted file mode 100644 index 5b31aea..0000000 Binary files a/translations/assistant_de.qm and /dev/null differ diff --git a/translations/assistant_pl.qm b/translations/assistant_pl.qm deleted file mode 100644 index 14560b3..0000000 Binary files a/translations/assistant_pl.qm and /dev/null differ diff --git a/translations/assistant_zh_CN.qm b/translations/assistant_zh_CN.qm deleted file mode 100644 index 22a770d..0000000 Binary files a/translations/assistant_zh_CN.qm and /dev/null differ diff --git a/translations/assistant_zh_TW.qm b/translations/assistant_zh_TW.qm deleted file mode 100644 index 41f320e..0000000 Binary files a/translations/assistant_zh_TW.qm and /dev/null differ diff --git a/translations/designer_de.qm b/translations/designer_de.qm deleted file mode 100644 index f9b0a03..0000000 Binary files a/translations/designer_de.qm and /dev/null differ diff --git a/translations/designer_ja.qm b/translations/designer_ja.qm deleted file mode 100644 index 6cf5f89..0000000 Binary files a/translations/designer_ja.qm and /dev/null differ diff --git a/translations/designer_pl.qm b/translations/designer_pl.qm deleted file mode 100644 index bf8d5f7..0000000 Binary files a/translations/designer_pl.qm and /dev/null differ diff --git a/translations/designer_zh_CN.qm b/translations/designer_zh_CN.qm deleted file mode 100644 index 9267123..0000000 Binary files a/translations/designer_zh_CN.qm and /dev/null differ diff --git a/translations/designer_zh_TW.qm b/translations/designer_zh_TW.qm deleted file mode 100644 index fd6460d..0000000 Binary files a/translations/designer_zh_TW.qm and /dev/null differ diff --git a/translations/linguist_de.qm b/translations/linguist_de.qm deleted file mode 100644 index a39c3bf..0000000 Binary files a/translations/linguist_de.qm and /dev/null differ diff --git a/translations/linguist_ja.qm b/translations/linguist_ja.qm deleted file mode 100644 index cdb7c1c..0000000 Binary files a/translations/linguist_ja.qm and /dev/null differ diff --git a/translations/linguist_pl.qm b/translations/linguist_pl.qm deleted file mode 100644 index 2604ffe..0000000 Binary files a/translations/linguist_pl.qm and /dev/null differ diff --git a/translations/linguist_zh_CN.qm b/translations/linguist_zh_CN.qm deleted file mode 100644 index d8081c5..0000000 Binary files a/translations/linguist_zh_CN.qm and /dev/null differ diff --git a/translations/linguist_zh_TW.qm b/translations/linguist_zh_TW.qm deleted file mode 100644 index 9477e56..0000000 Binary files a/translations/linguist_zh_TW.qm and /dev/null differ diff --git a/translations/qt_ar.qm b/translations/qt_ar.qm deleted file mode 100644 index 3d55bf4..0000000 Binary files a/translations/qt_ar.qm and /dev/null differ diff --git a/translations/qt_de.qm b/translations/qt_de.qm deleted file mode 100644 index 9ea09a7..0000000 Binary files a/translations/qt_de.qm and /dev/null differ diff --git a/translations/qt_es.qm b/translations/qt_es.qm deleted file mode 100644 index 0fa1226..0000000 Binary files a/translations/qt_es.qm and /dev/null differ diff --git a/translations/qt_fr.qm b/translations/qt_fr.qm deleted file mode 100644 index 5553086..0000000 Binary files a/translations/qt_fr.qm and /dev/null differ diff --git a/translations/qt_help_de.qm b/translations/qt_help_de.qm deleted file mode 100644 index e3d8d87..0000000 Binary files a/translations/qt_help_de.qm and /dev/null differ diff --git a/translations/qt_help_pl.qm b/translations/qt_help_pl.qm deleted file mode 100644 index bf7fd10..0000000 Binary files a/translations/qt_help_pl.qm and /dev/null differ diff --git a/translations/qt_help_zh_CN.qm b/translations/qt_help_zh_CN.qm deleted file mode 100644 index 11748b7..0000000 Binary files a/translations/qt_help_zh_CN.qm and /dev/null differ diff --git a/translations/qt_help_zh_TW.qm b/translations/qt_help_zh_TW.qm deleted file mode 100644 index b97aae4..0000000 Binary files a/translations/qt_help_zh_TW.qm and /dev/null differ diff --git a/translations/qt_iw.qm b/translations/qt_iw.qm deleted file mode 100644 index 59c1c7e..0000000 Binary files a/translations/qt_iw.qm and /dev/null differ diff --git a/translations/qt_ja_JP.qm b/translations/qt_ja_JP.qm deleted file mode 100644 index b695c97..0000000 Binary files a/translations/qt_ja_JP.qm and /dev/null differ diff --git a/translations/qt_pl.qm b/translations/qt_pl.qm deleted file mode 100644 index f6847d0..0000000 Binary files a/translations/qt_pl.qm and /dev/null differ diff --git a/translations/qt_pt.qm b/translations/qt_pt.qm deleted file mode 100644 index 253a007..0000000 Binary files a/translations/qt_pt.qm and /dev/null differ diff --git a/translations/qt_ru.qm b/translations/qt_ru.qm deleted file mode 100644 index 63b7b8b..0000000 Binary files a/translations/qt_ru.qm and /dev/null differ diff --git a/translations/qt_sk.qm b/translations/qt_sk.qm deleted file mode 100644 index a73ddc6..0000000 Binary files a/translations/qt_sk.qm and /dev/null differ diff --git a/translations/qt_sv.qm b/translations/qt_sv.qm deleted file mode 100644 index 6b1e9cf..0000000 Binary files a/translations/qt_sv.qm and /dev/null differ diff --git a/translations/qt_uk.qm b/translations/qt_uk.qm deleted file mode 100644 index 7cd604a..0000000 Binary files a/translations/qt_uk.qm and /dev/null differ diff --git a/translations/qt_zh_CN.qm b/translations/qt_zh_CN.qm deleted file mode 100644 index e73b0cd..0000000 Binary files a/translations/qt_zh_CN.qm and /dev/null differ diff --git a/translations/qt_zh_TW.qm b/translations/qt_zh_TW.qm deleted file mode 100644 index 699bd5c..0000000 Binary files a/translations/qt_zh_TW.qm and /dev/null differ diff --git a/translations/qtconfig_pl.qm b/translations/qtconfig_pl.qm deleted file mode 100644 index 1a2faa3..0000000 Binary files a/translations/qtconfig_pl.qm and /dev/null differ diff --git a/translations/qtconfig_zh_CN.qm b/translations/qtconfig_zh_CN.qm deleted file mode 100644 index 9998e81..0000000 Binary files a/translations/qtconfig_zh_CN.qm and /dev/null differ diff --git a/translations/qtconfig_zh_TW.qm b/translations/qtconfig_zh_TW.qm deleted file mode 100644 index 3d36679..0000000 Binary files a/translations/qtconfig_zh_TW.qm and /dev/null differ diff --git a/translations/qvfb_pl.qm b/translations/qvfb_pl.qm deleted file mode 100644 index 7230cb6..0000000 Binary files a/translations/qvfb_pl.qm and /dev/null differ diff --git a/translations/qvfb_zh_CN.qm b/translations/qvfb_zh_CN.qm deleted file mode 100644 index 5592f07..0000000 Binary files a/translations/qvfb_zh_CN.qm and /dev/null differ diff --git a/translations/qvfb_zh_TW.qm b/translations/qvfb_zh_TW.qm deleted file mode 100644 index b378ad8..0000000 Binary files a/translations/qvfb_zh_TW.qm and /dev/null differ diff --git a/translations/translations.pri b/translations/translations.pri index 0c5c1ee..c143043 100644 --- a/translations/translations.pri +++ b/translations/translations.pri @@ -8,16 +8,8 @@ defineReplace(prependAll) { return ($$result) } -defineReplace(fixPath) { -WIN { - return ($$replace($$1, /, \)) -} ELSE { - return ($$1) -} -} - -LUPDATE = $$fixPath($$QT_BUILD_TREE/bin/lupdate) -locations relative -no-ui-lines -LRELEASE = $$fixPath($$QT_BUILD_TREE/bin/lrelease) +LUPDATE = $$QT_BUILD_TREE/bin/lupdate -locations relative -no-ui-lines +win32:LUPDATE ~= s|/|\|g ###### Qt Libraries @@ -41,27 +33,18 @@ ts-qt.commands = (cd $$QT_SOURCE_TREE/src && $$LUPDATE \ -ts $$prependAll($$[QT_INSTALL_TRANSLATIONS]/qt_,$$QT_TS,.ts)) ts-qt.depends = sub-tools -qm-qt.commands = $$LRELEASE $$prependAll($$[QT_INSTALL_TRANSLATIONS]/qt_,$$QT_TS,.ts) -qm-qt.depends = sub-tools - ###### Designer ts-designer.commands = (cd $$QT_SOURCE_TREE/src && $$LUPDATE \ ../tools/designer/translations/translations.pro) ts-designer.depends = sub-tools -qm-designer.commands = $$LRELEASE $$QT_SOURCE_TREE/tools/designer/translations/translations.pro -qm-designer.depends = sub-tools - ###### Linguist ts-linguist.commands = (cd $$QT_SOURCE_TREE/src && $$LUPDATE \ ../tools/linguist/linguist/linguist.pro) ts-linguist.depends = sub-tools -qm-linguist.commands = $$LRELEASE $$QT_SOURCE_TREE/tools/linguist/linguist/linguist.pro -qm-linguist.depends = sub-tools - ###### Assistant ts-assistant.commands = (cd $$QT_SOURCE_TREE/src && $$LUPDATE \ @@ -72,36 +55,21 @@ ts-assistant.commands = (cd $$QT_SOURCE_TREE/src && $$LUPDATE \ ../tools/assistant/translations/translations_adp.pro) ts-assistant.depends = sub-tools -qm-assistant.commands = ($$LRELEASE $$QT_SOURCE_TREE/tools/assistant/translations/translations.pro \ - && $$LRELEASE \ - $$QT_SOURCE_TREE/tools/assistant/translations/qt_help.pro \ - && $$LRELEASE \ - $$QT_SOURCE_TREE/tools/assistant/translations/translations_adp.pro) -qm-assistant.depends = sub-tools - ###### Qtconfig ts-qtconfig.commands = (cd $$QT_SOURCE_TREE/src && $$LUPDATE \ ../tools/qtconfig/translations/translations.pro) ts-qtconfig.depends = sub-tools -qm-qtconfig.commands = $$LRELEASE $$QT_SOURCE_TREE/tools/qtconfig/translations/translations.pro -qm-qtconfig.depends = sub-tools - ###### Qvfp ts-qvfb.commands = (cd $$QT_SOURCE_TREE/src && $$LUPDATE \ ../tools/qvfb/translations/translations.pro) ts-qvfb.depends = sub-tools -qm-qvfb.commands = $$LRELEASE $$QT_SOURCE_TREE/tools/qvfb/translations/translations.pro -qm-qvfb.depends = sub-tools - ###### Overall Rules ts.depends = ts-qt ts-designer ts-linguist ts-assistant ts-qtconfig ts-qvfb -qm.depends = qm-qt qm-designer qm-linguist qm-assistant qm-qtconfig qm-qvfb QMAKE_EXTRA_TARGETS += ts-qt ts-designer ts-linguist ts-assistant ts-qtconfig ts-qvfb \ - qm-qt qm-designer qm-linguist qm-assistant qm-qtconfig qm-qvfb \ - ts qm + ts diff --git a/translations/translations.pro b/translations/translations.pro new file mode 100644 index 0000000..d1962fe --- /dev/null +++ b/translations/translations.pro @@ -0,0 +1,41 @@ +TRANSLATIONS = $$files(*.ts) + +LRELEASE = $$QT_BUILD_TREE/bin/lrelease +win32:LRELEASE ~= s|/|\|g + +contains(TEMPLATE_PREFIX, vc):vcproj = 1 + +TEMPLATE = app +TARGET = qm_phony_target +CONFIG -= qt separate_debug_info +QT = +LIBS = + +updateqm.input = TRANSLATIONS +updateqm.output = ${QMAKE_FILE_BASE}.qm +isEmpty(vcproj):updateqm.variable_out = PRE_TARGETDEPS +updateqm.commands = $$LRELEASE ${QMAKE_FILE_IN} -qm ${QMAKE_FILE_OUT} +updateqm.name = LRELEASE ${QMAKE_FILE_IN} +updateqm.CONFIG += no_link +QMAKE_EXTRA_COMPILERS += updateqm + +isEmpty(vcproj) { + QMAKE_LINK = @: IGNORE THIS LINE + OBJECTS_DIR = + win32:CONFIG -= embed_manifest_exe +} else { + CONFIG += console + PHONY_DEPS = . + phony_src.input = PHONY_DEPS + phony_src.output = phony.c + phony_src.variable_out = GENERATED_SOURCES + phony_src.commands = echo int main() { return 0; } > phony.c + phony_src.name = CREATE phony.c + phony_src.CONFIG += combine + QMAKE_EXTRA_COMPILERS += phony_src +} + +translations.path = $$[QT_INSTALL_TRANSLATIONS] +translations.files = $$TRANSLATIONS +translations.files ~= s,\\.ts$,.qm,g +INSTALLS += translations -- cgit v0.12 From c517f6aa06c98ba5fd2f6488cc49e9f66af86fc1 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Tue, 9 Jun 2009 15:10:06 +0200 Subject: remove dead code seems it was never used since the initial checkin Reviewed-by: mariusSO --- qmake/project.cpp | 8 -------- 1 file changed, 8 deletions(-) diff --git a/qmake/project.cpp b/qmake/project.cpp index 00bb2f0..4bb9cca 100644 --- a/qmake/project.cpp +++ b/qmake/project.cpp @@ -232,14 +232,6 @@ static QScriptValue qscript_projectWrapper(QScriptEngine *eng, QMakeProject *pro return ret; } -static QScriptValue qscript_toArray(QScriptEngine *eng, const QStringList &elts) -{ - QScriptValue a = eng->newArray(); - for (int i = 0; i < elts.count(); ++i) - a.setProperty(i, QScriptValue(eng, elts.at(i))); - return a; -} - QT_END_NAMESPACE #endif -- cgit v0.12 From 6c517a19c67164cab1b29654080b20cf8ff9b8cf Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Tue, 9 Jun 2009 15:14:19 +0200 Subject: remove strange no-op Reviewed-by: mariusSO --- qmake/generators/makefile.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/qmake/generators/makefile.cpp b/qmake/generators/makefile.cpp index 67e5bfb..b3b43da 100644 --- a/qmake/generators/makefile.cpp +++ b/qmake/generators/makefile.cpp @@ -289,7 +289,6 @@ MakefileGenerator::initOutPaths() if(Option::fixPathToLocalOS(d.absolutePath()) == Option::fixPathToLocalOS(Option::output_dir)) v.remove("DESTDIR"); } - QDir::current().cd(currentDir); } QMakeProject -- cgit v0.12 From 9d2e3f87aba9e87437c27ef94c9215f8b916bd6a Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Tue, 9 Jun 2009 15:10:45 +0200 Subject: do not append trailing slash to OUT_PWD in nested pro-files the top-level one doesn't have one, either, so this lead to inconsistent behavior depending on whether the pro was processed directly or from a SUBDIRS target. Reviewed-by: mariusSO --- qmake/generators/metamakefile.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/qmake/generators/metamakefile.cpp b/qmake/generators/metamakefile.cpp index 3f60791..adbe94a 100644 --- a/qmake/generators/metamakefile.cpp +++ b/qmake/generators/metamakefile.cpp @@ -332,8 +332,6 @@ SubdirsMetaMakefileGenerator::init() } qmake_setpwd(sub->input_dir); Option::output_dir = sub->output_dir; - if(Option::output_dir.at(Option::output_dir.length()-1) != QLatin1Char('/')) - Option::output_dir += QLatin1Char('/'); sub_proj->read(subdir.fileName()); if(!sub_proj->variables()["QMAKE_FAILED_REQUIREMENTS"].isEmpty()) { fprintf(stderr, "Project file(%s) not recursed because all requirements not met:\n\t%s\n", -- cgit v0.12 From 7a5f7db481b6d3743eb89fd127b1355b551e3668 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Tue, 9 Jun 2009 15:21:11 +0200 Subject: do not make PWD and OUT_PWD have trailing slashes upon returning from a SUBDIRS target they don't have initially, either. Reviewed-by: mariusSO --- qmake/generators/metamakefile.cpp | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/qmake/generators/metamakefile.cpp b/qmake/generators/metamakefile.cpp index adbe94a..1646b5b 100644 --- a/qmake/generators/metamakefile.cpp +++ b/qmake/generators/metamakefile.cpp @@ -289,12 +289,11 @@ SubdirsMetaMakefileGenerator::init() if(Option::recursive) { QString old_output_dir = QDir::cleanPath(Option::output_dir); - if(!old_output_dir.endsWith('/')) - old_output_dir += '/'; QString old_output = Option::output.fileName(); QString oldpwd = QDir::cleanPath(qmake_getpwd()); - if(!oldpwd.endsWith('/')) - oldpwd += '/'; + QString thispwd = oldpwd; + if(!thispwd.endsWith('/')) + thispwd += '/'; const QStringList &subdirs = project->values("SUBDIRS"); static int recurseDepth = -1; ++recurseDepth; @@ -314,8 +313,8 @@ SubdirsMetaMakefileGenerator::init() sub_name = subdir.baseName(); if(!subdir.isRelative()) { //we can try to make it relative QString subdir_path = subdir.filePath(); - if(subdir_path.startsWith(oldpwd)) - subdir = QFileInfo(subdir_path.mid(oldpwd.length())); + if(subdir_path.startsWith(thispwd)) + subdir = QFileInfo(subdir_path.mid(thispwd.length())); } //handle sub project -- cgit v0.12 From 41df2299dad9041b690f28251ba6381563cd3c6b Mon Sep 17 00:00:00 2001 From: Markus Goetz Date: Thu, 11 Jun 2009 16:47:02 +0200 Subject: Trafficinfo example: Asynchronous call to webservice at launch This makes the main window shown immediatly even when the webservice of traffikanten.no cannot be reached. Does not properly fix the associated task yet, e.g. display an error message. Task-number: 254455 --- examples/xmlpatterns/trafficinfo/mainwindow.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/examples/xmlpatterns/trafficinfo/mainwindow.cpp b/examples/xmlpatterns/trafficinfo/mainwindow.cpp index 47c51c9..c797373 100644 --- a/examples/xmlpatterns/trafficinfo/mainwindow.cpp +++ b/examples/xmlpatterns/trafficinfo/mainwindow.cpp @@ -69,16 +69,15 @@ MainWindow::MainWindow() setWindowTitle(tr("Traffic Info Oslo")); - QTimer *timer = new QTimer(this); - connect(timer, SIGNAL(timeout()), this, SLOT(updateTimeInformation())); - timer->start(1000*60*5); - const QSettings settings("Qt Software", "trafficinfo"); m_station = StationInformation(settings.value("stationId", "03012130").toString(), settings.value("stationName", "Nydalen [T-bane] (OSL)").toString()); m_lines = settings.value("lines", QStringList()).toStringList(); - updateTimeInformation(); + QTimer *timer = new QTimer(this); + connect(timer, SIGNAL(timeout()), this, SLOT(updateTimeInformation())); + timer->start(1000*60*5); + QMetaObject::invokeMethod(this, SLOT(updateTimeInformation()), Qt::QueuedConnection); } MainWindow::~MainWindow() -- cgit v0.12 From a982f7f4fa9b406c2736adf47752587691828ab4 Mon Sep 17 00:00:00 2001 From: Markus Goetz Date: Thu, 11 Jun 2009 17:08:21 +0200 Subject: Trafficinfo example: One more asynchronous call Task-number: 254455 --- examples/xmlpatterns/trafficinfo/stationdialog.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/xmlpatterns/trafficinfo/stationdialog.cpp b/examples/xmlpatterns/trafficinfo/stationdialog.cpp index 54ed904..6c3846b 100644 --- a/examples/xmlpatterns/trafficinfo/stationdialog.cpp +++ b/examples/xmlpatterns/trafficinfo/stationdialog.cpp @@ -125,7 +125,7 @@ StationDialog::StationDialog(const QString &name, const QStringList &lineNumbers m_ui.m_line4->setText(lineNumbers.at(i)); } - searchStations(); + QMetaObject::invokeMethod(this, SLOT(searchStations()), Qt::QueuedConnection); } StationInformation StationDialog::selectedStation() const -- cgit v0.12 From b255fc9cee00be96dc54a7b42c290aa5eac07d79 Mon Sep 17 00:00:00 2001 From: kh Date: Thu, 11 Jun 2009 17:25:42 +0200 Subject: We do only support files inside or in subdirs of the help project. Task-number: 255888 Reviewed-by: kh --- doc/src/qthelp.qdoc | 95 ++++++++++++++++++---------------- tools/assistant/lib/qhelpgenerator.cpp | 94 +++++++++++++++++---------------- 2 files changed, 99 insertions(+), 90 deletions(-) diff --git a/doc/src/qthelp.qdoc b/doc/src/qthelp.qdoc index 05bf3e3..2182606 100644 --- a/doc/src/qthelp.qdoc +++ b/doc/src/qthelp.qdoc @@ -96,7 +96,7 @@ generation of the compressed help file. As already mentioned, the Qt compressed help file contains all - data, so there is no need any longer to ship all single html + data, so there is no need any longer to ship all single html files. Instead, only the compressed help file and optionally the collection file has to be distributed. The collection file is optional since any existing collection file, e.g. from an older @@ -211,7 +211,7 @@ \section2 Using QHelpEngine API Instead of showing the help in an external application like the - Qt Assistant, it is also possible to embed the online help in + Qt Assistant, it is also possible to embed the online help in the application. The contents can then be retrieved via the QHelpEngine class and can be displayed in nearly any form. Showing it in a QTextBrowser is probably the most common way, but @@ -238,7 +238,7 @@ Qt Commercial Edition licensees that wish to distribute applications that use these features of the QtHelp module need to be aware of their - obligations under the GNU Lesser General Public License (LGPL). + obligations under the GNU Lesser General Public License (LGPL). Developers using the Open Source Edition can choose to redistribute the module under the appropriate version of the GNU LGPL; version 2.1 @@ -269,23 +269,23 @@ /*! \page qthelpproject.html \title Qt Help Project - + A Qt help project collects all data necessary to generate a compressed help file. Along with the actual help data, like the table of contents, index keywords and help documents, it contains some extra information like a namespace to identify the help file. One help project stands for one documentation, e.g. the Qt Assistant manual. - + \section1 Qt Help Project File Format - + The file format is XML based. For a better understanding of the format we'll discuss the following example: - + \snippet doc/src/snippets/code/doc_src_qthelp.qdoc 7 - + \section2 Namespace - + To enable the QHelpEngine to retrieve the proper documentation to a given link, every documentation set has to have a unique identifier. A unique identifier makes is also possible for the @@ -293,10 +293,10 @@ on its file name. The Qt help system uses a namespace as identifier which is defined by the mandatory namespace tags. In the example above, the namespace is "mycompany.com.myapplication.1_0". - + \target Virtual Folders \section2 Virtual Folders - + Having a namespace for every documentation naturally means that the documentation sets are quite separated. From the help engines point of view this is beneficial, but from the documentors view @@ -304,84 +304,86 @@ manual to another without having to specify absolute links. To solve this problem, the help system introduced the concept of virtual folders. - + A virtual folder will become the root directory of all files referenced in a compressed help file. When two documentations share the same virtual folder, they can use relative paths when defining hyperlinks pointing to the other documentation. If a file is contained in both documentations or manuals, the one from the current manual has precedence over the other. - + \snippet doc/src/snippets/code/doc_src_qthelp.qdoc 8 - + The above example specifies 'doc' as virtual folder. If another manual, e.g. for a small helper tool for 'My Application' specifies the same folder, it is sufficient to write 'doc.html#section1' to reference the first section in the 'My Application' manual. - + The virtual folder tag is mandatory and the folder must not contain any '/'. - + \target Custom Filters \section2 Custom Filters - + Next in the Qt help project file are the optional definitions of - custom filters. A custom filter contains a list of filter + custom filters. A custom filter contains a list of filter attributes which will be used later to display only the documentation which has all those attributes assigned to. So, when setting the current filter in the QHelpEngine to "My Application 1.0" only the documentation which has "myapp" and "1.0" set as filter attributes will be shown. - + \snippet doc/src/snippets/code/doc_src_qthelp.qdoc 9 - + It is possible to define any number of custom filters in a help project file. Important to know is, that the filter attributes have not to be specified in the same project file; they can be defined in any other help file. The definition of a filter attributes takes place by specifying them in a filter section. - + \target Filter Section - \section2 Filter Section - + \section2 Filter Section + A filter section contains the actual documentation. One Qt help project file may contain more than one filter sections. Every filter section consists of four parts, the filter attributes section, the table of contents, the keywords and the files list. In theory all parts are optional but not specifying anything there will result in an empty documentation. - + \section3 Filter Attributes - + Every filter section should have filter attributes assigned to it, to enable documentation filtering. If no filter attribute is defined, the documentation will only be shown if no filtering occurs, meaning the current custom filter in the QHelpEngine does not contain any filter attributes. - + \snippet doc/src/snippets/code/doc_src_qthelp.qdoc 10 - + In this case, the filter attributes 'myapp' and '1.0' are assigned to the filter section, i.e. all contents specified in this section will only be shown if the current custom filter has 'myapp' or '1.0' or both as filter attributes. - + \section3 Table of contents - + \snippet doc/src/snippets/code/doc_src_qthelp.qdoc 11 - + One section tag represents one item in the table of contents. The sections can be nested to any degree, but from a users perspective - it shouldn't be more than four or five levels. A section is defined - by its title and reference. The reference, like all file references - in a Qt help project file are relative to the help project file - itself. - + it should not be more than four or five levels. A section is defined + by its title and reference. The reference, like all file references in a Qt + help project, are relative to the help project file itself. + \note The referenced files must be inside the same directory (or within a + subdirectory) as the help project file. An absolute file path is not supported + either. + \section3 Keywords - + \snippet doc/src/snippets/code/doc_src_qthelp.qdoc 12 - + The keyword section lists all keywords of this filter section. A keyword consists basically of a name and a file reference. If the attribute 'name' is used then the keyword specified there will appear in @@ -389,15 +391,18 @@ If 'id' is used, the keyword does not appear in the index and is only accessible via the linksForIdentifier() function of the QHelpEngineCore. 'name' and 'id' can be specified at the same time. - + \section3 Files - + \snippet doc/src/snippets/code/doc_src_qthelp.qdoc 13 - + Finally, the actual documentation files have to be listed. Make sure - that all files neccessary to display the help are mentioned, i.e. - stylesheets or similar files need to be there as well. All listed files - will be compressed and written to the Qt compressed help file. So, in the - end, one single Qt help file contains all documentation files along with - the contents and indices. + that all files neccessary to display the help are mentioned, i.e. + stylesheets or similar files need to be there as well. The file, like all + file references in a Qt help project, are relative to the help project file + itself. All listed files will be compressed and written to the Qt compressed + help file. So, in the end, one single Qt help file contains all + documentation files along with the contents and indices. \note The + referenced files must be inside the same directory (or within a subdirectory) + as the help project file. An absolute file path is not supported either. */ diff --git a/tools/assistant/lib/qhelpgenerator.cpp b/tools/assistant/lib/qhelpgenerator.cpp index 03df3cc..8512adb 100644 --- a/tools/assistant/lib/qhelpgenerator.cpp +++ b/tools/assistant/lib/qhelpgenerator.cpp @@ -467,8 +467,9 @@ bool QHelpGenerator::insertFiles(const QStringList &files, const QString &rootPa emit statusChanged(tr("Insert files...")); QList filterAtts; - foreach (QString filterAtt, filterAttributes) { - d->query->prepare(QLatin1String("SELECT Id FROM FilterAttributeTable WHERE Name=?")); + foreach (const QString &filterAtt, filterAttributes) { + d->query->prepare(QLatin1String("SELECT Id FROM FilterAttributeTable " + "WHERE Name=?")); d->query->bindValue(0, filterAtt); d->query->exec(); if (d->query->next()) @@ -482,76 +483,76 @@ bool QHelpGenerator::insertFiles(const QStringList &files, const QString &rootPa if (filterSetId < 0) return false; ++filterSetId; - foreach (int attId, filterAtts) { - d->query->prepare(QLatin1String("INSERT INTO FileAttributeSetTable VALUES(?, ?)")); + foreach (const int &attId, filterAtts) { + d->query->prepare(QLatin1String("INSERT INTO FileAttributeSetTable " + "VALUES(?, ?)")); d->query->bindValue(0, filterSetId); d->query->bindValue(1, attId); d->query->exec(); } - QString title; - QString charSet; - QMap > tmpFileFilterMap; - QList fileNameDataList; - QList fileDataList; - int tableFileId = 1; d->query->exec(QLatin1String("SELECT MAX(Id) FROM FileDataTable")); if (d->query->next()) tableFileId = d->query->value(0).toInt() + 1; + QString title; + QString charSet; FileNameTableData fileNameData; + QList fileDataList; + QMap > tmpFileFilterMap; + QList fileNameDataList; int i = 0; - foreach (QString file, files) { - QFileInfo fi(rootPath + QDir::separator() + file); + foreach (const QString &file, files) { + const QString fileName = QDir::cleanPath(file); + if (fileName.startsWith(QLatin1String("../"))) { + emit warning(tr("The referenced file %1 must be inside or within a " + "subdirectory of (%2). Skipping it.").arg(fileName).arg(rootPath)); + continue; + } + + QFile fi(rootPath + QDir::separator() + fileName); if (!fi.exists()) { emit warning(tr("The file %1 does not exist! Skipping it.") - .arg(fi.absoluteFilePath())); + .arg(QDir::cleanPath(rootPath + QDir::separator() + fileName))); continue; } - QFile f(fi.absoluteFilePath()); - if (!f.open(QIODevice::ReadOnly)) { + if (!fi.open(QIODevice::ReadOnly)) { emit warning(tr("Cannot open file %1! Skipping it.") - .arg(fi.absoluteFilePath())); + .arg(QDir::cleanPath(rootPath + QDir::separator() + fileName))); continue; } - title.clear(); - QByteArray data; - data = f.readAll(); - - if (fi.suffix() == QLatin1String("html") || fi.suffix() == QLatin1String("htm")) { - charSet = QHelpGlobal::charsetFromData(data); - QTextStream stream(&data); - stream.setCodec(QTextCodec::codecForName(charSet.toLatin1().constData())); - title = QHelpGlobal::documentTitle(stream.readAll()); + QByteArray data = fi.readAll(); + if (fileName.endsWith(QLatin1String(".html")) + || fileName.endsWith(QLatin1String(".htm"))) { + charSet = QHelpGlobal::charsetFromData(data); + QTextStream stream(&data); + stream.setCodec(QTextCodec::codecForName(charSet.toLatin1().constData())); + title = QHelpGlobal::documentTitle(stream.readAll()); } else { title = fi.fileName(); } - QString fName = QDir::cleanPath(file); - if (fName.startsWith(QLatin1String("./"))) - fName = fName.mid(2); - int fileId = -1; - if (!d->fileMap.contains(fName)) { + if (!d->fileMap.contains(fileName)) { fileDataList.append(qCompress(data)); - fileNameData.name = fName; + fileNameData.name = fileName; fileNameData.fileId = tableFileId; fileNameData.title = title; fileNameDataList.append(fileNameData); - d->fileMap.insert(fName, tableFileId); + d->fileMap.insert(fileName, tableFileId); d->fileFilterMap.insert(tableFileId, filterAtts.toSet()); tmpFileFilterMap.insert(tableFileId, filterAtts.toSet()); ++tableFileId; } else { - fileId = d->fileMap.value(fName); - foreach (int filter, filterAtts) { + fileId = d->fileMap.value(fileName); + foreach (const int &filter, filterAtts) { if (!d->fileFilterMap.value(fileId).contains(filter) && !tmpFileFilterMap.value(fileId).contains(filter)) { d->fileFilterMap[fileId].insert(filter); @@ -565,20 +566,22 @@ bool QHelpGenerator::insertFiles(const QStringList &files, const QString &rootPa d->query->exec(QLatin1String("BEGIN")); QMap >::const_iterator it = tmpFileFilterMap.constBegin(); while (it != tmpFileFilterMap.constEnd()) { - QSet::const_iterator i = it.value().constBegin(); - while (i != it.value().constEnd()) { - d->query->prepare(QLatin1String("INSERT INTO FileFilterTable VALUES(?, ?)")); - d->query->bindValue(0, *i); + QSet::const_iterator si = it.value().constBegin(); + while (si != it.value().constEnd()) { + d->query->prepare(QLatin1String("INSERT INTO FileFilterTable " + "VALUES(?, ?)")); + d->query->bindValue(0, *si); d->query->bindValue(1, it.key()); d->query->exec(); - ++i; + ++si; } ++it; } QList::const_iterator fileIt = fileDataList.constBegin(); while (fileIt != fileDataList.constEnd()) { - d->query->prepare(QLatin1String("INSERT INTO FileDataTable VALUES (Null, ?)")); + d->query->prepare(QLatin1String("INSERT INTO FileDataTable VALUES " + "(Null, ?)")); d->query->bindValue(0, *fileIt); d->query->exec(); ++fileIt; @@ -586,10 +589,11 @@ bool QHelpGenerator::insertFiles(const QStringList &files, const QString &rootPa addProgress(d->fileStep*20.0); } - QList::const_iterator fileNameIt = fileNameDataList.constBegin(); + QList::const_iterator fileNameIt = + fileNameDataList.constBegin(); while (fileNameIt != fileNameDataList.constEnd()) { - d->query->prepare(QLatin1String("INSERT INTO FileNameTable (FolderId, Name, FileId, Title) " - " VALUES (?, ?, ?, ?)")); + d->query->prepare(QLatin1String("INSERT INTO FileNameTable " + "(FolderId, Name, FileId, Title) VALUES (?, ?, ?, ?)")); d->query->bindValue(0, 1); d->query->bindValue(1, (*fileNameIt).name); d->query->bindValue(2, (*fileNameIt).fileId); @@ -609,8 +613,8 @@ bool QHelpGenerator::insertFiles(const QStringList &files, const QString &rootPa return false; } -bool QHelpGenerator::registerCustomFilter(const QString &filterName, const QStringList &filterAttribs, - bool forceUpdate) +bool QHelpGenerator::registerCustomFilter(const QString &filterName, + const QStringList &filterAttribs, bool forceUpdate) { if (!d->query) return false; -- cgit v0.12 From 1f670c3699f259f0a7e4a0cd1e7aa48be3388ee7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Trond=20Kjern=C3=A5sen?= Date: Thu, 11 Jun 2009 17:52:52 +0200 Subject: Fixed the pen dash patterns for Mac. The predefined dash patterns for Mac have always been off, compared to the ones in the raster engine and the GL engine. Task-number: 255292 Reviewed-by: Kim --- src/gui/painting/qpaintengine_mac.cpp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/gui/painting/qpaintengine_mac.cpp b/src/gui/painting/qpaintengine_mac.cpp index 5889388..5a0e84a1 100644 --- a/src/gui/painting/qpaintengine_mac.cpp +++ b/src/gui/painting/qpaintengine_mac.cpp @@ -1496,23 +1496,23 @@ QCoreGraphicsPaintEnginePrivate::setStrokePen(const QPen &pen) for(int i = 0; i < customs.size(); ++i) linedashes.append(customs.at(i)); } else if(pen.style() == Qt::DashLine) { - linedashes.append(3); - linedashes.append(1); + linedashes.append(4); + linedashes.append(2); } else if(pen.style() == Qt::DotLine) { linedashes.append(1); - linedashes.append(1); + linedashes.append(2); } else if(pen.style() == Qt::DashDotLine) { - linedashes.append(3); - linedashes.append(1); - linedashes.append(1); + linedashes.append(4); + linedashes.append(2); linedashes.append(1); + linedashes.append(2); } else if(pen.style() == Qt::DashDotDotLine) { - linedashes.append(3); - linedashes.append(1); - linedashes.append(1); - linedashes.append(1); + linedashes.append(4); + linedashes.append(2); linedashes.append(1); + linedashes.append(2); linedashes.append(1); + linedashes.append(2); } const CGFloat cglinewidth = pen.widthF() <= 0.0f ? 1.0f : float(pen.widthF()); for(int i = 0; i < linedashes.size(); ++i) { -- cgit v0.12 From 82a32d2e0fb603d5ebe4e0958ff68501b1f1b75b Mon Sep 17 00:00:00 2001 From: Denis Dzyubenko Date: Fri, 5 Jun 2009 11:22:51 +0200 Subject: Doc fix: add a link to focus() and focusWidget() from QWidget::setFocus documentation. Reviewed-by: TrustMe --- src/gui/kernel/qwidget.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gui/kernel/qwidget.cpp b/src/gui/kernel/qwidget.cpp index baf3278..ae00d65 100644 --- a/src/gui/kernel/qwidget.cpp +++ b/src/gui/kernel/qwidget.cpp @@ -5687,8 +5687,8 @@ bool QWidget::hasFocus() const called from focusOutEvent() or focusInEvent(), you may get an infinite recursion. - \sa hasFocus(), clearFocus(), focusInEvent(), focusOutEvent(), - setFocusPolicy(), QApplication::focusWidget(), grabKeyboard(), + \sa focus(), hasFocus(), clearFocus(), focusInEvent(), focusOutEvent(), + setFocusPolicy(), focusWidget(), QApplication::focusWidget(), grabKeyboard(), grabMouse(), {Keyboard Focus} */ -- cgit v0.12 From 8a745d2a1048ba922232530d36c2fd01d4c92159 Mon Sep 17 00:00:00 2001 From: Denis Dzyubenko Date: Tue, 9 Jun 2009 11:07:22 +0200 Subject: Copy-paste didn't work for application on non-first screen in multiscreen setup. We need to subscribe to xfixes selection notify events on all available screens. Also implemented delayed subscription to xfixes events since we don't really need clipboard change notifications unless the application explicitely asked for by (i.e. created a qclipboard object). Task-number: 255609 Reviewed-by: Bradley T. Hughes --- src/gui/kernel/qapplication_x11.cpp | 8 -------- src/gui/kernel/qclipboard_x11.cpp | 14 ++++++++++++++ 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/gui/kernel/qapplication_x11.cpp b/src/gui/kernel/qapplication_x11.cpp index 12155f0..33a896a 100644 --- a/src/gui/kernel/qapplication_x11.cpp +++ b/src/gui/kernel/qapplication_x11.cpp @@ -2057,14 +2057,6 @@ void qt_init(QApplicationPrivate *priv, int, X11->xfixes_major = major; } } - if (X11->use_xfixes && X11->ptrXFixesSelectSelectionInput) { - const unsigned long eventMask = - XFixesSetSelectionOwnerNotifyMask | XFixesSelectionWindowDestroyNotifyMask | XFixesSelectionClientCloseNotifyMask; - X11->ptrXFixesSelectSelectionInput(X11->display, QX11Info::appRootWindow(0), - XA_PRIMARY, eventMask); - X11->ptrXFixesSelectSelectionInput(X11->display, QX11Info::appRootWindow(0), - ATOM(CLIPBOARD), eventMask); - } #endif // QT_NO_XFIXES #ifndef QT_NO_XCURSOR diff --git a/src/gui/kernel/qclipboard_x11.cpp b/src/gui/kernel/qclipboard_x11.cpp index 089cc43..4560357 100644 --- a/src/gui/kernel/qclipboard_x11.cpp +++ b/src/gui/kernel/qclipboard_x11.cpp @@ -428,6 +428,20 @@ QClipboard::QClipboard(QObject *parent) // XFixesSelectionNotify events when someone changes the // clipboard. (void)QApplication::desktop(); + +#ifndef QT_NO_XFIXES + if (X11->use_xfixes && X11->ptrXFixesSelectSelectionInput) { + const unsigned long eventMask = + XFixesSetSelectionOwnerNotifyMask | XFixesSelectionWindowDestroyNotifyMask | XFixesSelectionClientCloseNotifyMask; + for (int i = 0; i < X11->screenCount; ++i) { + X11->ptrXFixesSelectSelectionInput(X11->display, QX11Info::appRootWindow(i), + XA_PRIMARY, eventMask); + X11->ptrXFixesSelectSelectionInput(X11->display, QX11Info::appRootWindow(i), + ATOM(CLIPBOARD), eventMask); + } + } +#endif // QT_NO_XFIXES + if (X11->time == CurrentTime) { // send a dummy event to myself to get the timestamp from X11. qt_init_timestamp_data data; -- cgit v0.12 From d2b1c2d1c9cf5375d7e1cb7e1b08420eb00bada8 Mon Sep 17 00:00:00 2001 From: "Bradley T. Hughes" Date: Fri, 12 Jun 2009 11:08:05 +0200 Subject: keep CONFIG+=silent working with the new translations.pro file --- mkspecs/features/silent.prf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mkspecs/features/silent.prf b/mkspecs/features/silent.prf index 66b4bb7..141e6bf 100644 --- a/mkspecs/features/silent.prf +++ b/mkspecs/features/silent.prf @@ -1,6 +1,6 @@ !macx-xcode { QMAKE_CC = @echo compiling $< && $$QMAKE_CC QMAKE_CXX = @echo compiling $< && $$QMAKE_CXX - QMAKE_LINK = @echo linking $@ && $$QMAKE_LINK + !contains(QMAKE_LINK, "@:"):QMAKE_LINK = @echo linking $@ && $$QMAKE_LINK QMAKE_LINK_SHLIB = @echo linking $@ && $$QMAKE_LINK_SHLIB } -- cgit v0.12 From 8d1f218f6b11cff798bcd0b3123a2fe38c4a4142 Mon Sep 17 00:00:00 2001 From: Leonardo Sobral Cunha Date: Fri, 5 Jun 2009 13:46:29 +0200 Subject: QGraphicsItem::setOpacity(0.0) does not trigger an update of child items Forwarding the ignoreOpacity flag to children in QGraphicsItemPrivate::fullUpdateHelper. This is a complementary fix to task 252913, partly fixed in commit 2e3a5ea44... Reviewed-by: bnilsen BT: yes --- src/gui/graphicsview/qgraphicsitem.cpp | 2 +- tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp | 51 +++++++++++++++++++++++++- 2 files changed, 51 insertions(+), 2 deletions(-) diff --git a/src/gui/graphicsview/qgraphicsitem.cpp b/src/gui/graphicsview/qgraphicsitem.cpp index e8ace65..7b1967b 100644 --- a/src/gui/graphicsview/qgraphicsitem.cpp +++ b/src/gui/graphicsview/qgraphicsitem.cpp @@ -3721,7 +3721,7 @@ void QGraphicsItemPrivate::fullUpdateHelper(bool childrenOnly, bool maybeDirtyCl } } foreach (QGraphicsItem *child, children) - child->d_ptr->fullUpdateHelper(false, maybeDirtyClipPath); + child->d_ptr->fullUpdateHelper(false, maybeDirtyClipPath, ignoreOpacity); dirtyChildren = 1; } diff --git a/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp b/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp index 34a6ab1..3017407 100644 --- a/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp +++ b/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp @@ -207,6 +207,7 @@ private slots: void opacity_data(); void opacity(); void opacity2(); + void opacityZeroUpdates(); void itemStacksBehindParent(); void nestedClipping(); void nestedClippingTransforms(); @@ -5498,7 +5499,7 @@ void tst_QGraphicsItem::itemTransform_unrelated() QCOMPARE(stranger1->itemTransform(stranger2).map(QPointF(10, 10)), QPointF(10, 10)); QCOMPARE(stranger2->itemTransform(stranger1).map(QPointF(10, 10)), QPointF(10, 10)); } - + void tst_QGraphicsItem::opacity_data() { QTest::addColumn("p_opacity"); @@ -5693,6 +5694,54 @@ void tst_QGraphicsItem::opacity2() QCOMPARE(grandChild->repaints, 0); } +void tst_QGraphicsItem::opacityZeroUpdates() +{ + EventTester *parent = new EventTester; + EventTester *child = new EventTester(parent); + + child->setPos(10, 10); + + QGraphicsScene scene; + scene.addItem(parent); + + class MyGraphicsView : public QGraphicsView + { public: + int repaints; + QRegion paintedRegion; + MyGraphicsView(QGraphicsScene *scene) : QGraphicsView(scene), repaints(0) {} + void paintEvent(QPaintEvent *e) + { + ++repaints; + paintedRegion += e->region(); + QGraphicsView::paintEvent(e); + } + void reset() { repaints = 0; paintedRegion = QRegion(); } + }; + + MyGraphicsView view(&scene); + view.show(); +#ifdef Q_WS_X11 + qt_x11_wait_for_window_manager(&view); +#endif + QTest::qWait(250); + + view.reset(); + parent->setOpacity(0.0); + + QTest::qWait(200); + + // transforming items bounding rect to view coordinates + const QRect childDeviceBoundingRect = child->deviceTransform(view.viewportTransform()) + .mapRect(child->boundingRect()).toRect(); + const QRect parentDeviceBoundingRect = parent->deviceTransform(view.viewportTransform()) + .mapRect(parent->boundingRect()).toRect(); + + QRegion expectedRegion = parentDeviceBoundingRect.adjusted(-2, -2, 2, 2); + expectedRegion += childDeviceBoundingRect.adjusted(-2, -2, 2, 2); + + QCOMPARE(view.paintedRegion, expectedRegion); +} + void tst_QGraphicsItem::itemStacksBehindParent() { QGraphicsRectItem *parent1 = new QGraphicsRectItem(QRectF(0, 0, 100, 50)); -- cgit v0.12 From 304bf2ef0a99882d2d969347f85a330523086fb3 Mon Sep 17 00:00:00 2001 From: Leonardo Sobral Cunha Date: Fri, 12 Jun 2009 11:59:50 +0200 Subject: Changes for 4.5.2 --- dist/changes-4.5.2 | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/dist/changes-4.5.2 b/dist/changes-4.5.2 index c2dda0f..bc07c14 100644 --- a/dist/changes-4.5.2 +++ b/dist/changes-4.5.2 @@ -98,6 +98,13 @@ Third party components - QFontDialog * [252000] Ensure that QFontDialog::getFont() works on Mac OS X. +- QGraphicsItem + * [197802] Dont show children when parent is not visible + * [252913] QGraphicsItem::setOpacity(0.0) does not trigger an update + +- QGraphicsView + * [253415] Reset the 'connectedToScene' flag when changing the scene of a view + - QGraphicsWidget * Fixed a bug with Qt::WidgetWithChildren shortcut context. -- cgit v0.12 From d5c16071ac414e4dd40d8742403b675b2cdefa55 Mon Sep 17 00:00:00 2001 From: Geir Vattekar Date: Fri, 12 Jun 2009 14:25:13 +0200 Subject: Doc: Work on the 4.5.2 changes file. Reviewed-by: David Boddie --- dist/changes-4.5.2 | 276 ++++++++++++++++++++++++----------------------------- 1 file changed, 124 insertions(+), 152 deletions(-) diff --git a/dist/changes-4.5.2 b/dist/changes-4.5.2 index c2dda0f..53cde56 100644 --- a/dist/changes-4.5.2 +++ b/dist/changes-4.5.2 @@ -1,5 +1,5 @@ Qt 4.5.2 is a bug-fix release. It maintains both forward and backward -compatibility (source and binary) with Qt 4.5.0. For more details, +compatibility (source and binary) with Qt 4.5.0. For more details, refer to the online documentation included in this distribution. The documentation is also available online: @@ -27,9 +27,6 @@ General Improvements * Added a new example (fancy browser) which shows how to use jQuery in QtWebKit. -Third party components ----------------------- - **************************************************************************** * Library * @@ -48,39 +45,46 @@ Third party components - QtDBus * [236955] Fixed an issue that would cause QtDBus to crash when - relaying a signal emitted from a class under certain conditions + relaying a signal emitted from a class under certain conditions. - QAbstractItemView - * [250754] Changing the font of the view would not update the size of the - items if there is an application stylesheet. - * [252532] Pressing enter in a QPlainTextEdit embedded on a itemview now - insert a newline + * [250754] Changing the font of the view did not update the size of the + items if there was an application stylesheet. + * [252532] Pressing enter in a QPlainTextEdit embedded in an itemview + now inserts a newline - QAbstractNetworkCache - * Only cache responses to HTTP GET by default, not HTTP PUT or POST + * Only cache responses to HTTP GET by default, not HTTP PUT or POST. - QApplication - * [249589] Fixed bug that prevented any part of the application to receive - focus when Graphics View was disabled using QT_NO_GRAPHICSVIEW. + * [249589] Fixed bug that prevented any part of the application to + receive focus when Graphics View was disabled using + QT_NO_GRAPHICSVIEW. - QComboBox * [253944] Changing the style doesn't reset custom item delegate anymore. - * [254589] Fixed the frame appearing if setting a stylesheet with a border - on the embedded itemview while there is a stylesheet on the application + * [254589] Fixed the frame appearing if setting a stylesheet with a + border on the embedded itemview while there is a stylesheet on the + application. - QDir * Fix reentrency (listing directories in different threads) - QFileSystemModel - * [254701] QFileSystemModel doesn't sort subfolders when using it in a QTreeView - * [251295] Windows path names incorrectly constructed in calls to updateIcon() + * [254701] QFileSystemModel doesn't sort subfolders when being used in a + QTreeView. + * [251295] Windows path names incorrectly constructed in calls to + updateIcon(). - QFileDialog - * [251341] It is not possible to remove a directory of the sidebar if the directory does not exist - * [251321] Hidden path in QFileDialog's sidebar cannot be opened - * [226483] setSidebarUrls() handles the urls case sensitive so that adding the same directory twice is possible - Windows - * [252068] QFileDialog with QSortFilterProxyModel crashes - * [254490] QFileDialog selectFile doesn't clear the selection if we call it several times. + * [251341] It is not possible to remove a directory in the sidebar if the + directory does not exist. + * [251321] Hidden path in QFileDialog's sidebar cannot be opened. + * [226483] setSidebarUrls() handles the urls case sensitive so that + adding the same directory twice is possible - Windows. + * [252068] QFileDialog with QSortFilterProxyModel crashes. + * [254490] QFileDialog selectFile() doesn't clear the selection if we + call it several times. - QGtkStyle * [250731] Fixed a build issue with glib version lower than 2.3.2 @@ -89,7 +93,8 @@ Third party components reported with certain versions of Gtk+. - QMacStyle - * [253339] Don't draw arrows on toolbuttons that have a menu and text only. + * [253339] Don't draw arrows on toolbuttons that have a menu and text + only. * [252301] Ensure that small and mini spin boxes are drawn correctly. - QMotifStyle @@ -102,31 +107,33 @@ Third party components * Fixed a bug with Qt::WidgetWithChildren shortcut context. - QLocalSocket - * [247144] correctly handle remote disconnects + * [247144] correctly handle remote disconnects. - QNetworkCookie - * [251959] fix parsing of multiple cookies separated by a newline + * [251959] fix parsing of multiple cookies separated by a newline. - QNetworkCookieJar - * [251467] do not allow cookies for domains like ".com" - * [228974] allow cookies whose domain attribute is missing a leading dot + * [251467] do not allow cookies for domains like ".com". + * [228974] allow cookies whose domain attribute is missing a leading + dot. - QNetworkAccessManager * [248838] Make QNetworkAccessManager reject invalid HTTP input - earlier + earlier. - QWidget - * [250668] Don't send extra wheel events when using the scroll wheel in Cocoa. - * [253448] Prevent a crash when using the Qt::WA_MacBrushedMetal attribute - in conjunction with style sheets. + * [250668] Don't send extra wheel events when using the scroll wheel in + Cocoa. + * [253448] Prevent a crash when using the Qt::WA_MacBrushedMetal + attribute in conjunction with style sheets. - QWizard - * [252662] Fixed crash that could happen when compiling on Windows XP and - running on older Windows versions like 98 and 2000. + * [252662] Fixed crash that could happen when compiling on Windows XP + and running on older Windows versions like 98 and 2000. - QObject * Fixed possible race condition if two QObject connected together with - signals and slot are destroyed in different threads + signals and slots are destroyed in different threads. - QPainter * [253783] Fixed text shaping bugs when using ligatures and different @@ -141,32 +148,37 @@ Third party components perspective transforms. - QProgressBar - * [252283] Fixed busy indicator for a QProgressBar with a style sheet applied to it. + * [252283] Fixed busy indicator for a QProgressBar with a style sheet + applied to it. - QSelectionModel - * [252069] fix QSelectionModel::rowIntersectsSelection or QSelectionModel::columnsIntersectsSelection not reporting right result if some items are disabled. + * [252069] Fix QSelectionModel::rowIntersectsSelection or + QSelectionModel::columnsIntersectsSelection not reporting right result + if some items are disabled. - QSortFilterProxyModel * [250023] Fixes QSortFilterProxyModel not reporting child if the model - need to fetchMore + needs to fetchMore(). * [251296] In dynamic filter model, childs of temporarly filtered items - where not correctly updated. - * [252507] Show a warning instead of crashing if invalid indexes are passed. - * [254234] Fixed setDynamicSortFilter not working when setting the model initially + were not correctly updated. + * [252507] Show a warning instead of crashing if invalid indexes are + passed. + * [254234] Fixed setDynamicSortFilter not working when setting the model + initially. - QString - * Fixed reentrency of QString::squeeze() + * Fixed reentrency of QString::squeeze(). - QTabBar - * [252472] Fixed problem with the current tab not being visible after calling - setTabButton() on a scrolled tab bar. + * [252472] Fixed problem with the current tab not being visible after + calling setTabButton() on a scrolled tab bar. - QTransform * Fixed issue in QTransform::type() causing a projective transform to be treated as a scaling transform. - QVector - * Fixed reentrency of QVector::reserve() + * Fixed reentrency of QVector::reserve(). - QtOpenGL * [247083] Re-enabled antialiasing for large font sizes in OpenGL paint @@ -177,81 +189,86 @@ Third party components when drawing text. - QCssParser - * [252311] "font-family:" now handle fallback font specified with a comas - separated list. + * [252311] "font-family:" now handle fallback font specified with a + comma separated list. - QFile and QTemporaryFile - * Fixed a leak of file descriptors in QTemporaryFile::rename, introduced in 4.5.1 - * [165920] QFile::copy leaves the source file open after the file has been copied - * [191467] & [252293] QFile::copy of resource files to the filesystem fails on Windows - * [197857] QFile::copy of resource files leaves temporary files on filesystem - * [248223] QTemporaryFile: Access denied error when (re-)opening through QFile interface - * [252659] QTemporaryFile::rename may leave source file behind + * Fixed a leak of file descriptors in QTemporaryFile::rename, + introduced in 4.5.1 + * [165920] QFile::copy leaves the source file open after the file has + been copied. + * [191467] & [252293] QFile::copy of resource files to the filesystem + fails on Windows. + * [197857] QFile::copy of resource files leaves temporary files on + filesystem. + * [248223] QTemporaryFile: Access denied error when (re-)opening through + QFile interface. + * [252659] QTemporaryFile::rename may leave source file behind. - QByteArrayMatcher - * [251958] Assignment operator and copy constructor miss data + * [251958] Assignment operator and copy constructor miss data. - QCompleter - * [253125] QCompleter doesn't expand entries with UnfilteredPopupCompletion + * [253125] QCompleter doesn't expand entries with + UnfilteredPopupCompletion. - QPrintDialog - * [253135] Crash in QPrintDialog when editing output filename + * [253135] Crash in QPrintDialog when editing output filename. * [252873] Fixed an issue that could cause QPrintDialog to invalidate a valid QPrinter object. * [224728] Fixed an issue under X11 where QPrintDialog didn't update - the print-to-file state, if it was passed a QPrinter set up to + the print-to-file state if it was passed a QPrinter set up to print PDF or PostScript. - QPrinter * [252873] Fixed an issue with QPrinter::NativeFormat printers not being valid. - * [248881] Fixed an issue under Windows where QPrinter::pageRect() returned - the wrong rect when QPrinter::fullPage() was set. + * [248881] Fixed an issue under Windows where QPrinter::pageRect() + returned the wrong rect when QPrinter::fullPage() was set. * [199271] Fixed an issue with QPrinter::setPrinterName()/printerName() on Mac. - QSvg - * [253614] Fixed an issue with parsing the 'stroke-dasharray' SVG attribute. + * [253614] Fixed an issue with parsing the 'stroke-dasharray' SVG + attribute. - QSvgIconEngine - * [251106] Fixed an issue that would cause QIcon::actualSize() to reparse - the SVG file for each acutalSize() call, until QIcon::pixmap() was called. - * [248848] Fixed an issue that would cause QIcon::pixmap() to reparse the - SVG file, even though there was a cached pixmap for that size available. + * [251106] Fixed an issue that caused QIcon::actualSize() to reparse + the SVG file for each acutalSize() call until QIcon::pixmap() was + called. + * [248848] Fixed an issue that would cause QIcon::pixmap() to reparse + the SVG file, even though there was a cached pixmap for that size + available. - QToolButton * [252554] Fixed a problem where text labels would be partially clipped when using Qt::ToolButtonTextUnderIcon. **************************************************************************** -* Database Drivers * -**************************************************************************** - - -**************************************************************************** * Platform Specific Changes * **************************************************************************** Qt for Linux/X11 ---------------- [253186] Fixed compile error in qfontengine_ft.cpp on 64-bit platforms with -legacy freetype headers. + legacy freetype headers. [241361] Prevented asynchronous access to non-thread safe libfontconfig API. -[244362] Worked around X server crash when calling XFillPolygon with more than - 200000 points by falling back to raster paint engine. +[244362] Worked around X server crash when calling XFillPolygon with more + than 200000 points by falling back to raster paint engine. [250326] Titlebar wasn't shown on X11 with Qt::CustomizeWindowHint for - fixed-size windows. + fixed-size windows. [251925] Improved showing QMessageBox on small screens. [252042] Fixed the loading of the OpenSSL libraries on OpenBSD. -[255311] Fixed an issue with '-graphicssystem raster' on 8 and 16 bit X servers. -[252328] Fixed an issue when rendering old XLFD fonts on X11 with Xrender and - fontconfig enabled. -[248720] Fixed an issue with using '-graphicssystem raster' on X servers with - BGR color layout. +[255311] Fixed an issue with '-graphicssystem raster' on 8 and 16 bit X + servers. +[252328] Fixed an issue when rendering old XLFD fonts on X11 with Xrender + and fontconfig enabled. +[248720] Fixed an issue with using '-graphicssystem raster' on X servers + with BGR color layout. [196152] Fixed a problem with QPixmap::toImage() on big endian systems that would cause the R and B channels to be swapped for 32 bit pixmaps. [251928] Made the file dialog show suffixes if no filter name is provided -when using the GTK+ file dialog. + when using the GTK+ file dialog. Qt for Windows -------------- @@ -261,46 +278,33 @@ Fixed an issue with text rendering in 16 bit mode. [246196] Fixed an issue with clipped glyphs when rendering text with certain fonts. [251259] Switching to another app left text cursor in line edits with - QtMfc framework. + QtMfc framework. [253367] Fixed a memory leak when loading system icons on Windows. Qt for Mac OS X --------------- -[252795] Ensure that we send Apple Events in the Cocoa port even when Cocoa isn't ready. +[252795] Ensure that we send Apple Events in the Cocoa port even when Cocoa + isn't ready. [252176] Fix regression in drawing parts of pixmaps on Panther. -[253402] Fix a crash when a Cocoa window that used to be a QWidget would get events - after the QWidget was destroyed. +[253402] Fix a crash when a Cocoa window that used to be a QWidget would get + events after the QWidget was destroyed. [249178] Fixed an issue with drawing text to QImages on Mac/Cocoa. -[250066] Fixed an issue that caused reparenting of QGLWidgets to output warnings - on Mac/Cocoa. - - -Qt for Embedded Linux ---------------------- - +[250066] Fixed an issue that caused reparenting of QGLWidgets to output + warnings on Mac/Cocoa. Qt for Windows CE ----------------- [248846] Handle the back soft key on Windows mobile. [252319] Fix regression in native menu integration. -[242484] Fixed crash if Qt::WindowCancelButtonHint is used for a QDialog - - -**************************************************************************** -* Compiler Specific Changes * -**************************************************************************** - +[242484] Fixed crash if Qt::WindowCancelButtonHint is used for a QDialog. **************************************************************************** * Tools * **************************************************************************** - Build System - * [253053] Linker in macx-g++42 spec is gcc instead of gcc-4.2 - -- Assistant - + * [253053] Linker in macx-g++42 spec is gcc instead of gcc-4.2. - Designer * [248769] Fixed a bug affecting the display of keyboard shortcuts in @@ -314,45 +318,17 @@ Qt for Windows CE of 'Fixed' on the main cointainer. * [253278] Made it possible to set QString-type properties using QDesignerFormWindowCursor::setProperty(). - * [253539] Prevent crash in Designer with the Cocoa port when when using a scroll - wheel to change a property. - * [252333] Fixed a regression crash in uic triggered when icon was set with different modes - than normal off. - * [252414, 252416, 252502] Fixed a crash in case of setting invalid point size - of font property in property editor - -- Linguist - - Linguist GUI - - - lupdate - - - lrelease - - -- rcc - - -- moc - + * [253539] Prevent crash in Designer with the Cocoa port when when using + a scroll wheel to change a property. + * [252333] Fixed a regression crash in uic triggered when icon was set + with different modes than normal off. + * [252414, 252416, 252502] Fixed a crash in case of setting invalid point + size of font property in property editor. - uic * [252333] Fixed a regression crash triggered by using icons with different pixmaps for QIcon states. -- uic3 - - -- qmake - - -- configure - - -- qtconfig - - -- qt3to4 - **************************************************************************** * Plugins * @@ -362,24 +338,20 @@ Qt for Windows CE * Make sure we pick an approriate format for pixmaps. E.g. use the same as the primary surface for opaque pixmaps and pick an appropriate one for transparent pixmaps if the primary surface format is not transparent. - * Properly fall back to the raster engine for pens that aren't solidcolor - * Properly fall back to raster engine with "mirrored" scales - * Make sure window surfaces are the approriate pixel format and created in - video memory if supported - * Fix clipping bug that would cause painting errors - * Fix various crash bugs - * Fix bugs when transforming/copying pixmaps with alpha channel - * Fix various bugs with regards to painting with alpha channel/porter duff - * Optimize a coupld of internal functions to slightly speed up drawing - * Optimize raster fall backs - * Allow more customization for Flipping options - * Fix drawing with opacity != 1.0 + * Properly fall back to the raster engine for pens that aren't solidcolor. + * Properly fall back to raster engine with "mirrored" scales. + * Make sure window surfaces are in the approriate pixel format and created + in video memory if supported. + * Fix clipping bug that would cause painting errors. + * Fix various crash bugs. + * Fix bugs when transforming/copying pixmaps with alpha channel. + * Fix various bugs with regards to painting with alpha channel/porter + duff. + * Optimize a coupld of internal functions to slightly speed up drawing. + * Optimize raster fall backs. + * Allow more customization for Flipping options. + * Fix drawing with opacity != 1.0. * Support for better logging when trying to debug performance problems. - * Fix bug in keyboard handling that caused modifiers not to work - * Get rid of some compiler warnings - - -**************************************************************************** -* Important Behavior Changes * -**************************************************************************** + * Fix bug in keyboard handling that caused modifiers not to work. + * Get rid of some compiler warnings. -- cgit v0.12 From c9336aafb28177954b627bf8e7a7a0c9bbda1eca Mon Sep 17 00:00:00 2001 From: Martin Smith Date: Fri, 12 Jun 2009 14:27:35 +0200 Subject: doc: Fixed several qdoc warnings. --- doc/src/snippets/qprocess-environment/main.cpp | 2 +- src/corelib/codecs/qtextcodec.cpp | 4 +- src/gui/painting/qdrawutil.h | 16 +++++-- src/gui/widgets/qbuttongroup.cpp | 9 ++-- src/testlib/qtestelementattribute.cpp | 60 ++++++++++++++++++++++++++ 5 files changed, 80 insertions(+), 11 deletions(-) diff --git a/doc/src/snippets/qprocess-environment/main.cpp b/doc/src/snippets/qprocess-environment/main.cpp index 148518b..c8681e7 100644 --- a/doc/src/snippets/qprocess-environment/main.cpp +++ b/doc/src/snippets/qprocess-environment/main.cpp @@ -62,7 +62,7 @@ env.insert("TMPDIR", "C:\\MyApp\\temp"); // Add an environment variable env["PATH"] += ";C:\\Bin"; process.setEnvironment(env); process.start("myapp"); -//! [0] +//! [1] } } diff --git a/src/corelib/codecs/qtextcodec.cpp b/src/corelib/codecs/qtextcodec.cpp index 050c997..2aec40f 100644 --- a/src/corelib/codecs/qtextcodec.cpp +++ b/src/corelib/codecs/qtextcodec.cpp @@ -1510,7 +1510,7 @@ QString QTextDecoder::toUnicode(const QByteArray &ba) cannot be detected from the content provided, \a defaultCodec is returned. - \sa codecForUtfText + \sa codecForUtfText() */ QTextCodec *QTextCodec::codecForHtml(const QByteArray &ba, QTextCodec *defaultCodec) { @@ -1556,7 +1556,7 @@ QTextCodec *QTextCodec::codecForHtml(const QByteArray &ba) cannot be detected from the content provided, \a defaultCodec is returned. - \sa codecForHtml + \sa codecForHtml() */ QTextCodec *QTextCodec::codecForUtfText(const QByteArray &ba, QTextCodec *defaultCodec) { diff --git a/src/gui/painting/qdrawutil.h b/src/gui/painting/qdrawutil.h index 38d9ec0..306f4e2 100644 --- a/src/gui/painting/qdrawutil.h +++ b/src/gui/painting/qdrawutil.h @@ -161,10 +161,18 @@ struct Q_GUI_EXPORT QTileRules Qt::TileRule vertical; }; -Q_GUI_EXPORT void qDrawBorderPixmap(QPainter *painter, const QRect &targetRect, const QMargins &targetMargins, const QPixmap &pixmap, - const QRect &sourceRect, const QMargins &sourceMargins, const QTileRules &rules = QTileRules()); - -Q_GUI_EXPORT inline void qDrawBorderPixmap(QPainter *painter, const QRect &target, const QMargins &margins, const QPixmap &pixmap) +Q_GUI_EXPORT void qDrawBorderPixmap(QPainter *painter, + const QRect &targetRect, + const QMargins &targetMargins, + const QPixmap &pixmap, + const QRect &sourceRect, + const QMargins &sourceMargins, + const QTileRules &rules = QTileRules()); + +Q_GUI_EXPORT inline void qDrawBorderPixmap(QPainter *painter, + const QRect &target, + const QMargins &margins, + const QPixmap &pixmap) { qDrawBorderPixmap(painter, target, margins, pixmap, pixmap.rect(), margins); } diff --git a/src/gui/widgets/qbuttongroup.cpp b/src/gui/widgets/qbuttongroup.cpp index ebfafe3..1003523 100644 --- a/src/gui/widgets/qbuttongroup.cpp +++ b/src/gui/widgets/qbuttongroup.cpp @@ -178,10 +178,11 @@ /*! \fn void QButtonGroup::addButton(QAbstractButton *button); - Adds the given \a button to the end of the group's internal list of buttons. - An \a id will be assigned to the button by this QButtonGroup. Automatically - assigned ids are guaranteed to be negative, starting with -2. If you are also - assigning your own ids, use positive values to avoid conflicts. + Adds the given \a button to the end of the group's internal list + of buttons. An id will be assigned to the button by this + QButtonGroup. Automatically assigned ids are guaranteed to be + negative, starting with -2. If you are also assigning your own + ids, use positive values to avoid conflicts. \sa removeButton() buttons() */ diff --git a/src/testlib/qtestelementattribute.cpp b/src/testlib/qtestelementattribute.cpp index 540389b..783b83d 100644 --- a/src/testlib/qtestelementattribute.cpp +++ b/src/testlib/qtestelementattribute.cpp @@ -46,6 +46,66 @@ QT_BEGIN_NAMESPACE +/*! \enum QTest::AttributeIndex + This enum numbers the different tests. + + \value AI_Undefined + + \value AI_Name + + \value AI_Result + + \value AI_Tests + + \value AI_Failures + + \value AI_Errors + + \value AI_Type + + \value AI_Description + + \value AI_PropertyValue + + \value AI_QTestVersion + + \value AI_QtVersion + + \value AI_File + + \value AI_Line + + \value AI_Metric + + \value AI_Tag + + \value AI_Value + + \value AI_Iterations +*/ + +/*! \enum QTest::LogElementType + The enum specifies the kinds of test log messages. + + \value LET_Undefined + + \value LET_Property + + \value LET_Properties + + \value LET_Failure + + \value LET_Error + + \value LET_TestCase + + \value LET_TestSuite + + \value LET_Benchmark + + \value LET_SystemError +*/ + QTestElementAttribute::QTestElementAttribute() :attributeValue(0), attributeIndex(QTest::AI_Undefined) -- cgit v0.12 From 0265a36425cfcb01d7c35fbb4a7c5907893972a1 Mon Sep 17 00:00:00 2001 From: Markus Goetz Date: Fri, 12 Jun 2009 13:03:29 +0200 Subject: QHttp: Class made obsolete, changed module QDoc. This should better communicate that new applications should use QNetworkAccessManager. Reviewed-by: David Boddie --- doc/src/qtnetwork.qdoc | 66 +++++++++++++++++--------------------------- src/network/access/qhttp.cpp | 8 ++++-- 2 files changed, 31 insertions(+), 43 deletions(-) diff --git a/doc/src/qtnetwork.qdoc b/doc/src/qtnetwork.qdoc index 2be7457..3773c81 100644 --- a/doc/src/qtnetwork.qdoc +++ b/doc/src/qtnetwork.qdoc @@ -51,7 +51,7 @@ write TCP/IP clients and servers. The network module provides classes to make network programming - easier and portable. It offers classes such as QHttp and QFtp that + easier and portable. It offers classes such as QFtp that implement specific application-level protocols, lower-level classes such as QTcpSocket, QTcpServer and QUdpSocket that represent low level network concepts, and high level classes such as QNetworkRequest, @@ -81,7 +81,7 @@ \snippet doc/src/snippets/code/doc_src_qtnetwork.qdoc 1 - \section1 High Level Network Operations + \section1 High Level Network Operations for HTTP and FTP The Network Access API is a collection of classes for performing common network operations. The API provides an abstraction layer @@ -94,6 +94,8 @@ with a request, such as any header information and the encryption used. The URL specified when a request object is constructed determines the protocol used for a request. + Currently HTTP, FTP and local file URLs are supported for uploading + and downloading. The coordination of network operations is performed by the QNetworkAccessManager class. Once a request has been created, @@ -113,65 +115,50 @@ Each application or library can create one or more instances of QNetworkAccessManager to handle network communication. + + \section1 Writing FTP Clients with QFtp - \section1 Writing HTTP and FTP Clients with QHttp and QFtp + FTP (File Transfer Protocol) is a protocol used almost exclusively + for browsing remote directories and for transferring files. - HTTP (Hypertext Transfer Protocol) is an application-level - network protocol used mainly for downloading HTML and XML files, - but it is also used as a high-level transport protocol for many - other types of data, from images and movies to purchase orders - and banking transactions. In contrast, FTP (File Transfer - Protocol) is a protocol used almost exclusively for browsing - remote directories and for transferring files. + \image httpstack.png FTP Client and Server - \image httpstack.png HTTP Client and Server - - HTTP is a simpler protocol than FTP in many ways. It uses only - one network connection, while FTP uses two (one for sending - commands, and one for transferring data). HTTP is a stateless - protocol; requests and responses are always self-contained. The + FTP uses two network connections, one for sending + commands and one for transferring data. The FTP protocol has a state and requires the client to send several commands before a file transfer takes place. + FTP clients establish a connection + and keeps it open throughout the session. In each session, multiple + transfers can occur. - In practice, HTTP clients often use separate connections for - separate requests, whereas FTP clients establish one connection - and keep it open throughout the session. - - The QHttp and QFtp classes provide client-side support for HTTP - and FTP. Since the two protocols are used to solve the same - problems, the QHttp and QFtp classes have many features in - common: - + The QFtp class provides client-side support for FTP. + It has the following characteristics: \list - \o \e{Non-blocking behavior.} QHttp and QFtp are asynchronous. - You can schedule a series of commands (also called "requests" for - HTTP). The commands are executed later, when control returns to - Qt's event loop. + \o \e{Non-blocking behavior.} QFtp is asynchronous. + You can schedule a series of commands which are executed later, + when control returns to Qt's event loop. \o \e{Command IDs.} Each command has a unique ID number that you can use to follow the execution of the command. For example, QFtp emits the \l{QFtp::commandStarted()}{commandStarted()} and \l{QFtp::commandFinished()}{commandFinished()} signal with the - command ID for each command that is executed. QHttp has a - \l{QHttp::requestStarted()}{requestStarted()} and a - \l{QHttp::requestFinished()}{requestFinished()} signal that work - the same way. + command ID for each command that is executed. - \o \e{Data transfer progress indicators.} QHttp and QFtp emit + \o \e{Data transfer progress indicators.} QFtp emits signals whenever data is transferred (QFtp::dataTransferProgress(), QHttp::dataReadProgress(), and QHttp::dataSendProgress()). You could connect these signals to QProgressBar::setProgress() or QProgressDialog::setProgress(), for example. - \o \e{QIODevice support.} Both classes support convenient + \o \e{QIODevice support.} The class supports convenient uploading from and downloading to \l{QIODevice}s, in addition to a QByteArray-based API. \endlist - There are two main ways of using QHttp and QFtp. The most common + There are two main ways of using QFtp. The most common approach is to keep track of the command IDs and follow the execution of every command by connecting to the appropriate signals. The other approach is to schedule all commands at once @@ -182,10 +169,9 @@ commands based on the result of a previous command. It also enables you to provide detailed feedback to the user. - The \l{network/http}{HTTP} and \l{network/ftp}{FTP} examples - illustrate how to write an HTTP and an FTP client. - - Writing your own HTTP or FTP server is possible using the + The \l{network/ftp}{FTP} example + illustrates how to write an FTP client. + Writing your own FTP (or HTTP) server is possible using the lower-level classes QTcpSocket and QTcpServer. \section1 Using TCP with QTcpSocket and QTcpServer diff --git a/src/network/access/qhttp.cpp b/src/network/access/qhttp.cpp index 49ce5a3..711de24 100644 --- a/src/network/access/qhttp.cpp +++ b/src/network/access/qhttp.cpp @@ -1413,6 +1413,7 @@ QString QHttpRequestHeader::toString() const ****************************************************/ /*! \class QHttp + \obsolete \reentrant \brief The QHttp class provides an implementation of the HTTP protocol. @@ -1422,10 +1423,11 @@ QString QHttpRequestHeader::toString() const \mainclass This class provides a direct interface to HTTP that allows you to - have more control over the requests and that allows you to access - the response header fields. However, for new applications, it is + download and upload data with the HTTP protocol. + However, for new applications, it is recommended to use QNetworkAccessManager and QNetworkReply, as - those classes possess a simpler, yet more powerful API. + those classes possess a simpler, yet more powerful API + and a more modern protocol implementation. The class works asynchronously, so there are no blocking functions. If an operation cannot be executed immediately, the -- cgit v0.12 From 8a2993a6c53e1a5641bd1c500ad4bd54e799299b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20R=C3=B8dal?= Date: Fri, 12 Jun 2009 14:01:25 +0200 Subject: Made QPixmap autotest pass with -graphicssystem opengl The window surface has been modified to track widget deletion to make sure it doesn't try to access the widget's context data after deletion. QGLPixmapData now also uses GL_RGB instead of GL_RGBA when appropriate, and hasAlphaChannel() has been modified in view of this. A number of other issues have been fixed in QGLPixmapData, and the autotest has been modified to use a more lenient pixmap compare function due to off-by-one pixel errors here and there. Reviewed-by: Trond --- src/opengl/qpixmapdata_gl.cpp | 67 ++++++++++++++++++----- src/opengl/qpixmapdata_gl_p.h | 4 ++ src/opengl/qwindowsurface_gl.cpp | 20 +++++++ src/opengl/qwindowsurface_gl_p.h | 6 ++- tests/auto/qpixmap/tst_qpixmap.cpp | 105 ++++++++++++++++++++++++++----------- 5 files changed, 155 insertions(+), 47 deletions(-) diff --git a/src/opengl/qpixmapdata_gl.cpp b/src/opengl/qpixmapdata_gl.cpp index 98c406b..4c53c46 100644 --- a/src/opengl/qpixmapdata_gl.cpp +++ b/src/opengl/qpixmapdata_gl.cpp @@ -104,6 +104,7 @@ QGLPixmapData::QGLPixmapData(PixelType type) , m_ctx(0) , m_dirty(false) , m_hasFillColor(false) + , m_hasAlpha(false) { setSerialNumber(++qt_gl_pixmap_serial); } @@ -136,6 +137,11 @@ void QGLPixmapData::resize(int width, int height) if (width == m_width && height == m_height) return; + if (width <= 0 || height <= 0) { + width = 0; + height = 0; + } + m_width = width; m_height = height; @@ -166,7 +172,8 @@ void QGLPixmapData::ensureCreated() const if (!m_textureId) { glGenTextures(1, &m_textureId); glBindTexture(target, m_textureId); - glTexImage2D(target, 0, GL_RGBA, m_width, m_height, 0, + GLenum format = m_hasAlpha ? GL_RGBA : GL_RGB; + glTexImage2D(target, 0, format, m_width, m_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); @@ -195,10 +202,20 @@ void QGLPixmapData::fromImage(const QImage &image, if (image.size() == QSize(m_width, m_height)) setSerialNumber(++qt_gl_pixmap_serial); resize(image.width(), image.height()); - m_source = image; + + if (pixelType() == BitmapType) { + m_source = image.convertToFormat(QImage::Format_MonoLSB); + } else { + m_source = image.hasAlphaChannel() + ? image.convertToFormat(QImage::Format_ARGB32_Premultiplied) + : image.convertToFormat(QImage::Format_RGB32); + } + m_dirty = true; m_hasFillColor = false; + m_hasAlpha = image.hasAlphaChannel(); + if (m_textureId) { QGLShareContextScope ctx(qt_gl_share_widget()->context()); glDeleteTextures(1, &m_textureId); @@ -230,24 +247,46 @@ void QGLPixmapData::fill(const QColor &color) if (!isValid()) return; + if (!m_textureId) + m_hasAlpha = color.alpha() != 255; + if (useFramebufferObjects()) { m_source = QImage(); m_hasFillColor = true; m_fillColor = color; - } else if (!m_source.isNull()) { - m_source.fill(PREMUL(color.rgba())); } else { - // ## TODO: improve performance here - QImage img(m_width, m_height, QImage::Format_ARGB32_Premultiplied); - img.fill(PREMUL(color.rgba())); - - fromImage(img, 0); + QImage image = fillImage(color); + fromImage(image, 0); } } bool QGLPixmapData::hasAlphaChannel() const { - return true; + return pixelType() == BitmapType || m_hasAlpha; +} + +QImage QGLPixmapData::fillImage(const QColor &color) const +{ + QImage img; + if (pixelType() == BitmapType) { + img = QImage(m_width, m_height, QImage::Format_MonoLSB); + img.setNumColors(2); + img.setColor(0, QColor(Qt::color0).rgba()); + img.setColor(1, QColor(Qt::color1).rgba()); + + int gray = qGray(color.rgba()); + if (qAbs(255 - gray) < gray) + img.fill(0); + else + img.fill(1); + } else { + img = QImage(m_width, m_height, + m_hasAlpha + ? QImage::Format_ARGB32_Premultiplied + : QImage::Format_RGB32); + img.fill(PREMUL(color.rgba())); + } + return img; } QImage QGLPixmapData::toImage() const @@ -260,10 +299,7 @@ QImage QGLPixmapData::toImage() const } else if (!m_source.isNull()) { return m_source; } else if (m_dirty || m_hasFillColor) { - QImage img(m_width, m_height, QImage::Format_ARGB32_Premultiplied); - if (m_hasFillColor) - img.fill(PREMUL(m_fillColor.rgba())); - return img; + return fillImage(m_fillColor); } else { ensureCreated(); } @@ -453,6 +489,9 @@ extern int qt_defaultDpiY(); int QGLPixmapData::metric(QPaintDevice::PaintDeviceMetric metric) const { + if (m_width == 0) + return 0; + switch (metric) { case QPaintDevice::PdmWidth: return m_width; diff --git a/src/opengl/qpixmapdata_gl_p.h b/src/opengl/qpixmapdata_gl_p.h index 1b6b7ae..af10f2c 100644 --- a/src/opengl/qpixmapdata_gl_p.h +++ b/src/opengl/qpixmapdata_gl_p.h @@ -115,6 +115,8 @@ private: static bool useFramebufferObjects(); + QImage fillImage(const QColor &color) const; + int m_width; int m_height; @@ -131,6 +133,8 @@ private: // represented by a single fill color mutable QColor m_fillColor; mutable bool m_hasFillColor; + + mutable bool m_hasAlpha; }; QT_END_NAMESPACE diff --git a/src/opengl/qwindowsurface_gl.cpp b/src/opengl/qwindowsurface_gl.cpp index 965c7a5..01974a2 100644 --- a/src/opengl/qwindowsurface_gl.cpp +++ b/src/opengl/qwindowsurface_gl.cpp @@ -272,6 +272,24 @@ QGLWindowSurface::~QGLWindowSurface() delete d_ptr; } +void QGLWindowSurface::deleted(QObject *object) +{ + QWidget *widget = qobject_cast(object); + if (widget) { + QWidgetPrivate *widgetPrivate = widget->d_func(); + if (widgetPrivate->extraData()) { + union { QGLContext **ctxPtr; void **voidPtr; }; + voidPtr = &widgetPrivate->extraData()->glContext; + int index = d_ptr->contexts.indexOf(ctxPtr); + if (index != -1) { + delete *ctxPtr; + *ctxPtr = 0; + d_ptr->contexts.removeAt(index); + } + } + } +} + void QGLWindowSurface::hijackWindow(QWidget *widget) { QWidgetPrivate *widgetPrivate = widget->d_func(); @@ -288,6 +306,8 @@ void QGLWindowSurface::hijackWindow(QWidget *widget) union { QGLContext **ctxPtr; void **voidPtr; }; + connect(widget, SIGNAL(destroyed(QObject *)), this, SLOT(deleted(QObject *))); + voidPtr = &widgetPrivate->extraData()->glContext; d_ptr->contexts << ctxPtr; qDebug() << "hijackWindow() context created for" << widget << d_ptr->contexts.size(); diff --git a/src/opengl/qwindowsurface_gl_p.h b/src/opengl/qwindowsurface_gl_p.h index d47e3e3..9efd1ae 100644 --- a/src/opengl/qwindowsurface_gl_p.h +++ b/src/opengl/qwindowsurface_gl_p.h @@ -65,8 +65,9 @@ class QRegion; class QWidget; struct QGLWindowSurfacePrivate; -class QGLWindowSurface : public QWindowSurface, public QPaintDevice +class QGLWindowSurface : public QObject, public QWindowSurface, public QPaintDevice { + Q_OBJECT public: QGLWindowSurface(QWidget *window); ~QGLWindowSurface(); @@ -91,6 +92,9 @@ public: protected: int metric(PaintDeviceMetric metric) const; +private slots: + void deleted(QObject *object); + private: void hijackWindow(QWidget *widget); diff --git a/tests/auto/qpixmap/tst_qpixmap.cpp b/tests/auto/qpixmap/tst_qpixmap.cpp index 058c3c6..06e50d7 100644 --- a/tests/auto/qpixmap/tst_qpixmap.cpp +++ b/tests/auto/qpixmap/tst_qpixmap.cpp @@ -48,6 +48,8 @@ #include #include +#include + #include #ifdef Q_WS_WIN @@ -140,6 +142,38 @@ private slots: void fromData(); }; +static bool lenientCompare(const QPixmap &actual, const QPixmap &expected) +{ + QImage expectedImage = expected.toImage().convertToFormat(QImage::Format_RGB32); + QImage actualImage = actual.toImage().convertToFormat(QImage::Format_RGB32); + + if (expectedImage.size() != actualImage.size()) + return false; + + int size = actual.width() * actual.height(); + + QRgb *a = (QRgb *)actualImage.bits(); + QRgb *e = (QRgb *)expectedImage.bits(); + for (int i = 0; i < size; ++i) { + QColor ca(a[i]); + QColor ce(e[i]); + + bool result = true; + + if (qAbs(ca.red() - ce.red()) > 2) + result = false; + if (qAbs(ca.green() - ce.green()) > 2) + result = false; + if (qAbs(ca.blue() - ce.blue()) > 2) + result = false; + + if (!result) + return false; + } + + return true; +} + Q_DECLARE_METATYPE(QImage) Q_DECLARE_METATYPE(QPixmap) Q_DECLARE_METATYPE(QMatrix) @@ -202,7 +236,7 @@ void tst_QPixmap::setAlphaChannel() pixmap.setAlphaChannel(alphaChannel); #ifdef Q_WS_X11 - if (!pixmap.x11PictureHandle()) + if (pixmap.pixmapData()->classId() == QPixmapData::X11Class && !pixmap.x11PictureHandle()) QSKIP("Requires XRender support", SkipAll); #endif @@ -261,7 +295,7 @@ void tst_QPixmap::fromImage() const QPixmap pixmap = QPixmap::fromImage(image); #ifdef Q_WS_X11 - if (!pixmap.x11PictureHandle()) + if (pixmap.pixmapData()->classId() == QPixmapData::X11Class && !pixmap.x11PictureHandle()) QSKIP("Requires XRender support", SkipAll); #endif const QImage result = pixmap.toImage(); @@ -392,9 +426,9 @@ void tst_QPixmap::scroll() #else QString fileName = QString(":/images/%1.png").arg(QTest::currentDataTag()); #endif - QImage output(fileName); + QPixmap output(fileName); QVERIFY(input.isNull() == output.isNull()); - QCOMPARE(pixmap.toImage(), output); + QVERIFY(lenientCompare(pixmap, output)); QCOMPARE(exp, exposed); } @@ -463,7 +497,7 @@ void tst_QPixmap::fill() pm = QPixmap(400, 400); #if defined(Q_WS_X11) - if (!bitmap && !pm.x11PictureHandle()) + if (!bitmap && pm.pixmapData()->classId() == QPixmapData::X11Class && !pm.x11PictureHandle()) QSKIP("Requires XRender support", SkipSingle); #endif @@ -475,7 +509,7 @@ void tst_QPixmap::fill() QImage image = pm.toImage(); if (bitmap && syscolor) { int pixelindex = (pixel == Qt::color0) ? 0 : 1; - QVERIFY(image.pixelIndex(0,0) == pixelindex); + QCOMPARE(image.pixelIndex(0,0), pixelindex); } QImage::Format format = compareColor.alpha() != 255 ? QImage::Format_ARGB32 @@ -493,7 +527,7 @@ void tst_QPixmap::fill_transparent() { QPixmap pixmap(10, 10); #ifdef Q_WS_X11 - if (!pixmap.x11PictureHandle()) + if (pixmap.pixmapData()->classId() == QPixmapData::X11Class && !pixmap.x11PictureHandle()) QSKIP("Requires XRender support", SkipAll); #endif pixmap.fill(Qt::transparent); @@ -613,7 +647,7 @@ void tst_QPixmap::testMetrics() QCOMPARE(pixmap.width(), 100); QCOMPARE(pixmap.height(), 100); - QCOMPARE(pixmap.depth(), QPixmap::defaultDepth()); + QVERIFY(pixmap.depth() >= QPixmap::defaultDepth()); QBitmap bitmap(100, 100); @@ -675,7 +709,11 @@ void tst_QPixmap::drawBitmap() painter2.setPen(Qt::red); painter2.drawPixmap(0,0,10,10, bitmap); painter2.end(); - QCOMPARE(pixmap.toImage().pixel(5,5), QColor(Qt::red).rgb()); + + QPixmap expected(10, 10); + expected.fill(Qt::red); + + QVERIFY(lenientCompare(pixmap, expected)); } void tst_QPixmap::grabWidget() @@ -688,8 +726,7 @@ void tst_QPixmap::grabWidget() expected.fill(Qt::green); QPixmap actual = QPixmap::grabWidget(&widget, QRect(64, 64, 64, 64)); - - QCOMPARE(actual, expected); + QVERIFY(lenientCompare(actual, expected)); } void tst_QPixmap::grabWindow() @@ -720,7 +757,7 @@ void tst_QPixmap::grabWindow() QPixmap grabWindowPixmap = QPixmap::grabWindow(child.winId()); QPixmap grabWidgetPixmap = QPixmap::grabWidget(&child); - QCOMPARE(grabWindowPixmap, grabWidgetPixmap); + lenientCompare(grabWindowPixmap, grabWidgetPixmap); } void tst_QPixmap::isNull() @@ -960,10 +997,10 @@ void tst_QPixmap::copy() } QPixmap dest = src.copy(10, 10, 10, 10); - QImage result = dest.toImage().convertToFormat(QImage::Format_RGB32); - QImage expected(10, 10, QImage::Format_RGB32); - expected.fill(0xff0000ff); - QCOMPARE(result, expected); + + QPixmap expected(10, 10); + expected.fill(Qt::blue); + QVERIFY(lenientCompare(dest, expected)); } #ifdef QT3_SUPPORT @@ -1031,27 +1068,33 @@ void tst_QPixmap::transformed() } QPixmap p2(10, 20); - p2.fill(Qt::red); { QPainter p(&p2); - p.drawRect(0, 0, p2.width() - 1, p2.height() - 1); + p.rotate(90); + p.drawPixmap(0, -p1.height(), p1); + } + + QPixmap p3(20, 10); + { + QPainter p(&p3); + p.rotate(180); + p.drawPixmap(-p1.width(), -p1.height(), p1); + } + + QPixmap p4(10, 20); + { + QPainter p(&p4); + p.rotate(270); + p.drawPixmap(-p1.width(), 0, p1); } QPixmap p1_90 = p1.transformed(QTransform().rotate(90)); QPixmap p1_180 = p1.transformed(QTransform().rotate(180)); QPixmap p1_270 = p1.transformed(QTransform().rotate(270)); - QCOMPARE(p1_90.size(), p2.size()); - QCOMPARE(p1_90.toImage().convertToFormat(QImage::Format_ARGB32_Premultiplied), - p2.toImage().convertToFormat(QImage::Format_ARGB32_Premultiplied)); - - QCOMPARE(p1_180.size(), p1.size()); - QCOMPARE(p1_180.toImage().convertToFormat(QImage::Format_ARGB32_Premultiplied), - p1.toImage().convertToFormat(QImage::Format_ARGB32_Premultiplied)); - - QCOMPARE(p1_270.size(), p2.size()); - QCOMPARE(p1_270.toImage().convertToFormat(QImage::Format_ARGB32_Premultiplied), - p2.toImage().convertToFormat(QImage::Format_ARGB32_Premultiplied)); + QVERIFY(lenientCompare(p1_90, p2)); + QVERIFY(lenientCompare(p1_180, p3)); + QVERIFY(lenientCompare(p1_270, p4)); } void tst_QPixmap::transformed2() @@ -1079,9 +1122,7 @@ void tst_QPixmap::transformed2() p.drawRect(3, 6, 3, 3); p.end(); - QCOMPARE(actual.size(), expected.size()); - QCOMPARE(actual.toImage().convertToFormat(QImage::Format_ARGB32_Premultiplied), - expected.toImage().convertToFormat(QImage::Format_ARGB32_Premultiplied)); + QVERIFY(lenientCompare(actual, expected)); } void tst_QPixmap::fromImage_crash() -- cgit v0.12 From d834d94bde645d43dd981154bd0ba99d8e81f040 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20R=C3=B8dal?= Date: Fri, 12 Jun 2009 14:05:22 +0200 Subject: Fixed incorrect rendering of bitmap/pattern brushes in GL 2 engine. The pen color should be used when drawPixmap is called with a bitmap, and the brush color should be used for texture patterns that are bitmaps. Task-number: 245802 Reviewed-by: Trond --- src/gui/painting/qbrush.cpp | 2 +- .../gl2paintengineex/qglengineshadermanager.cpp | 11 +++++++++ .../gl2paintengineex/qglengineshadermanager_p.h | 8 ++++++- .../gl2paintengineex/qglengineshadersource_p.h | 17 +++++++++++++- .../gl2paintengineex/qpaintengineex_opengl2.cpp | 26 +++++++++++++++++----- .../gl2paintengineex/qpaintengineex_opengl2_p.h | 2 +- 6 files changed, 57 insertions(+), 9 deletions(-) diff --git a/src/gui/painting/qbrush.cpp b/src/gui/painting/qbrush.cpp index 854d0aa..ea93764 100644 --- a/src/gui/painting/qbrush.cpp +++ b/src/gui/painting/qbrush.cpp @@ -217,7 +217,7 @@ struct QTexturedBrushData : public QBrushData // returns true if the brush has a pixmap (or bitmap) set as the // brush texture, false otherwise -bool qHasPixmapTexture(const QBrush& brush) +bool Q_GUI_EXPORT qHasPixmapTexture(const QBrush& brush) { if (brush.style() != Qt::TexturePattern) return false; diff --git a/src/opengl/gl2paintengineex/qglengineshadermanager.cpp b/src/opengl/gl2paintengineex/qglengineshadermanager.cpp index 5c541d0..b71c4c1 100644 --- a/src/opengl/gl2paintengineex/qglengineshadermanager.cpp +++ b/src/opengl/gl2paintengineex/qglengineshadermanager.cpp @@ -107,9 +107,11 @@ QGLEngineShaderManager::QGLEngineShaderManager(QGLContext* context) code[MainFragmentShader] = qglslMainFragmentShader; code[ImageSrcFragmentShader] = qglslImageSrcFragmentShader; + code[ImageSrcWithPatternFragmentShader] = qglslImageSrcWithPatternFragmentShader; code[NonPremultipliedImageSrcFragmentShader] = qglslNonPremultipliedImageSrcFragmentShader; code[SolidBrushSrcFragmentShader] = qglslSolidBrushSrcFragmentShader; code[TextureBrushSrcFragmentShader] = qglslTextureBrushSrcFragmentShader; + code[TextureBrushSrcWithPatternFragmentShader] = qglslTextureBrushSrcWithPatternFragmentShader; code[PatternBrushSrcFragmentShader] = qglslPatternBrushSrcFragmentShader; code[LinearGradientBrushSrcFragmentShader] = qglslLinearGradientBrushSrcFragmentShader; code[RadialGradientBrushSrcFragmentShader] = qglslRadialGradientBrushSrcFragmentShader; @@ -296,6 +298,15 @@ bool QGLEngineShaderManager::useCorrectShaderProg() srcPixelFragShaderName = ImageSrcFragmentShader; positionVertexShaderName = PositionOnlyVertexShader; break; + case QGLEngineShaderManager::PatternSrc: + srcPixelFragShaderName = ImageSrcWithPatternFragmentShader; + positionVertexShaderName = PositionOnlyVertexShader; + break; + case QGLEngineShaderManager::TextureSrcWithPattern: + srcPixelFragShaderName = TextureBrushSrcWithPatternFragmentShader; + positionVertexShaderName = isAffine ? AffinePositionWithTextureBrushVertexShader + : PositionWithTextureBrushVertexShader; + break; case QGLEngineShaderManager::NonPremultipliedImageSrc: srcPixelFragShaderName = NonPremultipliedImageSrcFragmentShader; positionVertexShaderName = PositionOnlyVertexShader; diff --git a/src/opengl/gl2paintengineex/qglengineshadermanager_p.h b/src/opengl/gl2paintengineex/qglengineshadermanager_p.h index afbc918..4a55eca 100644 --- a/src/opengl/gl2paintengineex/qglengineshadermanager_p.h +++ b/src/opengl/gl2paintengineex/qglengineshadermanager_p.h @@ -129,9 +129,11 @@ Brushes & image drawing are implementations of "qcolorp vec4 srcPixel()": qglslImageSrcFragShader + qglslImageSrcWithPatternFragShader qglslNonPremultipliedImageSrcFragShader qglslSolidBrushSrcFragShader qglslTextureBrushSrcFragShader + qglslTextureBrushWithPatternFragShader qglslPatternBrushSrcFragShader qglslLinearGradientBrushSrcFragShader qglslRadialGradientBrushSrcFragShader @@ -265,7 +267,9 @@ public: enum MaskType {NoMask, PixelMask, SubPixelMask, SubPixelWithGammaMask}; enum PixelSrcType { ImageSrc = Qt::TexturePattern+1, - NonPremultipliedImageSrc = Qt::TexturePattern+2 + NonPremultipliedImageSrc = Qt::TexturePattern+2, + PatternSrc = Qt::TexturePattern+3, + TextureSrcWithPattern = Qt::TexturePattern+4 }; // There are optimisations we can do, depending on the brush transform: @@ -313,9 +317,11 @@ public: MainFragmentShader, ImageSrcFragmentShader, + ImageSrcWithPatternFragmentShader, NonPremultipliedImageSrcFragmentShader, SolidBrushSrcFragmentShader, TextureBrushSrcFragmentShader, + TextureBrushSrcWithPatternFragmentShader, PatternBrushSrcFragmentShader, LinearGradientBrushSrcFragmentShader, RadialGradientBrushSrcFragmentShader, diff --git a/src/opengl/gl2paintengineex/qglengineshadersource_p.h b/src/opengl/gl2paintengineex/qglengineshadersource_p.h index 70cc67e..61cc63e 100644 --- a/src/opengl/gl2paintengineex/qglengineshadersource_p.h +++ b/src/opengl/gl2paintengineex/qglengineshadersource_p.h @@ -130,7 +130,7 @@ static const char* const qglslPatternBrushSrcFragmentShader = "\ uniform lowp vec4 patternColor; \ varying mediump vec2 patternTexCoords;\ lowp vec4 srcPixel() { \ - return patternColor * texture2D(brushTexture, patternTexCoords).r; \ + return patternColor * (1.0 - texture2D(brushTexture, patternTexCoords).r); \ }\n"; @@ -278,6 +278,13 @@ static const char* const qglslTextureBrushSrcFragmentShader = "\ return texture2D(brushTexture, brushTextureCoords); \ }"; +static const char* const qglslTextureBrushSrcWithPatternFragmentShader = "\ + varying mediump vec2 brushTextureCoords; \ + uniform lowp vec4 patternColor; \ + uniform sampler2D brushTexture; \ + lowp vec4 srcPixel() { \ + return patternColor * (1.0 - texture2D(brushTexture, brushTextureCoords).r); \ + }"; // Solid Fill Brush static const char* const qglslSolidBrushSrcFragmentShader = "\ @@ -293,6 +300,14 @@ static const char* const qglslImageSrcFragmentShader = "\ return texture2D(imageTexture, textureCoords); \ }"; +static const char* const qglslImageSrcWithPatternFragmentShader = "\ + varying highp vec2 textureCoords; \ + uniform lowp vec4 patternColor; \ + uniform sampler2D imageTexture; \ + lowp vec4 srcPixel() { \ + return patternColor * (1.0 - texture2D(imageTexture, textureCoords).r); \ + }\n"; + static const char* const qglslNonPremultipliedImageSrcFragmentShader = "\ varying highp vec2 textureCoords; \ uniform sampler2D imageTexture; \ diff --git a/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp b/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp index bdea187..d1c6e9f 100644 --- a/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp +++ b/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp @@ -279,7 +279,13 @@ void QGL2PaintEngineExPrivate::setBrush(const QBrush* brush) currentBrush = brush; brushTextureDirty = true; brushUniformsDirty = true; - shaderManager->setSrcPixelType(currentBrush->style()); + if (currentBrush->style() == Qt::TexturePattern + && qHasPixmapTexture(*brush) && brush->texture().isQBitmap()) + { + shaderManager->setSrcPixelType(QGLEngineShaderManager::TextureSrcWithPattern); + } else { + shaderManager->setSrcPixelType(currentBrush->style()); + } shaderManager->optimiseForBrushTransform(currentBrush->transform()); } @@ -314,7 +320,7 @@ void QGL2PaintEngineExPrivate::updateBrushTexture() if ( (style >= Qt::Dense1Pattern) && (style <= Qt::DiagCrossPattern) ) { // Get the image data for the pattern - QImage texImage = qt_imageForBrush(style, true); + QImage texImage = qt_imageForBrush(style, false); glActiveTexture(GL_TEXTURE0 + QT_BRUSH_TEXTURE_UNIT); ctx->d_func()->bindTexture(texImage, GL_TEXTURE_2D, GL_RGBA, true); @@ -432,6 +438,11 @@ void QGL2PaintEngineExPrivate::updateBrushUniforms() const QPixmap& texPixmap = currentBrush->texture(); + if (qHasPixmapTexture(*currentBrush) && currentBrush->texture().isQBitmap()) { + QColor col = premultiplyColor(currentBrush->color(), (GLfloat)q->state()->opacity); + shaderManager->currentProgram()->setUniformValue("patternColor", col); + } + QSizeF invertedTextureSize( 1.0 / texPixmap.width(), 1.0 / texPixmap.height() ); shaderManager->currentProgram()->setUniformValue("invertedTextureSize", invertedTextureSize); @@ -578,17 +589,22 @@ static inline void setCoords(GLfloat *coords, const QGLRect &rect) coords[7] = rect.bottom; } -void QGL2PaintEngineExPrivate::drawTexture(const QGLRect& dest, const QGLRect& src, const QSize &textureSize, bool opaque) +void QGL2PaintEngineExPrivate::drawTexture(const QGLRect& dest, const QGLRect& src, const QSize &textureSize, bool opaque, bool pattern) { transferMode(ImageDrawingMode); updateTextureFilter(GL_TEXTURE_2D, GL_REPEAT, q->state()->renderHints & QPainter::SmoothPixmapTransform); // Setup for texture drawing - shaderManager->setSrcPixelType(QGLEngineShaderManager::ImageSrc); + shaderManager->setSrcPixelType(pattern ? QGLEngineShaderManager::PatternSrc : QGLEngineShaderManager::ImageSrc); shaderManager->setTextureCoordsEnabled(true); prepareForDraw(opaque); + if (pattern) { + QColor col = premultiplyColor(q->state()->pen.color(), (GLfloat)q->state()->opacity); + shaderManager->currentProgram()->setUniformValue("patternColor", col); + } + shaderManager->currentProgram()->setUniformValue("imageTexture", QT_IMAGE_TEXTURE_UNIT); GLfloat dx = 1.0 / textureSize.width(); @@ -987,7 +1003,7 @@ void QGL2PaintEngineEx::drawPixmap(const QRectF& dest, const QPixmap & pixmap, c ctx->d_func()->bindTexture(pixmap, GL_TEXTURE_2D, GL_RGBA, true); //FIXME: we should use hasAlpha() instead, but that's SLOW at the moment - d->drawTexture(dest, src, pixmap.size(), !pixmap.hasAlphaChannel()); + d->drawTexture(dest, src, pixmap.size(), !pixmap.hasAlphaChannel(), pixmap.depth() == 1); } void QGL2PaintEngineEx::drawImage(const QRectF& dest, const QImage& image, const QRectF& src, diff --git a/src/opengl/gl2paintengineex/qpaintengineex_opengl2_p.h b/src/opengl/gl2paintengineex/qpaintengineex_opengl2_p.h index db39ced..8a50096 100644 --- a/src/opengl/gl2paintengineex/qpaintengineex_opengl2_p.h +++ b/src/opengl/gl2paintengineex/qpaintengineex_opengl2_p.h @@ -165,7 +165,7 @@ public: // fill, drawOutline, drawTexture & drawCachedGlyphs are the rendering entry points: void fill(const QVectorPath &path); void drawOutline(const QVectorPath& path); - void drawTexture(const QGLRect& dest, const QGLRect& src, const QSize &textureSize, bool opaque); + void drawTexture(const QGLRect& dest, const QGLRect& src, const QSize &textureSize, bool opaque, bool pattern = false); void drawCachedGlyphs(const QPointF &p, const QTextItemInt &ti); void drawVertexArrays(QGL2PEXVertexArray& vertexArray, GLenum primitive); -- cgit v0.12 From 1be9e07987388195b8c4ff7d0101cb3e32ee6acc Mon Sep 17 00:00:00 2001 From: David Boddie Date: Fri, 12 Jun 2009 15:04:07 +0200 Subject: Doc: My review of earlier changes plus some minor adjustments and fixes. Reviewed-by: Trust Me --- dist/changes-4.5.2 | 232 ++++++++++++++++++++++++++--------------------------- 1 file changed, 116 insertions(+), 116 deletions(-) diff --git a/dist/changes-4.5.2 b/dist/changes-4.5.2 index 21a8ae9..8363917 100644 --- a/dist/changes-4.5.2 +++ b/dist/changes-4.5.2 @@ -1,9 +1,9 @@ Qt 4.5.2 is a bug-fix release. It maintains both forward and backward -compatibility (source and binary) with Qt 4.5.0. For more details, +compatibility (source and binary) with Qt 4.5.1. For more details, refer to the online documentation included in this distribution. The documentation is also available online: - http://doc.trolltech.com/4.5 + http://doc.qtsoftware.com/4.5 The Qt version 4.5 series is binary compatible with the 4.4.x series. Applications compiled for 4.4 will continue to run with 4.5. @@ -32,6 +32,18 @@ General Improvements * Library * **************************************************************************** +- QtDBus + * [236955] Fixed an issue that would cause QtDBus to crash when + relaying a signal emitted from a class under certain conditions. + +- QtOpenGL + * [247083] Re-enabled anti-aliasing for large font sizes in OpenGL paint + engine. + * [251485] Fixed crash that could occur with projective transforms and + high quality antialiasing. + * [253468] Fixed a crash in the GL 2 paint engine that could occur + when drawing text. + - QtWebKit * Backported fixes for critical bugs, memory leaks, and crashes from WebKit trunk (with revision numbers) related to: @@ -43,32 +55,52 @@ General Improvements Plugins (r41346, r43550, r43915, r43917, r43923) Clipboard (r41360) -- QtDBus - * [236955] Fixed an issue that would cause QtDBus to crash when - relaying a signal emitted from a class under certain conditions. - - QAbstractItemView * [250754] Changing the font of the view did not update the size of the - items if there was an application stylesheet. - * [252532] Pressing enter in a QPlainTextEdit embedded in an itemview + items if there was an application style sheet. + * [252532] Pressing enter in a QPlainTextEdit embedded in an item view now inserts a newline - QAbstractNetworkCache * Only cache responses to HTTP GET by default, not HTTP PUT or POST. - QApplication - * [249589] Fixed bug that prevented any part of the application to - receive focus when Graphics View was disabled using + * [249589] Fixed bug that prevented any part of the application from + receiving focus when Graphics View was disabled using QT_NO_GRAPHICSVIEW. +- QByteArrayMatcher + * [251958] Assignment operator and copy constructor miss data. + - QComboBox * [253944] Changing the style doesn't reset custom item delegate anymore. - * [254589] Fixed the frame appearing if setting a stylesheet with a - border on the embedded itemview while there is a stylesheet on the + * [254589] Fixed the frame appearing if setting a style sheet with a + border on the embedded item view while there is a style sheet on the application. +- QCompleter + * [253125] QCompleter doesn't expand entries with + UnfilteredPopupCompletion. + +- QCssParser + * [252311] "font-family:" now handle fallback font specified with a + comma-separated list. + - QDir - * Fix reentrency (listing directories in different threads) + * Fix reentrancy (listing directories in different threads) + +- QFile and QTemporaryFile + * Fixed a leak of file descriptors in QTemporaryFile::rename, + introduced in 4.5.1 + * [165920] QFile::copy leaves the source file open after the file has + been copied. + * [191467] & [252293] QFile::copy of resource files to the file system + fails on Windows. + * [197857] QFile::copy of resource files leaves temporary files on + file system. + * [248223] QTemporaryFile: Access denied error when (re-)opening through + QFile interface. + * [252659] QTemporaryFile::rename may leave source file behind. - QFileSystemModel * [254701] QFileSystemModel doesn't sort subfolders when being used in a @@ -80,31 +112,17 @@ General Improvements * [251341] It is not possible to remove a directory in the sidebar if the directory does not exist. * [251321] Hidden path in QFileDialog's sidebar cannot be opened. - * [226483] setSidebarUrls() handles the urls case sensitive so that + * [226483] setSidebarUrls() handles the URLs case sensitively so that adding the same directory twice is possible - Windows. * [252068] QFileDialog with QSortFilterProxyModel crashes. * [254490] QFileDialog selectFile() doesn't clear the selection if we call it several times. -- QGtkStyle - * [250731] Fixed a build issue with glib version lower than 2.3.2 - * [254342] Fixed a potential crash when system theme changes occur. - * [254614] Fixed an assert or warning related to GtkEntry focus handling - reported with certain versions of Gtk+. - -- QMacStyle - * [253339] Don't draw arrows on toolbuttons that have a menu and text - only. - * [252301] Ensure that small and mini spin boxes are drawn correctly. - -- QMotifStyle - * Fix crash when changing style and destroying progressbar. - - QFontDialog * [252000] Ensure that QFontDialog::getFont() works on Mac OS X. - QGraphicsItem - * [197802] Dont show children when parent is not visible + * [197802] Don't show children when parent is not visible * [252913] QGraphicsItem::setOpacity(0.0) does not trigger an update - QGraphicsView @@ -113,30 +131,34 @@ General Improvements - QGraphicsWidget * Fixed a bug with Qt::WidgetWithChildren shortcut context. +- QGtkStyle + * [250731] Fixed a build issue with glib version lower than 2.3.2 + * [254342] Fixed a potential crash when system theme changes occur. + * [254614] Fixed an assert or warning related to GtkEntry focus handling + reported with certain versions of GTK+. + - QLocalSocket - * [247144] correctly handle remote disconnects. + * [247144] Correctly handle remote disconnects. -- QNetworkCookie - * [251959] fix parsing of multiple cookies separated by a newline. +- QMacStyle + * [253339] Don't draw arrows on tool buttons that have a menu and text + only. + * [252301] Ensure that small and mini spin boxes are drawn correctly. -- QNetworkCookieJar - * [251467] do not allow cookies for domains like ".com". - * [228974] allow cookies whose domain attribute is missing a leading - dot. +- QMotifStyle + * Fix crash when changing style and destroying progress bar. - QNetworkAccessManager * [248838] Make QNetworkAccessManager reject invalid HTTP input earlier. -- QWidget - * [250668] Don't send extra wheel events when using the scroll wheel in - Cocoa. - * [253448] Prevent a crash when using the Qt::WA_MacBrushedMetal - attribute in conjunction with style sheets. +- QNetworkCookie + * [251959] Fixed parsing of multiple cookies separated by a newline. -- QWizard - * [252662] Fixed crash that could happen when compiling on Windows XP - and running on older Windows versions like 98 and 2000. +- QNetworkCookieJar + * [251467] Do not allow cookies for domains like ".com". + * [228974] Allow cookies whose domain attribute is missing a leading + dot. - QObject * Fixed possible race condition if two QObject connected together with @@ -154,6 +176,22 @@ General Improvements * [253663] Fixed an issue with implicitly closed poly lines when using perspective transforms. +- QPrintDialog + * [253135] Crash in QPrintDialog when editing output filename. + * [252873] Fixed an issue that could cause QPrintDialog to invalidate + a valid QPrinter object. + * [224728] Fixed an issue under X11 where QPrintDialog didn't update + the print-to-file state if it was passed a QPrinter set up to + print PDF or PostScript. + +- QPrinter + * [252873] Fixed an issue with QPrinter::NativeFormat printers not + being valid. + * [248881] Fixed an issue under Windows where QPrinter::pageRect() + returned the wrong rect when QPrinter::fullPage() was set. + * [199271] Fixed an issue with QPrinter::setPrinterName()/printerName() + on Mac. + - QProgressBar * [252283] Fixed busy indicator for a QProgressBar with a style sheet applied to it. @@ -166,74 +204,15 @@ General Improvements - QSortFilterProxyModel * [250023] Fixes QSortFilterProxyModel not reporting child if the model needs to fetchMore(). - * [251296] In dynamic filter model, childs of temporarly filtered items - were not correctly updated. + * [251296] In dynamic filter model, children of temporarily filtered + items were not correctly updated. * [252507] Show a warning instead of crashing if invalid indexes are passed. * [254234] Fixed setDynamicSortFilter not working when setting the model initially. - QString - * Fixed reentrency of QString::squeeze(). - -- QTabBar - * [252472] Fixed problem with the current tab not being visible after - calling setTabButton() on a scrolled tab bar. - -- QTransform - * Fixed issue in QTransform::type() causing a projective transform to be - treated as a scaling transform. - -- QVector - * Fixed reentrency of QVector::reserve(). - -- QtOpenGL - * [247083] Re-enabled antialiasing for large font sizes in OpenGL paint - engine. - * [251485] Fixed crash that could occur with projective transforms and - high quality antialiasing. - * [253468] Fixed a crash in the GL 2 paint engine that could occur - when drawing text. - -- QCssParser - * [252311] "font-family:" now handle fallback font specified with a - comma separated list. - -- QFile and QTemporaryFile - * Fixed a leak of file descriptors in QTemporaryFile::rename, - introduced in 4.5.1 - * [165920] QFile::copy leaves the source file open after the file has - been copied. - * [191467] & [252293] QFile::copy of resource files to the filesystem - fails on Windows. - * [197857] QFile::copy of resource files leaves temporary files on - filesystem. - * [248223] QTemporaryFile: Access denied error when (re-)opening through - QFile interface. - * [252659] QTemporaryFile::rename may leave source file behind. - -- QByteArrayMatcher - * [251958] Assignment operator and copy constructor miss data. - -- QCompleter - * [253125] QCompleter doesn't expand entries with - UnfilteredPopupCompletion. - -- QPrintDialog - * [253135] Crash in QPrintDialog when editing output filename. - * [252873] Fixed an issue that could cause QPrintDialog to invalidate - a valid QPrinter object. - * [224728] Fixed an issue under X11 where QPrintDialog didn't update - the print-to-file state if it was passed a QPrinter set up to - print PDF or PostScript. - -- QPrinter - * [252873] Fixed an issue with QPrinter::NativeFormat printers not - being valid. - * [248881] Fixed an issue under Windows where QPrinter::pageRect() - returned the wrong rect when QPrinter::fullPage() was set. - * [199271] Fixed an issue with QPrinter::setPrinterName()/printerName() - on Mac. + * Fixed reentrancy of QString::squeeze(). - QSvg * [253614] Fixed an issue with parsing the 'stroke-dasharray' SVG @@ -247,10 +226,31 @@ General Improvements the SVG file, even though there was a cached pixmap for that size available. +- QTabBar + * [252472] Fixed problem with the current tab not being visible after + calling setTabButton() on a scrolled tab bar. + - QToolButton * [252554] Fixed a problem where text labels would be partially clipped when using Qt::ToolButtonTextUnderIcon. +- QTransform + * Fixed issue in QTransform::type() causing a projective transform to be + treated as a scaling transform. + +- QVector + * Fixed reentrancy of QVector::reserve(). + +- QWidget + * [250668] Don't send extra wheel events when using the scroll wheel in + Cocoa. + * [253448] Prevent a crash when using the Qt::WA_MacBrushedMetal + attribute in conjunction with style sheets. + +- QWizard + * [252662] Fixed crash that could happen when compiling on Windows XP + and running on older Windows versions like 98 and 2000. + **************************************************************************** * Platform Specific Changes * **************************************************************************** @@ -258,18 +258,18 @@ General Improvements Qt for Linux/X11 ---------------- [253186] Fixed compile error in qfontengine_ft.cpp on 64-bit platforms with - legacy freetype headers. + legacy FreeType headers. [241361] Prevented asynchronous access to non-thread safe libfontconfig API. [244362] Worked around X server crash when calling XFillPolygon with more than 200000 points by falling back to raster paint engine. -[250326] Titlebar wasn't shown on X11 with Qt::CustomizeWindowHint for +[250326] Title bar wasn't shown on X11 with Qt::CustomizeWindowHint for fixed-size windows. [251925] Improved showing QMessageBox on small screens. [252042] Fixed the loading of the OpenSSL libraries on OpenBSD. [255311] Fixed an issue with '-graphicssystem raster' on 8 and 16 bit X servers. [252328] Fixed an issue when rendering old XLFD fonts on X11 with Xrender - and fontconfig enabled. + and Fontconfig enabled. [248720] Fixed an issue with using '-graphicssystem raster' on X servers with BGR color layout. [196152] Fixed a problem with QPixmap::toImage() on big endian systems that @@ -284,8 +284,8 @@ Fixed an issue with text rendering in 16 bit mode. [246196] Fixed an issue with clipped glyphs when rendering text with certain fonts. -[251259] Switching to another app left text cursor in line edits with - QtMfc framework. +[251259] Switching to another application left text cursor in line edits + with QtMfc framework. [253367] Fixed a memory leak when loading system icons on Windows. @@ -341,20 +341,20 @@ Qt for Windows CE * Plugins * **************************************************************************** -- directfb - * Make sure we pick an approriate format for pixmaps. E.g. use the same as +- DirectFB + * Make sure we pick an appropriate format for pixmaps. E.g. use the same as the primary surface for opaque pixmaps and pick an appropriate one for transparent pixmaps if the primary surface format is not transparent. - * Properly fall back to the raster engine for pens that aren't solidcolor. + * Properly fall back to the raster engine for pens that aren't solid color. * Properly fall back to raster engine with "mirrored" scales. - * Make sure window surfaces are in the approriate pixel format and created + * Make sure window surfaces are in the appropriate pixel format and created in video memory if supported. * Fix clipping bug that would cause painting errors. * Fix various crash bugs. * Fix bugs when transforming/copying pixmaps with alpha channel. * Fix various bugs with regards to painting with alpha channel/porter duff. - * Optimize a coupld of internal functions to slightly speed up drawing. + * Optimize a couple of internal functions to slightly speed up drawing. * Optimize raster fall backs. * Allow more customization for Flipping options. * Fix drawing with opacity != 1.0. -- cgit v0.12 From 7bf4512659113f8cc78e72f1c84158ce4f70a526 Mon Sep 17 00:00:00 2001 From: jasplin Date: Fri, 12 Jun 2009 14:56:04 +0200 Subject: Fixed problems with the event handling in QCompleter on Mac. On Mac, a new completer popup must initially have its show() method called rather than its hide() method. Otherwise the event handling done by the completer results in a bad state. On other platforms it doesn't matter. Reviewed-by: Richard Moe Gustavsen Task-number: 255374 --- src/gui/util/qcompleter.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/util/qcompleter.cpp b/src/gui/util/qcompleter.cpp index faa4e7b..da3edb0 100644 --- a/src/gui/util/qcompleter.cpp +++ b/src/gui/util/qcompleter.cpp @@ -1077,7 +1077,7 @@ void QCompleter::setPopup(QAbstractItemView *popup) delete d->popup; if (popup->model() != d->proxy) popup->setModel(d->proxy); - popup->hide(); + popup->show(); popup->setParent(0, Qt::Popup); Qt::FocusPolicy origPolicy = Qt::NoFocus; -- cgit v0.12 From c9bddb70cb4804672cedb23dbfb3ca13724f0e68 Mon Sep 17 00:00:00 2001 From: Kent Hansen Date: Fri, 12 Jun 2009 15:25:38 +0200 Subject: fix bugs in the completion+tooltip providers --- src/scripttools/debugging/qscriptcompletiontask.cpp | 2 +- src/scripttools/debugging/qscriptdebuggercodeview.cpp | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/scripttools/debugging/qscriptcompletiontask.cpp b/src/scripttools/debugging/qscriptcompletiontask.cpp index 2f3c2cf..9554681 100644 --- a/src/scripttools/debugging/qscriptcompletiontask.cpp +++ b/src/scripttools/debugging/qscriptcompletiontask.cpp @@ -132,7 +132,7 @@ void QScriptCompletionTaskPrivate::completeScriptExpression() while ((pos > 0) && isIdentChar(contents.at(pos-1))) --pos; - int pos2 = cursorPosition; + int pos2 = cursorPosition - 1; while ((pos2 < contents.size()-1) && isIdentChar(contents.at(pos2+1))) ++pos2; QString ident = contents.mid(pos, pos2 - pos + 1); diff --git a/src/scripttools/debugging/qscriptdebuggercodeview.cpp b/src/scripttools/debugging/qscriptdebuggercodeview.cpp index bc493e0..c03ec83 100644 --- a/src/scripttools/debugging/qscriptdebuggercodeview.cpp +++ b/src/scripttools/debugging/qscriptdebuggercodeview.cpp @@ -214,7 +214,6 @@ bool QScriptDebuggerCodeView::event(QEvent *e) if (contents.isEmpty()) return false; int linePosition = cursor.position() - block.position(); - linePosition -= 3; if (linePosition < 0) linePosition = 0; @@ -233,7 +232,7 @@ bool QScriptDebuggerCodeView::event(QEvent *e) // ignore string literals return false; } - int pos2 = linePosition; + int pos2 = linePosition - 1; while ((pos2 < contents.size()-1) && isIdentChar(contents.at(pos2+1))) ++pos2; QString ident = contents.mid(pos, pos2 - pos + 1); -- cgit v0.12 From 5f287af53d146e76a11f23c889d9591d9c0b7b65 Mon Sep 17 00:00:00 2001 From: Kent Hansen Date: Fri, 12 Jun 2009 15:32:20 +0200 Subject: make debugger's tooltip handling asynchronous Needed for remote debugging. --- src/scripttools/debugging/qscriptdebugger.cpp | 86 ++++++++++++---------- .../debugging/qscriptdebuggercodewidget.cpp | 13 +--- .../debugging/qscriptdebuggercommand.cpp | 10 +++ .../debugging/qscriptdebuggercommand_p.h | 3 + .../debugging/qscriptdebuggercommandexecutor.cpp | 41 ++++++++++- .../qscriptdebuggercommandschedulerfrontend.cpp | 6 ++ .../qscriptdebuggercommandschedulerfrontend_p.h | 2 + .../debugging/qscripttooltipproviderinterface_p.h | 5 +- 8 files changed, 110 insertions(+), 56 deletions(-) diff --git a/src/scripttools/debugging/qscriptdebugger.cpp b/src/scripttools/debugging/qscriptdebugger.cpp index ce43572..d83a1d0 100644 --- a/src/scripttools/debugging/qscriptdebugger.cpp +++ b/src/scripttools/debugging/qscriptdebugger.cpp @@ -94,6 +94,7 @@ #include #include #include +#include QT_BEGIN_NAMESPACE typedef QPair, QList > QScriptScriptsDelta; @@ -171,8 +172,8 @@ public: QScriptCompletionTaskInterface *createCompletionTask( const QString &contents, int cursorPosition, int frameIndex, int options); - QString toolTip(int frameIndex, int lineNumber, - const QStringList &path); + void showToolTip(const QPoint &pos, int frameIndex, + int lineNumber, const QStringList &path); static QPixmap pixmap(const QString &path); @@ -633,11 +634,49 @@ bool QScriptDebuggerPrivate::debuggerEvent(const QScriptDebuggerEvent &event) return !interactive; } +class QScriptToolTipJob : public QScriptDebuggerCommandSchedulerJob +{ +public: + QScriptToolTipJob(const QPoint &pos, int frameIndex, + int lineNumber, const QStringList &path, + QScriptDebuggerCommandSchedulerInterface *scheduler) + : QScriptDebuggerCommandSchedulerJob(scheduler), m_pos(pos), + m_frameIndex(frameIndex), m_lineNumber(lineNumber), m_path(path) + {} + + void start() + { + QScriptDebuggerCommandSchedulerFrontend frontend(commandScheduler(), this); + frontend.scheduleGetPropertyExpressionValue(m_frameIndex, m_lineNumber, m_path); + } + void handleResponse(const QScriptDebuggerResponse &response, int /*commandId*/) + { + QString tip = response.result().toString(); + if (tip.indexOf(QLatin1Char('\n')) != -1) { + QStringList lines = tip.split(QLatin1Char('\n')); + int lineCount = lines.size(); + if (lineCount > 5) { + lines = lines.mid(0, 5); + lines.append(QString::fromLatin1("(... %0 more lines ...)").arg(lineCount - 5)); + } + tip = lines.join(QLatin1String("\n")); + } + QToolTip::showText(m_pos, tip); + finish(); + } + +private: + QPoint m_pos; + int m_frameIndex; + int m_lineNumber; + QStringList m_path; +}; + /*! \reimp */ -QString QScriptDebuggerPrivate::toolTip(int frameIndex, int lineNumber, - const QStringList &path) +void QScriptDebuggerPrivate::showToolTip(const QPoint &pos, int frameIndex, + int lineNumber, const QStringList &path) { if (frameIndex == -1) { if (stackWidget) @@ -645,40 +684,8 @@ QString QScriptDebuggerPrivate::toolTip(int frameIndex, int lineNumber, else frameIndex = console->currentFrameIndex(); } - // ### cheating for now, need to use async API - QScriptEngineDebuggerFrontend *edf = static_cast(frontend); - QScriptDebuggerBackend *backend = edf->backend(); - QScriptContext *ctx = backend->context(frameIndex); - if (!ctx || path.isEmpty()) - return QString(); - QScriptContextInfo ctxInfo(ctx); - if (ctx->callee().isValid() - && ((lineNumber < ctxInfo.functionStartLineNumber()) - || (lineNumber > ctxInfo.functionEndLineNumber()))) { - return QString(); - } - QScriptValueList objects; - int pathIndex = 0; - if (path.at(0) == QLatin1String("this")) { - objects.append(ctx->thisObject()); - ++pathIndex; - } else { - objects << ctx->scopeChain(); - } - for (int i = 0; i < objects.size(); ++i) { - QScriptValue val = objects.at(i); - for (int j = pathIndex; val.isValid() && (j < path.size()); ++j) { - val = val.property(path.at(j)); - } - if (val.isValid()) { - bool hadException = (ctx->state() == QScriptContext::ExceptionState); - QString str = val.toString(); - if (!hadException && backend->engine()->hasUncaughtException()) - backend->engine()->clearExceptions(); - return str; - } - } - return QString(); + QScriptDebuggerJob *job = new QScriptToolTipJob(pos, frameIndex, lineNumber, path, this); + scheduleJob(job); } /*! @@ -1072,7 +1079,7 @@ class LoadLocalsJob : public QScriptDebuggerCommandSchedulerJob public: LoadLocalsJob(QScriptDebuggerPrivate *debugger, int frameIndex) : QScriptDebuggerCommandSchedulerJob(debugger), - m_debugger(debugger), m_frameIndex(frameIndex), m_state(0) {} + m_debugger(debugger), m_frameIndex(frameIndex) {} void start() { @@ -1104,7 +1111,6 @@ public: private: QScriptDebuggerPrivate *m_debugger; int m_frameIndex; - int m_state; }; class EmitStoppedSignalJob : public QScriptDebuggerJob diff --git a/src/scripttools/debugging/qscriptdebuggercodewidget.cpp b/src/scripttools/debugging/qscriptdebuggercodewidget.cpp index 14ce0fe..b2f1dec 100644 --- a/src/scripttools/debugging/qscriptdebuggercodewidget.cpp +++ b/src/scripttools/debugging/qscriptdebuggercodewidget.cpp @@ -49,7 +49,6 @@ #include #include #include -#include QT_BEGIN_NAMESPACE @@ -197,17 +196,7 @@ void QScriptDebuggerCodeWidgetPrivate::_q_onScriptsChanged() void QScriptDebuggerCodeWidgetPrivate::_q_onToolTipRequest( const QPoint &pos, int lineNumber, const QStringList &path) { - QString tip = toolTipProvider->toolTip(/*frameIndex=*/-1, lineNumber, path); - if (tip.indexOf(QLatin1Char('\n')) != -1) { - QStringList lines = tip.split(QLatin1Char('\n')); - int lineCount = lines.size(); - if (lineCount > 5) { - lines = lines.mid(0, 5); - lines.append(QString::fromLatin1("(... %0 more lines ...)").arg(lineCount - 5)); - } - tip = lines.join(QLatin1String("\n")); - } - QToolTip::showText(pos, tip); + toolTipProvider->showToolTip(pos, /*frameIndex=*/-1, lineNumber, path); } QScriptDebuggerCodeWidget::QScriptDebuggerCodeWidget(QWidget *parent) diff --git a/src/scripttools/debugging/qscriptdebuggercommand.cpp b/src/scripttools/debugging/qscriptdebuggercommand.cpp index c40bfc4..3ceb0d5 100644 --- a/src/scripttools/debugging/qscriptdebuggercommand.cpp +++ b/src/scripttools/debugging/qscriptdebuggercommand.cpp @@ -558,6 +558,16 @@ QScriptDebuggerCommand QScriptDebuggerCommand::contextsCheckpoint() return cmd; } +QScriptDebuggerCommand QScriptDebuggerCommand::getPropertyExpressionValue( + int contextIndex, int lineNumber, const QStringList &path) +{ + QScriptDebuggerCommand cmd(GetPropertyExpressionValue); + cmd.setContextIndex(contextIndex); + cmd.setLineNumber(lineNumber); + cmd.setAttribute(UserAttribute, path); + return cmd; +} + QScriptDebuggerCommand QScriptDebuggerCommand::newScriptObjectSnapshotCommand() { QScriptDebuggerCommand cmd(NewScriptObjectSnapshot); diff --git a/src/scripttools/debugging/qscriptdebuggercommand_p.h b/src/scripttools/debugging/qscriptdebuggercommand_p.h index 260e3ec..6cfdec5 100644 --- a/src/scripttools/debugging/qscriptdebuggercommand_p.h +++ b/src/scripttools/debugging/qscriptdebuggercommand_p.h @@ -106,6 +106,7 @@ public: GetActivationObject, GetScopeChain, ContextsCheckpoint, + GetPropertyExpressionValue, NewScriptObjectSnapshot, ScriptObjectSnapshotCapture, @@ -229,6 +230,8 @@ public: static QScriptDebuggerCommand getActivationObjectCommand(int contextIndex); static QScriptDebuggerCommand getScopeChainCommand(int contextIndex); static QScriptDebuggerCommand contextsCheckpoint(); + static QScriptDebuggerCommand getPropertyExpressionValue(int contextIndex, int lineNumber, + const QStringList &path); static QScriptDebuggerCommand newScriptObjectSnapshotCommand(); static QScriptDebuggerCommand scriptObjectSnapshotCaptureCommand(int id, const QScriptDebuggerValue &object); diff --git a/src/scripttools/debugging/qscriptdebuggercommandexecutor.cpp b/src/scripttools/debugging/qscriptdebuggercommandexecutor.cpp index 1be8c5f..ce9aa03 100644 --- a/src/scripttools/debugging/qscriptdebuggercommandexecutor.cpp +++ b/src/scripttools/debugging/qscriptdebuggercommandexecutor.cpp @@ -105,8 +105,8 @@ QScriptDebuggerCommandExecutor::~QScriptDebuggerCommandExecutor() Applies the given \a command to the given \a backend. */ QScriptDebuggerResponse QScriptDebuggerCommandExecutor::execute( - QScriptDebuggerBackend *backend, - const QScriptDebuggerCommand &command) + QScriptDebuggerBackend *backend, + const QScriptDebuggerCommand &command) { QScriptDebuggerResponse response; switch (command.type()) { @@ -300,6 +300,43 @@ QScriptDebuggerResponse QScriptDebuggerCommandExecutor::execute( response.setResult(qVariantFromValue(backend->contextsCheckpoint())); } break; + case QScriptDebuggerCommand::GetPropertyExpressionValue: { + QScriptContext *ctx = backend->context(command.contextIndex()); + int lineNumber = command.lineNumber(); + QVariant attr = command.attribute(QScriptDebuggerCommand::UserAttribute); + QStringList path = attr.toStringList(); + if (!ctx || path.isEmpty()) + break; + QScriptContextInfo ctxInfo(ctx); + if (ctx->callee().isValid() + && ((lineNumber < ctxInfo.functionStartLineNumber()) + || (lineNumber > ctxInfo.functionEndLineNumber()))) { + break; + } + QScriptValueList objects; + int pathIndex = 0; + if (path.at(0) == QLatin1String("this")) { + objects.append(ctx->thisObject()); + ++pathIndex; + } else { + objects << ctx->scopeChain(); + } + for (int i = 0; i < objects.size(); ++i) { + QScriptValue val = objects.at(i); + for (int j = pathIndex; val.isValid() && (j < path.size()); ++j) { + val = val.property(path.at(j)); + } + if (val.isValid()) { + bool hadException = (ctx->state() == QScriptContext::ExceptionState); + QString str = val.toString(); + if (!hadException && backend->engine()->hasUncaughtException()) + backend->engine()->clearExceptions(); + response.setResult(str); + break; + } + } + } break; + case QScriptDebuggerCommand::NewScriptObjectSnapshot: { int id = backend->newScriptObjectSnapshot(); response.setResult(id); diff --git a/src/scripttools/debugging/qscriptdebuggercommandschedulerfrontend.cpp b/src/scripttools/debugging/qscriptdebuggercommandschedulerfrontend.cpp index 1e20ab4..a181711 100644 --- a/src/scripttools/debugging/qscriptdebuggercommandschedulerfrontend.cpp +++ b/src/scripttools/debugging/qscriptdebuggercommandschedulerfrontend.cpp @@ -251,6 +251,12 @@ int QScriptDebuggerCommandSchedulerFrontend::scheduleContextsCheckpoint() return scheduleCommand(QScriptDebuggerCommand::contextsCheckpoint()); } +int QScriptDebuggerCommandSchedulerFrontend::scheduleGetPropertyExpressionValue( + int contextIndex, int lineNumber, const QStringList &path) +{ + return scheduleCommand(QScriptDebuggerCommand::getPropertyExpressionValue(contextIndex, lineNumber, path)); +} + int QScriptDebuggerCommandSchedulerFrontend::scheduleEvaluate(int contextIndex, const QString &program, const QString &fileName, diff --git a/src/scripttools/debugging/qscriptdebuggercommandschedulerfrontend_p.h b/src/scripttools/debugging/qscriptdebuggercommandschedulerfrontend_p.h index ed9cbf9..ff9c570 100644 --- a/src/scripttools/debugging/qscriptdebuggercommandschedulerfrontend_p.h +++ b/src/scripttools/debugging/qscriptdebuggercommandschedulerfrontend_p.h @@ -109,6 +109,8 @@ public: int scheduleGetActivationObject(int contextIndex); int scheduleGetScopeChain(int contextIndex); int scheduleContextsCheckpoint(); + int scheduleGetPropertyExpressionValue(int contextIndex, int lineNumber, + const QStringList &path); // iteration int scheduleNewScriptValueIterator(const QScriptDebuggerValue &object); diff --git a/src/scripttools/debugging/qscripttooltipproviderinterface_p.h b/src/scripttools/debugging/qscripttooltipproviderinterface_p.h index 0a273d9..463f087 100644 --- a/src/scripttools/debugging/qscripttooltipproviderinterface_p.h +++ b/src/scripttools/debugging/qscripttooltipproviderinterface_p.h @@ -57,6 +57,7 @@ QT_BEGIN_NAMESPACE +class QPoint; class QStringList; class Q_AUTOTEST_EXPORT QScriptToolTipProviderInterface @@ -64,8 +65,8 @@ class Q_AUTOTEST_EXPORT QScriptToolTipProviderInterface public: virtual ~QScriptToolTipProviderInterface() {} - virtual QString toolTip(int frameIndex, int lineNumber, - const QStringList &path) = 0; + virtual void showToolTip(const QPoint &pos, int frameIndex, + int lineNumber, const QStringList &path) = 0; }; QT_END_NAMESPACE -- cgit v0.12 From 4c643900bb9cc561250ab3dcc2fa230081767d10 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20R=C3=B8dal?= Date: Fri, 12 Jun 2009 15:42:21 +0200 Subject: Fixed off-by-one color bug in GL 2 paint engine. Calling premultiplyColor() with a red channel of 255, alpha channel of 255, and opacity 1 would result in a color with red channel of 254. --- src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp b/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp index d1c6e9f..833f8cf 100644 --- a/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp +++ b/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp @@ -266,11 +266,11 @@ void QGL2PaintEngineExPrivate::updateTextureFilter(GLenum target, GLenum wrapMod QColor QGL2PaintEngineExPrivate::premultiplyColor(QColor c, GLfloat opacity) { - uint alpha = qRound(c.alpha() * opacity); - return QColor ( ((c.red() * alpha + 128) >> 8), - ((c.green() * alpha + 128) >> 8), - ((c.blue() * alpha + 128) >> 8), - alpha); + qreal alpha = c.alphaF() * opacity; + c.setRedF(c.redF() * alpha); + c.setGreenF(c.greenF() * alpha); + c.setBlueF(c.blueF() * alpha); + return c; } -- cgit v0.12 From d8f089c1cccfc6d996ef65d06af33bd696654963 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tor=20Arne=20Vestb=C3=B8?= Date: Fri, 12 Jun 2009 15:51:58 +0200 Subject: Use output-path, not relative, when symlinking qvfb-files in configure This gets rid of a few warnings when shadow-building Qt, since the symlinks are no longer created in the source tree. Reviewed-by: Paul Olav Tvete --- configure | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/configure b/configure index 0a8b61a..ec92095 100755 --- a/configure +++ b/configure @@ -2105,8 +2105,9 @@ fi # symlink files from src/gui/embedded neccessary to build qvfb if [ "$CFG_DEV" = "yes" ]; then + mkdir -p "$outpath/tools/qvfb" for f in qvfbhdr.h qlock_p.h qlock.cpp qwssignalhandler_p.h qwssignalhandler.cpp; do - dest="${relpath}/tools/qvfb/${f}" + dest="${outpath}/tools/qvfb/${f}" rm -f "$dest" ln -s "${relpath}/src/gui/embedded/${f}" "${dest}" done -- cgit v0.12 From fbbaebfa97ddcaebfd12027b01877d6393aa0008 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Nilsen?= Date: Fri, 12 Jun 2009 16:40:06 +0200 Subject: Speedup QGraphicsItemPrivate::TransformData::computedFullTransform Do as little as possible and avoid premulitplication :) Reviewed-by: Samuel --- src/gui/graphicsview/qgraphicsitem.cpp | 21 ++++++++++++++++----- src/gui/graphicsview/qgraphicsitem_p.h | 22 +++++++++++++++++----- 2 files changed, 33 insertions(+), 10 deletions(-) diff --git a/src/gui/graphicsview/qgraphicsitem.cpp b/src/gui/graphicsview/qgraphicsitem.cpp index e4f2a75..a436805 100644 --- a/src/gui/graphicsview/qgraphicsitem.cpp +++ b/src/gui/graphicsview/qgraphicsitem.cpp @@ -824,7 +824,7 @@ void QGraphicsItemPrivate::combineTransformFromParent(QTransform *x, const QTran } else { x->translate(pos.x(), pos.y()); if (transformData) - *x = transformData->computedFullTransform() * *x; + *x = transformData->computedFullTransform(x); } } @@ -2777,6 +2777,7 @@ void QGraphicsItem::setXRotation(qreal angle) if (!d_ptr->transformData) d_ptr->transformData = new QGraphicsItemPrivate::TransformData; d_ptr->transformData->xRotation = angle; + d_ptr->transformData->onlyTransform = false; d_ptr->dirtySceneTransform = 1; } @@ -2813,6 +2814,7 @@ void QGraphicsItem::setYRotation(qreal angle) if (!d_ptr->transformData) d_ptr->transformData = new QGraphicsItemPrivate::TransformData; d_ptr->transformData->yRotation = angle; + d_ptr->transformData->onlyTransform = false; d_ptr->dirtySceneTransform = 1; } @@ -2849,6 +2851,7 @@ void QGraphicsItem::setZRotation(qreal angle) if (!d_ptr->transformData) d_ptr->transformData = new QGraphicsItemPrivate::TransformData; d_ptr->transformData->zRotation = angle; + d_ptr->transformData->onlyTransform = false; d_ptr->dirtySceneTransform = 1; } @@ -2868,6 +2871,7 @@ void QGraphicsItem::setRotation(qreal x, qreal y, qreal z) d_ptr->transformData->xRotation = x; d_ptr->transformData->yRotation = y; d_ptr->transformData->zRotation = z; + d_ptr->transformData->onlyTransform = false; d_ptr->dirtySceneTransform = 1; } @@ -2904,6 +2908,7 @@ void QGraphicsItem::setXScale(qreal factor) if (!d_ptr->transformData) d_ptr->transformData = new QGraphicsItemPrivate::TransformData; d_ptr->transformData->xScale = factor; + d_ptr->transformData->onlyTransform = false; d_ptr->dirtySceneTransform = 1; } @@ -2940,6 +2945,7 @@ void QGraphicsItem::setYScale(qreal factor) if (!d_ptr->transformData) d_ptr->transformData = new QGraphicsItemPrivate::TransformData; d_ptr->transformData->yScale = factor; + d_ptr->transformData->onlyTransform = false; d_ptr->dirtySceneTransform = 1; } @@ -2959,6 +2965,7 @@ void QGraphicsItem::setScale(qreal sx, qreal sy) d_ptr->transformData = new QGraphicsItemPrivate::TransformData; d_ptr->transformData->xScale = sx; d_ptr->transformData->yScale = sy; + d_ptr->transformData->onlyTransform = false; d_ptr->dirtySceneTransform = 1; } @@ -2995,6 +3002,7 @@ void QGraphicsItem::setHorizontalShear(qreal shear) if (!d_ptr->transformData) d_ptr->transformData = new QGraphicsItemPrivate::TransformData; d_ptr->transformData->horizontalShear = shear; + d_ptr->transformData->onlyTransform = false; d_ptr->dirtySceneTransform = 1; } @@ -3031,6 +3039,7 @@ void QGraphicsItem::setVerticalShear(qreal shear) if (!d_ptr->transformData) d_ptr->transformData = new QGraphicsItemPrivate::TransformData; d_ptr->transformData->verticalShear = shear; + d_ptr->transformData->onlyTransform = false; d_ptr->dirtySceneTransform = 1; } @@ -3050,6 +3059,7 @@ void QGraphicsItem::setShear(qreal sh, qreal sv) d_ptr->transformData = new QGraphicsItemPrivate::TransformData; d_ptr->transformData->horizontalShear = sh; d_ptr->transformData->verticalShear = sv; + d_ptr->transformData->onlyTransform = false; d_ptr->dirtySceneTransform = 1; } @@ -3083,6 +3093,7 @@ void QGraphicsItem::setTransformOrigin(const QPointF &origin) d_ptr->transformData = new QGraphicsItemPrivate::TransformData; d_ptr->transformData->xOrigin = origin.x(); d_ptr->transformData->yOrigin = origin.y(); + d_ptr->transformData->onlyTransform = false; d_ptr->dirtySceneTransform = 1; } @@ -3196,7 +3207,7 @@ QTransform QGraphicsItem::deviceTransform(const QTransform &viewportTransform) c QTransform matrix; matrix.translate(mappedPoint.x(), mappedPoint.y()); if (untransformedAncestor->d_ptr->transformData) - matrix = untransformedAncestor->d_ptr->transformData->computedFullTransform() * matrix; + matrix = untransformedAncestor->d_ptr->transformData->computedFullTransform(&matrix); // Then transform and translate all children. for (int i = 0; i < parents.size(); ++i) { @@ -4372,9 +4383,9 @@ void QGraphicsItemPrivate::updateCachedClipPathFromSetPosHelper(const QPointF &n // Find closest clip ancestor and transform. Q_Q(QGraphicsItem); // COMBINE - QTransform thisToParentTransform = transformData - ? transformData->computedFullTransform() * QTransform::fromTranslate(newPos.x(), newPos.y()) - : QTransform::fromTranslate(newPos.x(), newPos.y()); + QTransform thisToParentTransform = QTransform::fromTranslate(newPos.x(), newPos.y()); + if (transformData) + thisToParentTransform = transformData->computedFullTransform(&thisToParentTransform); QGraphicsItem *clipParent = parent; while (clipParent && !(clipParent->d_ptr->flags & QGraphicsItem::ItemClipsChildrenToShape)) { thisToParentTransform *= clipParent->d_ptr->transformToParent(); diff --git a/src/gui/graphicsview/qgraphicsitem_p.h b/src/gui/graphicsview/qgraphicsitem_p.h index 0e6658c..03ec040 100644 --- a/src/gui/graphicsview/qgraphicsitem_p.h +++ b/src/gui/graphicsview/qgraphicsitem_p.h @@ -425,23 +425,35 @@ struct QGraphicsItemPrivate::TransformData { qreal verticalShear; qreal xOrigin; qreal yOrigin; + bool onlyTransform; TransformData() : xScale(1.0), yScale(1.0), xRotation(0.0), yRotation(0.0), zRotation(0.0), - horizontalShear(0.0), verticalShear(0.0), xOrigin(0.0), yOrigin(0.0) + horizontalShear(0.0), verticalShear(0.0), xOrigin(0.0), yOrigin(0.0), + onlyTransform(true) {} - QTransform computedFullTransform() const + QTransform computedFullTransform(QTransform *postmultiplyTransform = 0) const { - QTransform x; - x.translate(xOrigin, yOrigin); - x = transform * x; + if (onlyTransform) { + if (!postmultiplyTransform) + return transform; + QTransform x(transform); + x *= *postmultiplyTransform; + return x; + } + + QTransform x(transform); + if (xOrigin != 0 || yOrigin != 0) + x *= QTransform::fromTranslate(xOrigin, yOrigin); x.rotate(xRotation, Qt::XAxis); x.rotate(yRotation, Qt::YAxis); x.rotate(zRotation, Qt::ZAxis); x.shear(horizontalShear, verticalShear); x.scale(xScale, yScale); x.translate(-xOrigin, -yOrigin); + if (postmultiplyTransform) + x *= *postmultiplyTransform; return x; } }; -- cgit v0.12 From 56b93b836f70e121540e8d8da9447f5dc6e1fdd6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Nilsen?= Date: Fri, 12 Jun 2009 16:46:16 +0200 Subject: QTransform::shear cut-off. Do nothing if both sh and sv is 0. Reviewed-by: Samuel --- src/gui/painting/qtransform.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/gui/painting/qtransform.cpp b/src/gui/painting/qtransform.cpp index 16d60f8..4bc20f6 100644 --- a/src/gui/painting/qtransform.cpp +++ b/src/gui/painting/qtransform.cpp @@ -503,6 +503,9 @@ QTransform QTransform::fromScale(qreal sx, qreal sy) */ QTransform & QTransform::shear(qreal sh, qreal sv) { + if (sh == 0 && sv == 0) + return *this; + switch(inline_type()) { case TxNone: case TxTranslate: -- cgit v0.12 From 4d0cc0b9600f8530bb0e8712b4bb109d1810c4a7 Mon Sep 17 00:00:00 2001 From: Jens Bache-Wiig Date: Fri, 12 Jun 2009 16:53:40 +0200 Subject: Integrating QProxyStyle This class adds convenient support for proxy styles in Qt. Note that to support proper proxying, styles now call their functions through proxy() so that the proxy regains control over subcomponents. Note that there is a small price to be payed by the extra function call which can at the cost of readability be redirected to the private class member in the future. Task-number: 229556 Reviewed-by: trond --- src/gui/kernel/qapplication.cpp | 81 +++--- src/gui/kernel/qapplication_p.h | 4 +- src/gui/kernel/qapplication_x11.cpp | 76 ++--- src/gui/styles/qcleanlooksstyle.cpp | 148 +++++----- src/gui/styles/qcommonstyle.cpp | 534 +++++++++++++++++----------------- src/gui/styles/qgtkstyle.cpp | 118 ++++---- src/gui/styles/qmacstyle_mac.mm | 92 +++--- src/gui/styles/qmotifstyle.cpp | 156 +++++----- src/gui/styles/qplastiquestyle.cpp | 102 +++---- src/gui/styles/qstyle.cpp | 34 ++- src/gui/styles/qstyle.h | 5 + src/gui/styles/qstyle_p.h | 14 +- src/gui/styles/qwindowsstyle.cpp | 94 +++--- src/gui/styles/qwindowsvistastyle.cpp | 76 ++--- src/gui/styles/qwindowsxpstyle.cpp | 144 ++++----- src/gui/styles/styles.pri | 4 + tests/auto/qstyle/tst_qstyle.cpp | 42 ++- 17 files changed, 912 insertions(+), 812 deletions(-) diff --git a/src/gui/kernel/qapplication.cpp b/src/gui/kernel/qapplication.cpp index 4ab653d..b066f4d 100644 --- a/src/gui/kernel/qapplication.cpp +++ b/src/gui/kernel/qapplication.cpp @@ -391,6 +391,7 @@ Qt::MouseButtons QApplicationPrivate::mouse_buttons = Qt::NoButton; Qt::KeyboardModifiers QApplicationPrivate::modifier_buttons = Qt::NoModifier; QStyle *QApplicationPrivate::app_style = 0; // default application style +QString QApplicationPrivate::styleOverride; // style override #ifndef QT_NO_STYLE_STYLESHEET QString QApplicationPrivate::styleSheet; // default application stylesheet @@ -438,7 +439,6 @@ bool QApplicationPrivate::animate_tooltip = false; bool QApplicationPrivate::fade_tooltip = false; bool QApplicationPrivate::animate_toolbox = false; bool QApplicationPrivate::widgetCount = false; -QString* QApplicationPrivate::styleOverride = 0; #if defined(Q_WS_WIN) && !defined(Q_WS_WINCE) bool QApplicationPrivate::inSizeMove = false; #endif @@ -548,9 +548,7 @@ void QApplicationPrivate::process_cmdline() delete app_style; app_style = 0; } - if (!styleOverride) - styleOverride = new QString; - *styleOverride = s; + styleOverride = s; } } @@ -1287,44 +1285,14 @@ QStyle *QApplication::style() return 0; } -#if defined(Q_WS_X11) - if(!QApplicationPrivate::styleOverride) - QApplicationPrivate::x11_initialize_style(); // run-time search for default style -#endif if (!QApplicationPrivate::app_style) { // Compile-time search for default style // QString style; - if (QApplicationPrivate::styleOverride) { - style = *QApplicationPrivate::styleOverride; - delete QApplicationPrivate::styleOverride; - QApplicationPrivate::styleOverride = 0; - } else { -#if defined(Q_WS_WIN) && defined(Q_WS_WINCE) - if (qt_wince_is_smartphone() || qt_wince_is_pocket_pc()) - style = QLatin1String("WindowsMobile"); - else - style = QLatin1String("WindowsCE"); - -#elif defined(Q_WS_WIN) - if ((QSysInfo::WindowsVersion >= QSysInfo::WV_VISTA - && QSysInfo::WindowsVersion < QSysInfo::WV_NT_based)) - style = QLatin1String("WindowsVista"); - else if ((QSysInfo::WindowsVersion >= QSysInfo::WV_XP - && QSysInfo::WindowsVersion < QSysInfo::WV_NT_based)) - style = QLatin1String("WindowsXP"); - else - style = QLatin1String("Windows"); // default styles for Windows -#elif defined(Q_WS_X11) && defined(Q_OS_SOLARIS) - style = QLatin1String("CDE"); // default style for X11 on Solaris -#elif defined(Q_WS_X11) && defined(Q_OS_IRIX) - style = QLatin1String("SGI"); // default style for X11 on IRIX -#elif defined(Q_WS_X11) || defined(Q_WS_QWS) - style = QLatin1String("Plastique"); // default style for X11 and small devices -#elif defined(Q_WS_MAC) - style = QLatin1String("Macintosh"); // default style for all Mac's -#endif - } + if (!QApplicationPrivate::styleOverride.isEmpty()) + style = QApplicationPrivate::styleOverride; + else + style = QApplicationPrivate::desktopStyleKey(); QStyle *&app_style = QApplicationPrivate::app_style; app_style = QStyleFactory::create(style); @@ -1412,9 +1380,8 @@ void QApplication::setStyle(QStyle *style) } else #endif // QT_NO_STYLE_STYLESHEET QApplicationPrivate::app_style = style; - QApplicationPrivate::app_style->setParent(qApp); // take ownership - + // take care of possible palette requirements of certain gui // styles. Do it before polishing the application since the style // might call QApplication::setPalette() itself @@ -1936,6 +1903,40 @@ void QApplicationPrivate::setSystemFont(const QFont &font) QApplication::setFont(*sys_font); } +/*! \internal +*/ +QString QApplicationPrivate::desktopStyleKey() +{ +QString desktopstyle; +#if defined(Q_WS_WIN) && defined(Q_WS_WINCE) + if (qt_wince_is_smartphone() || qt_wince_is_pocket_pc()) + desktopstyle = QLatin1String("WindowsMobile"); + else + desktopstyle = QLatin1String("WindowsCE"); + +#elif defined(Q_WS_WIN) + if ((QSysInfo::WindowsVersion >= QSysInfo::WV_VISTA + && QSysInfo::WindowsVersion < QSysInfo::WV_NT_based)) + desktopstyle = QLatin1String("WindowsVista"); + else if ((QSysInfo::WindowsVersion >= QSysInfo::WV_XP + && QSysInfo::WindowsVersion < QSysInfo::WV_NT_based)) + desktopstyle = QLatin1String("WindowsXP"); + else + desktopstyle = QLatin1String("Windows"); // default styles for Windows +#elif defined(Q_WS_X11) && defined(Q_OS_SOLARIS) + desktopstyle = QLatin1String("CDE"); // default style for X11 on Solaris +#elif defined(Q_WS_X11) && defined(Q_OS_IRIX) + desktopstyle = QLatin1String("SGI"); // default style for X11 on IRIX +#elif defined(Q_WS_QWS) + desktopstyle = QLatin1String("Plastique"); // default style for X11 and small devices +#elif defined(Q_WS_X11) + desktopstyle = QApplicationPrivate::x11_desktop_style(); // default runtime dependant style for X11 +#elif defined(Q_WS_MAC) + desktopstyle = QLatin1String("Macintosh"); // default style for all Mac's +#endif + return desktopstyle; +} + /*! \property QApplication::windowIcon \brief the default window icon diff --git a/src/gui/kernel/qapplication_p.h b/src/gui/kernel/qapplication_p.h index 7e97418..dd2f479 100644 --- a/src/gui/kernel/qapplication_p.h +++ b/src/gui/kernel/qapplication_p.h @@ -210,6 +210,7 @@ public: #if defined(Q_WS_X11) #ifndef QT_NO_SETTINGS static QString kdeHome(); + static QString x11_desktop_style(); static bool x11_apply_settings(); #endif static void reset_instance_pointer(); @@ -223,6 +224,7 @@ public: static int autoMaximizeThreshold; static bool autoSipEnabled; #endif + static QString desktopStyleKey(); static QGraphicsSystem *graphicsSystem() #if !defined(Q_WS_QWS) @@ -392,7 +394,7 @@ public: static QApplicationPrivate *instance() { return self; } - static QString *styleOverride; + static QString styleOverride; static int app_compile_version; diff --git a/src/gui/kernel/qapplication_x11.cpp b/src/gui/kernel/qapplication_x11.cpp index 720f5c3..a94347b 100644 --- a/src/gui/kernel/qapplication_x11.cpp +++ b/src/gui/kernel/qapplication_x11.cpp @@ -799,6 +799,14 @@ Q_GUI_EXPORT void qt_x11_apply_settings_in_all_apps() PropModeReplace, (unsigned char *)stamp.data(), stamp.size()); } +static int kdeSessionVersion() +{ + static int kdeVersion = 0; + if (!kdeVersion) + kdeVersion = QString::fromLocal8Bit(qgetenv("KDE_SESSION_VERSION")).toInt(); + return kdeVersion; +} + /*! \internal Gets the current KDE 3 or 4 home path */ @@ -808,10 +816,9 @@ QString QApplicationPrivate::kdeHome() if (kdeHomePath.isEmpty()) { kdeHomePath = QString::fromLocal8Bit(qgetenv("KDEHOME")); if (kdeHomePath.isEmpty()) { - int kdeSessionVersion = QString::fromLocal8Bit(qgetenv("KDE_SESSION_VERSION")).toInt(); QDir homeDir(QDir::homePath()); QString kdeConfDir(QLatin1String("/.kde")); - if (4 == kdeSessionVersion && homeDir.exists(QLatin1String(".kde4"))) + if (4 == kdeSessionVersion() && homeDir.exists(QLatin1String(".kde4"))) kdeConfDir = QLatin1String("/.kde4"); kdeHomePath = QDir::homePath() + kdeConfDir; } @@ -880,13 +887,11 @@ bool QApplicationPrivate::x11_apply_settings() QApplicationPrivate::setSystemPalette(pal); } - int kdeSessionVersion = QString::fromLocal8Bit(qgetenv("KDE_SESSION_VERSION")).toInt(); - if (!appFont) { QFont font(QApplication::font()); QString fontDescription; // Override Qt font if KDE4 settings can be used - if (4 == kdeSessionVersion) { + if (4 == kdeSessionVersion()) { QSettings kdeSettings(kdeHome() + QLatin1String("/share/config/kdeglobals"), QSettings::IniFormat); fontDescription = kdeSettings.value(QLatin1String("font")).toString(); if (fontDescription.isEmpty()) { @@ -916,29 +921,16 @@ bool QApplicationPrivate::x11_apply_settings() // read new QStyle QString stylename = settings.value(QLatin1String("style")).toString(); - if (stylename.isEmpty() && !QApplicationPrivate::styleOverride && X11->use_xrender) { - QStringList availableStyles = QStyleFactory::keys(); - // Override Qt style if KDE4 settings can be used - if (4 == kdeSessionVersion) { - QSettings kdeSettings(kdeHome() + QLatin1String("/share/config/kdeglobals"), QSettings::IniFormat); - QString kde4Style = kdeSettings.value(QLatin1String("widgetStyle"), - QLatin1String("Oxygen")).toString(); - foreach (const QString &style, availableStyles) { - if (style.toLower() == kde4Style.toLower()) - stylename = kde4Style; - } - // Set QGtkStyle for GNOME - } else if (X11->desktopEnvironment == DE_GNOME) { - QString gtkStyleKey = QString::fromLatin1("GTK+"); - if (availableStyles.contains(gtkStyleKey)) - stylename = gtkStyleKey; - } + + + if (stylename.isEmpty() && QApplicationPrivate::styleOverride.isNull() && X11->use_xrender) { + stylename = x11_desktop_style(); } static QString currentStyleName = stylename; if (QCoreApplication::startingUp()) { - if (!stylename.isEmpty() && !QApplicationPrivate::styleOverride) - QApplicationPrivate::styleOverride = new QString(stylename); + if (!stylename.isEmpty() && QApplicationPrivate::styleOverride.isNull()) + QApplicationPrivate::styleOverride = stylename; } else { if (currentStyleName != stylename) { currentStyleName = stylename; @@ -2625,31 +2617,49 @@ void qt_init(QApplicationPrivate *priv, int, /*! \internal */ -void QApplicationPrivate::x11_initialize_style() +QString QApplicationPrivate::x11_desktop_style() { - if (QApplicationPrivate::app_style) - return; + QString stylename; + QStringList availableStyles = QStyleFactory::keys(); + // Override Qt style if KDE4 settings can be used + if (4 == kdeSessionVersion()) { + QSettings kdeSettings(kdeHome() + QLatin1String("/share/config/kdeglobals"), QSettings::IniFormat); + QString kde4Style = kdeSettings.value(QLatin1String("widgetStyle"), + QLatin1String("Oxygen")).toString(); + foreach (const QString &style, availableStyles) { + if (style.toLower() == kde4Style.toLower()) + stylename = kde4Style; + } + // Set QGtkStyle for GNOME + } else if (X11->desktopEnvironment == DE_GNOME) { + QString gtkStyleKey = QString::fromLatin1("GTK+"); + if (availableStyles.contains(gtkStyleKey)) + stylename = gtkStyleKey; + } - switch(X11->desktopEnvironment) { + if (stylename.isEmpty()) { + switch(X11->desktopEnvironment) { case DE_KDE: if (X11->use_xrender) - QApplicationPrivate::app_style = QStyleFactory::create(QLatin1String("plastique")); + stylename = QLatin1String("plastique"); else - QApplicationPrivate::app_style = QStyleFactory::create(QLatin1String("windows")); + stylename = QLatin1String("windows"); break; case DE_GNOME: if (X11->use_xrender) - QApplicationPrivate::app_style = QStyleFactory::create(QLatin1String("cleanlooks")); + stylename = QLatin1String("cleanlooks"); else - QApplicationPrivate::app_style = QStyleFactory::create(QLatin1String("windows")); + stylename = QLatin1String("windows"); break; case DE_CDE: - QApplicationPrivate::app_style = QStyleFactory::create(QLatin1String("cde")); + stylename = QLatin1String("cde"); break; default: // Don't do anything break; + } } + return stylename; } void QApplicationPrivate::initializeWidgetPaletteHash() diff --git a/src/gui/styles/qcleanlooksstyle.cpp b/src/gui/styles/qcleanlooksstyle.cpp index aff0af3..ac433b4 100644 --- a/src/gui/styles/qcleanlooksstyle.cpp +++ b/src/gui/styles/qcleanlooksstyle.cpp @@ -763,7 +763,7 @@ void QCleanlooksStyle::drawPrimitive(PrimitiveElement elem, QStyleOptionButton button; button.QStyleOption::operator=(*option); button.state &= ~State_MouseOver; - drawPrimitive(PE_IndicatorCheckBox, &button, painter, widget); + proxy()->drawPrimitive(PE_IndicatorCheckBox, &button, painter, widget); } return; case PE_IndicatorHeaderArrow: @@ -783,7 +783,7 @@ void QCleanlooksStyle::drawPrimitive(PrimitiveElement elem, } break; case PE_IndicatorButtonDropDown: - drawPrimitive(PE_PanelButtonCommand, option, painter, widget); + proxy()->drawPrimitive(PE_PanelButtonCommand, option, painter, widget); break; case PE_IndicatorToolBarSeparator: { @@ -868,9 +868,9 @@ void QCleanlooksStyle::drawPrimitive(PrimitiveElement elem, if (widget && widget->inherits("QDockWidgetTitleButton")) { if (option->state & State_MouseOver) - drawPrimitive(PE_PanelButtonCommand, option, painter, widget); + proxy()->drawPrimitive(PE_PanelButtonCommand, option, painter, widget); } else { - drawPrimitive(PE_PanelButtonCommand, option, painter, widget); + proxy()->drawPrimitive(PE_PanelButtonCommand, option, painter, widget); } } painter->restore(); @@ -883,7 +883,7 @@ void QCleanlooksStyle::drawPrimitive(PrimitiveElement elem, dockWidgetHandle.state &= ~State_Horizontal; else dockWidgetHandle.state |= State_Horizontal; - drawControl(CE_Splitter, &dockWidgetHandle, painter, widget); + proxy()->drawControl(CE_Splitter, &dockWidgetHandle, painter, widget); } break; case PE_FrameWindow: @@ -909,7 +909,7 @@ void QCleanlooksStyle::drawPrimitive(PrimitiveElement elem, #endif // QT_NO_LINEEDIT #ifdef QT3_SUPPORT if (widget && widget->inherits("Q3ToolBar")) { - drawPrimitive(PE_Q3Separator, option, painter, widget); + proxy()->drawPrimitive(PE_Q3Separator, option, painter, widget); break; } #endif @@ -1238,7 +1238,7 @@ void QCleanlooksStyle::drawPrimitive(PrimitiveElement elem, QColor alphaCornerColor = mergedColors(borderColor, option->palette.background().color()); QColor innerShadow = mergedColors(borderColor, option->palette.base().color()); - int borderThickness = pixelMetric(PM_TabBarBaseOverlap, twf, widget); + int borderThickness = proxy()->pixelMetric(PM_TabBarBaseOverlap, twf, widget); bool reverse = (twf->direction == Qt::RightToLeft); QRect tabBarRect; @@ -1351,9 +1351,9 @@ void QCleanlooksStyle::drawPrimitive(PrimitiveElement elem, if (d->tabBarcloseButtonIcon.isNull()) d->tabBarcloseButtonIcon = standardIcon(SP_DialogCloseButton, option, widget); if ((option->state & State_Enabled) && (option->state & State_MouseOver)) - drawPrimitive(PE_PanelButtonCommand, option, painter, widget); + proxy()->drawPrimitive(PE_PanelButtonCommand, option, painter, widget); QPixmap pixmap = d->tabBarcloseButtonIcon.pixmap(QSize(16, 16), QIcon::Normal, QIcon::On); - drawItemPixmap(painter, option->rect, Qt::AlignCenter, pixmap); + proxy()->drawItemPixmap(painter, option->rect, Qt::AlignCenter, pixmap); } break; @@ -1630,7 +1630,7 @@ void QCleanlooksStyle::drawControl(ControlElement element, const QStyleOption *o QString titleText = painter->fontMetrics().elidedText(dwOpt->title, Qt::ElideRight, titleRect.width()); - drawItemText(painter, + proxy()->drawItemText(painter, titleRect, Qt::AlignLeft | Qt::AlignVCenter | Qt::TextShowMnemonic, dwOpt->palette, dwOpt->state & State_Enabled, titleText, @@ -1844,7 +1844,7 @@ void QCleanlooksStyle::drawControl(ControlElement element, const QStyleOption *o uint alignment = Qt::AlignCenter | Qt::TextShowMnemonic | Qt::TextDontClip | Qt::TextSingleLine; if (!styleHint(SH_UnderlineShortcut, mbi, widget)) alignment |= Qt::TextHideMnemonic; - drawItemText(painter, item.rect, alignment, mbi->palette, mbi->state & State_Enabled, mbi->text, textRole); + proxy()->drawItemText(painter, item.rect, alignment, mbi->palette, mbi->state & State_Enabled, mbi->text, textRole); } } @@ -1871,7 +1871,7 @@ void QCleanlooksStyle::drawControl(ControlElement element, const QStyleOption *o int w = 0; if (!menuItem->text.isEmpty()) { painter->setFont(menuItem->font); - drawItemText(painter, menuItem->rect.adjusted(5, 0, -5, 0), Qt::AlignLeft | Qt::AlignVCenter, + proxy()->drawItemText(painter, menuItem->rect.adjusted(5, 0, -5, 0), Qt::AlignLeft | Qt::AlignVCenter, menuItem->palette, menuItem->state & State_Enabled, menuItem->text, QPalette::Text); w = menuItem->fontMetrics.width(menuItem->text) + 5; @@ -1975,7 +1975,7 @@ void QCleanlooksStyle::drawControl(ControlElement element, const QStyleOption *o mode = QIcon::Active; QPixmap pixmap; - int smallIconSize = pixelMetric(PM_SmallIconSize, option, widget); + int smallIconSize = proxy()->pixelMetric(PM_SmallIconSize, option, widget); QSize iconSize(smallIconSize, smallIconSize); #ifndef QT_NO_COMBOBOX if (const QComboBox *combo = qobject_cast(widget)) @@ -2001,7 +2001,7 @@ void QCleanlooksStyle::drawControl(ControlElement element, const QStyleOption *o } opt.state |= State_Sunken; opt.rect = vCheckRect; - drawPrimitive(PE_PanelButtonCommand, &opt, painter, widget); + proxy()->drawPrimitive(PE_PanelButtonCommand, &opt, painter, widget); } painter->drawPixmap(pmr.topLeft(), pixmap); } @@ -2034,7 +2034,7 @@ void QCleanlooksStyle::drawControl(ControlElement element, const QStyleOption *o if (t >= 0) { QRect vShortcutRect = visualRect(opt->direction, menuitem->rect, QRect(textRect.topRight(), QPoint(menuitem->rect.right(), textRect.bottom()))); - if (dis && !act && styleHint(SH_EtchDisabledText, option, widget)) { + if (dis && !act && proxy()->styleHint(SH_EtchDisabledText, option, widget)) { p->setPen(menuitem->palette.light().color()); p->drawText(vShortcutRect.adjusted(1, 1, 1, 1), text_flags, s.mid(t + 1)); p->setPen(discol); @@ -2048,7 +2048,7 @@ void QCleanlooksStyle::drawControl(ControlElement element, const QStyleOption *o font.setBold(true); p->setFont(font); - if (dis && !act && styleHint(SH_EtchDisabledText, option, widget)) { + if (dis && !act && proxy()->styleHint(SH_EtchDisabledText, option, widget)) { p->setPen(menuitem->palette.light().color()); p->drawText(vTextRect.adjusted(1, 1, 1, 1), text_flags, s.left(t)); p->setPen(discol); @@ -2071,7 +2071,7 @@ void QCleanlooksStyle::drawControl(ControlElement element, const QStyleOption *o if (selected) newMI.palette.setColor(QPalette::ButtonText, newMI.palette.highlightedText().color()); - drawPrimitive(arrow, &newMI, painter, widget); + proxy()->drawPrimitive(arrow, &newMI, painter, widget); } } painter->restore(); @@ -2132,7 +2132,7 @@ void QCleanlooksStyle::drawControl(ControlElement element, const QStyleOption *o if (button->features & QStyleOptionButton::HasMenu) ir = ir.adjusted(0, 0, -pixelMetric(PM_MenuButtonIndicator, button, widget), 0); - drawItemText(painter, ir, tf, button->palette, (button->state & State_Enabled), + proxy()->drawItemText(painter, ir, tf, button->palette, (button->state & State_Enabled), button->text, QPalette::ButtonText); } break; @@ -2187,7 +2187,7 @@ void QCleanlooksStyle::drawControl(ControlElement element, const QStyleOption *o || (rtlHorTabs && tab->selectedPosition == QStyleOptionTab::PreviousIsSelected)); - int tabBarAlignment = styleHint(SH_TabBar_Alignment, tab, widget); + int tabBarAlignment = proxy()->styleHint(SH_TabBar_Alignment, tab, widget); bool leftAligned = (!rtlHorTabs && tabBarAlignment == Qt::AlignLeft) || (rtlHorTabs && tabBarAlignment == Qt::AlignRight); @@ -2200,7 +2200,7 @@ void QCleanlooksStyle::drawControl(ControlElement element, const QStyleOption *o QColor midlight = tab->palette.midlight().color(); QColor background = tab->palette.background().color(); - int borderThinkness = pixelMetric(PM_TabBarBaseOverlap, tab, widget); + int borderThinkness = proxy()->pixelMetric(PM_TabBarBaseOverlap, tab, widget); if (selected) borderThinkness /= 2; QRect r2(option->rect); @@ -2453,10 +2453,10 @@ void QCleanlooksStyle::drawComplexControl(ComplexControl control, const QStyleOp QRect rect = pixmapRect; QStyleOptionSpinBox spinBoxCopy = *spinBox; spinBoxCopy.rect = pixmapRect; - QRect upRect = subControlRect(CC_SpinBox, &spinBoxCopy, SC_SpinBoxUp, widget); - QRect downRect = subControlRect(CC_SpinBox, &spinBoxCopy, SC_SpinBoxDown, widget); + QRect upRect = proxy()->subControlRect(CC_SpinBox, &spinBoxCopy, SC_SpinBoxUp, widget); + QRect downRect = proxy()->subControlRect(CC_SpinBox, &spinBoxCopy, SC_SpinBoxDown, widget); - int fw = spinBoxCopy.frame ? pixelMetric(PM_SpinBoxFrameWidth, &spinBoxCopy, widget) : 0; + int fw = spinBoxCopy.frame ? proxy()->pixelMetric(PM_SpinBoxFrameWidth, &spinBoxCopy, widget) : 0; cachePainter.fillRect(rect.adjusted(1, qMax(fw - 1, 0), -1, -fw), option->palette.base()); @@ -2678,7 +2678,7 @@ void QCleanlooksStyle::drawComplexControl(ComplexControl control, const QStyleOp if (widget && widget->inherits("Q3DockWindowTitleBar")) { QStyleOptionDockWidgetV2 dockwidget; dockwidget.QStyleOption::operator=(*option); - drawControl(CE_DockWidgetTitle, &dockwidget, painter, widget); + proxy()->drawControl(CE_DockWidgetTitle, &dockwidget, painter, widget); } else #endif // QT3_SUPPORT { @@ -2721,7 +2721,7 @@ void QCleanlooksStyle::drawComplexControl(ComplexControl control, const QStyleOp painter->drawLine(fullRect.left() + 6, fullRect.top() + 1, fullRect.right() - 6, fullRect.top() + 1); } // draw title - QRect textRect = subControlRect(CC_TitleBar, titleBar, SC_TitleBarLabel, widget); + QRect textRect = proxy()->subControlRect(CC_TitleBar, titleBar, SC_TitleBarLabel, widget); QFont font = painter->font(); font.setBold(true); painter->setFont(font); @@ -2736,7 +2736,7 @@ void QCleanlooksStyle::drawComplexControl(ComplexControl control, const QStyleOp // min button if ((titleBar->subControls & SC_TitleBarMinButton) && (titleBar->titleBarFlags & Qt::WindowMinimizeButtonHint) && !(titleBar->titleBarState& Qt::WindowMinimized)) { - QRect minButtonRect = subControlRect(CC_TitleBar, titleBar, SC_TitleBarMinButton, widget); + QRect minButtonRect = proxy()->subControlRect(CC_TitleBar, titleBar, SC_TitleBarMinButton, widget); if (minButtonRect.isValid()) { bool hover = (titleBar->activeSubControls & SC_TitleBarMinButton) && (titleBar->state & State_MouseOver); bool sunken = (titleBar->activeSubControls & SC_TitleBarMinButton) && (titleBar->state & State_Sunken); @@ -2757,7 +2757,7 @@ void QCleanlooksStyle::drawComplexControl(ComplexControl control, const QStyleOp // max button if ((titleBar->subControls & SC_TitleBarMaxButton) && (titleBar->titleBarFlags & Qt::WindowMaximizeButtonHint) && !(titleBar->titleBarState & Qt::WindowMaximized)) { - QRect maxButtonRect = subControlRect(CC_TitleBar, titleBar, SC_TitleBarMaxButton, widget); + QRect maxButtonRect = proxy()->subControlRect(CC_TitleBar, titleBar, SC_TitleBarMaxButton, widget); if (maxButtonRect.isValid()) { bool hover = (titleBar->activeSubControls & SC_TitleBarMaxButton) && (titleBar->state & State_MouseOver); bool sunken = (titleBar->activeSubControls & SC_TitleBarMaxButton) && (titleBar->state & State_Sunken); @@ -2779,7 +2779,7 @@ void QCleanlooksStyle::drawComplexControl(ComplexControl control, const QStyleOp // close button if ((titleBar->subControls & SC_TitleBarCloseButton) && (titleBar->titleBarFlags & Qt::WindowSystemMenuHint)) { - QRect closeButtonRect = subControlRect(CC_TitleBar, titleBar, SC_TitleBarCloseButton, widget); + QRect closeButtonRect = proxy()->subControlRect(CC_TitleBar, titleBar, SC_TitleBarCloseButton, widget); if (closeButtonRect.isValid()) { bool hover = (titleBar->activeSubControls & SC_TitleBarCloseButton) && (titleBar->state & State_MouseOver); bool sunken = (titleBar->activeSubControls & SC_TitleBarCloseButton) && (titleBar->state & State_Sunken); @@ -2813,7 +2813,7 @@ void QCleanlooksStyle::drawComplexControl(ComplexControl control, const QStyleOp (titleBar->titleBarState & Qt::WindowMinimized)) || ((titleBar->titleBarFlags & Qt::WindowMaximizeButtonHint) && (titleBar->titleBarState & Qt::WindowMaximized)))) { - QRect normalButtonRect = subControlRect(CC_TitleBar, titleBar, SC_TitleBarNormalButton, widget); + QRect normalButtonRect = proxy()->subControlRect(CC_TitleBar, titleBar, SC_TitleBarNormalButton, widget); if (normalButtonRect.isValid()) { bool hover = (titleBar->activeSubControls & SC_TitleBarNormalButton) && (titleBar->state & State_MouseOver); @@ -2853,7 +2853,7 @@ void QCleanlooksStyle::drawComplexControl(ComplexControl control, const QStyleOp // context help button if (titleBar->subControls & SC_TitleBarContextHelpButton && (titleBar->titleBarFlags & Qt::WindowContextHelpButtonHint)) { - QRect contextHelpButtonRect = subControlRect(CC_TitleBar, titleBar, SC_TitleBarContextHelpButton, widget); + QRect contextHelpButtonRect = proxy()->subControlRect(CC_TitleBar, titleBar, SC_TitleBarContextHelpButton, widget); if (contextHelpButtonRect.isValid()) { bool hover = (titleBar->activeSubControls & SC_TitleBarContextHelpButton) && (titleBar->state & State_MouseOver); bool sunken = (titleBar->activeSubControls & SC_TitleBarContextHelpButton) && (titleBar->state & State_Sunken); @@ -2872,7 +2872,7 @@ void QCleanlooksStyle::drawComplexControl(ComplexControl control, const QStyleOp // shade button if (titleBar->subControls & SC_TitleBarShadeButton && (titleBar->titleBarFlags & Qt::WindowShadeButtonHint)) { - QRect shadeButtonRect = subControlRect(CC_TitleBar, titleBar, SC_TitleBarShadeButton, widget); + QRect shadeButtonRect = proxy()->subControlRect(CC_TitleBar, titleBar, SC_TitleBarShadeButton, widget); if (shadeButtonRect.isValid()) { bool hover = (titleBar->activeSubControls & SC_TitleBarShadeButton) && (titleBar->state & State_MouseOver); bool sunken = (titleBar->activeSubControls & SC_TitleBarShadeButton) && (titleBar->state & State_Sunken); @@ -2885,7 +2885,7 @@ void QCleanlooksStyle::drawComplexControl(ComplexControl control, const QStyleOp // unshade button if (titleBar->subControls & SC_TitleBarUnshadeButton && (titleBar->titleBarFlags & Qt::WindowShadeButtonHint)) { - QRect unshadeButtonRect = subControlRect(CC_TitleBar, titleBar, SC_TitleBarUnshadeButton, widget); + QRect unshadeButtonRect = proxy()->subControlRect(CC_TitleBar, titleBar, SC_TitleBarUnshadeButton, widget); if (unshadeButtonRect.isValid()) { bool hover = (titleBar->activeSubControls & SC_TitleBarUnshadeButton) && (titleBar->state & State_MouseOver); bool sunken = (titleBar->activeSubControls & SC_TitleBarUnshadeButton) && (titleBar->state & State_Sunken); @@ -2897,7 +2897,7 @@ void QCleanlooksStyle::drawComplexControl(ComplexControl control, const QStyleOp } if ((titleBar->subControls & SC_TitleBarSysMenu) && (titleBar->titleBarFlags & Qt::WindowSystemMenuHint)) { - QRect iconRect = subControlRect(CC_TitleBar, titleBar, SC_TitleBarSysMenu, widget); + QRect iconRect = proxy()->subControlRect(CC_TitleBar, titleBar, SC_TitleBarSysMenu, widget); if (iconRect.isValid()) { if (!titleBar->icon.isNull()) { titleBar->icon.paint(painter, iconRect); @@ -2907,7 +2907,7 @@ void QCleanlooksStyle::drawComplexControl(ComplexControl control, const QStyleOp QPixmap pm = standardIcon(SP_TitleBarMenuButton, &tool, widget).pixmap(16, 16); tool.rect = iconRect; painter->save(); - drawItemPixmap(painter, iconRect, Qt::AlignCenter, pm); + proxy()->drawItemPixmap(painter, iconRect, Qt::AlignCenter, pm); painter->restore(); } } @@ -2927,10 +2927,10 @@ void QCleanlooksStyle::drawComplexControl(ComplexControl control, const QStyleOp painter->fillRect(option->rect, option->palette.background()); QRect rect = scrollBar->rect; - QRect scrollBarSubLine = subControlRect(control, scrollBar, SC_ScrollBarSubLine, widget); - QRect scrollBarAddLine = subControlRect(control, scrollBar, SC_ScrollBarAddLine, widget); - QRect scrollBarSlider = subControlRect(control, scrollBar, SC_ScrollBarSlider, widget); - QRect grooveRect = subControlRect(control, scrollBar, SC_ScrollBarGroove, widget); + QRect scrollBarSubLine = proxy()->subControlRect(control, scrollBar, SC_ScrollBarSubLine, widget); + QRect scrollBarAddLine = proxy()->subControlRect(control, scrollBar, SC_ScrollBarAddLine, widget); + QRect scrollBarSlider = proxy()->subControlRect(control, scrollBar, SC_ScrollBarSlider, widget); + QRect grooveRect = proxy()->subControlRect(control, scrollBar, SC_ScrollBarGroove, widget); // paint groove if (scrollBar->subControls & SC_ScrollBarGroove) { @@ -3065,7 +3065,7 @@ void QCleanlooksStyle::drawComplexControl(ComplexControl control, const QStyleOp // The SubLine (up/left) buttons if (scrollBar->subControls & SC_ScrollBarSubLine) { - //int scrollBarExtent = pixelMetric(PM_ScrollBarExtent, option, widget); + //int scrollBarExtent = proxy()->pixelMetric(PM_ScrollBarExtent, option, widget); QRect pixmapRect = scrollBarSubLine; if (isEnabled ) { QRect fillRect = pixmapRect.adjusted(1, 1, -1, -1); @@ -3111,7 +3111,7 @@ void QCleanlooksStyle::drawComplexControl(ComplexControl control, const QStyleOp arrow = PE_IndicatorArrowUp; QStyleOption arrowOpt = *option; arrowOpt.rect = scrollBarSubLine.adjusted(3, 3, -2, -2); - drawPrimitive(arrow, &arrowOpt, painter, widget); + proxy()->drawPrimitive(arrow, &arrowOpt, painter, widget); // The AddLine (down/right) button @@ -3162,7 +3162,7 @@ void QCleanlooksStyle::drawComplexControl(ComplexControl control, const QStyleOp QStyleOption arrowOpt = *option; arrowOpt.rect = scrollBarAddLine.adjusted(3, 3, -2, -2); - drawPrimitive(arrow, &arrowOpt, painter, widget); + proxy()->drawPrimitive(arrow, &arrowOpt, painter, widget); } } } @@ -3194,9 +3194,9 @@ void QCleanlooksStyle::drawComplexControl(ComplexControl control, const QStyleOp comboBoxCopy.rect = pixmapRect; QRect rect = pixmapRect; - QRect downArrowRect = subControlRect(CC_ComboBox, &comboBoxCopy, + QRect downArrowRect = proxy()->subControlRect(CC_ComboBox, &comboBoxCopy, SC_ComboBoxArrow, widget); - QRect editRect = subControlRect(CC_ComboBox, &comboBoxCopy, + QRect editRect = proxy()->subControlRect(CC_ComboBox, &comboBoxCopy, SC_ComboBoxEditField, widget); // Draw a push button if (comboBox->editable) { @@ -3210,7 +3210,7 @@ void QCleanlooksStyle::drawComplexControl(ComplexControl control, const QStyleOp buttonOption.state &= ~State_MouseOver; } - drawPrimitive(PE_PanelButtonCommand, &buttonOption, &cachePainter, widget); + proxy()->drawPrimitive(PE_PanelButtonCommand, &buttonOption, &cachePainter, widget); //remove shadow from left side of edit field when pressed: if (comboBox->direction != Qt::RightToLeft) @@ -3252,7 +3252,7 @@ void QCleanlooksStyle::drawComplexControl(ComplexControl control, const QStyleOp buttonOption.state |= State_Sunken; buttonOption.state &= ~State_MouseOver; } - drawPrimitive(PE_PanelButtonCommand, &buttonOption, &cachePainter, widget); + proxy()->drawPrimitive(PE_PanelButtonCommand, &buttonOption, &cachePainter, widget); cachePainter.setPen(buttonShadow.darker(102)); int borderSize = 4; @@ -3308,9 +3308,9 @@ void QCleanlooksStyle::drawComplexControl(ComplexControl control, const QStyleOp if (focus && !comboBox->editable && ((option->state & State_KeyboardFocusChange) || styleHint(SH_UnderlineShortcut, option, widget))) { QStyleOptionFocusRect focus; - focus.rect = subControlRect(CC_ComboBox, &comboBoxCopy, SC_ComboBoxEditField, widget) + focus.rect = proxy()->subControlRect(CC_ComboBox, &comboBoxCopy, SC_ComboBoxEditField, widget) .adjusted(0, 2, option->direction == Qt::RightToLeft ? 1 : -1, -2); - drawPrimitive(PE_FrameFocusRect, &focus, &cachePainter, widget); + proxy()->drawPrimitive(PE_FrameFocusRect, &focus, &cachePainter, widget); } cachePainter.end(); QPixmapCache::insert(pixmapName, cache); @@ -3324,8 +3324,8 @@ void QCleanlooksStyle::drawComplexControl(ComplexControl control, const QStyleOp case CC_GroupBox: painter->save(); if (const QStyleOptionGroupBox *groupBox = qstyleoption_cast(option)) { - QRect textRect = subControlRect(CC_GroupBox, groupBox, SC_GroupBoxLabel, widget); - QRect checkBoxRect = subControlRect(CC_GroupBox, groupBox, SC_GroupBoxCheckBox, widget); + QRect textRect = proxy()->subControlRect(CC_GroupBox, groupBox, SC_GroupBoxLabel, widget); + QRect checkBoxRect = proxy()->subControlRect(CC_GroupBox, groupBox, SC_GroupBoxCheckBox, widget); bool flat = groupBox->features & QStyleOptionFrameV2::Flat; if(!flat) { @@ -3335,7 +3335,7 @@ void QCleanlooksStyle::drawComplexControl(ComplexControl control, const QStyleOp frame.features = groupBox->features; frame.lineWidth = groupBox->lineWidth; frame.midLineWidth = groupBox->midLineWidth; - frame.rect = subControlRect(CC_GroupBox, option, SC_GroupBoxFrame, widget); + frame.rect = proxy()->subControlRect(CC_GroupBox, option, SC_GroupBoxFrame, widget); painter->save(); QRegion region(groupBox->rect); @@ -3344,7 +3344,7 @@ void QCleanlooksStyle::drawComplexControl(ComplexControl control, const QStyleOp if (!groupBox->text.isEmpty() || groupBox->subControls & SC_GroupBoxCheckBox) painter->setClipRegion(region); frame.palette.setBrush(QPalette::Dark, option->palette.mid().color().lighter(110)); - drawPrimitive(PE_FrameGroupBox, &frame, painter); + proxy()->drawPrimitive(PE_FrameGroupBox, &frame, painter); painter->restore(); } } @@ -3372,7 +3372,7 @@ void QCleanlooksStyle::drawComplexControl(ComplexControl control, const QStyleOp QStyleOptionButton box; box.QStyleOption::operator=(*groupBox); box.rect = checkBoxRect; - drawPrimitive(PE_IndicatorCheckBox, &box, painter, widget); + proxy()->drawPrimitive(PE_IndicatorCheckBox, &box, painter, widget); } } painter->restore(); @@ -3381,9 +3381,9 @@ void QCleanlooksStyle::drawComplexControl(ComplexControl control, const QStyleOp #ifndef QT_NO_SLIDER case CC_Slider: if (const QStyleOptionSlider *slider = qstyleoption_cast(option)) { - QRect groove = subControlRect(CC_Slider, option, SC_SliderGroove, widget); - QRect handle = subControlRect(CC_Slider, option, SC_SliderHandle, widget); - QRect ticks = subControlRect(CC_Slider, option, SC_SliderTickmarks, widget); + QRect groove = proxy()->subControlRect(CC_Slider, option, SC_SliderGroove, widget); + QRect handle = proxy()->subControlRect(CC_Slider, option, SC_SliderHandle, widget); + QRect ticks = proxy()->subControlRect(CC_Slider, option, SC_SliderTickmarks, widget); bool horizontal = slider->orientation == Qt::Horizontal; bool ticksAbove = slider->tickPosition & QSlider::TicksAbove; @@ -3569,13 +3569,13 @@ void QCleanlooksStyle::drawComplexControl(ComplexControl control, const QStyleOp QStyleOptionFocusRect fropt; fropt.QStyleOption::operator=(*slider); fropt.rect = slider->rect; - drawPrimitive(PE_FrameFocusRect, &fropt, painter, widget); + proxy()->drawPrimitive(PE_FrameFocusRect, &fropt, painter, widget); } } if (option->subControls & SC_SliderTickmarks) { painter->setPen(darkOutline); - int tickSize = pixelMetric(PM_SliderTickmarkOffset, option, widget); - int available = pixelMetric(PM_SliderSpaceAvailable, slider, widget); + int tickSize = proxy()->pixelMetric(PM_SliderTickmarkOffset, option, widget); + int available = proxy()->pixelMetric(PM_SliderSpaceAvailable, slider, widget); int interval = slider->tickInterval; if (interval <= 0) { interval = slider->singleStep; @@ -3589,7 +3589,7 @@ void QCleanlooksStyle::drawComplexControl(ComplexControl control, const QStyleOp interval = 1; int v = slider->minimum; - int len = pixelMetric(PM_SliderLength, slider, widget); + int len = proxy()->pixelMetric(PM_SliderLength, slider, widget); while (v <= slider->maximum + 1) { if (v == slider->maximum + 1 && interval == 1) break; @@ -3770,8 +3770,8 @@ QSize QCleanlooksStyle::sizeFromContents(ContentsType type, const QStyleOption * QFontMetrics metrics(font); int baseWidth = metrics.width(gb->title()) + metrics.width(QLatin1Char(' ')); if (gb->isCheckable()) { - baseWidth += pixelMetric(QStyle::PM_IndicatorWidth, option, widget); - baseWidth += pixelMetric(QStyle::PM_CheckBoxLabelSpacing, option, widget); + baseWidth += proxy()->pixelMetric(QStyle::PM_IndicatorWidth, option, widget); + baseWidth += proxy()->pixelMetric(QStyle::PM_CheckBoxLabelSpacing, option, widget); } newSize.setWidth(qMax(baseWidth, newSize.width())); } @@ -3955,7 +3955,7 @@ QRect QCleanlooksStyle::subControlRect(ComplexControl control, const QStyleOptio #ifndef QT_NO_SLIDER case CC_Slider: if (const QStyleOptionSlider *slider = qstyleoption_cast(option)) { - int tickSize = pixelMetric(PM_SliderTickmarkOffset, option, widget); + int tickSize = proxy()->pixelMetric(PM_SliderTickmarkOffset, option, widget); switch (subControl) { case SC_SliderHandle: { if (slider->orientation == Qt::Horizontal) { @@ -4010,7 +4010,7 @@ QRect QCleanlooksStyle::subControlRect(ComplexControl control, const QStyleOptio if (const QStyleOptionSpinBox *spinbox = qstyleoption_cast(option)) { QSize bs; int center = spinbox->rect.height() / 2; - int fw = spinbox->frame ? pixelMetric(PM_SpinBoxFrameWidth, spinbox, widget) : 0; + int fw = spinbox->frame ? proxy()->pixelMetric(PM_SpinBoxFrameWidth, spinbox, widget) : 0; int y = fw; bs.setHeight(qMax(8, spinbox->rect.height()/2 - y)); bs.setWidth(15); @@ -4051,7 +4051,7 @@ QRect QCleanlooksStyle::subControlRect(ComplexControl control, const QStyleOptio if (const QStyleOptionGroupBox *groupBox = qstyleoption_cast(option)) { int topMargin = 0; int topHeight = 0; - int verticalAlignment = styleHint(SH_GroupBox_TextLabelVerticalAlignment, groupBox, widget); + int verticalAlignment = proxy()->styleHint(SH_GroupBox_TextLabelVerticalAlignment, groupBox, widget); bool flat = groupBox->features & QStyleOptionFrameV2::Flat; if (!groupBox->text.isEmpty()) { topHeight = groupBox->fontMetrics.height(); @@ -4082,8 +4082,8 @@ QRect QCleanlooksStyle::subControlRect(ComplexControl control, const QStyleOptio QSize textRect = fontMetrics.boundingRect(groupBoxWidget->title()).size() + QSize(2, 2); if (subControl == SC_GroupBoxCheckBox) { - int indicatorWidth = pixelMetric(PM_IndicatorWidth, option, widget); - int indicatorHeight = pixelMetric(PM_IndicatorHeight, option, widget); + int indicatorWidth = proxy()->pixelMetric(PM_IndicatorWidth, option, widget); + int indicatorHeight = proxy()->pixelMetric(PM_IndicatorHeight, option, widget); rect.setWidth(indicatorWidth); rect.setHeight(indicatorHeight); rect.moveTop((fontMetrics.height() - indicatorHeight) / 2 + 2); @@ -4104,7 +4104,7 @@ QRect QCleanlooksStyle::subControlRect(ComplexControl control, const QStyleOptio rect = visualRect(option->direction, option->rect, rect); break; case SC_ComboBoxEditField: { - int frameWidth = pixelMetric(PM_DefaultFrameWidth); + int frameWidth = proxy()->pixelMetric(PM_DefaultFrameWidth); rect = visualRect(option->direction, option->rect, rect); rect.setRect(option->rect.left() + frameWidth, option->rect.top() + frameWidth, option->rect.width() - 19 - 2 * frameWidth, @@ -4427,8 +4427,8 @@ QIcon QCleanlooksStyle::standardIconImplementation(StandardPixmap standardIcon, d->lookupIconTheme(); switch (standardIcon) { case SP_DirIcon: { - icon = QIcon(standardPixmap(standardIcon, option, widget)); - icon.addPixmap(standardPixmap(SP_DirClosedIcon, option, widget), + icon = QIcon(proxy()->standardPixmap(standardIcon, option, widget)); + icon.addPixmap(proxy()->standardPixmap(SP_DirClosedIcon, option, widget), QIcon::Normal, QIcon::Off); pixmap = d->findIcon(16, QLatin1String("gnome-fs-directory.png")); if (!pixmap.isNull()) @@ -4446,10 +4446,10 @@ QIcon QCleanlooksStyle::standardIconImplementation(StandardPixmap standardIcon, break; case SP_DirLinkIcon: { - icon = QIcon(standardPixmap(standardIcon, option, widget)); + icon = QIcon(proxy()->standardPixmap(standardIcon, option, widget)); QPixmap link = d->findIcon(12, QLatin1String("emblem-symbolic-link.png")); if (!link.isNull()) { - icon.addPixmap(standardPixmap(SP_DirLinkIcon, option, widget)); + icon.addPixmap(proxy()->standardPixmap(SP_DirLinkIcon, option, widget)); pixmap = d->findIcon(16, QLatin1String("gnome-fs-directory.png")); if (!pixmap.isNull()) { QPainter painter(&pixmap); @@ -4546,10 +4546,10 @@ QIcon QCleanlooksStyle::standardIconImplementation(StandardPixmap standardIcon, } case SP_FileLinkIcon: { - icon = QIcon(standardPixmap(standardIcon, option, widget)); + icon = QIcon(proxy()->standardPixmap(standardIcon, option, widget)); QPixmap link = d->findIcon(12, QLatin1String("emblem-symbolic-link.png")); if (!link.isNull()) { - icon.addPixmap(standardPixmap(SP_FileLinkIcon,option, widget)); + icon.addPixmap(proxy()->standardPixmap(SP_FileLinkIcon,option, widget)); pixmap = d->findIcon(16, QLatin1String("unknown.png")); if (pixmap.isNull()) pixmap = d->findIcon(16, QLatin1String("stock_new.png")); @@ -4571,7 +4571,7 @@ QIcon QCleanlooksStyle::standardIconImplementation(StandardPixmap standardIcon, return standardIconImplementation(SP_ArrowRight, option, widget); return standardIconImplementation(SP_ArrowLeft, option, widget); default: - icon = QIcon(standardPixmap(standardIcon, option, widget)); + icon = QIcon(proxy()->standardPixmap(standardIcon, option, widget)); } if (!icon.isNull()) return icon; diff --git a/src/gui/styles/qcommonstyle.cpp b/src/gui/styles/qcommonstyle.cpp index 3999d48..7d8436e 100644 --- a/src/gui/styles/qcommonstyle.cpp +++ b/src/gui/styles/qcommonstyle.cpp @@ -155,7 +155,7 @@ void QCommonStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, Q &opt->palette.brush(QPalette::Button)); break; case PE_IndicatorViewItemCheck: - drawPrimitive(PE_IndicatorCheckBox, opt, p, widget); + proxy()->drawPrimitive(PE_IndicatorCheckBox, opt, p, widget); break; case PE_IndicatorCheckBox: if (opt->state & State_NoChange) { @@ -505,7 +505,7 @@ void QCommonStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, Q QIcon::Active, QIcon::Off); } - int size = pixelMetric(QStyle::PM_SmallIconSize); + int size = proxy()->pixelMetric(QStyle::PM_SmallIconSize); QIcon::Mode mode = opt->state & State_Enabled ? (opt->state & State_Raised ? QIcon::Active : QIcon::Normal) : QIcon::Disabled; @@ -516,7 +516,7 @@ void QCommonStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, Q QIcon::State state = opt->state & State_Sunken ? QIcon::On : QIcon::Off; QPixmap pixmap = d->tabBarcloseButtonIcon.pixmap(size, mode, state); - drawItemPixmap(p, opt->rect, Qt::AlignCenter, pixmap); + proxy()->drawItemPixmap(p, opt->rect, Qt::AlignCenter, pixmap); break; } #endif // QT_NO_TABBAR @@ -525,7 +525,7 @@ void QCommonStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, Q qDrawWinPanel(p, opt->rect, opt->palette, false, 0); break; case PE_FrameLineEdit: - drawPrimitive(PE_Frame, opt, p, widget); + proxy()->drawPrimitive(PE_Frame, opt, p, widget); break; #ifndef QT_NO_GROUPBOX case PE_FrameGroupBox: @@ -550,7 +550,7 @@ void QCommonStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, Q if (const QStyleOptionFrame *frame = qstyleoption_cast(opt)) { int lw = frame->lineWidth; if (lw <= 0) - lw = pixelMetric(PM_DockWidgetFrameWidth); + lw = proxy()->pixelMetric(PM_DockWidgetFrameWidth); qDrawShadePanel(p, frame->rect, frame->palette, false, lw); } @@ -582,7 +582,7 @@ void QCommonStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, Q p->restore(); break; case PE_Q3DockWindowSeparator: - drawPrimitive(PE_IndicatorToolBarSeparator, opt, p, widget); + proxy()->drawPrimitive(PE_IndicatorToolBarSeparator, opt, p, widget); break; case PE_IndicatorToolBarSeparator: { @@ -602,7 +602,7 @@ void QCommonStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, Q case PE_IndicatorSpinPlus: case PE_IndicatorSpinMinus: { QRect r = opt->rect; - int fw = pixelMetric(PM_DefaultFrameWidth, opt, widget); + int fw = proxy()->pixelMetric(PM_DefaultFrameWidth, opt, widget); QRect br = r.adjusted(fw, fw, -fw, -fw); int offset = (opt->state & State_Sunken) ? 1 : 0; @@ -619,7 +619,7 @@ void QCommonStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, Q case PE_IndicatorSpinUp: case PE_IndicatorSpinDown: { QRect r = opt->rect; - int fw = pixelMetric(PM_DefaultFrameWidth, opt, widget); + int fw = proxy()->pixelMetric(PM_DefaultFrameWidth, opt, widget); // QRect br = r.adjusted(fw, fw, -fw, -fw); int x = r.x(), y = r.y(), w = r.width(), h = r.height(); int sw = w-4; @@ -644,8 +644,8 @@ void QCommonStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, Q int bsx = 0; int bsy = 0; if (opt->state & State_Sunken) { - bsx = pixelMetric(PM_ButtonShiftHorizontal); - bsy = pixelMetric(PM_ButtonShiftVertical); + bsx = proxy()->pixelMetric(PM_ButtonShiftHorizontal); + bsy = proxy()->pixelMetric(PM_ButtonShiftVertical); } p->save(); p->translate(sx + bsx, sy + bsy); @@ -694,7 +694,7 @@ void QCommonStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, Q panel->palette.brush(QPalette::Base)); if (panel->lineWidth > 0) - drawPrimitive(PE_FrameLineEdit, panel, p, widget); + proxy()->drawPrimitive(PE_FrameLineEdit, panel, p, widget); } break; #endif // QT_NO_LINEEDIT @@ -766,7 +766,7 @@ void QCommonStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, Q if (cg == QPalette::Normal && !(vopt->state & QStyle::State_Active)) cg = QPalette::Inactive; - if ((vopt->state & QStyle::State_Selected) && styleHint(QStyle::SH_ItemView_ShowDecorationSelected, opt, widget)) + if ((vopt->state & QStyle::State_Selected) && proxy()->styleHint(QStyle::SH_ItemView_ShowDecorationSelected, opt, widget)) p->fillRect(vopt->rect, vopt->palette.brush(cg, QPalette::Highlight)); else if (vopt->features & QStyleOptionViewItemV2::Alternate) p->fillRect(vopt->rect, vopt->palette.brush(cg, QPalette::AlternateBase)); @@ -1291,24 +1291,24 @@ void QCommonStyle::drawControl(ControlElement element, const QStyleOption *opt, case CE_PushButton: if (const QStyleOptionButton *btn = qstyleoption_cast(opt)) { - drawControl(CE_PushButtonBevel, btn, p, widget); + proxy()->drawControl(CE_PushButtonBevel, btn, p, widget); QStyleOptionButton subopt = *btn; subopt.rect = subElementRect(SE_PushButtonContents, btn, widget); - drawControl(CE_PushButtonLabel, &subopt, p, widget); + proxy()->drawControl(CE_PushButtonLabel, &subopt, p, widget); if (btn->state & State_HasFocus) { QStyleOptionFocusRect fropt; fropt.QStyleOption::operator=(*btn); fropt.rect = subElementRect(SE_PushButtonFocusRect, btn, widget); - drawPrimitive(PE_FrameFocusRect, &fropt, p, widget); + proxy()->drawPrimitive(PE_FrameFocusRect, &fropt, p, widget); } } break; case CE_PushButtonBevel: if (const QStyleOptionButton *btn = qstyleoption_cast(opt)) { QRect br = btn->rect; - int dbi = pixelMetric(PM_ButtonDefaultIndicator, btn, widget); + int dbi = proxy()->pixelMetric(PM_ButtonDefaultIndicator, btn, widget); if (btn->features & QStyleOptionButton::DefaultButton) - drawPrimitive(PE_FrameDefaultButton, opt, p, widget); + proxy()->drawPrimitive(PE_FrameDefaultButton, opt, p, widget); if (btn->features & QStyleOptionButton::AutoDefaultButton) br.setCoords(br.left() + dbi, br.top() + dbi, br.right() - dbi, br.bottom() - dbi); if (!(btn->features & (QStyleOptionButton::Flat | QStyleOptionButton::CommandLinkButton)) @@ -1316,14 +1316,14 @@ void QCommonStyle::drawControl(ControlElement element, const QStyleOption *opt, || (btn->features & QStyleOptionButton::CommandLinkButton && btn->state & State_MouseOver)) { QStyleOptionButton tmpBtn = *btn; tmpBtn.rect = br; - drawPrimitive(PE_PanelButtonCommand, &tmpBtn, p, widget); + proxy()->drawPrimitive(PE_PanelButtonCommand, &tmpBtn, p, widget); } if (btn->features & QStyleOptionButton::HasMenu) { - int mbi = pixelMetric(PM_MenuButtonIndicator, btn, widget); + int mbi = proxy()->pixelMetric(PM_MenuButtonIndicator, btn, widget); QRect ir = btn->rect; QStyleOptionButton newBtn = *btn; newBtn.rect = QRect(ir.right() - mbi + 2, ir.height()/2 - mbi/2 + 3, mbi - 6, mbi - 6); - drawPrimitive(PE_IndicatorArrowDown, &newBtn, p, widget); + proxy()->drawPrimitive(PE_IndicatorArrowDown, &newBtn, p, widget); } } break; @@ -1331,7 +1331,7 @@ void QCommonStyle::drawControl(ControlElement element, const QStyleOption *opt, if (const QStyleOptionButton *button = qstyleoption_cast(opt)) { QRect textRect = button->rect; uint tf = Qt::AlignVCenter | Qt::TextShowMnemonic; - if (!styleHint(SH_UnderlineShortcut, button, widget)) + if (!proxy()->styleHint(SH_UnderlineShortcut, button, widget)) tf |= Qt::TextHideMnemonic; if (!button->icon.isNull()) { @@ -1366,24 +1366,24 @@ void QCommonStyle::drawControl(ControlElement element, const QStyleOption *opt, textRect.setLeft(iconRect.left() + iconRect.width() + iconSpacing); if (button->state & (State_On | State_Sunken)) - iconRect.translate(pixelMetric(PM_ButtonShiftHorizontal, opt, widget), - pixelMetric(PM_ButtonShiftVertical, opt, widget)); + iconRect.translate(proxy()->pixelMetric(PM_ButtonShiftHorizontal, opt, widget), + proxy()->pixelMetric(PM_ButtonShiftVertical, opt, widget)); p->drawPixmap(iconRect, pixmap); } else { tf |= Qt::AlignHCenter; } if (button->state & (State_On | State_Sunken)) - textRect.translate(pixelMetric(PM_ButtonShiftHorizontal, opt, widget), - pixelMetric(PM_ButtonShiftVertical, opt, widget)); + textRect.translate(proxy()->pixelMetric(PM_ButtonShiftHorizontal, opt, widget), + proxy()->pixelMetric(PM_ButtonShiftVertical, opt, widget)); if (button->features & QStyleOptionButton::HasMenu) { - int indicatorSize = pixelMetric(PM_MenuButtonIndicator, button, widget); + int indicatorSize = proxy()->pixelMetric(PM_MenuButtonIndicator, button, widget); if (button->direction == Qt::LeftToRight) textRect = textRect.adjusted(0, 0, -indicatorSize, 0); else textRect = textRect.adjusted(indicatorSize, 0, 0, 0); } - drawItemText(p, textRect, tf, button->palette, (button->state & State_Enabled), + proxy()->drawItemText(p, textRect, tf, button->palette, (button->state & State_Enabled), button->text, QPalette::ButtonText); } break; @@ -1394,17 +1394,17 @@ void QCommonStyle::drawControl(ControlElement element, const QStyleOption *opt, QStyleOptionButton subopt = *btn; subopt.rect = subElementRect(isRadio ? SE_RadioButtonIndicator : SE_CheckBoxIndicator, btn, widget); - drawPrimitive(isRadio ? PE_IndicatorRadioButton : PE_IndicatorCheckBox, + proxy()->drawPrimitive(isRadio ? PE_IndicatorRadioButton : PE_IndicatorCheckBox, &subopt, p, widget); subopt.rect = subElementRect(isRadio ? SE_RadioButtonContents : SE_CheckBoxContents, btn, widget); - drawControl(isRadio ? CE_RadioButtonLabel : CE_CheckBoxLabel, &subopt, p, widget); + proxy()->drawControl(isRadio ? CE_RadioButtonLabel : CE_CheckBoxLabel, &subopt, p, widget); if (btn->state & State_HasFocus) { QStyleOptionFocusRect fropt; fropt.QStyleOption::operator=(*btn); fropt.rect = subElementRect(isRadio ? SE_RadioButtonFocusRect : SE_CheckBoxFocusRect, btn, widget); - drawPrimitive(PE_FrameFocusRect, &fropt, p, widget); + proxy()->drawPrimitive(PE_FrameFocusRect, &fropt, p, widget); } } break; @@ -1413,20 +1413,20 @@ void QCommonStyle::drawControl(ControlElement element, const QStyleOption *opt, if (const QStyleOptionButton *btn = qstyleoption_cast(opt)) { uint alignment = visualAlignment(btn->direction, Qt::AlignLeft | Qt::AlignVCenter); - if (!styleHint(SH_UnderlineShortcut, btn, widget)) + if (!proxy()->styleHint(SH_UnderlineShortcut, btn, widget)) alignment |= Qt::TextHideMnemonic; QPixmap pix; QRect textRect = btn->rect; if (!btn->icon.isNull()) { pix = btn->icon.pixmap(btn->iconSize, btn->state & State_Enabled ? QIcon::Normal : QIcon::Disabled); - drawItemPixmap(p, btn->rect, alignment, pix); + proxy()->drawItemPixmap(p, btn->rect, alignment, pix); if (btn->direction == Qt::RightToLeft) textRect.setRight(textRect.right() - btn->iconSize.width() - 4); else textRect.setLeft(textRect.left() + btn->iconSize.width() + 4); } if (!btn->text.isEmpty()){ - drawItemText(p, textRect, alignment | Qt::TextShowMnemonic, + proxy()->drawItemText(p, textRect, alignment | Qt::TextShowMnemonic, btn->palette, btn->state & State_Enabled, btn->text, QPalette::WindowText); } } @@ -1436,7 +1436,7 @@ void QCommonStyle::drawControl(ControlElement element, const QStyleOption *opt, p->fillRect(opt->rect, opt->palette.background()); QStyleOption arrowOpt = *opt; arrowOpt.state |= State_Enabled; - drawPrimitive(((opt->state & State_DownArrow) ? PE_IndicatorArrowDown : PE_IndicatorArrowUp), + proxy()->drawPrimitive(((opt->state & State_DownArrow) ? PE_IndicatorArrowDown : PE_IndicatorArrowUp), &arrowOpt, p, widget); break; } case CE_MenuTearoff: @@ -1458,13 +1458,13 @@ void QCommonStyle::drawControl(ControlElement element, const QStyleOption *opt, if (const QStyleOptionMenuItem *mbi = qstyleoption_cast(opt)) { uint alignment = Qt::AlignCenter | Qt::TextShowMnemonic | Qt::TextDontClip | Qt::TextSingleLine; - if (!styleHint(SH_UnderlineShortcut, mbi, widget)) + if (!proxy()->styleHint(SH_UnderlineShortcut, mbi, widget)) alignment |= Qt::TextHideMnemonic; - QPixmap pix = mbi->icon.pixmap(pixelMetric(PM_SmallIconSize), (mbi->state & State_Enabled) ? QIcon::Normal : QIcon::Disabled); + QPixmap pix = mbi->icon.pixmap(proxy()->pixelMetric(PM_SmallIconSize), (mbi->state & State_Enabled) ? QIcon::Normal : QIcon::Disabled); if (!pix.isNull()) - drawItemPixmap(p,mbi->rect, alignment, pix); + proxy()->drawItemPixmap(p,mbi->rect, alignment, pix); else - drawItemText(p, mbi->rect, alignment, mbi->palette, mbi->state & State_Enabled, + proxy()->drawItemText(p, mbi->rect, alignment, mbi->palette, mbi->state & State_Enabled, mbi->text, QPalette::ButtonText); } break; @@ -1479,12 +1479,12 @@ void QCommonStyle::drawControl(ControlElement element, const QStyleOption *opt, = qstyleoption_cast(opt)) { QStyleOptionProgressBarV2 subopt = *pb; subopt.rect = subElementRect(SE_ProgressBarGroove, pb, widget); - drawControl(CE_ProgressBarGroove, &subopt, p, widget); + proxy()->drawControl(CE_ProgressBarGroove, &subopt, p, widget); subopt.rect = subElementRect(SE_ProgressBarContents, pb, widget); - drawControl(CE_ProgressBarContents, &subopt, p, widget); + proxy()->drawControl(CE_ProgressBarContents, &subopt, p, widget); if (pb->textVisible) { subopt.rect = subElementRect(SE_ProgressBarLabel, pb, widget); - drawControl(CE_ProgressBarLabel, &subopt, p, widget); + proxy()->drawControl(CE_ProgressBarLabel, &subopt, p, widget); } } break; @@ -1510,10 +1510,10 @@ void QCommonStyle::drawControl(ControlElement element, const QStyleOption *opt, ? QColor(255,255,255,160) : QColor(0,0,0,160); QPalette shadowPalette = pb->palette; shadowPalette.setColor(textRole, shadowColor); - drawItemText(p, shadowRect, Qt::AlignCenter | Qt::TextSingleLine, shadowPalette, + proxy()->drawItemText(p, shadowRect, Qt::AlignCenter | Qt::TextSingleLine, shadowPalette, pb->state & State_Enabled, pb->text, textRole); } - drawItemText(p, pb->rect, Qt::AlignCenter | Qt::TextSingleLine, pb->palette, + proxy()->drawItemText(p, pb->rect, Qt::AlignCenter | Qt::TextSingleLine, pb->palette, pb->state & State_Enabled, pb->text, textRole); } } @@ -1560,7 +1560,7 @@ void QCommonStyle::drawControl(ControlElement element, const QStyleOption *opt, p->setPen(QPen(pal2.highlight().color(), 4)); p->drawLine(x, rect.y(), x, rect.height()); } else { - const int unit_width = pixelMetric(PM_ProgressBarChunkWidth, pb, widget); + const int unit_width = proxy()->pixelMetric(PM_ProgressBarChunkWidth, pb, widget); if (!unit_width) return; @@ -1602,7 +1602,7 @@ void QCommonStyle::drawControl(ControlElement element, const QStyleOption *opt, for (int i = 0; i < nu; ++i) { pbBits.rect.setRect(x0 + x, myY, unit_width, myHeight); pbBits.rect = m.mapRect(QRectF(pbBits.rect)).toRect(); - drawPrimitive(PE_IndicatorProgressChunk, &pbBits, p, widget); + proxy()->drawPrimitive(PE_IndicatorProgressChunk, &pbBits, p, widget); x += reverse ? -unit_width : unit_width; } @@ -1613,7 +1613,7 @@ void QCommonStyle::drawControl(ControlElement element, const QStyleOption *opt, int offset = reverse ? x0 + x + unit_width-pixels_left : x0 + x; pbBits.rect.setRect(offset, myY, pixels_left, myHeight); pbBits.rect = m.mapRect(QRectF(pbBits.rect)).toRect(); - drawPrimitive(PE_IndicatorProgressChunk, &pbBits, p, widget); + proxy()->drawPrimitive(PE_IndicatorProgressChunk, &pbBits, p, widget); } } } @@ -1624,7 +1624,7 @@ void QCommonStyle::drawControl(ControlElement element, const QStyleOption *opt, QRect rect = header->rect; if (!header->icon.isNull()) { QPixmap pixmap - = header->icon.pixmap(pixelMetric(PM_SmallIconSize), (header->state & State_Enabled) ? QIcon::Normal : QIcon::Disabled); + = header->icon.pixmap(proxy()->pixelMetric(PM_SmallIconSize), (header->state & State_Enabled) ? QIcon::Normal : QIcon::Disabled); int pixw = pixmap.width(); QRect aligned = alignedRect(header->direction, QFlag(header->iconAlignment), pixmap.size(), rect); @@ -1641,7 +1641,7 @@ void QCommonStyle::drawControl(ControlElement element, const QStyleOption *opt, fnt.setBold(true); p->setFont(fnt); } - drawItemText(p, rect, header->textAlignment, header->palette, + proxy()->drawItemText(p, rect, header->textAlignment, header->palette, (header->state & State_Enabled), header->text, QPalette::ButtonText); } break; @@ -1653,19 +1653,19 @@ void QCommonStyle::drawControl(ControlElement element, const QStyleOption *opt, int shiftX = 0; int shiftY = 0; if (toolbutton->state & (State_Sunken | State_On)) { - shiftX = pixelMetric(PM_ButtonShiftHorizontal, toolbutton, widget); - shiftY = pixelMetric(PM_ButtonShiftVertical, toolbutton, widget); + shiftX = proxy()->pixelMetric(PM_ButtonShiftHorizontal, toolbutton, widget); + shiftY = proxy()->pixelMetric(PM_ButtonShiftVertical, toolbutton, widget); } // Arrow type always overrules and is always shown bool hasArrow = toolbutton->features & QStyleOptionToolButton::Arrow; if (((!hasArrow && toolbutton->icon.isNull()) && !toolbutton->text.isEmpty()) || toolbutton->toolButtonStyle == Qt::ToolButtonTextOnly) { int alignment = Qt::AlignCenter | Qt::TextShowMnemonic; - if (!styleHint(SH_UnderlineShortcut, opt, widget)) + if (!proxy()->styleHint(SH_UnderlineShortcut, opt, widget)) alignment |= Qt::TextHideMnemonic; rect.translate(shiftX, shiftY); p->setFont(toolbutton->font); - drawItemText(p, rect, alignment, toolbutton->palette, + proxy()->drawItemText(p, rect, alignment, toolbutton->palette, opt->state & State_Enabled, toolbutton->text, QPalette::ButtonText); } else { @@ -1690,7 +1690,7 @@ void QCommonStyle::drawControl(ControlElement element, const QStyleOption *opt, QRect pr = rect, tr = rect; int alignment = Qt::TextShowMnemonic; - if (!styleHint(SH_UnderlineShortcut, opt, widget)) + if (!proxy()->styleHint(SH_UnderlineShortcut, opt, widget)) alignment |= Qt::TextHideMnemonic; if (toolbutton->toolButtonStyle == Qt::ToolButtonTextUnderIcon) { @@ -1698,7 +1698,7 @@ void QCommonStyle::drawControl(ControlElement element, const QStyleOption *opt, tr.adjust(0, pr.height() - 1, 0, -3); pr.translate(shiftX, shiftY); if (!hasArrow) { - drawItemPixmap(p, pr, Qt::AlignCenter, pm); + proxy()->drawItemPixmap(p, pr, Qt::AlignCenter, pm); } else { drawArrow(this, toolbutton, pr, p, widget); } @@ -1708,14 +1708,14 @@ void QCommonStyle::drawControl(ControlElement element, const QStyleOption *opt, tr.adjust(pr.width(), 0, 0, 0); pr.translate(shiftX, shiftY); if (!hasArrow) { - drawItemPixmap(p, QStyle::visualRect(opt->direction, rect, pr), Qt::AlignCenter, pm); + proxy()->drawItemPixmap(p, QStyle::visualRect(opt->direction, rect, pr), Qt::AlignCenter, pm); } else { drawArrow(this, toolbutton, pr, p, widget); } alignment |= Qt::AlignLeft | Qt::AlignVCenter; } tr.translate(shiftX, shiftY); - drawItemText(p, QStyle::visualRect(opt->direction, rect, tr), alignment, toolbutton->palette, + proxy()->drawItemText(p, QStyle::visualRect(opt->direction, rect, tr), alignment, toolbutton->palette, toolbutton->state & State_Enabled, toolbutton->text, QPalette::ButtonText); } else { @@ -1723,7 +1723,7 @@ void QCommonStyle::drawControl(ControlElement element, const QStyleOption *opt, if (hasArrow) { drawArrow(this, toolbutton, rect, p, widget); } else { - drawItemPixmap(p, rect, Qt::AlignCenter, pm); + proxy()->drawItemPixmap(p, rect, Qt::AlignCenter, pm); } } } @@ -1733,8 +1733,8 @@ void QCommonStyle::drawControl(ControlElement element, const QStyleOption *opt, #ifndef QT_NO_TOOLBOX case CE_ToolBoxTab: if (const QStyleOptionToolBox *tb = qstyleoption_cast(opt)) { - drawControl(CE_ToolBoxTabShape, tb, p, widget); - drawControl(CE_ToolBoxTabLabel, tb, p, widget); + proxy()->drawControl(CE_ToolBoxTabShape, tb, p, widget); + proxy()->drawControl(CE_ToolBoxTabLabel, tb, p, widget); } break; case CE_ToolBoxTabShape: @@ -1780,8 +1780,8 @@ void QCommonStyle::drawControl(ControlElement element, const QStyleOption *opt, #ifndef QT_NO_TABBAR case CE_TabBarTab: if (const QStyleOptionTab *tab = qstyleoption_cast(opt)) { - drawControl(CE_TabBarTabShape, tab, p, widget); - drawControl(CE_TabBarTabLabel, tab, p, widget); + proxy()->drawControl(CE_TabBarTabShape, tab, p, widget); + proxy()->drawControl(CE_TabBarTabLabel, tab, p, widget); } break; case CE_TabBarTabShape: @@ -1791,7 +1791,7 @@ void QCommonStyle::drawControl(ControlElement element, const QStyleOption *opt, QRect rect(tab->rect); bool selected = tab->state & State_Selected; bool onlyOne = tab->position == QStyleOptionTab::OnlyOneTab; - int tabOverlap = onlyOne ? 0 : pixelMetric(PM_TabBarTabOverlap, opt, widget); + int tabOverlap = onlyOne ? 0 : proxy()->pixelMetric(PM_TabBarTabOverlap, opt, widget); if (!selected) { switch (tab->shape) { @@ -1895,7 +1895,7 @@ void QCommonStyle::drawControl(ControlElement element, const QStyleOption *opt, if (const QStyleOptionToolBox *tb = qstyleoption_cast(opt)) { bool enabled = tb->state & State_Enabled; bool selected = tb->state & State_Selected; - QPixmap pm = tb->icon.pixmap(pixelMetric(QStyle::PM_SmallIconSize, tb, widget), + QPixmap pm = tb->icon.pixmap(proxy()->pixelMetric(QStyle::PM_SmallIconSize, tb, widget), enabled ? QIcon::Normal : QIcon::Disabled); QRect cr = subElementRect(QStyle::SE_ToolBoxTabContents, tb, widget); @@ -1911,7 +1911,7 @@ void QCommonStyle::drawControl(ControlElement element, const QStyleOption *opt, tr = QRect(ir.right(), cr.top(), cr.width() - ir.right() - 4, cr.height()); } - if (selected && styleHint(QStyle::SH_ToolBox_SelectedPageTitleBold, tb, widget)) { + if (selected && proxy()->styleHint(QStyle::SH_ToolBox_SelectedPageTitleBold, tb, widget)) { QFont f(p->font()); f.setBold(true); p->setFont(f); @@ -1923,16 +1923,16 @@ void QCommonStyle::drawControl(ControlElement element, const QStyleOption *opt, p->drawPixmap(ir.left(), (tb->rect.height() - ih) / 2, pm); int alignment = Qt::AlignLeft | Qt::AlignVCenter | Qt::TextShowMnemonic; - if (!styleHint(QStyle::SH_UnderlineShortcut, tb, widget)) + if (!proxy()->styleHint(QStyle::SH_UnderlineShortcut, tb, widget)) alignment |= Qt::TextHideMnemonic; - drawItemText(p, tr, alignment, tb->palette, enabled, txt, QPalette::ButtonText); + proxy()->drawItemText(p, tr, alignment, tb->palette, enabled, txt, QPalette::ButtonText); if (!txt.isEmpty() && opt->state & State_HasFocus) { QStyleOptionFocusRect opt; opt.rect = tr; opt.palette = tb->palette; opt.state = QStyle::State_None; - drawPrimitive(QStyle::PE_FrameFocusRect, &opt, p, widget); + proxy()->drawPrimitive(QStyle::PE_FrameFocusRect, &opt, p, widget); } } break; @@ -1947,7 +1947,7 @@ void QCommonStyle::drawControl(ControlElement element, const QStyleOption *opt, || tabV2.shape == QTabBar::TriangularWest; int alignment = Qt::AlignCenter | Qt::TextShowMnemonic; - if (!styleHint(SH_UnderlineShortcut, opt, widget)) + if (!proxy()->styleHint(SH_UnderlineShortcut, opt, widget)) alignment |= Qt::TextHideMnemonic; if (verticalTabs) { @@ -1973,7 +1973,7 @@ void QCommonStyle::drawControl(ControlElement element, const QStyleOption *opt, if (!tabV2.icon.isNull()) { QSize iconSize = tabV2.iconSize; if (!iconSize.isValid()) { - int iconExtent = pixelMetric(PM_SmallIconSize); + int iconExtent = proxy()->pixelMetric(PM_SmallIconSize); iconSize = QSize(iconExtent, iconExtent); } QSize tabIconSize = tabV2.icon.actualSize(iconSize, @@ -1998,7 +1998,7 @@ void QCommonStyle::drawControl(ControlElement element, const QStyleOption *opt, p->drawPixmap(iconRect.x(), iconRect.y(), tabIcon); } - drawItemText(p, tr, alignment, tab->palette, tab->state & State_Enabled, tab->text, QPalette::WindowText); + proxy()->drawItemText(p, tr, alignment, tab->palette, tab->state & State_Enabled, tab->text, QPalette::WindowText); if (verticalTabs) p->restore(); @@ -2109,7 +2109,7 @@ void QCommonStyle::drawControl(ControlElement element, const QStyleOption *opt, p->save(); QRect r = opt->rect; QStyleHintReturnMask mask; - if (styleHint(QStyle::SH_RubberBand_Mask, opt, widget, &mask)) + if (proxy()->styleHint(QStyle::SH_RubberBand_Mask, opt, widget, &mask)) p->setClipRegion(mask.region); p->drawTiledPixmap(r.x(), r.y(), r.width(), r.height(), tiledPixmap); p->setPen(opt->palette.color(QPalette::Active, QPalette::WindowText)); @@ -2147,7 +2147,7 @@ void QCommonStyle::drawControl(ControlElement element, const QStyleOption *opt, } const int indent = p->fontMetrics().descent(); - drawItemText(p, r.adjusted(indent + 1, 1, -indent - 1, -1), + proxy()->drawItemText(p, r.adjusted(indent + 1, 1, -indent - 1, -1), Qt::AlignLeft | Qt::AlignVCenter | Qt::TextShowMnemonic, dwOpt->palette, dwOpt->state & State_Enabled, dwOpt->title, QPalette::WindowText); @@ -2162,14 +2162,14 @@ void QCommonStyle::drawControl(ControlElement element, const QStyleOption *opt, if (const QStyleOptionHeader *header = qstyleoption_cast(opt)) { QRegion clipRegion = p->clipRegion(); p->setClipRect(opt->rect); - drawControl(CE_HeaderSection, header, p, widget); + proxy()->drawControl(CE_HeaderSection, header, p, widget); QStyleOptionHeader subopt = *header; subopt.rect = subElementRect(SE_HeaderLabel, header, widget); if (subopt.rect.isValid()) - drawControl(CE_HeaderLabel, &subopt, p, widget); + proxy()->drawControl(CE_HeaderLabel, &subopt, p, widget); if (header->sortIndicator != QStyleOptionHeader::None) { subopt.rect = subElementRect(SE_HeaderArrow, opt, widget); - drawPrimitive(PE_IndicatorHeaderArrow, &subopt, p, widget); + proxy()->drawPrimitive(PE_IndicatorHeaderArrow, &subopt, p, widget); } p->setClipRegion(clipRegion); } @@ -2188,7 +2188,7 @@ void QCommonStyle::drawControl(ControlElement element, const QStyleOption *opt, #ifndef QT_NO_COMBOBOX case CE_ComboBoxLabel: if (const QStyleOptionComboBox *cb = qstyleoption_cast(opt)) { - QRect editRect = subControlRect(CC_ComboBox, cb, SC_ComboBoxEditField, widget); + QRect editRect = proxy()->subControlRect(CC_ComboBox, cb, SC_ComboBoxEditField, widget); p->save(); p->setClipRect(editRect); if (!cb->currentIcon.isNull()) { @@ -2202,7 +2202,7 @@ void QCommonStyle::drawControl(ControlElement element, const QStyleOption *opt, iconRect.size(), editRect); if (cb->editable) p->fillRect(iconRect, opt->palette.brush(QPalette::Base)); - drawItemPixmap(p, iconRect, Qt::AlignCenter, pixmap); + proxy()->drawItemPixmap(p, iconRect, Qt::AlignCenter, pixmap); if (cb->direction == Qt::RightToLeft) editRect.translate(-4 - cb->iconSize.width(), 0); @@ -2210,7 +2210,7 @@ void QCommonStyle::drawControl(ControlElement element, const QStyleOption *opt, editRect.translate(cb->iconSize.width() + 4, 0); } if (!cb->currentText.isEmpty() && !cb->editable) { - drawItemText(p, editRect.adjusted(1, 0, -1, 0), + proxy()->drawItemText(p, editRect.adjusted(1, 0, -1, 0), visualAlignment(cb->direction, Qt::AlignLeft | Qt::AlignVCenter), cb->palette, cb->state & State_Enabled, cb->currentText); } @@ -2226,7 +2226,7 @@ void QCommonStyle::drawControl(ControlElement element, const QStyleOption *opt, frame.QStyleOption::operator=(*toolBar); frame.lineWidth = toolBar->lineWidth; frame.midLineWidth = toolBar->midLineWidth; - drawPrimitive(PE_PanelToolBar, opt, p, widget); + proxy()->drawPrimitive(PE_PanelToolBar, opt, p, widget); if (widget && qobject_cast(widget->parentWidget())) break; @@ -2268,7 +2268,7 @@ void QCommonStyle::drawControl(ControlElement element, const QStyleOption *opt, QRect textRect = subElementRect(SE_ItemViewItemText, vopt, widget); // draw the background - drawPrimitive(PE_PanelItemViewItem, opt, p, widget); + proxy()->drawPrimitive(PE_PanelItemViewItem, opt, p, widget); // draw the check mark if (vopt->features & QStyleOptionViewItemV2::HasCheckIndicator) { @@ -2287,7 +2287,7 @@ void QCommonStyle::drawControl(ControlElement element, const QStyleOption *opt, option.state |= QStyle::State_On; break; } - drawPrimitive(QStyle::PE_IndicatorViewItemCheck, &option, p, widget); + proxy()->drawPrimitive(QStyle::PE_IndicatorViewItemCheck, &option, p, widget); } // draw the icon @@ -2330,7 +2330,7 @@ void QCommonStyle::drawControl(ControlElement element, const QStyleOption *opt, ? QPalette::Normal : QPalette::Disabled; o.backgroundColor = vopt->palette.color(cg, (vopt->state & QStyle::State_Selected) ? QPalette::Highlight : QPalette::Window); - drawPrimitive(QStyle::PE_FrameFocusRect, &o, p, widget); + proxy()->drawPrimitive(QStyle::PE_FrameFocusRect, &o, p, widget); } p->restore(); @@ -2369,7 +2369,7 @@ void QCommonStyle::drawControl(ControlElement element, const QStyleOption *opt, if (widget) { widget->style()->drawPrimitive(QStyle::PE_Frame, opt, p, widget); } else { - drawPrimitive(QStyle::PE_Frame, opt, p, widget); + proxy()->drawPrimitive(QStyle::PE_Frame, opt, p, widget); } break; case QFrame::Panel: @@ -2427,9 +2427,9 @@ QRect QCommonStyle::subElementRect(SubElement sr, const QStyleOption *opt, case SE_PushButtonContents: if (const QStyleOptionButton *btn = qstyleoption_cast(opt)) { int dx1, dx2; - dx1 = pixelMetric(PM_DefaultFrameWidth, btn, widget); + dx1 = proxy()->pixelMetric(PM_DefaultFrameWidth, btn, widget); if (btn->features & QStyleOptionButton::AutoDefaultButton) - dx1 += pixelMetric(PM_ButtonDefaultIndicator, btn, widget); + dx1 += proxy()->pixelMetric(PM_ButtonDefaultIndicator, btn, widget); dx2 = dx1 * 2; r.setRect(opt->rect.x() + dx1, opt->rect.y() + dx1, opt->rect.width() - dx2, opt->rect.height() - dx2); @@ -2440,11 +2440,11 @@ QRect QCommonStyle::subElementRect(SubElement sr, const QStyleOption *opt, if (const QStyleOptionButton *btn = qstyleoption_cast(opt)) { int dbw1 = 0, dbw2 = 0; if (btn->features & QStyleOptionButton::AutoDefaultButton){ - dbw1 = pixelMetric(PM_ButtonDefaultIndicator, btn, widget); + dbw1 = proxy()->pixelMetric(PM_ButtonDefaultIndicator, btn, widget); dbw2 = dbw1 * 2; } - int dfw1 = pixelMetric(PM_DefaultFrameWidth, btn, widget) + 1, + int dfw1 = proxy()->pixelMetric(PM_DefaultFrameWidth, btn, widget) + 1, dfw2 = dfw1 * 2; r.setRect(btn->rect.x() + dfw1 + dbw1, btn->rect.y() + dfw1 + dbw1, @@ -2454,9 +2454,9 @@ QRect QCommonStyle::subElementRect(SubElement sr, const QStyleOption *opt, break; case SE_CheckBoxIndicator: { - int h = pixelMetric(PM_IndicatorHeight, opt, widget); + int h = proxy()->pixelMetric(PM_IndicatorHeight, opt, widget); r.setRect(opt->rect.x(), opt->rect.y() + ((opt->rect.height() - h) / 2), - pixelMetric(PM_IndicatorWidth, opt, widget), h); + proxy()->pixelMetric(PM_IndicatorWidth, opt, widget), h); r = visualRect(opt->direction, opt->rect, r); } break; @@ -2466,7 +2466,7 @@ QRect QCommonStyle::subElementRect(SubElement sr, const QStyleOption *opt, // Deal with the logical first, then convert it back to screen coords. QRect ir = visualRect(opt->direction, opt->rect, subElementRect(SE_CheckBoxIndicator, opt, widget)); - int spacing = pixelMetric(PM_CheckBoxLabelSpacing, opt, widget); + int spacing = proxy()->pixelMetric(PM_CheckBoxLabelSpacing, opt, widget); r.setRect(ir.right() + spacing, opt->rect.y(), opt->rect.width() - ir.width() - spacing, opt->rect.height()); r = visualRect(opt->direction, opt->rect, r); @@ -2506,9 +2506,9 @@ QRect QCommonStyle::subElementRect(SubElement sr, const QStyleOption *opt, case SE_RadioButtonIndicator: { - int h = pixelMetric(PM_ExclusiveIndicatorHeight, opt, widget); + int h = proxy()->pixelMetric(PM_ExclusiveIndicatorHeight, opt, widget); r.setRect(opt->rect.x(), opt->rect.y() + ((opt->rect.height() - h) / 2), - pixelMetric(PM_ExclusiveIndicatorWidth, opt, widget), h); + proxy()->pixelMetric(PM_ExclusiveIndicatorWidth, opt, widget), h); r = visualRect(opt->direction, opt->rect, r); } break; @@ -2517,7 +2517,7 @@ QRect QCommonStyle::subElementRect(SubElement sr, const QStyleOption *opt, { QRect ir = visualRect(opt->direction, opt->rect, subElementRect(SE_RadioButtonIndicator, opt, widget)); - int spacing = pixelMetric(PM_RadioButtonLabelSpacing, opt, widget); + int spacing = proxy()->pixelMetric(PM_RadioButtonLabelSpacing, opt, widget); r.setRect(ir.left() + ir.width() + spacing, opt->rect.y(), opt->rect.width() - ir.width() - spacing, opt->rect.height()); r = visualRect(opt->direction, opt->rect, r); @@ -2554,8 +2554,8 @@ QRect QCommonStyle::subElementRect(SubElement sr, const QStyleOption *opt, #ifndef QT_NO_SLIDER case SE_SliderFocusRect: if (const QStyleOptionSlider *slider = qstyleoption_cast(opt)) { - int tickOffset = pixelMetric(PM_SliderTickmarkOffset, slider, widget); - int thickness = pixelMetric(PM_SliderControlThickness, slider, widget); + int tickOffset = proxy()->pixelMetric(PM_SliderTickmarkOffset, slider, widget); + int thickness = proxy()->pixelMetric(PM_SliderControlThickness, slider, widget); if (slider->orientation == Qt::Horizontal) r.setRect(0, tickOffset - 1, slider->rect.width(), thickness + 2); else @@ -2626,7 +2626,7 @@ QRect QCommonStyle::subElementRect(SubElement sr, const QStyleOption *opt, break; #endif // QT_NO_TOOLBOX case SE_HeaderLabel: { - int margin = pixelMetric(QStyle::PM_HeaderMargin, opt, widget); + int margin = proxy()->pixelMetric(QStyle::PM_HeaderMargin, opt, widget); r.setRect(opt->rect.x() + margin, opt->rect.y() + margin, opt->rect.width() - margin * 2, opt->rect.height() - margin * 2); @@ -2646,7 +2646,7 @@ QRect QCommonStyle::subElementRect(SubElement sr, const QStyleOption *opt, int w = opt->rect.width(); int x = opt->rect.x(); int y = opt->rect.y(); - int margin = pixelMetric(QStyle::PM_HeaderMargin, opt, widget); + int margin = proxy()->pixelMetric(QStyle::PM_HeaderMargin, opt, widget); if (opt->state & State_Horizontal) { int horiz_size = h / 2; @@ -2682,7 +2682,7 @@ QRect QCommonStyle::subElementRect(SubElement sr, const QStyleOption *opt, r.setWidth(qMin(r.width(), twf->rect.width() - twf->leftCornerWidgetSize.width() - twf->rightCornerWidgetSize.width())); - switch (styleHint(SH_TabBar_Alignment, twf, widget) & alingMask) { + switch (proxy()->styleHint(SH_TabBar_Alignment, twf, widget) & alingMask) { default: case Qt::AlignLeft: r.moveTopLeft(QPoint(twf->leftCornerWidgetSize.width(), 0)); @@ -2704,7 +2704,7 @@ QRect QCommonStyle::subElementRect(SubElement sr, const QStyleOption *opt, r.setWidth(qMin(r.width(), twf->rect.width() - twf->leftCornerWidgetSize.width() - twf->rightCornerWidgetSize.width())); - switch (styleHint(SH_TabBar_Alignment, twf, widget) & alingMask) { + switch (proxy()->styleHint(SH_TabBar_Alignment, twf, widget) & alingMask) { default: case Qt::AlignLeft: r.moveTopLeft(QPoint(twf->leftCornerWidgetSize.width(), @@ -2729,7 +2729,7 @@ QRect QCommonStyle::subElementRect(SubElement sr, const QStyleOption *opt, r.setHeight(qMin(r.height(), twf->rect.height() - twf->leftCornerWidgetSize.height() - twf->rightCornerWidgetSize.height())); - switch (styleHint(SH_TabBar_Alignment, twf, widget) & alingMask) { + switch (proxy()->styleHint(SH_TabBar_Alignment, twf, widget) & alingMask) { default: case Qt::AlignLeft: r.moveTopLeft(QPoint(twf->rect.width() - twf->tabBarSize.width(), @@ -2751,7 +2751,7 @@ QRect QCommonStyle::subElementRect(SubElement sr, const QStyleOption *opt, r.setHeight(qMin(r.height(), twf->rect.height() - twf->leftCornerWidgetSize.height() - twf->rightCornerWidgetSize.height())); - switch (styleHint(SH_TabBar_Alignment, twf, widget) & alingMask) { + switch (proxy()->styleHint(SH_TabBar_Alignment, twf, widget) & alingMask) { default: case Qt::AlignLeft: r.moveTopLeft(QPoint(0, twf->leftCornerWidgetSize.height())); @@ -2773,7 +2773,7 @@ QRect QCommonStyle::subElementRect(SubElement sr, const QStyleOption *opt, if (const QStyleOptionTabWidgetFrame *twf = qstyleoption_cast(opt)) { QStyleOptionTab tabopt; tabopt.shape = twf->shape; - int overlap = pixelMetric(PM_TabBarBaseOverlap, &tabopt, widget); + int overlap = proxy()->pixelMetric(PM_TabBarBaseOverlap, &tabopt, widget); if (twf->lineWidth == 0) overlap = 0; switch (twf->shape) { @@ -2853,8 +2853,8 @@ QRect QCommonStyle::subElementRect(SubElement sr, const QStyleOption *opt, tr.setRect(0, 0, tr.height(), tr.width()); int verticalShift = pixelMetric(QStyle::PM_TabBarTabShiftVertical, tab, widget); int horizontalShift = pixelMetric(QStyle::PM_TabBarTabShiftHorizontal, tab, widget); - int hpadding = pixelMetric(QStyle::PM_TabBarTabHSpace, opt, widget) / 2; - int vpadding = pixelMetric(QStyle::PM_TabBarTabVSpace, opt, widget) / 2; + int hpadding = proxy()->pixelMetric(QStyle::PM_TabBarTabHSpace, opt, widget) / 2; + int vpadding = proxy()->pixelMetric(QStyle::PM_TabBarTabVSpace, opt, widget) / 2; if (tabV2.shape == QTabBar::RoundedSouth || tabV2.shape == QTabBar::TriangularSouth) verticalShift = -verticalShift; tr.adjust(hpadding, vpadding, horizontalShift - hpadding, verticalShift - vpadding); @@ -2874,7 +2874,7 @@ QRect QCommonStyle::subElementRect(SubElement sr, const QStyleOption *opt, if (!tabV2.icon.isNull()) { QSize iconSize = tabV2.iconSize; if (!iconSize.isValid()) { - int iconExtent = pixelMetric(PM_SmallIconSize); + int iconExtent = proxy()->pixelMetric(PM_SmallIconSize); iconSize = QSize(iconExtent, iconExtent); } QSize tabIconSize = tabV2.icon.actualSize(iconSize, @@ -2906,8 +2906,8 @@ QRect QCommonStyle::subElementRect(SubElement sr, const QStyleOption *opt, case SE_TabBarTabRightButton: if (const QStyleOptionTabV3 *tab = qstyleoption_cast(opt)) { bool selected = tab->state & State_Selected; - int verticalShift = pixelMetric(QStyle::PM_TabBarTabShiftVertical, tab, widget); - int horizontalShift = pixelMetric(QStyle::PM_TabBarTabShiftHorizontal, tab, widget); + int verticalShift = proxy()->pixelMetric(QStyle::PM_TabBarTabShiftVertical, tab, widget); + int horizontalShift = proxy()->pixelMetric(QStyle::PM_TabBarTabShiftHorizontal, tab, widget); bool verticalTabs = tab->shape == QTabBar::RoundedEast || tab->shape == QTabBar::RoundedWest @@ -2996,7 +2996,7 @@ QRect QCommonStyle::subElementRect(SubElement sr, const QStyleOption *opt, break; case SE_FrameContents: if (const QStyleOptionFrameV2 *f = qstyleoption_cast(opt)) { - int fw = pixelMetric(PM_DefaultFrameWidth, f, widget); + int fw = proxy()->pixelMetric(PM_DefaultFrameWidth, f, widget); r = opt->rect.adjusted(fw, fw, -fw, -fw); r = visualRect(opt->direction, opt->rect, r); } @@ -3063,9 +3063,9 @@ QRect QCommonStyle::subElementRect(SubElement sr, const QStyleOption *opt, case SE_DockWidgetFloatButton: case SE_DockWidgetTitleBarText: case SE_DockWidgetIcon: { - int iconSize = pixelMetric(PM_SmallIconSize, opt, widget); - int buttonMargin = pixelMetric(PM_DockWidgetTitleBarButtonMargin, opt, widget); - int margin = pixelMetric(QStyle::PM_DockWidgetTitleMargin, opt, widget); + int iconSize = proxy()->pixelMetric(PM_SmallIconSize, opt, widget); + int buttonMargin = proxy()->pixelMetric(PM_DockWidgetTitleBarButtonMargin, opt, widget); + int margin = proxy()->pixelMetric(QStyle::PM_DockWidgetTitleMargin, opt, widget); QRect rect = opt->rect; const QStyleOptionDockWidget *dwOpt @@ -3262,11 +3262,11 @@ void QCommonStyle::drawComplexControl(ComplexControl cc, const QStyleOptionCompl case CC_Slider: if (const QStyleOptionSlider *slider = qstyleoption_cast(opt)) { if (slider->subControls == SC_SliderTickmarks) { - int tickOffset = pixelMetric(PM_SliderTickmarkOffset, slider, widget); + int tickOffset = proxy()->pixelMetric(PM_SliderTickmarkOffset, slider, widget); int ticks = slider->tickPosition; - int thickness = pixelMetric(PM_SliderControlThickness, slider, widget); - int len = pixelMetric(PM_SliderLength, slider, widget); - int available = pixelMetric(PM_SliderSpaceAvailable, slider, widget); + int thickness = proxy()->pixelMetric(PM_SliderControlThickness, slider, widget); + int len = proxy()->pixelMetric(PM_SliderLength, slider, widget); + int available = proxy()->pixelMetric(PM_SliderSpaceAvailable, slider, widget); int interval = slider->tickInterval; if (interval <= 0) { interval = slider->singleStep; @@ -3324,71 +3324,71 @@ void QCommonStyle::drawComplexControl(ComplexControl cc, const QStyleOptionCompl if (scrollbar->subControls & SC_ScrollBarSubLine) { newScrollbar.state = saveFlags; - newScrollbar.rect = subControlRect(cc, &newScrollbar, SC_ScrollBarSubLine, widget); + newScrollbar.rect = proxy()->subControlRect(cc, &newScrollbar, SC_ScrollBarSubLine, widget); if (newScrollbar.rect.isValid()) { if (!(scrollbar->activeSubControls & SC_ScrollBarSubLine)) newScrollbar.state &= ~(State_Sunken | State_MouseOver); - drawControl(CE_ScrollBarSubLine, &newScrollbar, p, widget); + proxy()->drawControl(CE_ScrollBarSubLine, &newScrollbar, p, widget); } } if (scrollbar->subControls & SC_ScrollBarAddLine) { newScrollbar.rect = scrollbar->rect; newScrollbar.state = saveFlags; - newScrollbar.rect = subControlRect(cc, &newScrollbar, SC_ScrollBarAddLine, widget); + newScrollbar.rect = proxy()->subControlRect(cc, &newScrollbar, SC_ScrollBarAddLine, widget); if (newScrollbar.rect.isValid()) { if (!(scrollbar->activeSubControls & SC_ScrollBarAddLine)) newScrollbar.state &= ~(State_Sunken | State_MouseOver); - drawControl(CE_ScrollBarAddLine, &newScrollbar, p, widget); + proxy()->drawControl(CE_ScrollBarAddLine, &newScrollbar, p, widget); } } if (scrollbar->subControls & SC_ScrollBarSubPage) { newScrollbar.rect = scrollbar->rect; newScrollbar.state = saveFlags; - newScrollbar.rect = subControlRect(cc, &newScrollbar, SC_ScrollBarSubPage, widget); + newScrollbar.rect = proxy()->subControlRect(cc, &newScrollbar, SC_ScrollBarSubPage, widget); if (newScrollbar.rect.isValid()) { if (!(scrollbar->activeSubControls & SC_ScrollBarSubPage)) newScrollbar.state &= ~(State_Sunken | State_MouseOver); - drawControl(CE_ScrollBarSubPage, &newScrollbar, p, widget); + proxy()->drawControl(CE_ScrollBarSubPage, &newScrollbar, p, widget); } } if (scrollbar->subControls & SC_ScrollBarAddPage) { newScrollbar.rect = scrollbar->rect; newScrollbar.state = saveFlags; - newScrollbar.rect = subControlRect(cc, &newScrollbar, SC_ScrollBarAddPage, widget); + newScrollbar.rect = proxy()->subControlRect(cc, &newScrollbar, SC_ScrollBarAddPage, widget); if (newScrollbar.rect.isValid()) { if (!(scrollbar->activeSubControls & SC_ScrollBarAddPage)) newScrollbar.state &= ~(State_Sunken | State_MouseOver); - drawControl(CE_ScrollBarAddPage, &newScrollbar, p, widget); + proxy()->drawControl(CE_ScrollBarAddPage, &newScrollbar, p, widget); } } if (scrollbar->subControls & SC_ScrollBarFirst) { newScrollbar.rect = scrollbar->rect; newScrollbar.state = saveFlags; - newScrollbar.rect = subControlRect(cc, &newScrollbar, SC_ScrollBarFirst, widget); + newScrollbar.rect = proxy()->subControlRect(cc, &newScrollbar, SC_ScrollBarFirst, widget); if (newScrollbar.rect.isValid()) { if (!(scrollbar->activeSubControls & SC_ScrollBarFirst)) newScrollbar.state &= ~(State_Sunken | State_MouseOver); - drawControl(CE_ScrollBarFirst, &newScrollbar, p, widget); + proxy()->drawControl(CE_ScrollBarFirst, &newScrollbar, p, widget); } } if (scrollbar->subControls & SC_ScrollBarLast) { newScrollbar.rect = scrollbar->rect; newScrollbar.state = saveFlags; - newScrollbar.rect = subControlRect(cc, &newScrollbar, SC_ScrollBarLast, widget); + newScrollbar.rect = proxy()->subControlRect(cc, &newScrollbar, SC_ScrollBarLast, widget); if (newScrollbar.rect.isValid()) { if (!(scrollbar->activeSubControls & SC_ScrollBarLast)) newScrollbar.state &= ~(State_Sunken | State_MouseOver); - drawControl(CE_ScrollBarLast, &newScrollbar, p, widget); + proxy()->drawControl(CE_ScrollBarLast, &newScrollbar, p, widget); } } if (scrollbar->subControls & SC_ScrollBarSlider) { newScrollbar.rect = scrollbar->rect; newScrollbar.state = saveFlags; - newScrollbar.rect = subControlRect(cc, &newScrollbar, SC_ScrollBarSlider, widget); + newScrollbar.rect = proxy()->subControlRect(cc, &newScrollbar, SC_ScrollBarSlider, widget); if (newScrollbar.rect.isValid()) { if (!(scrollbar->activeSubControls & SC_ScrollBarSlider)) newScrollbar.state &= ~(State_Sunken | State_MouseOver); - drawControl(CE_ScrollBarSlider, &newScrollbar, p, widget); + proxy()->drawControl(CE_ScrollBarSlider, &newScrollbar, p, widget); if (scrollbar->state & State_HasFocus) { QStyleOptionFocusRect fropt; @@ -3396,7 +3396,7 @@ void QCommonStyle::drawComplexControl(ComplexControl cc, const QStyleOptionCompl fropt.rect.setRect(newScrollbar.rect.x() + 2, newScrollbar.rect.y() + 2, newScrollbar.rect.width() - 5, newScrollbar.rect.height() - 5); - drawPrimitive(PE_FrameFocusRect, &fropt, p, widget); + proxy()->drawPrimitive(PE_FrameFocusRect, &fropt, p, widget); } } } @@ -3418,7 +3418,7 @@ void QCommonStyle::drawComplexControl(ComplexControl cc, const QStyleOptionCompl PrimitiveElement pe; if (sb->frame && (sb->subControls & SC_SpinBoxFrame)) { - QRect r = subControlRect(CC_SpinBox, sb, SC_SpinBoxFrame, widget); + QRect r = proxy()->subControlRect(CC_SpinBox, sb, SC_SpinBoxFrame, widget); qDrawWinPanel(p, r, sb->palette, true); } @@ -3442,10 +3442,10 @@ void QCommonStyle::drawComplexControl(ComplexControl cc, const QStyleOptionCompl pe = (sb->buttonSymbols == QAbstractSpinBox::PlusMinus ? PE_IndicatorSpinPlus : PE_IndicatorSpinUp); - copy.rect = subControlRect(CC_SpinBox, sb, SC_SpinBoxUp, widget); - drawPrimitive(PE_PanelButtonBevel, ©, p, widget); + copy.rect = proxy()->subControlRect(CC_SpinBox, sb, SC_SpinBoxUp, widget); + proxy()->drawPrimitive(PE_PanelButtonBevel, ©, p, widget); copy.rect.adjust(3, 0, -4, 0); - drawPrimitive(pe, ©, p, widget); + proxy()->drawPrimitive(pe, ©, p, widget); } if (sb->subControls & SC_SpinBoxDown) { @@ -3468,10 +3468,10 @@ void QCommonStyle::drawComplexControl(ComplexControl cc, const QStyleOptionCompl pe = (sb->buttonSymbols == QAbstractSpinBox::PlusMinus ? PE_IndicatorSpinMinus : PE_IndicatorSpinDown); - copy.rect = subControlRect(CC_SpinBox, sb, SC_SpinBoxDown, widget); - drawPrimitive(PE_PanelButtonBevel, ©, p, widget); + copy.rect = proxy()->subControlRect(CC_SpinBox, sb, SC_SpinBoxDown, widget); + proxy()->drawPrimitive(PE_PanelButtonBevel, ©, p, widget); copy.rect.adjust(3, 0, -4, 0); - drawPrimitive(pe, ©, p, widget); + proxy()->drawPrimitive(pe, ©, p, widget); } } break; @@ -3481,8 +3481,8 @@ void QCommonStyle::drawComplexControl(ComplexControl cc, const QStyleOptionCompl if (const QStyleOptionToolButton *toolbutton = qstyleoption_cast(opt)) { QRect button, menuarea; - button = subControlRect(cc, toolbutton, SC_ToolButton, widget); - menuarea = subControlRect(cc, toolbutton, SC_ToolButtonMenu, widget); + button = proxy()->subControlRect(cc, toolbutton, SC_ToolButton, widget); + menuarea = proxy()->subControlRect(cc, toolbutton, SC_ToolButtonMenu, widget); State bflags = toolbutton->state & ~State_Sunken; @@ -3504,7 +3504,7 @@ void QCommonStyle::drawComplexControl(ComplexControl cc, const QStyleOptionCompl if (bflags & (State_Sunken | State_On | State_Raised)) { tool.rect = button; tool.state = bflags; - drawPrimitive(PE_PanelButtonTool, &tool, p, widget); + proxy()->drawPrimitive(PE_PanelButtonTool, &tool, p, widget); } } @@ -3513,28 +3513,28 @@ void QCommonStyle::drawComplexControl(ComplexControl cc, const QStyleOptionCompl fr.QStyleOption::operator=(*toolbutton); fr.rect.adjust(3, 3, -3, -3); if (toolbutton->features & QStyleOptionToolButton::MenuButtonPopup) - fr.rect.adjust(0, 0, -pixelMetric(QStyle::PM_MenuButtonIndicator, + fr.rect.adjust(0, 0, -proxy()->pixelMetric(QStyle::PM_MenuButtonIndicator, toolbutton, widget), 0); - drawPrimitive(PE_FrameFocusRect, &fr, p, widget); + proxy()->drawPrimitive(PE_FrameFocusRect, &fr, p, widget); } QStyleOptionToolButton label = *toolbutton; label.state = bflags; - int fw = pixelMetric(PM_DefaultFrameWidth, opt, widget); + int fw = proxy()->pixelMetric(PM_DefaultFrameWidth, opt, widget); label.rect = button.adjusted(fw, fw, -fw, -fw); - drawControl(CE_ToolButtonLabel, &label, p, widget); + proxy()->drawControl(CE_ToolButtonLabel, &label, p, widget); if (toolbutton->subControls & SC_ToolButtonMenu) { tool.rect = menuarea; tool.state = mflags; if (mflags & (State_Sunken | State_On | State_Raised)) - drawPrimitive(PE_IndicatorButtonDropDown, &tool, p, widget); - drawPrimitive(PE_IndicatorArrowDown, &tool, p, widget); + proxy()->drawPrimitive(PE_IndicatorButtonDropDown, &tool, p, widget); + proxy()->drawPrimitive(PE_IndicatorArrowDown, &tool, p, widget); } else if (toolbutton->features & QStyleOptionToolButton::HasMenu) { - int mbi = pixelMetric(PM_MenuButtonIndicator, toolbutton, widget); + int mbi = proxy()->pixelMetric(PM_MenuButtonIndicator, toolbutton, widget); QRect ir = toolbutton->rect; QStyleOptionToolButton newBtn = *toolbutton; newBtn.rect = QRect(ir.right() + 5 - mbi, ir.y() + ir.height() - mbi + 4, mbi - 6, mbi - 6); - drawPrimitive(PE_IndicatorArrowDown, &newBtn, p, widget); + proxy()->drawPrimitive(PE_IndicatorArrowDown, &newBtn, p, widget); } } break; @@ -3558,7 +3558,7 @@ void QCommonStyle::drawComplexControl(ComplexControl cc, const QStyleOptionCompl p->fillRect(opt->rect, fillBrush); - ir = subControlRect(CC_TitleBar, tb, SC_TitleBarLabel, widget); + ir = proxy()->subControlRect(CC_TitleBar, tb, SC_TitleBarLabel, widget); p->setPen(tb->palette.highlightedText().color()); p->drawText(ir.x() + 2, ir.y(), ir.width() - 2, ir.height(), @@ -3571,7 +3571,7 @@ void QCommonStyle::drawComplexControl(ComplexControl cc, const QStyleOptionCompl QStyleOption tool(0); tool.palette = tb->palette; if (tb->subControls & SC_TitleBarCloseButton && tb->titleBarFlags & Qt::WindowSystemMenuHint) { - ir = subControlRect(CC_TitleBar, tb, SC_TitleBarCloseButton, widget); + ir = proxy()->subControlRect(CC_TitleBar, tb, SC_TitleBarCloseButton, widget); down = tb->activeSubControls & SC_TitleBarCloseButton && (opt->state & State_Sunken); if ((tb->titleBarFlags & Qt::WindowType_Mask) == Qt::Tool #ifndef QT_NO_DOCKWIDGET @@ -3583,50 +3583,50 @@ void QCommonStyle::drawComplexControl(ComplexControl cc, const QStyleOptionCompl pm = standardIcon(SP_TitleBarCloseButton, &tool, widget).pixmap(10, 10); tool.rect = ir; tool.state = down ? State_Sunken : State_Raised; - drawPrimitive(PE_PanelButtonTool, &tool, p, widget); + proxy()->drawPrimitive(PE_PanelButtonTool, &tool, p, widget); p->save(); if (down) - p->translate(pixelMetric(PM_ButtonShiftHorizontal, tb, widget), - pixelMetric(PM_ButtonShiftVertical, tb, widget)); - drawItemPixmap(p, ir, Qt::AlignCenter, pm); + p->translate(proxy()->pixelMetric(PM_ButtonShiftHorizontal, tb, widget), + proxy()->pixelMetric(PM_ButtonShiftVertical, tb, widget)); + proxy()->drawItemPixmap(p, ir, Qt::AlignCenter, pm); p->restore(); } if (tb->subControls & SC_TitleBarMaxButton && tb->titleBarFlags & Qt::WindowMaximizeButtonHint && !(tb->titleBarState & Qt::WindowMaximized)) { - ir = subControlRect(CC_TitleBar, tb, SC_TitleBarMaxButton, widget); + ir = proxy()->subControlRect(CC_TitleBar, tb, SC_TitleBarMaxButton, widget); down = tb->activeSubControls & SC_TitleBarMaxButton && (opt->state & State_Sunken); pm = standardIcon(SP_TitleBarMaxButton, &tool, widget).pixmap(10, 10); tool.rect = ir; tool.state = down ? State_Sunken : State_Raised; - drawPrimitive(PE_PanelButtonTool, &tool, p, widget); + proxy()->drawPrimitive(PE_PanelButtonTool, &tool, p, widget); p->save(); if (down) - p->translate(pixelMetric(PM_ButtonShiftHorizontal, tb, widget), - pixelMetric(PM_ButtonShiftVertical, tb, widget)); - drawItemPixmap(p, ir, Qt::AlignCenter, pm); + p->translate(proxy()->pixelMetric(PM_ButtonShiftHorizontal, tb, widget), + proxy()->pixelMetric(PM_ButtonShiftVertical, tb, widget)); + proxy()->drawItemPixmap(p, ir, Qt::AlignCenter, pm); p->restore(); } if (tb->subControls & SC_TitleBarMinButton && tb->titleBarFlags & Qt::WindowMinimizeButtonHint && !(tb->titleBarState & Qt::WindowMinimized)) { - ir = subControlRect(CC_TitleBar, tb, SC_TitleBarMinButton, widget); + ir = proxy()->subControlRect(CC_TitleBar, tb, SC_TitleBarMinButton, widget); down = tb->activeSubControls & SC_TitleBarMinButton && (opt->state & State_Sunken); pm = standardIcon(SP_TitleBarMinButton, &tool, widget).pixmap(10, 10); tool.rect = ir; tool.state = down ? State_Sunken : State_Raised; - drawPrimitive(PE_PanelButtonTool, &tool, p, widget); + proxy()->drawPrimitive(PE_PanelButtonTool, &tool, p, widget); p->save(); if (down) - p->translate(pixelMetric(PM_ButtonShiftHorizontal, tb, widget), - pixelMetric(PM_ButtonShiftVertical, tb, widget)); - drawItemPixmap(p, ir, Qt::AlignCenter, pm); + p->translate(proxy()->pixelMetric(PM_ButtonShiftHorizontal, tb, widget), + proxy()->pixelMetric(PM_ButtonShiftVertical, tb, widget)); + proxy()->drawItemPixmap(p, ir, Qt::AlignCenter, pm); p->restore(); } @@ -3637,81 +3637,81 @@ void QCommonStyle::drawComplexControl(ComplexControl cc, const QStyleOptionCompl && (tb->titleBarState & Qt::WindowMaximized))); if (drawNormalButton) { - ir = subControlRect(CC_TitleBar, tb, SC_TitleBarNormalButton, widget); + ir = proxy()->subControlRect(CC_TitleBar, tb, SC_TitleBarNormalButton, widget); down = tb->activeSubControls & SC_TitleBarNormalButton && (opt->state & State_Sunken); pm = standardIcon(SP_TitleBarNormalButton, &tool, widget).pixmap(10, 10); tool.rect = ir; tool.state = down ? State_Sunken : State_Raised; - drawPrimitive(PE_PanelButtonTool, &tool, p, widget); + proxy()->drawPrimitive(PE_PanelButtonTool, &tool, p, widget); p->save(); if (down) - p->translate(pixelMetric(PM_ButtonShiftHorizontal, tb, widget), - pixelMetric(PM_ButtonShiftVertical, tb, widget)); - drawItemPixmap(p, ir, Qt::AlignCenter, pm); + p->translate(proxy()->pixelMetric(PM_ButtonShiftHorizontal, tb, widget), + proxy()->pixelMetric(PM_ButtonShiftVertical, tb, widget)); + proxy()->drawItemPixmap(p, ir, Qt::AlignCenter, pm); p->restore(); } if (tb->subControls & SC_TitleBarShadeButton && tb->titleBarFlags & Qt::WindowShadeButtonHint && !(tb->titleBarState & Qt::WindowMinimized)) { - ir = subControlRect(CC_TitleBar, tb, SC_TitleBarShadeButton, widget); + ir = proxy()->subControlRect(CC_TitleBar, tb, SC_TitleBarShadeButton, widget); down = (tb->activeSubControls & SC_TitleBarShadeButton && (opt->state & State_Sunken)); pm = standardIcon(SP_TitleBarShadeButton, &tool, widget).pixmap(10, 10); tool.rect = ir; tool.state = down ? State_Sunken : State_Raised; - drawPrimitive(PE_PanelButtonTool, &tool, p, widget); + proxy()->drawPrimitive(PE_PanelButtonTool, &tool, p, widget); p->save(); if (down) - p->translate(pixelMetric(PM_ButtonShiftHorizontal, tb, widget), - pixelMetric(PM_ButtonShiftVertical, tb, widget)); - drawItemPixmap(p, ir, Qt::AlignCenter, pm); + p->translate(proxy()->pixelMetric(PM_ButtonShiftHorizontal, tb, widget), + proxy()->pixelMetric(PM_ButtonShiftVertical, tb, widget)); + proxy()->drawItemPixmap(p, ir, Qt::AlignCenter, pm); p->restore(); } if (tb->subControls & SC_TitleBarUnshadeButton && tb->titleBarFlags & Qt::WindowShadeButtonHint && tb->titleBarState & Qt::WindowMinimized) { - ir = subControlRect(CC_TitleBar, tb, SC_TitleBarUnshadeButton, widget); + ir = proxy()->subControlRect(CC_TitleBar, tb, SC_TitleBarUnshadeButton, widget); down = tb->activeSubControls & SC_TitleBarUnshadeButton && (opt->state & State_Sunken); pm = standardIcon(SP_TitleBarUnshadeButton, &tool, widget).pixmap(10, 10); tool.rect = ir; tool.state = down ? State_Sunken : State_Raised; - drawPrimitive(PE_PanelButtonTool, &tool, p, widget); + proxy()->drawPrimitive(PE_PanelButtonTool, &tool, p, widget); p->save(); if (down) - p->translate(pixelMetric(PM_ButtonShiftHorizontal, tb, widget), - pixelMetric(PM_ButtonShiftVertical, tb, widget)); - drawItemPixmap(p, ir, Qt::AlignCenter, pm); + p->translate(proxy()->pixelMetric(PM_ButtonShiftHorizontal, tb, widget), + proxy()->pixelMetric(PM_ButtonShiftVertical, tb, widget)); + proxy()->drawItemPixmap(p, ir, Qt::AlignCenter, pm); p->restore(); } if (tb->subControls & SC_TitleBarContextHelpButton && tb->titleBarFlags & Qt::WindowContextHelpButtonHint) { - ir = subControlRect(CC_TitleBar, tb, SC_TitleBarContextHelpButton, widget); + ir = proxy()->subControlRect(CC_TitleBar, tb, SC_TitleBarContextHelpButton, widget); down = tb->activeSubControls & SC_TitleBarContextHelpButton && (opt->state & State_Sunken); pm = standardIcon(SP_TitleBarContextHelpButton, &tool, widget).pixmap(10, 10); tool.rect = ir; tool.state = down ? State_Sunken : State_Raised; - drawPrimitive(PE_PanelButtonTool, &tool, p, widget); + proxy()->drawPrimitive(PE_PanelButtonTool, &tool, p, widget); p->save(); if (down) - p->translate(pixelMetric(PM_ButtonShiftHorizontal, tb, widget), - pixelMetric(PM_ButtonShiftVertical, tb, widget)); - drawItemPixmap(p, ir, Qt::AlignCenter, pm); + p->translate(proxy()->pixelMetric(PM_ButtonShiftHorizontal, tb, widget), + proxy()->pixelMetric(PM_ButtonShiftVertical, tb, widget)); + proxy()->drawItemPixmap(p, ir, Qt::AlignCenter, pm); p->restore(); } if (tb->subControls & SC_TitleBarSysMenu && tb->titleBarFlags & Qt::WindowSystemMenuHint) { - ir = subControlRect(CC_TitleBar, tb, SC_TitleBarSysMenu, widget); + ir = proxy()->subControlRect(CC_TitleBar, tb, SC_TitleBarSysMenu, widget); if (!tb->icon.isNull()) { tb->icon.paint(p, ir); } else { - int iconSize = pixelMetric(PM_SmallIconSize, tb, widget); + int iconSize = proxy()->pixelMetric(PM_SmallIconSize, tb, widget); pm = standardIcon(SP_TitleBarMenuButton, &tool, widget).pixmap(iconSize, iconSize); tool.rect = ir; p->save(); - drawItemPixmap(p, ir, Qt::AlignCenter, pm); + proxy()->drawItemPixmap(p, ir, Qt::AlignCenter, pm); p->restore(); } } @@ -3743,7 +3743,7 @@ void QCommonStyle::drawComplexControl(ComplexControl cc, const QStyleOptionCompl } if (dial->state & State_Enabled) { - p->setBrush(pal.brush(QPalette::ColorRole(styleHint(SH_Dial_BackgroundRole, + p->setBrush(pal.brush(QPalette::ColorRole(proxy()->styleHint(SH_Dial_BackgroundRole, dial, widget)))); p->setPen(Qt::NoPen); p->drawEllipse(br); @@ -3804,7 +3804,7 @@ void QCommonStyle::drawComplexControl(ComplexControl cc, const QStyleOptionCompl br.setHeight(br.height() + r / 3); } fropt.rect = br.adjusted(-2, -2, 2, 2); - drawPrimitive(QStyle::PE_FrameFocusRect, &fropt, p, widget); + proxy()->drawPrimitive(QStyle::PE_FrameFocusRect, &fropt, p, widget); } p->restore(); } @@ -3814,15 +3814,15 @@ void QCommonStyle::drawComplexControl(ComplexControl cc, const QStyleOptionCompl case CC_GroupBox: if (const QStyleOptionGroupBox *groupBox = qstyleoption_cast(opt)) { // Draw frame - QRect textRect = subControlRect(CC_GroupBox, opt, SC_GroupBoxLabel, widget); - QRect checkBoxRect = subControlRect(CC_GroupBox, opt, SC_GroupBoxCheckBox, widget); + QRect textRect = proxy()->subControlRect(CC_GroupBox, opt, SC_GroupBoxLabel, widget); + QRect checkBoxRect = proxy()->subControlRect(CC_GroupBox, opt, SC_GroupBoxCheckBox, widget); if (groupBox->subControls & QStyle::SC_GroupBoxFrame) { QStyleOptionFrameV2 frame; frame.QStyleOption::operator=(*groupBox); frame.features = groupBox->features; frame.lineWidth = groupBox->lineWidth; frame.midLineWidth = groupBox->midLineWidth; - frame.rect = subControlRect(CC_GroupBox, opt, SC_GroupBoxFrame, widget); + frame.rect = proxy()->subControlRect(CC_GroupBox, opt, SC_GroupBoxFrame, widget); p->save(); QRegion region(groupBox->rect); if (!groupBox->text.isEmpty()) { @@ -3837,7 +3837,7 @@ void QCommonStyle::drawComplexControl(ComplexControl cc, const QStyleOptionCompl region -= finalRect; } p->setClipRegion(region); - drawPrimitive(PE_FrameGroupBox, &frame, p, widget); + proxy()->drawPrimitive(PE_FrameGroupBox, &frame, p, widget); p->restore(); } @@ -3847,10 +3847,10 @@ void QCommonStyle::drawComplexControl(ComplexControl cc, const QStyleOptionCompl if (textColor.isValid()) p->setPen(textColor); int alignment = int(groupBox->textAlignment); - if (!styleHint(QStyle::SH_UnderlineShortcut, opt, widget)) + if (!proxy()->styleHint(QStyle::SH_UnderlineShortcut, opt, widget)) alignment |= Qt::TextHideMnemonic; - drawItemText(p, textRect, Qt::TextShowMnemonic | Qt::AlignHCenter | alignment, + proxy()->drawItemText(p, textRect, Qt::TextShowMnemonic | Qt::AlignHCenter | alignment, groupBox->palette, groupBox->state & State_Enabled, groupBox->text, textColor.isValid() ? QPalette::NoRole : QPalette::WindowText); @@ -3858,7 +3858,7 @@ void QCommonStyle::drawComplexControl(ComplexControl cc, const QStyleOptionCompl QStyleOptionFocusRect fropt; fropt.QStyleOption::operator=(*groupBox); fropt.rect = textRect; - drawPrimitive(PE_FrameFocusRect, &fropt, p, widget); + proxy()->drawPrimitive(PE_FrameFocusRect, &fropt, p, widget); } } @@ -3867,7 +3867,7 @@ void QCommonStyle::drawComplexControl(ComplexControl cc, const QStyleOptionCompl QStyleOptionButton box; box.QStyleOption::operator=(*groupBox); box.rect = checkBoxRect; - drawPrimitive(PE_IndicatorCheckBox, &box, p, widget); + proxy()->drawPrimitive(PE_IndicatorCheckBox, &box, p, widget); } } break; @@ -3884,52 +3884,52 @@ void QCommonStyle::drawComplexControl(ComplexControl cc, const QStyleOptionCompl if (opt->activeSubControls & QStyle::SC_MdiCloseButton && (opt->state & State_Sunken)) { btnOpt.state |= State_Sunken; btnOpt.state &= ~State_Raised; - bsx = pixelMetric(PM_ButtonShiftHorizontal); - bsy = pixelMetric(PM_ButtonShiftVertical); + bsx = proxy()->pixelMetric(PM_ButtonShiftHorizontal); + bsy = proxy()->pixelMetric(PM_ButtonShiftVertical); } else { btnOpt.state |= State_Raised; btnOpt.state &= ~State_Sunken; bsx = 0; bsy = 0; } - btnOpt.rect = subControlRect(CC_MdiControls, opt, SC_MdiCloseButton, widget); - drawPrimitive(PE_PanelButtonCommand, &btnOpt, p, widget); + btnOpt.rect = proxy()->subControlRect(CC_MdiControls, opt, SC_MdiCloseButton, widget); + proxy()->drawPrimitive(PE_PanelButtonCommand, &btnOpt, p, widget); QPixmap pm = standardIcon(SP_TitleBarCloseButton).pixmap(16, 16); - drawItemPixmap(p, btnOpt.rect.translated(bsx, bsy), Qt::AlignCenter, pm); + proxy()->drawItemPixmap(p, btnOpt.rect.translated(bsx, bsy), Qt::AlignCenter, pm); } if (opt->subControls & QStyle::SC_MdiNormalButton) { if (opt->activeSubControls & QStyle::SC_MdiNormalButton && (opt->state & State_Sunken)) { btnOpt.state |= State_Sunken; btnOpt.state &= ~State_Raised; - bsx = pixelMetric(PM_ButtonShiftHorizontal); - bsy = pixelMetric(PM_ButtonShiftVertical); + bsx = proxy()->pixelMetric(PM_ButtonShiftHorizontal); + bsy = proxy()->pixelMetric(PM_ButtonShiftVertical); } else { btnOpt.state |= State_Raised; btnOpt.state &= ~State_Sunken; bsx = 0; bsy = 0; } - btnOpt.rect = subControlRect(CC_MdiControls, opt, SC_MdiNormalButton, widget); - drawPrimitive(PE_PanelButtonCommand, &btnOpt, p, widget); + btnOpt.rect = proxy()->subControlRect(CC_MdiControls, opt, SC_MdiNormalButton, widget); + proxy()->drawPrimitive(PE_PanelButtonCommand, &btnOpt, p, widget); QPixmap pm = standardIcon(SP_TitleBarNormalButton).pixmap(16, 16); - drawItemPixmap(p, btnOpt.rect.translated(bsx, bsy), Qt::AlignCenter, pm); + proxy()->drawItemPixmap(p, btnOpt.rect.translated(bsx, bsy), Qt::AlignCenter, pm); } if (opt->subControls & QStyle::SC_MdiMinButton) { if (opt->activeSubControls & QStyle::SC_MdiMinButton && (opt->state & State_Sunken)) { btnOpt.state |= State_Sunken; btnOpt.state &= ~State_Raised; - bsx = pixelMetric(PM_ButtonShiftHorizontal); - bsy = pixelMetric(PM_ButtonShiftVertical); + bsx = proxy()->pixelMetric(PM_ButtonShiftHorizontal); + bsy = proxy()->pixelMetric(PM_ButtonShiftVertical); } else { btnOpt.state |= State_Raised; btnOpt.state &= ~State_Sunken; bsx = 0; bsy = 0; } - btnOpt.rect = subControlRect(CC_MdiControls, opt, SC_MdiMinButton, widget); - drawPrimitive(PE_PanelButtonCommand, &btnOpt, p, widget); + btnOpt.rect = proxy()->subControlRect(CC_MdiControls, opt, SC_MdiMinButton, widget); + proxy()->drawPrimitive(PE_PanelButtonCommand, &btnOpt, p, widget); QPixmap pm = standardIcon(SP_TitleBarMinButton).pixmap(16, 16); - drawItemPixmap(p, btnOpt.rect.translated(bsx, bsy), Qt::AlignCenter, pm); + proxy()->drawItemPixmap(p, btnOpt.rect.translated(bsx, bsy), Qt::AlignCenter, pm); } } break; @@ -3951,11 +3951,11 @@ QStyle::SubControl QCommonStyle::hitTestComplexControl(ComplexControl cc, const #ifndef QT_NO_SLIDER case CC_Slider: if (const QStyleOptionSlider *slider = qstyleoption_cast(opt)) { - QRect r = subControlRect(cc, slider, SC_SliderHandle, widget); + QRect r = proxy()->subControlRect(cc, slider, SC_SliderHandle, widget); if (r.isValid() && r.contains(pt)) { sc = SC_SliderHandle; } else { - r = subControlRect(cc, slider, SC_SliderGroove ,widget); + r = proxy()->subControlRect(cc, slider, SC_SliderGroove ,widget); if (r.isValid() && r.contains(pt)) sc = SC_SliderGroove; } @@ -3968,7 +3968,7 @@ QStyle::SubControl QCommonStyle::hitTestComplexControl(ComplexControl cc, const QRect r; uint ctrl = SC_ScrollBarAddLine; while (ctrl <= SC_ScrollBarGroove) { - r = subControlRect(cc, scrollbar, QStyle::SubControl(ctrl), widget); + r = proxy()->subControlRect(cc, scrollbar, QStyle::SubControl(ctrl), widget); if (r.isValid() && r.contains(pt)) { sc = QStyle::SubControl(ctrl); break; @@ -3984,7 +3984,7 @@ QStyle::SubControl QCommonStyle::hitTestComplexControl(ComplexControl cc, const QRect r; uint ctrl = SC_ToolButton; while (ctrl <= SC_ToolButtonMenu) { - r = subControlRect(cc, toolbutton, QStyle::SubControl(ctrl), widget); + r = proxy()->subControlRect(cc, toolbutton, QStyle::SubControl(ctrl), widget); if (r.isValid() && r.contains(pt)) { sc = QStyle::SubControl(ctrl); break; @@ -4008,7 +4008,7 @@ QStyle::SubControl QCommonStyle::hitTestComplexControl(ComplexControl cc, const QRect r; uint ctrl = SC_SpinBoxUp; while (ctrl <= SC_SpinBoxEditField) { - r = subControlRect(cc, spinbox, QStyle::SubControl(ctrl), widget); + r = proxy()->subControlRect(cc, spinbox, QStyle::SubControl(ctrl), widget); if (r.isValid() && r.contains(pt)) { sc = QStyle::SubControl(ctrl); break; @@ -4024,7 +4024,7 @@ QStyle::SubControl QCommonStyle::hitTestComplexControl(ComplexControl cc, const uint ctrl = SC_TitleBarSysMenu; while (ctrl <= SC_TitleBarLabel) { - r = subControlRect(cc, tb, QStyle::SubControl(ctrl), widget); + r = proxy()->subControlRect(cc, tb, QStyle::SubControl(ctrl), widget); if (r.isValid() && r.contains(pt)) { sc = QStyle::SubControl(ctrl); break; @@ -4039,7 +4039,7 @@ QStyle::SubControl QCommonStyle::hitTestComplexControl(ComplexControl cc, const QRect r; uint ctrl = SC_ComboBoxArrow; // Start here and go down. while (ctrl > 0) { - r = subControlRect(cc, cb, QStyle::SubControl(ctrl), widget); + r = proxy()->subControlRect(cc, cb, QStyle::SubControl(ctrl), widget); if (r.isValid() && r.contains(pt)) { sc = QStyle::SubControl(ctrl); break; @@ -4055,7 +4055,7 @@ QStyle::SubControl QCommonStyle::hitTestComplexControl(ComplexControl cc, const QRect r; uint ctrl = SC_GroupBoxCheckBox; while (ctrl <= SC_GroupBoxFrame) { - r = subControlRect(cc, groupBox, QStyle::SubControl(ctrl), widget); + r = proxy()->subControlRect(cc, groupBox, QStyle::SubControl(ctrl), widget); if (r.isValid() && r.contains(pt)) { sc = QStyle::SubControl(ctrl); break; @@ -4070,7 +4070,7 @@ QStyle::SubControl QCommonStyle::hitTestComplexControl(ComplexControl cc, const QRect r; uint ctrl = SC_MdiMinButton; while (ctrl <= SC_MdiCloseButton) { - r = subControlRect(CC_MdiControls, opt, QStyle::SubControl(ctrl), widget); + r = proxy()->subControlRect(CC_MdiControls, opt, QStyle::SubControl(ctrl), widget); if (r.isValid() && r.contains(pt) && (opt->subControls & ctrl)) { sc = QStyle::SubControl(ctrl); return sc; @@ -4096,13 +4096,13 @@ QRect QCommonStyle::subControlRect(ComplexControl cc, const QStyleOptionComplex #ifndef QT_NO_SLIDER case CC_Slider: if (const QStyleOptionSlider *slider = qstyleoption_cast(opt)) { - int tickOffset = pixelMetric(PM_SliderTickmarkOffset, slider, widget); - int thickness = pixelMetric(PM_SliderControlThickness, slider, widget); + int tickOffset = proxy()->pixelMetric(PM_SliderTickmarkOffset, slider, widget); + int thickness = proxy()->pixelMetric(PM_SliderControlThickness, slider, widget); switch (sc) { case SC_SliderHandle: { int sliderPos = 0; - int len = pixelMetric(PM_SliderLength, slider, widget); + int len = proxy()->pixelMetric(PM_SliderLength, slider, widget); bool horizontal = slider->orientation == Qt::Horizontal; sliderPos = sliderPositionFromValue(slider->minimum, slider->maximum, slider->sliderPosition, @@ -4133,7 +4133,7 @@ QRect QCommonStyle::subControlRect(ComplexControl cc, const QStyleOptionComplex case CC_ScrollBar: if (const QStyleOptionSlider *scrollbar = qstyleoption_cast(opt)) { const QRect scrollBarRect = scrollbar->rect; - int sbextent = pixelMetric(PM_ScrollBarExtent, scrollbar, widget); + int sbextent = proxy()->pixelMetric(PM_ScrollBarExtent, scrollbar, widget); int maxlen = ((scrollbar->orientation == Qt::Horizontal) ? scrollBarRect.width() : scrollBarRect.height()) - (sbextent * 2); int sliderlen; @@ -4143,7 +4143,7 @@ QRect QCommonStyle::subControlRect(ComplexControl cc, const QStyleOptionComplex uint range = scrollbar->maximum - scrollbar->minimum; sliderlen = (qint64(scrollbar->pageStep) * maxlen) / (range + scrollbar->pageStep); - int slidermin = pixelMetric(PM_ScrollBarSliderMin, scrollbar, widget); + int slidermin = proxy()->pixelMetric(PM_ScrollBarSliderMin, scrollbar, widget); if (sliderlen < slidermin || range > INT_MAX / 2) sliderlen = slidermin; if (sliderlen > maxlen) @@ -4216,7 +4216,7 @@ QRect QCommonStyle::subControlRect(ComplexControl cc, const QStyleOptionComplex case CC_SpinBox: if (const QStyleOptionSpinBox *spinbox = qstyleoption_cast(opt)) { QSize bs; - int fw = spinbox->frame ? pixelMetric(PM_SpinBoxFrameWidth, spinbox, widget) : 0; + int fw = spinbox->frame ? proxy()->pixelMetric(PM_SpinBoxFrameWidth, spinbox, widget) : 0; bs.setHeight(qMax(8, spinbox->rect.height()/2 - fw)); // 1.6 -approximate golden mean bs.setWidth(qMax(16, qMin(bs.height() * 8 / 5, spinbox->rect.width() / 4))); @@ -4257,7 +4257,7 @@ QRect QCommonStyle::subControlRect(ComplexControl cc, const QStyleOptionComplex #ifndef QT_NO_TOOLBUTTON case CC_ToolButton: if (const QStyleOptionToolButton *tb = qstyleoption_cast(opt)) { - int mbi = pixelMetric(PM_MenuButtonIndicator, tb, widget); + int mbi = proxy()->pixelMetric(PM_MenuButtonIndicator, tb, widget); ret = tb->rect; switch (sc) { case SC_ToolButton: @@ -4397,7 +4397,7 @@ QRect QCommonStyle::subControlRect(ComplexControl cc, const QStyleOptionComplex case SC_GroupBoxContents: { int topMargin = 0; int topHeight = 0; - int verticalAlignment = styleHint(SH_GroupBox_TextLabelVerticalAlignment, groupBox, widget); + int verticalAlignment = proxy()->styleHint(SH_GroupBox_TextLabelVerticalAlignment, groupBox, widget); if (groupBox->text.size() || (groupBox->subControls & QStyle::SC_GroupBoxCheckBox)) { topHeight = groupBox->fontMetrics.height(); if (verticalAlignment & Qt::AlignVCenter) @@ -4417,7 +4417,7 @@ QRect QCommonStyle::subControlRect(ComplexControl cc, const QStyleOptionComplex int frameWidth = 0; if (!(widget && widget->inherits("Q3GroupBox")) && ((groupBox->features & QStyleOptionFrameV2::Flat) == 0)) { - frameWidth = pixelMetric(PM_DefaultFrameWidth, groupBox, widget); + frameWidth = proxy()->pixelMetric(PM_DefaultFrameWidth, groupBox, widget); } ret = frameRect.adjusted(frameWidth, frameWidth + topHeight - topMargin, -frameWidth, -frameWidth); @@ -4433,8 +4433,8 @@ QRect QCommonStyle::subControlRect(ComplexControl cc, const QStyleOptionComplex ret = groupBox->rect.adjusted(marg, 0, -marg, 0); ret.setHeight(h); - int indicatorWidth = pixelMetric(PM_IndicatorWidth, opt, widget); - int indicatorSpace = pixelMetric(PM_CheckBoxLabelSpacing, opt, widget) - 1; + int indicatorWidth = proxy()->pixelMetric(PM_IndicatorWidth, opt, widget); + int indicatorSpace = proxy()->pixelMetric(PM_CheckBoxLabelSpacing, opt, widget) - 1; bool hasCheckBox = groupBox->subControls & QStyle::SC_GroupBoxCheckBox; int checkBoxSize = hasCheckBox ? (indicatorWidth + indicatorSpace) : 0; @@ -4448,7 +4448,7 @@ QRect QCommonStyle::subControlRect(ComplexControl cc, const QStyleOptionComplex int left = 0; // Adjust for check box if (sc == SC_GroupBoxCheckBox) { - int indicatorHeight = pixelMetric(PM_IndicatorHeight, opt, widget); + int indicatorHeight = proxy()->pixelMetric(PM_IndicatorHeight, opt, widget); left = ltr ? totalRect.left() : (totalRect.right() - indicatorWidth); int top = totalRect.top() + (fontMetrics.height() - indicatorHeight) / 2; totalRect.setRect(left, top, indicatorWidth, indicatorHeight); @@ -4594,7 +4594,7 @@ int QCommonStyle::pixelMetric(PixelMetric m, const QStyleOption *opt, const QWid case PM_MenuPanelWidth: case PM_TabBarBaseOverlap: case PM_TabBarBaseHeight: - ret = pixelMetric(PM_DefaultFrameWidth, opt, widget); + ret = proxy()->pixelMetric(PM_DefaultFrameWidth, opt, widget); break; case PM_MdiSubWindowFrameWidth: @@ -4630,7 +4630,7 @@ int QCommonStyle::pixelMetric(PixelMetric m, const QStyleOption *opt, const QWid if (const QStyleOptionSlider *sl = qstyleoption_cast(opt)) { int space = (sl->orientation == Qt::Horizontal) ? sl->rect.height() : sl->rect.width(); - int thickness = pixelMetric(PM_SliderControlThickness, sl, widget); + int thickness = proxy()->pixelMetric(PM_SliderControlThickness, sl, widget); int ticks = sl->tickPosition; if (ticks == QSlider::TicksBothSides) @@ -4647,9 +4647,9 @@ int QCommonStyle::pixelMetric(PixelMetric m, const QStyleOption *opt, const QWid case PM_SliderSpaceAvailable: if (const QStyleOptionSlider *sl = qstyleoption_cast(opt)) { if (sl->orientation == Qt::Horizontal) - ret = sl->rect.width() - pixelMetric(PM_SliderLength, sl, widget); + ret = sl->rect.width() - proxy()->pixelMetric(PM_SliderLength, sl, widget); else - ret = sl->rect.height() - pixelMetric(PM_SliderLength, sl, widget); + ret = sl->rect.height() - proxy()->pixelMetric(PM_SliderLength, sl, widget); } else { ret = 0; } @@ -4793,12 +4793,12 @@ int QCommonStyle::pixelMetric(PixelMetric m, const QStyleOption *opt, const QWid } else if (widget) { isWindow = widget->isWindow(); } - ret = pixelMetric(isWindow ? PM_DefaultTopLevelMargin : PM_DefaultChildMargin); + ret = proxy()->pixelMetric(isWindow ? PM_DefaultTopLevelMargin : PM_DefaultChildMargin); } break; case PM_LayoutHorizontalSpacing: case PM_LayoutVerticalSpacing: - ret = pixelMetric(PM_DefaultLayoutSpacing); + ret = proxy()->pixelMetric(PM_DefaultLayoutSpacing); break; case PM_DefaultTopLevelMargin: @@ -4814,7 +4814,7 @@ int QCommonStyle::pixelMetric(PixelMetric m, const QStyleOption *opt, const QWid case PM_TabBarIconSize: case PM_ToolBarIconSize: case PM_ListViewIconSize: - ret = pixelMetric(PM_SmallIconSize, opt, widget); + ret = proxy()->pixelMetric(PM_SmallIconSize, opt, widget); break; case PM_ButtonIconSize: @@ -4822,7 +4822,7 @@ int QCommonStyle::pixelMetric(PixelMetric m, const QStyleOption *opt, const QWid ret = 16; break; case PM_IconViewIconSize: - ret = pixelMetric(PM_LargeIconSize, opt, widget); + ret = proxy()->pixelMetric(PM_LargeIconSize, opt, widget); break; case PM_LargeIconSize: @@ -4853,10 +4853,10 @@ int QCommonStyle::pixelMetric(PixelMetric m, const QStyleOption *opt, const QWid ret = 16; break; case PM_ScrollView_ScrollBarSpacing: - ret = 2 * pixelMetric(PM_DefaultFrameWidth, opt, widget); + ret = 2 * proxy()->pixelMetric(PM_DefaultFrameWidth, opt, widget); break; case PM_SubMenuOverlap: - ret = -pixelMetric(QStyle::PM_MenuPanelWidth, opt, widget); + ret = -proxy()->pixelMetric(QStyle::PM_MenuPanelWidth, opt, widget); break; default: ret = 0; @@ -4879,12 +4879,12 @@ QSize QCommonStyle::sizeFromContents(ContentsType ct, const QStyleOption *opt, if (const QStyleOptionButton *btn = qstyleoption_cast(opt)) { int w = csz.width(), h = csz.height(), - bm = pixelMetric(PM_ButtonMargin, btn, widget), - fw = pixelMetric(PM_DefaultFrameWidth, btn, widget) * 2; + bm = proxy()->pixelMetric(PM_ButtonMargin, btn, widget), + fw = proxy()->pixelMetric(PM_DefaultFrameWidth, btn, widget) * 2; w += bm + fw; h += bm + fw; if (btn->features & QStyleOptionButton::AutoDefaultButton){ - int dbw = pixelMetric(PM_ButtonDefaultIndicator, btn, widget) * 2; + int dbw = proxy()->pixelMetric(PM_ButtonDefaultIndicator, btn, widget) * 2; w += dbw; h += dbw; } @@ -4896,15 +4896,15 @@ QSize QCommonStyle::sizeFromContents(ContentsType ct, const QStyleOption *opt, if (const QStyleOptionButton *btn = qstyleoption_cast(opt)) { bool isRadio = (ct == CT_RadioButton); - int w = pixelMetric(isRadio ? PM_ExclusiveIndicatorWidth + int w = proxy()->pixelMetric(isRadio ? PM_ExclusiveIndicatorWidth : PM_IndicatorWidth, btn, widget); - int h = pixelMetric(isRadio ? PM_ExclusiveIndicatorHeight + int h = proxy()->pixelMetric(isRadio ? PM_ExclusiveIndicatorHeight : PM_IndicatorHeight, btn, widget); int margins = 0; // we add 4 pixels for label margins if (btn->icon.isNull() || !btn->text.isEmpty()) - margins = 4 + pixelMetric(isRadio ? PM_RadioButtonLabelSpacing + margins = 4 + proxy()->pixelMetric(isRadio ? PM_RadioButtonLabelSpacing : PM_CheckBoxLabelSpacing, opt, widget); sz += QSize(w + margins, 4); sz.setHeight(qMax(sz.height(), h)); @@ -4922,7 +4922,7 @@ QSize QCommonStyle::sizeFromContents(ContentsType ct, const QStyleOption *opt, } else { h = mi->fontMetrics.height() + 8; if (!mi->icon.isNull()) { - int iconExtent = pixelMetric(PM_SmallIconSize); + int iconExtent = proxy()->pixelMetric(PM_SmallIconSize); h = qMax(h, mi->icon.actualSize(QSize(iconExtent, iconExtent)).height() + 4); } } @@ -4947,10 +4947,10 @@ QSize QCommonStyle::sizeFromContents(ContentsType ct, const QStyleOption *opt, #ifndef QT_NO_COMBOBOX case CT_ComboBox: if (const QStyleOptionComboBox *cmb = qstyleoption_cast(opt)) { - int fw = cmb->frame ? pixelMetric(PM_ComboBoxFrameWidth, opt, widget) * 2 : 0; - const int textMargins = 2*(pixelMetric(PM_FocusFrameHMargin) + 1); + int fw = cmb->frame ? proxy()->pixelMetric(PM_ComboBoxFrameWidth, opt, widget) * 2 : 0; + const int textMargins = 2*(proxy()->pixelMetric(PM_FocusFrameHMargin) + 1); // QItemDelegate::sizeHint expands the textMargins two times, thus the 2*textMargins... - int other = qMax(23, 2*textMargins + pixelMetric(QStyle::PM_ScrollBarExtent, opt, widget)); + int other = qMax(23, 2*textMargins + proxy()->pixelMetric(QStyle::PM_ScrollBarExtent, opt, widget)); sz = QSize(sz.width() + fw + other, sz.height() + fw); } break; @@ -4958,8 +4958,8 @@ QSize QCommonStyle::sizeFromContents(ContentsType ct, const QStyleOption *opt, case CT_HeaderSection: if (const QStyleOptionHeader *hdr = qstyleoption_cast(opt)) { bool nullIcon = hdr->icon.isNull(); - int margin = pixelMetric(QStyle::PM_HeaderMargin, hdr, widget); - int iconSize = nullIcon ? 0 : pixelMetric(QStyle::PM_SmallIconSize, hdr, widget); + int margin = proxy()->pixelMetric(QStyle::PM_HeaderMargin, hdr, widget); + int iconSize = nullIcon ? 0 : proxy()->pixelMetric(QStyle::PM_SmallIconSize, hdr, widget); QSize txt = hdr->fontMetrics.size(0, hdr->text); sz.setHeight(margin + qMax(iconSize, txt.height()) + margin); sz.setWidth((nullIcon ? 0 : margin) + iconSize @@ -5157,8 +5157,8 @@ int QCommonStyle::styleHint(StyleHint sh, const QStyleOption *opt, const QWidget if (widget) { if(QStyleHintReturnMask *mask = qstyleoption_cast(hret)) { mask->region = widget->rect(); - int vmargin = pixelMetric(QStyle::PM_FocusFrameVMargin), - hmargin = pixelMetric(QStyle::PM_FocusFrameHMargin); + int vmargin = proxy()->pixelMetric(QStyle::PM_FocusFrameVMargin), + hmargin = proxy()->pixelMetric(QStyle::PM_FocusFrameHMargin); mask->region -= QRect(widget->rect().adjusted(hmargin, vmargin, -hmargin, -vmargin)); } } @@ -5171,7 +5171,7 @@ int QCommonStyle::styleHint(StyleHint sh, const QStyleOption *opt, const QWidget ret = true; if(QStyleHintReturnMask *mask = qstyleoption_cast(hret)) { mask->region = opt->rect; - int margin = pixelMetric(PM_DefaultFrameWidth) * 2; + int margin = proxy()->pixelMetric(PM_DefaultFrameWidth) * 2; mask->region -= opt->rect.adjusted(margin, margin, -margin, -margin); } } @@ -5614,12 +5614,12 @@ QPixmap QCommonStyle::standardPixmap(StandardPixmap sp, const QStyleOption *opti case SP_CommandLink: case SP_ArrowForward: if (QApplication::layoutDirection() == Qt::RightToLeft) - return standardPixmap(SP_ArrowLeft, option, widget); - return standardPixmap(SP_ArrowRight, option, widget); + return proxy()->standardPixmap(SP_ArrowLeft, option, widget); + return proxy()->standardPixmap(SP_ArrowRight, option, widget); case SP_ArrowBack: if (QApplication::layoutDirection() == Qt::RightToLeft) - return standardPixmap(SP_ArrowRight, option, widget); - return standardPixmap(SP_ArrowLeft, option, widget); + return proxy()->standardPixmap(SP_ArrowRight, option, widget); + return proxy()->standardPixmap(SP_ArrowLeft, option, widget); case SP_ArrowLeft: return QPixmap(QLatin1String(":/trolltech/styles/commonstyle/images/left-16.png")); case SP_ArrowRight: @@ -5629,7 +5629,7 @@ QPixmap QCommonStyle::standardPixmap(StandardPixmap sp, const QStyleOption *opti case SP_ArrowDown: return QPixmap(QLatin1String(":/trolltech/styles/commonstyle/images/down-16.png")); case SP_FileDialogToParent: - return standardPixmap(SP_ArrowUp, option, widget); + return proxy()->standardPixmap(SP_ArrowUp, option, widget); case SP_FileDialogNewFolder: return QPixmap(QLatin1String(":/trolltech/styles/commonstyle/images/newdirectory-16.png")); case SP_FileDialogDetailedView: @@ -5641,7 +5641,7 @@ QPixmap QCommonStyle::standardPixmap(StandardPixmap sp, const QStyleOption *opti case SP_FileDialogListView: return QPixmap(QLatin1String(":/trolltech/styles/commonstyle/images/viewlist-16.png")); case SP_FileDialogBack: - return standardPixmap(SP_ArrowBack, option, widget); + return proxy()->standardPixmap(SP_ArrowBack, option, widget); case SP_DriveHDIcon: return QPixmap(QLatin1String(":/trolltech/styles/commonstyle/images/harddrive-16.png")); case SP_TrashIcon: @@ -5942,7 +5942,7 @@ QIcon QCommonStyle::standardIconImplementation(StandardPixmap standardIcon, cons } case SP_FileLinkIcon: { - icon = QIcon(standardPixmap(standardIcon, option, widget)); + icon = QIcon(proxy()->standardPixmap(standardIcon, option, widget)); QPixmap pixmap = d->findIcon(32, QLatin1String("link_overlay.png")); if (!pixmap.isNull()) { QPixmap fileIcon = d->findIcon(32, QLatin1String("text-x-generic.png")); @@ -5957,7 +5957,7 @@ QIcon QCommonStyle::standardIconImplementation(StandardPixmap standardIcon, cons } break; case SP_DirLinkIcon: { - icon = QIcon(standardPixmap(standardIcon, option, widget)); + icon = QIcon(proxy()->standardPixmap(standardIcon, option, widget)); QPixmap pixmap = d->findIcon(32, QLatin1String("link_overlay.png")); if (!pixmap.isNull()) { QPixmap fileIcon = d->findIcon(32, QLatin1String("folder.png")); @@ -6175,7 +6175,7 @@ QIcon QCommonStyle::standardIconImplementation(StandardPixmap standardIcon, cons break; #endif // QT_NO_IMAGEFORMAT_PNG default: - icon.addPixmap(standardPixmap(standardIcon, option, widget)); + icon.addPixmap(proxy()->standardPixmap(standardIcon, option, widget)); break; } return icon; diff --git a/src/gui/styles/qgtkstyle.cpp b/src/gui/styles/qgtkstyle.cpp index ab81d97..28dff3b 100644 --- a/src/gui/styles/qgtkstyle.cpp +++ b/src/gui/styles/qgtkstyle.cpp @@ -674,14 +674,14 @@ void QGtkStyle::drawPrimitive(PrimitiveElement element, if (widget && widget->inherits("QComboBoxPrivateContainer")){ QStyleOption copy = *option; copy.state |= State_Raised; - drawPrimitive(PE_PanelMenu, ©, painter, widget); + proxy()->drawPrimitive(PE_PanelMenu, ©, painter, widget); break; } // Drawing the entire itemview frame is very expensive, especially on the native X11 engine // Instead we cheat a bit and draw a border image without the center part, hence only scaling // thin rectangular images const int pmSize = 64; - const int border = pixelMetric(PM_DefaultFrameWidth, option, widget); + const int border = proxy()->pixelMetric(PM_DefaultFrameWidth, option, widget); const QString pmKey = QString(QLS("windowframe %0")).arg(option->state); QPixmap pixmap; @@ -892,8 +892,8 @@ void QGtkStyle::drawPrimitive(PrimitiveElement element, int border = (size > 9) ? (size/4) : 0; //Allow small arrows to have exact dimensions int bsx = 0, bsy = 0; if (option->state & State_Sunken) { - bsx = pixelMetric(PM_ButtonShiftHorizontal); - bsy = pixelMetric(PM_ButtonShiftVertical); + bsx = proxy()->pixelMetric(PM_ButtonShiftHorizontal); + bsy = proxy()->pixelMetric(PM_ButtonShiftVertical); } QRect arrowRect = option->rect.adjusted(border + bsx, border + bsy, -border + bsx, -border + bsy); GtkShadowType shadow = option->state & State_Sunken ? GTK_SHADOW_IN : GTK_SHADOW_OUT; @@ -973,7 +973,7 @@ void QGtkStyle::drawPrimitive(PrimitiveElement element, if (const QStyleOptionFrame *panel = qstyleoption_cast(option)) { GtkWidget *gtkEntry = QGtk::gtkWidget(QLS("GtkEntry")); if (panel->lineWidth > 0) - drawPrimitive(PE_FrameLineEdit, option, painter, widget); + proxy()->drawPrimitive(PE_FrameLineEdit, option, painter, widget); uint resolve_mask = option->palette.resolve(); QRect textRect = option->rect.adjusted(gtkEntry->style->xthickness, gtkEntry->style->ythickness, -gtkEntry->style->xthickness, -gtkEntry->style->ythickness); @@ -1244,8 +1244,8 @@ void QGtkStyle::drawComplexControl(ComplexControl control, const QStyleOptionCom painter->save(); if (const QStyleOptionGroupBox *groupBox = qstyleoption_cast(option)) { - QRect textRect = subControlRect(CC_GroupBox, groupBox, SC_GroupBoxLabel, widget); - QRect checkBoxRect = subControlRect(CC_GroupBox, groupBox, SC_GroupBoxCheckBox, widget); + QRect textRect = proxy()->subControlRect(CC_GroupBox, groupBox, SC_GroupBoxLabel, widget); + QRect checkBoxRect = proxy()->subControlRect(CC_GroupBox, groupBox, SC_GroupBoxCheckBox, widget); // Draw title if ((groupBox->subControls & QStyle::SC_GroupBoxLabel) && !groupBox->text.isEmpty()) { @@ -1260,7 +1260,7 @@ void QGtkStyle::drawComplexControl(ComplexControl control, const QStyleOptionCom if (!groupBox->text.isEmpty()) { int alignment = int(groupBox->textAlignment); - if (!styleHint(QStyle::SH_UnderlineShortcut, option, widget)) + if (!proxy()->styleHint(QStyle::SH_UnderlineShortcut, option, widget)) alignment |= Qt::TextHideMnemonic; QColor textColor = groupBox->textColor; // Note: custom textColor is currently ignored int labelState = GTK_STATE_INSENSITIVE; @@ -1285,7 +1285,7 @@ void QGtkStyle::drawComplexControl(ComplexControl control, const QStyleOptionCom QStyleOptionButton box; box.QStyleOption::operator=(*groupBox); box.rect = checkBoxRect; - drawPrimitive(PE_IndicatorCheckBox, &box, painter, widget); + proxy()->drawPrimitive(PE_IndicatorCheckBox, &box, painter, widget); } } @@ -1308,7 +1308,7 @@ void QGtkStyle::drawComplexControl(ComplexControl control, const QStyleOptionCom bool focus = isEnabled && (comboBox->state & State_HasFocus); QColor buttonShadow = option->palette.dark().color(); GtkStateType state = gtkPainter.gtkState(option); - int appears_as_list = !styleHint(QStyle::SH_ComboBox_Popup, comboBox, widget); + int appears_as_list = !proxy()->styleHint(QStyle::SH_ComboBox_Popup, comboBox, widget); QPixmap cache; QString pixmapName; QStyleOptionComboBox comboBoxCopy = *comboBox; @@ -1316,9 +1316,9 @@ void QGtkStyle::drawComplexControl(ComplexControl control, const QStyleOptionCom bool reverse = (option->direction == Qt::RightToLeft); QRect rect = option->rect; - QRect arrowButtonRect = subControlRect(CC_ComboBox, &comboBoxCopy, + QRect arrowButtonRect = proxy()->subControlRect(CC_ComboBox, &comboBoxCopy, SC_ComboBoxArrow, widget); - QRect editRect = subControlRect(CC_ComboBox, &comboBoxCopy, + QRect editRect = proxy()->subControlRect(CC_ComboBox, &comboBoxCopy, SC_ComboBoxEditField, widget); GtkShadowType shadow = (option->state & State_Sunken || option->state & State_On ) ? @@ -1497,8 +1497,8 @@ void QGtkStyle::drawComplexControl(ComplexControl control, const QStyleOptionCom if (const QStyleOptionToolButton *toolbutton = qstyleoption_cast(option)) { QRect button, menuarea; - button = subControlRect(control, toolbutton, SC_ToolButton, widget); - menuarea = subControlRect(control, toolbutton, SC_ToolButtonMenu, widget); + button = proxy()->subControlRect(control, toolbutton, SC_ToolButton, widget); + menuarea = proxy()->subControlRect(control, toolbutton, SC_ToolButtonMenu, widget); State bflags = toolbutton->state & ~(State_Sunken | State_MouseOver); if (bflags & State_AutoRaise) @@ -1527,7 +1527,7 @@ void QGtkStyle::drawComplexControl(ComplexControl control, const QStyleOptionCom if (bflags & (State_Sunken | State_On | State_Raised | State_MouseOver)) { tool.rect = button; tool.state = bflags; - drawPrimitive(PE_PanelButtonTool, &tool, painter, widget); + proxy()->drawPrimitive(PE_PanelButtonTool, &tool, painter, widget); } } @@ -1538,9 +1538,9 @@ void QGtkStyle::drawComplexControl(ComplexControl control, const QStyleOptionCom if (toolbutton->state & State_HasFocus) { QStyleOptionFocusRect fr; fr.QStyleOption::operator=(*toolbutton); - fr.rect = subControlRect(CC_ToolButton, toolbutton, SC_ToolButton, widget); + fr.rect = proxy()->subControlRect(CC_ToolButton, toolbutton, SC_ToolButton, widget); fr.rect.adjust(1, 1, -1, -1); - drawPrimitive(PE_FrameFocusRect, &fr, painter, widget); + proxy()->drawPrimitive(PE_FrameFocusRect, &fr, painter, widget); } QStyleOptionToolButton label = *toolbutton; @@ -1556,21 +1556,21 @@ void QGtkStyle::drawComplexControl(ComplexControl control, const QStyleOptionCom } label.rect = button.adjusted(style->xthickness, style->ythickness, -style->xthickness - popupArrowSize, -style->ythickness); - drawControl(CE_ToolButtonLabel, &label, painter, widget); + proxy()->drawControl(CE_ToolButtonLabel, &label, painter, widget); if (toolbutton->subControls & SC_ToolButtonMenu) { tool.rect = menuarea; tool.state = mflags; if ((mflags & State_Enabled && (mflags & (State_Sunken | State_Raised | State_MouseOver))) || !(mflags & State_AutoRaise)) - drawPrimitive(PE_IndicatorButtonDropDown, &tool, painter, widget); + proxy()->drawPrimitive(PE_IndicatorButtonDropDown, &tool, painter, widget); - drawPrimitive(PE_IndicatorArrowDown, &tool, painter, widget); + proxy()->drawPrimitive(PE_IndicatorArrowDown, &tool, painter, widget); } else if (drawMenuArrow) { QRect ir = toolbutton->rect; QStyleOptionToolButton newBtn = *toolbutton; newBtn.rect = QRect(ir.right() - popupArrowSize - style->xthickness - 3, ir.height()/2 - 1, popupArrowSize, popupArrowSize); - drawPrimitive(PE_IndicatorArrowDown, &newBtn, painter, widget); + proxy()->drawPrimitive(PE_IndicatorArrowDown, &newBtn, painter, widget); } } break; @@ -1587,10 +1587,10 @@ void QGtkStyle::drawComplexControl(ComplexControl control, const QStyleOptionCom painter->fillRect(option->rect, option->palette.background()); QRect rect = scrollBar->rect; - QRect scrollBarSubLine = subControlRect(control, scrollBar, SC_ScrollBarSubLine, widget); - QRect scrollBarAddLine = subControlRect(control, scrollBar, SC_ScrollBarAddLine, widget); - QRect scrollBarSlider = subControlRect(control, scrollBar, SC_ScrollBarSlider, widget); - QRect grooveRect = subControlRect(control, scrollBar, SC_ScrollBarGroove, widget); + QRect scrollBarSubLine = proxy()->subControlRect(control, scrollBar, SC_ScrollBarSubLine, widget); + QRect scrollBarAddLine = proxy()->subControlRect(control, scrollBar, SC_ScrollBarAddLine, widget); + QRect scrollBarSlider = proxy()->subControlRect(control, scrollBar, SC_ScrollBarSlider, widget); + QRect grooveRect = proxy()->subControlRect(control, scrollBar, SC_ScrollBarGroove, widget); bool horizontal = scrollBar->orientation == Qt::Horizontal; GtkWidget * scrollbarWidget = horizontal ? gtkHScrollBar : gtkVScrollBar; style = scrollbarWidget->style; @@ -1734,7 +1734,7 @@ void QGtkStyle::drawComplexControl(ComplexControl control, const QStyleOptionCom bool reverse = (spinBox->direction == Qt::RightToLeft); //### Move this to subControlRect - QRect upRect = subControlRect(CC_SpinBox, option, SC_SpinBoxUp, widget); + QRect upRect = proxy()->subControlRect(CC_SpinBox, option, SC_SpinBoxUp, widget); upRect.setTop(option->rect.top()); if (reverse) @@ -1742,8 +1742,8 @@ void QGtkStyle::drawComplexControl(ComplexControl control, const QStyleOptionCom else upRect.setRight(option->rect.right()); - QRect editRect = subControlRect(CC_SpinBox, option, SC_SpinBoxEditField, widget); - QRect downRect = subControlRect(CC_SpinBox, option, SC_SpinBoxDown, widget); + QRect editRect = proxy()->subControlRect(CC_SpinBox, option, SC_SpinBoxEditField, widget); + QRect downRect = proxy()->subControlRect(CC_SpinBox, option, SC_SpinBoxDown, widget); downRect.setBottom(option->rect.bottom()); if (reverse) @@ -1875,9 +1875,9 @@ void QGtkStyle::drawComplexControl(ComplexControl control, const QStyleOptionCom GtkWidget *hScaleWidget = QGtk::gtkWidget(QLS("GtkHScale")); GtkWidget *vScaleWidget = QGtk::gtkWidget(QLS("GtkVScale")); - QRect groove = subControlRect(CC_Slider, option, SC_SliderGroove, widget); - QRect handle = subControlRect(CC_Slider, option, SC_SliderHandle, widget); - QRect ticks = subControlRect(CC_Slider, option, SC_SliderTickmarks, widget); + QRect groove = proxy()->subControlRect(CC_Slider, option, SC_SliderGroove, widget); + QRect handle = proxy()->subControlRect(CC_Slider, option, SC_SliderHandle, widget); + QRect ticks = proxy()->subControlRect(CC_Slider, option, SC_SliderTickmarks, widget); bool horizontal = slider->orientation == Qt::Horizontal; bool ticksAbove = slider->tickPosition & QSlider::TicksAbove; @@ -1932,8 +1932,8 @@ void QGtkStyle::drawComplexControl(ComplexControl control, const QStyleOptionCom if (option->subControls & SC_SliderTickmarks) { painter->setPen(darkOutline); - int tickSize = pixelMetric(PM_SliderTickmarkOffset, option, widget); - int available = pixelMetric(PM_SliderSpaceAvailable, slider, widget); + int tickSize = proxy()->pixelMetric(PM_SliderTickmarkOffset, option, widget); + int available = proxy()->pixelMetric(PM_SliderSpaceAvailable, slider, widget); int interval = slider->tickInterval; if (interval <= 0) { @@ -1950,7 +1950,7 @@ void QGtkStyle::drawComplexControl(ComplexControl control, const QStyleOptionCom interval = 1; int v = slider->minimum; - int len = pixelMetric(PM_SliderLength, slider, widget); + int len = proxy()->pixelMetric(PM_SliderLength, slider, widget); while (v <= slider->maximum + 1) { if (v == slider->maximum + 1 && interval == 1) break; @@ -2011,7 +2011,7 @@ void QGtkStyle::drawComplexControl(ComplexControl control, const QStyleOptionCom fropt.rect.setLeft(handle.left() - 3); fropt.rect.setRight(handle.right() + 3); } - drawPrimitive(PE_FrameFocusRect, &fropt, painter, widget); + proxy()->drawPrimitive(PE_FrameFocusRect, &fropt, painter, widget); } gtkPainter.paintSlider( scaleWidget, horizontal ? "hscale" : "vscale", handle, state, shadow, style, @@ -2101,9 +2101,9 @@ void QGtkStyle::drawControl(ControlElement element, if (option->state & State_Sunken) buttonShift = QPoint(pixelMetric(PM_ButtonShiftHorizontal, option, widget), - pixelMetric(PM_ButtonShiftVertical, option, widget)); + proxy()->pixelMetric(PM_ButtonShiftVertical, option, widget)); - if (styleHint(SH_UnderlineShortcut, button, widget)) + if (proxy()->styleHint(SH_UnderlineShortcut, button, widget)) tf |= Qt::TextShowMnemonic; else tf |= Qt::TextHideMnemonic; @@ -2164,7 +2164,7 @@ void QGtkStyle::drawControl(ControlElement element, GdkColor gdkText = gtkButton->style->fg[labelState]; QColor textColor = QColor(gdkText.red>>8, gdkText.green>>8, gdkText.blue>>8); pal.setBrush(QPalette::ButtonText, textColor); - drawItemText(painter, ir, tf, pal, (button->state & State_Enabled), + proxy()->drawItemText(painter, ir, tf, pal, (button->state & State_Enabled), button->text, QPalette::ButtonText); } break; @@ -2185,7 +2185,7 @@ void QGtkStyle::drawControl(ControlElement element, QStyleOptionButton subopt = *btn; subopt.rect = subElementRect(isRadio ? SE_RadioButtonIndicator : SE_CheckBoxIndicator, btn, widget); - drawPrimitive(isRadio ? PE_IndicatorRadioButton : PE_IndicatorCheckBox, + proxy()->drawPrimitive(isRadio ? PE_IndicatorRadioButton : PE_IndicatorCheckBox, &subopt, painter, widget); subopt.rect = subElementRect(isRadio ? SE_RadioButtonContents : SE_CheckBoxContents, btn, widget); @@ -2199,14 +2199,14 @@ void QGtkStyle::drawControl(ControlElement element, QColor textColor = QColor(gdkText.red>>8, gdkText.green>>8, gdkText.blue>>8); pal.setBrush(QPalette::WindowText, textColor); subopt.palette = pal; - drawControl(isRadio ? CE_RadioButtonLabel : CE_CheckBoxLabel, &subopt, painter, widget); + proxy()->drawControl(isRadio ? CE_RadioButtonLabel : CE_CheckBoxLabel, &subopt, painter, widget); if (btn->state & State_HasFocus) { QStyleOptionFocusRect fropt; fropt.QStyleOption::operator=(*btn); fropt.rect = subElementRect(isRadio ? SE_RadioButtonFocusRect : SE_CheckBoxFocusRect, btn, widget); - drawPrimitive(PE_FrameFocusRect, &fropt, painter, widget); + proxy()->drawPrimitive(PE_FrameFocusRect, &fropt, painter, widget); } } break; @@ -2215,8 +2215,8 @@ void QGtkStyle::drawControl(ControlElement element, case CE_ComboBoxLabel: if (const QStyleOptionComboBox *cb = qstyleoption_cast(option)) { - QRect editRect = subControlRect(CC_ComboBox, cb, SC_ComboBoxEditField, widget); - bool appearsAsList = !styleHint(QStyle::SH_ComboBox_Popup, cb, widget); + QRect editRect = proxy()->subControlRect(CC_ComboBox, cb, SC_ComboBoxEditField, widget); + bool appearsAsList = !proxy()->styleHint(QStyle::SH_ComboBox_Popup, cb, widget); painter->save(); painter->setClipRect(editRect); @@ -2234,7 +2234,7 @@ void QGtkStyle::drawControl(ControlElement element, if (cb->editable) painter->fillRect(iconRect, option->palette.brush(QPalette::Base)); - drawItemPixmap(painter, iconRect, Qt::AlignCenter, pixmap); + proxy()->drawItemPixmap(painter, iconRect, Qt::AlignCenter, pixmap); if (cb->direction == Qt::RightToLeft) editRect.translate(-4 - cb->iconSize.width(), 0); @@ -2256,7 +2256,7 @@ void QGtkStyle::drawControl(ControlElement element, pal.setBrush(QPalette::ButtonText, textColor); - drawItemText(painter, editRect.adjusted(1, 0, -1, 0), + proxy()->drawItemText(painter, editRect.adjusted(1, 0, -1, 0), visualAlignment(cb->direction, Qt::AlignLeft | Qt::AlignVCenter), pal, cb->state & State_Enabled, cb->currentText, QPalette::ButtonText); } @@ -2302,7 +2302,7 @@ void QGtkStyle::drawControl(ControlElement element, QString titleText = painter->fontMetrics().elidedText(dwOpt->title, Qt::ElideRight, titleRect.width()); - drawItemText(painter, + proxy()->drawItemText(painter, titleRect, Qt::AlignLeft | Qt::AlignVCenter | Qt::TextShowMnemonic, dwOpt->palette, dwOpt->state & State_Enabled, titleText, @@ -2423,10 +2423,10 @@ void QGtkStyle::drawControl(ControlElement element, QPalette::ColorRole textRole = dis ? QPalette::Text : QPalette::HighlightedText; uint alignment = Qt::AlignCenter | Qt::TextShowMnemonic | Qt::TextDontClip | Qt::TextSingleLine; - if (!QCleanlooksStyle::styleHint(SH_UnderlineShortcut, mbi, widget)) + if (!proxy()->styleHint(SH_UnderlineShortcut, mbi, widget)) alignment |= Qt::TextHideMnemonic; - drawItemText(painter, item.rect, alignment, item.palette, mbi->state & State_Enabled, mbi->text, textRole); + proxy()->drawItemText(painter, item.rect, alignment, item.palette, mbi->state & State_Enabled, mbi->text, textRole); } } painter->restore(); @@ -2598,7 +2598,7 @@ void QGtkStyle::drawControl(ControlElement element, mode = QIcon::Active; QPixmap pixmap; - int smallIconSize = pixelMetric(PM_SmallIconSize, option, widget); + int smallIconSize = proxy()->pixelMetric(PM_SmallIconSize, option, widget); QSize iconSize(smallIconSize, smallIconSize); #ifndef QT_NO_COMBOBOX @@ -2626,7 +2626,7 @@ void QGtkStyle::drawControl(ControlElement element, } opt.state |= State_Sunken; opt.rect = vCheckRect; - drawPrimitive(PE_PanelButtonCommand, &opt, painter, widget); + proxy()->drawPrimitive(PE_PanelButtonCommand, &opt, painter, widget); } painter->drawPixmap(pmr.topLeft(), pixmap); } @@ -2666,7 +2666,7 @@ void QGtkStyle::drawControl(ControlElement element, int t = s.indexOf(QLatin1Char('\t')); int text_flags = Qt::AlignVCenter | Qt::TextShowMnemonic | Qt::TextDontClip | Qt::TextSingleLine; - if (!styleHint(SH_UnderlineShortcut, menuitem, widget)) + if (!proxy()->styleHint(SH_UnderlineShortcut, menuitem, widget)) text_flags |= Qt::TextHideMnemonic; // Draw shortcut right aligned @@ -2699,7 +2699,7 @@ void QGtkStyle::drawControl(ControlElement element, // Arrow if (menuItem->menuItemType == QStyleOptionMenuItem::SubMenu) {// draw sub menu arrow QPoint buttonShift(pixelMetric(PM_ButtonShiftHorizontal, option, widget), - pixelMetric(PM_ButtonShiftVertical, option, widget)); + proxy()->pixelMetric(PM_ButtonShiftVertical, option, widget)); QFontMetrics fm(menuitem->font); int arrow_size = fm.ascent() + fm.descent() - 2 * gtkMenuItem->style->ythickness; @@ -2727,7 +2727,7 @@ void QGtkStyle::drawControl(ControlElement element, case CE_PushButton: if (const QStyleOptionButton *btn = qstyleoption_cast(option)) { GtkWidget *gtkButton = QGtk::gtkWidget(QLS("GtkButton")); - drawControl(CE_PushButtonBevel, btn, painter, widget); + proxy()->drawControl(CE_PushButtonBevel, btn, painter, widget); QStyleOptionButton subopt = *btn; subopt.rect = subElementRect(SE_PushButtonContents, btn, widget); gint interiorFocus = true; @@ -2737,14 +2737,14 @@ void QGtkStyle::drawControl(ControlElement element, if (btn->features & QStyleOptionButton::Flat && btn->state & State_HasFocus) // The normal button focus rect does not work well for flat buttons in Clearlooks - drawPrimitive(PE_FrameFocusRect, option, painter, widget); + proxy()->drawPrimitive(PE_FrameFocusRect, option, painter, widget); else if (btn->state & State_HasFocus) gtkPainter.paintFocus(gtkButton, "button", option->rect.adjusted(xt, yt, -xt, -yt), btn->state & State_Sunken ? GTK_STATE_ACTIVE : GTK_STATE_NORMAL, gtkButton->style); - drawControl(CE_PushButtonLabel, &subopt, painter, widget); + proxy()->drawControl(CE_PushButtonLabel, &subopt, painter, widget); } break; @@ -2962,8 +2962,8 @@ QRect QGtkStyle::subControlRect(ComplexControl control, const QStyleOptionComple font.setBold(true); QFontMetrics fontMetrics(font); QSize textRect = fontMetrics.boundingRect(groupBoxWidget->title()).size() + QSize(4, 4); - int indicatorWidth = pixelMetric(PM_IndicatorWidth, option, widget); - int indicatorHeight = pixelMetric(PM_IndicatorHeight, option, widget); + int indicatorWidth = proxy()->pixelMetric(PM_IndicatorWidth, option, widget); + int indicatorHeight = proxy()->pixelMetric(PM_IndicatorHeight, option, widget); if (subControl == SC_GroupBoxCheckBox) { rect.setWidth(indicatorWidth); @@ -3044,7 +3044,7 @@ QRect QGtkStyle::subControlRect(ComplexControl control, const QStyleOptionComple QGtk::gtk_widget_set_direction(gtkCombo, (option->direction == Qt::RightToLeft) ? GTK_TEXT_DIR_RTL : GTK_TEXT_DIR_LTR); GtkAllocation geometry = {0, 0, qMax(0, option->rect.width()), qMax(0, option->rect.height())}; QGtk::gtk_widget_size_allocate(gtkCombo, &geometry); - int appears_as_list = !styleHint(QStyle::SH_ComboBox_Popup, option, widget); + int appears_as_list = !proxy()->styleHint(QStyle::SH_ComboBox_Popup, option, widget); QString arrowPath = comboBoxPath + QLS(".GtkToggleButton"); if (!box->editable && !appears_as_list) @@ -3208,7 +3208,7 @@ QSize QGtkStyle::sizeFromContents(ContentsType type, const QStyleOption *option, case CT_ComboBox: if (const QStyleOptionComboBox *combo = qstyleoption_cast(option)) { GtkWidget *gtkCombo = QGtk::gtkWidget(QLS("GtkComboBox")); - QRect arrowButtonRect = subControlRect(CC_ComboBox, combo, SC_ComboBoxArrow, widget); + QRect arrowButtonRect = proxy()->subControlRect(CC_ComboBox, combo, SC_ComboBoxArrow, widget); newSize = size + QSize(12 + arrowButtonRect.width() + 2*gtkCombo->style->xthickness, 4 + 2*gtkCombo->style->ythickness); if (!(widget && qobject_cast(widget->parentWidget()))) diff --git a/src/gui/styles/qmacstyle_mac.mm b/src/gui/styles/qmacstyle_mac.mm index 99894ad..ec75138 100644 --- a/src/gui/styles/qmacstyle_mac.mm +++ b/src/gui/styles/qmacstyle_mac.mm @@ -1051,7 +1051,7 @@ QSize QMacStylePrivate::pushButtonSizeFromContents(const QStyleOptionButton *btn : btn->fontMetrics.boundingRect(QRect(), Qt::AlignCenter, btn->text); csz.setWidth(iconSize.width() + textRect.width() + ((btn->features & QStyleOptionButton::HasMenu) - ? q->pixelMetric(QStyle::PM_MenuButtonIndicator, btn, 0) : 0)); + ? q->proxy()->pixelMetric(QStyle::PM_MenuButtonIndicator, btn, 0) : 0)); csz.setHeight(qMax(iconSize.height(), textRect.height())); return csz; } @@ -2222,7 +2222,7 @@ int QMacStyle::pixelMetric(PixelMetric metric, const QStyleOption *opt, const QW ret = closeButtonSize; break; case PM_ToolBarIconSize: - ret = pixelMetric(PM_LargeIconSize); + ret = proxy()->pixelMetric(PM_LargeIconSize); break; case PM_FocusFrameVMargin: case PM_FocusFrameHMargin: @@ -2746,7 +2746,7 @@ int QMacStyle::styleHint(StyleHint sh, const QStyleOption *opt, const QWidget *w QPixmap pix(pixmapSize); pix.fill(QColor(fillR, fillG, fillB)); QPainter pix_paint(&pix); - drawControl(CE_FocusFrame, opt, &pix_paint, w); + proxy()->drawControl(CE_FocusFrame, opt, &pix_paint, w); pix_paint.end(); img = pix.toImage(); } @@ -3061,7 +3061,7 @@ void QMacStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QPai twf.rect = twf.rect.adjusted(0, -10, 0, 0); break; } - drawPrimitive(PE_FrameTabWidget, &twf, p, w); + proxy()->drawPrimitive(PE_FrameTabWidget, &twf, p, w); p->restore(); } break; @@ -3159,7 +3159,7 @@ void QMacStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QPai if (const QStyleOptionHeader *header = qstyleoption_cast(opt)) { // In HITheme, up is down, down is up and hamburgers eat people. if (header->sortIndicator != QStyleOptionHeader::None) - drawPrimitive( + proxy()->drawPrimitive( (header->sortIndicator == QStyleOptionHeader::SortDown) ? PE_IndicatorArrowUp : PE_IndicatorArrowDown, header, p, w); } @@ -3293,7 +3293,7 @@ void QMacStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QPai fdi.isFocused = (frame->state & State_HasFocus); int lw = frame->lineWidth; if (lw <= 0) - lw = pixelMetric(PM_DefaultFrameWidth, frame, w); + lw = proxy()->pixelMetric(PM_DefaultFrameWidth, frame, w); { //clear to base color p->save(); p->setPen(QPen(baseColor, lw)); @@ -3506,16 +3506,16 @@ void QMacStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPainter QIcon::Mode mode = QIcon::Disabled; if (opt->state & State_Enabled) mode = QIcon::Normal; - QPixmap pixmap = header->icon.pixmap(pixelMetric(PM_SmallIconSize), mode); + QPixmap pixmap = header->icon.pixmap(proxy()->pixelMetric(PM_SmallIconSize), mode); QRect pixr = header->rect; pixr.setY(header->rect.center().y() - (pixmap.height() - 1) / 2); - drawItemPixmap(p, pixr, Qt::AlignVCenter, pixmap); + proxy()->drawItemPixmap(p, pixr, Qt::AlignVCenter, pixmap); textr.translate(pixmap.width() + 2, 0); } - drawItemText(p, textr, header->textAlignment | Qt::AlignVCenter, header->palette, - header->state & State_Enabled, header->text, QPalette::ButtonText); + proxy()->drawItemText(p, textr, header->textAlignment | Qt::AlignVCenter, header->palette, + header->state & State_Enabled, header->text, QPalette::ButtonText); } break; case CE_ToolButtonLabel: @@ -3530,8 +3530,8 @@ void QMacStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPainter int alignment = 0; bool down = tb->state & (State_Sunken | State_On); if (down) { - shiftX = pixelMetric(PM_ButtonShiftHorizontal, tb, w); - shiftY = pixelMetric(PM_ButtonShiftVertical, tb, w); + shiftX = proxy()->pixelMetric(PM_ButtonShiftHorizontal, tb, w); + shiftY = proxy()->pixelMetric(PM_ButtonShiftVertical, tb, w); } // The down state is special for QToolButtons in a toolbar on the Mac // The text is a bit bolder and gets a drop shadow and the icons are also darkened. @@ -3574,7 +3574,7 @@ void QMacStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPainter pr.translate(shiftX, shiftY); pixmap = darkenPixmap(pixmap); } - drawItemPixmap(p, pr, Qt::AlignCenter, pixmap); + proxy()->drawItemPixmap(p, pr, Qt::AlignCenter, pixmap); break; } } @@ -3655,7 +3655,7 @@ void QMacStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPainter HIThemeDrawButton(&newRect, &bdi, cg, kHIThemeOrientationNormal, 0); if (btn->features & QStyleOptionButton::HasMenu) { - int mbi = pixelMetric(QStyle::PM_MenuButtonIndicator, btn, w); + int mbi = proxy()->pixelMetric(QStyle::PM_MenuButtonIndicator, btn, w); QRect ir = btn->rect; HIRect arrowRect = CGRectMake(ir.right() - mbi - PushButtonRightOffset, ir.height() / 2 - 4, mbi, ir.height() / 2); @@ -3742,7 +3742,7 @@ void QMacStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPainter if (hasIcon) { int contentW = textRect.width(); if (hasMenu) - contentW += pixelMetric(PM_MenuButtonIndicator) + 4; + contentW += proxy()->pixelMetric(PM_MenuButtonIndicator) + 4; QIcon::Mode mode = btn->state & State_Enabled ? QIcon::Normal : QIcon::Disabled; if (mode == QIcon::Normal && btn->state & State_HasFocus) mode = QIcon::Active; @@ -3756,7 +3756,7 @@ void QMacStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPainter int iconTopOffset = freeContentRect.y() + (freeContentRect.height() - pixmap.height()) / 2; QRect iconDestRect(iconLeftOffset, iconTopOffset, pixmap.width(), pixmap.height()); QRect visualIconDestRect = visualRect(btn->direction, freeContentRect, iconDestRect); - drawItemPixmap(p, visualIconDestRect, Qt::AlignLeft | Qt::AlignVCenter, pixmap); + proxy()->drawItemPixmap(p, visualIconDestRect, Qt::AlignLeft | Qt::AlignVCenter, pixmap); int newOffset = iconDestRect.x() + iconDestRect.width() + PushButtonContentPadding - textRect.x(); textRect.adjust(newOffset, 0, newOffset, 0); @@ -3764,8 +3764,8 @@ void QMacStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPainter // Draw the text: if (hasText) { textRect = visualRect(btn->direction, freeContentRect, textRect); - drawItemText(p, textRect, Qt::AlignLeft | Qt::AlignVCenter | Qt::TextShowMnemonic, btn->palette, - (btn->state & State_Enabled), btn->text, QPalette::ButtonText); + proxy()->drawItemText(p, textRect, Qt::AlignLeft | Qt::AlignVCenter | Qt::TextShowMnemonic, btn->palette, + (btn->state & State_Enabled), btn->text, QPalette::ButtonText); } } } @@ -3922,7 +3922,8 @@ void QMacStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPainter QRect nr = subElementRect(SE_TabBarTabText, opt, w); nr.moveTop(+1); int alignment = Qt::AlignCenter | Qt::TextShowMnemonic | Qt::TextHideMnemonic; - drawItemText(p, nr, alignment, np, tab->state & State_Enabled, tab->text, QPalette::WindowText); + proxy()->drawItemText(p, nr, alignment, np, tab->state & State_Enabled, + tab->text, QPalette::WindowText); p->restore(); } @@ -4045,8 +4046,8 @@ void QMacStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPainter } break; case CE_FocusFrame: { - int xOff = pixelMetric(PM_FocusFrameHMargin, opt, w) + 1; - int yOff = pixelMetric(PM_FocusFrameVMargin, opt, w) + 1; + int xOff = proxy()->pixelMetric(PM_FocusFrameHMargin, opt, w) + 1; + int yOff = proxy()->pixelMetric(PM_FocusFrameVMargin, opt, w) + 1; HIRect hirect = CGRectMake(xOff+opt->rect.x(), yOff+opt->rect.y(), opt->rect.width() - 2 * xOff, opt->rect.height() - 2 * yOff); HIThemeDrawFocusRect(&hirect, true, QMacCGContext(p), kHIThemeOrientationNormal); @@ -4169,7 +4170,7 @@ void QMacStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPainter QIcon::Mode mode = (mi->state & State_Enabled) ? QIcon::Normal : QIcon::Disabled; // Always be normal or disabled to follow the Mac style. - int smallIconSize = pixelMetric(PM_SmallIconSize); + int smallIconSize = proxy()->pixelMetric(PM_SmallIconSize); QSize iconSize(smallIconSize, smallIconSize); if (const QComboBox *comboBox = qobject_cast(w)) { iconSize = comboBox->iconSize(); @@ -4279,7 +4280,7 @@ void QMacStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPainter drawItemPixmap(p, mi->rect, Qt::AlignCenter | Qt::TextHideMnemonic | Qt::TextDontClip | Qt::TextSingleLine, - mi->icon.pixmap(pixelMetric(PM_SmallIconSize), + mi->icon.pixmap(proxy()->pixelMetric(PM_SmallIconSize), (mi->state & State_Enabled) ? QIcon::Normal : QIcon::Disabled)); } else { drawItemText(p, mi->rect, @@ -4916,7 +4917,7 @@ void QMacStyle::drawComplexControl(ComplexControl cc, const QStyleOptionComplex treeOpt.state |= State_Children; if (item.state & State_Open) treeOpt.state |= State_Open; - drawPrimitive(PE_IndicatorBranch, &treeOpt, p, widget); + proxy()->drawPrimitive(PE_IndicatorBranch, &treeOpt, p, widget); } y += item.totalHeight; } @@ -4930,7 +4931,7 @@ void QMacStyle::drawComplexControl(ComplexControl cc, const QStyleOptionComplex SInt32 frame_size; GetThemeMetric(kThemeMetricEditTextFrameOutset, &frame_size); - QRect lineeditRect = subControlRect(CC_SpinBox, sb, SC_SpinBoxEditField, widget); + QRect lineeditRect = proxy()->subControlRect(CC_SpinBox, sb, SC_SpinBoxEditField, widget); lineeditRect.adjust(-frame_size, -frame_size, +frame_size, +frame_size); HIThemeFrameDrawInfo fdi; @@ -4974,9 +4975,9 @@ void QMacStyle::drawComplexControl(ComplexControl cc, const QStyleOptionComplex bdi.value = kThemeButtonOff; bdi.adornment = kThemeAdornmentNone; - QRect updown = subControlRect(CC_SpinBox, sb, SC_SpinBoxUp, widget); + QRect updown = proxy()->subControlRect(CC_SpinBox, sb, SC_SpinBoxUp, widget); - updown |= subControlRect(CC_SpinBox, sb, SC_SpinBoxDown, widget); + updown |= proxy()->subControlRect(CC_SpinBox, sb, SC_SpinBoxDown, widget); HIRect newRect = qt_hirectForQRect(updown); QRect off_rct; HIRect outRect; @@ -5089,7 +5090,7 @@ void QMacStyle::drawComplexControl(ComplexControl cc, const QStyleOptionComplex &titleRegion2); ptrHIShapeGetBounds(titleRegion2, &tmpRect); if (tmpRect.size.width != 1) { - int iconExtent = pixelMetric(PM_SmallIconSize); + int iconExtent = proxy()->pixelMetric(PM_SmallIconSize); iw = titlebar->icon.actualSize(QSize(iconExtent, iconExtent)).width(); } } @@ -5107,7 +5108,8 @@ void QMacStyle::drawComplexControl(ComplexControl cc, const QStyleOptionComplex else x += br.width() / 2 - p->fontMetrics().width(titlebar->text) / 2; if (iw) - p->drawPixmap(x - iw, y, titlebar->icon.pixmap(pixelMetric(PM_SmallIconSize), QIcon::Normal)); + p->drawPixmap(x - iw, y, + titlebar->icon.pixmap(proxy()->pixelMetric(PM_SmallIconSize), QIcon::Normal)); drawItemText(p, br, Qt::AlignCenter, opt->palette, tds == kThemeStateActive, titlebar->text, QPalette::Text); p->restore(); @@ -5144,7 +5146,7 @@ void QMacStyle::drawComplexControl(ComplexControl cc, const QStyleOptionComplex tti.truncationPosition = kHIThemeTextTruncationNone; tti.truncationMaxLines = 1 + groupBox->text.count(QLatin1Char('\n')); QCFString groupText = qt_mac_removeMnemonics(groupBox->text); - QRect r = subControlRect(CC_GroupBox, groupBox, SC_GroupBoxLabel, widget); + QRect r = proxy()->subControlRect(CC_GroupBox, groupBox, SC_GroupBoxLabel, widget); HIRect bounds = qt_hirectForQRect(r); HIThemeDrawTextBox(groupText, &bounds, &tti, cg, kHIThemeOrientationNormal); p->restore(); @@ -5157,12 +5159,12 @@ void QMacStyle::drawComplexControl(ComplexControl cc, const QStyleOptionComplex if (widget && qobject_cast(widget->parentWidget())) { if (tb->subControls & SC_ToolButtonMenu) { QStyleOption arrowOpt(0); - arrowOpt.rect = subControlRect(cc, tb, SC_ToolButtonMenu, widget); + arrowOpt.rect = proxy()->subControlRect(cc, tb, SC_ToolButtonMenu, widget); arrowOpt.rect.setY(arrowOpt.rect.y() + arrowOpt.rect.height() / 2); arrowOpt.rect.setHeight(arrowOpt.rect.height() / 2); arrowOpt.state = tb->state; arrowOpt.palette = tb->palette; - drawPrimitive(PE_IndicatorArrowDown, &arrowOpt, p, widget); + proxy()->drawPrimitive(PE_IndicatorArrowDown, &arrowOpt, p, widget); } else if ((tb->features & QStyleOptionToolButton::HasMenu) && (tb->toolButtonStyle != Qt::ToolButtonTextOnly && !tb->icon.isNull())) { drawToolbarButtonArrow(tb->rect, tds, cg); @@ -5185,7 +5187,7 @@ void QMacStyle::drawComplexControl(ComplexControl cc, const QStyleOptionComplex p->setPen(oldPen); } } - drawControl(CE_ToolButtonLabel, opt, p, widget); + proxy()->drawControl(CE_ToolButtonLabel, opt, p, widget); } else { ThemeButtonKind bkind = kThemeBevelButton; switch (d->aquaSizeConstrain(opt, widget)) { @@ -5206,8 +5208,8 @@ void QMacStyle::drawComplexControl(ComplexControl cc, const QStyleOptionComplex } QRect button, menuarea; - button = subControlRect(cc, tb, SC_ToolButton, widget); - menuarea = subControlRect(cc, tb, SC_ToolButtonMenu, widget); + button = proxy()->subControlRect(cc, tb, SC_ToolButton, widget); + menuarea = proxy()->subControlRect(cc, tb, SC_ToolButtonMenu, widget); State bflags = tb->state, mflags = tb->state; if (tb->subControls & SC_ToolButton) @@ -5270,11 +5272,11 @@ void QMacStyle::drawComplexControl(ComplexControl cc, const QStyleOptionComplex } else if (tb->features & QStyleOptionToolButton::HasMenu) { drawToolbarButtonArrow(tb->rect, tds, cg); } - QRect buttonRect = subControlRect(CC_ToolButton, tb, SC_ToolButton, widget); - int fw = pixelMetric(PM_DefaultFrameWidth, opt, widget); + QRect buttonRect = proxy()->subControlRect(CC_ToolButton, tb, SC_ToolButton, widget); + int fw = proxy()->pixelMetric(PM_DefaultFrameWidth, opt, widget); QStyleOptionToolButton label = *tb; label.rect = buttonRect.adjusted(fw, fw, -fw, -fw); - drawControl(CE_ToolButtonLabel, &label, p, widget); + proxy()->drawControl(CE_ToolButtonLabel, &label, p, widget); } } break; @@ -5505,7 +5507,7 @@ QRect QMacStyle::subControlRect(ComplexControl cc, const QStyleOptionComplex *op else if (sc == SC_TitleBarLabel) wrc = kWindowTitleTextRgn; else if (sc == SC_TitleBarSysMenu) - ret.setRect(-1024, -1024, 10, pixelMetric(PM_TitleBarHeight, + ret.setRect(-1024, -1024, 10, proxy()->pixelMetric(PM_TitleBarHeight, titlebar, widget)); if (wrc != kWindowGlobalPortRgn) { QCFType region; @@ -5602,7 +5604,7 @@ QRect QMacStyle::subControlRect(ComplexControl cc, const QStyleOptionComplex *op QRect labelRect = alignedRect(groupBox->direction, groupBox->textAlignment, QSize(tw, h), ret); - int indicatorWidth = pixelMetric(PM_IndicatorWidth, opt, widget); + int indicatorWidth = proxy()->pixelMetric(PM_IndicatorWidth, opt, widget); bool rtl = groupBox->direction == Qt::RightToLeft; if (sc == SC_GroupBoxLabel) { if (checkable) { @@ -5624,7 +5626,7 @@ QRect QMacStyle::subControlRect(ComplexControl cc, const QStyleOptionComplex *op if (sc == SC_GroupBoxCheckBox) { int left = rtl ? labelRect.right() - indicatorWidth : labelRect.left(); ret.setRect(left, ret.top(), - indicatorWidth, pixelMetric(PM_IndicatorHeight, opt, widget)); + indicatorWidth, proxy()->pixelMetric(PM_IndicatorHeight, opt, widget)); } break; } @@ -5662,7 +5664,7 @@ QRect QMacStyle::subControlRect(ComplexControl cc, const QStyleOptionComplex *op QAquaWidgetSize aquaSize = d->aquaSizeConstrain(spin, widget); int spinner_w; int spinBoxSep; - int fw = pixelMetric(PM_SpinBoxFrameWidth, spin, widget); + int fw = proxy()->pixelMetric(PM_SpinBoxFrameWidth, spin, widget); switch (aquaSize) { default: case QAquaSizeUnknown: @@ -5784,7 +5786,7 @@ QSize QMacStyle::sizeFromContents(ContentsType ct, const QStyleOption *opt, sz.transpose(); if (newStyleTabs) { int defaultTabHeight; - int defaultExtraSpace = pixelMetric(PM_TabBarTabHSpace, tab, widget); // Remove spurious gcc warning (AFAIK) + int defaultExtraSpace = proxy()->pixelMetric(PM_TabBarTabHSpace, tab, widget); // Remove spurious gcc warning (AFAIK) QFontMetrics fm = opt->fontMetrics; switch (AquaSize) { case QAquaSizeUnknown: @@ -5891,7 +5893,7 @@ QSize QMacStyle::sizeFromContents(ContentsType ct, const QStyleOption *opt, h = qMax(h, iconSize.height() + 4); maxpmw = qMax(maxpmw, iconSize.width()); } else { - int iconExtent = pixelMetric(PM_SmallIconSize); + int iconExtent = proxy()->pixelMetric(PM_SmallIconSize); h = qMax(h, mi->icon.actualSize(QSize(iconExtent, iconExtent)).height() + 4); } } @@ -5938,7 +5940,7 @@ QSize QMacStyle::sizeFromContents(ContentsType ct, const QStyleOption *opt, QStyleHintReturnMask menuMask; QStyleOption myOption = *opt; myOption.rect.setSize(sz); - if (styleHint(SH_Menu_Mask, &myOption, widget, &menuMask)) { + if (proxy()->styleHint(SH_Menu_Mask, &myOption, widget, &menuMask)) { sz = menuMask.region.boundingRect().size(); } break; } diff --git a/src/gui/styles/qmotifstyle.cpp b/src/gui/styles/qmotifstyle.cpp index d6b8a7a..95f69b9 100644 --- a/src/gui/styles/qmotifstyle.cpp +++ b/src/gui/styles/qmotifstyle.cpp @@ -386,7 +386,7 @@ void QMotifStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QP case PE_FrameTabWidget: case PE_FrameWindow: - qDrawShadePanel(p, opt->rect, opt->palette, QStyle::State_None, pixelMetric(PM_DefaultFrameWidth)); + qDrawShadePanel(p, opt->rect, opt->palette, QStyle::State_None, proxy()->pixelMetric(PM_DefaultFrameWidth)); break; case PE_FrameFocusRect: if (const QStyleOptionFocusRect *fropt = qstyleoption_cast(opt)) { @@ -475,7 +475,7 @@ void QMotifStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QP fill = opt->palette.brush(QPalette::Button); if ((opt->state & State_Enabled || opt->state & State_On) || !(opt->state & State_AutoRaise)) qDrawShadePanel(p, opt->rect, opt->palette, bool(opt->state & (State_Sunken | State_On)), - pixelMetric(PM_DefaultFrameWidth), &fill); + proxy()->pixelMetric(PM_DefaultFrameWidth), &fill); break; } case PE_IndicatorCheckBox: { @@ -490,9 +490,9 @@ void QMotifStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QP opt->rect.x(), opt->rect.y() + opt->rect.height() - 1); } else { qDrawShadePanel(p, opt->rect, opt->palette, !showUp, - pixelMetric(PM_DefaultFrameWidth), &fill); + proxy()->pixelMetric(PM_DefaultFrameWidth), &fill); } - if (!(opt->state & State_Enabled) && styleHint(SH_DitherDisabledText)) + if (!(opt->state & State_Enabled) && proxy()->styleHint(SH_DitherDisabledText)) p->fillRect(opt->rect, QBrush(p->background().color(), Qt::Dense5Pattern)); break; } @@ -545,7 +545,7 @@ void QMotifStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QP a.setPoints(INTARRLEN(bottom_pts), bottom_pts); a.translate(opt->rect.x(), opt->rect.y()); p->drawPolyline(a); - if (!(opt->state & State_Enabled) && styleHint(SH_DitherDisabledText)) + if (!(opt->state & State_Enabled) && proxy()->styleHint(SH_DitherDisabledText)) p->fillRect(opt->rect, QBrush(p->background().color(), Qt::Dense5Pattern)); p->setPen(oldPen); p->setBrush(oldBrush); @@ -736,13 +736,13 @@ void QMotifStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QP #undef CLEFT #undef CTOP #undef CBOT - if (!(opt->state & State_Enabled) && styleHint(SH_DitherDisabledText)) + if (!(opt->state & State_Enabled) && proxy()->styleHint(SH_DitherDisabledText)) p->fillRect(opt->rect, QBrush(p->background().color(), Qt::Dense5Pattern)); break; } case PE_IndicatorDockWidgetResizeHandle: { const int motifOffset = 10; - int sw = pixelMetric(PM_SplitterWidth); + int sw = proxy()->pixelMetric(PM_SplitterWidth); if (opt->state & State_Horizontal) { int yPos = opt->rect.y() + opt->rect.height() / 2; int kPos = opt->rect.right() - motifOffset - sw; @@ -769,7 +769,7 @@ void QMotifStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QP const int markH = 6; int posX = opt->rect.x() + (opt->rect.width() - markW) / 2 - 1; int posY = opt->rect.y() + (opt->rect.height() - markH) / 2; - int dfw = pixelMetric(PM_DefaultFrameWidth); + int dfw = proxy()->pixelMetric(PM_DefaultFrameWidth); if (dfw < 2) { // Could do with some optimizing/caching... @@ -843,7 +843,7 @@ void QMotifStyle::drawControl(ControlElement element, const QStyleOption *opt, Q handleOpt.state &= ~State_Horizontal; else handleOpt.state |= State_Horizontal; - drawPrimitive(PE_IndicatorDockWidgetResizeHandle, &handleOpt, p, widget); + proxy()->drawPrimitive(PE_IndicatorDockWidgetResizeHandle, &handleOpt, p, widget); break; } case CE_ScrollBarSubLine: @@ -855,9 +855,9 @@ void QMotifStyle::drawControl(ControlElement element, const QStyleOption *opt, Q pe = (opt->state & State_Horizontal) ? (opt->direction == Qt::LeftToRight ? PE_IndicatorArrowLeft : PE_IndicatorArrowRight) : PE_IndicatorArrowUp; QStyleOption arrowOpt = *opt; arrowOpt.state |= State_Enabled; - drawPrimitive(pe, &arrowOpt, p, widget); - if (!(opt->state & State_Enabled) && styleHint(SH_DitherDisabledText)) { - int fw = pixelMetric(PM_DefaultFrameWidth); + proxy()->drawPrimitive(pe, &arrowOpt, p, widget); + if (!(opt->state & State_Enabled) && proxy()->styleHint(SH_DitherDisabledText)) { + int fw = proxy()->pixelMetric(PM_DefaultFrameWidth); p->fillRect(opt->rect.adjusted(fw, fw, -fw, -fw), QBrush(p->background().color(), Qt::Dense5Pattern)); } }break; @@ -873,9 +873,9 @@ void QMotifStyle::drawControl(ControlElement element, const QStyleOption *opt, Q bevelOpt.state &= ~(State_Sunken | State_On); p->save(); p->setBrushOrigin(bevelOpt.rect.topLeft()); - drawPrimitive(PE_PanelButtonBevel, &bevelOpt, p, widget); + proxy()->drawPrimitive(PE_PanelButtonBevel, &bevelOpt, p, widget); p->restore(); - if (!(opt->state & State_Enabled) && styleHint(SH_DitherDisabledText)) + if (!(opt->state & State_Enabled) && proxy()->styleHint(SH_DitherDisabledText)) p->fillRect(opt->rect, QBrush(p->background().color(), Qt::Dense5Pattern)); break; } @@ -886,31 +886,31 @@ void QMotifStyle::drawControl(ControlElement element, const QStyleOption *opt, Q QStyleOptionButton subopt = *btn; subopt.rect = subElementRect(isRadio ? SE_RadioButtonIndicator : SE_CheckBoxIndicator, btn, widget); - drawPrimitive(isRadio ? PE_IndicatorRadioButton : PE_IndicatorCheckBox, + proxy()->drawPrimitive(isRadio ? PE_IndicatorRadioButton : PE_IndicatorCheckBox, &subopt, p, widget); subopt.rect = subElementRect(isRadio ? SE_RadioButtonContents : SE_CheckBoxContents, btn, widget); - drawControl(isRadio ? CE_RadioButtonLabel : CE_CheckBoxLabel, &subopt, p, widget); + proxy()->drawControl(isRadio ? CE_RadioButtonLabel : CE_CheckBoxLabel, &subopt, p, widget); if ((btn->state & State_HasFocus) && (!focus || !focus->isVisible())) { QStyleOptionFocusRect fropt; fropt.QStyleOption::operator=(*btn); fropt.rect = subElementRect(isRadio ? SE_RadioButtonFocusRect : SE_CheckBoxFocusRect, btn, widget); - drawPrimitive(PE_FrameFocusRect, &fropt, p, widget); + proxy()->drawPrimitive(PE_FrameFocusRect, &fropt, p, widget); } } break; case CE_PushButton: if (const QStyleOptionButton *btn = qstyleoption_cast(opt)) { - drawControl(CE_PushButtonBevel, btn, p, widget); + proxy()->drawControl(CE_PushButtonBevel, btn, p, widget); QStyleOptionButton subopt = *btn; subopt.rect = subElementRect(SE_PushButtonContents, btn, widget); - drawControl(CE_PushButtonLabel, &subopt, p, widget); + proxy()->drawControl(CE_PushButtonLabel, &subopt, p, widget); if ((btn->state & State_HasFocus) && (!focus || !focus->isVisible())) { QStyleOptionFocusRect fropt; fropt.QStyleOption::operator=(*btn); fropt.rect = subElementRect(SE_PushButtonFocusRect, btn, widget); - drawPrimitive(PE_FrameFocusRect, &fropt, p, widget); + proxy()->drawPrimitive(PE_FrameFocusRect, &fropt, p, widget); } } break; @@ -919,7 +919,7 @@ void QMotifStyle::drawControl(ControlElement element, const QStyleOption *opt, Q int diw, x1, y1, x2, y2; p->setPen(opt->palette.foreground().color()); p->setBrush(QBrush(opt->palette.button().color(), Qt::NoBrush)); - diw = pixelMetric(PM_ButtonDefaultIndicator); + diw = proxy()->pixelMetric(PM_ButtonDefaultIndicator); opt->rect.getCoords(&x1, &y1, &x2, &y2); if (btn->features & (QStyleOptionButton::AutoDefaultButton|QStyleOptionButton::DefaultButton)) { x1 += diw; @@ -948,14 +948,14 @@ void QMotifStyle::drawControl(ControlElement element, const QStyleOption *opt, Q QStyleOptionButton newOpt = *btn; newOpt.rect = QRect(x1, y1, x2 - x1 + 1, y2 - y1 + 1); p->setBrushOrigin(p->brushOrigin()); - drawPrimitive(PE_PanelButtonCommand, &newOpt, p, widget); + proxy()->drawPrimitive(PE_PanelButtonCommand, &newOpt, p, widget); } if (btn->features & QStyleOptionButton::HasMenu) { - int mbi = pixelMetric(PM_MenuButtonIndicator, btn, widget); + int mbi = proxy()->pixelMetric(PM_MenuButtonIndicator, btn, widget); QRect ir = btn->rect; QStyleOptionButton newBtn = *btn; newBtn.rect = QRect(ir.right() - mbi - 3, ir.y() + 4, mbi, ir.height() - 8); - drawPrimitive(PE_IndicatorArrowDown, &newBtn, p, widget); + proxy()->drawPrimitive(PE_IndicatorArrowDown, &newBtn, p, widget); } break; } @@ -963,7 +963,7 @@ void QMotifStyle::drawControl(ControlElement element, const QStyleOption *opt, Q #ifndef QT_NO_TABBAR case CE_TabBarTabShape: if (const QStyleOptionTab *tab = qstyleoption_cast(opt)) { - const int default_frame = pixelMetric(PM_DefaultFrameWidth, tab, widget); + const int default_frame = proxy()->pixelMetric(PM_DefaultFrameWidth, tab, widget); const int frame_offset = (default_frame > 1) ? 1 : 0; if (tab->shape == QTabBar::RoundedNorth || tab->shape == QTabBar::RoundedEast || @@ -1081,7 +1081,7 @@ void QMotifStyle::drawControl(ControlElement element, const QStyleOption *opt, Q } p->setTransform(m, true); } - const int unit_width = pixelMetric(PM_ProgressBarChunkWidth, opt, widget); + const int unit_width = proxy()->pixelMetric(PM_ProgressBarChunkWidth, opt, widget); int u = rect.width() / unit_width; int p_v = pb->progress - pb->minimum; int t_s = qMax(0, pb->maximum - pb->minimum); @@ -1150,7 +1150,7 @@ void QMotifStyle::drawControl(ControlElement element, const QStyleOption *opt, Q QFont oldFont = p->font(); p->setFont(menuitem->font); p->fillRect(x, y, w, h, opt->palette.brush(QPalette::Button)); - drawItemText(p, menuitem->rect.adjusted(10, 0, -5, 0), Qt::AlignLeft | Qt::AlignVCenter, + proxy()->drawItemText(p, menuitem->rect.adjusted(10, 0, -5, 0), Qt::AlignLeft | Qt::AlignVCenter, menuitem->palette, menuitem->state & State_Enabled, menuitem->text, QPalette::Text); textWidth = menuitem->fontMetrics.width(menuitem->text) + 10; @@ -1220,10 +1220,10 @@ void QMotifStyle::drawControl(ControlElement element, const QStyleOption *opt, Q } if (menuitem->checkType & QStyleOptionMenuItem::Exclusive) { newMenuItem.rect.setRect(xvis + 2, y + motifItemFrame + mh / 4, 11, 11); - drawPrimitive(PE_IndicatorRadioButton, &newMenuItem, p, widget); + proxy()->drawPrimitive(PE_IndicatorRadioButton, &newMenuItem, p, widget); } else { newMenuItem.rect.setRect(xvis + 5, y + motifItemFrame + mh / 4, 9, 9); - drawPrimitive(PE_IndicatorCheckBox, &newMenuItem, p, widget); + proxy()->drawPrimitive(PE_IndicatorCheckBox, &newMenuItem, p, widget); } } @@ -1258,14 +1258,14 @@ void QMotifStyle::drawControl(ControlElement element, const QStyleOption *opt, Q int xv = vr.x(); QRect tr(xv, y+m, menuitem->tabWidth, h-2*m); p->drawText(tr, text_flags, s.mid(t+1)); - if (!(opt->state & State_Enabled) && styleHint(SH_DitherDisabledText)) + if (!(opt->state & State_Enabled) && proxy()->styleHint(SH_DitherDisabledText)) p->fillRect(tr, QBrush(p->background().color(), Qt::Dense5Pattern)); s = s.left(t); } QRect tr(xvis, y+m, w - xm - menuitem->tabWidth + 1, h-2*m); p->drawText(tr, text_flags, s.left(t)); p->setFont(oldFont); - if (!(opt->state & State_Enabled) && styleHint(SH_DitherDisabledText)) + if (!(opt->state & State_Enabled) && proxy()->styleHint(SH_DitherDisabledText)) p->fillRect(tr, QBrush(p->background().color(), Qt::Dense5Pattern)); } if (menuitem->menuItemType == QStyleOptionMenuItem::SubMenu) { // draw sub menu arrow @@ -1279,7 +1279,7 @@ void QMotifStyle::drawControl(ControlElement element, const QStyleOption *opt, Q arrowOpt.state = (State_Sunken | ((opt->state & State_Enabled) ? State_Enabled : State_None)); else arrowOpt.state = ((opt->state & State_Enabled) ? State_Enabled : State_None); - drawPrimitive(arrow, &arrowOpt, p, widget); + proxy()->drawPrimitive(arrow, &arrowOpt, p, widget); } break; } @@ -1296,7 +1296,7 @@ void QMotifStyle::drawControl(ControlElement element, const QStyleOption *opt, Q p->save(); p->setBrushOrigin(opt->rect.topLeft()); qDrawShadePanel(p, opt->rect, opt->palette, bool(opt->state & (State_Sunken|State_On)), - pixelMetric(PM_DefaultFrameWidth), + proxy()->pixelMetric(PM_DefaultFrameWidth), &opt->palette.brush((opt->state & State_Sunken) ? QPalette::Mid : QPalette::Button)); p->restore(); break; @@ -1431,8 +1431,8 @@ void QMotifStyle::drawComplexControl(ComplexControl cc, const QStyleOptionComple if (const QStyleOptionToolButton *toolbutton = qstyleoption_cast(opt)) { QRect button, menuarea; - button = subControlRect(cc, toolbutton, SC_ToolButton, widget); - menuarea = subControlRect(cc, toolbutton, SC_ToolButtonMenu, widget); + button = proxy()->subControlRect(cc, toolbutton, SC_ToolButton, widget); + menuarea = proxy()->subControlRect(cc, toolbutton, SC_ToolButtonMenu, widget); State bflags = toolbutton->state & ~State_Sunken; if (bflags & State_AutoRaise) { @@ -1453,7 +1453,7 @@ void QMotifStyle::drawComplexControl(ComplexControl cc, const QStyleOptionComple if (bflags & (State_Sunken | State_On | State_Raised)) { tool.rect = button; tool.state = bflags; - drawPrimitive(PE_PanelButtonTool, &tool, p, widget); + proxy()->drawPrimitive(PE_PanelButtonTool, &tool, p, widget); } } @@ -1461,26 +1461,26 @@ void QMotifStyle::drawComplexControl(ComplexControl cc, const QStyleOptionComple QStyleOptionFocusRect fr; fr.QStyleOption::operator=(*toolbutton); fr.rect = toolbutton->rect.adjusted(3, 3, -3, -3); - drawPrimitive(PE_FrameFocusRect, &fr, p, widget); + proxy()->drawPrimitive(PE_FrameFocusRect, &fr, p, widget); } QStyleOptionToolButton label = *toolbutton; label.state = bflags; - int fw = pixelMetric(PM_DefaultFrameWidth, opt, widget); + int fw = proxy()->pixelMetric(PM_DefaultFrameWidth, opt, widget); label.rect = button.adjusted(fw, fw, -fw, -fw); - drawControl(CE_ToolButtonLabel, &label, p, widget); + proxy()->drawControl(CE_ToolButtonLabel, &label, p, widget); if (toolbutton->subControls & SC_ToolButtonMenu) { tool.rect = menuarea; tool.state = mflags; if (mflags & (State_Sunken | State_On | State_Raised)) - drawPrimitive(PE_IndicatorButtonDropDown, &tool, p, widget); - drawPrimitive(PE_IndicatorArrowDown, &tool, p, widget); + proxy()->drawPrimitive(PE_IndicatorButtonDropDown, &tool, p, widget); + proxy()->drawPrimitive(PE_IndicatorArrowDown, &tool, p, widget); } else if (toolbutton->features & QStyleOptionToolButton::HasMenu) { - int mbi = pixelMetric(PM_MenuButtonIndicator, toolbutton, widget); + int mbi = proxy()->pixelMetric(PM_MenuButtonIndicator, toolbutton, widget); QRect ir = toolbutton->rect; QStyleOptionToolButton newBtn = *toolbutton; newBtn.rect = QRect(ir.right() + 5 - mbi, ir.height() - mbi + 4, mbi - 6, mbi - 6); - drawPrimitive(PE_IndicatorArrowDown, &newBtn, p, widget); + proxy()->drawPrimitive(PE_IndicatorArrowDown, &newBtn, p, widget); } } break; @@ -1491,18 +1491,18 @@ void QMotifStyle::drawComplexControl(ComplexControl cc, const QStyleOptionComple PrimitiveElement pe; if (spinbox->frame && (spinbox->subControls & SC_SpinBoxFrame)) { - QRect r = subControlRect(CC_SpinBox, spinbox, SC_SpinBoxFrame, widget); - qDrawShadePanel(p, r, opt->palette, false, pixelMetric(PM_SpinBoxFrameWidth)); + QRect r = proxy()->subControlRect(CC_SpinBox, spinbox, SC_SpinBoxFrame, widget); + qDrawShadePanel(p, r, opt->palette, false, proxy()->pixelMetric(PM_SpinBoxFrameWidth)); - int fw = pixelMetric(QStyle::PM_DefaultFrameWidth); - r = subControlRect(CC_SpinBox, spinbox, SC_SpinBoxEditField, widget).adjusted(-fw,-fw,fw,fw); + int fw = proxy()->pixelMetric(QStyle::PM_DefaultFrameWidth); + r = proxy()->subControlRect(CC_SpinBox, spinbox, SC_SpinBoxEditField, widget).adjusted(-fw,-fw,fw,fw); QStyleOptionFrame lineOpt; lineOpt.QStyleOption::operator=(*opt); lineOpt.rect = r; lineOpt.lineWidth = fw; lineOpt.midLineWidth = 0; lineOpt.state |= QStyle::State_Sunken; - drawPrimitive(QStyle::PE_FrameLineEdit, &lineOpt, p, widget); + proxy()->drawPrimitive(QStyle::PE_FrameLineEdit, &lineOpt, p, widget); } if (spinbox->subControls & SC_SpinBoxUp) { @@ -1525,8 +1525,8 @@ void QMotifStyle::drawComplexControl(ComplexControl cc, const QStyleOptionComple pe = (spinbox->buttonSymbols == QAbstractSpinBox::PlusMinus ? PE_IndicatorSpinPlus : PE_IndicatorSpinUp); - copy.rect = subControlRect(CC_SpinBox, spinbox, SC_SpinBoxUp, widget); - drawPrimitive(pe, ©, p, widget); + copy.rect = proxy()->subControlRect(CC_SpinBox, spinbox, SC_SpinBoxUp, widget); + proxy()->drawPrimitive(pe, ©, p, widget); } if (spinbox->subControls & SC_SpinBoxDown) { @@ -1549,8 +1549,8 @@ void QMotifStyle::drawComplexControl(ComplexControl cc, const QStyleOptionComple pe = (spinbox->buttonSymbols == QAbstractSpinBox::PlusMinus ? PE_IndicatorSpinMinus : PE_IndicatorSpinDown); - copy.rect = subControlRect(CC_SpinBox, spinbox, SC_SpinBoxDown, widget); - drawPrimitive(pe, ©, p, widget); + copy.rect = proxy()->subControlRect(CC_SpinBox, spinbox, SC_SpinBoxDown, widget); + proxy()->drawPrimitive(pe, ©, p, widget); } } break; @@ -1558,16 +1558,16 @@ void QMotifStyle::drawComplexControl(ComplexControl cc, const QStyleOptionComple #ifndef QT_NO_SLIDER case CC_Slider: if (const QStyleOptionSlider *slider = qstyleoption_cast(opt)) { - QRect groove = subControlRect(CC_Slider, opt, SC_SliderGroove, widget), - handle = subControlRect(CC_Slider, opt, SC_SliderHandle, widget); + QRect groove = proxy()->subControlRect(CC_Slider, opt, SC_SliderGroove, widget), + handle = proxy()->subControlRect(CC_Slider, opt, SC_SliderHandle, widget); if ((opt->subControls & SC_SliderGroove) && groove.isValid()) { - qDrawShadePanel(p, groove, opt->palette, true, pixelMetric(PM_DefaultFrameWidth), + qDrawShadePanel(p, groove, opt->palette, true, proxy()->pixelMetric(PM_DefaultFrameWidth), &opt->palette.brush((opt->state & State_Enabled) ? QPalette::Mid : QPalette::Window)); if ((opt->state & State_HasFocus) && (!focus || !focus->isVisible())) { QStyleOption focusOpt = *opt; focusOpt.rect = subElementRect(SE_SliderFocusRect, opt, widget); - drawPrimitive(PE_FrameFocusRect, &focusOpt, p, widget); + proxy()->drawPrimitive(PE_FrameFocusRect, &focusOpt, p, widget); } } @@ -1577,7 +1577,7 @@ void QMotifStyle::drawComplexControl(ComplexControl cc, const QStyleOptionComple bevelOpt.rect = handle; p->save(); p->setBrushOrigin(bevelOpt.rect.topLeft()); - drawPrimitive(PE_PanelButtonBevel, &bevelOpt, p, widget); + proxy()->drawPrimitive(PE_PanelButtonBevel, &bevelOpt, p, widget); p->restore(); if (slider->orientation == Qt::Horizontal) { @@ -1589,14 +1589,14 @@ void QMotifStyle::drawComplexControl(ComplexControl cc, const QStyleOptionComple qDrawShadeLine(p, handle.x(), mid, handle.x() + handle.width() - 2, mid, opt->palette, true, 1); } - if (!(opt->state & State_Enabled) && styleHint(SH_DitherDisabledText)) + if (!(opt->state & State_Enabled) && proxy()->styleHint(SH_DitherDisabledText)) p->fillRect(handle, QBrush(p->background().color(), Qt::Dense5Pattern)); } if (slider->subControls & SC_SliderTickmarks) { QStyleOptionSlider tmpSlider = *slider; tmpSlider.subControls = SC_SliderTickmarks; - int frameWidth = pixelMetric(PM_DefaultFrameWidth); + int frameWidth = proxy()->pixelMetric(PM_DefaultFrameWidth); tmpSlider.rect.translate(frameWidth - 1, 0); QCommonStyle::drawComplexControl(cc, &tmpSlider, p, widget); } @@ -1607,13 +1607,13 @@ void QMotifStyle::drawComplexControl(ComplexControl cc, const QStyleOptionComple if (const QStyleOptionComboBox *cb = qstyleoption_cast(opt)) { if (opt->subControls & SC_ComboBoxArrow) { int awh, ax, ay, sh, sy, dh, ew; - int fw = cb->frame ? pixelMetric(PM_ComboBoxFrameWidth, opt, widget) : 0; + int fw = cb->frame ? proxy()->pixelMetric(PM_ComboBoxFrameWidth, opt, widget) : 0; if (cb->frame) { QStyleOptionButton btn; btn.QStyleOption::operator=(*cb); btn.state |= QStyle::State_Raised; - drawPrimitive(PE_PanelButtonCommand, &btn, p, widget); + proxy()->drawPrimitive(PE_PanelButtonCommand, &btn, p, widget); } else { p->fillRect(opt->rect, opt->palette.brush(QPalette::Button)); } @@ -1627,7 +1627,7 @@ void QMotifStyle::drawComplexControl(ComplexControl cc, const QStyleOptionComple QStyleOption arrowOpt = *opt; arrowOpt.rect = ar; arrowOpt.state |= State_Enabled; - drawPrimitive(PE_IndicatorArrowDown, &arrowOpt, p, widget); + proxy()->drawPrimitive(PE_IndicatorArrowDown, &arrowOpt, p, widget); // draws the shaded line under the arrow @@ -1643,13 +1643,13 @@ void QMotifStyle::drawComplexControl(ComplexControl cc, const QStyleOptionComple focus.QStyleOption::operator=(*opt); focus.rect = subElementRect(SE_ComboBoxFocusRect, opt, widget); focus.backgroundColor = opt->palette.button().color(); - drawPrimitive(PE_FrameFocusRect, &focus, p, widget); + proxy()->drawPrimitive(PE_FrameFocusRect, &focus, p, widget); } } if (opt->subControls & SC_ComboBoxEditField) { if (cb->editable) { - QRect er = subControlRect(CC_ComboBox, opt, SC_ComboBoxEditField, widget); + QRect er = proxy()->subControlRect(CC_ComboBox, opt, SC_ComboBoxEditField, widget); er.adjust(-1, -1, 1, 1); qDrawShadePanel(p, er, opt->palette, true, 1, &opt->palette.brush(QPalette::Base)); @@ -1663,7 +1663,7 @@ void QMotifStyle::drawComplexControl(ComplexControl cc, const QStyleOptionComple case CC_ScrollBar: { if (opt->subControls & SC_ScrollBarGroove) qDrawShadePanel(p, opt->rect, opt->palette, true, - pixelMetric(PM_DefaultFrameWidth, opt, widget), + proxy()->pixelMetric(PM_DefaultFrameWidth, opt, widget), &opt->palette.brush((opt->state & State_Enabled) ? QPalette::Mid : QPalette::Window)); if (const QStyleOptionSlider *scrollbar = qstyleoption_cast(opt)) { @@ -1798,7 +1798,7 @@ int QMotifStyle::pixelMetric(PixelMetric pm, const QStyleOption *opt, break; case PM_ToolBarFrameWidth: - ret = pixelMetric(PM_DefaultFrameWidth); + ret = proxy()->pixelMetric(PM_DefaultFrameWidth); break; case PM_ToolBarItemMargin: @@ -1819,7 +1819,7 @@ int QMotifStyle::pixelMetric(PixelMetric pm, const QStyleOption *opt, break; case PM_SliderThickness: - ret = 16 + 4 * pixelMetric(PM_DefaultFrameWidth); + ret = 16 + 4 * proxy()->pixelMetric(PM_DefaultFrameWidth); break; #ifndef QT_NO_SLIDER case PM_SliderControlThickness: @@ -1849,9 +1849,9 @@ int QMotifStyle::pixelMetric(PixelMetric pm, const QStyleOption *opt, case PM_SliderSpaceAvailable: if (const QStyleOptionSlider *sl = qstyleoption_cast(opt)) { if (sl->orientation == Qt::Horizontal) - ret = sl->rect.width() - pixelMetric(PM_SliderLength, opt, widget) - 2 * pixelMetric(PM_DefaultFrameWidth, opt, widget); + ret = sl->rect.width() - proxy()->pixelMetric(PM_SliderLength, opt, widget) - 2 * proxy()->pixelMetric(PM_DefaultFrameWidth, opt, widget); else - ret = sl->rect.height() - pixelMetric(PM_SliderLength, opt, widget) - 2 * pixelMetric(PM_DefaultFrameWidth, opt, widget); + ret = sl->rect.height() - proxy()->pixelMetric(PM_SliderLength, opt, widget) - 2 * proxy()->pixelMetric(PM_DefaultFrameWidth, opt, widget); } break; #endif // QT_NO_SLIDER @@ -1901,7 +1901,7 @@ QMotifStyle::subControlRect(ComplexControl cc, const QStyleOptionComplex *opt, #ifndef QT_NO_SPINBOX case CC_SpinBox: if (const QStyleOptionSpinBox *spinbox = qstyleoption_cast(opt)) { - int fw = spinbox->frame ? pixelMetric(PM_SpinBoxFrameWidth, spinbox, widget) : 0; + int fw = spinbox->frame ? proxy()->pixelMetric(PM_SpinBoxFrameWidth, spinbox, widget) : 0; QSize bs; bs.setHeight(opt->rect.height()/2 - fw); bs.setWidth(qMin(bs.height() * 8 / 5, opt->rect.width() / 4)); // 1.6 -approximate golden mean @@ -1944,11 +1944,11 @@ QMotifStyle::subControlRect(ComplexControl cc, const QStyleOptionComplex *opt, case CC_Slider: if (const QStyleOptionSlider *slider = qstyleoption_cast(opt)) { if (sc == SC_SliderHandle) { - int tickOffset = pixelMetric(PM_SliderTickmarkOffset, opt, widget); - int thickness = pixelMetric(PM_SliderControlThickness, opt, widget); + int tickOffset = proxy()->pixelMetric(PM_SliderTickmarkOffset, opt, widget); + int thickness = proxy()->pixelMetric(PM_SliderControlThickness, opt, widget); bool horizontal = slider->orientation == Qt::Horizontal; - int len = pixelMetric(PM_SliderLength, opt, widget); - int motifBorder = pixelMetric(PM_DefaultFrameWidth); + int len = proxy()->pixelMetric(PM_SliderLength, opt, widget); + int motifBorder = proxy()->pixelMetric(PM_DefaultFrameWidth); int sliderPos = sliderPositionFromValue(slider->minimum, slider->maximum, slider->sliderPosition, horizontal ? slider->rect.width() - len - 2 * motifBorder : slider->rect.height() - len - 2 * motifBorder, @@ -1967,7 +1967,7 @@ QMotifStyle::subControlRect(ComplexControl cc, const QStyleOptionComplex *opt, #ifndef QT_NO_SCROLLBAR case CC_ScrollBar: if (const QStyleOptionSlider *scrollbar = qstyleoption_cast(opt)) { - int dfw = pixelMetric(PM_DefaultFrameWidth); + int dfw = proxy()->pixelMetric(PM_DefaultFrameWidth); QRect rect = visualRect(scrollbar->direction, scrollbar->rect, QCommonStyle::subControlRect(cc, scrollbar, sc, widget)); if (sc == SC_ScrollBarSlider) { @@ -1991,7 +1991,7 @@ QMotifStyle::subControlRect(ComplexControl cc, const QStyleOptionComplex *opt, switch (sc) { case SC_ComboBoxArrow: { int ew, awh, sh, dh, ax, ay, sy; - int fw = cb->frame ? pixelMetric(PM_ComboBoxFrameWidth, opt, widget) : 0; + int fw = cb->frame ? proxy()->pixelMetric(PM_ComboBoxFrameWidth, opt, widget) : 0; QRect cr = opt->rect; cr.adjust(fw, fw, -fw, -fw); get_combo_parameters(cr, ew, awh, ax, ay, sh, dh, sy); @@ -1999,7 +1999,7 @@ QMotifStyle::subControlRect(ComplexControl cc, const QStyleOptionComplex *opt, } case SC_ComboBoxEditField: { - int fw = cb->frame ? pixelMetric(PM_ComboBoxFrameWidth, opt, widget) : 0; + int fw = cb->frame ? proxy()->pixelMetric(PM_ComboBoxFrameWidth, opt, widget) : 0; QRect rect = opt->rect; rect.adjust(fw, fw, -fw, -fw); int ew = get_combo_extra_width(rect.height(), rect.width()); @@ -2115,7 +2115,7 @@ QMotifStyle::subElementRect(SubElement sr, const QStyleOption *opt, const QWidge case SE_ComboBoxFocusRect: { int awh, ax, ay, sh, sy, dh, ew; - int fw = pixelMetric(PM_DefaultFrameWidth, opt, widget); + int fw = proxy()->pixelMetric(PM_DefaultFrameWidth, opt, widget); QRect tr = opt->rect; tr.adjust(fw, fw, -fw, -fw); diff --git a/src/gui/styles/qplastiquestyle.cpp b/src/gui/styles/qplastiquestyle.cpp index 0a56213..725e1d5 100644 --- a/src/gui/styles/qplastiquestyle.cpp +++ b/src/gui/styles/qplastiquestyle.cpp @@ -1129,7 +1129,7 @@ void QPlastiqueStyle::drawPrimitive(PrimitiveElement element, const QStyleOption switch (element) { case PE_IndicatorButtonDropDown: - drawPrimitive(PE_PanelButtonTool, option, painter, widget); + proxy()->drawPrimitive(PE_PanelButtonTool, option, painter, widget); break; case PE_FrameDefaultButton: { if (!(option->state & QStyle::State_Enabled)) @@ -1175,7 +1175,7 @@ void QPlastiqueStyle::drawPrimitive(PrimitiveElement element, const QStyleOption break; } - int borderThickness = pixelMetric(PM_TabBarBaseOverlap, twf, widget); + int borderThickness = proxy()->pixelMetric(PM_TabBarBaseOverlap, twf, widget); bool reverse = (twf->direction == Qt::RightToLeft); painter->save(); @@ -1354,7 +1354,7 @@ void QPlastiqueStyle::drawPrimitive(PrimitiveElement element, const QStyleOption painter->setPen(oldPen); } else { frameV2.state &= ~(State_Sunken | State_HasFocus); - drawPrimitive(PE_Frame, &frameV2, painter, widget); + proxy()->drawPrimitive(PE_Frame, &frameV2, painter, widget); } } break; @@ -1853,13 +1853,13 @@ void QPlastiqueStyle::drawPrimitive(PrimitiveElement element, const QStyleOption QStyleOptionButton button; button.QStyleOption::operator=(*option); button.state &= ~State_MouseOver; - drawPrimitive(PE_IndicatorCheckBox, &button, painter, widget); + proxy()->drawPrimitive(PE_IndicatorCheckBox, &button, painter, widget); break; } case PE_FrameWindow: { painter->save(); bool active = (option->state & State_Active); - int titleBarStop = option->rect.top() + pixelMetric(PM_TitleBarHeight, option, widget); + int titleBarStop = option->rect.top() + proxy()->pixelMetric(PM_TitleBarHeight, option, widget); QPalette palette = option->palette; if (!active) @@ -2069,7 +2069,7 @@ void QPlastiqueStyle::drawControl(ControlElement element, const QStyleOption *op && !leftCornerWidget; bool reverseShadow = false; - int borderThickness = pixelMetric(PM_TabBarBaseOverlap, tab, widget); + int borderThickness = proxy()->pixelMetric(PM_TabBarBaseOverlap, tab, widget); int marginLeft = 0; if ((atBeginning && !selected) || (selected && leftCornerWidget && ((tab->position == QStyleOptionTab::Beginning) || onlyTab))) { marginLeft = 1; @@ -2909,7 +2909,7 @@ void QPlastiqueStyle::drawControl(ControlElement element, const QStyleOption *op int w = 0; if (!menuItem->text.isEmpty()) { painter->setFont(menuItem->font); - drawItemText(painter, menuItem->rect.adjusted(5, 0, -5, 0), Qt::AlignLeft | Qt::AlignVCenter, + proxy()->drawItemText(painter, menuItem->rect.adjusted(5, 0, -5, 0), Qt::AlignLeft | Qt::AlignVCenter, menuItem->palette, menuItem->state & State_Enabled, menuItem->text, QPalette::Text); w = menuItem->fontMetrics.width(menuItem->text) + 5; @@ -2952,7 +2952,7 @@ void QPlastiqueStyle::drawControl(ControlElement element, const QStyleOption *op if (checked) button.state |= State_On; button.palette = menuItem->palette; - drawPrimitive(PE_IndicatorRadioButton, &button, painter, widget); + proxy()->drawPrimitive(PE_IndicatorRadioButton, &button, painter, widget); } else { if (menuItem->icon.isNull()) { QStyleOptionButton button; @@ -2961,7 +2961,7 @@ void QPlastiqueStyle::drawControl(ControlElement element, const QStyleOption *op if (checked) button.state |= State_On; button.palette = menuItem->palette; - drawPrimitive(PE_IndicatorCheckBox, &button, painter, widget); + proxy()->drawPrimitive(PE_IndicatorCheckBox, &button, painter, widget); } else if (checked) { int iconSize = qMax(menuItem->maxIconWidth, 20); QRect sunkenRect(option->rect.left() + 1, @@ -3073,7 +3073,7 @@ void QPlastiqueStyle::drawControl(ControlElement element, const QStyleOption *op newMI.palette.highlightedText().color()); else newMI.palette.setColor(QPalette::ButtonText, textBrush.color()); - drawPrimitive(arrow, &newMI, painter, widget); + proxy()->drawPrimitive(arrow, &newMI, painter, widget); } painter->restore(); @@ -3570,7 +3570,7 @@ void QPlastiqueStyle::drawControl(ControlElement element, const QStyleOption *op // The SubLine (up/left) buttons QRect button1; QRect button2; - int scrollBarExtent = pixelMetric(PM_ScrollBarExtent, option, widget); + int scrollBarExtent = proxy()->pixelMetric(PM_ScrollBarExtent, option, widget); if (horizontal) { button1.setRect(scrollBarSubLine.left(), scrollBarSubLine.top(), scrollBarExtent, scrollBarSubLine.height()); button2.setRect(scrollBarSubLine.right() - (scrollBarExtent - 1), scrollBarSubLine.top(), scrollBarExtent, scrollBarSubLine.height()); @@ -3710,7 +3710,7 @@ void QPlastiqueStyle::drawControl(ControlElement element, const QStyleOption *op pixmapRect.right() - 1, pixmapRect.bottom() - 1); sliderPainter.drawLines(lines, 2); - int sliderMinLength = pixelMetric(PM_ScrollBarSliderMin, scrollBar, widget); + int sliderMinLength = proxy()->pixelMetric(PM_ScrollBarSliderMin, scrollBar, widget); if ((horizontal && scrollBar->rect.width() > sliderMinLength) || (!horizontal && scrollBar->rect.height() > sliderMinLength)) { QImage pattern(horizontal ? qt_scrollbar_slider_pattern_horizontal @@ -3749,7 +3749,7 @@ void QPlastiqueStyle::drawControl(ControlElement element, const QStyleOption *op QWindowsStyle::drawControl(element, option, painter, widget); } else if (!comboBox->currentIcon.isNull()) { { - QRect editRect = subControlRect(CC_ComboBox, comboBox, SC_ComboBoxEditField, widget); + QRect editRect = proxy()->subControlRect(CC_ComboBox, comboBox, SC_ComboBoxEditField, widget); if (comboBox->direction == Qt::RightToLeft) editRect.adjust(0, 2, -2, -2); else @@ -3766,7 +3766,7 @@ void QPlastiqueStyle::drawControl(ControlElement element, const QStyleOption *op Qt::AlignLeft | Qt::AlignVCenter, iconRect.size(), editRect); painter->fillRect(iconRect, option->palette.brush(QPalette::Base)); - drawItemPixmap(painter, iconRect, Qt::AlignCenter, pixmap); + proxy()->drawItemPixmap(painter, iconRect, Qt::AlignCenter, pixmap); } painter->restore(); } @@ -3809,9 +3809,9 @@ void QPlastiqueStyle::drawComplexControl(ComplexControl control, const QStyleOpt #ifndef QT_NO_SLIDER case CC_Slider: if (const QStyleOptionSlider *slider = qstyleoption_cast(option)) { - QRect grooveRegion = subControlRect(CC_Slider, option, SC_SliderGroove, widget); - QRect handle = subControlRect(CC_Slider, option, SC_SliderHandle, widget); - QRect ticks = subControlRect(CC_Slider, option, SC_SliderTickmarks, widget); + QRect grooveRegion = proxy()->subControlRect(CC_Slider, option, SC_SliderGroove, widget); + QRect handle = proxy()->subControlRect(CC_Slider, option, SC_SliderHandle, widget); + QRect ticks = proxy()->subControlRect(CC_Slider, option, SC_SliderTickmarks, widget); bool horizontal = slider->orientation == Qt::Horizontal; bool ticksAbove = slider->tickPosition & QSlider::TicksAbove; bool ticksBelow = slider->tickPosition & QSlider::TicksBelow; @@ -3972,15 +3972,15 @@ void QPlastiqueStyle::drawComplexControl(ComplexControl control, const QStyleOpt QStyleOptionFocusRect fropt; fropt.QStyleOption::operator=(*slider); fropt.rect = subElementRect(SE_SliderFocusRect, slider, widget); - drawPrimitive(PE_FrameFocusRect, &fropt, painter, widget); + proxy()->drawPrimitive(PE_FrameFocusRect, &fropt, painter, widget); } } if (option->subControls & SC_SliderTickmarks) { QPen oldPen = painter->pen(); painter->setPen(borderColor); - int tickSize = pixelMetric(PM_SliderTickmarkOffset, option, widget); - int available = pixelMetric(PM_SliderSpaceAvailable, slider, widget); + int tickSize = proxy()->pixelMetric(PM_SliderTickmarkOffset, option, widget); + int available = proxy()->pixelMetric(PM_SliderSpaceAvailable, slider, widget); int interval = slider->tickInterval; if (interval <= 0) { interval = slider->singleStep; @@ -3994,7 +3994,7 @@ void QPlastiqueStyle::drawComplexControl(ComplexControl control, const QStyleOpt interval = 1; int v = slider->minimum; - int len = pixelMetric(PM_SliderLength, slider, widget); + int len = proxy()->pixelMetric(PM_SliderLength, slider, widget); QVarLengthArray lines; while (v <= slider->maximum + 1) { if (v == slider->maximum + 1 && interval == 1) @@ -4049,8 +4049,8 @@ void QPlastiqueStyle::drawComplexControl(ComplexControl control, const QStyleOpt bool reverse = (spinBox->direction == Qt::RightToLeft); // Rects - QRect upRect = subControlRect(CC_SpinBox, option, SC_SpinBoxUp, widget); - QRect downRect = subControlRect(CC_SpinBox, option, SC_SpinBoxDown, widget); + QRect upRect = proxy()->subControlRect(CC_SpinBox, option, SC_SpinBoxUp, widget); + QRect downRect = proxy()->subControlRect(CC_SpinBox, option, SC_SpinBoxDown, widget); QRect buttonRect = upRect | downRect; // Brushes @@ -4071,7 +4071,7 @@ void QPlastiqueStyle::drawComplexControl(ComplexControl control, const QStyleOpt } else { d->drawPartialFrame(painter, option, - subControlRect(CC_SpinBox, spinBox, SC_SpinBoxEditField, widget), + proxy()->subControlRect(CC_SpinBox, spinBox, SC_SpinBoxEditField, widget), widget); } // Paint buttons @@ -4411,7 +4411,7 @@ void QPlastiqueStyle::drawComplexControl(ComplexControl control, const QStyleOpt Q_D(const QPlastiqueStyle); d->drawPartialFrame(painter, option, - subControlRect(CC_ComboBox, option, SC_ComboBoxEditField, widget), + proxy()->subControlRect(CC_ComboBox, option, SC_ComboBoxEditField, widget), widget); QBrush border = qMapBrushToRect(option->palette.shadow(), buttonRect); @@ -4535,7 +4535,7 @@ void QPlastiqueStyle::drawComplexControl(ComplexControl control, const QStyleOpt if (!sunken) { buttonOption.state &= ~State_Sunken; } - drawPrimitive(PE_PanelButtonCommand, &buttonOption, painter, widget); + proxy()->drawPrimitive(PE_PanelButtonCommand, &buttonOption, painter, widget); // Draw the menu button separator line QBrush border = qMapBrushToRect(option->palette.shadow(), rect); @@ -4571,9 +4571,9 @@ void QPlastiqueStyle::drawComplexControl(ComplexControl control, const QStyleOpt if ((option->state & State_HasFocus) && !comboBox->editable && ((option->state & State_KeyboardFocusChange) || styleHint(SH_UnderlineShortcut, option, widget))) { QStyleOptionFocusRect focus; - focus.rect = subControlRect(CC_ComboBox, option, SC_ComboBoxEditField, widget) + focus.rect = proxy()->subControlRect(CC_ComboBox, option, SC_ComboBoxEditField, widget) .adjusted(-2, 0, 2, 0); - drawPrimitive(PE_FrameFocusRect, &focus, painter, widget); + proxy()->drawPrimitive(PE_FrameFocusRect, &focus, painter, widget); } painter->setPen(oldPen); @@ -4603,7 +4603,7 @@ void QPlastiqueStyle::drawComplexControl(ComplexControl control, const QStyleOpt QStyleOptionDockWidgetV2 dockwidget; dockwidget.QStyleOption::operator=(*option); dockwidget.title = titleBar->text; - drawControl(CE_DockWidgetTitle, &dockwidget, painter, widget); + proxy()->drawControl(CE_DockWidgetTitle, &dockwidget, painter, widget); } else #endif // QT3_SUPPORT @@ -4676,7 +4676,7 @@ void QPlastiqueStyle::drawComplexControl(ComplexControl control, const QStyleOpt } } // draw title - QRect textRect = subControlRect(CC_TitleBar, titleBar, SC_TitleBarLabel, widget); + QRect textRect = proxy()->subControlRect(CC_TitleBar, titleBar, SC_TitleBarLabel, widget); QFont font = painter->font(); font.setBold(true); @@ -4703,7 +4703,7 @@ void QPlastiqueStyle::drawComplexControl(ComplexControl control, const QStyleOpt bool hover = (titleBar->activeSubControls & SC_TitleBarMinButton) && (titleBar->state & State_MouseOver); bool sunken = (titleBar->activeSubControls & SC_TitleBarMinButton) && (titleBar->state & State_Sunken); - QRect minButtonRect = subControlRect(CC_TitleBar, titleBar, SC_TitleBarMinButton, widget); + QRect minButtonRect = proxy()->subControlRect(CC_TitleBar, titleBar, SC_TitleBarMinButton, widget); qt_plastique_draw_mdibutton(painter, titleBar, minButtonRect, hover, sunken); int xoffset = minButtonRect.width() / 3; @@ -4747,7 +4747,7 @@ void QPlastiqueStyle::drawComplexControl(ComplexControl control, const QStyleOpt bool hover = (titleBar->activeSubControls & SC_TitleBarMaxButton) && (titleBar->state & State_MouseOver); bool sunken = (titleBar->activeSubControls & SC_TitleBarMaxButton) && (titleBar->state & State_Sunken); - QRect maxButtonRect = subControlRect(CC_TitleBar, titleBar, SC_TitleBarMaxButton, widget); + QRect maxButtonRect = proxy()->subControlRect(CC_TitleBar, titleBar, SC_TitleBarMaxButton, widget); qt_plastique_draw_mdibutton(painter, titleBar, maxButtonRect, hover, sunken); int xoffset = maxButtonRect.width() / 3; @@ -4772,7 +4772,7 @@ void QPlastiqueStyle::drawComplexControl(ComplexControl control, const QStyleOpt bool hover = (titleBar->activeSubControls & SC_TitleBarCloseButton) && (titleBar->state & State_MouseOver); bool sunken = (titleBar->activeSubControls & SC_TitleBarCloseButton) && (titleBar->state & State_Sunken); - QRect closeButtonRect = subControlRect(CC_TitleBar, titleBar, SC_TitleBarCloseButton, widget); + QRect closeButtonRect = proxy()->subControlRect(CC_TitleBar, titleBar, SC_TitleBarCloseButton, widget); qt_plastique_draw_mdibutton(painter, titleBar, closeButtonRect, hover, sunken); int xoffset = closeButtonRect.width() / 3; @@ -4818,7 +4818,7 @@ void QPlastiqueStyle::drawComplexControl(ComplexControl control, const QStyleOpt bool hover = (titleBar->activeSubControls & SC_TitleBarNormalButton) && (titleBar->state & State_MouseOver); bool sunken = (titleBar->activeSubControls & SC_TitleBarNormalButton) && (titleBar->state & State_Sunken); - QRect normalButtonRect = subControlRect(CC_TitleBar, titleBar, SC_TitleBarNormalButton, widget); + QRect normalButtonRect = proxy()->subControlRect(CC_TitleBar, titleBar, SC_TitleBarNormalButton, widget); qt_plastique_draw_mdibutton(painter, titleBar, normalButtonRect, hover, sunken); int xoffset = int(normalButtonRect.width() / 3.5); int yoffset = int(normalButtonRect.height() / 3.5); @@ -4864,7 +4864,7 @@ void QPlastiqueStyle::drawComplexControl(ComplexControl control, const QStyleOpt bool hover = (titleBar->activeSubControls & SC_TitleBarContextHelpButton) && (titleBar->state & State_MouseOver); bool sunken = (titleBar->activeSubControls & SC_TitleBarContextHelpButton) && (titleBar->state & State_Sunken); - QRect contextHelpButtonRect = subControlRect(CC_TitleBar, titleBar, SC_TitleBarContextHelpButton, widget); + QRect contextHelpButtonRect = proxy()->subControlRect(CC_TitleBar, titleBar, SC_TitleBarContextHelpButton, widget); qt_plastique_draw_mdibutton(painter, titleBar, contextHelpButtonRect, hover, sunken); @@ -4891,7 +4891,7 @@ void QPlastiqueStyle::drawComplexControl(ComplexControl control, const QStyleOpt bool hover = (titleBar->activeSubControls & SC_TitleBarShadeButton) && (titleBar->state & State_MouseOver); bool sunken = (titleBar->activeSubControls & SC_TitleBarShadeButton) && (titleBar->state & State_Sunken); - QRect shadeButtonRect = subControlRect(CC_TitleBar, titleBar, SC_TitleBarShadeButton, widget); + QRect shadeButtonRect = proxy()->subControlRect(CC_TitleBar, titleBar, SC_TitleBarShadeButton, widget); qt_plastique_draw_mdibutton(painter, titleBar, shadeButtonRect, hover, sunken); int xoffset = shadeButtonRect.width() / 3; @@ -4915,7 +4915,7 @@ void QPlastiqueStyle::drawComplexControl(ComplexControl control, const QStyleOpt bool hover = (titleBar->activeSubControls & SC_TitleBarUnshadeButton) && (titleBar->state & State_MouseOver); bool sunken = (titleBar->activeSubControls & SC_TitleBarUnshadeButton) && (titleBar->state & State_Sunken); - QRect unshadeButtonRect = subControlRect(CC_TitleBar, titleBar, SC_TitleBarUnshadeButton, widget); + QRect unshadeButtonRect = proxy()->subControlRect(CC_TitleBar, titleBar, SC_TitleBarUnshadeButton, widget); qt_plastique_draw_mdibutton(painter, titleBar, unshadeButtonRect, hover, sunken); int xoffset = unshadeButtonRect.width() / 3; @@ -4940,7 +4940,7 @@ void QPlastiqueStyle::drawComplexControl(ComplexControl control, const QStyleOpt bool hover = (titleBar->activeSubControls & SC_TitleBarSysMenu) && (titleBar->state & State_MouseOver); bool sunken = (titleBar->activeSubControls & SC_TitleBarSysMenu) && (titleBar->state & State_Sunken); - QRect iconRect = subControlRect(CC_TitleBar, titleBar, SC_TitleBarSysMenu, widget); + QRect iconRect = proxy()->subControlRect(CC_TitleBar, titleBar, SC_TitleBarSysMenu, widget); if (hover) qt_plastique_draw_mdibutton(painter, titleBar, iconRect, hover, sunken); @@ -4952,7 +4952,7 @@ void QPlastiqueStyle::drawComplexControl(ComplexControl control, const QStyleOpt QPixmap pm = standardPixmap(SP_TitleBarMenuButton, &tool, widget); tool.rect = iconRect; painter->save(); - drawItemPixmap(painter, iconRect, Qt::AlignCenter, pm); + proxy()->drawItemPixmap(painter, iconRect, Qt::AlignCenter, pm); painter->restore(); } } @@ -4987,7 +4987,7 @@ QSize QPlastiqueStyle::sizeFromContents(ContentsType type, const QStyleOption *o #ifndef QT_NO_SLIDER case CT_Slider: if (const QStyleOptionSlider *slider = qstyleoption_cast(option)) { - int tickSize = pixelMetric(PM_SliderTickmarkOffset, option, widget); + int tickSize = proxy()->pixelMetric(PM_SliderTickmarkOffset, option, widget); if (slider->tickPosition & QSlider::TicksBelow) { if (slider->orientation == Qt::Horizontal) newSize.rheight() += tickSize; @@ -5006,8 +5006,8 @@ QSize QPlastiqueStyle::sizeFromContents(ContentsType type, const QStyleOption *o #ifndef QT_NO_SCROLLBAR case CT_ScrollBar: if (const QStyleOptionSlider *scrollBar = qstyleoption_cast(option)) { - int scrollBarExtent = pixelMetric(PM_ScrollBarExtent, option, widget); - int scrollBarSliderMinimum = pixelMetric(PM_ScrollBarSliderMin, option, widget); + int scrollBarExtent = proxy()->pixelMetric(PM_ScrollBarExtent, option, widget); + int scrollBarSliderMinimum = proxy()->pixelMetric(PM_ScrollBarSliderMin, option, widget); if (scrollBar->orientation == Qt::Horizontal) { newSize = QSize(scrollBarExtent * 3 + scrollBarSliderMinimum, scrollBarExtent); } else { @@ -5088,7 +5088,7 @@ QRect QPlastiqueStyle::subControlRect(ComplexControl control, const QStyleOption #ifndef QT_NO_SLIDER case CC_Slider: if (const QStyleOptionSlider *slider = qstyleoption_cast(option)) { - int tickSize = pixelMetric(PM_SliderTickmarkOffset, option, widget); + int tickSize = proxy()->pixelMetric(PM_SliderTickmarkOffset, option, widget); switch (subControl) { case SC_SliderHandle: @@ -5141,10 +5141,10 @@ QRect QPlastiqueStyle::subControlRect(ComplexControl control, const QStyleOption #ifndef QT_NO_SCROLLBAR case CC_ScrollBar: if (const QStyleOptionSlider *scrollBar = qstyleoption_cast(option)) { - int scrollBarExtent = pixelMetric(PM_ScrollBarExtent, scrollBar, widget); + int scrollBarExtent = proxy()->pixelMetric(PM_ScrollBarExtent, scrollBar, widget); int sliderMaxLength = ((scrollBar->orientation == Qt::Horizontal) ? scrollBar->rect.width() : scrollBar->rect.height()) - (scrollBarExtent * 3); - int sliderMinLength = pixelMetric(PM_ScrollBarSliderMin, scrollBar, widget); + int sliderMinLength = proxy()->pixelMetric(PM_ScrollBarSliderMin, scrollBar, widget); int sliderLength; // calculate slider length @@ -5266,7 +5266,7 @@ QRect QPlastiqueStyle::subControlRect(ComplexControl control, const QStyleOption break; case SC_ComboBoxEditField: { if (const QStyleOptionComboBox *box = qstyleoption_cast(option)) { - int frameWidth = pixelMetric(PM_DefaultFrameWidth); + int frameWidth = proxy()->pixelMetric(PM_DefaultFrameWidth); rect = visualRect(option->direction, option->rect, rect); if (box->editable) { @@ -5471,31 +5471,31 @@ QStyle::SubControl QPlastiqueStyle::hitTestComplexControl(ComplexControl control #ifndef QT_NO_SCROLLBAR case CC_ScrollBar: if (const QStyleOptionSlider *scrollBar = qstyleoption_cast(option)) { - QRect slider = subControlRect(control, scrollBar, SC_ScrollBarSlider, widget); + QRect slider = proxy()->subControlRect(control, scrollBar, SC_ScrollBarSlider, widget); if (slider.contains(pos)) { ret = SC_ScrollBarSlider; break; } - QRect scrollBarAddLine = subControlRect(control, scrollBar, SC_ScrollBarAddLine, widget); + QRect scrollBarAddLine = proxy()->subControlRect(control, scrollBar, SC_ScrollBarAddLine, widget); if (scrollBarAddLine.contains(pos)) { ret = SC_ScrollBarAddLine; break; } - QRect scrollBarSubPage = subControlRect(control, scrollBar, SC_ScrollBarSubPage, widget); + QRect scrollBarSubPage = proxy()->subControlRect(control, scrollBar, SC_ScrollBarSubPage, widget); if (scrollBarSubPage.contains(pos)) { ret = SC_ScrollBarSubPage; break; } - QRect scrollBarAddPage = subControlRect(control, scrollBar, SC_ScrollBarAddPage, widget); + QRect scrollBarAddPage = proxy()->subControlRect(control, scrollBar, SC_ScrollBarAddPage, widget); if (scrollBarAddPage.contains(pos)) { ret = SC_ScrollBarAddPage; break; } - QRect scrollBarSubLine = subControlRect(control, scrollBar, SC_ScrollBarSubLine, widget); + QRect scrollBarSubLine = proxy()->subControlRect(control, scrollBar, SC_ScrollBarSubLine, widget); if (scrollBarSubLine.contains(pos)) { ret = SC_ScrollBarSubLine; break; diff --git a/src/gui/styles/qstyle.cpp b/src/gui/styles/qstyle.cpp index 3fab682..c0fdc83 100644 --- a/src/gui/styles/qstyle.cpp +++ b/src/gui/styles/qstyle.cpp @@ -325,9 +325,10 @@ static int unpackControlTypes(QSizePolicy::ControlTypes controls, QSizePolicy::C QStyle::QStyle() : QObject(*new QStylePrivate) { + Q_D(QStyle); + d->proxyStyle = this; } - /*! \internal @@ -336,6 +337,8 @@ QStyle::QStyle() QStyle::QStyle(QStylePrivate &dd) : QObject(dd) { + Q_D(QStyle); + d->proxyStyle = this; } /*! @@ -2444,4 +2447,33 @@ QDebug operator<<(QDebug debug, QStyle::State state) } #endif +/*! + \since 4.6 + + \fn const QStyle * proxy() const + + This function returns the current proxy for this style. + By default most styles will return themselves. However + when a proxy style is in use, it will allow the style to + call back into its proxy. + + \sa setProxyStyle +*/ +const QStyle * QStyle::proxy() const +{ + Q_D(const QStyle); + return d->proxyStyle; +} + +/* \internal + + This function sets the base style that style calls will be + redirected to. Note that ownership is not transferred. +*/ +void QStyle::setProxy(QStyle *style) +{ + Q_D(QStyle); + d->proxyStyle = style; +} + QT_END_NAMESPACE diff --git a/src/gui/styles/qstyle.h b/src/gui/styles/qstyle.h index cc92459..eec3326 100644 --- a/src/gui/styles/qstyle.h +++ b/src/gui/styles/qstyle.h @@ -848,6 +848,8 @@ public: QSizePolicy::ControlTypes controls2, Qt::Orientation orientation, QStyleOption *option = 0, QWidget *widget = 0) const; + const QStyle * proxy() const; + protected Q_SLOTS: QIcon standardIconImplementation(StandardPixmap standardIcon, const QStyleOption *opt = 0, const QWidget *widget = 0) const; @@ -862,6 +864,9 @@ private: friend class QWidget; friend class QWidgetPrivate; friend class QApplication; + friend class QProxyStyle; + friend class QProxyStylePrivate; + void setProxy(QStyle *style); }; Q_DECLARE_OPERATORS_FOR_FLAGS(QStyle::State) diff --git a/src/gui/styles/qstyle_p.h b/src/gui/styles/qstyle_p.h index 154321a..4cf20f0 100644 --- a/src/gui/styles/qstyle_p.h +++ b/src/gui/styles/qstyle_p.h @@ -43,6 +43,7 @@ #define QSTYLE_P_H #include "private/qobject_p.h" +#include QT_BEGIN_NAMESPACE @@ -51,22 +52,24 @@ QT_BEGIN_NAMESPACE // ------------- // // This file is not part of the Qt API. It exists for the convenience -// of qapplication_*.cpp, qwidget*.cpp and qfiledialog.cpp. This header -// file may change from version to version without notice, or even be removed. +// of qstyle_*.cpp. This header file may change from version to version +// without notice, or even be removed. // // We mean it. // // Private class +class QStyle; + class QStylePrivate: public QObjectPrivate { - Q_DECLARE_PUBLIC(QStyle) + Q_DECLARE_PUBLIC(QStyle); public: inline QStylePrivate() - : layoutSpacingIndex(-1) - { } + : layoutSpacingIndex(-1), proxyStyle(0) {} mutable int layoutSpacingIndex; + QStyle *proxyStyle; }; @@ -89,6 +92,7 @@ public: } + #define END_STYLE_PIXMAPCACHE \ if (doPixmapCache) { \ p->end(); \ diff --git a/src/gui/styles/qwindowsstyle.cpp b/src/gui/styles/qwindowsstyle.cpp index bf3a3cb..c816907 100644 --- a/src/gui/styles/qwindowsstyle.cpp +++ b/src/gui/styles/qwindowsstyle.cpp @@ -304,7 +304,7 @@ void QWindowsStyle::polish(QApplication *app) QCommonStyle::polish(app); QWindowsStylePrivate *d = const_cast(d_func()); // We only need the overhead when shortcuts are sometimes hidden - if (!styleHint(SH_UnderlineShortcut, 0) && app) + if (!proxy()->styleHint(SH_UnderlineShortcut, 0) && app) app->installEventFilter(this); d->activeCaptionColor = app->palette().highlight().color(); @@ -427,7 +427,7 @@ int QWindowsStyle::pixelMetric(PixelMetric pm, const QStyleOption *opt, const QW int thick = 6; // Magic constant to get 5 + 16 + 5 if (ticks != QSlider::TicksBothSides && ticks != QSlider::NoTicks) - thick += pixelMetric(PM_SliderLength, sl, widget) / 4; + thick += proxy()->pixelMetric(PM_SliderLength, sl, widget) / 4; space -= thick; if (space > 0) @@ -461,7 +461,7 @@ int QWindowsStyle::pixelMetric(PixelMetric pm, const QStyleOption *opt, const QW break; case PM_IconViewIconSize: - ret = pixelMetric(PM_LargeIconSize, opt, widget); + ret = proxy()->pixelMetric(PM_LargeIconSize, opt, widget); break; case PM_ToolBarIconSize: @@ -1423,8 +1423,8 @@ void QWindowsStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, int bsy = 0; if (opt->state & State_Sunken) { - bsx = pixelMetric(PM_ButtonShiftHorizontal, opt, w); - bsy = pixelMetric(PM_ButtonShiftVertical, opt, w); + bsx = proxy()->pixelMetric(PM_ButtonShiftHorizontal, opt, w); + bsy = proxy()->pixelMetric(PM_ButtonShiftVertical, opt, w); } QRect bounds = a.boundingRect(); @@ -1513,7 +1513,7 @@ void QWindowsStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, case PE_FrameFocusRect: if (const QStyleOptionFocusRect *fropt = qstyleoption_cast(opt)) { //### check for d->alt_down - if (!(fropt->state & State_KeyboardFocusChange) && !styleHint(SH_UnderlineShortcut, opt)) + if (!(fropt->state & State_KeyboardFocusChange) && !proxy()->styleHint(SH_UnderlineShortcut, opt)) return; QRect r = opt->rect; p->save(); @@ -1580,8 +1580,8 @@ void QWindowsStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, //center when rect is larger than indicator size int xOffset = 0; int yOffset = 0; - int indicatorWidth = pixelMetric(PM_ExclusiveIndicatorWidth); - int indicatorHeight = pixelMetric(PM_ExclusiveIndicatorWidth); + int indicatorWidth = proxy()->pixelMetric(PM_ExclusiveIndicatorWidth); + int indicatorHeight = proxy()->pixelMetric(PM_ExclusiveIndicatorWidth); if (ir.width() > indicatorWidth) xOffset += (ir.width() - indicatorWidth)/2; if (ir.height() > indicatorHeight) @@ -1738,7 +1738,7 @@ void QWindowsStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, break; } case PE_FrameDockWidget: if (qstyleoption_cast(opt)) { - drawPrimitive(QStyle::PE_FrameWindow, opt, p, w); + proxy()->drawPrimitive(QStyle::PE_FrameWindow, opt, p, w); } break; #endif // QT_NO_DOCKWIDGET @@ -1757,7 +1757,7 @@ case PE_FrameDockWidget: } int space = 2; - int chunksize = pixelMetric(PM_ProgressBarChunkWidth, opt, w) - space; + int chunksize = proxy()->pixelMetric(PM_ProgressBarChunkWidth, opt, w) - space; if (!vertical) { if (opt->rect.width() <= chunksize) space = 0; @@ -1816,7 +1816,7 @@ void QWindowsStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPai p->save(); QRect r = opt->rect; QStyleHintReturnMask mask; - if (styleHint(QStyle::SH_RubberBand_Mask, opt, widget, &mask)) + if (proxy()->styleHint(QStyle::SH_RubberBand_Mask, opt, widget, &mask)) p->setClipRegion(mask.region); p->drawTiledPixmap(r.x(), r.y(), r.width(), r.height(), tiledPixmap); p->restore(); @@ -1885,9 +1885,9 @@ void QWindowsStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPai mode = QIcon::Active; QPixmap pixmap; if (checked) - pixmap = menuitem->icon.pixmap(pixelMetric(PM_SmallIconSize, opt, widget), mode, QIcon::On); + pixmap = menuitem->icon.pixmap(proxy()->pixelMetric(PM_SmallIconSize, opt, widget), mode, QIcon::On); else - pixmap = menuitem->icon.pixmap(pixelMetric(PM_SmallIconSize, opt, widget), mode); + pixmap = menuitem->icon.pixmap(proxy()->pixelMetric(PM_SmallIconSize, opt, widget), mode); int pixw = pixmap.width(); int pixh = pixmap.height(); if (act && !dis && !checked) @@ -1906,7 +1906,7 @@ void QWindowsStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPai newMi.state |= State_On; newMi.rect = visualRect(opt->direction, menuitem->rect, QRect(menuitem->rect.x() + windowsItemFrame, menuitem->rect.y() + windowsItemFrame, checkcol - 2 * windowsItemFrame, menuitem->rect.height() - 2*windowsItemFrame)); - drawPrimitive(PE_IndicatorMenuCheckMark, &newMi, p, widget); + proxy()->drawPrimitive(PE_IndicatorMenuCheckMark, &newMi, p, widget); } p->setPen(act ? menuitem->palette.highlightedText().color() : menuitem->palette.buttonText().color()); @@ -1925,13 +1925,13 @@ void QWindowsStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPai p->save(); int t = s.indexOf(QLatin1Char('\t')); int text_flags = Qt::AlignVCenter | Qt::TextShowMnemonic | Qt::TextDontClip | Qt::TextSingleLine; - if (!styleHint(SH_UnderlineShortcut, menuitem, widget)) + if (!proxy()->styleHint(SH_UnderlineShortcut, menuitem, widget)) text_flags |= Qt::TextHideMnemonic; text_flags |= Qt::AlignLeft; if (t >= 0) { QRect vShortcutRect = visualRect(opt->direction, menuitem->rect, QRect(textRect.topRight(), QPoint(menuitem->rect.right(), textRect.bottom()))); - if (dis && !act && styleHint(SH_EtchDisabledText, opt, widget)) { + if (dis && !act && proxy()->styleHint(SH_EtchDisabledText, opt, widget)) { p->setPen(menuitem->palette.light().color()); p->drawText(vShortcutRect.adjusted(1,1,1,1), text_flags, s.mid(t + 1)); p->setPen(discol); @@ -1943,7 +1943,7 @@ void QWindowsStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPai if (menuitem->menuItemType == QStyleOptionMenuItem::DefaultItem) font.setBold(true); p->setFont(font); - if (dis && !act && styleHint(SH_EtchDisabledText, opt, widget)) { + if (dis && !act && proxy()->styleHint(SH_EtchDisabledText, opt, widget)) { p->setPen(menuitem->palette.light().color()); p->drawText(vTextRect.adjusted(1,1,1,1), text_flags, s.left(t)); p->setPen(discol); @@ -1963,7 +1963,7 @@ void QWindowsStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPai if (act) newMI.palette.setColor(QPalette::ButtonText, newMI.palette.highlightedText().color()); - drawPrimitive(arrow, &newMI, p, widget); + proxy()->drawPrimitive(arrow, &newMI, p, widget); } } @@ -1985,8 +1985,8 @@ void QWindowsStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPai qDrawShadeRect(p, mbi->rect.x(), mbi->rect.y(), mbi->rect.width(), mbi->rect.height(), mbi->palette, active && down, 1, 0, &b); if (active && down) { - newMbi.rect.translate(pixelMetric(PM_ButtonShiftHorizontal, mbi, widget), - pixelMetric(PM_ButtonShiftVertical, mbi, widget)); + newMbi.rect.translate(proxy()->pixelMetric(PM_ButtonShiftHorizontal, mbi, widget), + proxy()->pixelMetric(PM_ButtonShiftVertical, mbi, widget)); p->setBrushOrigin(p->brushOrigin() - QPoint(1, 1)); } } @@ -2020,7 +2020,7 @@ void QWindowsStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPai || (rtlHorTabs && tab->selectedPosition == QStyleOptionTab::PreviousIsSelected)); - int tabBarAlignment = styleHint(SH_TabBar_Alignment, tab, widget); + int tabBarAlignment = proxy()->styleHint(SH_TabBar_Alignment, tab, widget); bool leftAligned = (!rtlHorTabs && tabBarAlignment == Qt::AlignLeft) || (rtlHorTabs && tabBarAlignment == Qt::AlignRight); @@ -2034,7 +2034,7 @@ void QWindowsStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPai QColor dark = tab->palette.dark().color(); QColor shadow = tab->palette.shadow().color(); QColor background = tab->palette.background().color(); - int borderThinkness = pixelMetric(PM_TabBarBaseOverlap, tab, widget); + int borderThinkness = proxy()->pixelMetric(PM_TabBarBaseOverlap, tab, widget); if (selected) borderThinkness /= 2; QRect r2(opt->rect); @@ -2266,7 +2266,7 @@ void QWindowsStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPai } QStyleOption arrowOpt = *opt; arrowOpt.rect = opt->rect.adjusted(4, 4, -4, -4); - drawPrimitive(arrow, &arrowOpt, p, widget); + proxy()->drawPrimitive(arrow, &arrowOpt, p, widget); break; } case CE_ScrollBarAddPage: case CE_ScrollBarSubPage: { @@ -2452,7 +2452,7 @@ void QWindowsStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPai int w = rect.width(); if (pb->minimum == 0 && pb->maximum == 0) { Q_D(const QWindowsStyle); - const int unit_width = pixelMetric(PM_ProgressBarChunkWidth, pb, widget); + const int unit_width = proxy()->pixelMetric(PM_ProgressBarChunkWidth, pb, widget); QStyleOptionProgressBarV2 pbBits = *pb; Q_ASSERT(unit_width >0); @@ -2476,7 +2476,7 @@ void QWindowsStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPai for (int i = 0; i < chunksToDraw ; ++i) { pbBits.rect.setRect(x0 + x, myY, unit_width, myHeight); pbBits.rect = m.mapRect(QRectF(pbBits.rect)).toRect(); - drawPrimitive(PE_IndicatorProgressChunk, &pbBits, p, widget); + proxy()->drawPrimitive(PE_IndicatorProgressChunk, &pbBits, p, widget); x += reverse ? -unit_width : unit_width; } //Draw wrap-around chunks @@ -2487,7 +2487,7 @@ void QWindowsStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPai for (int i = 0; i < chunksToDraw ; ++i) { pbBits.rect.setRect(x0 + x, myY, unit_width, myHeight); pbBits.rect = m.mapRect(QRectF(pbBits.rect)).toRect(); - drawPrimitive(PE_IndicatorProgressChunk, &pbBits, p, widget); + proxy()->drawPrimitive(PE_IndicatorProgressChunk, &pbBits, p, widget); x += reverse ? -unit_width : unit_width; } } @@ -2575,7 +2575,7 @@ void QWindowsStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPai r.top() + titleRect.left() - rect.left(), titleRect.height(), titleRect.width()); } - drawItemText(p, titleRect, + proxy()->drawItemText(p, titleRect, Qt::AlignLeft | Qt::AlignVCenter | Qt::TextShowMnemonic, palette, dwOpt->state & State_Enabled, dwOpt->title, floating ? (active ? QPalette::BrightText : QPalette::Window) : QPalette::WindowText); @@ -2605,7 +2605,7 @@ QRect QWindowsStyle::subElementRect(SubElement sr, const QStyleOption *opt, cons const QStyleOptionDockWidgetV2 *v2 = qstyleoption_cast(opt); bool verticalTitleBar = v2 == 0 ? false : v2->verticalTitleBar; - int m = pixelMetric(PM_DockWidgetTitleMargin, opt, w); + int m = proxy()->pixelMetric(PM_DockWidgetTitleMargin, opt, w); if (verticalTitleBar) { r.adjust(0, 0, 0, -m); } else { @@ -2639,11 +2639,11 @@ void QWindowsStyle::drawComplexControl(ComplexControl cc, const QStyleOptionComp #ifndef QT_NO_SLIDER case CC_Slider: if (const QStyleOptionSlider *slider = qstyleoption_cast(opt)) { - int thickness = pixelMetric(PM_SliderControlThickness, slider, widget); - int len = pixelMetric(PM_SliderLength, slider, widget); + int thickness = proxy()->pixelMetric(PM_SliderControlThickness, slider, widget); + int len = proxy()->pixelMetric(PM_SliderLength, slider, widget); int ticks = slider->tickPosition; - QRect groove = subControlRect(CC_Slider, slider, SC_SliderGroove, widget); - QRect handle = subControlRect(CC_Slider, slider, SC_SliderHandle, widget); + QRect groove = proxy()->subControlRect(CC_Slider, slider, SC_SliderGroove, widget); + QRect handle = proxy()->subControlRect(CC_Slider, slider, SC_SliderHandle, widget); if ((slider->subControls & SC_SliderGroove) && groove.isValid()) { int mid = thickness / 2; @@ -2714,7 +2714,7 @@ void QWindowsStyle::drawComplexControl(ComplexControl cc, const QStyleOptionComp QStyleOptionFocusRect fropt; fropt.QStyleOption::operator=(*slider); fropt.rect = subElementRect(SE_SliderFocusRect, slider, widget); - drawPrimitive(PE_FrameFocusRect, &fropt, p, widget); + proxy()->drawPrimitive(PE_FrameFocusRect, &fropt, p, widget); } if ((tickAbove && tickBelow) || (!tickAbove && !tickBelow)) { @@ -3037,7 +3037,7 @@ void QWindowsStyle::drawComplexControl(ComplexControl cc, const QStyleOptionComp if (cmb->subControls & SC_ComboBoxArrow) { State flags = State_None; - QRect ar = subControlRect(CC_ComboBox, cmb, SC_ComboBoxArrow, widget); + QRect ar = proxy()->subControlRect(CC_ComboBox, cmb, SC_ComboBoxArrow, widget); bool sunkenArrow = cmb->activeSubControls == SC_ComboBoxArrow && cmb->state & State_Sunken; if (sunkenArrow) { @@ -3063,11 +3063,11 @@ void QWindowsStyle::drawComplexControl(ComplexControl cc, const QStyleOptionComp arrowOpt.rect = ar.adjusted(1, 1, -1, -1); arrowOpt.palette = cmb->palette; arrowOpt.state = flags; - drawPrimitive(PE_IndicatorArrowDown, &arrowOpt, p, widget); + proxy()->drawPrimitive(PE_IndicatorArrowDown, &arrowOpt, p, widget); } if (cmb->subControls & SC_ComboBoxEditField) { - QRect re = subControlRect(CC_ComboBox, cmb, SC_ComboBoxEditField, widget); + QRect re = proxy()->subControlRect(CC_ComboBox, cmb, SC_ComboBoxEditField, widget); if (cmb->state & State_HasFocus && !cmb->editable) p->fillRect(re.x(), re.y(), re.width(), re.height(), cmb->palette.brush(QPalette::Highlight)); @@ -3087,7 +3087,7 @@ void QWindowsStyle::drawComplexControl(ComplexControl cc, const QStyleOptionComp focus.rect = subElementRect(SE_ComboBoxFocusRect, cmb, widget); focus.state |= State_FocusAtBorder; focus.backgroundColor = cmb->palette.highlight().color(); - drawPrimitive(PE_FrameFocusRect, &focus, p, widget); + proxy()->drawPrimitive(PE_FrameFocusRect, &focus, p, widget); } } } @@ -3101,7 +3101,7 @@ void QWindowsStyle::drawComplexControl(ComplexControl cc, const QStyleOptionComp bool enabled = opt->state & State_Enabled; if (sb->frame && (sb->subControls & SC_SpinBoxFrame)) { QBrush editBrush = sb->palette.brush(QPalette::Base); - QRect r = subControlRect(CC_SpinBox, sb, SC_SpinBoxFrame, widget); + QRect r = proxy()->subControlRect(CC_SpinBox, sb, SC_SpinBoxFrame, widget); QPalette shadePal = sb->palette; if (use2000style) shadePal.setColor(QPalette::Midlight, shadePal.button().color()); @@ -3132,7 +3132,7 @@ void QWindowsStyle::drawComplexControl(ComplexControl cc, const QStyleOptionComp pe = (sb->buttonSymbols == QAbstractSpinBox::PlusMinus ? PE_IndicatorSpinPlus : PE_IndicatorSpinUp); - copy.rect = subControlRect(CC_SpinBox, sb, SC_SpinBoxUp, widget); + copy.rect = proxy()->subControlRect(CC_SpinBox, sb, SC_SpinBoxUp, widget); qDrawWinButton(p, copy.rect, shadePal, copy.state & (State_Sunken | State_On), ©.palette.brush(QPalette::Button)); copy.rect.adjust(4, 1, -5, -1); @@ -3140,9 +3140,9 @@ void QWindowsStyle::drawComplexControl(ComplexControl cc, const QStyleOptionComp QStyleOptionSpinBox lightCopy = copy; lightCopy.rect.adjust(1, 1, 1, 1); lightCopy.palette.setBrush(QPalette::ButtonText, copy.palette.light()); - drawPrimitive(pe, &lightCopy, p, widget); + proxy()->drawPrimitive(pe, &lightCopy, p, widget); } - drawPrimitive(pe, ©, p, widget); + proxy()->drawPrimitive(pe, ©, p, widget); } if (sb->subControls & SC_SpinBoxDown) { @@ -3165,7 +3165,7 @@ void QWindowsStyle::drawComplexControl(ComplexControl cc, const QStyleOptionComp pe = (sb->buttonSymbols == QAbstractSpinBox::PlusMinus ? PE_IndicatorSpinMinus : PE_IndicatorSpinDown); - copy.rect = subControlRect(CC_SpinBox, sb, SC_SpinBoxDown, widget); + copy.rect = proxy()->subControlRect(CC_SpinBox, sb, SC_SpinBoxDown, widget); qDrawWinButton(p, copy.rect, shadePal, copy.state & (State_Sunken | State_On), ©.palette.brush(QPalette::Button)); copy.rect.adjust(4, 0, -5, -1); @@ -3173,9 +3173,9 @@ void QWindowsStyle::drawComplexControl(ComplexControl cc, const QStyleOptionComp QStyleOptionSpinBox lightCopy = copy; lightCopy.rect.adjust(1, 1, 1, 1); lightCopy.palette.setBrush(QPalette::ButtonText, copy.palette.light()); - drawPrimitive(pe, &lightCopy, p, widget); + proxy()->drawPrimitive(pe, &lightCopy, p, widget); } - drawPrimitive(pe, ©, p, widget); + proxy()->drawPrimitive(pe, ©, p, widget); } } break; @@ -3199,7 +3199,7 @@ QSize QWindowsStyle::sizeFromContents(ContentsType ct, const QStyleOption *opt, h = sz.height(); int defwidth = 0; if (btn->features & QStyleOptionButton::AutoDefaultButton) - defwidth = 2 * pixelMetric(PM_ButtonDefaultIndicator, btn, widget); + defwidth = 2 * proxy()->pixelMetric(PM_ButtonDefaultIndicator, btn, widget); #ifndef QT_QWS_SMALL_PUSHBUTTON if (w < 75 + defwidth && !btn->text.isEmpty()) w = 75 + defwidth; @@ -3224,7 +3224,7 @@ QSize QWindowsStyle::sizeFromContents(ContentsType ct, const QStyleOption *opt, } if (mi->menuItemType != QStyleOptionMenuItem::Separator && !mi->icon.isNull()) { - int iconExtent = pixelMetric(PM_SmallIconSize, opt, widget); + int iconExtent = proxy()->pixelMetric(PM_SmallIconSize, opt, widget); sz.setHeight(qMax(sz.height(), mi->icon.actualSize(QSize(iconExtent, iconExtent)).height() + 2 * windowsItemFrame)); @@ -3384,7 +3384,7 @@ QIcon QWindowsStyle::standardIconImplementation(StandardPixmap standardIcon, con && QSysInfo::WindowsVersion < QSysInfo::WV_NT_based && pSHGetStockIconInfo) { - icon.addPixmap(standardPixmap(SP_VistaShield, option, widget)); //fetches small icon + icon.addPixmap(proxy()->standardPixmap(SP_VistaShield, option, widget)); //fetches small icon QSHSTOCKICONINFO iconInfo; //append large icon memset(&iconInfo, 0, sizeof(iconInfo)); iconInfo.cbSize = sizeof(iconInfo); diff --git a/src/gui/styles/qwindowsvistastyle.cpp b/src/gui/styles/qwindowsvistastyle.cpp index 9ea9a03..be76b24 100644 --- a/src/gui/styles/qwindowsvistastyle.cpp +++ b/src/gui/styles/qwindowsvistastyle.cpp @@ -403,7 +403,7 @@ void QWindowsVistaStyle::drawPrimitive(PrimitiveElement element, const QStyleOpt // pulsating default button into the intended target state. if (!anim) - drawPrimitive(element, &opt, &startPainter, 0); // Note that the widget pointer is intentionally 0 + proxy()->drawPrimitive(element, &opt, &startPainter, 0); // Note that the widget pointer is intentionally 0 else // this ensures that we do not recurse in the animation logic above anim->paint(&startPainter, &opt); @@ -417,7 +417,7 @@ void QWindowsVistaStyle::drawPrimitive(PrimitiveElement element, const QStyleOpt endImage.fill(0); QStyleOption opt2 = opt; opt2.state = option->state; - drawPrimitive(element, &opt2, &endPainter, 0); // Note that the widget pointer is intentionally 0 + proxy()->drawPrimitive(element, &opt2, &endPainter, 0); // Note that the widget pointer is intentionally 0 // this ensures that we do not recurse in the animation logic above t->setEndImage(endImage); @@ -645,7 +645,7 @@ void QWindowsVistaStyle::drawPrimitive(PrimitiveElement element, const QStyleOpt } } if (panel->lineWidth > 0) - drawPrimitive(PE_FrameLineEdit, panel, painter, widget); + proxy()->drawPrimitive(PE_FrameLineEdit, panel, painter, widget); return; } break; @@ -934,7 +934,7 @@ void QWindowsVistaStyle::drawControl(ControlElement element, const QStyleOption QPainter startPainter(&startImage); if (!anim) { - drawControl(element, &opt, &startPainter, 0 /* Intentional */); + proxy()->drawControl(element, &opt, &startPainter, 0 /* Intentional */); } else { anim->paint(&startPainter, &opt); d->stopAnimation(widget); @@ -945,7 +945,7 @@ void QWindowsVistaStyle::drawControl(ControlElement element, const QStyleOption endImage.fill(0); QPainter endPainter(&endImage); - drawControl(element, option, &endPainter, 0 /* Intentional */); + proxy()->drawControl(element, option, &endPainter, 0 /* Intentional */); t->setEndImage(endImage); int duration = 0; HTHEME theme = pOpenThemeData(0, L"Button"); @@ -1049,7 +1049,7 @@ void QWindowsVistaStyle::drawControl(ControlElement element, const QStyleOption newBtn.rect = QStyle::visualRect(option->direction, option->rect, QRect(ir.right() - mbiw - 2, (option->rect.height()/2) - (mbih/2), mbiw + 1, mbih + 1)); - drawPrimitive(PE_IndicatorArrowDown, &newBtn, painter, widget); + proxy()->drawPrimitive(PE_IndicatorArrowDown, &newBtn, painter, widget); } return; } @@ -1197,10 +1197,10 @@ void QWindowsVistaStyle::drawControl(ControlElement element, const QStyleOption break; QPalette::ColorRole textRole = disabled ? QPalette::Text : QPalette::ButtonText; - QPixmap pix = mbi->icon.pixmap(pixelMetric(PM_SmallIconSize, option, widget), QIcon::Normal); + QPixmap pix = mbi->icon.pixmap(proxy()->pixelMetric(PM_SmallIconSize, option, widget), QIcon::Normal); uint alignment = Qt::AlignCenter | Qt::TextShowMnemonic | Qt::TextDontClip | Qt::TextSingleLine; - if (!styleHint(SH_UnderlineShortcut, mbi, widget)) + if (!proxy()->styleHint(SH_UnderlineShortcut, mbi, widget)) alignment |= Qt::TextHideMnemonic; //The rect adjustment is a workaround for the menu not really filling its background. @@ -1292,9 +1292,9 @@ void QWindowsVistaStyle::drawControl(ControlElement element, const QStyleOption mode = QIcon::Active; QPixmap pixmap; if (checked) - pixmap = menuitem->icon.pixmap(pixelMetric(PM_SmallIconSize, option, widget), mode, QIcon::On); + pixmap = menuitem->icon.pixmap(proxy()->pixelMetric(PM_SmallIconSize, option, widget), mode, QIcon::On); else - pixmap = menuitem->icon.pixmap(pixelMetric(PM_SmallIconSize, option, widget), mode); + pixmap = menuitem->icon.pixmap(proxy()->pixelMetric(PM_SmallIconSize, option, widget), mode); int pixw = pixmap.width(); int pixh = pixmap.height(); QRect pmr(0, 0, pixw, pixh); @@ -1320,7 +1320,7 @@ void QWindowsVistaStyle::drawControl(ControlElement element, const QStyleOption painter->save(); int t = s.indexOf(QLatin1Char('\t')); int text_flags = Qt::AlignVCenter | Qt::TextShowMnemonic | Qt::TextDontClip | Qt::TextSingleLine; - if (!styleHint(SH_UnderlineShortcut, menuitem, widget)) + if (!proxy()->styleHint(SH_UnderlineShortcut, menuitem, widget)) text_flags |= Qt::TextHideMnemonic; text_flags |= Qt::AlignLeft; if (t >= 0) { @@ -1346,7 +1346,7 @@ void QWindowsVistaStyle::drawControl(ControlElement element, const QStyleOption QStyleOptionMenuItem newMI = *menuitem; newMI.rect = vSubMenuRect; newMI.state = dis ? State_None : State_Enabled; - drawPrimitive(arrow, &newMI, painter, widget); + proxy()->drawPrimitive(arrow, &newMI, painter, widget); } } break; @@ -1416,8 +1416,8 @@ void QWindowsVistaStyle::drawControl(ControlElement element, const QStyleOption painter->drawRect(rect.adjusted(0, 1, -1, -3)); int buttonMargin = 4; - int mw = pixelMetric(QStyle::PM_DockWidgetTitleMargin, dwOpt, widget); - int fw = pixelMetric(PM_DockWidgetFrameWidth, dwOpt, widget); + int mw = proxy()->pixelMetric(QStyle::PM_DockWidgetTitleMargin, dwOpt, widget); + int fw = proxy()->pixelMetric(PM_DockWidgetFrameWidth, dwOpt, widget); const QDockWidget *dw = qobject_cast(widget); bool isFloating = dw != 0 && dw->isFloating(); @@ -1556,7 +1556,7 @@ void QWindowsVistaStyle::drawComplexControl(ComplexControl control, const QStyle if (qstyleoption_cast(option)) { QRect oldSliderPos = w->property("_q_stylesliderpos").toRect(); - QRect currentPos = subControlRect(CC_ScrollBar, option, SC_ScrollBarSlider, widget); + QRect currentPos = proxy()->subControlRect(CC_ScrollBar, option, SC_ScrollBarSlider, widget); w->setProperty("_q_stylesliderpos", currentPos); if (oldSliderPos != currentPos) { doTransition = false; @@ -1587,7 +1587,7 @@ void QWindowsVistaStyle::drawComplexControl(ComplexControl control, const QStyle QStyleOptionComboBox startCombo = *combo; startCombo.state = (QStyle::State)oldState; startCombo.activeSubControls = (QStyle::SubControl)oldActiveControls; - drawComplexControl(control, &startCombo, &startPainter, 0 /* Intentional */); + proxy()->drawComplexControl(control, &startCombo, &startPainter, 0 /* Intentional */); t->setStartImage(startImage); } else if (const QStyleOptionSlider *slider = qstyleoption_cast(option)) { //This is a workaround for the direct3d engine as it currently has some issues with grabWindow @@ -1596,7 +1596,7 @@ void QWindowsVistaStyle::drawComplexControl(ComplexControl control, const QStyle QStyleOptionSlider startSlider = *slider; startSlider.state = (QStyle::State)oldState; startSlider.activeSubControls = (QStyle::SubControl)oldActiveControls; - drawComplexControl(control, &startSlider, &startPainter, 0 /* Intentional */); + proxy()->drawComplexControl(control, &startSlider, &startPainter, 0 /* Intentional */); t->setStartImage(startImage); } else { QPoint offset(0, 0); @@ -1614,7 +1614,7 @@ void QWindowsVistaStyle::drawComplexControl(ComplexControl control, const QStyle d->startAnimation(t); endImage.fill(0); QPainter endPainter(&endImage); - drawComplexControl(control, option, &endPainter, 0 /* Intentional */); + proxy()->drawComplexControl(control, option, &endPainter, 0 /* Intentional */); t->setEndImage(endImage); t->setStartTime(QTime::currentTime()); @@ -1653,9 +1653,9 @@ void QWindowsVistaStyle::drawComplexControl(ComplexControl control, const QStyle d->drawBackground(theme); } if (sub & SC_ComboBoxArrow) { - QRect subRect = subControlRect(CC_ComboBox, option, SC_ComboBoxArrow, widget); + QRect subRect = proxy()->subControlRect(CC_ComboBox, option, SC_ComboBoxArrow, widget); XPThemeData theme(widget, painter, QLatin1String("COMBOBOX")); - theme.rect = subControlRect(CC_ComboBox, option, SC_ComboBoxArrow, widget); + theme.rect = proxy()->subControlRect(CC_ComboBox, option, SC_ComboBoxArrow, widget); partId = option->direction == Qt::RightToLeft ? CP_DROPDOWNBUTTONLEFT : CP_DROPDOWNBUTTONRIGHT; if (!(cmb->state & State_Enabled)) @@ -1679,7 +1679,7 @@ void QWindowsVistaStyle::drawComplexControl(ComplexControl control, const QStyle btn.rect = option->rect.adjusted(-1, -1, 1, 1); if (sub & SC_ComboBoxArrow) btn.features = QStyleOptionButton::HasMenu; - drawControl(QStyle::CE_PushButton, &btn, painter, widget); + proxy()->drawControl(QStyle::CE_PushButton, &btn, painter, widget); } } } @@ -1696,7 +1696,7 @@ void QWindowsVistaStyle::drawComplexControl(ComplexControl control, const QStyle bool isHorz = flags & State_Horizontal; bool isRTL = option->direction == Qt::RightToLeft; if (sub & SC_ScrollBarAddLine) { - theme.rect = subControlRect(CC_ScrollBar, option, SC_ScrollBarAddLine, widget); + theme.rect = proxy()->subControlRect(CC_ScrollBar, option, SC_ScrollBarAddLine, widget); partId = SBP_ARROWBTN; if (!(flags & State_Enabled)) stateId = (isHorz ? (isRTL ? ABS_LEFTDISABLED : ABS_RIGHTDISABLED) : ABS_DOWNDISABLED); @@ -1713,7 +1713,7 @@ void QWindowsVistaStyle::drawComplexControl(ComplexControl control, const QStyle d->drawBackground(theme); } if (sub & SC_ScrollBarSubLine) { - theme.rect = subControlRect(CC_ScrollBar, option, SC_ScrollBarSubLine, widget); + theme.rect = proxy()->subControlRect(CC_ScrollBar, option, SC_ScrollBarSubLine, widget); partId = SBP_ARROWBTN; if (!(flags & State_Enabled)) stateId = (isHorz ? (isRTL ? ABS_RIGHTDISABLED : ABS_LEFTDISABLED) : ABS_UPDISABLED); @@ -1730,9 +1730,9 @@ void QWindowsVistaStyle::drawComplexControl(ComplexControl control, const QStyle d->drawBackground(theme); } if (maxedOut) { - theme.rect = subControlRect(CC_ScrollBar, option, SC_ScrollBarSlider, widget); - theme.rect = theme.rect.united(subControlRect(CC_ScrollBar, option, SC_ScrollBarSubPage, widget)); - theme.rect = theme.rect.united(subControlRect(CC_ScrollBar, option, SC_ScrollBarAddPage, widget)); + theme.rect = proxy()->subControlRect(CC_ScrollBar, option, SC_ScrollBarSlider, widget); + theme.rect = theme.rect.united(proxy()->subControlRect(CC_ScrollBar, option, SC_ScrollBarSubPage, widget)); + theme.rect = theme.rect.united(proxy()->subControlRect(CC_ScrollBar, option, SC_ScrollBarAddPage, widget)); partId = flags & State_Horizontal ? SBP_LOWERTRACKHORZ : SBP_LOWERTRACKVERT; stateId = SCRBS_DISABLED; theme.partId = partId; @@ -1740,7 +1740,7 @@ void QWindowsVistaStyle::drawComplexControl(ComplexControl control, const QStyle d->drawBackground(theme); } else { if (sub & SC_ScrollBarSubPage) { - theme.rect = subControlRect(CC_ScrollBar, option, SC_ScrollBarSubPage, widget); + theme.rect = proxy()->subControlRect(CC_ScrollBar, option, SC_ScrollBarSubPage, widget); partId = flags & State_Horizontal ? SBP_UPPERTRACKHORZ : SBP_UPPERTRACKVERT; if (!(flags & State_Enabled)) stateId = SCRBS_DISABLED; @@ -1755,7 +1755,7 @@ void QWindowsVistaStyle::drawComplexControl(ComplexControl control, const QStyle d->drawBackground(theme); } if (sub & SC_ScrollBarAddPage) { - theme.rect = subControlRect(CC_ScrollBar, option, SC_ScrollBarAddPage, widget); + theme.rect = proxy()->subControlRect(CC_ScrollBar, option, SC_ScrollBarAddPage, widget); partId = flags & State_Horizontal ? SBP_LOWERTRACKHORZ : SBP_LOWERTRACKVERT; if (!(flags & State_Enabled)) stateId = SCRBS_DISABLED; @@ -1770,7 +1770,7 @@ void QWindowsVistaStyle::drawComplexControl(ComplexControl control, const QStyle d->drawBackground(theme); } if (sub & SC_ScrollBarSlider) { - theme.rect = subControlRect(CC_ScrollBar, option, SC_ScrollBarSlider, widget); + theme.rect = proxy()->subControlRect(CC_ScrollBar, option, SC_ScrollBarSlider, widget); if (!(flags & State_Enabled)) stateId = SCRBS_DISABLED; else if (scrollbar->activeSubControls & SC_ScrollBarSlider && (scrollbar->state & State_Sunken)) @@ -1783,7 +1783,7 @@ void QWindowsVistaStyle::drawComplexControl(ComplexControl control, const QStyle stateId = SCRBS_NORMAL; // Draw handle - theme.rect = subControlRect(CC_ScrollBar, option, SC_ScrollBarSlider, widget); + theme.rect = proxy()->subControlRect(CC_ScrollBar, option, SC_ScrollBarSlider, widget); theme.partId = flags & State_Horizontal ? SBP_THUMBBTNHORZ : SBP_THUMBBTNVERT; theme.stateId = stateId; d->drawBackground(theme); @@ -1851,7 +1851,7 @@ void QWindowsVistaStyle::drawComplexControl(ComplexControl control, const QStyle d->drawBackground(ftheme); } if (sub & SC_SpinBoxUp) { - theme.rect = subControlRect(CC_SpinBox, option, SC_SpinBoxUp, widget).adjusted(0, 0, 0, 1); + theme.rect = proxy()->subControlRect(CC_SpinBox, option, SC_SpinBoxUp, widget).adjusted(0, 0, 0, 1); partId = SPNP_UP; if (!(sb->stepEnabled & QAbstractSpinBox::StepUpEnabled) || !(flags & State_Enabled)) stateId = UPS_DISABLED; @@ -1866,7 +1866,7 @@ void QWindowsVistaStyle::drawComplexControl(ComplexControl control, const QStyle d->drawBackground(theme); } if (sub & SC_SpinBoxDown) { - theme.rect = subControlRect(CC_SpinBox, option, SC_SpinBoxDown, widget); + theme.rect = proxy()->subControlRect(CC_SpinBox, option, SC_SpinBoxDown, widget); partId = SPNP_DOWN; if (!(sb->stepEnabled & QAbstractSpinBox::StepDownEnabled) || !(flags & State_Enabled)) stateId = DNS_DISABLED; @@ -1947,7 +1947,7 @@ QSize QWindowsVistaStyle::sizeFromContents(ContentsType type, const QStyleOption { //Spinbox adds frame twice sz = QWindowsStyle::sizeFromContents(type, option, size, widget); - int border = pixelMetric(PM_SpinBoxFrameWidth, option, widget); + int border = proxy()->pixelMetric(PM_SpinBoxFrameWidth, option, widget); sz -= QSize(2*border, 2*border); } return sz; @@ -1985,7 +1985,7 @@ QRect QWindowsVistaStyle::subElementRect(SubElement element, const QStyleOption else stateId = PBS_NORMAL; - int border = pixelMetric(PM_DefaultFrameWidth, btn, widget); + int border = proxy()->pixelMetric(PM_DefaultFrameWidth, btn, widget); rect = option->rect.adjusted(border, border, -border, -border); int result = pGetThemeMargins(theme, @@ -2012,7 +2012,7 @@ QRect QWindowsVistaStyle::subElementRect(SubElement element, const QStyleOption int w = option->rect.width(); int x = option->rect.x(); int y = option->rect.y(); - int margin = pixelMetric(QStyle::PM_HeaderMargin, option, widget); + int margin = proxy()->pixelMetric(QStyle::PM_HeaderMargin, option, widget); XPThemeData theme(widget, 0, QLatin1String("HEADER"), HP_HEADERSORTARROW, HSAS_SORTEDDOWN, option->rect); @@ -2038,7 +2038,7 @@ QRect QWindowsVistaStyle::subElementRect(SubElement element, const QStyleOption case SE_HeaderLabel: { - int margin = pixelMetric(QStyle::PM_HeaderMargin, option, widget); + int margin = proxy()->pixelMetric(QStyle::PM_HeaderMargin, option, widget); QRect r = option->rect; r.setRect(option->rect.x() + margin, option->rect.y() + margin, option->rect.width() - margin * 2, option->rect.height() - margin * 2); @@ -2214,7 +2214,7 @@ QRect QWindowsVistaStyle::subControlRect(ComplexControl control, const QStyleOpt const int width = tb->rect.width(); int buttonWidth = GetSystemMetrics(SM_CXSIZE) - 4; - const int frameWidth = pixelMetric(PM_MdiSubWindowFrameWidth, option, widget); + const int frameWidth = proxy()->pixelMetric(PM_MdiSubWindowFrameWidth, option, widget); const bool sysmenuHint = (tb->titleBarFlags & Qt::WindowSystemMenuHint) != 0; const bool minimizeHint = (tb->titleBarFlags & Qt::WindowMinimizeButtonHint) != 0; const bool maximizeHint = (tb->titleBarFlags & Qt::WindowMaximizeButtonHint) != 0; @@ -2251,7 +2251,7 @@ QRect QWindowsVistaStyle::subControlRect(ComplexControl control, const QStyleOpt { const int controlTop = 6; const int controlHeight = height - controlTop - 3; - int iconExtent = pixelMetric(PM_SmallIconSize); + int iconExtent = proxy()->pixelMetric(PM_SmallIconSize); QSize iconSize = tb->icon.actualSize(QSize(iconExtent, iconExtent)); if (tb->icon.isNull()) iconSize = QSize(controlHeight, controlHeight); diff --git a/src/gui/styles/qwindowsxpstyle.cpp b/src/gui/styles/qwindowsxpstyle.cpp index b5dfdbd..c8a4441 100644 --- a/src/gui/styles/qwindowsxpstyle.cpp +++ b/src/gui/styles/qwindowsxpstyle.cpp @@ -1026,7 +1026,7 @@ void QWindowsXPStylePrivate::drawBackgroundThruNativeBuffer(XPThemeData &themeDa Most of the functions are documented in the base classes QWindowsStyle, QCommonStyle, and QStyle, but the QWindowsXPStyle overloads of drawComplexControl(), drawControl(), - drawControlMask(), drawPrimitive(), subControlRect(), and + drawControlMask(), drawPrimitive(), proxy()->subControlRect(), and sizeFromContents(), are documented here. \img qwindowsxpstyle.png @@ -1193,8 +1193,8 @@ QRect QWindowsXPStyle::subElementRect(SubElement sr, const QStyleOption *option, QStyleOptionTab otherOption; otherOption.shape = (twfOption->shape == QTabBar::RoundedNorth ? QTabBar::RoundedEast : QTabBar::RoundedSouth); - int overlap = pixelMetric(PM_TabBarBaseOverlap, &otherOption, widget); - int borderThickness = pixelMetric(PM_DefaultFrameWidth, option, widget); + int overlap = proxy()->pixelMetric(PM_TabBarBaseOverlap, &otherOption, widget); + int borderThickness = proxy()->pixelMetric(PM_DefaultFrameWidth, option, widget); rect.adjust(-overlap + borderThickness, 0, -overlap + borderThickness, 0); } break;} @@ -1217,7 +1217,7 @@ QRect QWindowsXPStyle::subElementRect(SubElement sr, const QStyleOption *option, else stateId = PBS_NORMAL; - int border = pixelMetric(PM_DefaultFrameWidth, btn, widget); + int border = proxy()->pixelMetric(PM_DefaultFrameWidth, btn, widget); rect = option->rect.adjusted(border, border, -border, -border); int result = pGetThemeMargins(theme, @@ -1533,7 +1533,7 @@ case PE_Frame: } if (panel->lineWidth > 0) - drawPrimitive(PE_FrameLineEdit, panel, p, widget); + proxy()->drawPrimitive(PE_FrameLineEdit, panel, p, widget); return; } break; @@ -1618,7 +1618,7 @@ case PE_Frame: else stateId = FS_INACTIVE; - int fwidth = pixelMetric(PM_DockWidgetFrameWidth, frm, widget); + int fwidth = proxy()->pixelMetric(PM_DockWidgetFrameWidth, frm, widget); XPThemeData theme(widget, p, name, 0, stateId); if (!theme.isValid()) @@ -1826,7 +1826,7 @@ case PE_Frame: QStyleOptionButton button; button.QStyleOption::operator=(*option); button.state &= ~State_MouseOver; - drawPrimitive(PE_IndicatorCheckBox, &button, p, widget); + proxy()->drawPrimitive(PE_IndicatorCheckBox, &button, p, widget); return; } @@ -1954,7 +1954,7 @@ void QWindowsXPStyle::drawControl(ControlElement element, const QStyleOption *op QRect ir = btn->rect; QStyleOptionButton newBtn = *btn; newBtn.rect = QRect(ir.right() - mbiw - 1, 1 + (ir.height()/2) - (mbih/2), mbiw, mbih); - drawPrimitive(PE_IndicatorArrowDown, &newBtn, p, widget); + proxy()->drawPrimitive(PE_IndicatorArrowDown, &newBtn, p, widget); } return; } @@ -1977,10 +1977,10 @@ void QWindowsXPStyle::drawControl(ControlElement element, const QStyleOption *op bool lastTab = tab->position == QStyleOptionTab::End; bool firstTab = tab->position == QStyleOptionTab::Beginning; bool onlyOne = tab->position == QStyleOptionTab::OnlyOneTab; - bool leftAligned = styleHint(SH_TabBar_Alignment, tab, widget) == Qt::AlignLeft; - bool centerAligned = styleHint(SH_TabBar_Alignment, tab, widget) == Qt::AlignCenter; - int borderThickness = pixelMetric(PM_DefaultFrameWidth, option, widget); - int tabOverlap = pixelMetric(PM_TabBarTabOverlap, option, widget); + bool leftAligned = proxy()->styleHint(SH_TabBar_Alignment, tab, widget) == Qt::AlignLeft; + bool centerAligned = proxy()->styleHint(SH_TabBar_Alignment, tab, widget) == Qt::AlignCenter; + int borderThickness = proxy()->pixelMetric(PM_DefaultFrameWidth, option, widget); + int tabOverlap = proxy()->pixelMetric(PM_TabBarTabOverlap, option, widget); if (isDisabled) stateId = TIS_DISABLED; @@ -2125,8 +2125,8 @@ void QWindowsXPStyle::drawControl(ControlElement element, const QStyleOption *op if (act && !dis) mode = QIcon::Active; QPixmap pixmap = checked ? - menuitem->icon.pixmap(pixelMetric(PM_SmallIconSize, option, widget), mode, QIcon::On) : - menuitem->icon.pixmap(pixelMetric(PM_SmallIconSize, option, widget), mode); + menuitem->icon.pixmap(proxy()->pixelMetric(PM_SmallIconSize, option, widget), mode, QIcon::On) : + menuitem->icon.pixmap(proxy()->pixelMetric(PM_SmallIconSize, option, widget), mode); int pixw = pixmap.width(); int pixh = pixmap.height(); QRect iconRect(0, 0, pixw, pixh); @@ -2152,7 +2152,7 @@ void QWindowsXPStyle::drawControl(ControlElement element, const QStyleOption *op checkcol - 2 * windowsItemFrame, menuitem->rect.height() - 2*windowsItemFrame); newMi.rect = visualRect(option->direction, option->rect, checkMarkRect); - drawPrimitive(PE_IndicatorMenuCheckMark, &newMi, p, widget); + proxy()->drawPrimitive(PE_IndicatorMenuCheckMark, &newMi, p, widget); } QColor textColor = dis ? menuitem->palette.text().color() : @@ -2169,12 +2169,12 @@ void QWindowsXPStyle::drawControl(ControlElement element, const QStyleOption *op p->save(); int t = s.indexOf(QLatin1Char('\t')); int text_flags = Qt::AlignVCenter|Qt::TextShowMnemonic | Qt::TextDontClip | Qt::TextSingleLine | Qt::AlignLeft; - if (!styleHint(SH_UnderlineShortcut, menuitem, widget)) + if (!proxy()->styleHint(SH_UnderlineShortcut, menuitem, widget)) text_flags |= Qt::TextHideMnemonic; // draw tab text ---------------- if (t >= 0) { QRect vShortcutRect = visualRect(option->direction, option->rect, QRect(textRect.topRight(), menuitem->rect.bottomRight())); - if (dis && !act && styleHint(SH_EtchDisabledText, option, widget)) { + if (dis && !act && proxy()->styleHint(SH_EtchDisabledText, option, widget)) { p->setPen(menuitem->palette.light().color()); p->drawText(vShortcutRect.adjusted(1,1,1,1), text_flags, s.mid(t + 1)); p->setPen(textColor); @@ -2186,7 +2186,7 @@ void QWindowsXPStyle::drawControl(ControlElement element, const QStyleOption *op if (menuitem->menuItemType == QStyleOptionMenuItem::DefaultItem) font.setBold(true); p->setFont(font); - if (dis && !act && styleHint(SH_EtchDisabledText, option, widget)) { + if (dis && !act && proxy()->styleHint(SH_EtchDisabledText, option, widget)) { p->setPen(menuitem->palette.light().color()); p->drawText(vTextRect.adjusted(1,1,1,1), text_flags, s.left(t)); p->setPen(textColor); @@ -2207,7 +2207,7 @@ void QWindowsXPStyle::drawControl(ControlElement element, const QStyleOption *op newMI.state = dis ? State_None : State_Enabled; if (act) newMI.palette.setColor(QPalette::ButtonText, newMI.palette.highlightedText().color()); - drawPrimitive(arrow, &newMI, p, widget); + proxy()->drawPrimitive(arrow, &newMI, p, widget); } } return; @@ -2224,10 +2224,10 @@ void QWindowsXPStyle::drawControl(ControlElement element, const QStyleOption *op QBrush fill = mbi->palette.brush(act ? QPalette::Highlight : QPalette::Button); QPalette::ColorRole textRole = dis ? QPalette::Text: act ? QPalette::HighlightedText : QPalette::ButtonText; - QPixmap pix = mbi->icon.pixmap(pixelMetric(PM_SmallIconSize, option, widget), QIcon::Normal); + QPixmap pix = mbi->icon.pixmap(proxy()->pixelMetric(PM_SmallIconSize, option, widget), QIcon::Normal); uint alignment = Qt::AlignCenter | Qt::TextShowMnemonic | Qt::TextDontClip | Qt::TextSingleLine; - if (!styleHint(SH_UnderlineShortcut, mbi, widget)) + if (!proxy()->styleHint(SH_UnderlineShortcut, mbi, widget)) alignment |= Qt::TextHideMnemonic; p->fillRect(rect, fill); @@ -2242,8 +2242,8 @@ void QWindowsXPStyle::drawControl(ControlElement element, const QStyleOption *op if (const QStyleOptionDockWidget *dwOpt = qstyleoption_cast(option)) { int buttonMargin = 4; - int mw = pixelMetric(QStyle::PM_DockWidgetTitleMargin, dwOpt, widget); - int fw = pixelMetric(PM_DockWidgetFrameWidth, dwOpt, widget); + int mw = proxy()->pixelMetric(QStyle::PM_DockWidgetTitleMargin, dwOpt, widget); + int fw = proxy()->pixelMetric(PM_DockWidgetFrameWidth, dwOpt, widget); bool isFloating = widget && widget->isWindow(); bool isActive = dwOpt->state & State_Active; @@ -2264,12 +2264,12 @@ void QWindowsXPStyle::drawControl(ControlElement element, const QStyleOption *op QRect titleRect = r; if (dwOpt->closable) { - QSize sz = standardIcon(QStyle::SP_TitleBarCloseButton, dwOpt, widget).actualSize(QSize(10, 10)); + QSize sz = proxy()->standardIcon(QStyle::SP_TitleBarCloseButton, dwOpt, widget).actualSize(QSize(10, 10)); titleRect.adjust(0, 0, -sz.width() - mw - buttonMargin, 0); } if (dwOpt->floatable) { - QSize sz = standardIcon(QStyle::SP_TitleBarMaxButton, dwOpt, widget).actualSize(QSize(10, 10)); + QSize sz = proxy()->standardIcon(QStyle::SP_TitleBarMaxButton, dwOpt, widget).actualSize(QSize(10, 10)); titleRect.adjust(0, 0, -sz.width() - mw - buttonMargin, 0); } @@ -2455,7 +2455,7 @@ void QWindowsXPStyle::drawComplexControl(ComplexControl cc, const QStyleOptionCo d->drawBackground(ftheme); } if (sub & SC_SpinBoxUp) { - theme.rect = subControlRect(CC_SpinBox, option, SC_SpinBoxUp, widget); + theme.rect = proxy()->subControlRect(CC_SpinBox, option, SC_SpinBoxUp, widget); partId = SPNP_UP; if (!(sb->stepEnabled & QAbstractSpinBox::StepUpEnabled) || !(flags & State_Enabled)) stateId = UPS_DISABLED; @@ -2470,7 +2470,7 @@ void QWindowsXPStyle::drawComplexControl(ComplexControl cc, const QStyleOptionCo d->drawBackground(theme); } if (sub & SC_SpinBoxDown) { - theme.rect = subControlRect(CC_SpinBox, option, SC_SpinBoxDown, widget); + theme.rect = proxy()->subControlRect(CC_SpinBox, option, SC_SpinBoxDown, widget); partId = SPNP_DOWN; if (!(sb->stepEnabled & QAbstractSpinBox::StepDownEnabled) || !(flags & State_Enabled)) stateId = DNS_DISABLED; @@ -2507,7 +2507,7 @@ void QWindowsXPStyle::drawComplexControl(ComplexControl cc, const QStyleOptionCo p->fillRect(option->rect, editBrush); } if (!cmb->editable) { - QRect re = subControlRect(CC_ComboBox, option, SC_ComboBoxEditField, widget); + QRect re = proxy()->subControlRect(CC_ComboBox, option, SC_ComboBoxEditField, widget); if (option->state & State_HasFocus) { p->fillRect(re, option->palette.highlight()); p->setPen(option->palette.highlightedText().color()); @@ -2522,7 +2522,7 @@ void QWindowsXPStyle::drawComplexControl(ComplexControl cc, const QStyleOptionCo if (sub & SC_ComboBoxArrow) { XPThemeData theme(widget, p, QLatin1String("COMBOBOX")); - theme.rect = subControlRect(CC_ComboBox, option, SC_ComboBoxArrow, widget); + theme.rect = proxy()->subControlRect(CC_ComboBox, option, SC_ComboBoxArrow, widget); partId = CP_DROPDOWNBUTTON; if (!(flags & State_Enabled)) stateId = CBXS_DISABLED; @@ -2550,7 +2550,7 @@ void QWindowsXPStyle::drawComplexControl(ComplexControl cc, const QStyleOptionCo bool isHorz = flags & State_Horizontal; bool isRTL = option->direction == Qt::RightToLeft; if (sub & SC_ScrollBarAddLine) { - theme.rect = subControlRect(CC_ScrollBar, option, SC_ScrollBarAddLine, widget); + theme.rect = proxy()->subControlRect(CC_ScrollBar, option, SC_ScrollBarAddLine, widget); partId = SBP_ARROWBTN; if (!(flags & State_Enabled)) stateId = (isHorz ? (isRTL ? ABS_LEFTDISABLED : ABS_RIGHTDISABLED) : ABS_DOWNDISABLED); @@ -2565,7 +2565,7 @@ void QWindowsXPStyle::drawComplexControl(ComplexControl cc, const QStyleOptionCo d->drawBackground(theme); } if (sub & SC_ScrollBarSubLine) { - theme.rect = subControlRect(CC_ScrollBar, option, SC_ScrollBarSubLine, widget); + theme.rect = proxy()->subControlRect(CC_ScrollBar, option, SC_ScrollBarSubLine, widget); partId = SBP_ARROWBTN; if (!(flags & State_Enabled)) stateId = (isHorz ? (isRTL ? ABS_RIGHTDISABLED : ABS_LEFTDISABLED) : ABS_UPDISABLED); @@ -2580,9 +2580,9 @@ void QWindowsXPStyle::drawComplexControl(ComplexControl cc, const QStyleOptionCo d->drawBackground(theme); } if (maxedOut) { - theme.rect = subControlRect(CC_ScrollBar, option, SC_ScrollBarSlider, widget); - theme.rect = theme.rect.united(subControlRect(CC_ScrollBar, option, SC_ScrollBarSubPage, widget)); - theme.rect = theme.rect.united(subControlRect(CC_ScrollBar, option, SC_ScrollBarAddPage, widget)); + theme.rect = proxy()->subControlRect(CC_ScrollBar, option, SC_ScrollBarSlider, widget); + theme.rect = theme.rect.united(proxy()->subControlRect(CC_ScrollBar, option, SC_ScrollBarSubPage, widget)); + theme.rect = theme.rect.united(proxy()->subControlRect(CC_ScrollBar, option, SC_ScrollBarAddPage, widget)); partId = scrollbar->orientation == Qt::Horizontal ? SBP_LOWERTRACKHORZ : SBP_LOWERTRACKVERT; stateId = SCRBS_DISABLED; theme.partId = partId; @@ -2590,7 +2590,7 @@ void QWindowsXPStyle::drawComplexControl(ComplexControl cc, const QStyleOptionCo d->drawBackground(theme); } else { if (sub & SC_ScrollBarSubPage) { - theme.rect = subControlRect(CC_ScrollBar, option, SC_ScrollBarSubPage, widget); + theme.rect = proxy()->subControlRect(CC_ScrollBar, option, SC_ScrollBarSubPage, widget); partId = flags & State_Horizontal ? SBP_UPPERTRACKHORZ : SBP_UPPERTRACKVERT; if (!(flags & State_Enabled)) stateId = SCRBS_DISABLED; @@ -2605,7 +2605,7 @@ void QWindowsXPStyle::drawComplexControl(ComplexControl cc, const QStyleOptionCo d->drawBackground(theme); } if (sub & SC_ScrollBarAddPage) { - theme.rect = subControlRect(CC_ScrollBar, option, SC_ScrollBarAddPage, widget); + theme.rect = proxy()->subControlRect(CC_ScrollBar, option, SC_ScrollBarAddPage, widget); partId = flags & State_Horizontal ? SBP_LOWERTRACKHORZ : SBP_LOWERTRACKVERT; if (!(flags & State_Enabled)) stateId = SCRBS_DISABLED; @@ -2620,7 +2620,7 @@ void QWindowsXPStyle::drawComplexControl(ComplexControl cc, const QStyleOptionCo d->drawBackground(theme); } if (sub & SC_ScrollBarSlider) { - theme.rect = subControlRect(CC_ScrollBar, option, SC_ScrollBarSlider, widget); + theme.rect = proxy()->subControlRect(CC_ScrollBar, option, SC_ScrollBarSlider, widget); if (!(flags & State_Enabled)) stateId = SCRBS_DISABLED; else if (scrollbar->activeSubControls & SC_ScrollBarSlider && (scrollbar->state & State_Sunken)) @@ -2631,7 +2631,7 @@ void QWindowsXPStyle::drawComplexControl(ComplexControl cc, const QStyleOptionCo stateId = SCRBS_NORMAL; // Draw handle - theme.rect = subControlRect(CC_ScrollBar, option, SC_ScrollBarSlider, widget); + theme.rect = proxy()->subControlRect(CC_ScrollBar, option, SC_ScrollBarSlider, widget); theme.partId = flags & State_Horizontal ? SBP_THUMBBTNHORZ : SBP_THUMBBTNVERT; theme.stateId = stateId; d->drawBackground(theme); @@ -2687,7 +2687,7 @@ void QWindowsXPStyle::drawComplexControl(ComplexControl cc, const QStyleOptionCo QRect slrect = slider->rect; QRegion tickreg = slrect; if (sub & SC_SliderGroove) { - theme.rect = subControlRect(CC_Slider, option, SC_SliderGroove, widget); + theme.rect = proxy()->subControlRect(CC_Slider, option, SC_SliderGroove, widget); if (slider->orientation == Qt::Horizontal) { partId = TKP_TRACK; stateId = TRS_NORMAL; @@ -2703,11 +2703,11 @@ void QWindowsXPStyle::drawComplexControl(ComplexControl cc, const QStyleOptionCo tickreg -= theme.rect; } if (sub & SC_SliderTickmarks) { - int tickOffset = pixelMetric(PM_SliderTickmarkOffset, slider, widget); + int tickOffset = proxy()->pixelMetric(PM_SliderTickmarkOffset, slider, widget); int ticks = slider->tickPosition; - int thickness = pixelMetric(PM_SliderControlThickness, slider, widget); - int len = pixelMetric(PM_SliderLength, slider, widget); - int available = pixelMetric(PM_SliderSpaceAvailable, slider, widget); + int thickness = proxy()->pixelMetric(PM_SliderControlThickness, slider, widget); + int len = proxy()->pixelMetric(PM_SliderLength, slider, widget); + int available = proxy()->pixelMetric(PM_SliderSpaceAvailable, slider, widget); int interval = slider->tickInterval; if (interval <= 0) { interval = slider->singleStep; @@ -2763,7 +2763,7 @@ void QWindowsXPStyle::drawComplexControl(ComplexControl cc, const QStyleOptionCo } } if (sub & SC_SliderHandle) { - theme.rect = subControlRect(CC_Slider, option, SC_SliderHandle, widget); + theme.rect = proxy()->subControlRect(CC_Slider, option, SC_SliderHandle, widget); if (slider->orientation == Qt::Horizontal) { if (slider->tickPosition == QSlider::TicksAbove) partId = TKP_THUMBTOP; @@ -2809,7 +2809,7 @@ void QWindowsXPStyle::drawComplexControl(ComplexControl cc, const QStyleOptionCo QStyleOptionFocusRect fropt; fropt.QStyleOption::operator=(*slider); fropt.rect = subElementRect(SE_SliderFocusRect, slider, widget); - drawPrimitive(PE_FrameFocusRect, &fropt, p, widget); + proxy()->drawPrimitive(PE_FrameFocusRect, &fropt, p, widget); } } break; @@ -2819,8 +2819,8 @@ void QWindowsXPStyle::drawComplexControl(ComplexControl cc, const QStyleOptionCo if (const QStyleOptionToolButton *toolbutton = qstyleoption_cast(option)) { QRect button, menuarea; - button = subControlRect(cc, toolbutton, SC_ToolButton, widget); - menuarea = subControlRect(cc, toolbutton, SC_ToolButtonMenu, widget); + button = proxy()->subControlRect(cc, toolbutton, SC_ToolButton, widget); + menuarea = proxy()->subControlRect(cc, toolbutton, SC_ToolButtonMenu, widget); State bflags = toolbutton->state & ~State_Sunken; State mflags = bflags; @@ -2868,9 +2868,9 @@ void QWindowsXPStyle::drawComplexControl(ComplexControl cc, const QStyleOptionCo tool.state = bflags; if (widget && !qobject_cast(widget->parentWidget()) && !(bflags & State_AutoRaise)) - drawPrimitive(PE_PanelButtonBevel, &tool, p, widget); + proxy()->drawPrimitive(PE_PanelButtonBevel, &tool, p, widget); else - drawPrimitive(PE_PanelButtonTool, &tool, p, widget); + proxy()->drawPrimitive(PE_PanelButtonTool, &tool, p, widget); } } } @@ -2880,26 +2880,26 @@ void QWindowsXPStyle::drawComplexControl(ComplexControl cc, const QStyleOptionCo fr.QStyleOption::operator=(*toolbutton); fr.rect.adjust(3, 3, -3, -3); if (toolbutton->features & QStyleOptionToolButton::MenuButtonPopup) - fr.rect.adjust(0, 0, -pixelMetric(QStyle::PM_MenuButtonIndicator, + fr.rect.adjust(0, 0, -proxy()->pixelMetric(QStyle::PM_MenuButtonIndicator, toolbutton, widget), 0); - drawPrimitive(PE_FrameFocusRect, &fr, p, widget); + proxy()->drawPrimitive(PE_FrameFocusRect, &fr, p, widget); } QStyleOptionToolButton label = *toolbutton; label.state = bflags; int fw = 2; label.rect = button.adjusted(fw, fw, -fw, -fw); - drawControl(CE_ToolButtonLabel, &label, p, widget); + proxy()->drawControl(CE_ToolButtonLabel, &label, p, widget); if (toolbutton->subControls & SC_ToolButtonMenu) { tool.rect = menuarea; tool.state = mflags; - drawPrimitive(PE_IndicatorButtonDropDown, &tool, p, widget); + proxy()->drawPrimitive(PE_IndicatorButtonDropDown, &tool, p, widget); } else if (toolbutton->features & QStyleOptionToolButton::HasMenu) { - int mbi = pixelMetric(PM_MenuButtonIndicator, toolbutton, widget); + int mbi = proxy()->pixelMetric(PM_MenuButtonIndicator, toolbutton, widget); QRect ir = toolbutton->rect; QStyleOptionToolButton newBtn = *toolbutton; newBtn.rect = QRect(ir.right() + 4 - mbi, ir.height() - mbi + 4, mbi - 5, mbi - 5); - drawPrimitive(PE_IndicatorArrowDown, &newBtn, p, widget); + proxy()->drawPrimitive(PE_IndicatorArrowDown, &newBtn, p, widget); } } break; @@ -2931,7 +2931,7 @@ void QWindowsXPStyle::drawComplexControl(ComplexControl cc, const QStyleOptionCo theme.stateId = stateId; d->drawBackground(theme); - QRect ir = subControlRect(CC_TitleBar, tb, SC_TitleBarLabel, widget); + QRect ir = proxy()->subControlRect(CC_TitleBar, tb, SC_TitleBarLabel, widget); int result = TST_NONE; pGetThemeEnumValue(theme.handle(), WP_CAPTION, isActive ? CS_ACTIVE : CS_INACTIVE, TMT_TEXTSHADOWTYPE, &result); @@ -2950,7 +2950,7 @@ void QWindowsXPStyle::drawComplexControl(ComplexControl cc, const QStyleOptionCo Qt::AlignLeft | Qt::AlignVCenter | Qt::TextSingleLine, tb->text); } if (sub & SC_TitleBarSysMenu && tb->titleBarFlags & Qt::WindowSystemMenuHint) { - theme.rect = subControlRect(CC_TitleBar, option, SC_TitleBarSysMenu, widget); + theme.rect = proxy()->subControlRect(CC_TitleBar, option, SC_TitleBarSysMenu, widget); partId = WP_SYSBUTTON; if ((widget && !widget->isEnabled()) || !isActive) stateId = SBS_DISABLED; @@ -2968,8 +2968,8 @@ void QWindowsXPStyle::drawComplexControl(ComplexControl cc, const QStyleOptionCo SIZE sz; pGetThemePartSize(theme.handle(), qt_win_display_dc(), theme.partId, theme.stateId, 0, TS_TRUE, &sz); if (sz.cx == 0 || sz.cy == 0) { - int iconSize = pixelMetric(PM_SmallIconSize, tb, widget); - QPixmap pm = standardIcon(SP_TitleBarMenuButton, tb, widget).pixmap(iconSize, iconSize); + int iconSize = proxy()->pixelMetric(PM_SmallIconSize, tb, widget); + QPixmap pm = proxy()->standardIcon(SP_TitleBarMenuButton, tb, widget).pixmap(iconSize, iconSize); p->save(); drawItemPixmap(p, theme.rect, Qt::AlignCenter, pm); p->restore(); @@ -2981,7 +2981,7 @@ void QWindowsXPStyle::drawComplexControl(ComplexControl cc, const QStyleOptionCo if (sub & SC_TitleBarMinButton && tb->titleBarFlags & Qt::WindowMinimizeButtonHint && !(tb->titleBarState & Qt::WindowMinimized)) { - theme.rect = subControlRect(CC_TitleBar, option, SC_TitleBarMinButton, widget); + theme.rect = proxy()->subControlRect(CC_TitleBar, option, SC_TitleBarMinButton, widget); partId = WP_MINBUTTON; if (widget && !widget->isEnabled()) stateId = MINBS_DISABLED; @@ -2999,7 +2999,7 @@ void QWindowsXPStyle::drawComplexControl(ComplexControl cc, const QStyleOptionCo } if (sub & SC_TitleBarMaxButton && tb->titleBarFlags & Qt::WindowMaximizeButtonHint && !(tb->titleBarState & Qt::WindowMaximized)) { - theme.rect = subControlRect(CC_TitleBar, option, SC_TitleBarMaxButton, widget); + theme.rect = proxy()->subControlRect(CC_TitleBar, option, SC_TitleBarMaxButton, widget); partId = WP_MAXBUTTON; if (widget && !widget->isEnabled()) stateId = MAXBS_DISABLED; @@ -3017,7 +3017,7 @@ void QWindowsXPStyle::drawComplexControl(ComplexControl cc, const QStyleOptionCo } if (sub & SC_TitleBarContextHelpButton && tb->titleBarFlags & Qt::WindowContextHelpButtonHint) { - theme.rect = subControlRect(CC_TitleBar, option, SC_TitleBarContextHelpButton, widget); + theme.rect = proxy()->subControlRect(CC_TitleBar, option, SC_TitleBarContextHelpButton, widget); partId = WP_HELPBUTTON; if (widget && !widget->isEnabled()) stateId = MINBS_DISABLED; @@ -3039,7 +3039,7 @@ void QWindowsXPStyle::drawComplexControl(ComplexControl cc, const QStyleOptionCo || ((tb->titleBarFlags & Qt::WindowMaximizeButtonHint) && (tb->titleBarState & Qt::WindowMaximized))); if (drawNormalButton) { - theme.rect = subControlRect(CC_TitleBar, option, SC_TitleBarNormalButton, widget); + theme.rect = proxy()->subControlRect(CC_TitleBar, option, SC_TitleBarNormalButton, widget); partId = WP_RESTOREBUTTON; if (widget && !widget->isEnabled()) stateId = RBS_DISABLED; @@ -3057,7 +3057,7 @@ void QWindowsXPStyle::drawComplexControl(ComplexControl cc, const QStyleOptionCo } if (sub & SC_TitleBarShadeButton && tb->titleBarFlags & Qt::WindowShadeButtonHint && !(tb->titleBarState & Qt::WindowMinimized)) { - theme.rect = subControlRect(CC_TitleBar, option, SC_TitleBarShadeButton, widget); + theme.rect = proxy()->subControlRect(CC_TitleBar, option, SC_TitleBarShadeButton, widget); partId = WP_MINBUTTON; if (widget && !widget->isEnabled()) stateId = MINBS_DISABLED; @@ -3075,7 +3075,7 @@ void QWindowsXPStyle::drawComplexControl(ComplexControl cc, const QStyleOptionCo } if (sub & SC_TitleBarUnshadeButton && tb->titleBarFlags & Qt::WindowShadeButtonHint && tb->titleBarState & Qt::WindowMinimized) { - theme.rect = subControlRect(CC_TitleBar, option, SC_TitleBarUnshadeButton, widget); + theme.rect = proxy()->subControlRect(CC_TitleBar, option, SC_TitleBarUnshadeButton, widget); partId = WP_RESTOREBUTTON; if (widget && !widget->isEnabled()) stateId = RBS_DISABLED; @@ -3092,7 +3092,7 @@ void QWindowsXPStyle::drawComplexControl(ComplexControl cc, const QStyleOptionCo d->drawBackground(theme); } if (sub & SC_TitleBarCloseButton && tb->titleBarFlags & Qt::WindowSystemMenuHint) { - theme.rect = subControlRect(CC_TitleBar, option, SC_TitleBarCloseButton, widget); + theme.rect = proxy()->subControlRect(CC_TitleBar, option, SC_TitleBarCloseButton, widget); //partId = titlebar->testWFlags(Qt::WA_WState_Tool) ? WP_SMALLCLOSEBUTTON : WP_CLOSEBUTTON; partId = WP_CLOSEBUTTON; if (widget && !widget->isEnabled()) @@ -3120,7 +3120,7 @@ void QWindowsXPStyle::drawComplexControl(ComplexControl cc, const QStyleOptionCo XPThemeData theme(widget, p, QLatin1String("WINDOW"), WP_MDICLOSEBUTTON, CBS_NORMAL); if (option->subControls & SC_MdiCloseButton) { - buttonRect = subControlRect(CC_MdiControls, option, SC_MdiCloseButton, widget); + buttonRect = proxy()->subControlRect(CC_MdiControls, option, SC_MdiCloseButton, widget); if (theme.isValid()) { theme.partId = WP_MDICLOSEBUTTON; theme.rect = buttonRect; @@ -3136,7 +3136,7 @@ void QWindowsXPStyle::drawComplexControl(ComplexControl cc, const QStyleOptionCo } } if (option->subControls & SC_MdiNormalButton) { - buttonRect = subControlRect(CC_MdiControls, option, SC_MdiNormalButton, widget); + buttonRect = proxy()->subControlRect(CC_MdiControls, option, SC_MdiNormalButton, widget); if (theme.isValid()) { theme.partId = WP_MDIRESTOREBUTTON; theme.rect = buttonRect; @@ -3152,7 +3152,7 @@ void QWindowsXPStyle::drawComplexControl(ComplexControl cc, const QStyleOptionCo } } if (option->subControls & QStyle::SC_MdiMinButton) { - buttonRect = subControlRect(CC_MdiControls, option, SC_MdiMinButton, widget); + buttonRect = proxy()->subControlRect(CC_MdiControls, option, SC_MdiMinButton, widget); if (theme.isValid()) { theme.partId = WP_MDIMINBUTTON; theme.rect = buttonRect; @@ -3439,7 +3439,7 @@ QRect QWindowsXPStyle::subControlRect(ComplexControl cc, const QStyleOptionCompl int buttonWidth = GetSystemMetrics(SM_CXSIZE) - 4; const int delta = buttonWidth + 2; int controlTop = option->rect.bottom() - buttonHeight - 2; - const int frameWidth = pixelMetric(PM_MdiSubWindowFrameWidth, option, widget); + const int frameWidth = proxy()->pixelMetric(PM_MdiSubWindowFrameWidth, option, widget); const bool sysmenuHint = (tb->titleBarFlags & Qt::WindowSystemMenuHint) != 0; const bool minimizeHint = (tb->titleBarFlags & Qt::WindowMinimizeButtonHint) != 0; const bool maximizeHint = (tb->titleBarFlags & Qt::WindowMaximizeButtonHint) != 0; @@ -3524,7 +3524,7 @@ QRect QWindowsXPStyle::subControlRect(ComplexControl cc, const QStyleOptionCompl { const int controlTop = 6; const int controlHeight = height - controlTop - 3; - const int iconExtent = pixelMetric(PM_SmallIconSize); + const int iconExtent = proxy()->pixelMetric(PM_SmallIconSize); QSize iconSize = tb->icon.actualSize(QSize(iconExtent, iconExtent)); if (tb->icon.isNull()) iconSize = QSize(controlHeight, controlHeight); @@ -3645,7 +3645,7 @@ QSize QWindowsXPStyle::sizeFromContents(ContentsType ct, const QStyleOption *opt { //Spinbox adds frame twice sz = QWindowsStyle::sizeFromContents(ct, option, contentsSize, widget); - int border = pixelMetric(PM_SpinBoxFrameWidth, option, widget); + int border = proxy()->pixelMetric(PM_SpinBoxFrameWidth, option, widget); sz -= QSize(2*border, 2*border); } break; diff --git a/src/gui/styles/styles.pri b/src/gui/styles/styles.pri index 2164e1e..d255f80 100644 --- a/src/gui/styles/styles.pri +++ b/src/gui/styles/styles.pri @@ -8,7 +8,10 @@ HEADERS += \ styles/qcommonstylepixmaps_p.h \ styles/qcommonstyle.h \ styles/qstylehelper_p.h \ + styles/qproxystyle.h \ + styles/qproxystyle_p.h \ styles/qstylesheetstyle_p.h + SOURCES += \ styles/qstyle.cpp \ styles/qstylefactory.cpp \ @@ -16,6 +19,7 @@ SOURCES += \ styles/qstyleplugin.cpp \ styles/qstylehelper.cpp \ styles/qcommonstyle.cpp \ + styles/qproxystyle.cpp \ styles/qstylesheetstyle.cpp \ styles/qstylesheetstyle_default.cpp diff --git a/tests/auto/qstyle/tst_qstyle.cpp b/tests/auto/qstyle/tst_qstyle.cpp index cb30f83..46e9edc 100644 --- a/tests/auto/qstyle/tst_qstyle.cpp +++ b/tests/auto/qstyle/tst_qstyle.cpp @@ -58,6 +58,7 @@ #include #include #include +#include #include #include @@ -131,6 +132,7 @@ private slots: void testWindowsCEStyle(); void testWindowsMobileStyle(); void testStyleFactory(); + void testProxyStyle(); void pixelMetric(); void progressBarChangeStyle(); void defaultFont(); @@ -213,6 +215,44 @@ void tst_QStyle::testStyleFactory() } } +class CustomProxy : public QProxyStyle +{ + virtual int pixelMetric(PixelMetric metric, const QStyleOption *option = 0, + const QWidget *widget = 0) const + { + if (metric == QStyle::PM_ButtonIconSize) + return 13; + return QProxyStyle::pixelMetric(metric, option, widget); + } +}; + +void tst_QStyle::testProxyStyle() +{ + QProxyStyle *proxyStyle = new QProxyStyle(); + QVERIFY(proxyStyle->baseStyle()); + QStyle *style = new QWindowsStyle; + QVERIFY(style->proxy() == style); + + proxyStyle->setBaseStyle(style); + QVERIFY(style->proxy() == proxyStyle); + QVERIFY(style->parent() == proxyStyle); + QVERIFY(proxyStyle->baseStyle() == style); + + testAllFunctions(proxyStyle); + proxyStyle->setBaseStyle(0); + QVERIFY(proxyStyle->baseStyle()); + qApp->setStyle(proxyStyle); + + QProxyStyle doubleProxy(new QProxyStyle(new QWindowsStyle())); + testAllFunctions(&doubleProxy); + + CustomProxy customStyle; + QLineEdit edit; + edit.setStyle(&customStyle); + QVERIFY(!customStyle.parent()); + QVERIFY(edit.style()->pixelMetric(QStyle::PM_ButtonIconSize) == 13); +} + void tst_QStyle::drawItemPixmap() { testWidget->resize(300, 300); @@ -310,7 +350,7 @@ void tst_QStyle::testAllFunctions(QStyle *style) testScrollBarSubControls(style); } -void tst_QStyle::testScrollBarSubControls(QStyle *style) +void tst_QStyle::testScrollBarSubControls(QStyle *) { #ifdef Q_OS_WINCE_WM if (qobject_cast(style) && qt_wince_is_smartphone()) -- cgit v0.12 From a25548dd9a6ad08961df56a97b6b5189d465f251 Mon Sep 17 00:00:00 2001 From: Kent Hansen Date: Fri, 12 Jun 2009 17:05:27 +0200 Subject: make debugger console's auto-completion asynchronous Needed for remote debugging. --- .../debugging/qscriptcompletiontask.cpp | 204 +++++++++++---------- .../debugging/qscriptcompletiontask_p.h | 9 +- src/scripttools/debugging/qscriptdebugger.cpp | 2 +- .../debugging/qscriptdebuggercommand.cpp | 9 + .../debugging/qscriptdebuggercommand_p.h | 2 + .../debugging/qscriptdebuggercommandexecutor.cpp | 67 +++++++ .../qscriptdebuggercommandschedulerfrontend.cpp | 5 + .../qscriptdebuggercommandschedulerfrontend_p.h | 1 + 8 files changed, 196 insertions(+), 103 deletions(-) diff --git a/src/scripttools/debugging/qscriptcompletiontask.cpp b/src/scripttools/debugging/qscriptcompletiontask.cpp index 9554681..e2034f3 100644 --- a/src/scripttools/debugging/qscriptcompletiontask.cpp +++ b/src/scripttools/debugging/qscriptcompletiontask.cpp @@ -44,12 +44,10 @@ #include "qscriptdebuggerconsole_p.h" #include "qscriptdebuggerconsolecommand_p.h" #include "qscriptdebuggerconsolecommandmanager_p.h" - -#include "qscriptenginedebuggerfrontend_p.h" // ### kill -#include "qscriptdebuggerbackend_p.h" // ### kill -#include -#include -#include +#include "qscriptdebuggercommandschedulerjob_p.h" +#include "qscriptdebuggercommandschedulerfrontend_p.h" +#include "qscriptdebuggerjobschedulerinterface_p.h" +#include "qscriptdebuggerresponse_p.h" #include "private/qobject_p.h" @@ -67,11 +65,13 @@ public: ~QScriptCompletionTaskPrivate(); void completeScriptExpression(); + void emitFinished(); QString contents; int cursorPosition; int frameIndex; - QScriptDebuggerFrontend *frontend; + QScriptDebuggerCommandSchedulerInterface *commandScheduler; + QScriptDebuggerJobSchedulerInterface *jobScheduler; QScriptDebuggerConsole *console; }; @@ -83,28 +83,33 @@ QScriptCompletionTaskPrivate::~QScriptCompletionTaskPrivate() { } -QScriptCompletionTask::QScriptCompletionTask( - const QString &contents, int cursorPosition, - int frameIndex, QScriptDebuggerFrontend *frontend, - QScriptDebuggerConsole *console, - QObject *parent) - : QScriptCompletionTaskInterface( - *new QScriptCompletionTaskPrivate, parent) +class QScriptCompleteExpressionJob : public QScriptDebuggerCommandSchedulerJob { - Q_D(QScriptCompletionTask); - d->contents = contents; - d->cursorPosition = cursorPosition; - if ((frameIndex == -1) && console) - d->frameIndex = console->currentFrameIndex(); - else - d->frameIndex = frameIndex; - d->frontend = frontend; - d->console = console; -} +public: + QScriptCompleteExpressionJob(int frameIndex, const QStringList &path, + QScriptCompletionTaskPrivate *task, + QScriptDebuggerCommandSchedulerInterface *scheduler) + : QScriptDebuggerCommandSchedulerJob(scheduler), + m_frameIndex(frameIndex), m_path(path), m_task(task) + {} -QScriptCompletionTask::~QScriptCompletionTask() -{ -} + void start() + { + QScriptDebuggerCommandSchedulerFrontend frontend(commandScheduler(), this); + frontend.scheduleGetCompletions(m_frameIndex, m_path); + } + void handleResponse(const QScriptDebuggerResponse &response, int /*commandId*/) + { + m_task->results = response.result().toStringList(); + m_task->emitFinished(); + finish(); + } + +private: + int m_frameIndex; + QStringList m_path; + QScriptCompletionTaskPrivate *m_task; +}; namespace { @@ -122,11 +127,43 @@ static bool isPrefixOf(const QString &prefix, const QString &what) } // namespace +class QScriptCompleteScriptsJob : public QScriptDebuggerCommandSchedulerJob +{ +public: + QScriptCompleteScriptsJob(const QString &prefix, QScriptCompletionTaskPrivate *task, + QScriptDebuggerCommandSchedulerInterface *scheduler) + : QScriptDebuggerCommandSchedulerJob(scheduler), + m_prefix(prefix), m_task(task) + {} + + void start() + { + QScriptDebuggerCommandSchedulerFrontend frontend(commandScheduler(), this); + frontend.scheduleGetScripts(); + } + void handleResponse(const QScriptDebuggerResponse &response, int /*commandId*/) + { + QScriptScriptMap scripts = response.resultAsScripts(); + QScriptScriptMap::const_iterator it; + for (it = scripts.constBegin(); it != scripts.constEnd(); ++it) { + QString fileName = it.value().fileName(); + if (isPrefixOf(m_prefix, fileName)) + m_task->results.append(fileName); + } + m_task->emitFinished(); + finish(); + } +private: + QString m_prefix; + QScriptCompletionTaskPrivate *m_task; +}; + void QScriptCompletionTaskPrivate::completeScriptExpression() { int pos = cursorPosition; if ((pos > 0) && contents.at(pos-1).isNumber()) { // completion of numbers is pointless + emitFinished(); return; } @@ -148,65 +185,41 @@ void QScriptCompletionTaskPrivate::completeScriptExpression() path.prepend(contents.mid(pos, pos2 - pos)); } - // ### super-cheating for now; have to use the async API - QScriptEngineDebuggerFrontend *edf = static_cast(frontend); - QScriptDebuggerBackend *backend = edf->backend(); - QScriptContext *ctx = backend->context(frameIndex); - QScriptValueList objects; - QString prefix = path.last(); - QSet matches; - if (path.size() > 1) { - const QString &topLevelIdent = path.at(0); - QScriptValue obj; - if (topLevelIdent == QLatin1String("this")) { - obj = ctx->thisObject(); - } else { - QScriptValueList scopeChain; - scopeChain = ctx->scopeChain(); - for (int i = 0; i < scopeChain.size(); ++i) { - QScriptValue oo = scopeChain.at(i).property(topLevelIdent); - if (oo.isObject()) { - obj = oo; - break; - } - } - } - for (int i = 1; obj.isObject() && (i < path.size()-1); ++i) - obj = obj.property(path.at(i)); - if (obj.isValid()) - objects.append(obj); - } else { - objects << ctx->scopeChain(); - QStringList keywords; - keywords.append(QString::fromLatin1("this")); - keywords.append(QString::fromLatin1("true")); - keywords.append(QString::fromLatin1("false")); - keywords.append(QString::fromLatin1("null")); - for (int i = 0; i < keywords.size(); ++i) { - const QString &kwd = keywords.at(i); - if (isPrefixOf(prefix, kwd)) - matches.insert(kwd); - } - } + length = path.last().length(); + type = QScriptCompletionTask::ScriptIdentifierCompletion; - for (int i = 0; i < objects.size(); ++i) { - QScriptValue obj = objects.at(i); - while (obj.isObject()) { - QScriptValueIterator it(obj); - while (it.hasNext()) { - it.next(); - QString propertyName = it.name(); - if (isPrefixOf(prefix, propertyName)) - matches.insert(propertyName); - } - obj = obj.prototype(); - } - } - results = matches.toList(); - qStableSort(results); + QScriptDebuggerJob *job = new QScriptCompleteExpressionJob(frameIndex, path, this, commandScheduler); + jobScheduler->scheduleJob(job); +} - length = prefix.length(); - type = QScriptCompletionTask::ScriptIdentifierCompletion; +void QScriptCompletionTaskPrivate::emitFinished() +{ + emit q_func()->finished(); +} + +QScriptCompletionTask::QScriptCompletionTask( + const QString &contents, int cursorPosition, int frameIndex, + QScriptDebuggerCommandSchedulerInterface *commandScheduler, + QScriptDebuggerJobSchedulerInterface *jobScheduler, + QScriptDebuggerConsole *console, + QObject *parent) + : QScriptCompletionTaskInterface( + *new QScriptCompletionTaskPrivate, parent) +{ + Q_D(QScriptCompletionTask); + d->contents = contents; + d->cursorPosition = cursorPosition; + if ((frameIndex == -1) && console) + d->frameIndex = console->currentFrameIndex(); + else + d->frameIndex = frameIndex; + d->commandScheduler = commandScheduler; + d->jobScheduler = jobScheduler; + d->console = console; +} + +QScriptCompletionTask::~QScriptCompletionTask() +{ } void QScriptCompletionTask::start() @@ -223,7 +236,6 @@ void QScriptCompletionTask::start() if ((d->cursorPosition >= cmdIndex) && (d->cursorPosition <= (cmdIndex+len))) { // editing command --> get command completions d->results = d->console->commandManager()->completions(prefix); - qStableSort(d->results); d->position = cmdRx.pos(1); d->length = prefix.length(); d->type = CommandNameCompletion; @@ -259,38 +271,34 @@ void QScriptCompletionTask::start() if (argType == QLatin1String("command-or-group-name")) { d->results = d->console->commandManager()->completions(arg); } else if (argType == QLatin1String("script-filename")) { - // ### super-cheating for now; have to use the async API - QScriptEngineDebuggerFrontend *edf = static_cast(d->frontend); - QScriptDebuggerBackend *backend = edf->backend(); - QScriptScriptMap scripts = backend->scripts(); - QScriptScriptMap::const_iterator it; - for (it = scripts.constBegin(); it != scripts.constEnd(); ++it) { - QString fileName = it.value().fileName(); - if (isPrefixOf(arg, fileName)) - d->results.append(fileName); - } + d->position = pos; + d->length = arg.length(); + d->type = CommandArgumentCompletion; + QScriptDebuggerJob *job = new QScriptCompleteScriptsJob(arg, d, d->commandScheduler); + d->jobScheduler->scheduleJob(job); } else if (argType == QLatin1String("subcommand-name")) { for (int i = 0; i < cmd->subCommands().size(); ++i) { QString name = cmd->subCommands().at(i); if (isPrefixOf(arg, name)) d->results.append(name); } + qStableSort(d->results); } else if (argType == QLatin1String("script")) { d->completeScriptExpression(); + } else { + emit finished(); } if ((d->type == NoCompletion) && !d->results.isEmpty()) { - qStableSort(d->results); d->position = pos; d->length = arg.length(); d->type = CommandArgumentCompletion; + emit finished(); } } - emit finished(); } } else { // assume it's an eval expression d->completeScriptExpression(); - emit finished(); } } diff --git a/src/scripttools/debugging/qscriptcompletiontask_p.h b/src/scripttools/debugging/qscriptcompletiontask_p.h index dd82250..0055959 100644 --- a/src/scripttools/debugging/qscriptcompletiontask_p.h +++ b/src/scripttools/debugging/qscriptcompletiontask_p.h @@ -60,7 +60,8 @@ QT_BEGIN_NAMESPACE -class QScriptDebuggerFrontend; +class QScriptDebuggerCommandSchedulerInterface; +class QScriptDebuggerJobSchedulerInterface; class QScriptDebuggerConsole; class QScriptCompletionTaskPrivate; @@ -70,9 +71,9 @@ class Q_AUTOTEST_EXPORT QScriptCompletionTask Q_OBJECT public: QScriptCompletionTask( - const QString &contents, int cursorPosition, - int frameIndex, - QScriptDebuggerFrontend *frontend, + const QString &contents, int cursorPosition, int frameIndex, + QScriptDebuggerCommandSchedulerInterface *commandScheduler, + QScriptDebuggerJobSchedulerInterface *jobScheduler, QScriptDebuggerConsole *console, QObject *parent = 0); ~QScriptCompletionTask(); diff --git a/src/scripttools/debugging/qscriptdebugger.cpp b/src/scripttools/debugging/qscriptdebugger.cpp index d83a1d0..5626a4b 100644 --- a/src/scripttools/debugging/qscriptdebugger.cpp +++ b/src/scripttools/debugging/qscriptdebugger.cpp @@ -695,7 +695,7 @@ QScriptCompletionTaskInterface *QScriptDebuggerPrivate::createCompletionTask( const QString &contents, int cursorPosition, int frameIndex, int options) { return new QScriptCompletionTask( - contents, cursorPosition, frameIndex, frontend, + contents, cursorPosition, frameIndex, this, this, (options & QScriptCompletionProviderInterface::ConsoleCommandCompletion) ? console : 0); } diff --git a/src/scripttools/debugging/qscriptdebuggercommand.cpp b/src/scripttools/debugging/qscriptdebuggercommand.cpp index 3ceb0d5..fc9b96a 100644 --- a/src/scripttools/debugging/qscriptdebuggercommand.cpp +++ b/src/scripttools/debugging/qscriptdebuggercommand.cpp @@ -568,6 +568,15 @@ QScriptDebuggerCommand QScriptDebuggerCommand::getPropertyExpressionValue( return cmd; } +QScriptDebuggerCommand QScriptDebuggerCommand::getCompletions( + int contextIndex, const QStringList &path) +{ + QScriptDebuggerCommand cmd(GetCompletions); + cmd.setContextIndex(contextIndex); + cmd.setAttribute(UserAttribute, path); + return cmd; +} + QScriptDebuggerCommand QScriptDebuggerCommand::newScriptObjectSnapshotCommand() { QScriptDebuggerCommand cmd(NewScriptObjectSnapshot); diff --git a/src/scripttools/debugging/qscriptdebuggercommand_p.h b/src/scripttools/debugging/qscriptdebuggercommand_p.h index 6cfdec5..7ba4b6f 100644 --- a/src/scripttools/debugging/qscriptdebuggercommand_p.h +++ b/src/scripttools/debugging/qscriptdebuggercommand_p.h @@ -107,6 +107,7 @@ public: GetScopeChain, ContextsCheckpoint, GetPropertyExpressionValue, + GetCompletions, NewScriptObjectSnapshot, ScriptObjectSnapshotCapture, @@ -232,6 +233,7 @@ public: static QScriptDebuggerCommand contextsCheckpoint(); static QScriptDebuggerCommand getPropertyExpressionValue(int contextIndex, int lineNumber, const QStringList &path); + static QScriptDebuggerCommand getCompletions(int contextIndex, const QStringList &path); static QScriptDebuggerCommand newScriptObjectSnapshotCommand(); static QScriptDebuggerCommand scriptObjectSnapshotCaptureCommand(int id, const QScriptDebuggerValue &object); diff --git a/src/scripttools/debugging/qscriptdebuggercommandexecutor.cpp b/src/scripttools/debugging/qscriptdebuggercommandexecutor.cpp index ce9aa03..afac2e7 100644 --- a/src/scripttools/debugging/qscriptdebuggercommandexecutor.cpp +++ b/src/scripttools/debugging/qscriptdebuggercommandexecutor.cpp @@ -101,6 +101,12 @@ QScriptDebuggerCommandExecutor::~QScriptDebuggerCommandExecutor() delete d_ptr; } +static bool isPrefixOf(const QString &prefix, const QString &what) +{ + return ((what.length() > prefix.length()) + && what.startsWith(prefix)); +} + /*! Applies the given \a command to the given \a backend. */ @@ -337,6 +343,67 @@ QScriptDebuggerResponse QScriptDebuggerCommandExecutor::execute( } } break; + case QScriptDebuggerCommand::GetCompletions: { + QScriptContext *ctx = backend->context(command.contextIndex()); + QVariant attr = command.attribute(QScriptDebuggerCommand::UserAttribute); + QStringList path = attr.toStringList(); + if (!ctx || path.isEmpty()) + break; + QScriptValueList objects; + QString prefix = path.last(); + QSet matches; + if (path.size() > 1) { + const QString &topLevelIdent = path.at(0); + QScriptValue obj; + if (topLevelIdent == QLatin1String("this")) { + obj = ctx->thisObject(); + } else { + QScriptValueList scopeChain; + scopeChain = ctx->scopeChain(); + for (int i = 0; i < scopeChain.size(); ++i) { + QScriptValue oo = scopeChain.at(i).property(topLevelIdent); + if (oo.isObject()) { + obj = oo; + break; + } + } + } + for (int i = 1; obj.isObject() && (i < path.size()-1); ++i) + obj = obj.property(path.at(i)); + if (obj.isValid()) + objects.append(obj); + } else { + objects << ctx->scopeChain(); + QStringList keywords; + keywords.append(QString::fromLatin1("this")); + keywords.append(QString::fromLatin1("true")); + keywords.append(QString::fromLatin1("false")); + keywords.append(QString::fromLatin1("null")); + for (int i = 0; i < keywords.size(); ++i) { + const QString &kwd = keywords.at(i); + if (isPrefixOf(prefix, kwd)) + matches.insert(kwd); + } + } + + for (int i = 0; i < objects.size(); ++i) { + QScriptValue obj = objects.at(i); + while (obj.isObject()) { + QScriptValueIterator it(obj); + while (it.hasNext()) { + it.next(); + QString propertyName = it.name(); + if (isPrefixOf(prefix, propertyName)) + matches.insert(propertyName); + } + obj = obj.prototype(); + } + } + QStringList matchesList = matches.toList(); + qStableSort(matchesList); + response.setResult(matchesList); + } break; + case QScriptDebuggerCommand::NewScriptObjectSnapshot: { int id = backend->newScriptObjectSnapshot(); response.setResult(id); diff --git a/src/scripttools/debugging/qscriptdebuggercommandschedulerfrontend.cpp b/src/scripttools/debugging/qscriptdebuggercommandschedulerfrontend.cpp index a181711..83e634e 100644 --- a/src/scripttools/debugging/qscriptdebuggercommandschedulerfrontend.cpp +++ b/src/scripttools/debugging/qscriptdebuggercommandschedulerfrontend.cpp @@ -257,6 +257,11 @@ int QScriptDebuggerCommandSchedulerFrontend::scheduleGetPropertyExpressionValue( return scheduleCommand(QScriptDebuggerCommand::getPropertyExpressionValue(contextIndex, lineNumber, path)); } +int QScriptDebuggerCommandSchedulerFrontend::scheduleGetCompletions(int contextIndex, const QStringList &path) +{ + return scheduleCommand(QScriptDebuggerCommand::getCompletions(contextIndex, path)); +} + int QScriptDebuggerCommandSchedulerFrontend::scheduleEvaluate(int contextIndex, const QString &program, const QString &fileName, diff --git a/src/scripttools/debugging/qscriptdebuggercommandschedulerfrontend_p.h b/src/scripttools/debugging/qscriptdebuggercommandschedulerfrontend_p.h index ff9c570..9a1a36d 100644 --- a/src/scripttools/debugging/qscriptdebuggercommandschedulerfrontend_p.h +++ b/src/scripttools/debugging/qscriptdebuggercommandschedulerfrontend_p.h @@ -111,6 +111,7 @@ public: int scheduleContextsCheckpoint(); int scheduleGetPropertyExpressionValue(int contextIndex, int lineNumber, const QStringList &path); + int scheduleGetCompletions(int contextIndex, const QStringList &path); // iteration int scheduleNewScriptValueIterator(const QScriptDebuggerValue &object); -- cgit v0.12 From 4c2697c093a495c289b1eb0689ac9bbca5442343 Mon Sep 17 00:00:00 2001 From: Jens Bache-Wiig Date: Fri, 12 Jun 2009 17:11:19 +0200 Subject: Compile Adding missing files for proxy style after commit 4d0cc0b9600f8530bb0e8712b4bb109d1810c4a7 Reviewed-by: trust me --- src/gui/styles/qproxystyle.cpp | 366 +++++++++++++++++++++++++++++++++++++++++ src/gui/styles/qproxystyle.h | 114 +++++++++++++ src/gui/styles/qproxystyle_p.h | 79 +++++++++ 3 files changed, 559 insertions(+) create mode 100644 src/gui/styles/qproxystyle.cpp create mode 100644 src/gui/styles/qproxystyle.h create mode 100644 src/gui/styles/qproxystyle_p.h diff --git a/src/gui/styles/qproxystyle.cpp b/src/gui/styles/qproxystyle.cpp new file mode 100644 index 0000000..f36ad64 --- /dev/null +++ b/src/gui/styles/qproxystyle.cpp @@ -0,0 +1,366 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, 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. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include +#include +#include +#include "qproxystyle.h" +#include "qstylefactory.h" + +#if !defined(QT_NO_STYLE_PROXY) || defined(QT_PLUGIN) + +QT_BEGIN_NAMESPACE + +/*! + \class QProxyStyle + + \brief The QProxyStyle is a convenience class that simplifies + the creation of proxy styles in Qt. + + \since 4.6 + + A proxy style is a style that wraps a different, + usually the default system style, to override the painting or + behavior of only specific parts. + + Here's an example allowing you to override the shortcut underline + behavior on all platforms: + + \snippet doc/src/snippets/code/src_gui_proxystyle.cpp 0 + + Warning: Note that even though Qt's internal styles should respect this. + hint, there is no guarantee that it will work for all styles. + The example above would for instance not work on Mac since menus are + handled by the operating system. + + \sa QStyle +*/ +void QProxyStylePrivate::ensureBaseStyle() const +{ + Q_Q(const QProxyStyle); + + if (baseStyle) + return; + + if (!baseStyle && !QApplicationPrivate::styleOverride.isEmpty()) { + baseStyle = QStyleFactory::create(QApplicationPrivate::styleOverride); + if (baseStyle) { + // If baseStyle is an instance of the same proxyStyle + // we destroy it and fall back to the desktop style + if (qstrcmp(baseStyle->metaObject()->className(), + q->metaObject()->className()) == 0) { + delete baseStyle; + baseStyle = 0; + } + } + } + + if (!baseStyle) // Use application desktop style + baseStyle = QStyleFactory::create(QApplicationPrivate::desktopStyleKey()); + + if (!baseStyle) // Fallback to windows style + baseStyle = QStyleFactory::create(QLatin1String("windows")); + + baseStyle->setProxy(const_cast(q)); + baseStyle->setParent(const_cast(q)); // Take ownership +} + +/*! + Constructs a QProxyStyle object. + + If no base style is provided, the current application style + will be used as the base style. + + Ownership of \style is transferred to QProxyStyle. +*/ +QProxyStyle::QProxyStyle(QStyle *style) : + QCommonStyle(*new QProxyStylePrivate()) +{ + Q_D(QProxyStyle); + if (style) { + style->setProxy(this); + style->setParent(this); // Take ownership + d->baseStyle = style; + } +} + +/*! + Destroys the QProxyStyle object. +*/ +QProxyStyle::~QProxyStyle() +{ +} + +/*! + Returns the proxy base style object. If no base style + is set on the proxy style, QProxyStyle will create + an instance of the application style instead. + + \sa setBaseStyle(), QStyle +*/ +QStyle *QProxyStyle::baseStyle() const +{ + Q_D (const QProxyStyle); + d->ensureBaseStyle(); + return d->baseStyle; +} + +/*! + Sets the base style that should be proxied. + + Ownership of \style is transferred to QProxyStyle. + + If style is zero, a desktop-dependant style will be + assigned automatically. +*/ +void QProxyStyle::setBaseStyle(QStyle *style) +{ + Q_D (QProxyStyle); + + if (d->baseStyle && d->baseStyle->parent() == this) + d->baseStyle->deleteLater(); + + d->baseStyle = style; + + if (d->baseStyle) { + d->baseStyle->setProxy(this); + d->baseStyle->setParent(this); + } +} + +/*! reimp */ +void QProxyStyle::drawPrimitive(PrimitiveElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget) const +{ + Q_D (const QProxyStyle); + d->ensureBaseStyle(); + d->baseStyle->drawPrimitive(element, option, painter, widget); +} + +/*! reimp */ +void QProxyStyle::drawControl(ControlElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget) const +{ + Q_D (const QProxyStyle); + d->ensureBaseStyle(); + d->baseStyle->drawControl(element, option, painter, widget); +} + +/*! reimp */ +void QProxyStyle::drawComplexControl(ComplexControl control, const QStyleOptionComplex *option, QPainter *painter, const QWidget *widget) const +{ + Q_D (const QProxyStyle); + d->ensureBaseStyle(); + d->baseStyle->drawComplexControl(control, option, painter, widget); +} + +/*! reimp */ +void QProxyStyle::drawItemText(QPainter *painter, const QRect &rect, int flags, const QPalette &pal, bool enabled, + const QString &text, QPalette::ColorRole textRole) const +{ + Q_D (const QProxyStyle); + d->ensureBaseStyle(); + d->baseStyle->drawItemText(painter, rect, flags, pal, enabled, text, textRole); +} + +/*! reimp */ +void QProxyStyle::drawItemPixmap(QPainter *painter, const QRect &rect, int alignment, const QPixmap &pixmap) const +{ + Q_D (const QProxyStyle); + d->ensureBaseStyle(); + d->baseStyle->drawItemPixmap(painter, rect, alignment, pixmap); +} + +/*! reimp */ +QSize QProxyStyle::sizeFromContents(ContentsType type, const QStyleOption *option, const QSize &size, const QWidget *widget) const +{ + Q_D (const QProxyStyle); + d->ensureBaseStyle(); + return d->baseStyle->sizeFromContents(type, option, size, widget); +} + +/*! reimp */ +QRect QProxyStyle::subElementRect(SubElement element, const QStyleOption *option, const QWidget *widget) const +{ + Q_D (const QProxyStyle); + d->ensureBaseStyle(); + return d->baseStyle->subElementRect(element, option, widget); +} + +/*! reimp */ +QRect QProxyStyle::subControlRect(ComplexControl cc, const QStyleOptionComplex *option, SubControl sc, const QWidget *widget) const +{ + Q_D (const QProxyStyle); + d->ensureBaseStyle(); + return d->baseStyle->subControlRect(cc, option, sc, widget); +} + +/*! reimp */ +QRect QProxyStyle::itemTextRect(const QFontMetrics &fm, const QRect &r, int flags, bool enabled, const QString &text) const +{ + Q_D (const QProxyStyle); + d->ensureBaseStyle(); + return d->baseStyle->itemTextRect(fm, r, flags, enabled, text); +} + +/*! reimp */ +QRect QProxyStyle::itemPixmapRect(const QRect &r, int flags, const QPixmap &pixmap) const +{ + Q_D (const QProxyStyle); + d->ensureBaseStyle(); + return d->baseStyle->itemPixmapRect(r, flags, pixmap); +} + +/*! reimp */ +QStyle::SubControl QProxyStyle::hitTestComplexControl(ComplexControl control, const QStyleOptionComplex *option, const QPoint &pos, const QWidget *widget) const +{ + Q_D (const QProxyStyle); + d->ensureBaseStyle(); + return d->baseStyle->hitTestComplexControl(control, option, pos, widget); +} + +/*! reimp */ +int QProxyStyle::styleHint(StyleHint hint, const QStyleOption *option, const QWidget *widget, QStyleHintReturn *returnData) const +{ + Q_D (const QProxyStyle); + d->ensureBaseStyle(); + return d->baseStyle->styleHint(hint, option, widget, returnData); +} + +/*! reimp */ +int QProxyStyle::pixelMetric(PixelMetric metric, const QStyleOption *option, const QWidget *widget) const +{ + Q_D (const QProxyStyle); + d->ensureBaseStyle(); + return d->baseStyle->pixelMetric(metric, option, widget); +} + +/*! reimp */ +QPixmap QProxyStyle::standardPixmap(StandardPixmap standardPixmap, const QStyleOption *opt, const QWidget *widget) const +{ + Q_D (const QProxyStyle); + d->ensureBaseStyle(); + return d->baseStyle->standardPixmap(standardPixmap, opt, widget); +} + +/*! reimp */ +QPixmap QProxyStyle::generatedIconPixmap(QIcon::Mode iconMode, const QPixmap &pixmap, const QStyleOption *opt) const +{ + Q_D (const QProxyStyle); + d->ensureBaseStyle(); + return d->baseStyle->generatedIconPixmap(iconMode, pixmap, opt); +} + +/*! reimp */ +QPalette QProxyStyle::standardPalette() const +{ + Q_D (const QProxyStyle); + d->ensureBaseStyle(); + return d->baseStyle->standardPalette(); +} + +/*! reimp */ +void QProxyStyle::polish(QWidget *widget) +{ + Q_D (QProxyStyle); + d->ensureBaseStyle(); + d->baseStyle->polish(widget); +} + +/*! reimp */ +void QProxyStyle::polish(QPalette &pal) +{ + Q_D (QProxyStyle); + d->ensureBaseStyle(); + d->baseStyle->polish(pal); +} + +/*! reimp */ +void QProxyStyle::polish(QApplication *app) +{ + Q_D (QProxyStyle); + d->ensureBaseStyle(); + d->baseStyle->polish(app); +} + +/*! reimp */ +void QProxyStyle::unpolish(QWidget *widget) +{ + Q_D (QProxyStyle); + d->ensureBaseStyle(); + d->baseStyle->unpolish(widget); +} + +/*! reimp */ +void QProxyStyle::unpolish(QApplication *app) +{ + Q_D (QProxyStyle); + d->ensureBaseStyle(); + d->baseStyle->unpolish(app); +} + +/*! reimp */ +bool QProxyStyle::event(QEvent *e) +{ + Q_D (QProxyStyle); + d->ensureBaseStyle(); + return d->baseStyle->event(e); +} + +/*! reimp */ +QIcon QProxyStyle::standardIconImplementation(StandardPixmap standardIcon, const QStyleOption *option, const QWidget *widget) const +{ + Q_D (const QProxyStyle); + d->ensureBaseStyle(); + return d->baseStyle->standardIcon(standardIcon, option, widget); +} + +/*! reimp */ +int QProxyStyle::layoutSpacingImplementation(QSizePolicy::ControlType control1, QSizePolicy::ControlType control2, + Qt::Orientation orientation, const QStyleOption *option, const QWidget *widget) const +{ + Q_D (const QProxyStyle); + d->ensureBaseStyle(); + return d->baseStyle->layoutSpacing(control1, control2, orientation, option, widget); +} + +QT_END_NAMESPACE + +#endif // QT_NO_STYLE_PROXY diff --git a/src/gui/styles/qproxystyle.h b/src/gui/styles/qproxystyle.h new file mode 100644 index 0000000..76b0768 --- /dev/null +++ b/src/gui/styles/qproxystyle.h @@ -0,0 +1,114 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, 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. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QPROXYSTYLE_H +#define QPROXYSTYLE_H + +#include + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +QT_MODULE(Gui) + +#if !defined(QT_NO_STYLE_PROXY) + +class QProxyStylePrivate; +class Q_GUI_EXPORT QProxyStyle : public QCommonStyle +{ + Q_OBJECT + +public: + QProxyStyle(QStyle *baseStyle = 0); + ~QProxyStyle(); + + QStyle *baseStyle() const; + void setBaseStyle(QStyle *style); + + void drawPrimitive(PrimitiveElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget = 0) const; + void drawControl(ControlElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget = 0) const; + void drawComplexControl(ComplexControl control, const QStyleOptionComplex *option, QPainter *painter, const QWidget *widget = 0) const; + void drawItemText(QPainter *painter, const QRect &rect, int flags, const QPalette &pal, bool enabled, + const QString &text, QPalette::ColorRole textRole = QPalette::NoRole) const; + virtual void drawItemPixmap(QPainter *painter, const QRect &rect, int alignment, const QPixmap &pixmap) const; + + QSize sizeFromContents(ContentsType type, const QStyleOption *option, const QSize &size, const QWidget *widget) const; + + QRect subElementRect(SubElement element, const QStyleOption *option, const QWidget *widget) const; + QRect subControlRect(ComplexControl cc, const QStyleOptionComplex *opt, SubControl sc, const QWidget *widget) const; + QRect itemTextRect(const QFontMetrics &fm, const QRect &r, int flags, bool enabled, const QString &text) const; + QRect itemPixmapRect(const QRect &r, int flags, const QPixmap &pixmap) const; + + SubControl hitTestComplexControl(ComplexControl control, const QStyleOptionComplex *option, const QPoint &pos, const QWidget *widget = 0) const; + int styleHint(StyleHint hint, const QStyleOption *option = 0, const QWidget *widget = 0, QStyleHintReturn *returnData = 0) const; + int pixelMetric(PixelMetric metric, const QStyleOption *option = 0, const QWidget *widget = 0) const; + + QPixmap standardPixmap(StandardPixmap standardPixmap, const QStyleOption *opt, const QWidget *widget = 0) const; + QPixmap generatedIconPixmap(QIcon::Mode iconMode, const QPixmap &pixmap, const QStyleOption *opt) const; + QPalette standardPalette() const; + + void polish(QWidget *widget); + void polish(QPalette &pal); + void polish(QApplication *app); + + void unpolish(QWidget *widget); + void unpolish(QApplication *app); + +protected: + bool event(QEvent *e); + +protected Q_SLOTS: + QIcon standardIconImplementation(StandardPixmap standardIcon, const QStyleOption *option, const QWidget *widget) const; + int layoutSpacingImplementation(QSizePolicy::ControlType control1, QSizePolicy::ControlType control2, + Qt::Orientation orientation, const QStyleOption *option = 0, const QWidget *widget = 0) const; +private: + Q_DISABLE_COPY(QProxyStyle) + Q_DECLARE_PRIVATE(QProxyStyle) +}; + +#endif // QT_NO_STYLE_PROXY + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif // QPROXYSTYLE_H diff --git a/src/gui/styles/qproxystyle_p.h b/src/gui/styles/qproxystyle_p.h new file mode 100644 index 0000000..e7630d9 --- /dev/null +++ b/src/gui/styles/qproxystyle_p.h @@ -0,0 +1,79 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, 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. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QPROXYSTYLE_P_H +#define QPROXYSTYLE_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists for the convenience +// of qapplication_*.cpp, qwidget*.cpp and qfiledialog.cpp. This header +// file may change from version to version without notice, or even be removed. +// +// We mean it. +// + +#include "qcommonstyle.h" +#include "qcommonstyle_p.h" +#include "qproxystyle.h" + +#ifndef QT_NO_STYLE_PROXY + +QT_BEGIN_NAMESPACE + +class QProxyStylePrivate : public QCommonStylePrivate +{ + Q_DECLARE_PUBLIC(QProxyStyle) +public: + void ensureBaseStyle() const; +private: + QProxyStylePrivate() : + QCommonStylePrivate(), baseStyle(0) {} + mutable QPointer baseStyle; +}; + +QT_END_NAMESPACE + +#endif // QT_NO_STYLE_PROXY + +#endif //QPROXYSTYLE_P_H -- cgit v0.12 From 22fc2f7a832d8dc19c23b92710f520149e439971 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20R=C3=B8dal?= Date: Fri, 12 Jun 2009 16:41:19 +0200 Subject: Fixed bitmap drawing in GL 2 engine when not using GL pixmap backend. QPixmap shouldn't return true in hasAlphaChannel() for bitmaps, instead the paint engine should check whether the pixmap is a bitmap or not. In addition, QBrush::isOpaque() returned true for bitmap brushes, which is wrong according to the documentation. Reviewed-by: Trond --- src/gui/painting/qbrush.cpp | 4 +++- src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp | 6 ++++-- src/opengl/qpixmapdata_gl.cpp | 2 +- tests/auto/qbrush/tst_qbrush.cpp | 11 +++++++++++ 4 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/gui/painting/qbrush.cpp b/src/gui/painting/qbrush.cpp index ea93764..591f63e 100644 --- a/src/gui/painting/qbrush.cpp +++ b/src/gui/painting/qbrush.cpp @@ -846,7 +846,9 @@ bool QBrush::isOpaque() const return false; return true; } else if (d->style == Qt::TexturePattern) { - return !texture().hasAlpha(); + return qHasPixmapTexture(*this) + ? !texture().hasAlphaChannel() && !texture().isQBitmap() + : !textureImage().hasAlphaChannel(); } return false; diff --git a/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp b/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp index 833f8cf..19cb02a 100644 --- a/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp +++ b/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp @@ -1002,8 +1002,10 @@ void QGL2PaintEngineEx::drawPixmap(const QRectF& dest, const QPixmap & pixmap, c glActiveTexture(GL_TEXTURE0 + QT_IMAGE_TEXTURE_UNIT); ctx->d_func()->bindTexture(pixmap, GL_TEXTURE_2D, GL_RGBA, true); - //FIXME: we should use hasAlpha() instead, but that's SLOW at the moment - d->drawTexture(dest, src, pixmap.size(), !pixmap.hasAlphaChannel(), pixmap.depth() == 1); + bool isBitmap = pixmap.isQBitmap(); + bool isOpaque = !isBitmap && !pixmap.hasAlphaChannel(); + + d->drawTexture(dest, src, pixmap.size(), isOpaque, isBitmap); } void QGL2PaintEngineEx::drawImage(const QRectF& dest, const QImage& image, const QRectF& src, diff --git a/src/opengl/qpixmapdata_gl.cpp b/src/opengl/qpixmapdata_gl.cpp index 4c53c46..48feb82 100644 --- a/src/opengl/qpixmapdata_gl.cpp +++ b/src/opengl/qpixmapdata_gl.cpp @@ -262,7 +262,7 @@ void QGLPixmapData::fill(const QColor &color) bool QGLPixmapData::hasAlphaChannel() const { - return pixelType() == BitmapType || m_hasAlpha; + return m_hasAlpha; } QImage QGLPixmapData::fillImage(const QColor &color) const diff --git a/tests/auto/qbrush/tst_qbrush.cpp b/tests/auto/qbrush/tst_qbrush.cpp index 11f715a..7ef930f 100644 --- a/tests/auto/qbrush/tst_qbrush.cpp +++ b/tests/auto/qbrush/tst_qbrush.cpp @@ -44,6 +44,7 @@ #include "qbrush.h" #include +#include #include @@ -76,6 +77,7 @@ private slots: void textures(); void nullBrush(); + void isOpaque(); }; Q_DECLARE_METATYPE(QBrush) @@ -379,5 +381,14 @@ void tst_QBrush::nullBrush() QCOMPARE(brush.color(), QColor(100,0,0)); } +void tst_QBrush::isOpaque() +{ + QBitmap bm(8, 8); + bm.fill(Qt::black); + + QBrush brush(bm); + QVERIFY(!brush.isOpaque()); +} + QTEST_MAIN(tst_QBrush) #include "tst_qbrush.moc" -- cgit v0.12 From dfc817ecec1d79fda76a049988917be139217617 Mon Sep 17 00:00:00 2001 From: Denis Dzyubenko Date: Fri, 12 Jun 2009 14:08:38 +0200 Subject: Removed \since 4.6 tag, mentioned that only the enum value is since 4.6 --- doc/src/qnamespace.qdoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/qnamespace.qdoc b/doc/src/qnamespace.qdoc index 7772958..684f686 100644 --- a/doc/src/qnamespace.qdoc +++ b/doc/src/qnamespace.qdoc @@ -531,7 +531,7 @@ \value UniqueConnection Same as AutoConnection, but there will be a check that the signal is not already connected to the same slot before connecting, otherwise, the connection will fail. - \since 4.6 + This value was introduced in Qt 4.6. With queued connections, the parameters must be of types that are known to Qt's meta-object system, because Qt needs to copy the arguments to store them -- cgit v0.12 From bb55f848ae006664cf2ee0dbe6b96aa0b802093e Mon Sep 17 00:00:00 2001 From: Denis Dzyubenko Date: Fri, 12 Jun 2009 16:01:48 +0200 Subject: Fixed multiline doc for Qt::DropAction. --- doc/src/qnamespace.qdoc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/src/qnamespace.qdoc b/doc/src/qnamespace.qdoc index 684f686..f1c7330 100644 --- a/doc/src/qnamespace.qdoc +++ b/doc/src/qnamespace.qdoc @@ -2061,9 +2061,9 @@ should be taken over by the target application, i.e., the source application should not delete the data. - - On X11 this value is used to do a move. - + \br + On X11 this value is used to do a move. + \br TargetMoveAction is not used on the Mac. */ -- cgit v0.12 From 2f4ca8e06be0477503acf2a4bf38a1c76f52e5b1 Mon Sep 17 00:00:00 2001 From: Denis Dzyubenko Date: Fri, 12 Jun 2009 17:56:03 +0200 Subject: Improved resetting the DESKTOP_STARTUP_ID envvar on X11 We shouldn't put static variable into the environment since it will crash if someone tries to access environment after Qt has been unloaded. Task-number: related to 217782 Reviewed-by: Bradley T. Hughes --- src/gui/kernel/qapplication_x11.cpp | 28 ++++++++++++++++++++++------ src/gui/kernel/qt_x11_p.h | 1 + 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/src/gui/kernel/qapplication_x11.cpp b/src/gui/kernel/qapplication_x11.cpp index a94347b..7387fb0 100644 --- a/src/gui/kernel/qapplication_x11.cpp +++ b/src/gui/kernel/qapplication_x11.cpp @@ -128,6 +128,10 @@ extern "C" { #include +#if defined(Q_OS_BSD4) || _POSIX_VERSION+0 < 200112L +# define QT_NO_UNSETENV +#endif + QT_BEGIN_NAMESPACE //#define X_NOT_BROKEN @@ -1757,7 +1761,7 @@ void qt_init(QApplicationPrivate *priv, int, X11->pattern_fills[i].screen = -1; #endif - X11->startupId = X11->originalStartupId = 0; + X11->startupId = X11->originalStartupId = X11->startupIdString = 0; int argc = priv->argc; char **argv = priv->argv; @@ -2556,9 +2560,16 @@ void qt_init(QApplicationPrivate *priv, int, X11->startupId = getenv("DESKTOP_STARTUP_ID"); X11->originalStartupId = X11->startupId; - static char desktop_startup_id[] = "DESKTOP_STARTUP_ID="; - putenv(desktop_startup_id); - + if (X11->startupId) { +#ifndef QT_NO_UNSETENV + unsetenv("DESKTOP_STARTUP_ID"); +#else + // it's a small memory leak, however we won't crash if Qt is + // unloaded and someones tries to use the envoriment. + X11->startupIdString = strdup("DESKTOP_STARTUP_ID="); + putenv(X11->startupIdString); +#endif + } } else { // read some non-GUI settings when not using the X server... @@ -2690,9 +2701,14 @@ void qt_cleanup() #endif } - // restore original value back. This is also done in QWidgetPrivate::show_sys. - if (X11->originalStartupId) +#ifdef QT_NO_UNSETENV + // restore original value back. + if (X11->originalStartupId && X11->startupIdString) { putenv(X11->originalStartupId); + free(X11->startupIdString); + X11->startupIdString = 0; + } +#endif #ifndef QT_NO_XRENDER for (int i = 0; i < X11->solid_fill_count; ++i) { diff --git a/src/gui/kernel/qt_x11_p.h b/src/gui/kernel/qt_x11_p.h index 21bb550..b480f34 100644 --- a/src/gui/kernel/qt_x11_p.h +++ b/src/gui/kernel/qt_x11_p.h @@ -507,6 +507,7 @@ struct QX11Data char *startupId; char *originalStartupId; + char *startupIdString; DesktopEnvironment desktopEnvironment; -- cgit v0.12 From 10c093e56c82254d545e9d698934a2cfb9121a59 Mon Sep 17 00:00:00 2001 From: Kent Hansen Date: Fri, 12 Jun 2009 20:27:24 +0200 Subject: refactor some script debugger internals Make it possible to reuse more code in remote debugger. --- src/scripttools/debugging/debugging.pri | 6 +- src/scripttools/debugging/qscriptdebugger.cpp | 116 ++++++++++++++++ src/scripttools/debugging/qscriptdebugger_p.h | 34 +++++ .../qscriptdebuggerstandardwidgetfactory.cpp | 109 +++++++++++++++ .../qscriptdebuggerstandardwidgetfactory_p.h | 85 ++++++++++++ .../qscriptdebuggerwidgetfactoryinterface_p.h | 10 ++ .../debugging/qscriptenginedebugger.cpp | 151 +-------------------- 7 files changed, 363 insertions(+), 148 deletions(-) create mode 100644 src/scripttools/debugging/qscriptdebuggerstandardwidgetfactory.cpp create mode 100644 src/scripttools/debugging/qscriptdebuggerstandardwidgetfactory_p.h diff --git a/src/scripttools/debugging/debugging.pri b/src/scripttools/debugging/debugging.pri index fa39e83..2082fd0 100644 --- a/src/scripttools/debugging/debugging.pri +++ b/src/scripttools/debugging/debugging.pri @@ -111,7 +111,8 @@ SOURCES += \ $$PWD/qscriptbreakpointswidget.cpp \ $$PWD/qscriptbreakpointsmodel.cpp \ $$PWD/qscripterrorlogwidgetinterface.cpp \ - $$PWD/qscripterrorlogwidget.cpp + $$PWD/qscripterrorlogwidget.cpp \ + $$PWD/qscriptdebuggerstandardwidgetfactory.cpp HEADERS += \ $$PWD/qscriptdebuggerconsolewidgetinterface_p_p.h \ @@ -148,7 +149,8 @@ HEADERS += \ $$PWD/qscripterrorlogwidgetinterface_p_p.h \ $$PWD/qscripterrorlogwidgetinterface_p.h \ $$PWD/qscripterrorlogwidget_p.h \ - $$PWD/qscriptdebuggerwidgetfactoryinterface_p.h + $$PWD/qscriptdebuggerwidgetfactoryinterface_p.h \ + $$PWD/qscriptdebuggerstandardwidgetfactory_p.h SOURCES += \ $$PWD/qscriptenginedebugger.cpp diff --git a/src/scripttools/debugging/qscriptdebugger.cpp b/src/scripttools/debugging/qscriptdebugger.cpp index 5626a4b..454d051 100644 --- a/src/scripttools/debugging/qscriptdebugger.cpp +++ b/src/scripttools/debugging/qscriptdebugger.cpp @@ -1337,6 +1337,122 @@ void QScriptDebugger::setFrontend(QScriptDebuggerFrontend *frontend) } } +QAction *QScriptDebugger::action(DebuggerAction action, QObject *parent) +{ + switch (action) { + case InterruptAction: + return interruptAction(parent); + case ContinueAction: + return continueAction(parent); + case StepIntoAction: + return stepIntoAction(parent); + case StepOverAction: + return stepOverAction(parent); + case StepOutAction: + return stepOutAction(parent); + case RunToCursorAction: + return runToCursorAction(parent); + case RunToNewScriptAction: + return runToNewScriptAction(parent); + case ToggleBreakpointAction: + return toggleBreakpointAction(parent); + case ClearDebugOutputAction: + return clearDebugOutputAction(parent); + case ClearErrorLogAction: + return clearErrorLogAction(parent); + case ClearConsoleAction: + return clearConsoleAction(parent); + case FindInScriptAction: + return findInScriptAction(parent); + case FindNextInScriptAction: + return findNextInScriptAction(parent); + case FindPreviousInScriptAction: + return findPreviousInScriptAction(parent); + case GoToLineAction: + return goToLineAction(parent); + } + return 0; +} + +QWidget *QScriptDebugger::widget(DebuggerWidget widget) +{ + switch (widget) { + case ConsoleWidget: { + QScriptDebuggerConsoleWidgetInterface *w = consoleWidget(); + if (!w && widgetFactory()) { + w = widgetFactory()->createConsoleWidget(); + setConsoleWidget(w); + } + return w; + } + case StackWidget: { + QScriptDebuggerStackWidgetInterface *w = stackWidget(); + if (!w && widgetFactory()) { + w = widgetFactory()->createStackWidget(); + setStackWidget(w); + } + return w; + } + case ScriptsWidget: { + QScriptDebuggerScriptsWidgetInterface *w = scriptsWidget(); + if (!w && widgetFactory()) { + w = widgetFactory()->createScriptsWidget(); + setScriptsWidget(w); + } + return w; + } + case LocalsWidget: { + QScriptDebuggerLocalsWidgetInterface *w = localsWidget(); + if (!w && widgetFactory()) { + w = widgetFactory()->createLocalsWidget(); + setLocalsWidget(w); + } + return w; + } + case CodeWidget: { + QScriptDebuggerCodeWidgetInterface *w = codeWidget(); + if (!w && widgetFactory()) { + w = widgetFactory()->createCodeWidget(); + setCodeWidget(w); + } + return w; + } + case CodeFinderWidget: { + QScriptDebuggerCodeFinderWidgetInterface *w = codeFinderWidget(); + if (!w && widgetFactory()) { + w = widgetFactory()->createCodeFinderWidget(); + setCodeFinderWidget(w); + } + return w; + } + case BreakpointsWidget: { + QScriptBreakpointsWidgetInterface *w = breakpointsWidget(); + if (!w && widgetFactory()) { + w = widgetFactory()->createBreakpointsWidget(); + setBreakpointsWidget(w); + } + return w; + } + case DebugOutputWidget: { + QScriptDebugOutputWidgetInterface *w = debugOutputWidget(); + if (!w && widgetFactory()) { + w = widgetFactory()->createDebugOutputWidget(); + setDebugOutputWidget(w); + } + return w; + } + case ErrorLogWidget: { + QScriptErrorLogWidgetInterface *w = errorLogWidget(); + if (!w && widgetFactory()) { + w = widgetFactory()->createErrorLogWidget(); + setErrorLogWidget(w); + } + return w; + } + } + return 0; +} + QScriptDebuggerConsoleWidgetInterface *QScriptDebugger::consoleWidget() const { Q_D(const QScriptDebugger); diff --git a/src/scripttools/debugging/qscriptdebugger_p.h b/src/scripttools/debugging/qscriptdebugger_p.h index 8f14f4d..6d8fcab 100644 --- a/src/scripttools/debugging/qscriptdebugger_p.h +++ b/src/scripttools/debugging/qscriptdebugger_p.h @@ -76,12 +76,46 @@ class Q_AUTOTEST_EXPORT QScriptDebugger : public QObject { Q_OBJECT public: + // mirrors QScriptEngineDebugger::DebuggerWidget + enum DebuggerWidget { + ConsoleWidget, + StackWidget, + ScriptsWidget, + LocalsWidget, + CodeWidget, + CodeFinderWidget, + BreakpointsWidget, + DebugOutputWidget, + ErrorLogWidget + }; + // mirrors QScriptEngineDebugger::DebuggerAction + enum DebuggerAction { + InterruptAction, + ContinueAction, + StepIntoAction, + StepOverAction, + StepOutAction, + RunToCursorAction, + RunToNewScriptAction, + ToggleBreakpointAction, + ClearDebugOutputAction, + ClearErrorLogAction, + ClearConsoleAction, + FindInScriptAction, + FindNextInScriptAction, + FindPreviousInScriptAction, + GoToLineAction + }; + QScriptDebugger(QObject *parent = 0); ~QScriptDebugger(); QScriptDebuggerFrontend *frontend() const; void setFrontend(QScriptDebuggerFrontend *frontend); + QWidget *widget(DebuggerWidget widget); + QAction *action(DebuggerAction action, QObject *parent); + QScriptDebuggerConsoleWidgetInterface *consoleWidget() const; void setConsoleWidget(QScriptDebuggerConsoleWidgetInterface *consoleWidget); diff --git a/src/scripttools/debugging/qscriptdebuggerstandardwidgetfactory.cpp b/src/scripttools/debugging/qscriptdebuggerstandardwidgetfactory.cpp new file mode 100644 index 0000000..09d6f2f --- /dev/null +++ b/src/scripttools/debugging/qscriptdebuggerstandardwidgetfactory.cpp @@ -0,0 +1,109 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the QtSCriptTools module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, 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. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qscriptdebuggerstandardwidgetfactory_p.h" +#include "qscriptdebuggerconsolewidget_p.h" +#include "qscriptdebuggerstackwidget_p.h" +#include "qscriptdebuggerscriptswidget_p.h" +#include "qscriptdebuggerlocalswidget_p.h" +#include "qscriptdebuggercodewidget_p.h" +#include "qscriptdebuggercodefinderwidget_p.h" +#include "qscriptbreakpointswidget_p.h" +#include "qscriptdebugoutputwidget_p.h" +#include "qscripterrorlogwidget_p.h" + +QT_BEGIN_NAMESPACE + +QScriptDebuggerStandardWidgetFactory::QScriptDebuggerStandardWidgetFactory(QObject *parent) + : QObject(parent) +{ +} + +QScriptDebuggerStandardWidgetFactory::~QScriptDebuggerStandardWidgetFactory() +{ +} + +QScriptDebugOutputWidgetInterface *QScriptDebuggerStandardWidgetFactory::createDebugOutputWidget() +{ + return new QScriptDebugOutputWidget(); +} + +QScriptDebuggerConsoleWidgetInterface *QScriptDebuggerStandardWidgetFactory::createConsoleWidget() +{ + return new QScriptDebuggerConsoleWidget(); +} + +QScriptErrorLogWidgetInterface *QScriptDebuggerStandardWidgetFactory::createErrorLogWidget() +{ + return new QScriptErrorLogWidget(); +} + +QScriptDebuggerCodeFinderWidgetInterface *QScriptDebuggerStandardWidgetFactory::createCodeFinderWidget() +{ + return new QScriptDebuggerCodeFinderWidget(); +} + +QScriptDebuggerStackWidgetInterface *QScriptDebuggerStandardWidgetFactory::createStackWidget() +{ + return new QScriptDebuggerStackWidget(); +} + +QScriptDebuggerScriptsWidgetInterface *QScriptDebuggerStandardWidgetFactory::createScriptsWidget() +{ + return new QScriptDebuggerScriptsWidget(); +} + +QScriptDebuggerLocalsWidgetInterface *QScriptDebuggerStandardWidgetFactory::createLocalsWidget() +{ + return new QScriptDebuggerLocalsWidget(); +} + +QScriptDebuggerCodeWidgetInterface *QScriptDebuggerStandardWidgetFactory::createCodeWidget() +{ + return new QScriptDebuggerCodeWidget(); +} + +QScriptBreakpointsWidgetInterface *QScriptDebuggerStandardWidgetFactory::createBreakpointsWidget() +{ + return new QScriptBreakpointsWidget(); +} + +QT_END_NAMESPACE diff --git a/src/scripttools/debugging/qscriptdebuggerstandardwidgetfactory_p.h b/src/scripttools/debugging/qscriptdebuggerstandardwidgetfactory_p.h new file mode 100644 index 0000000..bfce66e --- /dev/null +++ b/src/scripttools/debugging/qscriptdebuggerstandardwidgetfactory_p.h @@ -0,0 +1,85 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the QtSCriptTools module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, 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. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QSCRIPTDEBUGGERSTANDARDWIDGETFACTORY_P_H +#define QSCRIPTDEBUGGERSTANDARDWIDGETFACTORY_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 + +#include "qscriptdebuggerwidgetfactoryinterface_p.h" + +QT_BEGIN_NAMESPACE + +class Q_AUTOTEST_EXPORT QScriptDebuggerStandardWidgetFactory + : public QObject, public QScriptDebuggerWidgetFactoryInterface +{ +public: + QScriptDebuggerStandardWidgetFactory(QObject *parent = 0); + virtual ~QScriptDebuggerStandardWidgetFactory(); + + QScriptDebugOutputWidgetInterface *createDebugOutputWidget(); + QScriptDebuggerConsoleWidgetInterface *createConsoleWidget(); + QScriptErrorLogWidgetInterface *createErrorLogWidget(); + QScriptDebuggerCodeFinderWidgetInterface *createCodeFinderWidget(); + QScriptDebuggerStackWidgetInterface *createStackWidget(); + QScriptDebuggerScriptsWidgetInterface *createScriptsWidget(); + QScriptDebuggerLocalsWidgetInterface *createLocalsWidget(); + QScriptDebuggerCodeWidgetInterface *createCodeWidget(); + QScriptBreakpointsWidgetInterface *createBreakpointsWidget(); + +private: + Q_DISABLE_COPY(QScriptDebuggerStandardWidgetFactory) +}; + +QT_END_NAMESPACE + +#endif diff --git a/src/scripttools/debugging/qscriptdebuggerwidgetfactoryinterface_p.h b/src/scripttools/debugging/qscriptdebuggerwidgetfactoryinterface_p.h index 9ad1eeb..ea22793 100644 --- a/src/scripttools/debugging/qscriptdebuggerwidgetfactoryinterface_p.h +++ b/src/scripttools/debugging/qscriptdebuggerwidgetfactoryinterface_p.h @@ -61,6 +61,11 @@ class QScriptDebugOutputWidgetInterface; class QScriptDebuggerConsoleWidgetInterface; class QScriptErrorLogWidgetInterface; class QScriptDebuggerCodeFinderWidgetInterface; +class QScriptDebuggerStackWidgetInterface; +class QScriptDebuggerScriptsWidgetInterface; +class QScriptDebuggerLocalsWidgetInterface; +class QScriptDebuggerCodeWidgetInterface; +class QScriptBreakpointsWidgetInterface; class Q_AUTOTEST_EXPORT QScriptDebuggerWidgetFactoryInterface { @@ -71,6 +76,11 @@ public: virtual QScriptDebuggerConsoleWidgetInterface *createConsoleWidget() = 0; virtual QScriptErrorLogWidgetInterface *createErrorLogWidget() = 0; virtual QScriptDebuggerCodeFinderWidgetInterface *createCodeFinderWidget() = 0; + virtual QScriptDebuggerStackWidgetInterface *createStackWidget() = 0; + virtual QScriptDebuggerScriptsWidgetInterface *createScriptsWidget() = 0; + virtual QScriptDebuggerLocalsWidgetInterface *createLocalsWidget() = 0; + virtual QScriptDebuggerCodeWidgetInterface *createCodeWidget() = 0; + virtual QScriptBreakpointsWidgetInterface *createBreakpointsWidget() = 0; }; QT_END_NAMESPACE diff --git a/src/scripttools/debugging/qscriptenginedebugger.cpp b/src/scripttools/debugging/qscriptenginedebugger.cpp index 0f8b600..a278e14 100644 --- a/src/scripttools/debugging/qscriptenginedebugger.cpp +++ b/src/scripttools/debugging/qscriptenginedebugger.cpp @@ -42,16 +42,7 @@ #include "qscriptenginedebugger.h" #include "qscriptdebugger_p.h" #include "qscriptenginedebuggerfrontend_p.h" -#include "qscriptdebuggerconsolewidget_p.h" -#include "qscriptdebuggerstackwidget_p.h" -#include "qscriptdebuggerscriptswidget_p.h" -#include "qscriptdebuggerlocalswidget_p.h" -#include "qscriptdebuggercodewidget_p.h" -#include "qscriptdebuggercodefinderwidget_p.h" -#include "qscriptbreakpointswidget_p.h" -#include "qscriptdebugoutputwidget_p.h" -#include "qscripterrorlogwidget_p.h" -#include "qscriptdebuggerwidgetfactoryinterface_p.h" +#include "qscriptdebuggerstandardwidgetfactory_p.h" #include #include @@ -238,19 +229,13 @@ public: */ class QScriptEngineDebuggerPrivate - : public QObjectPrivate, - public QScriptDebuggerWidgetFactoryInterface + : public QObjectPrivate { Q_DECLARE_PUBLIC(QScriptEngineDebugger) public: QScriptEngineDebuggerPrivate(); ~QScriptEngineDebuggerPrivate(); - QScriptDebugOutputWidgetInterface *createDebugOutputWidget(); - QScriptDebuggerConsoleWidgetInterface *createConsoleWidget(); - QScriptErrorLogWidgetInterface *createErrorLogWidget(); - QScriptDebuggerCodeFinderWidgetInterface *createCodeFinderWidget(); - // private slots void _q_showStandardWindow(); @@ -320,26 +305,6 @@ QScriptEngineDebuggerPrivate::~QScriptEngineDebuggerPrivate() } } -QScriptDebugOutputWidgetInterface *QScriptEngineDebuggerPrivate::createDebugOutputWidget() -{ - return new QScriptDebugOutputWidget(); -} - -QScriptDebuggerConsoleWidgetInterface *QScriptEngineDebuggerPrivate::createConsoleWidget() -{ - return new QScriptDebuggerConsoleWidget(); -} - -QScriptErrorLogWidgetInterface *QScriptEngineDebuggerPrivate::createErrorLogWidget() -{ - return new QScriptErrorLogWidget(); -} - -QScriptDebuggerCodeFinderWidgetInterface *QScriptEngineDebuggerPrivate::createCodeFinderWidget() -{ - return new QScriptDebuggerCodeFinderWidget(); -} - void QScriptEngineDebuggerPrivate::_q_showStandardWindow() { Q_Q(QScriptEngineDebugger); @@ -352,7 +317,7 @@ void QScriptEngineDebuggerPrivate::createDebugger() Q_Q(QScriptEngineDebugger); if (!debugger) { debugger = new QScriptDebugger(); - debugger->setWidgetFactory(this); + debugger->setWidgetFactory(new QScriptDebuggerStandardWidgetFactory(q)); QObject::connect(debugger, SIGNAL(started()), q, SIGNAL(evaluationResumed())); QObject::connect(debugger, SIGNAL(stopped()), @@ -447,81 +412,7 @@ QWidget *QScriptEngineDebugger::widget(DebuggerWidget widget) const { Q_D(const QScriptEngineDebugger); const_cast(d)->createDebugger(); - switch (widget) { - case ConsoleWidget: { - QScriptDebuggerConsoleWidgetInterface *w = d->debugger->consoleWidget(); - if (!w) { - w = new QScriptDebuggerConsoleWidget(); - d->debugger->setConsoleWidget(w); - } - return w; - } - case StackWidget: { - QScriptDebuggerStackWidgetInterface *w = d->debugger->stackWidget(); - if (!w) { - w = new QScriptDebuggerStackWidget(); - d->debugger->setStackWidget(w); - } - return w; - } - case ScriptsWidget: { - QScriptDebuggerScriptsWidgetInterface *w = d->debugger->scriptsWidget(); - if (!w) { - w = new QScriptDebuggerScriptsWidget(); - d->debugger->setScriptsWidget(w); - } - return w; - } - case LocalsWidget: { - QScriptDebuggerLocalsWidgetInterface *w = d->debugger->localsWidget(); - if (!w) { - w = new QScriptDebuggerLocalsWidget(); - d->debugger->setLocalsWidget(w); - } - return w; - } - case CodeWidget: { - QScriptDebuggerCodeWidgetInterface *w = d->debugger->codeWidget(); - if (!w) { - w = new QScriptDebuggerCodeWidget(); - d->debugger->setCodeWidget(w); - } - return w; - } - case CodeFinderWidget: { - QScriptDebuggerCodeFinderWidgetInterface *w = d->debugger->codeFinderWidget(); - if (!w) { - w = new QScriptDebuggerCodeFinderWidget(); - d->debugger->setCodeFinderWidget(w); - } - return w; - } - case BreakpointsWidget: { - QScriptBreakpointsWidgetInterface *w = d->debugger->breakpointsWidget(); - if (!w) { - w = new QScriptBreakpointsWidget(); - d->debugger->setBreakpointsWidget(w); - } - return w; - } - case DebugOutputWidget: { - QScriptDebugOutputWidgetInterface *w = d->debugger->debugOutputWidget(); - if (!w) { - w = new QScriptDebugOutputWidget(); - d->debugger->setDebugOutputWidget(w); - } - return w; - } - case ErrorLogWidget: { - QScriptErrorLogWidgetInterface *w = d->debugger->errorLogWidget(); - if (!w) { - w = new QScriptErrorLogWidget(); - d->debugger->setErrorLogWidget(w); - } - return w; - } - } - return 0; + return d->debugger->widget(static_cast(widget)); } /*! @@ -545,39 +436,7 @@ QAction *QScriptEngineDebugger::action(DebuggerAction action) const Q_D(const QScriptEngineDebugger); QScriptEngineDebugger *that = const_cast(this); that->d_func()->createDebugger(); - switch (action) { - case InterruptAction: - return d->debugger->interruptAction(that); - case ContinueAction: - return d->debugger->continueAction(that); - case StepIntoAction: - return d->debugger->stepIntoAction(that); - case StepOverAction: - return d->debugger->stepOverAction(that); - case StepOutAction: - return d->debugger->stepOutAction(that); - case RunToCursorAction: - return d->debugger->runToCursorAction(that); - case RunToNewScriptAction: - return d->debugger->runToNewScriptAction(that); - case ToggleBreakpointAction: - return d->debugger->toggleBreakpointAction(that); - case ClearDebugOutputAction: - return d->debugger->clearDebugOutputAction(that); - case ClearErrorLogAction: - return d->debugger->clearErrorLogAction(that); - case ClearConsoleAction: - return d->debugger->clearConsoleAction(that); - case FindInScriptAction: - return d->debugger->findInScriptAction(that); - case FindNextInScriptAction: - return d->debugger->findNextInScriptAction(that); - case FindPreviousInScriptAction: - return d->debugger->findPreviousInScriptAction(that); - case GoToLineAction: - return d->debugger->goToLineAction(that); - } - return 0; + return d->debugger->action(static_cast(action), that); } /*! -- cgit v0.12 From d3f57ee3077ba0c4b21997acecfe2bab82ed6c1f Mon Sep 17 00:00:00 2001 From: Rohan McGovern Date: Sat, 13 Jun 2009 09:10:39 +1000 Subject: Fixed compile of QtGui with MSVC. MSVC requires the same linkage specifiers to be provided at both the declaration and definition. --- src/gui/painting/qbrush.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/painting/qbrush.h b/src/gui/painting/qbrush.h index d6d0da3..404569a 100644 --- a/src/gui/painting/qbrush.h +++ b/src/gui/painting/qbrush.h @@ -123,7 +123,7 @@ private: friend class QRasterPaintEnginePrivate; friend struct QSpanData; friend class QPainter; - friend bool qHasPixmapTexture(const QBrush& brush); + friend bool Q_GUI_EXPORT qHasPixmapTexture(const QBrush& brush); void detach(Qt::BrushStyle newStyle); void init(const QColor &color, Qt::BrushStyle bs); QBrushData *d; -- cgit v0.12 From 50aa24deadf43bdbfca5b3dd472a99aff8e3f09b Mon Sep 17 00:00:00 2001 From: Rohan McGovern Date: Sat, 13 Jun 2009 09:37:51 +1000 Subject: Fixed compile of Qt/Embedded. Fixes compile error: kernel/qapplication_qws.cpp: In static member function 'static bool QApplicationPrivate::qws_apply_settings()': kernel/qapplication_qws.cpp:2014: error: no match for 'operator!' in '!QApplicationPrivate::styleOverride' kernel/qapplication_qws.cpp:2014: note: candidates are: operator!(bool) --- src/gui/kernel/qapplication_qws.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gui/kernel/qapplication_qws.cpp b/src/gui/kernel/qapplication_qws.cpp index ea52e11..edae670 100644 --- a/src/gui/kernel/qapplication_qws.cpp +++ b/src/gui/kernel/qapplication_qws.cpp @@ -2011,8 +2011,8 @@ bool QApplicationPrivate::qws_apply_settings() // read new QStyle QString stylename = settings.value(QLatin1String("style")).toString(); if (QCoreApplication::startingUp()) { - if (!stylename.isEmpty() && !QApplicationPrivate::styleOverride) - QApplicationPrivate::styleOverride = new QString(stylename); + if (!stylename.isEmpty() && QApplicationPrivate::styleOverride.isNull()) + QApplicationPrivate::styleOverride = stylename; } else { QApplication::setStyle(stylename); } -- cgit v0.12 From 796a5a2c7d8c91a46ac761dde18b7da2ec6c177b Mon Sep 17 00:00:00 2001 From: Rohan McGovern Date: Sat, 13 Jun 2009 10:26:44 +1000 Subject: Fixed compile of scripttools with MSVC 2003. Fixes compile error: debugging\qscriptdebuggercommand.cpp(567) : error C2664: 'QScriptDebuggerCommand::setAttribute' : cannot convert parameter 2 from 'const QStringList' to 'const QVariant &' Reason: cannot convert from 'const QStringList' to 'const QVariant' Source or target has incomplete type --- src/scripttools/debugging/qscriptdebuggercommand.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/scripttools/debugging/qscriptdebuggercommand.cpp b/src/scripttools/debugging/qscriptdebuggercommand.cpp index fc9b96a..763c126 100644 --- a/src/scripttools/debugging/qscriptdebuggercommand.cpp +++ b/src/scripttools/debugging/qscriptdebuggercommand.cpp @@ -45,6 +45,7 @@ #include #include +#include Q_DECLARE_METATYPE(QScriptBreakpointData) Q_DECLARE_METATYPE(QScriptDebuggerValue) -- cgit v0.12 From ba097c23159c1ec026b8b8772d1a9c5e72f2a681 Mon Sep 17 00:00:00 2001 From: Anders Bakken Date: Sun, 14 Jun 2009 12:07:34 -0700 Subject: ControlPointRect is no longer a QRealRect s/y2/bottom()/ Compile. Reviewed-by: TrustMe --- src/plugins/gfxdrivers/directfb/qdirectfbpaintengine.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/gfxdrivers/directfb/qdirectfbpaintengine.cpp b/src/plugins/gfxdrivers/directfb/qdirectfbpaintengine.cpp index 5be4d47..3d817d5 100644 --- a/src/plugins/gfxdrivers/directfb/qdirectfbpaintengine.cpp +++ b/src/plugins/gfxdrivers/directfb/qdirectfbpaintengine.cpp @@ -377,7 +377,7 @@ void QDirectFBPaintEngine::clip(const QVectorPath &path, Qt::ClipOperation op) { Q_D(QDirectFBPaintEngine); d->dirtyClip = true; - const QPoint bottom = d->transform.map(QPoint(0, int(path.controlPointRect().y2))); + const QPoint bottom = d->transform.map(QPoint(0, int(path.controlPointRect().bottom()))); if (bottom.y() >= d->lastLockedHeight) d->lock(); QRasterPaintEngine::clip(path, op); -- cgit v0.12 From 335780b2c0cba64d75812d7e2e98f44e072d171d Mon Sep 17 00:00:00 2001 From: Anders Bakken Date: Sun, 14 Jun 2009 12:11:30 -0700 Subject: Get rid of warnings Reviewed-by: TrustMe --- src/plugins/gfxdrivers/directfb/qdirectfbpaintengine.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/plugins/gfxdrivers/directfb/qdirectfbpaintengine.cpp b/src/plugins/gfxdrivers/directfb/qdirectfbpaintengine.cpp index 5be4d47..f8d05c7 100644 --- a/src/plugins/gfxdrivers/directfb/qdirectfbpaintengine.cpp +++ b/src/plugins/gfxdrivers/directfb/qdirectfbpaintengine.cpp @@ -806,13 +806,13 @@ QDirectFBPaintEnginePrivate::~QDirectFBPaintEnginePrivate() delete surfaceCache; } -bool QDirectFBPaintEnginePrivate::dfbCanHandleClip(const QRect &rect) const +bool QDirectFBPaintEnginePrivate::dfbCanHandleClip(const QRect &) const { // TODO: Check to see if DirectFB can handle the clip for the given rect return dfbHandledClip; } -bool QDirectFBPaintEnginePrivate::dfbCanHandleClip(const QRectF &rect) const +bool QDirectFBPaintEnginePrivate::dfbCanHandleClip(const QRectF &) const { // TODO: Check to see if DirectFB can handle the clip for the given rect return dfbHandledClip; -- cgit v0.12 From c9f77564df14f91276e9ca693a9b3f339dab9334 Mon Sep 17 00:00:00 2001 From: Bill King Date: Fri, 12 Jun 2009 10:29:44 +1000 Subject: Stage 1 of incorporating database level precision policy. Queries now ask the database object what precision they should be, allows for setting precision policies on sql models, where previously this was not available. Also fixes some failing precisionpolicy implementations, as well as working around the fact qstring can't convert from "123.00" to an int based type. --- src/sql/drivers/db2/qsql_db2.cpp | 7 +- src/sql/drivers/mysql/qsql_mysql.cpp | 30 +-- src/sql/drivers/mysql/qsql_mysql.h | 1 + src/sql/drivers/oci/qsql_oci.cpp | 280 +++++++++++++-------------- src/sql/drivers/odbc/qsql_odbc.cpp | 63 +++--- src/sql/drivers/psql/qsql_psql.cpp | 21 +- src/sql/drivers/sqlite/qsql_sqlite.cpp | 11 +- src/sql/drivers/sqlite2/qsql_sqlite2.cpp | 7 +- src/sql/kernel/qsqldatabase.cpp | 55 +++++- src/sql/kernel/qsqldatabase.h | 2 + src/sql/kernel/qsqldriver.cpp | 28 ++- src/sql/kernel/qsqldriver.h | 3 + src/sql/kernel/qsqlquery.cpp | 23 ++- src/sql/kernel/qsqlresult.cpp | 17 +- src/sql/kernel/qsqlresult.h | 1 + tests/auto/qsqldatabase/tst_qsqldatabase.cpp | 26 ++- 16 files changed, 327 insertions(+), 248 deletions(-) diff --git a/src/sql/drivers/db2/qsql_db2.cpp b/src/sql/drivers/db2/qsql_db2.cpp index c7cbc9b..b8f52f4 100644 --- a/src/sql/drivers/db2/qsql_db2.cpp +++ b/src/sql/drivers/db2/qsql_db2.cpp @@ -84,7 +84,7 @@ public: class QDB2ResultPrivate { public: - QDB2ResultPrivate(const QDB2DriverPrivate* d): dp(d), hStmt(0), precisionPolicy(QSql::HighPrecision) + QDB2ResultPrivate(const QDB2DriverPrivate* d): dp(d), hStmt(0) {} ~QDB2ResultPrivate() { @@ -107,7 +107,6 @@ public: SQLHANDLE hStmt; QSqlRecord recInf; QVector valueCache; - QSql::NumericalPrecisionPolicy precisionPolicy; }; static QString qFromTChar(SQLTCHAR* str) @@ -1147,10 +1146,6 @@ void QDB2Result::virtual_hook(int id, void *data) Q_ASSERT(data); *static_cast(data) = nextResult(); break; - case QSqlResult::SetNumericalPrecision: - Q_ASSERT(data); - d->precisionPolicy = *reinterpret_cast(data); - break; default: QSqlResult::virtual_hook(id, data); } diff --git a/src/sql/drivers/mysql/qsql_mysql.cpp b/src/sql/drivers/mysql/qsql_mysql.cpp index 82ed124..0ea2f96 100644 --- a/src/sql/drivers/mysql/qsql_mysql.cpp +++ b/src/sql/drivers/mysql/qsql_mysql.cpp @@ -167,12 +167,11 @@ class QMYSQLResultPrivate : public QObject { Q_OBJECT public: - QMYSQLResultPrivate(const QMYSQLDriver* dp) : driver(dp), result(0), + QMYSQLResultPrivate(const QMYSQLDriver* dp, const QMYSQLResult* d) : driver(dp), result(0), q(d), rowsAffected(0), hasBlobs(false) #if MYSQL_VERSION_ID >= 40108 , stmt(0), meta(0), inBinds(0), outBinds(0) #endif - , precisionPolicy(QSql::HighPrecision) { connect(dp, SIGNAL(destroyed()), this, SLOT(driverDestroyed())); } @@ -180,6 +179,7 @@ public: const QMYSQLDriver* driver; MYSQL_RES *result; MYSQL_ROW row; + const QMYSQLResult* q; int rowsAffected; @@ -209,7 +209,6 @@ public: MYSQL_BIND *inBinds; MYSQL_BIND *outBinds; #endif - QSql::NumericalPrecisionPolicy precisionPolicy; private Q_SLOTS: void driverDestroyed() { driver = NULL; } }; @@ -254,6 +253,7 @@ static QVariant::Type qDecodeMYSQLType(int mysqltype, uint flags) break; case FIELD_TYPE_FLOAT : case FIELD_TYPE_DOUBLE : + case FIELD_TYPE_DECIMAL : type = QVariant::Double; break; case FIELD_TYPE_DATE : @@ -277,7 +277,6 @@ static QVariant::Type qDecodeMYSQLType(int mysqltype, uint flags) default: case FIELD_TYPE_ENUM : case FIELD_TYPE_SET : - case FIELD_TYPE_DECIMAL : type = QVariant::String; break; } @@ -354,6 +353,7 @@ bool QMYSQLResultPrivate::bindInValues() while((fieldInfo = mysql_fetch_field(meta))) { QMyField &f = fields[i]; f.myField = fieldInfo; + f.type = qDecodeMYSQLType(fieldInfo->type, fieldInfo->flags); if (qIsBlob(fieldInfo->type)) { // the size of a blob-field is available as soon as we call @@ -384,7 +384,7 @@ bool QMYSQLResultPrivate::bindInValues() QMYSQLResult::QMYSQLResult(const QMYSQLDriver* db) : QSqlResult(db) { - d = new QMYSQLResultPrivate(db); + d = new QMYSQLResultPrivate(db, this); } QMYSQLResult::~QMYSQLResult() @@ -599,15 +599,16 @@ QVariant QMYSQLResult::data(int field) case QVariant::Double: { QVariant v; bool ok=false; - switch(d->precisionPolicy) { + double dbl = val.toDouble(&ok); + switch(numericalPrecisionPolicy()) { case QSql::LowPrecisionInt32: - v=val.toInt(&ok); + v=QVariant(dbl).toInt(); break; case QSql::LowPrecisionInt64: - v = val.toLongLong(&ok); + v = QVariant(dbl).toLongLong(); break; case QSql::LowPrecisionDouble: - v = val.toDouble(&ok); + v = QVariant(dbl); break; case QSql::HighPrecision: default: @@ -620,6 +621,7 @@ QVariant QMYSQLResult::data(int field) else return QVariant(); } + return QVariant(val.toDouble()); case QVariant::Date: return qDateFromString(val); case QVariant::Time: @@ -679,6 +681,7 @@ bool QMYSQLResult::reset (const QString& query) setSelect(numFields != 0); d->fields.resize(numFields); d->rowsAffected = mysql_affected_rows(d->driver->d->mysql); + if (isSelect()) { for(int i = 0; i < numFields; i++) { MYSQL_FIELD* field = mysql_fetch_field_direct(d->result, i); @@ -813,10 +816,6 @@ void QMYSQLResult::virtual_hook(int id, void *data) Q_ASSERT(data); *static_cast(data) = nextResult(); break; - case QSqlResult::SetNumericalPrecision: - Q_ASSERT(data); - d->precisionPolicy = *reinterpret_cast(data); - break; default: QSqlResult::virtual_hook(id, data); } @@ -1148,7 +1147,6 @@ bool QMYSQLDriver::hasFeature(DriverFeature f) const case NamedPlaceholders: case BatchOperations: case SimpleLocking: - case LowPrecisionNumbers: case EventNotifications: case FinishQuery: return false; @@ -1156,6 +1154,7 @@ bool QMYSQLDriver::hasFeature(DriverFeature f) const case BLOB: case LastInsertId: case Unicode: + case LowPrecisionNumbers: return true; case PreparedQueries: case PositionalPlaceholders: @@ -1369,6 +1368,7 @@ QSqlRecord QMYSQLDriver::record(const QString& tablename) const return info; } MYSQL_FIELD* field; + while ((field = mysql_fetch_field(r))) info.append(qToField(field, d->tc)); mysql_free_result(r); @@ -1485,4 +1485,4 @@ bool QMYSQLDriver::isIdentifierEscapedImplementation(const QString &identifier, QT_END_NAMESPACE -#include "qsql_mysql.moc" \ No newline at end of file +#include "qsql_mysql.moc" diff --git a/src/sql/drivers/mysql/qsql_mysql.h b/src/sql/drivers/mysql/qsql_mysql.h index 31d9dcf..3c27d16 100644 --- a/src/sql/drivers/mysql/qsql_mysql.h +++ b/src/sql/drivers/mysql/qsql_mysql.h @@ -69,6 +69,7 @@ class QSqlRecordInfo; class QMYSQLResult : public QSqlResult { friend class QMYSQLDriver; + friend class QMYSQLResultPrivate; public: explicit QMYSQLResult(const QMYSQLDriver* db); ~QMYSQLResult(); diff --git a/src/sql/drivers/oci/qsql_oci.cpp b/src/sql/drivers/oci/qsql_oci.cpp index e6ee63d..0f45aad 100644 --- a/src/sql/drivers/oci/qsql_oci.cpp +++ b/src/sql/drivers/oci/qsql_oci.cpp @@ -148,7 +148,6 @@ struct QOCIResultPrivate bool transaction; int serverVersion; int prefetchRows, prefetchMem; - QSql::NumericalPrecisionPolicy precisionPolicy; void setCharset(OCIBind* hbnd); void setStatementAttributes(); @@ -405,7 +404,6 @@ struct QOCIDriverPrivate int serverVersion; ub4 prefetchRows; ub2 prefetchMem; - QSql::NumericalPrecisionPolicy precisionPolicy; QString user; void allocErrorHandle(); @@ -413,7 +411,7 @@ struct QOCIDriverPrivate QOCIDriverPrivate::QOCIDriverPrivate() : env(0), svc(0), srvhp(0), authp(0), err(0), transaction(false), serverVersion(-1), - prefetchRows(-1), prefetchMem(QOCI_PREFETCH_MEM), precisionPolicy(QSql::HighPrecision) + prefetchRows(-1), prefetchMem(QOCI_PREFETCH_MEM) { } @@ -621,136 +619,6 @@ static QSqlField qFromOraInf(const OraFieldInfo &ofi) return f; } -static OraFieldInfo qMakeOraField(const QOCIResultPrivate* p, OCIParam* param) -{ - OraFieldInfo ofi; - ub2 colType(0); - text *colName = 0; - ub4 colNameLen(0); - sb1 colScale(0); - ub2 colLength(0); - ub2 colFieldLength(0); - sb2 colPrecision(0); - ub1 colIsNull(0); - int r(0); - QVariant::Type type(QVariant::Invalid); - - r = OCIAttrGet(param, - OCI_DTYPE_PARAM, - &colType, - 0, - OCI_ATTR_DATA_TYPE, - p->err); - if (r != 0) - qOraWarning("qMakeOraField:", p->err); - - r = OCIAttrGet(param, - OCI_DTYPE_PARAM, - &colName, - &colNameLen, - OCI_ATTR_NAME, - p->err); - if (r != 0) - qOraWarning("qMakeOraField:", p->err); - - r = OCIAttrGet(param, - OCI_DTYPE_PARAM, - &colLength, - 0, - OCI_ATTR_DATA_SIZE, /* in bytes */ - p->err); - if (r != 0) - qOraWarning("qMakeOraField:", p->err); - -#ifdef OCI_ATTR_CHAR_SIZE - r = OCIAttrGet(param, - OCI_DTYPE_PARAM, - &colFieldLength, - 0, - OCI_ATTR_CHAR_SIZE, - p->err); - if (r != 0) - qOraWarning("qMakeOraField:", p->err); -#else - // for Oracle8. - colFieldLength = colLength; -#endif - - r = OCIAttrGet(param, - OCI_DTYPE_PARAM, - &colPrecision, - 0, - OCI_ATTR_PRECISION, - p->err); - if (r != 0) - qOraWarning("qMakeOraField:", p->err); - - r = OCIAttrGet(param, - OCI_DTYPE_PARAM, - &colScale, - 0, - OCI_ATTR_SCALE, - p->err); - if (r != 0) - qOraWarning("qMakeOraField:", p->err); - r = OCIAttrGet(param, - OCI_DTYPE_PARAM, - &colType, - 0, - OCI_ATTR_DATA_TYPE, - p->err); - if (r != 0) - qOraWarning("qMakeOraField:", p->err); - r = OCIAttrGet(param, - OCI_DTYPE_PARAM, - &colIsNull, - 0, - OCI_ATTR_IS_NULL, - p->err); - if (r != 0) - qOraWarning("qMakeOraField:", p->err); - - type = qDecodeOCIType(colType, p->precisionPolicy); - - if (type == QVariant::Int) { - if (colLength == 22 && colPrecision == 0 && colScale == 0) - type = QVariant::String; - if (colScale > 0) - type = QVariant::String; - } - - // bind as double if the precision policy asks for it - if (((colType == SQLT_FLT) || (colType == SQLT_NUM)) - && (p->precisionPolicy == QSql::LowPrecisionDouble)) { - type = QVariant::Double; - } - - // bind as int32 or int64 if the precision policy asks for it - if ((colType == SQLT_NUM) || (colType == SQLT_VNU) || (colType == SQLT_UIN) - || (colType == SQLT_INT)) { - if (p->precisionPolicy == QSql::LowPrecisionInt64) - type = QVariant::LongLong; - else if (p->precisionPolicy == QSql::LowPrecisionInt32) - type = QVariant::Int; - } - - if (colType == SQLT_BLOB) - colLength = 0; - - // colNameLen is length in bytes - ofi.name = QString(reinterpret_cast(colName), colNameLen / 2); - ofi.type = type; - ofi.oraType = colType; - ofi.oraFieldLength = colFieldLength; - ofi.oraLength = colLength; - ofi.oraScale = colScale; - ofi.oraPrecision = colPrecision; - ofi.oraIsNull = colIsNull; - - return ofi; -} - - /*! \internal @@ -806,6 +674,7 @@ public: private: char* create(int position, int size); OCILobLocator ** createLobLocator(int position, OCIEnv* env); + OraFieldInfo qMakeOraField(const QOCIResultPrivate* p, OCIParam* param) const; class OraFieldInf { @@ -1137,6 +1006,135 @@ int QOCICols::readPiecewise(QVector &values, int index) return r; } +OraFieldInfo QOCICols::qMakeOraField(const QOCIResultPrivate* p, OCIParam* param) const +{ + OraFieldInfo ofi; + ub2 colType(0); + text *colName = 0; + ub4 colNameLen(0); + sb1 colScale(0); + ub2 colLength(0); + ub2 colFieldLength(0); + sb2 colPrecision(0); + ub1 colIsNull(0); + int r(0); + QVariant::Type type(QVariant::Invalid); + + r = OCIAttrGet(param, + OCI_DTYPE_PARAM, + &colType, + 0, + OCI_ATTR_DATA_TYPE, + p->err); + if (r != 0) + qOraWarning("qMakeOraField:", p->err); + + r = OCIAttrGet(param, + OCI_DTYPE_PARAM, + &colName, + &colNameLen, + OCI_ATTR_NAME, + p->err); + if (r != 0) + qOraWarning("qMakeOraField:", p->err); + + r = OCIAttrGet(param, + OCI_DTYPE_PARAM, + &colLength, + 0, + OCI_ATTR_DATA_SIZE, /* in bytes */ + p->err); + if (r != 0) + qOraWarning("qMakeOraField:", p->err); + +#ifdef OCI_ATTR_CHAR_SIZE + r = OCIAttrGet(param, + OCI_DTYPE_PARAM, + &colFieldLength, + 0, + OCI_ATTR_CHAR_SIZE, + p->err); + if (r != 0) + qOraWarning("qMakeOraField:", p->err); +#else + // for Oracle8. + colFieldLength = colLength; +#endif + + r = OCIAttrGet(param, + OCI_DTYPE_PARAM, + &colPrecision, + 0, + OCI_ATTR_PRECISION, + p->err); + if (r != 0) + qOraWarning("qMakeOraField:", p->err); + + r = OCIAttrGet(param, + OCI_DTYPE_PARAM, + &colScale, + 0, + OCI_ATTR_SCALE, + p->err); + if (r != 0) + qOraWarning("qMakeOraField:", p->err); + r = OCIAttrGet(param, + OCI_DTYPE_PARAM, + &colType, + 0, + OCI_ATTR_DATA_TYPE, + p->err); + if (r != 0) + qOraWarning("qMakeOraField:", p->err); + r = OCIAttrGet(param, + OCI_DTYPE_PARAM, + &colIsNull, + 0, + OCI_ATTR_IS_NULL, + p->err); + if (r != 0) + qOraWarning("qMakeOraField:", p->err); + + type = qDecodeOCIType(colType, p->q->numericalPrecisionPolicy()); + + if (type == QVariant::Int) { + if (colLength == 22 && colPrecision == 0 && colScale == 0) + type = QVariant::String; + if (colScale > 0) + type = QVariant::String; + } + + // bind as double if the precision policy asks for it + if (((colType == SQLT_FLT) || (colType == SQLT_NUM)) + && (p->q->numericalPrecisionPolicy() == QSql::LowPrecisionDouble)) { + type = QVariant::Double; + } + + // bind as int32 or int64 if the precision policy asks for it + if ((colType == SQLT_NUM) || (colType == SQLT_VNU) || (colType == SQLT_UIN) + || (colType == SQLT_INT)) { + if (p->q->numericalPrecisionPolicy() == QSql::LowPrecisionInt64) + type = QVariant::LongLong; + else if (p->q->numericalPrecisionPolicy() == QSql::LowPrecisionInt32) + type = QVariant::Int; + } + + if (colType == SQLT_BLOB) + colLength = 0; + + // colNameLen is length in bytes + ofi.name = QString(reinterpret_cast(colName), colNameLen / 2); + ofi.type = type; + ofi.oraType = colType; + ofi.oraFieldLength = colFieldLength; + ofi.oraLength = colLength; + ofi.oraScale = colScale; + ofi.oraPrecision = colPrecision; + ofi.oraIsNull = colIsNull; + + return ofi; +} + struct QOCIBatchColumn { inline QOCIBatchColumn() @@ -1580,19 +1578,19 @@ void QOCICols::getValues(QVector &v, int index) case QVariant::Double: case QVariant::Int: case QVariant::LongLong: - if (d->precisionPolicy != QSql::HighPrecision) { - if ((d->precisionPolicy == QSql::LowPrecisionDouble) + if (d->q->numericalPrecisionPolicy() != QSql::HighPrecision) { + if ((d->q->numericalPrecisionPolicy() == QSql::LowPrecisionDouble) && (fld.typ == QVariant::Double)) { v[index + i] = *reinterpret_cast(fld.data); break; - } else if ((d->precisionPolicy == QSql::LowPrecisionInt64) + } else if ((d->q->numericalPrecisionPolicy() == QSql::LowPrecisionInt64) && (fld.typ == QVariant::LongLong)) { qint64 qll = 0; OCINumberToInt(d->err, reinterpret_cast(fld.data), sizeof(qint64), OCI_NUMBER_SIGNED, &qll); v[index + i] = qll; break; - } else if ((d->precisionPolicy == QSql::LowPrecisionInt32) + } else if ((d->q->numericalPrecisionPolicy() == QSql::LowPrecisionInt32) && (fld.typ == QVariant::Int)) { v[index + i] = *reinterpret_cast(fld.data); break; @@ -1618,8 +1616,7 @@ void QOCICols::getValues(QVector &v, int index) QOCIResultPrivate::QOCIResultPrivate(QOCIResult *result, const QOCIDriverPrivate *driver) : cols(0), q(result), env(driver->env), err(0), svc(const_cast(driver->svc)), sql(0), transaction(driver->transaction), serverVersion(driver->serverVersion), - prefetchRows(driver->prefetchRows), prefetchMem(driver->prefetchMem), - precisionPolicy(driver->precisionPolicy) + prefetchRows(driver->prefetchRows), prefetchMem(driver->prefetchMem) { int r = OCIHandleAlloc(env, reinterpret_cast(&err), @@ -1901,9 +1898,6 @@ void QOCIResult::virtual_hook(int id, void *data) case QSqlResult::BatchOperation: QOCICols::execBatch(d, boundValues(), *reinterpret_cast(data)); break; - case QSqlResult::SetNumericalPrecision: - d->precisionPolicy = *reinterpret_cast(data); - break; default: QSqlResult::virtual_hook(id, data); } @@ -2314,7 +2308,7 @@ QSqlRecord QOCIDriver::record(const QString& tablename) const << QLatin1String("BINARY_DOUBLE"); if (buildRecordInfo) { do { - QVariant::Type ty = qDecodeOCIType(t.value(1).toString(),t.numericalPrecisionPolicy()); + QVariant::Type ty = qDecodeOCIType(t.value(1).toString(), t.numericalPrecisionPolicy()); QSqlField f(t.value(0).toString(), ty); f.setRequired(t.value(5).toString() == QLatin1String("N")); f.setPrecision(t.value(4).toInt()); diff --git a/src/sql/drivers/odbc/qsql_odbc.cpp b/src/sql/drivers/odbc/qsql_odbc.cpp index 8eaa8bf..f60c33c 100644 --- a/src/sql/drivers/odbc/qsql_odbc.cpp +++ b/src/sql/drivers/odbc/qsql_odbc.cpp @@ -127,7 +127,7 @@ class QODBCPrivate { public: QODBCPrivate() - : hEnv(0), hDbc(0), hStmt(0), useSchema(false), hasSQLFetchScroll(true), precisionPolicy(QSql::HighPrecision) + : hEnv(0), hDbc(0), hStmt(0), useSchema(false), hasSQLFetchScroll(true) { sql_char_type = sql_varchar_type = sql_longvarchar_type = QVariant::ByteArray; unicode = false; @@ -151,7 +151,6 @@ public: int fieldCacheIdx; int disconnectCount; bool hasSQLFetchScroll; - QSql::NumericalPrecisionPolicy precisionPolicy; bool isStmtHandleValid(const QSqlDriver *driver); void updateStmtHandleState(const QSqlDriver *driver); @@ -444,6 +443,26 @@ static QVariant qGetIntData(SQLHANDLE hStmt, int column, bool isSigned = true) return uint(intbuf); } +static QVariant qGetDoubleData(SQLHANDLE hStmt, int column) +{ + SQLDOUBLE dblbuf; + SQLINTEGER lengthIndicator = 0; + SQLRETURN r = SQLGetData(hStmt, + column+1, + SQL_C_DOUBLE, + (SQLPOINTER) &dblbuf, + 0, + &lengthIndicator); + if (r != SQL_SUCCESS && r != SQL_SUCCESS_WITH_INFO) { + return QVariant(QVariant::Invalid); + } + if(lengthIndicator == SQL_NULL_DATA) + return QVariant(QVariant::Double); + + return (double) dblbuf; +} + + static QVariant qGetBigIntData(SQLHANDLE hStmt, int column, bool isSigned = true) { SQLBIGINT lngbuf = 0; @@ -1109,29 +1128,21 @@ QVariant QODBCResult::data(int field) d->fieldCache[i] = qGetStringData(d->hStmt, i, info.length(), true); break; case QVariant::Double: - { - QString value=qGetStringData(d->hStmt, i, info.length(), false); - bool ok=false; - switch(d->precisionPolicy) { - case QSql::LowPrecisionInt32: - d->fieldCache[i] = value.toInt(&ok); - break; - case QSql::LowPrecisionInt64: - d->fieldCache[i] = value.toLongLong(&ok); - break; - case QSql::LowPrecisionDouble: - d->fieldCache[i] = value.toDouble(&ok); - break; - case QSql::HighPrecision: - default: - d->fieldCache[i] = value; - ok=true; - break; - } - if(ok==false) - d->fieldCache[i] = QVariant(); - break; + switch(numericalPrecisionPolicy()) { + case QSql::LowPrecisionInt32: + d->fieldCache[i] = qGetIntData(d->hStmt, i); + break; + case QSql::LowPrecisionInt64: + d->fieldCache[i] = qGetBigIntData(d->hStmt, i); + break; + case QSql::LowPrecisionDouble: + d->fieldCache[i] = qGetDoubleData(d->hStmt, i); + break; + case QSql::HighPrecision: + d->fieldCache[i] = qGetStringData(d->hStmt, i, info.length(), false); + break; } + break; default: d->fieldCache[i] = QVariant(qGetStringData(d->hStmt, i, info.length(), false)); break; @@ -1628,10 +1639,6 @@ void QODBCResult::virtual_hook(int id, void *data) Q_ASSERT(data); *static_cast(data) = nextResult(); break; - case QSqlResult::SetNumericalPrecision: - Q_ASSERT(data); - d->precisionPolicy = *reinterpret_cast(data); - break; default: QSqlResult::virtual_hook(id, data); } diff --git a/src/sql/drivers/psql/qsql_psql.cpp b/src/sql/drivers/psql/qsql_psql.cpp index ce0b8c5..169a371 100644 --- a/src/sql/drivers/psql/qsql_psql.cpp +++ b/src/sql/drivers/psql/qsql_psql.cpp @@ -136,13 +136,12 @@ void QPSQLDriverPrivate::appendTables(QStringList &tl, QSqlQuery &t, QChar type) class QPSQLResultPrivate { public: - QPSQLResultPrivate(QPSQLResult *qq): q(qq), driver(0), result(0), currentSize(-1), precisionPolicy(QSql::HighPrecision) {} + QPSQLResultPrivate(QPSQLResult *qq): q(qq), driver(0), result(0), currentSize(-1) {} QPSQLResult *q; const QPSQLDriverPrivate *driver; PGresult *result; int currentSize; - QSql::NumericalPrecisionPolicy precisionPolicy; bool preparedQueriesEnabled; QString preparedStmtId; @@ -320,15 +319,16 @@ QVariant QPSQLResult::data(int i) return atoi(val); case QVariant::Double: if (ptype == QNUMERICOID) { - if (d->precisionPolicy != QSql::HighPrecision) { + if (numericalPrecisionPolicy() != QSql::HighPrecision) { QVariant retval; bool convert; - if (d->precisionPolicy == QSql::LowPrecisionInt64) - retval = QString::fromAscii(val).toLongLong(&convert); - else if (d->precisionPolicy == QSql::LowPrecisionInt32) - retval = QString::fromAscii(val).toInt(&convert); - else if (d->precisionPolicy == QSql::LowPrecisionDouble) - retval = QString::fromAscii(val).toDouble(&convert); + double dbl=QString::fromAscii(val).toDouble(&convert); + if (numericalPrecisionPolicy() == QSql::LowPrecisionInt64) + retval = (qlonglong)dbl; + else if (numericalPrecisionPolicy() == QSql::LowPrecisionInt32) + retval = (int)dbl; + else if (numericalPrecisionPolicy() == QSql::LowPrecisionDouble) + retval = dbl; if (!convert) return QVariant(); return retval; @@ -467,9 +467,6 @@ void QPSQLResult::virtual_hook(int id, void *data) Q_ASSERT(data); switch (id) { - case QSqlResult::SetNumericalPrecision: - d->precisionPolicy = *reinterpret_cast(data); - break; default: QSqlResult::virtual_hook(id, data); } diff --git a/src/sql/drivers/sqlite/qsql_sqlite.cpp b/src/sql/drivers/sqlite/qsql_sqlite.cpp index 05d63ca..0f6fb25 100644 --- a/src/sql/drivers/sqlite/qsql_sqlite.cpp +++ b/src/sql/drivers/sqlite/qsql_sqlite.cpp @@ -115,13 +115,12 @@ public: uint skipRow: 1; // skip the next fetchNext()? uint utf8: 1; QSqlRecord rInf; - QSql::NumericalPrecisionPolicy precisionPolicy; }; static const uint initial_cache_size = 128; QSQLiteResultPrivate::QSQLiteResultPrivate(QSQLiteResult* res) : q(res), access(0), - stmt(0), skippedStatus(false), skipRow(false), utf8(false), precisionPolicy(QSql::HighPrecision) + stmt(0), skippedStatus(false), skipRow(false), utf8(false) { } @@ -212,7 +211,7 @@ bool QSQLiteResultPrivate::fetchNext(QSqlCachedResult::ValueCache &values, int i values[i + idx] = sqlite3_column_int64(stmt, i); break; case SQLITE_FLOAT: - switch(precisionPolicy) { + switch(q->numericalPrecisionPolicy()) { case QSql::LowPrecisionInt32: values[i + idx] = sqlite3_column_int(stmt, i); break; @@ -289,10 +288,6 @@ void QSQLiteResult::virtual_hook(int id, void *data) if (d->stmt) sqlite3_reset(d->stmt); break; - case QSqlResult::SetNumericalPrecision: - Q_ASSERT(data); - d->precisionPolicy = *reinterpret_cast(data); - break; default: QSqlResult::virtual_hook(id, data); } @@ -481,11 +476,11 @@ bool QSQLiteDriver::hasFeature(DriverFeature f) const case PositionalPlaceholders: case SimpleLocking: case FinishQuery: + case LowPrecisionNumbers: return true; case QuerySize: case NamedPlaceholders: case BatchOperations: - case LowPrecisionNumbers: case EventNotifications: case MultipleResultSets: return false; diff --git a/src/sql/drivers/sqlite2/qsql_sqlite2.cpp b/src/sql/drivers/sqlite2/qsql_sqlite2.cpp index cb72ff0..bd7c367 100644 --- a/src/sql/drivers/sqlite2/qsql_sqlite2.cpp +++ b/src/sql/drivers/sqlite2/qsql_sqlite2.cpp @@ -114,13 +114,12 @@ public: uint skipRow: 1; // skip the next fetchNext()? uint utf8: 1; QSqlRecord rInf; - QSql::NumericalPrecisionPolicy precisionPolicy; }; static const uint initial_cache_size = 128; QSQLite2ResultPrivate::QSQLite2ResultPrivate(QSQLite2Result* res) : q(res), access(0), currentTail(0), - currentMachine(0), skippedStatus(false), skipRow(false), utf8(false), precisionPolicy(QSql::HighPrecision) + currentMachine(0), skippedStatus(false), skipRow(false), utf8(false) { } @@ -260,10 +259,6 @@ void QSQLite2Result::virtual_hook(int id, void *data) case QSqlResult::DetachFromResultSet: d->finalize(); break; - case QSqlResult::SetNumericalPrecision: - Q_ASSERT(data); - d->precisionPolicy = *reinterpret_cast(data); - break; default: QSqlResult::virtual_hook(id, data); } diff --git a/src/sql/kernel/qsqldatabase.cpp b/src/sql/kernel/qsqldatabase.cpp index a270c0e..990ad9a 100644 --- a/src/sql/kernel/qsqldatabase.cpp +++ b/src/sql/kernel/qsqldatabase.cpp @@ -129,11 +129,16 @@ Q_GLOBAL_STATIC(QConnectionDict, dbDict) class QSqlDatabasePrivate { public: - QSqlDatabasePrivate(QSqlDriver *dr = 0): + QSqlDatabasePrivate(QSqlDatabase *d, QSqlDriver *dr = 0): + q(d), driver(dr), port(-1) { ref = 1; + if(driver) + precisionPolicy = driver->numericalPrecisionPolicy(); + else + precisionPolicy= QSql::LowPrecisionDouble; } QSqlDatabasePrivate(const QSqlDatabasePrivate &other); ~QSqlDatabasePrivate(); @@ -142,6 +147,7 @@ public: void disable(); QAtomicInt ref; + QSqlDatabase *q; QSqlDriver* driver; QString dbname; QString uname; @@ -151,6 +157,7 @@ public: int port; QString connOptions; QString connName; + QSql::NumericalPrecisionPolicy precisionPolicy; static QSqlDatabasePrivate *shared_null(); static QSqlDatabase database(const QString& name, bool open); @@ -164,6 +171,7 @@ public: QSqlDatabasePrivate::QSqlDatabasePrivate(const QSqlDatabasePrivate &other) { ref = 1; + q = other.q; dbname = other.dbname; uname = other.uname; pword = other.pword; @@ -172,6 +180,7 @@ QSqlDatabasePrivate::QSqlDatabasePrivate(const QSqlDatabasePrivate &other) port = other.port; connOptions = other.connOptions; driver = other.driver; + precisionPolicy = other.precisionPolicy; } QSqlDatabasePrivate::~QSqlDatabasePrivate() @@ -216,7 +225,7 @@ DriverDict &QSqlDatabasePrivate::driverDict() QSqlDatabasePrivate *QSqlDatabasePrivate::shared_null() { static QSqlNullDriver dr; - static QSqlDatabasePrivate n(&dr); + static QSqlDatabasePrivate n(NULL, &dr); return &n; } @@ -281,6 +290,7 @@ QSqlDatabase QSqlDatabasePrivate::database(const QString& name, bool open) */ void QSqlDatabasePrivate::copy(const QSqlDatabasePrivate *other) { + q = other->q; dbname = other->dbname; uname = other->uname; pword = other->pword; @@ -288,6 +298,7 @@ void QSqlDatabasePrivate::copy(const QSqlDatabasePrivate *other) drvName = other->drvName; port = other->port; connOptions = other->connOptions; + precisionPolicy = other->precisionPolicy; } void QSqlDatabasePrivate::disable() @@ -658,7 +669,7 @@ QStringList QSqlDatabase::connectionNames() QSqlDatabase::QSqlDatabase(const QString &type) { - d = new QSqlDatabasePrivate(); + d = new QSqlDatabasePrivate(this); d->init(type); } @@ -670,7 +681,7 @@ QSqlDatabase::QSqlDatabase(const QString &type) QSqlDatabase::QSqlDatabase(QSqlDriver *driver) { - d = new QSqlDatabasePrivate(driver); + d = new QSqlDatabasePrivate(this, driver); } /*! @@ -1469,6 +1480,42 @@ QString QSqlDatabase::connectionName() const return d->connName; } +/*! + + Sets the default numerical precision policy that queries use when created + on this database connection. + + Note: Drivers that don't support fetching numerical values with low + precision will ignore the precision policy. You can use + QSqlDriver::hasFeature() to find out whether a driver supports this + feature. + + Note: Setting the default precision policy doesn't affect any currently + active queries. + + \sa QSql::NumericalPrecisionPolicy, numericalPrecisionPolicy(), QSqlQuery::setNumericalPrecisionPolicy(), QSqlQuery::numericalPrecisionPolicy() +*/ +void QSqlDatabase::setNumericalPrecisionPolicy(QSql::NumericalPrecisionPolicy precisionPolicy) +{ + if(driver()) + driver()->setNumericalPrecisionPolicy(precisionPolicy); + d->precisionPolicy = precisionPolicy; +} + +/*! + Returns the current default precision policy for the database connection. + + \sa QSql::NumericalPrecisionPolicy, setNumericalPrecisionPolicy(), QSqlQuery::numericalPrecisionPolicy(), QSqlQuery::setNumericalPrecisionPolicy() +*/ +QSql::NumericalPrecisionPolicy QSqlDatabase::numericalPrecisionPolicy() const +{ + if(driver()) + return driver()->numericalPrecisionPolicy(); + else + return d->precisionPolicy; +} + + #ifndef QT_NO_DEBUG_STREAM QDebug operator<<(QDebug dbg, const QSqlDatabase &d) { diff --git a/src/sql/kernel/qsqldatabase.h b/src/sql/kernel/qsqldatabase.h index ca6f0b0..638a8a5 100644 --- a/src/sql/kernel/qsqldatabase.h +++ b/src/sql/kernel/qsqldatabase.h @@ -120,6 +120,8 @@ public: int port() const; QString connectOptions() const; QString connectionName() const; + void setNumericalPrecisionPolicy(QSql::NumericalPrecisionPolicy precisionPolicy); + QSql::NumericalPrecisionPolicy numericalPrecisionPolicy() const; QSqlDriver* driver() const; diff --git a/src/sql/kernel/qsqldriver.cpp b/src/sql/kernel/qsqldriver.cpp index 477d531..f7492c3 100644 --- a/src/sql/kernel/qsqldriver.cpp +++ b/src/sql/kernel/qsqldriver.cpp @@ -72,10 +72,11 @@ public: uint isOpen : 1; uint isOpenError : 1; QSqlError error; + QSql::NumericalPrecisionPolicy precisionPolicy; }; inline QSqlDriverPrivate::QSqlDriverPrivate() - : QObjectPrivate(), isOpen(false), isOpenError(false) + : QObjectPrivate(), isOpen(false), isOpenError(false), precisionPolicy(QSql::LowPrecisionDouble) { } @@ -912,4 +913,29 @@ QString QSqlDriver::stripDelimitersImplementation(const QString &identifier, Ide return ret; } +/*! + + Sets the default numerical precision policy that queries use when created + by this driver. + + Note: Setting the default precision policy doesn't affect any currently + active queries. + + \sa QSql::NumericalPrecisionPolicy, numericalPrecisionPolicy(), QSqlQuery::setNumericalPrecisionPolicy(), QSqlQuery::numericalPrecisionPolicy() +*/ +void QSqlDriver::setNumericalPrecisionPolicy(QSql::NumericalPrecisionPolicy precisionPolicy) +{ + d_func()->precisionPolicy = precisionPolicy; +} + +/*! + Returns the current default precision policy for the database connection. + + \sa QSql::NumericalPrecisionPolicy, setNumericalPrecisionPolicy(), QSqlQuery::numericalPrecisionPolicy(), QSqlQuery::setNumericalPrecisionPolicy() +*/ +QSql::NumericalPrecisionPolicy QSqlDriver::numericalPrecisionPolicy() const +{ + return d_func()->precisionPolicy; +} + QT_END_NAMESPACE diff --git a/src/sql/kernel/qsqldriver.h b/src/sql/kernel/qsqldriver.h index 8ac1471..1b52437 100644 --- a/src/sql/kernel/qsqldriver.h +++ b/src/sql/kernel/qsqldriver.h @@ -130,6 +130,9 @@ public: bool isIdentifierEscaped(const QString &identifier, IdentifierType type) const; // ### Qt 5: make virtual QString stripDelimiters(const QString &identifier, IdentifierType type) const; // ### Qt 5: make virtual + void setNumericalPrecisionPolicy(QSql::NumericalPrecisionPolicy precisionPolicy); + QSql::NumericalPrecisionPolicy numericalPrecisionPolicy() const; + Q_SIGNALS: void notification(const QString &name); diff --git a/src/sql/kernel/qsqlquery.cpp b/src/sql/kernel/qsqlquery.cpp index 2a07e28..2e531b4 100644 --- a/src/sql/kernel/qsqlquery.cpp +++ b/src/sql/kernel/qsqlquery.cpp @@ -61,7 +61,6 @@ public: ~QSqlQueryPrivate(); QAtomicInt ref; QSqlResult* sqlResult; - QSql::NumericalPrecisionPolicy precisionPolicy; static QSqlQueryPrivate* shared_null(); }; @@ -81,7 +80,7 @@ QSqlQueryPrivate* QSqlQueryPrivate::shared_null() \internal */ QSqlQueryPrivate::QSqlQueryPrivate(QSqlResult* result) - : ref(1), sqlResult(result), precisionPolicy(QSql::HighPrecision) + : ref(1), sqlResult(result) { if (!sqlResult) sqlResult = nullResult(); @@ -351,14 +350,14 @@ bool QSqlQuery::exec(const QString& query) if (d->ref != 1) { bool fo = isForwardOnly(); *this = QSqlQuery(driver()->createResult()); - d->sqlResult->setNumericalPrecisionPolicy(d->precisionPolicy); + d->sqlResult->setNumericalPrecisionPolicy(d->sqlResult->numericalPrecisionPolicy()); setForwardOnly(fo); } else { d->sqlResult->clear(); d->sqlResult->setActive(false); d->sqlResult->setLastError(QSqlError()); d->sqlResult->setAt(QSql::BeforeFirstRow); - d->sqlResult->setNumericalPrecisionPolicy(d->precisionPolicy); + d->sqlResult->setNumericalPrecisionPolicy(d->sqlResult->numericalPrecisionPolicy()); } d->sqlResult->setQuery(query.trimmed()); if (!driver()->isOpen() || driver()->isOpenError()) { @@ -891,12 +890,12 @@ bool QSqlQuery::prepare(const QString& query) bool fo = isForwardOnly(); *this = QSqlQuery(driver()->createResult()); setForwardOnly(fo); - d->sqlResult->setNumericalPrecisionPolicy(d->precisionPolicy); + d->sqlResult->setNumericalPrecisionPolicy(d->sqlResult->numericalPrecisionPolicy()); } else { d->sqlResult->setActive(false); d->sqlResult->setLastError(QSqlError()); d->sqlResult->setAt(QSql::BeforeFirstRow); - d->sqlResult->setNumericalPrecisionPolicy(d->precisionPolicy); + d->sqlResult->setNumericalPrecisionPolicy(d->sqlResult->numericalPrecisionPolicy()); } if (!driver()) { qWarning("QSqlQuery::prepare: no driver"); @@ -1126,10 +1125,10 @@ QVariant QSqlQuery::lastInsertId() const Instruct the database driver to return numerical values with a precision specified by \a precisionPolicy. - The Oracle driver, for example, retrieves numerical values as - strings by default to prevent the loss of precision. If the high - precision doesn't matter, use this method to increase execution - speed by bypassing string conversions. + The Oracle driver, for example, can retrieve numerical values as + strings to prevent the loss of precision. If high precision doesn't + matter, use this method to increase execution speed by bypassing + string conversions. Note: Drivers that don't support fetching numerical values with low precision will ignore the precision policy. You can use @@ -1144,7 +1143,7 @@ QVariant QSqlQuery::lastInsertId() const */ void QSqlQuery::setNumericalPrecisionPolicy(QSql::NumericalPrecisionPolicy precisionPolicy) { - d->precisionPolicy = precisionPolicy; + d->sqlResult->setNumericalPrecisionPolicy(precisionPolicy); } /*! @@ -1154,7 +1153,7 @@ void QSqlQuery::setNumericalPrecisionPolicy(QSql::NumericalPrecisionPolicy preci */ QSql::NumericalPrecisionPolicy QSqlQuery::numericalPrecisionPolicy() const { - return d->precisionPolicy; + return d->sqlResult->numericalPrecisionPolicy(); } /*! diff --git a/src/sql/kernel/qsqlresult.cpp b/src/sql/kernel/qsqlresult.cpp index 180bfc7..a621b24 100644 --- a/src/sql/kernel/qsqlresult.cpp +++ b/src/sql/kernel/qsqlresult.cpp @@ -48,6 +48,7 @@ #include "qsqlresult.h" #include "qvector.h" #include "qsqldriver.h" +#include QT_BEGIN_NAMESPACE @@ -64,7 +65,7 @@ class QSqlResultPrivate public: QSqlResultPrivate(QSqlResult* d) : q(d), sqldriver(0), idx(QSql::BeforeFirstRow), active(false), - isSel(false), forwardOnly(false), bindCount(0), binds(QSqlResult::PositionalBinding) + isSel(false), forwardOnly(false), precisionPolicy(QSql::LowPrecisionDouble), bindCount(0), binds(QSqlResult::PositionalBinding) {} void clearValues() @@ -104,6 +105,7 @@ public: bool isSel; QSqlError error; bool forwardOnly; + QSql::NumericalPrecisionPolicy precisionPolicy; int bindCount; QSqlResult::BindingSyntax binds; @@ -249,6 +251,9 @@ QSqlResult::QSqlResult(const QSqlDriver *db) { d = new QSqlResultPrivate(this); d->sqldriver = db; + if(db) { + setNumericalPrecisionPolicy(db->numericalPrecisionPolicy()); + } } /*! @@ -965,8 +970,14 @@ void QSqlResult::detachFromResultSet() */ void QSqlResult::setNumericalPrecisionPolicy(QSql::NumericalPrecisionPolicy policy) { - if (driver()->hasFeature(QSqlDriver::LowPrecisionNumbers)) - virtual_hook(SetNumericalPrecision, &policy); + d->precisionPolicy = policy; +} + +/*! \internal + */ +QSql::NumericalPrecisionPolicy QSqlResult::numericalPrecisionPolicy() const +{ + return d->precisionPolicy; } /*! \internal diff --git a/src/sql/kernel/qsqlresult.h b/src/sql/kernel/qsqlresult.h index 0a3d8b9..30c933b 100644 --- a/src/sql/kernel/qsqlresult.h +++ b/src/sql/kernel/qsqlresult.h @@ -135,6 +135,7 @@ protected: bool execBatch(bool arrayBind = false); void detachFromResultSet(); void setNumericalPrecisionPolicy(QSql::NumericalPrecisionPolicy policy); + QSql::NumericalPrecisionPolicy numericalPrecisionPolicy() const; bool nextResult(); private: diff --git a/tests/auto/qsqldatabase/tst_qsqldatabase.cpp b/tests/auto/qsqldatabase/tst_qsqldatabase.cpp index 4fa3dc4..d8c21ac 100644 --- a/tests/auto/qsqldatabase/tst_qsqldatabase.cpp +++ b/tests/auto/qsqldatabase/tst_qsqldatabase.cpp @@ -1078,8 +1078,8 @@ void tst_QSqlDatabase::recordMySQL() FieldDef("bigint unsigned", QVariant::ULongLong, Q_UINT64_C(18446744073709551615)), FieldDef("float", QVariant::Double, 1.12345), FieldDef("double", QVariant::Double, 1.123456789), - FieldDef("decimal(10, 9)", QVariant::String,1.123456789), - FieldDef("numeric(5, 2)", QVariant::String, 123.67), + FieldDef("decimal(10, 9)", QVariant::Double,1.123456789), + FieldDef("numeric(5, 2)", QVariant::Double, 123.67), FieldDef("date", QVariant::Date, QDate::currentDate()), FieldDef("datetime", QVariant::DateTime, dt), FieldDef("timestamp", QVariant::DateTime, dt, false), @@ -1616,16 +1616,17 @@ void tst_QSqlDatabase::precisionPolicy() QSKIP("Driver or database doesn't support setting precision policy", SkipSingle); // Create a test table with some data - QVERIFY_SQL(q, exec(QString("CREATE TABLE %1 (id smallint, num numeric(20,0))").arg(tableName))); + QVERIFY_SQL(q, exec(QString("CREATE TABLE %1 (id smallint, num numeric(18,5))").arg(tableName))); QVERIFY_SQL(q, prepare(QString("INSERT INTO %1 VALUES (?, ?)").arg(tableName))); q.bindValue(0, 1); q.bindValue(1, 123); QVERIFY_SQL(q, exec()); q.bindValue(0, 2); - q.bindValue(1, QString("18500000000000000000")); + q.bindValue(1, QString("1850000000000.0001")); QVERIFY_SQL(q, exec()); // These are expected to pass + q.setNumericalPrecisionPolicy(QSql::HighPrecision); QString query = QString("SELECT num FROM %1 WHERE id = 1").arg(tableName); QVERIFY_SQL(q, exec(query)); QVERIFY_SQL(q, next()); @@ -1653,7 +1654,7 @@ void tst_QSqlDatabase::precisionPolicy() QVERIFY_SQL(q, exec(query)); QVERIFY_SQL(q, next()); QCOMPARE(q.value(0).type(), QVariant::Double); - QCOMPARE(q.value(0).toDouble(), QString("18500000000000000000").toDouble()); + QCOMPARE(q.value(0).toDouble(), QString("1850000000000.0001").toDouble()); // Postgres returns invalid QVariants on overflow q.setNumericalPrecisionPolicy(QSql::HighPrecision); @@ -1662,14 +1663,19 @@ void tst_QSqlDatabase::precisionPolicy() QCOMPARE(q.value(0).type(), QVariant::String); q.setNumericalPrecisionPolicy(QSql::LowPrecisionInt64); + QEXPECT_FAIL("QOCI", "Oracle fails here, to retrieve next", Continue); QVERIFY_SQL(q, exec(query)); QVERIFY_SQL(q, next()); - QCOMPARE(q.value(0).type(), QVariant::Invalid); + QCOMPARE(q.value(0).type(), QVariant::LongLong); - q.setNumericalPrecisionPolicy(QSql::LowPrecisionInt32); - QVERIFY_SQL(q, exec(query)); - QVERIFY_SQL(q, next()); - QCOMPARE(q.value(0).type(), QVariant::Invalid); + QSql::NumericalPrecisionPolicy oldPrecision= db.numericalPrecisionPolicy(); + db.setNumericalPrecisionPolicy(QSql::LowPrecisionDouble); + QSqlQuery q2(db); + q2.exec(QString("SELECT num FROM %1 WHERE id = 2").arg(tableName)); + QVERIFY_SQL(q2, exec(query)); + QVERIFY_SQL(q2, next()); + QCOMPARE(q2.value(0).type(), QVariant::Double); + db.setNumericalPrecisionPolicy(oldPrecision); } // This test needs a ODBC data source containing MYSQL in it's name -- cgit v0.12 From 16fe846058aa0a89577660d18bdc0aceda7fecfd Mon Sep 17 00:00:00 2001 From: Derick Hawcroft Date: Mon, 15 Jun 2009 11:16:59 +1000 Subject: Adds unit test for task: 180617 Tests to see if QSqlQueryModel inserts extra empty gridlines into a view for a specific SQL query statement that should return no data. --- tests/auto/qsqlquerymodel/tst_qsqlquerymodel.cpp | 45 +++++++++++++++++++++--- 1 file changed, 41 insertions(+), 4 deletions(-) diff --git a/tests/auto/qsqlquerymodel/tst_qsqlquerymodel.cpp b/tests/auto/qsqlquerymodel/tst_qsqlquerymodel.cpp index 88b5770..051764e 100644 --- a/tests/auto/qsqlquerymodel/tst_qsqlquerymodel.cpp +++ b/tests/auto/qsqlquerymodel/tst_qsqlquerymodel.cpp @@ -94,6 +94,9 @@ private slots: void setQueryWithNoRowsInResultSet_data() { generic_data(); } void setQueryWithNoRowsInResultSet(); + void task_180617(); + void task_180617_data() { generic_data(); } + private: void generic_data(const QString &engine=QString()); void dropTestTables(QSqlDatabase db); @@ -496,7 +499,7 @@ void tst_QSqlQueryModel::withSortFilterProxyModel() QSignalSpy modelRowsInsertedSpy(&model, SIGNAL(rowsInserted(const QModelIndex &, int, int))); model.setQuery(QSqlQuery("SELECT * FROM " + qTableName("test3"), db)); view.scrollToBottom(); - + QTestEventLoop::instance().enterLoop(1); QCOMPARE(proxy.rowCount(), 511); @@ -530,12 +533,12 @@ void tst_QSqlQueryModel::setQuerySignalEmission() QSignalSpy modelRowsRemovedSpy(&model, SIGNAL(rowsRemoved(const QModelIndex &, int, int))); // First select, the model was empty and no rows had to be removed! - model.setQuery(QSqlQuery("SELECT * FROM " + qTableName("test"), db)); + model.setQuery(QSqlQuery("SELECT * FROM " + qTableName("test"), db)); QCOMPARE(modelRowsAboutToBeRemovedSpy.count(), 0); QCOMPARE(modelRowsRemovedSpy.count(), 0); // Second select, the model wasn't empty and two rows had to be removed! - model.setQuery(QSqlQuery("SELECT * FROM " + qTableName("test"), db)); + model.setQuery(QSqlQuery("SELECT * FROM " + qTableName("test"), db)); QCOMPARE(modelRowsAboutToBeRemovedSpy.count(), 1); QCOMPARE(modelRowsAboutToBeRemovedSpy.value(0).value(1).toInt(), 0); QCOMPARE(modelRowsAboutToBeRemovedSpy.value(0).value(2).toInt(), 1); @@ -559,10 +562,44 @@ void tst_QSqlQueryModel::setQueryWithNoRowsInResultSet() // The query's result set will be empty so no signals should be emitted! QSqlQuery query(db); QVERIFY_SQL(query, exec("SELECT * FROM " + qTableName("test") + " where 0 = 1")); - model.setQuery(query); + model.setQuery(query); QCOMPARE(modelRowsAboutToBeInsertedSpy.count(), 0); QCOMPARE(modelRowsInsertedSpy.count(), 0); } +// For task 180617 +// According to the task, several specific duplicate SQL queries would cause +// multiple empty grid lines to be visible in the view +void tst_QSqlQueryModel::task_180617() +{ + QFETCH(QString, dbName); + QSqlDatabase db = QSqlDatabase::database(dbName); + CHECK_DATABASE(db); + + QTableView view; + QCOMPARE(view.columnAt(0), -1); + QCOMPARE(view.rowAt(0), -1); + + QSqlQueryModel model; + model.setQuery( "SELECT TOP 0 * FROM " + qTableName("test3"), db ); + view.setModel(&model); + + bool error = false; + // Usually a syntax error + if (model.lastError().isValid()) // usually a syntax error + error = true; + + QCOMPARE(view.columnAt(0), (error)?-1:0 ); + QCOMPARE(view.rowAt(0), -1); + + model.setQuery( "SELECT TOP 0 * FROM " + qTableName("test3"), db ); + model.setQuery( "SELECT TOP 0 * FROM " + qTableName("test3"), db ); + model.setQuery( "SELECT TOP 0 * FROM " + qTableName("test3"), db ); + model.setQuery( "SELECT TOP 0 * FROM " + qTableName("test3"), db ); + + QCOMPARE(view.columnAt(0), (error)?-1:0 ); + QCOMPARE(view.rowAt(0), -1); +} + QTEST_MAIN(tst_QSqlQueryModel) #include "tst_qsqlquerymodel.moc" -- cgit v0.12 From b8430baeadd62b643ff07a2588c62141146c08fd Mon Sep 17 00:00:00 2001 From: Bill King Date: Mon, 15 Jun 2009 10:28:47 +1000 Subject: BT Revert "Fix the behaviour of sql classes regarding quoted identifiers" This reverts commit bb7bddc47dd0748b45d22180d9e3c8e5209010b3 due to forward binary compatibility issues in a point release. --- src/sql/drivers/db2/qsql_db2.cpp | 70 +--- src/sql/drivers/ibase/qsql_ibase.cpp | 16 +- src/sql/drivers/mysql/qsql_mysql.cpp | 19 +- src/sql/drivers/mysql/qsql_mysql.h | 3 - src/sql/drivers/oci/qsql_oci.cpp | 58 +-- src/sql/drivers/odbc/qsql_odbc.cpp | 128 ------ src/sql/drivers/odbc/qsql_odbc.h | 4 - src/sql/drivers/psql/qsql_psql.cpp | 32 +- src/sql/drivers/sqlite/qsql_sqlite.cpp | 16 +- src/sql/drivers/sqlite2/qsql_sqlite2.cpp | 20 +- src/sql/drivers/tds/qsql_tds.cpp | 21 +- src/sql/kernel/qsqldriver.cpp | 131 +----- src/sql/kernel/qsqldriver.h | 6 - src/sql/models/qsqlrelationaltablemodel.cpp | 73 +--- src/sql/models/qsqltablemodel.cpp | 20 +- tests/auto/qsqldatabase/tst_databases.h | 19 +- tests/auto/qsqldriver/qsqldriver.pro | 16 - tests/auto/qsqldriver/tst_qsqldriver.cpp | 218 ---------- .../tst_qsqlrelationaltablemodel.cpp | 455 ++------------------- tests/auto/qsqltablemodel/tst_qsqltablemodel.cpp | 15 +- 20 files changed, 131 insertions(+), 1209 deletions(-) delete mode 100644 tests/auto/qsqldriver/qsqldriver.pro delete mode 100644 tests/auto/qsqldriver/tst_qsqldriver.cpp diff --git a/src/sql/drivers/db2/qsql_db2.cpp b/src/sql/drivers/db2/qsql_db2.cpp index 11d0041..2786dbb 100644 --- a/src/sql/drivers/db2/qsql_db2.cpp +++ b/src/sql/drivers/db2/qsql_db2.cpp @@ -1182,7 +1182,7 @@ QDB2Driver::~QDB2Driver() delete d; } -bool QDB2Driver::open(const QString& db, const QString& user, const QString& password, const QString& host, int port, +bool QDB2Driver::open(const QString& db, const QString& user, const QString& password, const QString&, int, const QString& connOpts) { if (isOpen()) @@ -1205,8 +1205,6 @@ bool QDB2Driver::open(const QString& db, const QString& user, const QString& pas setOpenError(true); return false; } - - QString protocol; // Set connection attributes const QStringList opts(connOpts.split(QLatin1Char(';'), QString::SkipEmptyParts)); for (int i = 0; i < opts.count(); ++i) { @@ -1237,10 +1235,7 @@ bool QDB2Driver::open(const QString& db, const QString& user, const QString& pas } else if (opt == QLatin1String("SQL_ATTR_LOGIN_TIMEOUT")) { v = val.toUInt(); r = SQLSetConnectAttr(d->hDbc, SQL_ATTR_LOGIN_TIMEOUT, (SQLPOINTER) v, 0); - } else if (opt.compare(QLatin1String("PROTOCOL"), Qt::CaseInsensitive) == 0) { - protocol = tmp; - } - else { + } else { qWarning("QDB2Driver::open: Unknown connection attribute '%s'", tmp.toLocal8Bit().constData()); } @@ -1249,18 +1244,9 @@ bool QDB2Driver::open(const QString& db, const QString& user, const QString& pas "Unable to set connection attribute '%1'").arg(opt), d); } - if (protocol.isEmpty()) - protocol = QLatin1String("PROTOCOL=TCPIP"); - - if (port < 0 ) - port = 50000; - QString connQStr; - connQStr = protocol + QLatin1String(";DATABASE=") + db + QLatin1String(";HOSTNAME=") + host - + QLatin1String(";PORT=") + QString::number(port) + QLatin1String(";UID=") + user - + QLatin1String(";PWD=") + password; - - + connQStr = QLatin1String("DSN=") + db + QLatin1String(";UID=") + user + QLatin1String(";PWD=") + + password; SQLTCHAR connOut[SQL_MAX_OPTION_STRING_LENGTH]; SQLSMALLINT cb; @@ -1279,7 +1265,7 @@ bool QDB2Driver::open(const QString& db, const QString& user, const QString& pas return false; } - d->user = user; + d->user = user.toUpper(); setOpen(true); setOpenError(false); return true; @@ -1324,25 +1310,10 @@ QSqlRecord QDB2Driver::record(const QString& tableName) const SQLHANDLE hStmt; QString catalog, schema, table; - qSplitTableQualifier(tableName, &catalog, &schema, &table); + qSplitTableQualifier(tableName.toUpper(), &catalog, &schema, &table); if (schema.isEmpty()) schema = d->user; - if (isIdentifierEscaped(catalog, QSqlDriver::TableName)) - catalog = stripDelimiters(catalog, QSqlDriver::TableName); - else - catalog = catalog.toUpper(); - - if (isIdentifierEscaped(schema, QSqlDriver::TableName)) - schema = stripDelimiters(schema, QSqlDriver::TableName); - else - schema = schema.toUpper(); - - if (isIdentifierEscaped(table, QSqlDriver::TableName)) - table = stripDelimiters(table, QSqlDriver::TableName); - else - table = table.toUpper(); - SQLRETURN r = SQLAllocHandle(SQL_HANDLE_STMT, d->hDbc, &hStmt); @@ -1356,9 +1327,6 @@ QSqlRecord QDB2Driver::record(const QString& tableName) const (SQLPOINTER) SQL_CURSOR_FORWARD_ONLY, SQL_IS_UINTEGER); - - //Aside: szSchemaName and szTableName parameters of SQLColumns - //are case sensitive search patterns, so no escaping is used. r = SQLColumns(hStmt, NULL, 0, @@ -1439,13 +1407,7 @@ QStringList QDB2Driver::tables(QSql::TableType type) const bool isNull; QString fieldVal = qGetStringData(hStmt, 2, -1, isNull); QString userVal = qGetStringData(hStmt, 1, -1, isNull); - QString user = d->user; - if ( isIdentifierEscaped(user, QSqlDriver::TableName)) - user = stripDelimiters(user, QSqlDriver::TableName); - else - user = user.toUpper(); - - if (userVal != user) + if (userVal != d->user) fieldVal = userVal + QLatin1Char('.') + fieldVal; tl.append(fieldVal); r = SQLFetchScroll(hStmt, @@ -1476,23 +1438,7 @@ QSqlIndex QDB2Driver::primaryIndex(const QString& tablename) const return index; } QString catalog, schema, table; - qSplitTableQualifier(tablename, &catalog, &schema, &table); - - if (isIdentifierEscaped(catalog, QSqlDriver::TableName)) - catalog = stripDelimiters(catalog, QSqlDriver::TableName); - else - catalog = catalog.toUpper(); - - if (isIdentifierEscaped(schema, QSqlDriver::TableName)) - schema = stripDelimiters(schema, QSqlDriver::TableName); - else - schema = schema.toUpper(); - - if (isIdentifierEscaped(table, QSqlDriver::TableName)) - table = stripDelimiters(table, QSqlDriver::TableName); - else - table = table.toUpper(); - + qSplitTableQualifier(tablename.toUpper(), &catalog, &schema, &table); r = SQLSetStmtAttr(hStmt, SQL_ATTR_CURSOR_TYPE, (SQLPOINTER)SQL_CURSOR_FORWARD_ONLY, diff --git a/src/sql/drivers/ibase/qsql_ibase.cpp b/src/sql/drivers/ibase/qsql_ibase.cpp index 1645555..523ec4d 100644 --- a/src/sql/drivers/ibase/qsql_ibase.cpp +++ b/src/sql/drivers/ibase/qsql_ibase.cpp @@ -1558,16 +1558,12 @@ QSqlRecord QIBaseDriver::record(const QString& tablename) const QSqlQuery q(createResult()); q.setForwardOnly(true); - QString table = tablename; - if (isIdentifierEscaped(table, QSqlDriver::TableName)) - table = stripDelimiters(table, QSqlDriver::TableName); - else - table = table.toUpper(); + q.exec(QLatin1String("SELECT a.RDB$FIELD_NAME, b.RDB$FIELD_TYPE, b.RDB$FIELD_LENGTH, " "b.RDB$FIELD_SCALE, b.RDB$FIELD_PRECISION, a.RDB$NULL_FLAG " "FROM RDB$RELATION_FIELDS a, RDB$FIELDS b " "WHERE b.RDB$FIELD_NAME = a.RDB$FIELD_SOURCE " - "AND a.RDB$RELATION_NAME = '") + table + QLatin1String("' " + "AND a.RDB$RELATION_NAME = '") + tablename.toUpper() + QLatin1String("' " "ORDER BY a.RDB$FIELD_POSITION")); while (q.next()) { @@ -1595,18 +1591,12 @@ QSqlIndex QIBaseDriver::primaryIndex(const QString &table) const if (!isOpen()) return index; - QString tablename = table; - if (isIdentifierEscaped(tablename, QSqlDriver::TableName)) - tablename = stripDelimiters(tablename, QSqlDriver::TableName); - else - tablename = tablename.toUpper(); - QSqlQuery q(createResult()); q.setForwardOnly(true); q.exec(QLatin1String("SELECT a.RDB$INDEX_NAME, b.RDB$FIELD_NAME, d.RDB$FIELD_TYPE, d.RDB$FIELD_SCALE " "FROM RDB$RELATION_CONSTRAINTS a, RDB$INDEX_SEGMENTS b, RDB$RELATION_FIELDS c, RDB$FIELDS d " "WHERE a.RDB$CONSTRAINT_TYPE = 'PRIMARY KEY' " - "AND a.RDB$RELATION_NAME = '") + tablename + + "AND a.RDB$RELATION_NAME = '") + table.toUpper() + QLatin1String(" 'AND a.RDB$INDEX_NAME = b.RDB$INDEX_NAME " "AND c.RDB$RELATION_NAME = a.RDB$RELATION_NAME " "AND c.RDB$FIELD_NAME = b.RDB$FIELD_NAME " diff --git a/src/sql/drivers/mysql/qsql_mysql.cpp b/src/sql/drivers/mysql/qsql_mysql.cpp index 53645c9..4468686 100644 --- a/src/sql/drivers/mysql/qsql_mysql.cpp +++ b/src/sql/drivers/mysql/qsql_mysql.cpp @@ -1342,7 +1342,7 @@ QSqlIndex QMYSQLDriver::primaryIndex(const QString& tablename) const QSqlQuery i(createResult()); QString stmt(QLatin1String("show index from %1;")); QSqlRecord fil = record(tablename); - i.exec(stmt.arg(tablename)); + i.exec(stmt.arg(escapeIdentifier(tablename, QSqlDriver::TableName))); while (i.isActive() && i.next()) { if (i.value(2).toString() == QLatin1String("PRIMARY")) { idx.append(fil.field(i.value(4).toString())); @@ -1357,14 +1357,10 @@ QSqlIndex QMYSQLDriver::primaryIndex(const QString& tablename) const QSqlRecord QMYSQLDriver::record(const QString& tablename) const { - QString table=tablename; - if(isIdentifierEscaped(table, QSqlDriver::TableName)) - table = stripDelimiters(table, QSqlDriver::TableName); - QSqlRecord info; if (!isOpen()) return info; - MYSQL_RES* r = mysql_list_fields(d->mysql, table.toLocal8Bit().constData(), 0); + MYSQL_RES* r = mysql_list_fields(d->mysql, tablename.toLocal8Bit().constData(), 0); if (!r) { return info; } @@ -1475,17 +1471,6 @@ QString QMYSQLDriver::escapeIdentifier(const QString &identifier, IdentifierType return res; } -bool QMYSQLDriver::isIdentifierEscapedImplementation(const QString &identifier, IdentifierType type) const -{ - Q_UNUSED(type); - bool isLeftDelimited = (identifier.left(1) == QString(QLatin1Char('`'))); - bool isRightDelimited = (identifier.right(1) == QString(QLatin1Char('`'))); - if( identifier.size() > 2 && isLeftDelimited && isRightDelimited ) - return true; - else - return false; -} - QT_END_NAMESPACE #include "qsql_mysql.moc" \ No newline at end of file diff --git a/src/sql/drivers/mysql/qsql_mysql.h b/src/sql/drivers/mysql/qsql_mysql.h index 31d9dcf..97aa346 100644 --- a/src/sql/drivers/mysql/qsql_mysql.h +++ b/src/sql/drivers/mysql/qsql_mysql.h @@ -123,9 +123,6 @@ public: QVariant handle() const; QString escapeIdentifier(const QString &identifier, IdentifierType type) const; -protected Q_SLOTS: - bool isIdentifierEscapedImplementation(const QString &identifier, IdentifierType type) const; - protected: bool beginTransaction(); bool commitTransaction(); diff --git a/src/sql/drivers/oci/qsql_oci.cpp b/src/sql/drivers/oci/qsql_oci.cpp index a7031b1..f3dabee 100644 --- a/src/sql/drivers/oci/qsql_oci.cpp +++ b/src/sql/drivers/oci/qsql_oci.cpp @@ -2108,7 +2108,7 @@ bool QOCIDriver::open(const QString & db, setOpen(true); setOpenError(false); - d->user = user; + d->user = user.toUpper(); return true; } @@ -2210,15 +2210,8 @@ QStringList QOCIDriver::tables(QSql::TableType type) const "and owner != 'WKSYS'" "and owner != 'CTXSYS'" "and owner != 'WMSYS'")); - - QString user = d->user; - if ( isIdentifierEscaped(user, QSqlDriver::TableName)) - user = stripDelimiters(user, QSqlDriver::TableName); - else - user = user.toUpper(); - while (t.next()) { - if (t.value(0).toString().toUpper() != user.toUpper()) + if (t.value(0).toString().toUpper() != d->user.toUpper()) tl.append(t.value(0).toString() + QLatin1String(".") + t.value(1).toString()); else tl.append(t.value(1).toString()); @@ -2254,10 +2247,10 @@ void qSplitTableAndOwner(const QString & tname, QString * tbl, { int i = tname.indexOf(QLatin1Char('.')); // prefixed with owner? if (i != -1) { - *tbl = tname.right(tname.length() - i - 1); - *owner = tname.left(i); + *tbl = tname.right(tname.length() - i - 1).toUpper(); + *owner = tname.left(i).toUpper(); } else { - *tbl = tname; + *tbl = tname.toUpper(); } } @@ -2273,7 +2266,7 @@ QSqlRecord QOCIDriver::record(const QString& tablename) const QString stmt(QLatin1String("select column_name, data_type, data_length, " "data_precision, data_scale, nullable, data_default%1" "from all_tab_columns " - "where table_name=%2")); + "where upper(table_name)=%2")); if (d->serverVersion >= 9) stmt = stmt.arg(QLatin1String(", char_length ")); else @@ -2281,23 +2274,11 @@ QSqlRecord QOCIDriver::record(const QString& tablename) const bool buildRecordInfo = false; QString table, owner, tmpStmt; qSplitTableAndOwner(tablename, &table, &owner); - - if (isIdentifierEscaped(table, QSqlDriver::TableName)) - table = stripDelimiters(table, QSqlDriver::TableName); - else - table = table.toUpper(); - tmpStmt = stmt.arg(QLatin1Char('\'') + table + QLatin1Char('\'')); if (owner.isEmpty()) { owner = d->user; } - - if (isIdentifierEscaped(owner, QSqlDriver::TableName)) - owner = stripDelimiters(owner, QSqlDriver::TableName); - else - owner = owner.toUpper(); - - tmpStmt += QLatin1String(" and owner='") + owner + QLatin1String("'"); + tmpStmt += QLatin1String(" and upper(owner)='") + owner + QLatin1String("'"); t.setForwardOnly(true); t.exec(tmpStmt); if (!t.next()) { // try and see if the tablename is a synonym @@ -2346,23 +2327,11 @@ QSqlIndex QOCIDriver::primaryIndex(const QString& tablename) const bool buildIndex = false; QString table, owner, tmpStmt; qSplitTableAndOwner(tablename, &table, &owner); - - if (isIdentifierEscaped(table, QSqlDriver::TableName)) - table = stripDelimiters(table, QSqlDriver::TableName); - else - table = table.toUpper(); - - tmpStmt = stmt + QLatin1String(" and a.table_name='") + table + QLatin1String("'"); + tmpStmt = stmt + QLatin1String(" and upper(a.table_name)='") + table + QLatin1String("'"); if (owner.isEmpty()) { owner = d->user; } - - if (isIdentifierEscaped(owner, QSqlDriver::TableName)) - owner = stripDelimiters(owner, QSqlDriver::TableName); - else - owner = owner.toUpper(); - - tmpStmt += QLatin1String(" and a.owner='") + owner + QLatin1String("'"); + tmpStmt += QLatin1String(" and upper(a.owner)='") + owner + QLatin1String("'"); t.setForwardOnly(true); t.exec(tmpStmt); @@ -2456,14 +2425,13 @@ QVariant QOCIDriver::handle() const return qVariantFromValue(d->env); } -QString QOCIDriver::escapeIdentifier(const QString &identifier, IdentifierType type) const +QString QOCIDriver::escapeIdentifier(const QString &identifier, IdentifierType /* type */) const { QString res = identifier; - if(!identifier.isEmpty() && !isIdentifierEscaped(identifier, type)) { - res.replace(QLatin1Char('"'), QLatin1String("\"\"")); + res.replace(QLatin1Char('"'), QLatin1String("\"\"")); + if (identifier.indexOf(QLatin1Char(' ')) != -1) res.prepend(QLatin1Char('"')).append(QLatin1Char('"')); - res.replace(QLatin1Char('.'), QLatin1String("\".\"")); - } +// res.replace(QLatin1Char('.'), QLatin1String("\".\"")); return res; } diff --git a/src/sql/drivers/odbc/qsql_odbc.cpp b/src/sql/drivers/odbc/qsql_odbc.cpp index ee500a0..b711b95 100644 --- a/src/sql/drivers/odbc/qsql_odbc.cpp +++ b/src/sql/drivers/odbc/qsql_odbc.cpp @@ -86,7 +86,6 @@ static const SQLSMALLINT qParamType[4] = { SQL_PARAM_INPUT, SQL_PARAM_INPUT, SQL class QODBCDriverPrivate { public: - enum DefaultCase{Lower, Mixed, Upper, Sensitive}; QODBCDriverPrivate() : hEnv(0), hDbc(0), useSchema(false), disconnectCount(0), isMySqlServer(false), isMSSqlServer(false), hasSQLFetchScroll(true), hasMultiResultSets(false) @@ -118,9 +117,6 @@ public: bool setConnectionOptions(const QString& connOpts); void splitTableQualifier(const QString &qualifier, QString &catalog, QString &schema, QString &table); - DefaultCase defaultCase() const; - QString adjustCase(const QString&) const; - QChar quoteChar() const; }; class QODBCPrivate @@ -557,28 +553,6 @@ static int qGetODBCVersion(const QString &connOpts) return SQL_OV_ODBC2; } -QChar QODBCDriverPrivate::quoteChar() const -{ - static bool isQuoteInitialized = false; - static QChar quote = QChar::fromLatin1('"'); - if (!isQuoteInitialized) { - char driverResponse[4]; - SQLSMALLINT length; - int r = SQLGetInfo(hDbc, - SQL_IDENTIFIER_QUOTE_CHAR, - &driverResponse, - sizeof(driverResponse), - &length); - if (r == SQL_SUCCESS || r == SQL_SUCCESS_WITH_INFO) { - quote = QChar::fromLatin1(driverResponse[0]); - } else { - quote = QChar::fromLatin1('"'); - } - isQuoteInitialized = true; - } - return quote; -} - bool QODBCDriverPrivate::setConnectionOptions(const QString& connOpts) { // Set any connection attributes @@ -729,65 +703,6 @@ void QODBCDriverPrivate::splitTableQualifier(const QString & qualifier, QString } } -QODBCDriverPrivate::DefaultCase QODBCDriverPrivate::defaultCase() const -{ - static bool isInitialized = false; - static DefaultCase ret; - - if (!isInitialized) { - SQLUSMALLINT casing; - int r = SQLGetInfo(hDbc, - SQL_IDENTIFIER_CASE, - &casing, - sizeof(casing), - NULL); - if ( r != SQL_SUCCESS) - ret = Lower;//arbitrary case if driver cannot be queried - else { - switch (casing) { - case (SQL_IC_UPPER): - ret = Upper; - break; - case (SQL_IC_LOWER): - ret = Lower; - break; - case (SQL_IC_SENSITIVE): - ret = Sensitive; - break; - case (SQL_IC_MIXED): - ret = Mixed; - break; - default: - ret = Upper; - } - } - isInitialized = true; - } - return ret; -} - -/* - Adjust the casing of an identifier to match what the - database engine would have done to it. -*/ -QString QODBCDriverPrivate::adjustCase(const QString &identifier) const -{ - QString ret = identifier; - switch(defaultCase()) { - case (Lower): - ret = identifier.toLower(); - break; - case (Upper): - ret = identifier.toUpper(); - break; - case(Mixed): - case(Sensitive): - default: - ret = identifier; - } - return ret; -} - //////////////////////////////////////////////////////////////////////////// QODBCResult::QODBCResult(const QODBCDriver * db, QODBCDriverPrivate* p) @@ -2171,22 +2086,6 @@ QSqlIndex QODBCDriver::primaryIndex(const QString& tablename) const } QString catalog, schema, table; d->splitTableQualifier(tablename, catalog, schema, table); - - if (isIdentifierEscaped(catalog, QSqlDriver::TableName)) - catalog = stripDelimiters(catalog, QSqlDriver::TableName); - else - catalog = d->adjustCase(catalog); - - if (isIdentifierEscaped(schema, QSqlDriver::TableName)) - schema = stripDelimiters(schema, QSqlDriver::TableName); - else - schema = d->adjustCase(schema); - - if (isIdentifierEscaped(table, QSqlDriver::TableName)) - table = stripDelimiters(table, QSqlDriver::TableName); - else - table = d->adjustCase(table); - r = SQLSetStmtAttr(hStmt, SQL_ATTR_CURSOR_TYPE, (SQLPOINTER)SQL_CURSOR_FORWARD_ONLY, @@ -2289,22 +2188,6 @@ QSqlRecord QODBCDriver::record(const QString& tablename) const SQLHANDLE hStmt; QString catalog, schema, table; d->splitTableQualifier(tablename, catalog, schema, table); - - if (isIdentifierEscaped(catalog, QSqlDriver::TableName)) - catalog = stripDelimiters(catalog, QSqlDriver::TableName); - else - catalog = d->adjustCase(catalog); - - if (isIdentifierEscaped(schema, QSqlDriver::TableName)) - schema = stripDelimiters(schema, QSqlDriver::TableName); - else - schema = d->adjustCase(schema); - - if (isIdentifierEscaped(table, QSqlDriver::TableName)) - table = stripDelimiters(table, QSqlDriver::TableName); - else - table = d->adjustCase(table); - SQLRETURN r = SQLAllocHandle(SQL_HANDLE_STMT, d->hDbc, &hStmt); @@ -2428,15 +2311,4 @@ QString QODBCDriver::escapeIdentifier(const QString &identifier, IdentifierType) return res; } -bool QODBCDriver::isIdentifierEscapedImplementation(const QString &identifier, IdentifierType) const -{ - QString quote = d->quoteChar(); - bool isLeftDelimited = identifier.left(1) == quote; - bool isRightDelimited = identifier.right(1) == quote; - if( identifier.size() > 2 && isLeftDelimited && isRightDelimited ) - return true; - else - return false; -} - QT_END_NAMESPACE diff --git a/src/sql/drivers/odbc/qsql_odbc.h b/src/sql/drivers/odbc/qsql_odbc.h index 51f53ea..4148007 100644 --- a/src/sql/drivers/odbc/qsql_odbc.h +++ b/src/sql/drivers/odbc/qsql_odbc.h @@ -145,14 +145,10 @@ public: QString escapeIdentifier(const QString &identifier, IdentifierType type) const; -protected Q_SLOTS: - bool isIdentifierEscapedImplementation(const QString &identifier, IdentifierType type) const; - protected: bool beginTransaction(); bool commitTransaction(); bool rollbackTransaction(); - private: void init(); bool endTrans(); diff --git a/src/sql/drivers/psql/qsql_psql.cpp b/src/sql/drivers/psql/qsql_psql.cpp index 16d19f1..afe45fc 100644 --- a/src/sql/drivers/psql/qsql_psql.cpp +++ b/src/sql/drivers/psql/qsql_psql.cpp @@ -894,16 +894,6 @@ QSqlIndex QPSQLDriver::primaryIndex(const QString& tablename) const QString schema; qSplitTableName(tbl, schema); - if (isIdentifierEscaped(tbl, QSqlDriver::TableName)) - tbl = stripDelimiters(tbl, QSqlDriver::TableName); - else - tbl = tbl.toLower(); - - if (isIdentifierEscaped(schema, QSqlDriver::TableName)) - schema = stripDelimiters(schema, QSqlDriver::TableName); - else - schema = schema.toLower(); - switch(d->pro) { case QPSQLDriver::Version6: stmt = QLatin1String("select pg_att1.attname, int(pg_att1.atttypid), pg_cl.relname " @@ -936,7 +926,7 @@ QSqlIndex QPSQLDriver::primaryIndex(const QString& tablename) const "FROM pg_attribute, pg_class " "WHERE %1 pg_class.oid IN " "(SELECT indexrelid FROM pg_index WHERE indisprimary = true AND indrelid IN " - " (SELECT oid FROM pg_class WHERE relname = '%2')) " + " (SELECT oid FROM pg_class WHERE lower(relname) = '%2')) " "AND pg_attribute.attrelid = pg_class.oid " "AND pg_attribute.attisdropped = false " "ORDER BY pg_attribute.attnum"); @@ -944,11 +934,11 @@ QSqlIndex QPSQLDriver::primaryIndex(const QString& tablename) const stmt = stmt.arg(QLatin1String("pg_table_is_visible(pg_class.oid) AND")); else stmt = stmt.arg(QString::fromLatin1("pg_class.relnamespace = (select oid from " - "pg_namespace where pg_namespace.nspname = '%1') AND ").arg(schema)); + "pg_namespace where pg_namespace.nspname = '%1') AND ").arg(schema.toLower())); break; } - i.exec(stmt.arg(tbl)); + i.exec(stmt.arg(tbl.toLower())); while (i.isActive() && i.next()) { QSqlField f(i.value(0).toString(), qDecodePSQLType(i.value(1).toInt())); idx.append(f); @@ -967,16 +957,6 @@ QSqlRecord QPSQLDriver::record(const QString& tablename) const QString schema; qSplitTableName(tbl, schema); - if (isIdentifierEscaped(tbl, QSqlDriver::TableName)) - tbl = stripDelimiters(tbl, QSqlDriver::TableName); - else - tbl = tbl.toLower(); - - if (isIdentifierEscaped(schema, QSqlDriver::TableName)) - schema = stripDelimiters(schema, QSqlDriver::TableName); - else - schema = schema.toLower(); - QString stmt; switch(d->pro) { case QPSQLDriver::Version6: @@ -1021,7 +1001,7 @@ QSqlRecord QPSQLDriver::record(const QString& tablename) const "left join pg_attrdef on (pg_attrdef.adrelid = " "pg_attribute.attrelid and pg_attrdef.adnum = pg_attribute.attnum) " "where %1 " - "and pg_class.relname = '%2' " + "and lower(pg_class.relname) = '%2' " "and pg_attribute.attnum > 0 " "and pg_attribute.attrelid = pg_class.oid " "and pg_attribute.attisdropped = false " @@ -1030,12 +1010,12 @@ QSqlRecord QPSQLDriver::record(const QString& tablename) const stmt = stmt.arg(QLatin1String("pg_table_is_visible(pg_class.oid)")); else stmt = stmt.arg(QString::fromLatin1("pg_class.relnamespace = (select oid from " - "pg_namespace where pg_namespace.nspname = '%1')").arg(schema)); + "pg_namespace where pg_namespace.nspname = '%1')").arg(schema.toLower())); break; } QSqlQuery query(createResult()); - query.exec(stmt.arg(tbl)); + query.exec(stmt.arg(tbl.toLower())); if (d->pro >= QPSQLDriver::Version71) { while (query.next()) { int len = query.value(3).toInt(); diff --git a/src/sql/drivers/sqlite/qsql_sqlite.cpp b/src/sql/drivers/sqlite/qsql_sqlite.cpp index f732077..605c4e8 100644 --- a/src/sql/drivers/sqlite/qsql_sqlite.cpp +++ b/src/sql/drivers/sqlite/qsql_sqlite.cpp @@ -661,13 +661,9 @@ QSqlIndex QSQLiteDriver::primaryIndex(const QString &tblname) const if (!isOpen()) return QSqlIndex(); - QString table = tblname; - if (isIdentifierEscaped(table, QSqlDriver::TableName)) - table = stripDelimiters(table, QSqlDriver::TableName); - QSqlQuery q(createResult()); q.setForwardOnly(true); - return qGetTableInfo(q, table, true); + return qGetTableInfo(q, tblname, true); } QSqlRecord QSQLiteDriver::record(const QString &tbl) const @@ -675,13 +671,9 @@ QSqlRecord QSQLiteDriver::record(const QString &tbl) const if (!isOpen()) return QSqlRecord(); - QString table = tbl; - if (isIdentifierEscaped(table, QSqlDriver::TableName)) - table = stripDelimiters(table, QSqlDriver::TableName); - QSqlQuery q(createResult()); q.setForwardOnly(true); - return qGetTableInfo(q, table); + return qGetTableInfo(q, tbl); } QVariant QSQLiteDriver::handle() const @@ -689,10 +681,10 @@ QVariant QSQLiteDriver::handle() const return qVariantFromValue(d->access); } -QString QSQLiteDriver::escapeIdentifier(const QString &identifier, IdentifierType type) const +QString QSQLiteDriver::escapeIdentifier(const QString &identifier, IdentifierType /*type*/) const { QString res = identifier; - if(!identifier.isEmpty() && !isIdentifierEscaped(identifier, type) ) { + if(!identifier.isEmpty() && identifier.left(1) != QString(QLatin1Char('"')) && identifier.right(1) != QString(QLatin1Char('"')) ) { res.replace(QLatin1Char('"'), QLatin1String("\"\"")); res.prepend(QLatin1Char('"')).append(QLatin1Char('"')); res.replace(QLatin1Char('.'), QLatin1String("\".\"")); diff --git a/src/sql/drivers/sqlite2/qsql_sqlite2.cpp b/src/sql/drivers/sqlite2/qsql_sqlite2.cpp index d0c6e18..ff73caa 100644 --- a/src/sql/drivers/sqlite2/qsql_sqlite2.cpp +++ b/src/sql/drivers/sqlite2/qsql_sqlite2.cpp @@ -167,15 +167,7 @@ void QSQLite2ResultPrivate::init(const char **cnames, int numCols) for (int i = 0; i < numCols; ++i) { const char* lastDot = strrchr(cnames[i], '.'); const char* fieldName = lastDot ? lastDot + 1 : cnames[i]; - - //remove quotations around the field name if any - QString fieldStr = QString::fromAscii(fieldName); - QString quote = QString::fromLatin1("\""); - if ( fieldStr.length() > 2 && fieldStr.left(1) == quote && fieldStr.right(1) == quote) { - fieldStr = fieldStr.mid(1); - fieldStr.chop(1); - } - rInf.append(QSqlField(fieldStr, + rInf.append(QSqlField(QString::fromAscii(fieldName), nameToType(QString::fromAscii(cnames[i+numCols])))); } } @@ -511,11 +503,8 @@ QSqlIndex QSQLite2Driver::primaryIndex(const QString &tblname) const QSqlQuery q(createResult()); q.setForwardOnly(true); - QString table = tblname; - if (isIdentifierEscaped(table, QSqlDriver::TableName)) - table = stripDelimiters(table, QSqlDriver::TableName); // finrst find a UNIQUE INDEX - q.exec(QLatin1String("PRAGMA index_list('") + table + QLatin1String("');")); + q.exec(QLatin1String("PRAGMA index_list('") + tblname + QLatin1String("');")); QString indexname; while(q.next()) { if (q.value(2).toInt()==1) { @@ -528,7 +517,7 @@ QSqlIndex QSQLite2Driver::primaryIndex(const QString &tblname) const q.exec(QLatin1String("PRAGMA index_info('") + indexname + QLatin1String("');")); - QSqlIndex index(table, indexname); + QSqlIndex index(tblname, indexname); while(q.next()) { QString name = q.value(2).toString(); QVariant::Type type = QVariant::Invalid; @@ -543,9 +532,6 @@ QSqlRecord QSQLite2Driver::record(const QString &tbl) const { if (!isOpen()) return QSqlRecord(); - QString table = tbl; - if (isIdentifierEscaped(tbl, QSqlDriver::TableName)) - table = stripDelimiters(table, QSqlDriver::TableName); QSqlQuery q(createResult()); q.setForwardOnly(true); diff --git a/src/sql/drivers/tds/qsql_tds.cpp b/src/sql/drivers/tds/qsql_tds.cpp index 515f0de..46e4a0b 100644 --- a/src/sql/drivers/tds/qsql_tds.cpp +++ b/src/sql/drivers/tds/qsql_tds.cpp @@ -293,8 +293,6 @@ QTDSResult::QTDSResult(const QTDSDriver* db) // insert d in error handler dict errs()->insert(d->dbproc, d); - dbcmd(d->dbproc, "set quoted_identifier on"); - dbsqlexec(d->dbproc); } QTDSResult::~QTDSResult() @@ -369,7 +367,7 @@ bool QTDSResult::gotoNext(QSqlCachedResult::ValueCache &values, int index) if (qIsNull(d->buffer.at(i * 2 + 1))) values[idx] = QVariant(QVariant::String); else - values[idx] = QString::fromLocal8Bit((const char*)d->buffer.at(i * 2)).trimmed(); + values[idx] = QString::fromLocal8Bit((const char*)d->buffer.at(i * 2)); break; case QVariant::ByteArray: { if (qIsNull(d->buffer.at(i * 2 + 1))) @@ -700,14 +698,9 @@ QSqlRecord QTDSDriver::record(const QString& tablename) const return info; QSqlQuery t(createResult()); t.setForwardOnly(true); - - QString table = tablename; - if (isIdentifierEscaped(table, QSqlDriver::TableName)) - table = stripDelimiters(table, QSqlDriver::TableName); - QString stmt (QLatin1String("select name, type, length, prec from syscolumns " "where id = (select id from sysobjects where name = '%1')")); - t.exec(stmt.arg(table)); + t.exec(stmt.arg(tablename)); while (t.next()) { QSqlField f(t.value(0).toString().simplified(), qDecodeTDSType(t.value(1).toInt())); f.setLength(t.value(2).toInt()); @@ -777,17 +770,13 @@ QSqlIndex QTDSDriver::primaryIndex(const QString& tablename) const { QSqlRecord rec = record(tablename); - QString table = tablename; - if (isIdentifierEscaped(table, QSqlDriver::TableName)) - table = stripDelimiters(table, QSqlDriver::TableName); - - QSqlIndex idx(table); - if ((!isOpen()) || (table.isEmpty())) + QSqlIndex idx(tablename); + if ((!isOpen()) || (tablename.isEmpty())) return QSqlIndex(); QSqlQuery t(createResult()); t.setForwardOnly(true); - t.exec(QString::fromLatin1("sp_helpindex '%1'").arg(table)); + t.exec(QString::fromLatin1("sp_helpindex '%1'").arg(tablename)); if (t.next()) { QStringList fNames = t.value(2).toString().simplified().split(QLatin1Char(',')); QRegExp regx(QLatin1String("\\s*(\\S+)(?:\\s+(DESC|desc))?\\s*")); diff --git a/src/sql/kernel/qsqldriver.cpp b/src/sql/kernel/qsqldriver.cpp index 40bc0df..a995005 100644 --- a/src/sql/kernel/qsqldriver.cpp +++ b/src/sql/kernel/qsqldriver.cpp @@ -49,17 +49,6 @@ QT_BEGIN_NAMESPACE -static QString prepareIdentifier(const QString &identifier, - QSqlDriver::IdentifierType type, const QSqlDriver *driver) -{ - Q_ASSERT( driver != NULL ); - QString ret = identifier; - if (!driver->isIdentifierEscaped(identifier, type)) { - ret = driver->escapeIdentifier(identifier, type); - } - return ret; -} - class QSqlDriverPrivate : public QObjectPrivate { public: @@ -383,7 +372,6 @@ QSqlRecord QSqlDriver::record(const QString & /* tableName */) const on \a type. The default implementation does nothing. - \sa isIdentifierEscaped() */ QString QSqlDriver::escapeIdentifier(const QString &identifier, IdentifierType) const { @@ -391,55 +379,6 @@ QString QSqlDriver::escapeIdentifier(const QString &identifier, IdentifierType) } /*! - Returns whether \a identifier is escaped according to the database rules. - \a identifier can either be a table name or field name, dependent - on \a type. - - \warning Because of binary compatability constraints, this function is not virtual. - If you want to provide your own implementation in your QSqlDriver subclass, - reimplement the isIdentifierEscapedImplementation() slot in your subclass instead. - The isIdentifierEscapedFunction() will dynamically detect the slot and call it. - - \sa stripDelimiters(), escapeIdentifier() - */ -bool QSqlDriver::isIdentifierEscaped(const QString &identifier, IdentifierType type) const -{ - bool result; - QMetaObject::invokeMethod(const_cast(this), - "isIdentifierEscapedImplementation", Qt::DirectConnection, - Q_RETURN_ARG(bool, result), - Q_ARG(QString, identifier), - Q_ARG(IdentifierType, type)); - return result; -} - -/*! - Returns the \a identifier with the leading and trailing delimiters removed, - \a identifier can either be a table name or field name, - dependent on \a type. If \a identifier does not have leading - and trailing delimiter characters, \a identifier is returned without - modification. - - \warning Because of binary compatability constraints, this function is not virtual, - If you want to provide your own implementation in your QSqlDriver subclass, - reimplement the stripDelimitersImplementation() slot in your subclass instead. - The stripDelimiters() function will dynamically detect the slot and call it. - - \since 4.5 - \sa isIdentifierEscaped() - */ -QString QSqlDriver::stripDelimiters(const QString &identifier, IdentifierType type) const -{ - QString result; - QMetaObject::invokeMethod(const_cast(this), - "stripDelimitersImplementation", Qt::DirectConnection, - Q_RETURN_ARG(QString, result), - Q_ARG(QString, identifier), - Q_ARG(IdentifierType, type)); - return result; -} - -/*! Returns a SQL statement of type \a type for the table \a tableName with the values from \a rec. If \a preparedStatement is true, the string will contain placeholders instead of values. @@ -458,17 +397,17 @@ QString QSqlDriver::sqlStatement(StatementType type, const QString &tableName, case SelectStatement: for (i = 0; i < rec.count(); ++i) { if (rec.isGenerated(i)) - s.append(prepareIdentifier(rec.fieldName(i), QSqlDriver::FieldName, this)).append(QLatin1String(", ")); + s.append(escapeIdentifier(rec.fieldName(i), FieldName)).append(QLatin1String(", ")); } if (s.isEmpty()) return s; s.chop(2); - s.prepend(QLatin1String("SELECT ")).append(QLatin1String(" FROM ")).append(tableName); + s.prepend(QLatin1String("SELECT ")).append(QLatin1String(" FROM ")).append(escapeIdentifier(tableName, TableName)); break; case WhereStatement: if (preparedStatement) { for (int i = 0; i < rec.count(); ++i) { - s.append(prepareIdentifier(rec.fieldName(i), FieldName,this)); + s.append(escapeIdentifier(rec.fieldName(i), FieldName)); if (rec.isNull(i)) s.append(QLatin1String(" IS NULL")); else @@ -477,7 +416,7 @@ QString QSqlDriver::sqlStatement(StatementType type, const QString &tableName, } } else { for (i = 0; i < rec.count(); ++i) { - s.append(prepareIdentifier(rec.fieldName(i), QSqlDriver::FieldName, this)); + s.append(escapeIdentifier(rec.fieldName(i), FieldName)); QString val = formatValue(rec.field(i)); if (val == QLatin1String("NULL")) s.append(QLatin1String(" IS NULL")); @@ -492,12 +431,12 @@ QString QSqlDriver::sqlStatement(StatementType type, const QString &tableName, } break; case UpdateStatement: - s.append(QLatin1String("UPDATE ")).append(tableName).append( + s.append(QLatin1String("UPDATE ")).append(escapeIdentifier(tableName, TableName)).append( QLatin1String(" SET ")); for (i = 0; i < rec.count(); ++i) { if (!rec.isGenerated(i) || !rec.value(i).isValid()) continue; - s.append(prepareIdentifier(rec.fieldName(i), QSqlDriver::FieldName, this)).append(QLatin1Char('=')); + s.append(escapeIdentifier(rec.fieldName(i), FieldName)).append(QLatin1Char('=')); if (preparedStatement) s.append(QLatin1Char('?')); else @@ -510,15 +449,15 @@ QString QSqlDriver::sqlStatement(StatementType type, const QString &tableName, s.clear(); break; case DeleteStatement: - s.append(QLatin1String("DELETE FROM ")).append(tableName); + s.append(QLatin1String("DELETE FROM ")).append(escapeIdentifier(tableName, TableName)); break; case InsertStatement: { - s.append(QLatin1String("INSERT INTO ")).append(tableName).append(QLatin1String(" (")); + s.append(QLatin1String("INSERT INTO ")).append(escapeIdentifier(tableName, TableName)).append(QLatin1String(" (")); QString vals; for (i = 0; i < rec.count(); ++i) { if (!rec.isGenerated(i) || !rec.value(i).isValid()) continue; - s.append(prepareIdentifier(rec.fieldName(i), QSqlDriver::FieldName, this)).append(QLatin1String(", ")); + s.append(escapeIdentifier(rec.fieldName(i), FieldName)).append(QLatin1String(", ")); if (preparedStatement) vals.append(QLatin1String("?")); else @@ -866,56 +805,4 @@ QStringList QSqlDriver::subscribedToNotificationsImplementation() const return QStringList(); } -/*! - This slot returns whether \a identifier is escaped according to the database rules. - \a identifier can either be a table name or field name, dependent - on \a type. - - Because of binary compatability constraints, isIdentifierEscaped() function - (introduced in Qt 4.5) is not virtual. Instead, isIdentifierEscaped() will - dynamically detect and call \e this slot. The default implementation - assumes the escape/delimiter character is a double quote. Reimplement this - slot in your own QSqlDriver if your database engine uses a different - delimiter character. - - \since 4.5 - \sa isIdentifierEscaped() - */ -bool QSqlDriver::isIdentifierEscapedImplementation(const QString &identifier, IdentifierType type) const -{ - Q_UNUSED(type); - bool isLeftDelimited = identifier.left(1) == QString(QLatin1Char('"')); - bool isRightDelimited = identifier.right(1) == QString(QLatin1Char('"')); - if( identifier.size() > 2 && isLeftDelimited && isRightDelimited ) - return true; - else - return false; -} - -/*! - This slot returns \a identifier with the leading and trailing delimiters removed, - \a identifier can either be a tablename or field name, dependent on \a type. - If \a identifier does not have leading and trailing delimiter characters, \a - identifier is returned without modification. - - Because of binary compatability constraints, the stripDelimiters() function - (introduced in Qt 4.5) is not virtual. Instead, stripDelimiters() will - dynamically detect and call \e this slot. It generally unnecessary - to reimplement this slot. - - \since 4.5 - \sa stripDelimiters() - */ -QString QSqlDriver::stripDelimitersImplementation(const QString &identifier, IdentifierType type) const -{ - QString ret; - if (this->isIdentifierEscaped(identifier, type)) { - ret = identifier.mid(1); - ret.chop(1); - } else { - ret = identifier; - } - return ret; -} - QT_END_NAMESPACE diff --git a/src/sql/kernel/qsqldriver.h b/src/sql/kernel/qsqldriver.h index 8ac1471..e763719 100644 --- a/src/sql/kernel/qsqldriver.h +++ b/src/sql/kernel/qsqldriver.h @@ -127,9 +127,6 @@ public: bool unsubscribeFromNotification(const QString &name); // ### Qt 5: make virtual QStringList subscribedToNotifications() const; // ### Qt 5: make virtual - bool isIdentifierEscaped(const QString &identifier, IdentifierType type) const; // ### Qt 5: make virtual - QString stripDelimiters(const QString &identifier, IdentifierType type) const; // ### Qt 5: make virtual - Q_SIGNALS: void notification(const QString &name); @@ -143,9 +140,6 @@ protected Q_SLOTS: bool unsubscribeFromNotificationImplementation(const QString &name); // ### Qt 5: eliminate, see unsubscribeFromNotification() QStringList subscribedToNotificationsImplementation() const; // ### Qt 5: eliminate, see subscribedNotifications() - bool isIdentifierEscapedImplementation(const QString &identifier, IdentifierType type) const; // ### Qt 5: eliminate, see isIdentifierEscaped() - QString stripDelimitersImplementation(const QString &identifier, IdentifierType type) const; // ### Qt 5: eliminate, see stripDelimiters() - private: Q_DISABLE_COPY(QSqlDriver) }; diff --git a/src/sql/models/qsqlrelationaltablemodel.cpp b/src/sql/models/qsqlrelationaltablemodel.cpp index 12eae84..935466b 100644 --- a/src/sql/models/qsqlrelationaltablemodel.cpp +++ b/src/sql/models/qsqlrelationaltablemodel.cpp @@ -182,21 +182,10 @@ void QRelation::populateDictionary() populateModel(); QSqlRecord record; - QString indexColumn; - QString displayColumn; for (int i=0; i < model->rowCount(); ++i) { record = model->record(i); - - indexColumn = rel.indexColumn(); - if (m_parent->database().driver()->isIdentifierEscaped(indexColumn, QSqlDriver::FieldName)) - indexColumn = m_parent->database().driver()->stripDelimiters(indexColumn, QSqlDriver::FieldName); - - displayColumn = rel.displayColumn(); - if (m_parent->database().driver()->isIdentifierEscaped(displayColumn, QSqlDriver::FieldName)) - displayColumn = m_parent->database().driver()->stripDelimiters(displayColumn, QSqlDriver::FieldName); - - dictionary[record.field(indexColumn).value().toString()] = - record.field(displayColumn).value(); + dictionary[record.field(rel.indexColumn()).value().toString()] = + record.field(rel.displayColumn()).value(); } m_dictInitialized = true; } @@ -226,7 +215,7 @@ public: QSqlRelationalTableModelPrivate() : QSqlTableModelPrivate() {} - QString relationField(const QString &tableName, const QString &fieldName) const; + QString escapedRelationField(const QString &tableName, const QString &fieldName) const; int nameToIndex(const QString &name) const; mutable QVector relations; @@ -266,10 +255,7 @@ void QSqlRelationalTableModelPrivate::revertCachedRow(int row) int QSqlRelationalTableModelPrivate::nameToIndex(const QString &name) const { - QString fieldname = name; - if (db.driver()->isIdentifierEscaped(fieldname, QSqlDriver::FieldName)) - fieldname = db.driver()->stripDelimiters(fieldname, QSqlDriver::FieldName); - return baseRec.indexOf(fieldname); + return baseRec.indexOf(name); } void QSqlRelationalTableModelPrivate::clearEditBuffer() @@ -495,14 +481,14 @@ QSqlRelation QSqlRelationalTableModel::relation(int column) const return d->relations.value(column).rel; } -QString QSqlRelationalTableModelPrivate::relationField(const QString &tableName, +QString QSqlRelationalTableModelPrivate::escapedRelationField(const QString &tableName, const QString &fieldName) const { - QString ret; - ret.reserve(tableName.size() + fieldName.size() + 1); - ret.append(tableName).append(QLatin1Char('.')).append(fieldName); + QString esc; + esc.reserve(tableName.size() + fieldName.size() + 1); + esc.append(tableName).append(QLatin1Char('.')).append(fieldName); - return ret; + return db.driver()->escapeIdentifier(esc, QSqlDriver::FieldName); } /*! @@ -528,29 +514,15 @@ QString QSqlRelationalTableModel::selectStatement() const // Count how many times each field name occurs in the record QHash fieldNames; - QStringList fieldList; for (int i = 0; i < rec.count(); ++i) { QSqlRelation relation = d->relations.value(i, nullRelation).rel; QString name; if (relation.isValid()) - { // Count the display column name, not the original foreign key name = relation.displayColumn(); - if (d->db.driver()->isIdentifierEscaped(name, QSqlDriver::FieldName)) - name = d->db.driver()->stripDelimiters(name, QSqlDriver::FieldName); - - QSqlRecord rec = database().record(relation.tableName()); - for (int i = 0; i < rec.count(); ++i) { - if (name.compare(rec.fieldName(i), Qt::CaseInsensitive) == 0) { - name = rec.fieldName(i); - break; - } - } - } else name = rec.fieldName(i); fieldNames.insert(name, fieldNames.value(name, 0) + 1); - fieldList.append(name); } for (int i = 0; i < rec.count(); ++i) { @@ -559,30 +531,27 @@ QString QSqlRelationalTableModel::selectStatement() const QString relTableAlias = QString::fromLatin1("relTblAl_%1").arg(i); if (!fList.isEmpty()) fList.append(QLatin1String(", ")); - fList.append(d->relationField(relTableAlias,relation.displayColumn())); + fList.append(d->escapedRelationField(relTableAlias, relation.displayColumn())); // If there are duplicate field names they must be aliased - if (fieldNames.value(fieldList[i]) > 1) { - QString relTableName = relation.tableName(); - if (d->db.driver()->isIdentifierEscaped(relTableName, QSqlDriver::TableName)) - relTableName = d->db.driver()->stripDelimiters(relTableName, QSqlDriver::TableName); - QString displayColumn = relation.displayColumn(); - if (d->db.driver()->isIdentifierEscaped(displayColumn, QSqlDriver::FieldName)) - displayColumn = d->db.driver()->stripDelimiters(displayColumn, QSqlDriver::FieldName); - fList.append(QString::fromLatin1(" AS %1_%2").arg(relTableName).arg(displayColumn)); + if (fieldNames.value(relation.displayColumn()) > 1) { + fList.append(QString::fromLatin1(" AS %1_%2").arg(relation.tableName()).arg(relation.displayColumn())); } // this needs fixing!! the below if is borken. - tables.append(relation.tableName().append(QLatin1String(" ")).append(relTableAlias)); + if (!tables.contains(relation.tableName())) + tables.append(d->db.driver()->escapeIdentifier(relation.tableName(),QSqlDriver::TableName) + .append(QLatin1String(" ")) + .append(d->db.driver()->escapeIdentifier(relTableAlias, QSqlDriver::TableName))); if(!where.isEmpty()) where.append(QLatin1String(" AND ")); - where.append(d->relationField(tableName(), d->db.driver()->escapeIdentifier(rec.fieldName(i), QSqlDriver::FieldName))); + where.append(d->escapedRelationField(tableName(), rec.fieldName(i))); where.append(QLatin1String(" = ")); - where.append(d->relationField(relTableAlias, relation.indexColumn())); + where.append(d->escapedRelationField(relTableAlias, relation.indexColumn())); } else { if (!fList.isEmpty()) fList.append(QLatin1String(", ")); - fList.append(d->relationField(tableName(), d->db.driver()->escapeIdentifier(rec.fieldName(i), QSqlDriver::FieldName))); + fList.append(d->escapedRelationField(tableName(), rec.fieldName(i))); } } if (!tables.isEmpty()) @@ -591,7 +560,7 @@ QString QSqlRelationalTableModel::selectStatement() const return query; if(!tList.isEmpty()) tList.prepend(QLatin1String(", ")); - tList.prepend(tableName()); + tList.prepend(d->db.driver()->escapeIdentifier(tableName(),QSqlDriver::TableName)); query.append(QLatin1String("SELECT ")); query.append(fList).append(QLatin1String(" FROM ")).append(tList); qAppendWhereClause(query, where, filter()); @@ -721,7 +690,7 @@ QString QSqlRelationalTableModel::orderByClause() const return QSqlTableModel::orderByClause(); QString s = QLatin1String("ORDER BY "); - s.append(d->relationField(QLatin1String("relTblAl_") + QString::number(d->sortColumn), + s.append(d->escapedRelationField(QLatin1String("relTblAl_") + QString::number(d->sortColumn), rel.displayColumn())); s += d->sortOrder == Qt::AscendingOrder ? QLatin1String(" ASC") : QLatin1String(" DESC"); return s; diff --git a/src/sql/models/qsqltablemodel.cpp b/src/sql/models/qsqltablemodel.cpp index c2442c5..2fb9b0f 100644 --- a/src/sql/models/qsqltablemodel.cpp +++ b/src/sql/models/qsqltablemodel.cpp @@ -98,10 +98,7 @@ bool QSqlTableModelPrivate::setRecord(int row, const QSqlRecord &record) int QSqlTableModelPrivate::nameToIndex(const QString &name) const { - QString fieldname = name; - if (db.driver()->isIdentifierEscaped(fieldname, QSqlDriver::FieldName)) - fieldname = db.driver()->stripDelimiters(fieldname, QSqlDriver::FieldName); - return rec.indexOf(fieldname); + return rec.indexOf(name); } void QSqlTableModelPrivate::initRecordAndPrimaryIndex() @@ -370,7 +367,10 @@ void QSqlTableModel::setTable(const QString &tableName) { Q_D(QSqlTableModel); clear(); - d->tableName = tableName; + if(d->db.tables().contains(tableName.toUpper())) + d->tableName = tableName.toUpper(); + else + d->tableName = tableName; d->initRecordAndPrimaryIndex(); d->initColOffsets(d->rec.count()); @@ -976,9 +976,7 @@ QString QSqlTableModel::orderByClause() const if (!f.isValid()) return s; - QString table = d->tableName; - //we can safely escape the field because it would have been obtained from the database - //and have the correct case + QString table = d->db.driver()->escapeIdentifier(d->tableName, QSqlDriver::TableName); QString field = d->db.driver()->escapeIdentifier(f.name(), QSqlDriver::FieldName); s.append(QLatin1String("ORDER BY ")).append(table).append(QLatin1Char('.')).append(field); s += d->sortOrder == Qt::AscendingOrder ? QLatin1String(" ASC") : QLatin1String(" DESC"); @@ -1319,12 +1317,8 @@ bool QSqlTableModel::setRecord(int row, const QSqlRecord &record) mrow.rec = d->rec; mrow.primaryValues = d->primaryValues(indexInQuery(createIndex(row, 0)).row()); } - QString fieldName; for (int i = 0; i < record.count(); ++i) { - fieldName = record.fieldName(i); - if (d->db.driver()->isIdentifierEscaped(fieldName, QSqlDriver::FieldName)) - fieldName = d->db.driver()->stripDelimiters(fieldName, QSqlDriver::FieldName); - int idx = mrow.rec.indexOf(fieldName); + int idx = mrow.rec.indexOf(record.fieldName(i)); if (idx == -1) isOk = false; else diff --git a/tests/auto/qsqldatabase/tst_databases.h b/tests/auto/qsqldatabase/tst_databases.h index ef51285..5b0fc7a 100644 --- a/tests/auto/qsqldatabase/tst_databases.h +++ b/tests/auto/qsqldatabase/tst_databases.h @@ -105,7 +105,11 @@ inline static QString qTableName( const QString& prefix, QSqlDriver* driver = 0 inline static bool testWhiteSpaceNames( const QString &name ) { - return name != QLatin1String("QTDS7"); +/* return name.startsWith( "QPSQL" ) + || name.startsWith( "QODBC" ) + || name.startsWith( "QSQLITE" ) + || name.startsWith( "QMYSQL" );*/ + return name != QLatin1String("QSQLITE2"); } inline static QString toHex( const QString& binary ) @@ -207,7 +211,7 @@ public: // This requires a local ODBC data source to be configured( pointing to a MySql database ) // addDb( "QODBC", "mysqlodbc", "troll", "trond" ); // addDb( "QODBC", "SqlServer", "troll", "trond" ); -// addDb( "QTDS7", "testdb", "troll", "trondk", "horsehead" ); +// addDb( "QTDS7", "testdb", "troll", "trondk", "horsehead.nokia.troll.no" ); // addDb( "QODBC", "silencetestdb", "troll", "trond", "silence" ); // addDb( "QODBC", "horseheadtestdb", "troll", "trondk", "horsehead" ); @@ -247,7 +251,6 @@ public: // addDb( "QODBC", "DRIVER={MySQL ODBC 3.51 Driver};SERVER=mysql5-nokia.trolltech.com.au;DATABASE=testdb", "testuser", "Ee4Gabf6_", "" ); // addDb( "QODBC", "DRIVER={FreeTDS};SERVER=horsehead.nokia.troll.no;DATABASE=testdb;PORT=4101;UID=troll;PWD=trondk", "troll", "trondk", "" ); // addDb( "QODBC", "DRIVER={FreeTDS};SERVER=silence.nokia.troll.no;DATABASE=testdb;PORT=2392;UID=troll;PWD=trond", "troll", "trond", "" ); - } void open() @@ -313,22 +316,16 @@ public: QSqlQuery q( db ); QStringList dbtables=db.tables(); - foreach(const QString &tableName, tableNames) - { + foreach(const QString &tableName, tableNames) { wasDropped = true; - QString table=tableName; - if ( db.driver()->isIdentifierEscaped(table, QSqlDriver::TableName)) - table = db.driver()->stripDelimiters(table, QSqlDriver::TableName); - foreach(const QString dbtablesName, dbtables) { - if(dbtablesName.toUpper() == table.toUpper()) { + if(dbtablesName.toUpper() == tableName.toUpper()) { dbtables.removeAll(dbtablesName); wasDropped = q.exec("drop table " + db.driver()->escapeIdentifier( dbtablesName, QSqlDriver::TableName )); if(!wasDropped) wasDropped = q.exec("drop table " + dbtablesName); } } - if ( !wasDropped ) qWarning() << dbToString(db) << "unable to drop table" << tableName << ':' << q.lastError().text() << "tables:" << dbtables; } diff --git a/tests/auto/qsqldriver/qsqldriver.pro b/tests/auto/qsqldriver/qsqldriver.pro deleted file mode 100644 index 0024841..0000000 --- a/tests/auto/qsqldriver/qsqldriver.pro +++ /dev/null @@ -1,16 +0,0 @@ -load(qttest_p4) -SOURCES += tst_qsqldriver.cpp - -QT += sql - -wince*: { - plugFiles.sources = ../../../plugins/sqldrivers - plugFiles.path = . - DEPLOYMENT += plugFiles -} else { - win32-g++ { - LIBS += -lws2_32 - } else:win32 { - LIBS += ws2_32.lib - } -} diff --git a/tests/auto/qsqldriver/tst_qsqldriver.cpp b/tests/auto/qsqldriver/tst_qsqldriver.cpp deleted file mode 100644 index bbd7483..0000000 --- a/tests/auto/qsqldriver/tst_qsqldriver.cpp +++ /dev/null @@ -1,218 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** Contact: Qt Software Information (qt-info@nokia.com) -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the either Technology Preview License Agreement or the -** Beta Release License Agreement. -** -** GNU Lesser General Public License Usage -** Alternatively, 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. -** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this -** package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** If you are unsure which license is appropriate for your use, please -** contact the sales department at qt-sales@nokia.com. -** $QT_END_LICENSE$ -** -****************************************************************************/ - - -#include -#include - -#include "../qsqldatabase/tst_databases.h" - - - -//TESTED_CLASS= -//TESTED_FILES= - -class tst_QSqlDriver : public QObject -{ - Q_OBJECT - -public: - void recreateTestTables(QSqlDatabase); - - tst_Databases dbs; - -public slots: - void initTestCase_data(); - void initTestCase(); - void cleanupTestCase(); - void init(); - void cleanup(); - -private slots: - void record(); - void primaryIndex(); -}; - - -void tst_QSqlDriver::initTestCase_data() -{ - dbs.open(); - if (dbs.fillTestTable() == 0) { - qWarning("NO DATABASES"); - QSKIP("No database drivers are available in this Qt configuration", SkipAll); - } -} - -void tst_QSqlDriver::recreateTestTables(QSqlDatabase db) -{ - QSqlQuery q(db); - - QStringList tableNames; - tableNames << qTableName( "relTEST1" ); - tst_Databases::safeDropTables( db, tableNames ); - - QVERIFY_SQL( q, exec("create table " + qTableName("relTEST1") + - " (id int not null primary key, name varchar(20), title_key int, another_title_key int)")); - QVERIFY_SQL( q, exec("insert into " + qTableName("relTEST1") + " values(1, 'harry', 1, 2)")); - QVERIFY_SQL( q, exec("insert into " + qTableName("relTEST1") + " values(2, 'trond', 2, 1)")); - QVERIFY_SQL( q, exec("insert into " + qTableName("relTEST1") + " values(3, 'vohi', 1, 2)")); - QVERIFY_SQL( q, exec("insert into " + qTableName("relTEST1") + " values(4, 'boris', 2, 2)")); -} - -void tst_QSqlDriver::initTestCase() -{ - foreach (const QString &dbname, dbs.dbNames) - recreateTestTables(QSqlDatabase::database(dbname)); -} - -void tst_QSqlDriver::cleanupTestCase() -{ - QStringList tableNames; - tableNames << qTableName( "relTEST1" ); - foreach (const QString &dbName, dbs.dbNames) { - QSqlDatabase db = QSqlDatabase::database(dbName); - tst_Databases::safeDropTables( db, tableNames ); - } - dbs.close(); -} - -void tst_QSqlDriver::init() -{ -} - -void tst_QSqlDriver::cleanup() -{ -} - -void tst_QSqlDriver::record() -{ - QFETCH_GLOBAL(QString, dbName); - QSqlDatabase db = QSqlDatabase::database(dbName); - CHECK_DATABASE(db); - - QString tablename = qTableName("relTEST1"); - QStringList fields; - fields << "id" << "name" << "title_key" << "another_title_key"; - - //check we can get records using an unquoted mixed case table name - QSqlRecord rec = db.driver()->record(tablename); - QCOMPARE(rec.count(), 4); - - if (db.driverName().startsWith("QIBASE")|| db.driverName().startsWith("QOCI") || db.driverName().startsWith("QDB2")) - for(int i = 0; i < fields.count(); ++i) - fields[i] = fields[i].toUpper(); - - for (int i = 0; i < fields.count(); ++i) - QCOMPARE(rec.fieldName(i), fields[i]); - - if (db.driverName().startsWith("QIBASE") || db.driverName().startsWith("QOCI") || db.driverName().startsWith("QDB2")) - tablename = tablename.toUpper(); - else if (db.driverName().startsWith("QPSQL")) - tablename = tablename.toLower(); - - //check we can get records using a properly quoted table name - rec = db.driver()->record(db.driver()->escapeIdentifier(tablename,QSqlDriver::TableName)); - QCOMPARE(rec.count(), 4); - - for (int i = 0; i < fields.count(); ++i) - QCOMPARE(rec.fieldName(i), fields[i]); - - if( db.driverName().startsWith("QIBASE") || db.driverName().startsWith("QOCI") || db.driverName().startsWith("QDB2")) - tablename = tablename.toLower(); - else if (db.driverName().startsWith("QPSQL")) - tablename = tablename.toUpper(); - - //check that we can't get records using incorrect tablename casing that's been quoted - rec = db.driver()->record(db.driver()->escapeIdentifier(tablename,QSqlDriver::TableName)); - if (db.driverName().startsWith("QMYSQL") || db.driverName().startsWith("QSQLITE") || db.driverName().startsWith("QTDS")) - QCOMPARE(rec.count(), 4); //mysql, sqlite and tds will match - else - QCOMPARE(rec.count(), 0); - -} - -void tst_QSqlDriver::primaryIndex() -{ - QFETCH_GLOBAL(QString, dbName); - QSqlDatabase db = QSqlDatabase::database(dbName); - CHECK_DATABASE(db); - - QString tablename = qTableName("relTEST1"); - //check that we can get primary index using unquoted mixed case table name - QSqlIndex index = db.driver()->primaryIndex(tablename); - QCOMPARE(index.count(), 1); - - if( db.driverName().startsWith("QIBASE") || db.driverName().startsWith("QOCI") || db.driverName().startsWith("QDB2")) - QCOMPARE(index.fieldName(0), QString::fromLatin1("ID")); - else - QCOMPARE(index.fieldName(0), QString::fromLatin1("id")); - - - //check that we can get the primary index using a quoted tablename - if( db.driverName().startsWith("QIBASE") || db.driverName().startsWith("QOCI") || db.driverName().startsWith("QDB2")) - tablename = tablename.toUpper(); - else if (db.driverName().startsWith("QPSQL")) - tablename = tablename.toLower(); - - index = db.driver()->primaryIndex(db.driver()->escapeIdentifier(tablename, QSqlDriver::TableName)); - QCOMPARE(index.count(), 1); - if( db.driverName().startsWith("QIBASE") || db.driverName().startsWith("QOCI") || db.driverName().startsWith("QDB2")) - QCOMPARE(index.fieldName(0), QString::fromLatin1("ID")); - else - QCOMPARE(index.fieldName(0), QString::fromLatin1("id")); - - - - //check that we can not get the primary index using a quoted but incorrect table name casing - if( db.driverName().startsWith("QIBASE") || db.driverName().startsWith("QOCI") || db.driverName().startsWith("QDB2")) - tablename = tablename.toLower(); - else if (db.driverName().startsWith("QPSQL")) - tablename = tablename.toUpper(); - - index = db.driver()->primaryIndex(db.driver()->escapeIdentifier(tablename, QSqlDriver::TableName)); - if (db.driverName().startsWith("QMYSQL") || db.driverName().startsWith("QSQLITE") || db.driverName().startsWith("QTDS")) - QCOMPARE(index.count(), 1); //mysql will always find the table name regardless of casing - else - QCOMPARE(index.count(), 0); -} - -QTEST_MAIN(tst_QSqlDriver) -#include "tst_qsqldriver.moc" diff --git a/tests/auto/qsqlrelationaltablemodel/tst_qsqlrelationaltablemodel.cpp b/tests/auto/qsqlrelationaltablemodel/tst_qsqlrelationaltablemodel.cpp index bb2cddd..76785c3 100644 --- a/tests/auto/qsqlrelationaltablemodel/tst_qsqlrelationaltablemodel.cpp +++ b/tests/auto/qsqlrelationaltablemodel/tst_qsqlrelationaltablemodel.cpp @@ -82,10 +82,6 @@ private slots: void insertRecordDuplicateFieldNames(); void invalidData(); void relationModel(); - void casing(); - void escapedRelations(); - void escapedTableName(); - void whiteSpaceInIdentifiers(); }; @@ -107,9 +103,7 @@ void tst_QSqlRelationalTableModel::recreateTestTables(QSqlDatabase db) << qTableName( "reltest2" ) << qTableName( "reltest3" ) << qTableName( "reltest4" ) - << qTableName( "reltest5" ) - << db.driver()->escapeIdentifier(qTableName( "rel test6" ), QSqlDriver::TableName) - << db.driver()->escapeIdentifier(qTableName( "rel test7" ), QSqlDriver::TableName); + << qTableName( "reltest5" ); tst_Databases::safeDropTables( db, tableNames ); QVERIFY_SQL( q, exec("create table " + qTableName("reltest1") + @@ -134,19 +128,6 @@ void tst_QSqlRelationalTableModel::recreateTestTables(QSqlDatabase db) QVERIFY_SQL( q, exec("create table " + qTableName("reltest5") + " (title varchar(20) not null primary key, abbrev varchar(20))")); QVERIFY_SQL( q, exec("insert into " + qTableName("reltest5") + " values('herr', 'Hr')")); QVERIFY_SQL( q, exec("insert into " + qTableName("reltest5") + " values('mister', 'Mr')")); - - if (testWhiteSpaceNames(db.driverName())) { - QString reltest6 = db.driver()->escapeIdentifier(qTableName("rel test6"), QSqlDriver::TableName); - QVERIFY_SQL( q, exec("create table " + reltest6 + " (id int not null primary key, " + db.driver()->escapeIdentifier("city key", QSqlDriver::FieldName) + - " int, " + db.driver()->escapeIdentifier("extra field", QSqlDriver::FieldName) + " int)")); - QVERIFY_SQL( q, exec("insert into " + reltest6 + " values(1, 1,9)")); - QVERIFY_SQL( q, exec("insert into " + reltest6 + " values(2, 2,8)")); - - QString reltest7 = db.driver()->escapeIdentifier(qTableName("rel test7"), QSqlDriver::TableName); - QVERIFY_SQL( q, exec("create table " + reltest7 + " (" + db.driver()->escapeIdentifier("city id", QSqlDriver::TableName) + " int not null primary key, " + db.driver()->escapeIdentifier("city name", QSqlDriver::FieldName) + " varchar(20))")); - QVERIFY_SQL( q, exec("insert into " + reltest7 + " values(1, 'New York')")); - QVERIFY_SQL( q, exec("insert into " + reltest7 + " values(2, 'Washington')")); - } } void tst_QSqlRelationalTableModel::initTestCase() @@ -161,14 +142,10 @@ void tst_QSqlRelationalTableModel::cleanupTestCase() tableNames << qTableName( "reltest1" ) << qTableName( "reltest2" ) << qTableName( "reltest3" ) - << qTableName( "reltest4" ) - << qTableName( "reltest5" ); + << qTableName( "reltest4" ); foreach (const QString &dbName, dbs.dbNames) { QSqlDatabase db = QSqlDatabase::database(dbName); - QStringList tables = tableNames; - tables << db.driver()->escapeIdentifier(qTableName( "rel test6" ), QSqlDriver::TableName) - << db.driver()->escapeIdentifier(qTableName( "rel test7" ), QSqlDriver::TableName); - tst_Databases::safeDropTables( db, tables ); + tst_Databases::safeDropTables( db, tableNames ); } dbs.close(); } @@ -296,12 +273,7 @@ void tst_QSqlRelationalTableModel::setData() model.setTable(qTableName("reltest1")); model.setRelation(2, QSqlRelation(qTableName("reltest2"), "tid", "title")); - - //sybase doesn't allow tables with the same alias used twice as col names - //so don't set up an identical relation when using the tds driver - if (!db.driverName().startsWith("QTDS")) - model.setRelation(3, QSqlRelation(qTableName("reltest2"), "tid", "title")); - + model.setRelation(3, QSqlRelation(qTableName("reltest2"), "tid", "title")); model.setEditStrategy(QSqlTableModel::OnManualSubmit); model.setSort(0, Qt::AscendingOrder); QVERIFY_SQL(model, select()); @@ -312,10 +284,7 @@ void tst_QSqlRelationalTableModel::setData() QCOMPARE(model.data(model.index(2, 1)).toString(), QString("vohi2")); QCOMPARE(model.data(model.index(3, 2)).toString(), QString("herr")); - if (!db.driverName().startsWith("QTDS")) - QCOMPARE(model.data(model.index(0, 3)).toString(), QString("herr")); - else - QCOMPARE(model.data(model.index(0, 3)).toInt(), 1); + QCOMPARE(model.data(model.index(0, 3)).toString(), QString("herr")); QVERIFY_SQL(model, submitAll()); } @@ -330,15 +299,10 @@ void tst_QSqlRelationalTableModel::setData() QCOMPARE(model.data(model.index(0, 3)).toInt(), 1); model.setRelation(2, QSqlRelation(qTableName("reltest2"), "tid", "title")); - if (!db.driverName().startsWith("QTDS")) - model.setRelation(3, QSqlRelation(qTableName("reltest2"), "tid", "title")); + model.setRelation(3, QSqlRelation(qTableName("reltest2"), "tid", "title")); QVERIFY_SQL(model, select()); QCOMPARE(model.data(model.index(3, 2)).toString(), QString("herr")); - - if (!db.driverName().startsWith("QTDS")) - QCOMPARE(model.data(model.index(0, 3)).toString(), QString("herr")); - else - QCOMPARE(model.data(model.index(0, 3)).toInt(), 1); + QCOMPARE(model.data(model.index(0, 3)).toString(), QString("herr")); } //check setting of data when the relational key is a non-integer type @@ -372,8 +336,7 @@ void tst_QSqlRelationalTableModel::multipleRelation() model.setTable(qTableName("reltest1")); model.setRelation(2, QSqlRelation(qTableName("reltest2"), "tid", "title")); - model.setRelation(3, QSqlRelation(qTableName("reltest4"), "id", "name")); - model.setSort(0, Qt::AscendingOrder); + model.setRelation(3, QSqlRelation(qTableName("reltest2"), "tid", "title")); QVERIFY_SQL(model, select()); QCOMPARE(model.data(model.index(2, 0)).toInt(), 3); @@ -381,7 +344,7 @@ void tst_QSqlRelationalTableModel::multipleRelation() QCOMPARE(model.data(model.index(0, 0)).toInt(), 1); QCOMPARE(model.data(model.index(0, 1)).toString(), QString("harry")); QCOMPARE(model.data(model.index(0, 2)).toString(), QString("herr")); - QCOMPARE(model.data(model.index(0, 3)).toString(), QString("Trondheim")); + QCOMPARE(model.data(model.index(0, 3)).toString(), QString("mister")); } void tst_QSqlRelationalTableModel::insertRecord() @@ -394,7 +357,6 @@ void tst_QSqlRelationalTableModel::insertRecord() model.setTable(qTableName("reltest1")); model.setRelation(2, QSqlRelation(qTableName("reltest2"), "tid", "title")); - model.setSort(0, Qt::AscendingOrder); QVERIFY_SQL(model, select()); QSqlRecord rec; @@ -436,7 +398,6 @@ void tst_QSqlRelationalTableModel::setRecord() model.setTable(qTableName("reltest1")); model.setRelation(2, QSqlRelation(qTableName("reltest2"), "tid", "title")); - model.setSort(0, Qt::AscendingOrder); QVERIFY_SQL(model, select()); QSqlRecord rec; @@ -489,18 +450,13 @@ void tst_QSqlRelationalTableModel::insertWithStrategies() model.setTable(qTableName("reltest1")); model.setRelation(2, QSqlRelation(qTableName("reltest2"), "tid", "title")); - - if (!db.driverName().startsWith("QTDS")) - model.setRelation(3, QSqlRelation(qTableName("reltest2"), "tid", "title")); + model.setRelation(3, QSqlRelation(qTableName("reltest2"), "tid", "title")); QVERIFY_SQL(model, select()); QCOMPARE(model.data(model.index(0,0)).toInt(), 1); QCOMPARE(model.data(model.index(0,1)).toString(), QString("harry")); QCOMPARE(model.data(model.index(0,2)).toString(), QString("herr")); - if (!db.driverName().startsWith("QTDS")) - QCOMPARE(model.data(model.index(0,3)).toString(), QString("mister")); - else - QCOMPARE(model.data(model.index(0,3)).toInt(), 2); + QCOMPARE(model.data(model.index(0,3)).toString(), QString("mister")); model.insertRows(0, 1); model.setData(model.index(0, 0), 1011); @@ -511,20 +467,12 @@ void tst_QSqlRelationalTableModel::insertWithStrategies() QCOMPARE(model.data(model.index(0,0)).toInt(), 1011); QCOMPARE(model.data(model.index(0,1)).toString(), QString("test")); QCOMPARE(model.data(model.index(0,2)).toString(), QString("mister")); - if (!db.driverName().startsWith("QTDS")) - QCOMPARE(model.data(model.index(0,3)).toString(), QString("herr")); - else - QCOMPARE(model.data(model.index(0,3)).toInt(), 1); + QCOMPARE(model.data(model.index(0,3)).toString(), QString("herr")); QCOMPARE(model.data(model.index(1,0)).toInt(), 1); QCOMPARE(model.data(model.index(1,1)).toString(), QString("harry")); QCOMPARE(model.data(model.index(1,2)).toString(), QString("herr")); - if (!db.driverName().startsWith("QTDS")) - QCOMPARE(model.data(model.index(1,3)).toString(), QString("mister")); - else - QCOMPARE(model.data(model.index(1,3)).toInt(), 2); - - + QCOMPARE(model.data(model.index(1,3)).toString(), QString("mister")); QVERIFY_SQL(model, submitAll()); @@ -533,16 +481,9 @@ void tst_QSqlRelationalTableModel::insertWithStrategies() QCOMPARE(model.data(model.index(0,0)).toInt(), 1); QCOMPARE(model.data(model.index(0,1)).toString(), QString("harry")); QCOMPARE(model.data(model.index(0,2)).toString(), QString("herr")); - - if (!db.driverName().startsWith("QTDS")) { - QCOMPARE(model.data(model.index(0,3)).toString(), QString("mister")); - model.setData(model.index(0,3),1); - QCOMPARE(model.data(model.index(0,3)).toString(), QString("herr")); - } else { - QCOMPARE(model.data(model.index(0,3)).toInt(), 2); - model.setData(model.index(0,3),1); - QCOMPARE(model.data(model.index(0,3)).toInt(), 1); - } + QCOMPARE(model.data(model.index(0,3)).toString(), QString("mister")); + model.setData(model.index(0,3),1); + QCOMPARE(model.data(model.index(0,3)).toString(), QString("herr")); model.insertRows(0, 2); model.setData(model.index(0, 0), 1012); @@ -558,27 +499,17 @@ void tst_QSqlRelationalTableModel::insertWithStrategies() QCOMPARE(model.data(model.index(0,0)).toInt(),1012); QCOMPARE(model.data(model.index(0,1)).toString(), QString("george")); QCOMPARE(model.data(model.index(0,2)).toString(), QString("mister")); - if (!db.driverName().startsWith("QTDS")) - QCOMPARE(model.data(model.index(0,3)).toString(), QString("mister")); - else - QCOMPARE(model.data(model.index(0,3)).toInt(), 2); - + QCOMPARE(model.data(model.index(0,3)).toString(), QString("mister")); QCOMPARE(model.data(model.index(1,0)).toInt(),1013); QCOMPARE(model.data(model.index(1,1)).toString(), QString("kramer")); QCOMPARE(model.data(model.index(1,2)).toString(), QString("mister")); - if (!db.driverName().startsWith("QTDS")) - QCOMPARE(model.data(model.index(1,3)).toString(), QString("herr")); - else - QCOMPARE(model.data(model.index(1,3)).toInt(), 1); + QCOMPARE(model.data(model.index(1,3)).toString(), QString("herr")); QCOMPARE(model.data(model.index(2,0)).toInt(), 1); QCOMPARE(model.data(model.index(2,1)).toString(), QString("harry")); QCOMPARE(model.data(model.index(2,2)).toString(), QString("herr")); - if (!db.driverName().startsWith("QTDS")) - QCOMPARE(model.data(model.index(2,3)).toString(), QString("herr")); - else - QCOMPARE(model.data(model.index(2,3)).toInt(), 1); + QCOMPARE(model.data(model.index(2,3)).toString(), QString("herr")); QVERIFY_SQL(model, submitAll()); } @@ -643,8 +574,7 @@ void tst_QSqlRelationalTableModel::sort() model.setTable(qTableName("reltest1")); model.setRelation(2, QSqlRelation(qTableName("reltest2"), "tid", "title")); - if (!db.driverName().startsWith("QTDS")) - model.setRelation(3, QSqlRelation(qTableName("reltest2"), "tid", "title")); + model.setRelation(3, QSqlRelation(qTableName("reltest2"), "tid", "title")); model.setSort(2, Qt::DescendingOrder); QVERIFY_SQL(model, select()); @@ -659,19 +589,11 @@ void tst_QSqlRelationalTableModel::sort() model.setSort(3, Qt::AscendingOrder); QVERIFY_SQL(model, select()); - if (!db.driverName().startsWith("QTDS")) { - QCOMPARE(model.rowCount(), 4); - QCOMPARE(model.data(model.index(0, 3)).toString(), QString("herr")); - QCOMPARE(model.data(model.index(1, 3)).toString(), QString("mister")); - QCOMPARE(model.data(model.index(2, 3)).toString(), QString("mister")); - QCOMPARE(model.data(model.index(3, 3)).toString(), QString("mister")); - } else { - QCOMPARE(model.data(model.index(0, 3)).toInt(), 1); - QCOMPARE(model.data(model.index(1, 3)).toInt(), 2); - QCOMPARE(model.data(model.index(2, 3)).toInt(), 2); - QCOMPARE(model.data(model.index(3, 3)).toInt(), 2); - } - + QCOMPARE(model.rowCount(), 4); + QCOMPARE(model.data(model.index(0, 3)).toString(), QString("herr")); + QCOMPARE(model.data(model.index(1, 3)).toString(), QString("mister")); + QCOMPARE(model.data(model.index(2, 3)).toString(), QString("mister")); + QCOMPARE(model.data(model.index(3, 3)).toString(), QString("mister")); } static void testRevert(QSqlRelationalTableModel &model) @@ -741,7 +663,7 @@ void tst_QSqlRelationalTableModel::revert() model.setTable(qTableName("reltest1")); model.setRelation(2, QSqlRelation(qTableName("reltest2"), "tid", "title")); - model.setRelation(3, QSqlRelation(qTableName("reltest4"), "id", "name")); + model.setRelation(3, QSqlRelation(qTableName("reltest2"), "tid", "title")); model.setSort(0, Qt::AscendingOrder); @@ -767,9 +689,7 @@ void tst_QSqlRelationalTableModel::clearDisplayValuesCache() model.setTable(qTableName("reltest1")); model.setRelation(2, QSqlRelation(qTableName("reltest2"), "tid", "title")); - - if (!db.driverName().startsWith("QTDS")) - model.setRelation(3, QSqlRelation(qTableName("reltest2"), "tid", "title")); + model.setRelation(3, QSqlRelation(qTableName("reltest2"), "tid", "title")); model.setSort(1, Qt::AscendingOrder); model.setEditStrategy(QSqlTableModel::OnManualSubmit); @@ -778,10 +698,7 @@ void tst_QSqlRelationalTableModel::clearDisplayValuesCache() QCOMPARE(model.data(model.index(3, 0)).toInt(), 3); QCOMPARE(model.data(model.index(3, 1)).toString(), QString("vohi")); QCOMPARE(model.data(model.index(3, 2)).toString(), QString("herr")); - if (!db.driverName().startsWith("QTDS")) - QCOMPARE(model.data(model.index(3, 3)).toString(), QString("mister")); - else - QCOMPARE(model.data(model.index(3, 3)).toInt(), 2 ); + QCOMPARE(model.data(model.index(3, 3)).toString(), QString("mister")); model.insertRow(model.rowCount()); QVERIFY(model.setData(model.index(4, 0), 5, Qt::EditRole)); @@ -793,18 +710,11 @@ void tst_QSqlRelationalTableModel::clearDisplayValuesCache() QCOMPARE(model.data(model.index(0, 0)).toInt(), 5); QCOMPARE(model.data(model.index(0, 1)).toString(), QString("anders")); QCOMPARE(model.data(model.index(0, 2)).toString(), QString("herr")); - if (!db.driverName().startsWith("QTDS")) - QCOMPARE(model.data(model.index(0, 3)).toString(), QString("herr")); - else - QCOMPARE(model.data(model.index(0, 3)).toInt(), 1); - + QCOMPARE(model.data(model.index(0, 3)).toString(), QString("herr")); QCOMPARE(model.data(model.index(4, 0)).toInt(), 3); QCOMPARE(model.data(model.index(4, 1)).toString(), QString("vohi")); QCOMPARE(model.data(model.index(4, 2)).toString(), QString("herr")); - if (!db.driverName().startsWith("QTDS")) - QCOMPARE(model.data(model.index(4, 3)).toString(), QString("mister")); - else - QCOMPARE(model.data(model.index(4, 3)).toInt(), 2); + QCOMPARE(model.data(model.index(4, 3)).toString(), QString("mister")); } // For task 140782 and 176374: If the main table and the the related tables uses the same @@ -819,38 +729,27 @@ void tst_QSqlRelationalTableModel::insertRecordDuplicateFieldNames() QSqlRelationalTableModel model(0, db); model.setTable(qTableName("reltest3")); model.setEditStrategy(QSqlTableModel::OnManualSubmit); - model.setSort(0, Qt::AscendingOrder); // Duplication of "name", used in both reltest3 and reltest4. model.setRelation(2, QSqlRelation(qTableName("reltest4"), "id", "name")); QVERIFY_SQL(model, select()); - if (db.driverName().startsWith("QIBASE") || db.driverName().startsWith("QOCI") || db.driverName().startsWith("QDB2")) { - QCOMPARE(model.record(1).value(qTableName("reltest4").append(QLatin1String("_name")).toUpper()).toString(), - QString("Trondheim")); - } else { - QCOMPARE(model.record(1).value(qTableName("reltest4").append(QLatin1String("_name"))).toString(), + QCOMPARE(model.record(1).value(qTableName("reltest4").append(QLatin1String("_name"))).toString(), QString("Trondheim")); - } QSqlRecord rec = model.record(); rec.setValue(0, 3); rec.setValue(1, "Berge"); rec.setValue(2, 1); // Must insert the key value - if (db.driverName().startsWith("QIBASE") || db.driverName().startsWith("QOCI") || db.driverName().startsWith("QDB2")) { - QCOMPARE(rec.fieldName(0), QLatin1String("ID")); - QCOMPARE(rec.fieldName(1), QLatin1String("NAME")); // This comes from main table - } else { - QCOMPARE(rec.fieldName(0), QLatin1String("id")); - QCOMPARE(rec.fieldName(1), QLatin1String("name")); - } + QCOMPARE(rec.fieldName(0), QLatin1String("id")); + QCOMPARE(rec.fieldName(1), QLatin1String("name")); // This comes from main table // The duplicate field names is aliased because it's comes from the relation's display column. - if(db.driverName().startsWith("QIBASE") || db.driverName().startsWith("QOCI") || db.driverName().startsWith("QDB2")) - QCOMPARE(rec.fieldName(2), (qTableName("reltest4").append(QLatin1String("_name"))).toUpper()); - else + if(!db.driverName().startsWith("QIBASE")) QCOMPARE(rec.fieldName(2), qTableName("reltest4").append(QLatin1String("_name"))); + else + QCOMPARE(rec.fieldName(2), (qTableName("reltest4").append(QLatin1String("_name"))).toUpper()); QVERIFY(model.insertRecord(-1, rec)); QCOMPARE(model.data(model.index(2, 2)).toString(), QString("Oslo")); @@ -894,7 +793,7 @@ void tst_QSqlRelationalTableModel::relationModel() QVERIFY(model.relationModel(3) == NULL); QVERIFY(model.relationModel(4) == NULL); - model.setRelation(3, QSqlRelation(qTableName("reltest4"), "id", "name")); + model.setRelation(3, QSqlRelation(qTableName("reltest2"), "tid", "title")); QVERIFY_SQL(model, select()); QVERIFY(model.relationModel(0) == NULL); @@ -907,285 +806,5 @@ void tst_QSqlRelationalTableModel::relationModel() QCOMPARE(rel_model->data(rel_model->index(0,1)).toString(), QString("herr")); } -void tst_QSqlRelationalTableModel::casing() -{ - QFETCH_GLOBAL(QString, dbName); - QSqlDatabase db = QSqlDatabase::database(dbName); - CHECK_DATABASE(db); - - if (db.driverName().startsWith("QSQLITE")) - QSKIP("The casing test for SQLITE is irrelevant since SQLITE is case insensitive", SkipAll); - - QStringList tableNames; - tableNames << qTableName("CASETEST1", db.driver()).toUpper(); - tableNames << qTableName("casetest1", db.driver()); - tst_Databases::safeDropTables(db, tableNames); - - QSqlQuery q(db); - QVERIFY_SQL( q, exec("create table " + qTableName("CASETEST1", db.driver()).toUpper() + - " (id int not null primary key, name varchar(20), title_key int, another_title_key int)")); - QVERIFY_SQL( q, exec("insert into " + qTableName("CASETEST1", db.driver()).toUpper() + " values(1, 'harry', 1, 2)")); - QVERIFY_SQL( q, exec("insert into " + qTableName("CASETEST1", db.driver()).toUpper() + " values(2, 'trond', 2, 1)")); - QVERIFY_SQL( q, exec("insert into " + qTableName("CASETEST1", db.driver()).toUpper() + " values(3, 'vohi', 1, 2)")); - QVERIFY_SQL( q, exec("insert into " + qTableName("CASETEST1", db.driver()).toUpper() + " values(4, 'boris', 2, 2)")); - - QVERIFY_SQL( q, exec("create table " + qTableName("casetest1", db.driver()) + - " (ident int not null primary key, name varchar(20), title_key int)")); - QVERIFY_SQL( q, exec("insert into " + qTableName("casetest1", db.driver()) + " values(1, 'jerry', 1)")); - QVERIFY_SQL( q, exec("insert into " + qTableName("casetest1", db.driver()) + " values(2, 'george', 2)")); - QVERIFY_SQL( q, exec("insert into " + qTableName("casetest1", db.driver()) + " values(4, 'kramer', 2)")); - - if (db.driverName().startsWith("QOCI")) { - //try an owner that doesn't exist - QSqlRecord rec = db.driver()->record("doug." + qTableName("CASETEST1", db.driver()).toUpper()); - QCOMPARE( rec.count(), 0); - - //try an owner that does exist - rec = db.driver()->record(db.userName() + "." + qTableName("CASETEST1", db.driver()).toUpper()); - QCOMPARE( rec.count(), 4); - } - QSqlRecord rec = db.driver()->record(qTableName("CASETEST1", db.driver()).toUpper()); - QCOMPARE( rec.count(), 4); - - rec = db.driver()->record(qTableName("casetest1", db.driver())); - QCOMPARE( rec.count(), 3); - - QSqlTableModel upperCaseModel(0, db); - upperCaseModel.setTable(qTableName("CASETEST1", db.driver()).toUpper()); - - QCOMPARE(upperCaseModel.tableName(),qTableName("CASETEST1",db.driver()).toUpper()); - - QVERIFY_SQL(upperCaseModel, select()); - - QCOMPARE(upperCaseModel.rowCount(), 4); - - QSqlTableModel lowerCaseModel(0, db); - lowerCaseModel.setTable(qTableName("casetest1", db.driver())); - QCOMPARE(lowerCaseModel.tableName(), qTableName("casetest1",db.driver())); - QVERIFY_SQL(lowerCaseModel, select()); - - QCOMPARE(lowerCaseModel.rowCount(), 3); - - QSqlRelationalTableModel model(0, db); - model.setTable(qTableName("CASETEST1", db.driver()).toUpper()); - model.setRelation(2, QSqlRelation(qTableName("reltest2"), "tid", "title")); - QVERIFY_SQL(model, select()); - - QCOMPARE(model.data(model.index(0, 0)).toInt(), 1); - QCOMPARE(model.data(model.index(0, 1)).toString(), QString("harry")); - QCOMPARE(model.data(model.index(0, 2)).toString(), QString("herr")); - - tst_Databases::safeDropTables(db, tableNames); -} - -void tst_QSqlRelationalTableModel::escapedRelations() -{ - QFETCH_GLOBAL(QString, dbName); - QSqlDatabase db = QSqlDatabase::database(dbName); - CHECK_DATABASE(db); - recreateTestTables(db); - - QSqlRelationalTableModel model(0, db); - model.setTable(qTableName("reltest1")); - - //try with relation table name quoted - if (db.driverName().startsWith("QIBASE") || db.driverName().startsWith("QOCI") || db.driverName().startsWith("QDB2")) { - model.setRelation(2, QSqlRelation(db.driver()->escapeIdentifier(qTableName("reltest2").toUpper(),QSqlDriver::TableName), - "tid", - "title")); - } else { - model.setRelation(2, QSqlRelation(db.driver()->escapeIdentifier(qTableName("reltest2"),QSqlDriver::TableName), - "tid", - "title")); - - } - QVERIFY_SQL(model, select()); - - QCOMPARE(model.data(model.index(0, 0)).toInt(), 1); - QCOMPARE(model.data(model.index(0, 1)).toString(), QString("harry")); - QCOMPARE(model.data(model.index(0, 2)).toString(), QString("herr")); - - //try with index column quoted - if (db.driverName().startsWith("QIBASE") || db.driverName().startsWith("QOCI") || db.driverName().startsWith("QDB2")) { - model.setRelation(2, QSqlRelation(qTableName("reltest2"), - db.driver()->escapeIdentifier("tid", QSqlDriver::FieldName).toUpper(), - "title")); - } else { - model.setRelation(2, QSqlRelation(qTableName("reltest2"), - db.driver()->escapeIdentifier("tid", QSqlDriver::FieldName), - "title")); - } - QVERIFY_SQL(model, select()); - - QCOMPARE(model.data(model.index(0, 0)).toInt(), 1); - QCOMPARE(model.data(model.index(0, 1)).toString(), QString("harry")); - QCOMPARE(model.data(model.index(0, 2)).toString(), QString("herr")); - - //try with display column quoted - - if (db.driverName().startsWith("QIBASE") || db.driverName().startsWith("QOCI") || db.driverName().startsWith("QDB2")) { - - model.setRelation(2, QSqlRelation(qTableName("reltest2"), - "tid", - db.driver()->escapeIdentifier("title", QSqlDriver::FieldName).toUpper())); - } else { - model.setRelation(2, QSqlRelation(qTableName("reltest2"), - "tid", - db.driver()->escapeIdentifier("title", QSqlDriver::FieldName))); - } - - QVERIFY_SQL(model, select()); - - QCOMPARE(model.data(model.index(0, 0)).toInt(), 1); - QCOMPARE(model.data(model.index(0, 1)).toString(), QString("harry")); - QCOMPARE(model.data(model.index(0, 2)).toString(), QString("herr")); - - //try with tablename and index and display columns quoted in the relation - - if (db.driverName().startsWith("QIBASE") || db.driverName().startsWith("QOCI") || db.driverName().startsWith("QDB2")) { - model.setRelation(2, QSqlRelation(qTableName("reltest2"), - "tid", - db.driver()->escapeIdentifier("title", QSqlDriver::FieldName).toUpper())); - } else { - model.setRelation(2, QSqlRelation(qTableName("reltest2"), - "tid", - db.driver()->escapeIdentifier("title", QSqlDriver::FieldName))); - } - QVERIFY_SQL(model, select()); - - QCOMPARE(model.data(model.index(0, 0)).toInt(), 1); - QCOMPARE(model.data(model.index(0, 1)).toString(), QString("harry")); - QCOMPARE(model.data(model.index(0, 2)).toString(), QString("herr")); -} - -void tst_QSqlRelationalTableModel::escapedTableName() -{ - QFETCH_GLOBAL(QString, dbName); - QSqlDatabase db = QSqlDatabase::database(dbName); - CHECK_DATABASE(db); - - // set the values using OnRowChange Strategy with an escaped tablename - { - QSqlRelationalTableModel model(0, db); - - if (db.driverName().startsWith("QIBASE") || db.driverName().startsWith("QOCI") || db.driverName().startsWith("QDB2")) { - model.setTable(db.driver()->escapeIdentifier(qTableName("reltest1").toUpper(), QSqlDriver::TableName)); - } else { - model.setTable(db.driver()->escapeIdentifier(qTableName("reltest1"), QSqlDriver::TableName)); - } - model.setSort(0, Qt::AscendingOrder); - model.setRelation(2, QSqlRelation(qTableName("reltest2"), "tid", "title")); - QVERIFY_SQL(model, select()); - - QVERIFY(model.setData(model.index(0, 1), QString("harry2"))); - QVERIFY(model.setData(model.index(0, 2), 2)); - - QCOMPARE(model.data(model.index(0, 1)).toString(), QString("harry2")); - QCOMPARE(model.data(model.index(0, 2)).toString(), QString("mister")); - - model.submit(); - - QVERIFY(model.setData(model.index(3,1), QString("boris2"))); - QVERIFY(model.setData(model.index(3, 2), 1)); - - QCOMPARE(model.data(model.index(3,1)).toString(), QString("boris2")); - QCOMPARE(model.data(model.index(3, 2)).toString(), QString("herr")); - - model.submit(); - } - { //verify values - QSqlRelationalTableModel model(0, db); - model.setTable(qTableName("reltest1")); - model.setSort(0, Qt::AscendingOrder); - QVERIFY_SQL(model, select()); - - QCOMPARE(model.data(model.index(0, 1)).toString(), QString("harry2")); - QCOMPARE(model.data(model.index(0, 2)).toInt(), 2); - QCOMPARE(model.data(model.index(3, 1)).toString(), QString("boris2")); - QCOMPARE(model.data(model.index(3, 2)).toInt(), 1); - - model.setRelation(2, QSqlRelation(qTableName("reltest2"), "tid", "title")); - QVERIFY_SQL(model, select()); - QCOMPARE(model.data(model.index(0, 2)).toString(), QString("mister")); - QCOMPARE(model.data(model.index(3,2)).toString(), QString("herr")); - - } -} - -void tst_QSqlRelationalTableModel::whiteSpaceInIdentifiers() { - - QFETCH_GLOBAL(QString, dbName); - QSqlDatabase db = QSqlDatabase::database(dbName); - CHECK_DATABASE(db); - - if (!testWhiteSpaceNames(db.driverName())) - QSKIP("White space test irrelevant for driver", SkipAll); - QSqlRelationalTableModel model(0, db); - model.setTable(db.driver()->escapeIdentifier(qTableName("rel test6"), QSqlDriver::TableName)); - model.setSort(0, Qt::DescendingOrder); - model.setRelation(1, QSqlRelation(db.driver()->escapeIdentifier(qTableName("rel test7"), QSqlDriver::TableName), - db.driver()->escapeIdentifier("city id", QSqlDriver::FieldName), - db.driver()->escapeIdentifier("city name", QSqlDriver::FieldName))); - QVERIFY_SQL(model, select()); - - QCOMPARE(model.data(model.index(0,1)).toString(), QString("Washington")); - QCOMPARE(model.data(model.index(1,1)).toString(), QString("New York")); - - QSqlRecord rec; - QSqlField f1("id", QVariant::Int); - QSqlField f2(db.driver()->escapeIdentifier("city key", QSqlDriver::FieldName), QVariant::Int); - QSqlField f3(db.driver()->escapeIdentifier("extra field", QSqlDriver::FieldName), QVariant::Int); - - f1.setValue(3); - f2.setValue(2); - f3.setValue(7); - - f1.setGenerated(true); - f2.setGenerated(true); - f3.setGenerated(true); - - rec.append(f1); - rec.append(f2); - rec.append(f3); - - QVERIFY_SQL(model, insertRecord(-1, rec)); - model.submitAll(); - - QCOMPARE(model.data(model.index(0, 0)).toInt(), 3); - QCOMPARE(model.data(model.index(0, 1)).toString(), QString("Washington")); - QCOMPARE(model.data(model.index(0, 2)).toInt(), 7); - - //TODO: For some reson setting a record using manual submit fails - //model.setEditStrategy(QSqlTableModel::OnManualSubmit); - - QSqlRecord recNew; - QSqlField f1New("id", QVariant::Int); - QSqlField f2New(db.driver()->escapeIdentifier("city key", QSqlDriver::FieldName), QVariant::Int); - QSqlField f3New(db.driver()->escapeIdentifier("extra field", QSqlDriver::FieldName), QVariant::Int); - - f1New.setValue(4); - f2New.setValue(1); - f3New.setValue(6); - - f1New.setGenerated(true); - f2New.setGenerated(true); - f3New.setGenerated(true); - - recNew.append(f1New); - recNew.append(f2New); - recNew.append(f3New); - - QVERIFY_SQL(model, setRecord(0, recNew)); - - QCOMPARE(model.data(model.index(0, 0)).toInt(), 4); - QCOMPARE(model.data(model.index(0, 1)).toString(), QString("New York")); - QCOMPARE(model.data(model.index(0, 2)).toInt(), 6); - - QVERIFY_SQL(model, submitAll()); - QCOMPARE(model.data(model.index(0, 0)).toInt(), 4); - QCOMPARE(model.data(model.index(0, 1)).toString(), QString("New York")); - QCOMPARE(model.data(model.index(0, 2)).toInt(), 6); -} - QTEST_MAIN(tst_QSqlRelationalTableModel) #include "tst_qsqlrelationaltablemodel.moc" diff --git a/tests/auto/qsqltablemodel/tst_qsqltablemodel.cpp b/tests/auto/qsqltablemodel/tst_qsqltablemodel.cpp index 0e7355e..d4affe4 100644 --- a/tests/auto/qsqltablemodel/tst_qsqltablemodel.cpp +++ b/tests/auto/qsqltablemodel/tst_qsqltablemodel.cpp @@ -145,7 +145,7 @@ void tst_QSqlTableModel::dropTestTables() << qTableName("bigtable") << qTableName("foo"); if (testWhiteSpaceNames(db.driverName())) - tableNames << qTableName("qtestw hitespace", db.driver()); + tableNames << qTableName("qtestw hitespace"); tst_Databases::safeDropTables(db, tableNames); @@ -277,7 +277,6 @@ void tst_QSqlTableModel::setRecord() QList policies = QList() << QSqlTableModel::OnFieldChange << QSqlTableModel::OnRowChange << QSqlTableModel::OnManualSubmit; - QString Xsuffix; foreach( QSqlTableModel::EditStrategy submitpolicy, policies) { QSqlTableModel model(0, db); @@ -296,8 +295,6 @@ void tst_QSqlTableModel::setRecord() if ((QSqlTableModel::EditStrategy)submitpolicy == QSqlTableModel::OnManualSubmit) QVERIFY(model.submitAll()); - else if ((QSqlTableModel::EditStrategy)submitpolicy == QSqlTableModel::OnRowChange && i == model.rowCount() -1) - model.submit(); else { // dataChanged() is not emitted when submitAll() is called QCOMPARE(spy.count(), 2); @@ -307,12 +304,10 @@ void tst_QSqlTableModel::setRecord() } } - Xsuffix.append('X'); - - QCOMPARE(model.data(model.index(0, 1)).toString(), QString("foo").append(Xsuffix)); - QCOMPARE(model.data(model.index(0, 2)).toString(), QString("bar").append(Xsuffix)); - QCOMPARE(model.data(model.index(1, 1)).toString(), QString("baz").append(Xsuffix)); - QCOMPARE(model.data(model.index(1, 2)).toString(), QString("joe").append(Xsuffix)); + QCOMPARE(model.data(model.index(0, 1)).toString(), QString("fooX")); + QCOMPARE(model.data(model.index(0, 2)).toString(), QString("barX")); + QCOMPARE(model.data(model.index(1, 1)).toString(), QString("bazX")); + QCOMPARE(model.data(model.index(1, 2)).toString(), QString("joeX")); } } -- cgit v0.12 From ced6ba7eee785caa7ba89d50f1a02f7f3994c839 Mon Sep 17 00:00:00 2001 From: Derick Hawcroft Date: Mon, 15 Jun 2009 16:29:38 +1000 Subject: unit test for task 229811 --- tests/auto/qsqlquery/tst_qsqlquery.cpp | 62 ++++++++++++++++++++++++++++++---- 1 file changed, 55 insertions(+), 7 deletions(-) diff --git a/tests/auto/qsqlquery/tst_qsqlquery.cpp b/tests/auto/qsqlquery/tst_qsqlquery.cpp index 7f97972..ab0c43c 100644 --- a/tests/auto/qsqlquery/tst_qsqlquery.cpp +++ b/tests/auto/qsqlquery/tst_qsqlquery.cpp @@ -177,6 +177,9 @@ private slots: #ifdef NOT_READY_YET void task_217003_data() { generic_data(); } void task_217003(); + + void task_229811(); + void task_229811_data() { generic_data(); } #endif void task_250026_data() { generic_data("QODBC"); } void task_250026(); @@ -184,7 +187,6 @@ private slots: void task_205701(); - private: // returns all database connections void generic_data(const QString &engine=QString()); @@ -2715,12 +2717,12 @@ void tst_QSqlQuery::task_250026() void tst_QSqlQuery::task_205701() { - QSqlDatabase qsdb = QSqlDatabase::addDatabase("QMYSQL", "atest"); - qsdb.setHostName("test"); - qsdb.setDatabaseName("test"); - qsdb.setUserName("test"); - qsdb.setPassword("test"); - qsdb.open(); + QSqlDatabase qsdb = QSqlDatabase::addDatabase("QMYSQL", "atest"); + qsdb.setHostName("test"); + qsdb.setDatabaseName("test"); + qsdb.setUserName("test"); + qsdb.setPassword("test"); + qsdb.open(); // { QSqlQuery query(qsdb); @@ -2728,6 +2730,52 @@ void tst_QSqlQuery::task_205701() QSqlDatabase::removeDatabase("atest"); } +#ifdef NOT_READY_YET +// For task: 229811 +void tst_QSqlQuery::task_229811() +{ + QFETCH( QString, dbName ); + QSqlDatabase db = QSqlDatabase::database( dbName ); + CHECK_DATABASE( db ); + + if (!db.driverName().startsWith( "QODBC" )) return; + + QSqlQuery q( db ); + + QString tableName = qTableName( "task_229811" ); + + if ( !q.exec( "CREATE TABLE " + tableName + " (Word varchar(20))" ) ) { + qDebug() << "Warning" << q.lastError(); + } + + QVERIFY_SQL( q, exec( "INSERT INTO " + tableName + " values ('Albert')" ) ); + QVERIFY_SQL( q, exec( "INSERT INTO " + tableName + " values ('Beehive')" ) ); + QVERIFY_SQL( q, exec( "INSERT INTO " + tableName + " values ('Alimony')" ) ); + QVERIFY_SQL( q, exec( "INSERT INTO " + tableName + " values ('Bohemian')" ) ); + QVERIFY_SQL( q, exec( "INSERT INTO " + tableName + " values ('AllStars')" ) ); + + + QString stmt = "SELECT * FROM " + tableName + " WHERE Word LIKE :name"; + QVERIFY_SQL(q,prepare(stmt)); + q.bindValue(":name", "A%"); + QVERIFY_SQL(q,exec()); + + QVERIFY(q.isActive()); + QVERIFY(q.isSelect()); + QVERIFY(q.first()); + + QSqlRecord rec = q.record(); + QCOMPARE(rec.field(0).value().toString(), QString("Albert")); + QVERIFY(q.next()); + rec = q.record(); + QCOMPARE(rec.field(0).value().toString(), QString("Alimony")); + QVERIFY(q.next()); + rec = q.record(); + QCOMPARE(rec.field(0).value().toString(),QString("AllStars")); + + q.exec("DROP TABLE " + tableName ); +} +#endif QTEST_MAIN( tst_QSqlQuery ) #include "tst_qsqlquery.moc" -- cgit v0.12 From 87598d2d8703fc18f89e11748d94ad4715e61f7c Mon Sep 17 00:00:00 2001 From: jasplin Date: Mon, 15 Jun 2009 10:18:33 +0200 Subject: Fixed minor doc typos. Reviewed-by: TrustMe --- src/gui/inputmethod/qinputcontext.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/gui/inputmethod/qinputcontext.cpp b/src/gui/inputmethod/qinputcontext.cpp index 8db326b..23e8e10 100644 --- a/src/gui/inputmethod/qinputcontext.cpp +++ b/src/gui/inputmethod/qinputcontext.cpp @@ -78,7 +78,7 @@ QT_BEGIN_NAMESPACE \ingroup i18n - An input method is responsible to input complex text that cannot + An input method is responsible for inputting complex text that cannot be inputted via simple keymap. It converts a sequence of input events (typically key events) into a text string through the input method specific converting process. The class of the processes are @@ -89,11 +89,11 @@ QT_BEGIN_NAMESPACE To abstract such different input method specific intermediate information, Qt offers the QInputContext as base class. The concept is well known as 'input context' in the input method - domain. an input context is created for a text widget in response + domain. An input context is created for a text widget in response to a demand. It is ensured that an input context is prepared for an input method before input to a text widget. - Multiple input contexts that is belonging to a single input method + Multiple input contexts that belong to a single input method may concurrently coexist. Suppose multi-window text editor. Each text widget of window A and B holds different QInputContext instance which contains different state information such as -- cgit v0.12 From f34c2c3b1198afac23f9894a56c5ab2fae798f59 Mon Sep 17 00:00:00 2001 From: mae Date: Mon, 15 Jun 2009 10:34:07 +0200 Subject: Fix QPlainTextEdit auto test Width 0 was used as magic value to optimize the widget's startup and initial resize. We now use the illegal value -1 as magic value insetad. --- src/gui/widgets/qplaintextedit.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/widgets/qplaintextedit.cpp b/src/gui/widgets/qplaintextedit.cpp index af11aa7..ca7dffd 100644 --- a/src/gui/widgets/qplaintextedit.cpp +++ b/src/gui/widgets/qplaintextedit.cpp @@ -761,7 +761,7 @@ void QPlainTextEditPrivate::init(const QString &txt) // set a null page size initially to avoid any relayouting until the textedit // is shown. relayoutDocument() will take care of setting the page size to the // viewport dimensions later. - doc->setTextWidth(0); + doc->setTextWidth(-1); doc->documentLayout()->setPaintDevice(viewport); doc->setDefaultFont(q->font()); -- cgit v0.12 From 6f3330e7fa110df65152a20cd4ab28a38988fb85 Mon Sep 17 00:00:00 2001 From: mae Date: Mon, 15 Jun 2009 10:48:05 +0200 Subject: Sync application example documentation with actual example The example now uses QPlainTextEdit instead of QTextEdit Reviewed-by: kavindra --- doc/src/examples/application.qdoc | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/doc/src/examples/application.qdoc b/doc/src/examples/application.qdoc index 32e8c10..0408a4a 100644 --- a/doc/src/examples/application.qdoc +++ b/doc/src/examples/application.qdoc @@ -45,7 +45,7 @@ The Application example shows how to implement a standard GUI application with menus, toolbars, and a status bar. The example - itself is a simple text editor program built around QTextEdit. + itself is a simple text editor program built around QPlainTextEdit. \image application.png Screenshot of the Application example @@ -103,7 +103,7 @@ \snippet examples/mainwindows/application/mainwindow.cpp 1 \snippet examples/mainwindows/application/mainwindow.cpp 2 - In the constructor, we start by creating a QTextEdit widget as a + In the constructor, we start by creating a QPlainTextEdit widget as a child of the main window (the \c this object). Then we call QMainWindow::setCentralWidget() to tell that this is going to be the widget that occupies the central area of the main window, @@ -114,9 +114,9 @@ functions that set up the user interface. After that, we call \c readSettings() to restore the user's preferences. - We establish a signal-slot connection between the QTextEdit's + We establish a signal-slot connection between the QPlainTextEdit's document object and our \c documentWasModified() slot. Whenever - the user modifies the text in the QTextEdit, we want to update + the user modifies the text in the QPlainTextEdit, we want to update the title bar to show that the file was modified. At the end, we set the window title using the private @@ -141,7 +141,7 @@ The \c newFile() slot is invoked when the user selects \menu{File|New} from the menu. We call \c maybeSave() to save any pending changes and if the user accepts to go on, we clear the - QTextEdit and call the private function \c setCurrentFile() to + QPlainTextEdit and call the private function \c setCurrentFile() to update the window title and clear the \l{QWidget::windowModified}{windowModified} flag. @@ -187,7 +187,7 @@ \snippet examples/mainwindows/application/mainwindow.cpp 16 The \c documentWasModified() slot is invoked each time the text - in the QTextEdit changes because of user edits. We call + in the QPlainTextEdit changes because of user edits. We call QWidget::setWindowModified() to make the title bar show that the file was modified. How this is done varies on each platform. @@ -227,8 +227,8 @@ \snippet examples/mainwindows/application/mainwindow.cpp 24 The \gui{Edit|Cut} and \gui{Edit|Copy} actions must be available - only when the QTextEdit contains selected text. We disable them - by default and connect the QTextEdit::copyAvailable() signal to + only when the QPlainTextEdit contains selected text. We disable them + by default and connect the QPlainTextEdit::copyAvailable() signal to the QAction::setEnabled() slot, ensuring that the actions are disabled when the text editor has no selection. -- cgit v0.12 From b3743d1df735d4b46f45e034818bbfe45bf8d22e Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Fri, 12 Jun 2009 18:21:00 +0200 Subject: properly indent embedded awk code Reviewed-by: TrustMe --- configure | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/configure b/configure index 4cf7499..ece117b 100755 --- a/configure +++ b/configure @@ -7035,9 +7035,9 @@ BEGIN { FNR == 1 { if ( input_file ) { - if ( ! target_file ) - target_file = third - print input_file >target_file + if ( ! target_file ) + target_file = third + print input_file >target_file } matched_target = 0 @@ -7048,32 +7048,32 @@ FNR == 1 { /^(TARGET.*=)/ { if ( \$3 == "moc" || \$3 ~ /^Qt/ ) { - target_file = first + target_file = first matched_target = 1 } } matched_target == 0 && /^(TEMPLATE.*=)/ { if ( \$3 == "subdirs" ) - target_file = second + target_file = second else if ( \$3 == "lib" ) - template_lib = 1 + template_lib = 1 else - target_file = third + target_file = third } matched_target == 0 && template_lib == 1 && /^(CONFIG.*=)/ { if ( \$0 ~ /plugin/ ) target_file = third else - target_file = second + target_file = second } END { if ( input_file ) { - if ( ! target_file ) - target_file = third - print input_file >>target_file + if ( ! target_file ) + target_file = third + print input_file >>target_file } } -- cgit v0.12 From 98899a4122565090640672d9aae2c37315f186ce Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Fri, 12 Jun 2009 20:49:24 +0200 Subject: fix qm build so "qmake -r && make" worked fine ... but configure does not simply run "qmake -r". also, now we have to build lrelease even when we don't build the other tools. Reviewed-by: Jason McDonald Reviewed-by: mariusSO --- configure | 4 ++++ projects.pro | 8 +++++++- tools/configure/configureapp.cpp | 1 + 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/configure b/configure index ece117b..5a162ee 100755 --- a/configure +++ b/configure @@ -7050,6 +7050,9 @@ FNR == 1 { if ( \$3 == "moc" || \$3 ~ /^Qt/ ) { target_file = first matched_target = 1 + } else if ( \$3 == "lrelease" || \$3 == "qm_phony_target" ) { + target_file = second + matched_target = 1 } } @@ -7134,6 +7137,7 @@ for part in $CFG_BUILD_PARTS; do case "$part" in tools) PART_ROOTS="$PART_ROOTS tools" ;; libs) PART_ROOTS="$PART_ROOTS src" ;; + translations) PART_ROOTS="$PART_ROOTS tools/linguist/lrelease translations" ;; examples) PART_ROOTS="$PART_ROOTS examples demos" ;; *) ;; esac diff --git a/projects.pro b/projects.pro index 03ce098..fc53100 100644 --- a/projects.pro +++ b/projects.pro @@ -10,6 +10,10 @@ cross_compile: CONFIG += nostrip isEmpty(QT_BUILD_PARTS) { #defaults QT_BUILD_PARTS = libs tools examples demos docs translations } else { #make sure the order makes sense + contains(QT_BUILD_PARTS, translations) { + QT_BUILD_PARTS -= translations + QT_BUILD_PARTS = translations $$QT_BUILD_PARTS + } contains(QT_BUILD_PARTS, tools) { QT_BUILD_PARTS -= tools QT_BUILD_PARTS = tools $$QT_BUILD_PARTS @@ -39,8 +43,10 @@ for(PROJECT, $$list($$lower($$unique(QT_BUILD_PARTS)))) { } else:isEqual(PROJECT, translations) { contains(QT_BUILD_PARTS, tools) { include(translations/translations.pri) # ts targets - SUBDIRS += translations # qm build step + } else { + SUBDIRS += tools/linguist/lrelease } + SUBDIRS += translations # qm build step } else:isEqual(PROJECT, qmake) { # SUBDIRS += qmake } else { diff --git a/tools/configure/configureapp.cpp b/tools/configure/configureapp.cpp index b9d172f..00a93c1 100644 --- a/tools/configure/configureapp.cpp +++ b/tools/configure/configureapp.cpp @@ -3142,6 +3142,7 @@ void Configure::buildHostTools() << "src/tools/moc" << "src/tools/rcc" << "src/tools/uic" + << "tools/linguist/lrelease" << "tools/checksdk"; if (dictionary[ "CETEST" ] == "yes") -- cgit v0.12 From 50443bf86335a8929477da4b5f0847f698ff827f Mon Sep 17 00:00:00 2001 From: Prasanth Ullattil Date: Mon, 15 Jun 2009 11:11:32 +0200 Subject: Add detailed warning when idc fails. When idc fails to dump IDL, the input executable name is now displayed on the commnad line. Reviewed-by:TrustMe --- src/tools/idc/main.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/tools/idc/main.cpp b/src/tools/idc/main.cpp index 8d2f0cc..07f9a82 100644 --- a/src/tools/idc/main.cpp +++ b/src/tools/idc/main.cpp @@ -331,6 +331,9 @@ int runIdc(int argc, char **argv) switch(res) { case S_OK: break; + case E_FAIL: + fprintf(stderr, "IDL generation failed trying to run program %s!\n", (const char*)input.toLocal8Bit().data()); + return res; case -1: fprintf(stderr, "Couldn't open %s for writing!\n", (const char*)idlfile.toLocal8Bit().data()); return res; -- cgit v0.12 From 3d77b56b32a0c53ec0bbfaa07236fedb900ff336 Mon Sep 17 00:00:00 2001 From: Simon Hausmann Date: Mon, 15 Jun 2009 10:54:44 +0200 Subject: Lock down src/3rdparty/webkit to a specific tag. Also removed some unused files from the import. Reviewed-by: Tor Arne Reviewed-by: Kent Hansen --- util/webkit/mkdist-webkit | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/util/webkit/mkdist-webkit b/util/webkit/mkdist-webkit index 730e8eb..2c45271 100755 --- a/util/webkit/mkdist-webkit +++ b/util/webkit/mkdist-webkit @@ -5,7 +5,7 @@ die() { exit 1 } -default_tag="origin/svn/master" +default_tag="qtwebkit-4.6-snapshot-15062009" if [ $# -eq 0 ]; then tag="$default_tag" @@ -111,9 +111,17 @@ excluded_directories="$excluded_directories WebCore/platform/image-decoders/jpeg excluded_directories="$excluded_directories WebCore/platform/image-decoders/xbm" excluded_directories="$excluded_directories WebCore/platform/image-decoders/skia" +excluded_directories="$excluded_directories WebCore/platform/image-encoders/skia" + excluded_directories="$excluded_directories WebCore/plugins/gtk" excluded_directories="$excluded_directories WebCore/plugins/chromium" +excluded_directories="$excluded_directories WebCore/accessibility/chromium" +excluded_directories="$excluded_directories WebCore/accessibility/gtk" +excluded_directories="$excluded_directories WebCore/accessibility/mac" +excluded_directories="$excluded_directories WebCore/accessibility/win" +excluded_directories="$excluded_directories WebCore/accessibility/wx" + excluded_directories="$excluded_directories WebCore/platform/symbian WebCore/platform/wx" excluded_directories="$excluded_directories WebKit/gtk" excluded_directories="$excluded_directories WebKit/win" -- cgit v0.12 From c411f16870f112c3407c28c22b617f613a82cff4 Mon Sep 17 00:00:00 2001 From: Simon Hausmann Date: Mon, 15 Jun 2009 11:06:43 +0200 Subject: Updated WebKit from /home/shausman/src/webkit/trunk to qtwebkit-4.6-snapshot-15062009 ( 65232bf00dc494ebfd978f998c88f58d18ecce1e ) --- src/3rdparty/webkit/ChangeLog | 685 +- src/3rdparty/webkit/JavaScriptCore/API/APICast.h | 34 +- src/3rdparty/webkit/JavaScriptCore/API/JSBase.cpp | 10 +- src/3rdparty/webkit/JavaScriptCore/API/JSBase.h | 10 +- .../webkit/JavaScriptCore/API/JSBasePrivate.h | 2 +- .../JavaScriptCore/API/JSCallbackConstructor.cpp | 15 +- .../JavaScriptCore/API/JSCallbackConstructor.h | 2 +- .../JavaScriptCore/API/JSCallbackFunction.cpp | 18 +- .../webkit/JavaScriptCore/API/JSCallbackFunction.h | 4 +- .../webkit/JavaScriptCore/API/JSCallbackObject.h | 16 +- .../JavaScriptCore/API/JSCallbackObjectFunctions.h | 152 +- .../webkit/JavaScriptCore/API/JSClassRef.cpp | 2 +- .../webkit/JavaScriptCore/API/JSContextRef.cpp | 4 +- .../webkit/JavaScriptCore/API/JSContextRef.h | 10 +- .../webkit/JavaScriptCore/API/JSObjectRef.cpp | 94 +- .../webkit/JavaScriptCore/API/JSObjectRef.h | 8 +- .../webkit/JavaScriptCore/API/JSStringRef.cpp | 3 + .../webkit/JavaScriptCore/API/JSStringRefCF.cpp | 9 +- .../webkit/JavaScriptCore/API/JSValueRef.cpp | 176 +- .../webkit/JavaScriptCore/API/WebKitAvailability.h | 85 +- src/3rdparty/webkit/JavaScriptCore/ChangeLog | 13278 ++++- .../webkit/JavaScriptCore/DerivedSources.make | 6 +- src/3rdparty/webkit/JavaScriptCore/Info.plist | 2 +- .../webkit/JavaScriptCore/JavaScriptCore.order | 3425 +- .../webkit/JavaScriptCore/JavaScriptCore.pri | 111 +- .../webkit/JavaScriptCore/JavaScriptCore.pro | 11 +- .../webkit/JavaScriptCore/JavaScriptCorePrefix.h | 9 - .../assembler/AbstractMacroAssembler.h | 999 + .../JavaScriptCore/assembler/AssemblerBuffer.h | 2 + .../JavaScriptCore/assembler/MacroAssembler.h | 1814 +- .../assembler/MacroAssemblerCodeRef.h | 156 + .../JavaScriptCore/assembler/MacroAssemblerX86.h | 164 + .../assembler/MacroAssemblerX86Common.h | 780 + .../assembler/MacroAssemblerX86_64.h | 446 + .../webkit/JavaScriptCore/assembler/X86Assembler.h | 399 +- .../webkit/JavaScriptCore/bytecode/CodeBlock.cpp | 174 +- .../webkit/JavaScriptCore/bytecode/CodeBlock.h | 144 +- .../webkit/JavaScriptCore/bytecode/EvalCodeCache.h | 13 +- .../webkit/JavaScriptCore/bytecode/Instruction.h | 40 +- .../webkit/JavaScriptCore/bytecode/JumpTable.h | 13 +- .../webkit/JavaScriptCore/bytecode/Opcode.h | 10 +- .../JavaScriptCore/bytecode/SamplingTool.cpp | 224 +- .../webkit/JavaScriptCore/bytecode/SamplingTool.h | 226 +- .../JavaScriptCore/bytecode/StructureStubInfo.h | 16 +- .../bytecompiler/BytecodeGenerator.cpp | 327 +- .../bytecompiler/BytecodeGenerator.h | 68 +- src/3rdparty/webkit/JavaScriptCore/config.h | 10 + .../webkit/JavaScriptCore/create_hash_table | 4 - .../webkit/JavaScriptCore/debugger/Debugger.cpp | 16 + .../webkit/JavaScriptCore/debugger/Debugger.h | 4 + .../JavaScriptCore/debugger/DebuggerActivation.cpp | 103 + .../JavaScriptCore/debugger/DebuggerActivation.h | 63 + .../JavaScriptCore/debugger/DebuggerCallFrame.cpp | 15 +- .../JavaScriptCore/debugger/DebuggerCallFrame.h | 10 +- .../JavaScriptCore/docs/make-bytecode-docs.pl | 4 +- .../JavaScriptCore/generated/ArrayPrototype.lut.h | 9 +- .../JavaScriptCore/generated/DatePrototype.lut.h | 7 +- .../webkit/JavaScriptCore/generated/Grammar.cpp | 1701 +- .../webkit/JavaScriptCore/generated/Grammar.h | 109 +- .../webkit/JavaScriptCore/generated/Lexer.lut.h | 5 - .../JavaScriptCore/generated/MathObject.lut.h | 5 - .../generated/NumberConstructor.lut.h | 5 - .../generated/RegExpConstructor.lut.h | 5 - .../JavaScriptCore/generated/RegExpObject.lut.h | 5 - .../JavaScriptCore/generated/StringPrototype.lut.h | 5 - .../webkit/JavaScriptCore/interpreter/CachedCall.h | 70 + .../JavaScriptCore/interpreter/CallFrame.cpp | 18 +- .../webkit/JavaScriptCore/interpreter/CallFrame.h | 41 +- .../JavaScriptCore/interpreter/CallFrameClosure.h | 60 + .../JavaScriptCore/interpreter/Interpreter.cpp | 3667 +- .../JavaScriptCore/interpreter/Interpreter.h | 279 +- .../webkit/JavaScriptCore/interpreter/Register.h | 102 +- .../JavaScriptCore/interpreter/RegisterFile.cpp | 11 + .../JavaScriptCore/interpreter/RegisterFile.h | 173 +- .../JavaScriptCore/jit/ExecutableAllocator.h | 75 +- .../jit/ExecutableAllocatorFixedVMPool.cpp | 447 + .../jit/ExecutableAllocatorPosix.cpp | 30 +- .../JavaScriptCore/jit/ExecutableAllocatorWin.cpp | 4 + src/3rdparty/webkit/JavaScriptCore/jit/JIT.cpp | 2161 +- src/3rdparty/webkit/JavaScriptCore/jit/JIT.h | 521 +- .../webkit/JavaScriptCore/jit/JITArithmetic.cpp | 1484 +- src/3rdparty/webkit/JavaScriptCore/jit/JITCall.cpp | 220 +- src/3rdparty/webkit/JavaScriptCore/jit/JITCode.h | 119 + .../webkit/JavaScriptCore/jit/JITInlineMethods.h | 237 +- .../webkit/JavaScriptCore/jit/JITOpcodes.cpp | 1183 + .../JavaScriptCore/jit/JITPropertyAccess.cpp | 774 +- .../webkit/JavaScriptCore/jit/JITStubCall.h | 170 + .../webkit/JavaScriptCore/jit/JITStubs.cpp | 2603 + src/3rdparty/webkit/JavaScriptCore/jit/JITStubs.h | 319 + src/3rdparty/webkit/JavaScriptCore/jsc.cpp | 212 +- .../webkit/JavaScriptCore/parser/Grammar.y | 447 +- .../webkit/JavaScriptCore/parser/Lexer.cpp | 1499 +- src/3rdparty/webkit/JavaScriptCore/parser/Lexer.h | 138 +- .../JavaScriptCore/parser/NodeConstructors.h | 911 + .../webkit/JavaScriptCore/parser/NodeInfo.h | 4 +- .../webkit/JavaScriptCore/parser/Nodes.cpp | 1618 +- src/3rdparty/webkit/JavaScriptCore/parser/Nodes.h | 1973 +- .../webkit/JavaScriptCore/parser/Parser.cpp | 26 +- src/3rdparty/webkit/JavaScriptCore/parser/Parser.h | 35 +- .../webkit/JavaScriptCore/parser/ParserArena.cpp | 60 + .../webkit/JavaScriptCore/parser/ParserArena.h | 64 + .../webkit/JavaScriptCore/parser/ResultType.h | 77 +- .../webkit/JavaScriptCore/parser/SourceProvider.h | 10 +- src/3rdparty/webkit/JavaScriptCore/pcre/dftables | 2 +- .../webkit/JavaScriptCore/pcre/pcre_compile.cpp | 23 +- .../webkit/JavaScriptCore/pcre/pcre_exec.cpp | 5 +- .../webkit/JavaScriptCore/pcre/pcre_internal.h | 36 +- .../JavaScriptCore/profiler/CallIdentifier.h | 34 +- .../JavaScriptCore/profiler/HeavyProfile.cpp | 115 - .../webkit/JavaScriptCore/profiler/HeavyProfile.h | 63 - .../webkit/JavaScriptCore/profiler/Profile.cpp | 3 +- .../webkit/JavaScriptCore/profiler/Profile.h | 11 - .../JavaScriptCore/profiler/ProfileGenerator.cpp | 4 +- .../JavaScriptCore/profiler/ProfileGenerator.h | 1 + .../webkit/JavaScriptCore/profiler/ProfileNode.cpp | 6 - .../webkit/JavaScriptCore/profiler/ProfileNode.h | 10 - .../webkit/JavaScriptCore/profiler/Profiler.cpp | 24 +- .../webkit/JavaScriptCore/profiler/Profiler.h | 8 +- .../webkit/JavaScriptCore/profiler/TreeProfile.cpp | 51 - .../webkit/JavaScriptCore/profiler/TreeProfile.h | 51 - .../webkit/JavaScriptCore/runtime/ArgList.cpp | 17 +- .../webkit/JavaScriptCore/runtime/ArgList.h | 76 +- .../webkit/JavaScriptCore/runtime/Arguments.cpp | 68 +- .../webkit/JavaScriptCore/runtime/Arguments.h | 20 +- .../JavaScriptCore/runtime/ArrayConstructor.cpp | 11 +- .../JavaScriptCore/runtime/ArrayPrototype.cpp | 633 +- .../JavaScriptCore/runtime/BooleanConstructor.cpp | 8 +- .../JavaScriptCore/runtime/BooleanConstructor.h | 2 +- .../webkit/JavaScriptCore/runtime/BooleanObject.h | 4 +- .../JavaScriptCore/runtime/BooleanPrototype.cpp | 19 +- .../webkit/JavaScriptCore/runtime/ByteArray.cpp | 38 - .../webkit/JavaScriptCore/runtime/ByteArray.h | 70 - .../webkit/JavaScriptCore/runtime/CallData.cpp | 2 +- .../webkit/JavaScriptCore/runtime/CallData.h | 8 +- .../webkit/JavaScriptCore/runtime/Collector.cpp | 77 +- .../webkit/JavaScriptCore/runtime/Collector.h | 14 +- .../JavaScriptCore/runtime/CommonIdentifiers.h | 5 +- .../webkit/JavaScriptCore/runtime/Completion.cpp | 12 +- .../webkit/JavaScriptCore/runtime/Completion.h | 10 +- .../JavaScriptCore/runtime/ConstructData.cpp | 2 +- .../webkit/JavaScriptCore/runtime/ConstructData.h | 4 +- .../JavaScriptCore/runtime/DateConstructor.cpp | 91 +- .../webkit/JavaScriptCore/runtime/DateInstance.h | 6 +- .../webkit/JavaScriptCore/runtime/DateMath.cpp | 146 +- .../JavaScriptCore/runtime/DatePrototype.cpp | 410 +- .../webkit/JavaScriptCore/runtime/DatePrototype.h | 2 +- .../webkit/JavaScriptCore/runtime/Error.cpp | 3 +- .../JavaScriptCore/runtime/ErrorConstructor.cpp | 6 +- .../JavaScriptCore/runtime/ErrorPrototype.cpp | 19 +- .../JavaScriptCore/runtime/ExceptionHelpers.cpp | 51 +- .../JavaScriptCore/runtime/ExceptionHelpers.h | 14 +- .../JavaScriptCore/runtime/FunctionConstructor.cpp | 27 +- .../JavaScriptCore/runtime/FunctionConstructor.h | 4 + .../JavaScriptCore/runtime/FunctionPrototype.cpp | 100 +- .../JavaScriptCore/runtime/FunctionPrototype.h | 6 +- .../webkit/JavaScriptCore/runtime/GetterSetter.cpp | 8 +- .../webkit/JavaScriptCore/runtime/GetterSetter.h | 8 +- .../webkit/JavaScriptCore/runtime/Identifier.cpp | 16 +- .../JavaScriptCore/runtime/InitializeThreading.cpp | 2 +- .../JavaScriptCore/runtime/InternalFunction.cpp | 20 + .../JavaScriptCore/runtime/InternalFunction.h | 10 +- .../webkit/JavaScriptCore/runtime/JSActivation.cpp | 14 +- .../webkit/JavaScriptCore/runtime/JSActivation.h | 14 +- .../webkit/JavaScriptCore/runtime/JSArray.cpp | 214 +- .../webkit/JavaScriptCore/runtime/JSArray.h | 38 +- .../webkit/JavaScriptCore/runtime/JSByteArray.cpp | 12 +- .../webkit/JavaScriptCore/runtime/JSByteArray.h | 36 +- .../webkit/JavaScriptCore/runtime/JSCell.cpp | 21 +- .../webkit/JavaScriptCore/runtime/JSCell.h | 49 +- .../webkit/JavaScriptCore/runtime/JSFunction.cpp | 82 +- .../webkit/JavaScriptCore/runtime/JSFunction.h | 67 +- .../webkit/JavaScriptCore/runtime/JSGlobalData.cpp | 138 +- .../webkit/JavaScriptCore/runtime/JSGlobalData.h | 99 +- .../JavaScriptCore/runtime/JSGlobalObject.cpp | 138 +- .../webkit/JavaScriptCore/runtime/JSGlobalObject.h | 61 +- .../runtime/JSGlobalObjectFunctions.cpp | 77 +- .../runtime/JSGlobalObjectFunctions.h | 28 +- .../webkit/JavaScriptCore/runtime/JSImmediate.cpp | 41 +- .../webkit/JavaScriptCore/runtime/JSImmediate.h | 609 +- .../webkit/JavaScriptCore/runtime/JSLock.cpp | 54 + .../JavaScriptCore/runtime/JSNotAnObject.cpp | 11 +- .../webkit/JavaScriptCore/runtime/JSNotAnObject.h | 10 +- .../webkit/JavaScriptCore/runtime/JSNumberCell.cpp | 33 +- .../webkit/JavaScriptCore/runtime/JSNumberCell.h | 396 +- .../webkit/JavaScriptCore/runtime/JSObject.cpp | 153 +- .../webkit/JavaScriptCore/runtime/JSObject.h | 317 +- .../runtime/JSPropertyNameIterator.cpp | 6 +- .../runtime/JSPropertyNameIterator.h | 22 +- .../JavaScriptCore/runtime/JSStaticScopeObject.cpp | 4 +- .../JavaScriptCore/runtime/JSStaticScopeObject.h | 8 +- .../webkit/JavaScriptCore/runtime/JSString.cpp | 10 +- .../webkit/JavaScriptCore/runtime/JSString.h | 14 +- .../webkit/JavaScriptCore/runtime/JSValue.cpp | 25 +- .../webkit/JavaScriptCore/runtime/JSValue.h | 373 +- .../JavaScriptCore/runtime/JSVariableObject.h | 10 +- .../JavaScriptCore/runtime/JSWrapperObject.cpp | 4 +- .../JavaScriptCore/runtime/JSWrapperObject.h | 11 +- .../JavaScriptCore/runtime/LiteralParser.cpp | 306 + .../webkit/JavaScriptCore/runtime/LiteralParser.h | 112 + .../webkit/JavaScriptCore/runtime/Lookup.cpp | 26 +- .../webkit/JavaScriptCore/runtime/Lookup.h | 42 +- .../webkit/JavaScriptCore/runtime/MathObject.cpp | 112 +- .../webkit/JavaScriptCore/runtime/MathObject.h | 2 +- .../runtime/NativeErrorConstructor.cpp | 10 +- .../JavaScriptCore/runtime/NativeFunctionWrapper.h | 39 + .../JavaScriptCore/runtime/NumberConstructor.cpp | 34 +- .../JavaScriptCore/runtime/NumberConstructor.h | 4 +- .../webkit/JavaScriptCore/runtime/NumberObject.cpp | 11 +- .../webkit/JavaScriptCore/runtime/NumberObject.h | 7 +- .../JavaScriptCore/runtime/NumberPrototype.cpp | 108 +- .../JavaScriptCore/runtime/ObjectConstructor.cpp | 9 +- .../JavaScriptCore/runtime/ObjectPrototype.cpp | 89 +- .../JavaScriptCore/runtime/ObjectPrototype.h | 2 +- .../webkit/JavaScriptCore/runtime/Operations.cpp | 84 +- .../webkit/JavaScriptCore/runtime/Operations.h | 411 +- .../JavaScriptCore/runtime/PropertyMapHashTable.h | 7 +- .../JavaScriptCore/runtime/PropertyNameArray.cpp | 2 +- .../JavaScriptCore/runtime/PropertyNameArray.h | 10 +- .../webkit/JavaScriptCore/runtime/PropertySlot.cpp | 2 +- .../webkit/JavaScriptCore/runtime/PropertySlot.h | 44 +- .../webkit/JavaScriptCore/runtime/Protect.h | 76 +- .../JavaScriptCore/runtime/PutPropertySlot.h | 12 +- .../webkit/JavaScriptCore/runtime/RegExp.cpp | 156 +- .../webkit/JavaScriptCore/runtime/RegExp.h | 14 +- .../JavaScriptCore/runtime/RegExpConstructor.cpp | 98 +- .../JavaScriptCore/runtime/RegExpConstructor.h | 16 +- .../JavaScriptCore/runtime/RegExpMatchesArray.h | 4 +- .../webkit/JavaScriptCore/runtime/RegExpObject.cpp | 37 +- .../webkit/JavaScriptCore/runtime/RegExpObject.h | 12 +- .../JavaScriptCore/runtime/RegExpPrototype.cpp | 55 +- .../webkit/JavaScriptCore/runtime/ScopeChain.h | 15 + .../webkit/JavaScriptCore/runtime/SmallStrings.cpp | 68 +- .../webkit/JavaScriptCore/runtime/SmallStrings.h | 12 +- .../JavaScriptCore/runtime/StringConstructor.cpp | 17 +- .../webkit/JavaScriptCore/runtime/StringObject.cpp | 2 +- .../webkit/JavaScriptCore/runtime/StringObject.h | 10 +- .../StringObjectThatMasqueradesAsUndefined.h | 2 +- .../JavaScriptCore/runtime/StringPrototype.cpp | 535 +- .../webkit/JavaScriptCore/runtime/Structure.cpp | 263 +- .../webkit/JavaScriptCore/runtime/Structure.h | 61 +- .../JavaScriptCore/runtime/StructureChain.cpp | 38 +- .../webkit/JavaScriptCore/runtime/StructureChain.h | 7 +- .../runtime/StructureTransitionTable.h | 13 +- .../JavaScriptCore/runtime/TimeoutChecker.cpp | 154 + .../webkit/JavaScriptCore/runtime/TimeoutChecker.h | 73 + .../webkit/JavaScriptCore/runtime/TypeInfo.h | 15 +- .../webkit/JavaScriptCore/runtime/UString.cpp | 500 +- .../webkit/JavaScriptCore/runtime/UString.h | 240 +- src/3rdparty/webkit/JavaScriptCore/wrec/WREC.cpp | 7 +- .../webkit/JavaScriptCore/wrec/WRECGenerator.cpp | 98 +- .../webkit/JavaScriptCore/wrec/WRECGenerator.h | 22 +- .../webkit/JavaScriptCore/wrec/WRECParser.cpp | 36 +- .../webkit/JavaScriptCore/wtf/ASCIICType.h | 16 +- src/3rdparty/webkit/JavaScriptCore/wtf/AVLTree.h | 2 +- .../webkit/JavaScriptCore/wtf/AlwaysInline.h | 12 +- .../webkit/JavaScriptCore/wtf/Assertions.h | 2 +- .../webkit/JavaScriptCore/wtf/ByteArray.cpp | 38 + src/3rdparty/webkit/JavaScriptCore/wtf/ByteArray.h | 80 + .../JavaScriptCore/wtf/CONTRIBUTORS.pthreads-win32 | 137 + .../JavaScriptCore/wtf/CrossThreadRefCounted.h | 169 + .../webkit/JavaScriptCore/wtf/CurrentTime.cpp | 232 + .../webkit/JavaScriptCore/wtf/CurrentTime.h | 47 + src/3rdparty/webkit/JavaScriptCore/wtf/Deque.h | 121 +- .../webkit/JavaScriptCore/wtf/FastAllocBase.h | 400 + .../webkit/JavaScriptCore/wtf/FastMalloc.cpp | 417 +- .../webkit/JavaScriptCore/wtf/FastMalloc.h | 89 + src/3rdparty/webkit/JavaScriptCore/wtf/GOwnPtr.cpp | 6 + src/3rdparty/webkit/JavaScriptCore/wtf/GOwnPtr.h | 1 + .../webkit/JavaScriptCore/wtf/HashTraits.h | 43 +- .../webkit/JavaScriptCore/wtf/MainThread.cpp | 73 +- .../webkit/JavaScriptCore/wtf/MainThread.h | 4 +- .../webkit/JavaScriptCore/wtf/MessageQueue.h | 53 +- src/3rdparty/webkit/JavaScriptCore/wtf/NotFound.h | 2 + .../webkit/JavaScriptCore/wtf/OwnFastMallocPtr.h | 52 + src/3rdparty/webkit/JavaScriptCore/wtf/OwnPtr.h | 93 +- .../webkit/JavaScriptCore/wtf/OwnPtrCommon.h | 58 + .../webkit/JavaScriptCore/wtf/PassOwnPtr.h | 177 + .../webkit/JavaScriptCore/wtf/PassRefPtr.h | 2 +- src/3rdparty/webkit/JavaScriptCore/wtf/Platform.h | 131 +- .../webkit/JavaScriptCore/wtf/PtrAndFlags.h | 53 + .../webkit/JavaScriptCore/wtf/RandomNumber.cpp | 47 +- .../webkit/JavaScriptCore/wtf/RandomNumber.h | 8 +- .../webkit/JavaScriptCore/wtf/RandomNumberSeed.h | 9 + .../webkit/JavaScriptCore/wtf/RefCounted.h | 35 +- src/3rdparty/webkit/JavaScriptCore/wtf/RetainPtr.h | 11 +- .../webkit/JavaScriptCore/wtf/StdLibExtras.h | 25 + .../webkit/JavaScriptCore/wtf/StringExtras.h | 4 + src/3rdparty/webkit/JavaScriptCore/wtf/TCPageMap.h | 33 +- .../webkit/JavaScriptCore/wtf/TCSystemAlloc.cpp | 56 +- .../webkit/JavaScriptCore/wtf/TCSystemAlloc.h | 8 +- .../webkit/JavaScriptCore/wtf/ThreadSpecific.h | 59 +- .../JavaScriptCore/wtf/ThreadSpecificWin.cpp | 17 +- .../webkit/JavaScriptCore/wtf/Threading.cpp | 24 +- src/3rdparty/webkit/JavaScriptCore/wtf/Threading.h | 84 +- .../webkit/JavaScriptCore/wtf/ThreadingGtk.cpp | 244 - .../webkit/JavaScriptCore/wtf/ThreadingNone.cpp | 7 +- .../JavaScriptCore/wtf/ThreadingPthreads.cpp | 139 +- .../webkit/JavaScriptCore/wtf/ThreadingQt.cpp | 257 - .../webkit/JavaScriptCore/wtf/ThreadingWin.cpp | 355 +- .../webkit/JavaScriptCore/wtf/TypeTraits.cpp | 120 + .../webkit/JavaScriptCore/wtf/TypeTraits.h | 339 + src/3rdparty/webkit/JavaScriptCore/wtf/VMTags.h | 55 + src/3rdparty/webkit/JavaScriptCore/wtf/Vector.h | 25 +- .../webkit/JavaScriptCore/wtf/VectorTraits.h | 19 +- src/3rdparty/webkit/JavaScriptCore/wtf/dtoa.cpp | 900 +- src/3rdparty/webkit/JavaScriptCore/wtf/dtoa.h | 3 +- .../webkit/JavaScriptCore/wtf/qt/MainThreadQt.cpp | 5 +- .../webkit/JavaScriptCore/wtf/qt/ThreadingQt.cpp | 269 + .../webkit/JavaScriptCore/wtf/unicode/Unicode.h | 4 +- .../wtf/unicode/glib/UnicodeGLib.cpp | 214 + .../JavaScriptCore/wtf/unicode/glib/UnicodeGLib.h | 238 + .../wtf/unicode/glib/UnicodeMacrosFromICU.h | 69 + .../JavaScriptCore/wtf/unicode/icu/UnicodeIcu.h | 11 + .../JavaScriptCore/wtf/unicode/qt4/UnicodeQt4.h | 17 + .../webkit/JavaScriptCore/yarr/RegexCompiler.cpp | 728 + .../webkit/JavaScriptCore/yarr/RegexCompiler.h | 45 + .../JavaScriptCore/yarr/RegexInterpreter.cpp | 1638 + .../webkit/JavaScriptCore/yarr/RegexInterpreter.h | 337 + .../webkit/JavaScriptCore/yarr/RegexJIT.cpp | 1390 + src/3rdparty/webkit/JavaScriptCore/yarr/RegexJIT.h | 91 + .../webkit/JavaScriptCore/yarr/RegexParser.h | 854 + .../webkit/JavaScriptCore/yarr/RegexPattern.h | 356 + src/3rdparty/webkit/VERSION | 4 +- src/3rdparty/webkit/WebCore/ChangeLog | 55874 ++++++++++++++++++- src/3rdparty/webkit/WebCore/DerivedSources.cpp | 14 +- .../WebCore/ForwardingHeaders/debugger/Debugger.h | 3 + .../debugger/DebuggerActivation.h | 4 + .../ForwardingHeaders/debugger/DebuggerCallFrame.h | 3 + .../ForwardingHeaders/interpreter/CallFrame.h | 3 + .../ForwardingHeaders/interpreter/Interpreter.h | 3 + .../webkit/WebCore/ForwardingHeaders/jit/JITCode.h | 4 + .../WebCore/ForwardingHeaders/masm/X86Assembler.h | 3 + .../WebCore/ForwardingHeaders/parser/Parser.h | 3 + .../WebCore/ForwardingHeaders/parser/SourceCode.h | 3 + .../ForwardingHeaders/parser/SourceProvider.h | 3 + .../webkit/WebCore/ForwardingHeaders/pcre/pcre.h | 4 + .../WebCore/ForwardingHeaders/profiler/Profile.h | 4 + .../ForwardingHeaders/profiler/ProfileNode.h | 4 + .../WebCore/ForwardingHeaders/profiler/Profiler.h | 4 + .../WebCore/ForwardingHeaders/runtime/ArgList.h | 3 + .../ForwardingHeaders/runtime/ArrayPrototype.h | 3 + .../ForwardingHeaders/runtime/BooleanObject.h | 3 + .../WebCore/ForwardingHeaders/runtime/ByteArray.h | 1 - .../WebCore/ForwardingHeaders/runtime/CallData.h | 3 + .../WebCore/ForwardingHeaders/runtime/Collector.h | 3 + .../runtime/CollectorHeapIterator.h | 3 + .../WebCore/ForwardingHeaders/runtime/Completion.h | 3 + .../ForwardingHeaders/runtime/ConstructData.h | 3 + .../ForwardingHeaders/runtime/DateInstance.h | 3 + .../WebCore/ForwardingHeaders/runtime/DateMath.h | 4 + .../WebCore/ForwardingHeaders/runtime/Error.h | 3 + .../runtime/FunctionConstructor.h | 3 + .../ForwardingHeaders/runtime/FunctionPrototype.h | 3 + .../WebCore/ForwardingHeaders/runtime/Identifier.h | 3 + .../runtime/InitializeThreading.h | 3 + .../ForwardingHeaders/runtime/InternalFunction.h | 3 + .../WebCore/ForwardingHeaders/runtime/JSArray.h | 3 + .../ForwardingHeaders/runtime/JSByteArray.h | 3 + .../WebCore/ForwardingHeaders/runtime/JSFunction.h | 3 + .../ForwardingHeaders/runtime/JSGlobalData.h | 3 + .../ForwardingHeaders/runtime/JSGlobalObject.h | 3 + .../WebCore/ForwardingHeaders/runtime/JSLock.h | 3 + .../ForwardingHeaders/runtime/JSNumberCell.h | 3 + .../WebCore/ForwardingHeaders/runtime/JSObject.h | 3 + .../WebCore/ForwardingHeaders/runtime/JSString.h | 3 + .../WebCore/ForwardingHeaders/runtime/JSValue.h | 3 + .../WebCore/ForwardingHeaders/runtime/Lookup.h | 3 + .../ForwardingHeaders/runtime/ObjectPrototype.h | 3 + .../WebCore/ForwardingHeaders/runtime/Operations.h | 3 + .../ForwardingHeaders/runtime/PropertyMap.h | 4 + .../ForwardingHeaders/runtime/PropertyNameArray.h | 4 + .../WebCore/ForwardingHeaders/runtime/Protect.h | 4 + .../ForwardingHeaders/runtime/PrototypeFunction.h | 4 + .../ForwardingHeaders/runtime/StringObject.h | 3 + .../StringObjectThatMasqueradesAsUndefined.h | 3 + .../ForwardingHeaders/runtime/StringPrototype.h | 3 + .../WebCore/ForwardingHeaders/runtime/Structure.h | 3 + .../ForwardingHeaders/runtime/SymbolTable.h | 3 + .../WebCore/ForwardingHeaders/runtime/UString.h | 3 + .../webkit/WebCore/ForwardingHeaders/wrec/WREC.h | 3 + .../WebCore/ForwardingHeaders/wtf/ASCIICType.h | 3 + .../WebCore/ForwardingHeaders/wtf/AlwaysInline.h | 3 + .../WebCore/ForwardingHeaders/wtf/Assertions.h | 3 + .../WebCore/ForwardingHeaders/wtf/ByteArray.h | 4 + .../ForwardingHeaders/wtf/CrossThreadRefCounted.h | 1 + .../WebCore/ForwardingHeaders/wtf/CurrentTime.h | 4 + .../webkit/WebCore/ForwardingHeaders/wtf/Deque.h | 3 + .../WebCore/ForwardingHeaders/wtf/DisallowCType.h | 3 + .../WebCore/ForwardingHeaders/wtf/FastMalloc.h | 3 + .../webkit/WebCore/ForwardingHeaders/wtf/Forward.h | 3 + .../webkit/WebCore/ForwardingHeaders/wtf/GetPtr.h | 3 + .../WebCore/ForwardingHeaders/wtf/HashCountedSet.h | 3 + .../WebCore/ForwardingHeaders/wtf/HashFunctions.h | 3 + .../webkit/WebCore/ForwardingHeaders/wtf/HashMap.h | 3 + .../webkit/WebCore/ForwardingHeaders/wtf/HashSet.h | 3 + .../WebCore/ForwardingHeaders/wtf/HashTable.h | 3 + .../WebCore/ForwardingHeaders/wtf/HashTraits.h | 3 + .../WebCore/ForwardingHeaders/wtf/ListHashSet.h | 3 + .../WebCore/ForwardingHeaders/wtf/ListRefPtr.h | 3 + .../webkit/WebCore/ForwardingHeaders/wtf/Locker.h | 3 + .../WebCore/ForwardingHeaders/wtf/MainThread.h | 3 + .../WebCore/ForwardingHeaders/wtf/MathExtras.h | 3 + .../WebCore/ForwardingHeaders/wtf/MessageQueue.h | 3 + .../WebCore/ForwardingHeaders/wtf/Noncopyable.h | 3 + .../WebCore/ForwardingHeaders/wtf/NotFound.h | 3 + .../WebCore/ForwardingHeaders/wtf/OwnArrayPtr.h | 3 + .../ForwardingHeaders/wtf/OwnFastMallocPtr.h | 1 + .../webkit/WebCore/ForwardingHeaders/wtf/OwnPtr.h | 3 + .../WebCore/ForwardingHeaders/wtf/OwnPtrCommon.h | 4 + .../WebCore/ForwardingHeaders/wtf/PassOwnPtr.h | 4 + .../WebCore/ForwardingHeaders/wtf/PassRefPtr.h | 3 + .../WebCore/ForwardingHeaders/wtf/Platform.h | 3 + .../WebCore/ForwardingHeaders/wtf/PtrAndFlags.h | 5 + .../WebCore/ForwardingHeaders/wtf/RandomNumber.h | 4 + .../WebCore/ForwardingHeaders/wtf/RefCounted.h | 3 + .../ForwardingHeaders/wtf/RefCountedLeakCounter.h | 3 + .../webkit/WebCore/ForwardingHeaders/wtf/RefPtr.h | 3 + .../WebCore/ForwardingHeaders/wtf/RetainPtr.h | 3 + .../WebCore/ForwardingHeaders/wtf/StdLibExtras.h | 3 + .../WebCore/ForwardingHeaders/wtf/StringExtras.h | 3 + .../WebCore/ForwardingHeaders/wtf/ThreadSpecific.h | 3 + .../WebCore/ForwardingHeaders/wtf/Threading.h | 3 + .../WebCore/ForwardingHeaders/wtf/TypeTraits.h | 4 + .../WebCore/ForwardingHeaders/wtf/UnusedParam.h | 3 + .../webkit/WebCore/ForwardingHeaders/wtf/VMTags.h | 4 + .../webkit/WebCore/ForwardingHeaders/wtf/Vector.h | 3 + .../WebCore/ForwardingHeaders/wtf/VectorTraits.h | 3 + .../webkit/WebCore/ForwardingHeaders/wtf/dtoa.h | 3 + .../ForwardingHeaders/wtf/unicode/Collator.h | 3 + .../WebCore/ForwardingHeaders/wtf/unicode/UTF8.h | 3 + .../ForwardingHeaders/wtf/unicode/Unicode.h | 3 + .../ForwardingHeaders/wtf/unicode/icu/UnicodeIcu.h | 3 + src/3rdparty/webkit/WebCore/Info.plist | 2 +- src/3rdparty/webkit/WebCore/Resources/panIcon.png | Bin 0 -> 175 bytes src/3rdparty/webkit/WebCore/WebCore.LP64.exp | 12 + src/3rdparty/webkit/WebCore/WebCore.NPAPI.exp | 7 + src/3rdparty/webkit/WebCore/WebCore.VideoProxy.exp | 4 + src/3rdparty/webkit/WebCore/WebCore.order | 35577 +++++++----- src/3rdparty/webkit/WebCore/WebCore.pro | 531 +- src/3rdparty/webkit/WebCore/WebCorePrefix.h | 10 - .../webkit/WebCore/accessibility/AXObjectCache.cpp | 341 + .../webkit/WebCore/accessibility/AXObjectCache.h | 130 + .../accessibility/AccessibilityARIAGrid.cpp | 154 + .../WebCore/accessibility/AccessibilityARIAGrid.h | 60 + .../accessibility/AccessibilityARIAGridCell.cpp | 96 + .../accessibility/AccessibilityARIAGridCell.h | 55 + .../accessibility/AccessibilityARIAGridRow.cpp | 75 + .../accessibility/AccessibilityARIAGridRow.h | 50 + .../accessibility/AccessibilityImageMapLink.cpp | 138 + .../accessibility/AccessibilityImageMapLink.h | 73 + .../WebCore/accessibility/AccessibilityList.cpp | 94 + .../WebCore/accessibility/AccessibilityList.h | 62 + .../WebCore/accessibility/AccessibilityListBox.cpp | 181 + .../WebCore/accessibility/AccessibilityListBox.h | 66 + .../accessibility/AccessibilityListBoxOption.cpp | 207 + .../accessibility/AccessibilityListBoxOption.h | 79 + .../WebCore/accessibility/AccessibilityObject.cpp | 1036 + .../WebCore/accessibility/AccessibilityObject.h | 432 + .../accessibility/AccessibilityRenderObject.cpp | 2539 + .../accessibility/AccessibilityRenderObject.h | 245 + .../WebCore/accessibility/AccessibilityTable.cpp | 489 + .../WebCore/accessibility/AccessibilityTable.h | 93 + .../accessibility/AccessibilityTableCell.cpp | 162 + .../WebCore/accessibility/AccessibilityTableCell.h | 65 + .../accessibility/AccessibilityTableColumn.cpp | 185 + .../accessibility/AccessibilityTableColumn.h | 75 + .../AccessibilityTableHeaderContainer.cpp | 87 + .../AccessibilityTableHeaderContainer.h | 67 + .../accessibility/AccessibilityTableRow.cpp | 118 + .../WebCore/accessibility/AccessibilityTableRow.h | 65 + .../accessibility/qt/AccessibilityObjectQt.cpp | 34 + .../webkit/WebCore/bindings/js/DOMTimer.cpp | 177 - src/3rdparty/webkit/WebCore/bindings/js/DOMTimer.h | 68 - .../webkit/WebCore/bindings/js/GCController.cpp | 2 +- .../webkit/WebCore/bindings/js/JSAttrCustom.cpp | 4 +- .../WebCore/bindings/js/JSAudioConstructor.cpp | 25 +- .../WebCore/bindings/js/JSAudioConstructor.h | 6 +- .../WebCore/bindings/js/JSCDATASectionCustom.cpp | 43 + .../webkit/WebCore/bindings/js/JSCSSRuleCustom.cpp | 2 +- .../bindings/js/JSCSSStyleDeclarationCustom.cpp | 6 +- .../WebCore/bindings/js/JSCSSValueCustom.cpp | 2 +- .../js/JSCanvasRenderingContext2DCustom.cpp | 200 +- .../WebCore/bindings/js/JSClipboardCustom.cpp | 24 +- .../webkit/WebCore/bindings/js/JSConsoleCustom.cpp | 8 +- .../WebCore/bindings/js/JSCoordinatesCustom.cpp | 67 + .../bindings/js/JSCustomPositionCallback.cpp | 14 +- .../bindings/js/JSCustomPositionErrorCallback.cpp | 14 +- .../bindings/js/JSCustomSQLStatementCallback.cpp | 17 +- .../bindings/js/JSCustomSQLStatementCallback.h | 4 + .../js/JSCustomSQLStatementErrorCallback.cpp | 22 +- .../js/JSCustomSQLStatementErrorCallback.h | 4 + .../bindings/js/JSCustomSQLTransactionCallback.cpp | 19 +- .../bindings/js/JSCustomSQLTransactionCallback.h | 4 + .../js/JSCustomSQLTransactionErrorCallback.cpp | 45 +- .../js/JSCustomSQLTransactionErrorCallback.h | 5 +- .../WebCore/bindings/js/JSCustomVoidCallback.cpp | 19 +- .../WebCore/bindings/js/JSCustomVoidCallback.h | 2 +- .../bindings/js/JSCustomXPathNSResolver.cpp | 28 +- .../WebCore/bindings/js/JSCustomXPathNSResolver.h | 2 +- .../bindings/js/JSDOMApplicationCacheCustom.cpp | 64 +- .../webkit/WebCore/bindings/js/JSDOMBinding.cpp | 167 +- .../webkit/WebCore/bindings/js/JSDOMBinding.h | 53 +- .../WebCore/bindings/js/JSDOMGlobalObject.cpp | 82 +- .../webkit/WebCore/bindings/js/JSDOMGlobalObject.h | 35 +- .../WebCore/bindings/js/JSDOMStringListCustom.cpp | 6 +- .../webkit/WebCore/bindings/js/JSDOMWindowBase.cpp | 631 +- .../webkit/WebCore/bindings/js/JSDOMWindowBase.h | 37 +- .../WebCore/bindings/js/JSDOMWindowCustom.cpp | 461 +- .../webkit/WebCore/bindings/js/JSDOMWindowCustom.h | 51 +- .../WebCore/bindings/js/JSDOMWindowShell.cpp | 34 +- .../webkit/WebCore/bindings/js/JSDOMWindowShell.h | 14 +- .../WebCore/bindings/js/JSDatabaseCustom.cpp | 33 +- .../WebCore/bindings/js/JSDocumentCustom.cpp | 24 +- .../webkit/WebCore/bindings/js/JSElementCustom.cpp | 30 +- .../webkit/WebCore/bindings/js/JSEventCustom.cpp | 4 +- .../webkit/WebCore/bindings/js/JSEventListener.cpp | 281 +- .../webkit/WebCore/bindings/js/JSEventListener.h | 98 +- .../webkit/WebCore/bindings/js/JSEventTarget.cpp | 60 +- .../webkit/WebCore/bindings/js/JSEventTarget.h | 3 +- .../webkit/WebCore/bindings/js/JSEventTargetBase.h | 92 - .../bindings/js/JSEventTargetNodeCustom.cpp | 71 - .../WebCore/bindings/js/JSGeolocationCustom.cpp | 49 +- .../WebCore/bindings/js/JSHTMLAllCollection.h | 2 +- .../bindings/js/JSHTMLAppletElementCustom.cpp | 4 +- .../WebCore/bindings/js/JSHTMLCollectionCustom.cpp | 30 +- .../WebCore/bindings/js/JSHTMLDocumentCustom.cpp | 63 +- .../bindings/js/JSHTMLEmbedElementCustom.cpp | 4 +- .../bindings/js/JSHTMLFormElementCustom.cpp | 13 +- .../bindings/js/JSHTMLFrameElementCustom.cpp | 6 +- .../bindings/js/JSHTMLFrameSetElementCustom.cpp | 3 +- .../bindings/js/JSHTMLIFrameElementCustom.cpp | 4 +- .../bindings/js/JSHTMLInputElementCustom.cpp | 82 +- .../bindings/js/JSHTMLObjectElementCustom.cpp | 4 +- .../bindings/js/JSHTMLOptionsCollectionCustom.cpp | 16 +- .../bindings/js/JSHTMLSelectElementCustom.cpp | 12 +- .../bindings/js/JSHTMLSelectElementCustom.h | 2 +- .../webkit/WebCore/bindings/js/JSHistoryCustom.cpp | 8 +- .../WebCore/bindings/js/JSImageConstructor.cpp | 27 +- .../WebCore/bindings/js/JSImageConstructor.h | 6 +- .../WebCore/bindings/js/JSImageDataCustom.cpp | 4 +- .../bindings/js/JSInspectedObjectWrapper.cpp | 18 +- .../WebCore/bindings/js/JSInspectedObjectWrapper.h | 6 +- .../bindings/js/JSInspectorCallbackWrapper.cpp | 14 +- .../bindings/js/JSInspectorCallbackWrapper.h | 6 +- .../bindings/js/JSInspectorControllerCustom.cpp | 298 + .../bindings/js/JSJavaScriptCallFrameCustom.cpp | 18 +- .../WebCore/bindings/js/JSLazyEventListener.cpp | 129 + .../WebCore/bindings/js/JSLazyEventListener.h | 56 + .../WebCore/bindings/js/JSLocationCustom.cpp | 141 +- .../bindings/js/JSMessageChannelConstructor.cpp | 31 +- .../bindings/js/JSMessageChannelConstructor.h | 7 +- .../WebCore/bindings/js/JSMessagePortCustom.cpp | 33 +- .../WebCore/bindings/js/JSMimeTypeArrayCustom.cpp | 2 +- .../WebCore/bindings/js/JSNamedNodeMapCustom.cpp | 2 +- .../WebCore/bindings/js/JSNamedNodesCollection.cpp | 8 +- .../WebCore/bindings/js/JSNamedNodesCollection.h | 10 +- .../WebCore/bindings/js/JSNavigatorCustom.cpp | 86 +- .../webkit/WebCore/bindings/js/JSNodeCustom.cpp | 77 +- .../WebCore/bindings/js/JSNodeFilterCondition.cpp | 16 +- .../WebCore/bindings/js/JSNodeFilterCondition.h | 6 +- .../WebCore/bindings/js/JSNodeFilterCustom.cpp | 8 +- .../WebCore/bindings/js/JSNodeIteratorCustom.cpp | 4 +- .../WebCore/bindings/js/JSNodeListCustom.cpp | 6 +- .../WebCore/bindings/js/JSOptionConstructor.cpp | 42 +- .../WebCore/bindings/js/JSOptionConstructor.h | 6 +- .../WebCore/bindings/js/JSPluginArrayCustom.cpp | 2 +- .../webkit/WebCore/bindings/js/JSPluginCustom.cpp | 2 +- .../bindings/js/JSPluginElementFunctions.cpp | 16 +- .../WebCore/bindings/js/JSPluginElementFunctions.h | 6 +- .../bindings/js/JSQuarantinedObjectWrapper.cpp | 49 +- .../bindings/js/JSQuarantinedObjectWrapper.h | 18 +- .../webkit/WebCore/bindings/js/JSRGBColor.cpp | 16 +- .../webkit/WebCore/bindings/js/JSRGBColor.h | 8 +- .../bindings/js/JSSQLResultSetRowListCustom.cpp | 10 +- .../WebCore/bindings/js/JSSQLTransactionCustom.cpp | 34 +- .../bindings/js/JSSVGElementInstanceCustom.cpp | 40 +- .../WebCore/bindings/js/JSSVGLengthCustom.cpp | 6 +- .../WebCore/bindings/js/JSSVGMatrixCustom.cpp | 84 +- .../WebCore/bindings/js/JSSVGPODTypeWrapper.h | 1 - .../WebCore/bindings/js/JSSVGPathSegCustom.cpp | 2 +- .../WebCore/bindings/js/JSSVGPathSegListCustom.cpp | 42 +- .../WebCore/bindings/js/JSSVGPointListCustom.cpp | 36 +- .../bindings/js/JSSVGTransformListCustom.cpp | 36 +- .../webkit/WebCore/bindings/js/JSStorageCustom.cpp | 14 +- .../WebCore/bindings/js/JSStyleSheetCustom.cpp | 3 +- .../WebCore/bindings/js/JSStyleSheetListCustom.cpp | 2 +- .../webkit/WebCore/bindings/js/JSTextCustom.cpp | 2 +- .../WebCore/bindings/js/JSTreeWalkerCustom.cpp | 14 +- .../bindings/js/JSWebKitCSSMatrixConstructor.cpp | 63 + .../bindings/js/JSWebKitCSSMatrixConstructor.h | 46 + .../bindings/js/JSWebKitPointConstructor.cpp | 68 + .../WebCore/bindings/js/JSWebKitPointConstructor.h | 46 + .../WebCore/bindings/js/JSWorkerConstructor.cpp | 3 +- .../WebCore/bindings/js/JSWorkerContextBase.cpp | 40 +- .../WebCore/bindings/js/JSWorkerContextBase.h | 6 +- .../WebCore/bindings/js/JSWorkerContextCustom.cpp | 97 +- .../webkit/WebCore/bindings/js/JSWorkerCustom.cpp | 27 +- .../bindings/js/JSXMLHttpRequestConstructor.cpp | 23 +- .../bindings/js/JSXMLHttpRequestConstructor.h | 7 +- .../WebCore/bindings/js/JSXMLHttpRequestCustom.cpp | 87 +- .../bindings/js/JSXMLHttpRequestUploadCustom.cpp | 39 +- .../bindings/js/JSXSLTProcessorConstructor.cpp | 4 +- .../WebCore/bindings/js/JSXSLTProcessorCustom.cpp | 46 +- .../webkit/WebCore/bindings/js/ScheduledAction.cpp | 126 +- .../webkit/WebCore/bindings/js/ScheduledAction.h | 29 +- .../WebCore/bindings/js/ScriptCachedFrameData.cpp | 95 + .../WebCore/bindings/js/ScriptCachedFrameData.h | 57 + .../WebCore/bindings/js/ScriptCachedPageData.cpp | 93 - .../WebCore/bindings/js/ScriptCachedPageData.h | 56 - .../webkit/WebCore/bindings/js/ScriptCallFrame.cpp | 4 +- .../webkit/WebCore/bindings/js/ScriptCallFrame.h | 2 +- .../webkit/WebCore/bindings/js/ScriptCallStack.cpp | 12 +- .../WebCore/bindings/js/ScriptController.cpp | 133 +- .../webkit/WebCore/bindings/js/ScriptController.h | 21 +- .../WebCore/bindings/js/ScriptControllerMac.mm | 14 +- .../WebCore/bindings/js/ScriptEventListener.cpp | 90 + .../WebCore/bindings/js/ScriptEventListener.h | 49 + .../WebCore/bindings/js/ScriptFunctionCall.cpp | 176 + .../WebCore/bindings/js/ScriptFunctionCall.h | 77 + .../webkit/WebCore/bindings/js/ScriptObject.cpp | 154 + .../webkit/WebCore/bindings/js/ScriptObject.h | 72 + .../WebCore/bindings/js/ScriptObjectQuarantine.cpp | 122 + .../WebCore/bindings/js/ScriptObjectQuarantine.h | 59 + .../webkit/WebCore/bindings/js/ScriptState.cpp | 60 + .../webkit/WebCore/bindings/js/ScriptState.h | 9 +- .../webkit/WebCore/bindings/js/ScriptString.h | 5 - .../webkit/WebCore/bindings/js/ScriptValue.cpp | 18 +- .../webkit/WebCore/bindings/js/ScriptValue.h | 12 +- .../WebCore/bindings/js/WorkerScriptController.cpp | 44 +- .../WebCore/bindings/js/WorkerScriptController.h | 4 +- .../WebCore/bindings/scripts/CodeGenerator.pm | 8 +- .../WebCore/bindings/scripts/CodeGeneratorCOM.pm | 13 +- .../WebCore/bindings/scripts/CodeGeneratorJS.pm | 331 +- .../WebCore/bindings/scripts/CodeGeneratorObjC.pm | 464 +- .../WebCore/bindings/scripts/InFilesParser.pm | 14 +- .../webkit/WebCore/bridge/IdentifierRep.cpp | 111 + src/3rdparty/webkit/WebCore/bridge/IdentifierRep.h | 74 + src/3rdparty/webkit/WebCore/bridge/NP_jsobject.cpp | 109 +- src/3rdparty/webkit/WebCore/bridge/c/c_class.cpp | 5 - src/3rdparty/webkit/WebCore/bridge/c/c_class.h | 1 - .../webkit/WebCore/bridge/c/c_instance.cpp | 84 +- src/3rdparty/webkit/WebCore/bridge/c/c_instance.h | 34 +- src/3rdparty/webkit/WebCore/bridge/c/c_runtime.cpp | 22 +- src/3rdparty/webkit/WebCore/bridge/c/c_runtime.h | 9 +- src/3rdparty/webkit/WebCore/bridge/c/c_utility.cpp | 24 +- src/3rdparty/webkit/WebCore/bridge/c/c_utility.h | 22 +- .../webkit/WebCore/bridge/jni/jni_class.cpp | 12 +- src/3rdparty/webkit/WebCore/bridge/jni/jni_class.h | 4 - .../webkit/WebCore/bridge/jni/jni_instance.cpp | 26 +- .../webkit/WebCore/bridge/jni/jni_instance.h | 14 +- .../webkit/WebCore/bridge/jni/jni_jsobject.h | 7 +- .../webkit/WebCore/bridge/jni/jni_jsobject.mm | 44 +- src/3rdparty/webkit/WebCore/bridge/jni/jni_objc.mm | 2 +- .../webkit/WebCore/bridge/jni/jni_runtime.cpp | 30 +- .../webkit/WebCore/bridge/jni/jni_runtime.h | 16 +- .../webkit/WebCore/bridge/jni/jni_utility.cpp | 60 +- .../webkit/WebCore/bridge/jni/jni_utility.h | 4 +- src/3rdparty/webkit/WebCore/bridge/npapi.h | 49 +- src/3rdparty/webkit/WebCore/bridge/npruntime.cpp | 96 +- src/3rdparty/webkit/WebCore/bridge/qt/qt_class.cpp | 2 +- src/3rdparty/webkit/WebCore/bridge/qt/qt_class.h | 2 +- .../webkit/WebCore/bridge/qt/qt_instance.cpp | 104 +- .../webkit/WebCore/bridge/qt/qt_instance.h | 23 +- .../webkit/WebCore/bridge/qt/qt_runtime.cpp | 139 +- src/3rdparty/webkit/WebCore/bridge/qt/qt_runtime.h | 29 +- src/3rdparty/webkit/WebCore/bridge/runtime.cpp | 34 +- src/3rdparty/webkit/WebCore/bridge/runtime.h | 50 +- .../webkit/WebCore/bridge/runtime_array.cpp | 8 +- src/3rdparty/webkit/WebCore/bridge/runtime_array.h | 14 +- .../webkit/WebCore/bridge/runtime_method.cpp | 12 +- .../webkit/WebCore/bridge/runtime_method.h | 8 +- .../webkit/WebCore/bridge/runtime_object.cpp | 51 +- .../webkit/WebCore/bridge/runtime_object.h | 21 +- src/3rdparty/webkit/WebCore/bridge/testbindings.mm | 2 +- src/3rdparty/webkit/WebCore/config.h | 24 + src/3rdparty/webkit/WebCore/css/CSSCanvasValue.cpp | 7 + src/3rdparty/webkit/WebCore/css/CSSCanvasValue.h | 5 +- src/3rdparty/webkit/WebCore/css/CSSCharsetRule.idl | 2 +- .../WebCore/css/CSSComputedStyleDeclaration.cpp | 346 +- .../WebCore/css/CSSComputedStyleDeclaration.h | 1 + .../webkit/WebCore/css/CSSCursorImageValue.cpp | 5 +- .../webkit/WebCore/css/CSSFontFaceSource.cpp | 8 +- .../webkit/WebCore/css/CSSFontSelector.cpp | 30 +- src/3rdparty/webkit/WebCore/css/CSSGrammar.y | 27 +- .../WebCore/css/CSSMutableStyleDeclaration.cpp | 241 +- .../WebCore/css/CSSMutableStyleDeclaration.h | 4 +- src/3rdparty/webkit/WebCore/css/CSSParser.cpp | 253 +- src/3rdparty/webkit/WebCore/css/CSSParser.h | 12 +- .../webkit/WebCore/css/CSSParserValues.cpp | 2 +- src/3rdparty/webkit/WebCore/css/CSSParserValues.h | 2 +- .../webkit/WebCore/css/CSSPrimitiveValue.cpp | 21 +- .../webkit/WebCore/css/CSSPrimitiveValue.h | 2 + .../webkit/WebCore/css/CSSPrimitiveValue.idl | 2 +- .../webkit/WebCore/css/CSSPrimitiveValueMappings.h | 25 +- .../webkit/WebCore/css/CSSPropertyLonghand.cpp | 213 + .../webkit/WebCore/css/CSSPropertyLonghand.h | 53 + .../webkit/WebCore/css/CSSPropertyNames.in | 15 +- src/3rdparty/webkit/WebCore/css/CSSRule.idl | 4 +- src/3rdparty/webkit/WebCore/css/CSSSelector.cpp | 20 +- src/3rdparty/webkit/WebCore/css/CSSSelector.h | 4 +- .../webkit/WebCore/css/CSSSelectorList.cpp | 31 +- .../webkit/WebCore/css/CSSStyleDeclaration.cpp | 2 +- .../webkit/WebCore/css/CSSStyleDeclaration.h | 1 + .../webkit/WebCore/css/CSSStyleSelector.cpp | 832 +- src/3rdparty/webkit/WebCore/css/CSSStyleSelector.h | 19 +- src/3rdparty/webkit/WebCore/css/CSSStyleSheet.cpp | 6 +- src/3rdparty/webkit/WebCore/css/CSSValue.idl | 4 +- .../webkit/WebCore/css/CSSValueKeywords.in | 15 +- .../webkit/WebCore/css/CSSVariablesDeclaration.cpp | 6 +- .../webkit/WebCore/css/CSSVariablesDeclaration.h | 2 +- .../webkit/WebCore/css/MediaFeatureNames.h | 4 + .../webkit/WebCore/css/MediaQueryEvaluator.cpp | 65 +- src/3rdparty/webkit/WebCore/css/MediaQueryExp.h | 6 +- src/3rdparty/webkit/WebCore/css/RGBColor.idl | 4 +- .../WebCore/css/SVGCSSComputedStyleDeclaration.cpp | 1 + src/3rdparty/webkit/WebCore/css/SVGCSSParser.cpp | 8 - .../webkit/WebCore/css/SVGCSSStyleSelector.cpp | 121 +- src/3rdparty/webkit/WebCore/css/StyleSheet.idl | 4 +- .../webkit/WebCore/css/WebKitCSSMatrix.cpp | 186 + src/3rdparty/webkit/WebCore/css/WebKitCSSMatrix.h | 159 + .../webkit/WebCore/css/WebKitCSSMatrix.idl | 86 + .../webkit/WebCore/css/WebKitCSSTransformValue.cpp | 30 + .../webkit/WebCore/css/WebKitCSSTransformValue.h | 12 +- .../webkit/WebCore/css/WebKitCSSTransformValue.idl | 10 + src/3rdparty/webkit/WebCore/css/html4.css | 7 +- src/3rdparty/webkit/WebCore/css/maketokenizer | 7 + src/3rdparty/webkit/WebCore/css/mediaControls.css | 23 +- .../webkit/WebCore/css/mediaControlsChromium.css | 165 + .../webkit/WebCore/css/mediaControlsQT.css | 133 + src/3rdparty/webkit/WebCore/css/themeWin.css | 38 +- src/3rdparty/webkit/WebCore/css/themeWinQuirks.css | 2 +- src/3rdparty/webkit/WebCore/dom/Attr.h | 2 +- src/3rdparty/webkit/WebCore/dom/Attr.idl | 4 +- src/3rdparty/webkit/WebCore/dom/Attribute.h | 4 +- src/3rdparty/webkit/WebCore/dom/CharacterData.cpp | 23 +- src/3rdparty/webkit/WebCore/dom/CharacterData.h | 8 +- src/3rdparty/webkit/WebCore/dom/CharacterData.idl | 2 +- .../webkit/WebCore/dom/CheckedRadioButtons.cpp | 86 + .../webkit/WebCore/dom/CheckedRadioButtons.h | 47 + src/3rdparty/webkit/WebCore/dom/ClassNames.h | 2 +- src/3rdparty/webkit/WebCore/dom/ClientRect.cpp | 41 + src/3rdparty/webkit/WebCore/dom/ClientRect.h | 59 + src/3rdparty/webkit/WebCore/dom/ClientRect.idl | 40 + src/3rdparty/webkit/WebCore/dom/ClientRectList.cpp | 66 + src/3rdparty/webkit/WebCore/dom/ClientRectList.h | 57 + src/3rdparty/webkit/WebCore/dom/ClientRectList.idl | 38 + src/3rdparty/webkit/WebCore/dom/Clipboard.cpp | 1 + src/3rdparty/webkit/WebCore/dom/ContainerNode.cpp | 217 +- src/3rdparty/webkit/WebCore/dom/ContainerNode.h | 17 +- .../webkit/WebCore/dom/DOMCoreException.idl | 9 +- .../webkit/WebCore/dom/DOMImplementation.cpp | 34 +- .../webkit/WebCore/dom/DOMImplementation.idl | 2 +- src/3rdparty/webkit/WebCore/dom/Document.cpp | 946 +- src/3rdparty/webkit/WebCore/dom/Document.h | 209 +- src/3rdparty/webkit/WebCore/dom/Document.idl | 45 +- .../webkit/WebCore/dom/DocumentFragment.idl | 7 +- src/3rdparty/webkit/WebCore/dom/DocumentMarker.h | 6 +- src/3rdparty/webkit/WebCore/dom/Element.cpp | 281 +- src/3rdparty/webkit/WebCore/dom/Element.h | 56 +- src/3rdparty/webkit/WebCore/dom/Element.idl | 20 +- src/3rdparty/webkit/WebCore/dom/ElementRareData.h | 13 +- src/3rdparty/webkit/WebCore/dom/Event.cpp | 6 +- src/3rdparty/webkit/WebCore/dom/Event.h | 2 +- src/3rdparty/webkit/WebCore/dom/Event.idl | 10 +- src/3rdparty/webkit/WebCore/dom/EventException.idl | 5 +- src/3rdparty/webkit/WebCore/dom/EventListener.h | 21 +- src/3rdparty/webkit/WebCore/dom/EventListener.idl | 1 + src/3rdparty/webkit/WebCore/dom/EventNames.h | 9 +- src/3rdparty/webkit/WebCore/dom/EventTarget.cpp | 7 +- src/3rdparty/webkit/WebCore/dom/EventTarget.h | 8 +- src/3rdparty/webkit/WebCore/dom/EventTarget.idl | 6 +- .../webkit/WebCore/dom/EventTargetNode.cpp | 1166 - src/3rdparty/webkit/WebCore/dom/EventTargetNode.h | 206 - .../webkit/WebCore/dom/EventTargetNode.idl | 84 - src/3rdparty/webkit/WebCore/dom/ExceptionCode.cpp | 9 +- src/3rdparty/webkit/WebCore/dom/ExceptionCode.h | 8 +- .../webkit/WebCore/dom/FormControlElement.h | 39 - src/3rdparty/webkit/WebCore/dom/InputElement.cpp | 304 + src/3rdparty/webkit/WebCore/dom/InputElement.h | 123 + src/3rdparty/webkit/WebCore/dom/KeyboardEvent.idl | 6 +- src/3rdparty/webkit/WebCore/dom/MessagePort.cpp | 56 +- src/3rdparty/webkit/WebCore/dom/MessagePort.h | 21 +- src/3rdparty/webkit/WebCore/dom/MessagePort.idl | 2 +- src/3rdparty/webkit/WebCore/dom/MessagePortProxy.h | 54 + src/3rdparty/webkit/WebCore/dom/MouseEvent.cpp | 8 +- src/3rdparty/webkit/WebCore/dom/MouseEvent.h | 11 +- src/3rdparty/webkit/WebCore/dom/MouseEvent.idl | 2 +- .../webkit/WebCore/dom/MouseRelatedEvent.cpp | 23 +- .../webkit/WebCore/dom/MouseRelatedEvent.h | 11 + src/3rdparty/webkit/WebCore/dom/NamedAttrMap.cpp | 64 +- src/3rdparty/webkit/WebCore/dom/NamedAttrMap.h | 74 +- .../webkit/WebCore/dom/NamedMappedAttrMap.cpp | 7 +- .../webkit/WebCore/dom/NamedMappedAttrMap.h | 24 +- src/3rdparty/webkit/WebCore/dom/NamedNodeMap.h | 65 +- src/3rdparty/webkit/WebCore/dom/Node.cpp | 1349 +- src/3rdparty/webkit/WebCore/dom/Node.h | 206 +- src/3rdparty/webkit/WebCore/dom/Node.idl | 73 +- src/3rdparty/webkit/WebCore/dom/NodeFilter.h | 1 - src/3rdparty/webkit/WebCore/dom/NodeIterator.h | 1 - src/3rdparty/webkit/WebCore/dom/NodeRareData.h | 12 +- src/3rdparty/webkit/WebCore/dom/OptionElement.cpp | 150 + src/3rdparty/webkit/WebCore/dom/OptionElement.h | 78 + .../webkit/WebCore/dom/OptionGroupElement.cpp | 58 + .../webkit/WebCore/dom/OptionGroupElement.h | 41 + src/3rdparty/webkit/WebCore/dom/Position.cpp | 338 +- src/3rdparty/webkit/WebCore/dom/Position.h | 121 +- .../webkit/WebCore/dom/PositionIterator.cpp | 110 +- src/3rdparty/webkit/WebCore/dom/PositionIterator.h | 22 +- .../webkit/WebCore/dom/ProcessingInstruction.idl | 2 +- src/3rdparty/webkit/WebCore/dom/QualifiedName.cpp | 37 +- src/3rdparty/webkit/WebCore/dom/QualifiedName.h | 34 +- src/3rdparty/webkit/WebCore/dom/Range.cpp | 110 +- src/3rdparty/webkit/WebCore/dom/Range.h | 8 +- src/3rdparty/webkit/WebCore/dom/Range.idl | 2 +- .../webkit/WebCore/dom/RangeBoundaryPoint.h | 116 +- src/3rdparty/webkit/WebCore/dom/RangeException.idl | 2 +- .../webkit/WebCore/dom/RegisteredEventListener.h | 22 +- src/3rdparty/webkit/WebCore/dom/ScriptElement.cpp | 56 +- src/3rdparty/webkit/WebCore/dom/ScriptElement.h | 8 + .../webkit/WebCore/dom/ScriptExecutionContext.cpp | 16 + .../webkit/WebCore/dom/ScriptExecutionContext.h | 21 +- src/3rdparty/webkit/WebCore/dom/SelectElement.cpp | 928 + src/3rdparty/webkit/WebCore/dom/SelectElement.h | 176 + src/3rdparty/webkit/WebCore/dom/StyleElement.cpp | 27 +- src/3rdparty/webkit/WebCore/dom/StyledElement.cpp | 29 +- src/3rdparty/webkit/WebCore/dom/StyledElement.h | 5 + src/3rdparty/webkit/WebCore/dom/Text.cpp | 41 +- src/3rdparty/webkit/WebCore/dom/Text.h | 1 - src/3rdparty/webkit/WebCore/dom/Tokenizer.h | 2 +- src/3rdparty/webkit/WebCore/dom/TreeWalker.h | 1 - src/3rdparty/webkit/WebCore/dom/WheelEvent.cpp | 11 +- src/3rdparty/webkit/WebCore/dom/WheelEvent.h | 6 +- src/3rdparty/webkit/WebCore/dom/WheelEvent.idl | 4 +- src/3rdparty/webkit/WebCore/dom/Worker.cpp | 202 - src/3rdparty/webkit/WebCore/dom/Worker.h | 113 - src/3rdparty/webkit/WebCore/dom/Worker.idl | 48 - src/3rdparty/webkit/WebCore/dom/WorkerContext.cpp | 195 - src/3rdparty/webkit/WebCore/dom/WorkerContext.h | 122 - src/3rdparty/webkit/WebCore/dom/WorkerContext.idl | 61 - src/3rdparty/webkit/WebCore/dom/WorkerLocation.cpp | 85 - src/3rdparty/webkit/WebCore/dom/WorkerLocation.h | 73 - src/3rdparty/webkit/WebCore/dom/WorkerLocation.idl | 48 - .../webkit/WebCore/dom/WorkerMessagingProxy.cpp | 311 - .../webkit/WebCore/dom/WorkerMessagingProxy.h | 93 - src/3rdparty/webkit/WebCore/dom/WorkerTask.cpp | 41 - src/3rdparty/webkit/WebCore/dom/WorkerTask.h | 48 - src/3rdparty/webkit/WebCore/dom/WorkerThread.cpp | 154 - src/3rdparty/webkit/WebCore/dom/WorkerThread.h | 79 - src/3rdparty/webkit/WebCore/dom/XMLTokenizer.cpp | 80 +- src/3rdparty/webkit/WebCore/dom/XMLTokenizer.h | 15 +- .../webkit/WebCore/dom/XMLTokenizerLibxml2.cpp | 237 +- src/3rdparty/webkit/WebCore/dom/XMLTokenizerQt.cpp | 124 +- .../webkit/WebCore/dom/XMLTokenizerScope.cpp | 68 + .../webkit/WebCore/dom/XMLTokenizerScope.h | 62 + src/3rdparty/webkit/WebCore/dom/make_names.pl | 251 +- .../webkit/WebCore/editing/ApplyStyleCommand.cpp | 385 +- .../webkit/WebCore/editing/ApplyStyleCommand.h | 11 +- .../WebCore/editing/BreakBlockquoteCommand.cpp | 61 +- .../WebCore/editing/CompositeEditCommand.cpp | 158 +- .../webkit/WebCore/editing/CompositeEditCommand.h | 6 +- .../webkit/WebCore/editing/CreateLinkCommand.cpp | 2 +- .../WebCore/editing/DeleteButtonController.cpp | 112 +- .../WebCore/editing/DeleteButtonController.h | 4 +- .../WebCore/editing/DeleteSelectionCommand.cpp | 107 +- .../WebCore/editing/DeleteSelectionCommand.h | 8 +- .../webkit/WebCore/editing/EditCommand.cpp | 12 +- src/3rdparty/webkit/WebCore/editing/EditCommand.h | 14 +- src/3rdparty/webkit/WebCore/editing/Editor.cpp | 855 +- src/3rdparty/webkit/WebCore/editing/Editor.h | 38 +- .../webkit/WebCore/editing/EditorCommand.cpp | 103 +- .../webkit/WebCore/editing/FormatBlockCommand.cpp | 6 +- .../WebCore/editing/IndentOutdentCommand.cpp | 40 +- .../WebCore/editing/InsertLineBreakCommand.cpp | 41 +- .../webkit/WebCore/editing/InsertListCommand.cpp | 30 +- .../webkit/WebCore/editing/InsertListCommand.h | 7 +- .../editing/InsertParagraphSeparatorCommand.cpp | 128 +- .../webkit/WebCore/editing/InsertTextCommand.cpp | 45 +- .../WebCore/editing/ModifySelectionListLevel.cpp | 24 +- .../WebCore/editing/MoveSelectionCommand.cpp | 14 +- .../WebCore/editing/RemoveCSSPropertyCommand.h | 1 + .../webkit/WebCore/editing/RemoveFormatCommand.cpp | 5 +- .../WebCore/editing/RemoveNodeAttributeCommand.cpp | 1 - .../WebCore/editing/RemoveNodeAttributeCommand.h | 1 - .../RemoveNodePreservingChildrenCommand.cpp | 3 +- .../WebCore/editing/ReplaceNodeWithSpanCommand.cpp | 87 + .../WebCore/editing/ReplaceNodeWithSpanCommand.h | 62 + .../WebCore/editing/ReplaceSelectionCommand.cpp | 196 +- .../WebCore/editing/ReplaceSelectionCommand.h | 11 +- src/3rdparty/webkit/WebCore/editing/Selection.cpp | 605 - src/3rdparty/webkit/WebCore/editing/Selection.h | 136 - .../webkit/WebCore/editing/SelectionController.cpp | 230 +- .../webkit/WebCore/editing/SelectionController.h | 28 +- .../webkit/WebCore/editing/SmartReplaceCF.cpp | 1 + .../webkit/WebCore/editing/SplitElementCommand.cpp | 2 +- src/3rdparty/webkit/WebCore/editing/TextAffinity.h | 14 +- .../webkit/WebCore/editing/TextIterator.cpp | 136 +- src/3rdparty/webkit/WebCore/editing/TextIterator.h | 21 +- .../webkit/WebCore/editing/TypingCommand.cpp | 178 +- .../webkit/WebCore/editing/TypingCommand.h | 4 +- .../webkit/WebCore/editing/VisiblePosition.cpp | 82 +- .../webkit/WebCore/editing/VisiblePosition.h | 8 +- .../webkit/WebCore/editing/VisibleSelection.cpp | 657 + .../webkit/WebCore/editing/VisibleSelection.h | 149 + .../WebCore/editing/android/EditorAndroid.cpp | 39 + .../WebCore/editing/chromium/EditorChromium.cpp | 44 + .../WebCore/editing/gtk/SelectionControllerGtk.cpp | 45 + .../webkit/WebCore/editing/htmlediting.cpp | 163 +- src/3rdparty/webkit/WebCore/editing/htmlediting.h | 13 +- src/3rdparty/webkit/WebCore/editing/markup.cpp | 190 +- .../webkit/WebCore/editing/qt/EditorQt.cpp | 2 +- .../webkit/WebCore/editing/visible_units.cpp | 469 +- .../webkit/WebCore/editing/visible_units.h | 3 + .../webkit/WebCore/generated/ArrayPrototype.lut.h | 9 +- .../webkit/WebCore/generated/CSSGrammar.cpp | 2361 +- src/3rdparty/webkit/WebCore/generated/CSSGrammar.h | 231 +- .../webkit/WebCore/generated/CSSPropertyNames.cpp | 1255 +- .../webkit/WebCore/generated/CSSPropertyNames.h | 359 +- .../webkit/WebCore/generated/CSSValueKeywords.c | 2834 +- .../webkit/WebCore/generated/CSSValueKeywords.h | 412 +- .../webkit/WebCore/generated/DatePrototype.lut.h | 7 +- src/3rdparty/webkit/WebCore/generated/Grammar.cpp | 1701 +- src/3rdparty/webkit/WebCore/generated/Grammar.h | 109 +- .../WebCore/generated/HTMLElementFactory.cpp | 546 + .../webkit/WebCore/generated/HTMLElementFactory.h | 56 + .../webkit/WebCore/generated/HTMLNames.cpp | 18 +- src/3rdparty/webkit/WebCore/generated/HTMLNames.h | 13 +- src/3rdparty/webkit/WebCore/generated/JSAttr.cpp | 45 +- src/3rdparty/webkit/WebCore/generated/JSAttr.h | 35 +- .../webkit/WebCore/generated/JSBarInfo.cpp | 20 +- src/3rdparty/webkit/WebCore/generated/JSBarInfo.h | 13 +- .../webkit/WebCore/generated/JSCDATASection.cpp | 18 +- .../webkit/WebCore/generated/JSCDATASection.h | 12 +- .../webkit/WebCore/generated/JSCSSCharsetRule.cpp | 25 +- .../webkit/WebCore/generated/JSCSSCharsetRule.h | 17 +- .../webkit/WebCore/generated/JSCSSFontFaceRule.cpp | 21 +- .../webkit/WebCore/generated/JSCSSFontFaceRule.h | 13 +- .../webkit/WebCore/generated/JSCSSImportRule.cpp | 27 +- .../webkit/WebCore/generated/JSCSSImportRule.h | 17 +- .../webkit/WebCore/generated/JSCSSMediaRule.cpp | 42 +- .../webkit/WebCore/generated/JSCSSMediaRule.h | 21 +- .../webkit/WebCore/generated/JSCSSPageRule.cpp | 28 +- .../webkit/WebCore/generated/JSCSSPageRule.h | 19 +- .../WebCore/generated/JSCSSPrimitiveValue.cpp | 128 +- .../webkit/WebCore/generated/JSCSSPrimitiveValue.h | 81 +- .../webkit/WebCore/generated/JSCSSRule.cpp | 59 +- src/3rdparty/webkit/WebCore/generated/JSCSSRule.h | 49 +- .../webkit/WebCore/generated/JSCSSRuleList.cpp | 39 +- .../webkit/WebCore/generated/JSCSSRuleList.h | 23 +- .../WebCore/generated/JSCSSStyleDeclaration.cpp | 114 +- .../WebCore/generated/JSCSSStyleDeclaration.h | 49 +- .../webkit/WebCore/generated/JSCSSStyleRule.cpp | 28 +- .../webkit/WebCore/generated/JSCSSStyleRule.h | 19 +- .../webkit/WebCore/generated/JSCSSStyleSheet.cpp | 67 +- .../webkit/WebCore/generated/JSCSSStyleSheet.h | 27 +- .../webkit/WebCore/generated/JSCSSValue.cpp | 41 +- src/3rdparty/webkit/WebCore/generated/JSCSSValue.h | 33 +- .../webkit/WebCore/generated/JSCSSValueList.cpp | 32 +- .../webkit/WebCore/generated/JSCSSValueList.h | 19 +- .../generated/JSCSSVariablesDeclaration.cpp | 78 +- .../WebCore/generated/JSCSSVariablesDeclaration.h | 37 +- .../WebCore/generated/JSCSSVariablesRule.cpp | 24 +- .../webkit/WebCore/generated/JSCSSVariablesRule.h | 15 +- .../webkit/WebCore/generated/JSCanvasGradient.cpp | 26 +- .../webkit/WebCore/generated/JSCanvasGradient.h | 13 +- .../webkit/WebCore/generated/JSCanvasPattern.cpp | 17 +- .../webkit/WebCore/generated/JSCanvasPattern.h | 9 +- .../generated/JSCanvasRenderingContext2D.cpp | 511 +- .../WebCore/generated/JSCanvasRenderingContext2D.h | 197 +- .../webkit/WebCore/generated/JSCharacterData.cpp | 79 +- .../webkit/WebCore/generated/JSCharacterData.h | 37 +- .../webkit/WebCore/generated/JSClientRect.cpp | 200 + .../webkit/WebCore/generated/JSClientRect.h | 78 + .../webkit/WebCore/generated/JSClientRectList.cpp | 222 + .../webkit/WebCore/generated/JSClientRectList.h | 84 + .../webkit/WebCore/generated/JSClipboard.cpp | 63 +- .../webkit/WebCore/generated/JSClipboard.h | 47 +- .../webkit/WebCore/generated/JSComment.cpp | 18 +- src/3rdparty/webkit/WebCore/generated/JSComment.h | 11 +- .../webkit/WebCore/generated/JSConsole.cpp | 109 +- src/3rdparty/webkit/WebCore/generated/JSConsole.h | 49 +- .../webkit/WebCore/generated/JSCoordinates.cpp | 174 + .../webkit/WebCore/generated/JSCoordinates.h | 91 + .../webkit/WebCore/generated/JSCounter.cpp | 34 +- src/3rdparty/webkit/WebCore/generated/JSCounter.h | 21 +- .../WebCore/generated/JSDOMApplicationCache.cpp | 219 +- .../WebCore/generated/JSDOMApplicationCache.h | 79 +- .../WebCore/generated/JSDOMCoreException.cpp | 116 +- .../webkit/WebCore/generated/JSDOMCoreException.h | 64 +- .../WebCore/generated/JSDOMImplementation.cpp | 82 +- .../webkit/WebCore/generated/JSDOMImplementation.h | 27 +- .../webkit/WebCore/generated/JSDOMParser.cpp | 36 +- .../webkit/WebCore/generated/JSDOMParser.h | 19 +- .../webkit/WebCore/generated/JSDOMSelection.cpp | 231 +- .../webkit/WebCore/generated/JSDOMSelection.h | 65 +- .../webkit/WebCore/generated/JSDOMStringList.cpp | 42 +- .../webkit/WebCore/generated/JSDOMStringList.h | 27 +- .../webkit/WebCore/generated/JSDOMWindow.cpp | 3019 +- .../webkit/WebCore/generated/JSDOMWindow.h | 1081 +- .../webkit/WebCore/generated/JSDOMWindowBase.lut.h | 31 - .../webkit/WebCore/generated/JSDatabase.cpp | 35 +- src/3rdparty/webkit/WebCore/generated/JSDatabase.h | 28 +- .../webkit/WebCore/generated/JSDocument.cpp | 504 +- src/3rdparty/webkit/WebCore/generated/JSDocument.h | 179 +- .../WebCore/generated/JSDocumentFragment.cpp | 40 +- .../webkit/WebCore/generated/JSDocumentFragment.h | 23 +- .../webkit/WebCore/generated/JSDocumentType.cpp | 41 +- .../webkit/WebCore/generated/JSDocumentType.h | 25 +- .../webkit/WebCore/generated/JSElement.cpp | 331 +- src/3rdparty/webkit/WebCore/generated/JSElement.h | 129 +- src/3rdparty/webkit/WebCore/generated/JSEntity.cpp | 27 +- src/3rdparty/webkit/WebCore/generated/JSEntity.h | 17 +- .../webkit/WebCore/generated/JSEntityReference.cpp | 18 +- .../webkit/WebCore/generated/JSEntityReference.h | 11 +- src/3rdparty/webkit/WebCore/generated/JSEvent.cpp | 124 +- src/3rdparty/webkit/WebCore/generated/JSEvent.h | 91 +- .../webkit/WebCore/generated/JSEventException.cpp | 59 +- .../webkit/WebCore/generated/JSEventException.h | 27 +- .../webkit/WebCore/generated/JSEventTargetNode.cpp | 944 - .../webkit/WebCore/generated/JSEventTargetNode.h | 162 - src/3rdparty/webkit/WebCore/generated/JSFile.cpp | 31 +- src/3rdparty/webkit/WebCore/generated/JSFile.h | 19 +- .../webkit/WebCore/generated/JSFileList.cpp | 39 +- src/3rdparty/webkit/WebCore/generated/JSFileList.h | 23 +- .../webkit/WebCore/generated/JSGeolocation.cpp | 37 +- .../webkit/WebCore/generated/JSGeolocation.h | 25 +- .../webkit/WebCore/generated/JSGeoposition.cpp | 84 +- .../webkit/WebCore/generated/JSGeoposition.h | 25 +- .../WebCore/generated/JSHTMLAnchorElement.cpp | 106 +- .../webkit/WebCore/generated/JSHTMLAnchorElement.h | 77 +- .../WebCore/generated/JSHTMLAppletElement.cpp | 75 +- .../webkit/WebCore/generated/JSHTMLAppletElement.h | 61 +- .../webkit/WebCore/generated/JSHTMLAreaElement.cpp | 78 +- .../webkit/WebCore/generated/JSHTMLAreaElement.h | 55 +- .../WebCore/generated/JSHTMLAudioElement.cpp | 18 +- .../webkit/WebCore/generated/JSHTMLAudioElement.h | 11 +- .../webkit/WebCore/generated/JSHTMLBRElement.cpp | 25 +- .../webkit/WebCore/generated/JSHTMLBRElement.h | 17 +- .../webkit/WebCore/generated/JSHTMLBaseElement.cpp | 30 +- .../webkit/WebCore/generated/JSHTMLBaseElement.h | 21 +- .../WebCore/generated/JSHTMLBaseFontElement.cpp | 37 +- .../WebCore/generated/JSHTMLBaseFontElement.h | 25 +- .../WebCore/generated/JSHTMLBlockquoteElement.cpp | 25 +- .../WebCore/generated/JSHTMLBlockquoteElement.h | 17 +- .../webkit/WebCore/generated/JSHTMLBodyElement.cpp | 96 +- .../webkit/WebCore/generated/JSHTMLBodyElement.h | 43 +- .../WebCore/generated/JSHTMLButtonElement.cpp | 63 +- .../webkit/WebCore/generated/JSHTMLButtonElement.h | 43 +- .../WebCore/generated/JSHTMLCanvasElement.cpp | 52 +- .../webkit/WebCore/generated/JSHTMLCanvasElement.h | 27 +- .../webkit/WebCore/generated/JSHTMLCollection.cpp | 51 +- .../webkit/WebCore/generated/JSHTMLCollection.h | 33 +- .../WebCore/generated/JSHTMLDListElement.cpp | 27 +- .../webkit/WebCore/generated/JSHTMLDListElement.h | 17 +- .../WebCore/generated/JSHTMLDirectoryElement.cpp | 27 +- .../WebCore/generated/JSHTMLDirectoryElement.h | 17 +- .../webkit/WebCore/generated/JSHTMLDivElement.cpp | 25 +- .../webkit/WebCore/generated/JSHTMLDivElement.h | 17 +- .../webkit/WebCore/generated/JSHTMLDocument.cpp | 122 +- .../webkit/WebCore/generated/JSHTMLDocument.h | 89 +- .../webkit/WebCore/generated/JSHTMLElement.cpp | 146 +- .../webkit/WebCore/generated/JSHTMLElement.h | 73 +- .../WebCore/generated/JSHTMLEmbedElement.cpp | 57 +- .../webkit/WebCore/generated/JSHTMLEmbedElement.h | 45 +- .../WebCore/generated/JSHTMLFieldSetElement.cpp | 24 +- .../WebCore/generated/JSHTMLFieldSetElement.h | 15 +- .../webkit/WebCore/generated/JSHTMLFontElement.cpp | 35 +- .../webkit/WebCore/generated/JSHTMLFontElement.h | 25 +- .../webkit/WebCore/generated/JSHTMLFormElement.cpp | 90 +- .../webkit/WebCore/generated/JSHTMLFormElement.h | 58 +- .../WebCore/generated/JSHTMLFrameElement.cpp | 85 +- .../webkit/WebCore/generated/JSHTMLFrameElement.h | 65 +- .../WebCore/generated/JSHTMLFrameSetElement.cpp | 30 +- .../WebCore/generated/JSHTMLFrameSetElement.h | 23 +- .../webkit/WebCore/generated/JSHTMLHRElement.cpp | 42 +- .../webkit/WebCore/generated/JSHTMLHRElement.h | 29 +- .../webkit/WebCore/generated/JSHTMLHeadElement.cpp | 25 +- .../webkit/WebCore/generated/JSHTMLHeadElement.h | 17 +- .../WebCore/generated/JSHTMLHeadingElement.cpp | 25 +- .../WebCore/generated/JSHTMLHeadingElement.h | 17 +- .../webkit/WebCore/generated/JSHTMLHtmlElement.cpp | 25 +- .../webkit/WebCore/generated/JSHTMLHtmlElement.h | 17 +- .../WebCore/generated/JSHTMLIFrameElement.cpp | 82 +- .../webkit/WebCore/generated/JSHTMLIFrameElement.h | 63 +- .../WebCore/generated/JSHTMLImageElement.cpp | 110 +- .../webkit/WebCore/generated/JSHTMLImageElement.h | 75 +- .../WebCore/generated/JSHTMLInputElement.cpp | 207 +- .../webkit/WebCore/generated/JSHTMLInputElement.h | 122 +- .../WebCore/generated/JSHTMLIsIndexElement.cpp | 28 +- .../WebCore/generated/JSHTMLIsIndexElement.h | 19 +- .../webkit/WebCore/generated/JSHTMLLIElement.cpp | 32 +- .../webkit/WebCore/generated/JSHTMLLIElement.h | 21 +- .../WebCore/generated/JSHTMLLabelElement.cpp | 33 +- .../webkit/WebCore/generated/JSHTMLLabelElement.h | 23 +- .../WebCore/generated/JSHTMLLegendElement.cpp | 33 +- .../webkit/WebCore/generated/JSHTMLLegendElement.h | 23 +- .../webkit/WebCore/generated/JSHTMLLinkElement.cpp | 70 +- .../webkit/WebCore/generated/JSHTMLLinkElement.h | 51 +- .../webkit/WebCore/generated/JSHTMLMapElement.cpp | 28 +- .../webkit/WebCore/generated/JSHTMLMapElement.h | 19 +- .../WebCore/generated/JSHTMLMarqueeElement.cpp | 28 +- .../WebCore/generated/JSHTMLMarqueeElement.h | 17 +- .../WebCore/generated/JSHTMLMediaElement.cpp | 319 +- .../webkit/WebCore/generated/JSHTMLMediaElement.h | 113 +- .../webkit/WebCore/generated/JSHTMLMenuElement.cpp | 27 +- .../webkit/WebCore/generated/JSHTMLMenuElement.h | 17 +- .../webkit/WebCore/generated/JSHTMLMetaElement.cpp | 40 +- .../webkit/WebCore/generated/JSHTMLMetaElement.h | 29 +- .../webkit/WebCore/generated/JSHTMLModElement.cpp | 30 +- .../webkit/WebCore/generated/JSHTMLModElement.h | 21 +- .../WebCore/generated/JSHTMLOListElement.cpp | 39 +- .../webkit/WebCore/generated/JSHTMLOListElement.h | 25 +- .../WebCore/generated/JSHTMLObjectElement.cpp | 118 +- .../webkit/WebCore/generated/JSHTMLObjectElement.h | 89 +- .../WebCore/generated/JSHTMLOptGroupElement.cpp | 32 +- .../WebCore/generated/JSHTMLOptGroupElement.h | 21 +- .../WebCore/generated/JSHTMLOptionElement.cpp | 66 +- .../webkit/WebCore/generated/JSHTMLOptionElement.h | 43 +- .../WebCore/generated/JSHTMLOptionsCollection.cpp | 39 +- .../WebCore/generated/JSHTMLOptionsCollection.h | 37 +- .../WebCore/generated/JSHTMLParagraphElement.cpp | 25 +- .../WebCore/generated/JSHTMLParagraphElement.h | 17 +- .../WebCore/generated/JSHTMLParamElement.cpp | 40 +- .../webkit/WebCore/generated/JSHTMLParamElement.h | 29 +- .../webkit/WebCore/generated/JSHTMLPreElement.cpp | 34 +- .../webkit/WebCore/generated/JSHTMLPreElement.h | 21 +- .../WebCore/generated/JSHTMLQuoteElement.cpp | 25 +- .../webkit/WebCore/generated/JSHTMLQuoteElement.h | 17 +- .../WebCore/generated/JSHTMLScriptElement.cpp | 57 +- .../webkit/WebCore/generated/JSHTMLScriptElement.h | 41 +- .../WebCore/generated/JSHTMLSelectElement.cpp | 120 +- .../webkit/WebCore/generated/JSHTMLSelectElement.h | 71 +- .../WebCore/generated/JSHTMLSourceElement.cpp | 41 +- .../webkit/WebCore/generated/JSHTMLSourceElement.h | 25 +- .../WebCore/generated/JSHTMLStyleElement.cpp | 40 +- .../webkit/WebCore/generated/JSHTMLStyleElement.h | 27 +- .../generated/JSHTMLTableCaptionElement.cpp | 29 +- .../WebCore/generated/JSHTMLTableCaptionElement.h | 19 +- .../WebCore/generated/JSHTMLTableCellElement.cpp | 99 +- .../WebCore/generated/JSHTMLTableCellElement.h | 71 +- .../WebCore/generated/JSHTMLTableColElement.cpp | 52 +- .../WebCore/generated/JSHTMLTableColElement.h | 37 +- .../WebCore/generated/JSHTMLTableElement.cpp | 138 +- .../webkit/WebCore/generated/JSHTMLTableElement.h | 83 +- .../WebCore/generated/JSHTMLTableRowElement.cpp | 70 +- .../WebCore/generated/JSHTMLTableRowElement.h | 45 +- .../generated/JSHTMLTableSectionElement.cpp | 63 +- .../WebCore/generated/JSHTMLTableSectionElement.h | 39 +- .../WebCore/generated/JSHTMLTextAreaElement.cpp | 112 +- .../WebCore/generated/JSHTMLTextAreaElement.h | 69 +- .../WebCore/generated/JSHTMLTitleElement.cpp | 25 +- .../webkit/WebCore/generated/JSHTMLTitleElement.h | 17 +- .../WebCore/generated/JSHTMLUListElement.cpp | 32 +- .../webkit/WebCore/generated/JSHTMLUListElement.h | 21 +- .../WebCore/generated/JSHTMLVideoElement.cpp | 45 +- .../webkit/WebCore/generated/JSHTMLVideoElement.h | 29 +- .../webkit/WebCore/generated/JSHistory.cpp | 39 +- src/3rdparty/webkit/WebCore/generated/JSHistory.h | 25 +- .../webkit/WebCore/generated/JSImageData.cpp | 29 +- .../webkit/WebCore/generated/JSImageData.h | 19 +- .../WebCore/generated/JSInspectorController.cpp | 773 + .../WebCore/generated/JSInspectorController.h | 138 + .../WebCore/generated/JSJavaScriptCallFrame.cpp | 45 +- .../WebCore/generated/JSJavaScriptCallFrame.h | 42 +- .../webkit/WebCore/generated/JSKeyboardEvent.cpp | 66 +- .../webkit/WebCore/generated/JSKeyboardEvent.h | 29 +- .../webkit/WebCore/generated/JSLocation.cpp | 86 +- src/3rdparty/webkit/WebCore/generated/JSLocation.h | 85 +- .../webkit/WebCore/generated/JSMediaError.cpp | 53 +- .../webkit/WebCore/generated/JSMediaError.h | 26 +- .../webkit/WebCore/generated/JSMediaList.cpp | 60 +- .../webkit/WebCore/generated/JSMediaList.h | 33 +- .../webkit/WebCore/generated/JSMessageChannel.cpp | 23 +- .../webkit/WebCore/generated/JSMessageChannel.h | 15 +- .../webkit/WebCore/generated/JSMessageEvent.cpp | 54 +- .../webkit/WebCore/generated/JSMessageEvent.h | 25 +- .../webkit/WebCore/generated/JSMessagePort.cpp | 101 +- .../webkit/WebCore/generated/JSMessagePort.h | 49 +- .../webkit/WebCore/generated/JSMimeType.cpp | 37 +- src/3rdparty/webkit/WebCore/generated/JSMimeType.h | 23 +- .../webkit/WebCore/generated/JSMimeTypeArray.cpp | 48 +- .../webkit/WebCore/generated/JSMimeTypeArray.h | 27 +- .../webkit/WebCore/generated/JSMouseEvent.cpp | 105 +- .../webkit/WebCore/generated/JSMouseEvent.h | 49 +- .../webkit/WebCore/generated/JSMutationEvent.cpp | 60 +- .../webkit/WebCore/generated/JSMutationEvent.h | 31 +- .../webkit/WebCore/generated/JSNamedNodeMap.cpp | 101 +- .../webkit/WebCore/generated/JSNamedNodeMap.h | 37 +- .../webkit/WebCore/generated/JSNavigator.cpp | 69 +- .../webkit/WebCore/generated/JSNavigator.h | 46 +- src/3rdparty/webkit/WebCore/generated/JSNode.cpp | 1165 +- src/3rdparty/webkit/WebCore/generated/JSNode.h | 224 +- .../webkit/WebCore/generated/JSNodeFilter.cpp | 58 +- .../webkit/WebCore/generated/JSNodeFilter.h | 53 +- .../webkit/WebCore/generated/JSNodeIterator.cpp | 58 +- .../webkit/WebCore/generated/JSNodeIterator.h | 39 +- .../webkit/WebCore/generated/JSNodeList.cpp | 39 +- src/3rdparty/webkit/WebCore/generated/JSNodeList.h | 25 +- .../webkit/WebCore/generated/JSNotation.cpp | 24 +- src/3rdparty/webkit/WebCore/generated/JSNotation.h | 15 +- .../webkit/WebCore/generated/JSOverflowEvent.cpp | 44 +- .../webkit/WebCore/generated/JSOverflowEvent.h | 27 +- src/3rdparty/webkit/WebCore/generated/JSPlugin.cpp | 57 +- src/3rdparty/webkit/WebCore/generated/JSPlugin.h | 33 +- .../webkit/WebCore/generated/JSPluginArray.cpp | 55 +- .../webkit/WebCore/generated/JSPluginArray.h | 29 +- .../webkit/WebCore/generated/JSPositionError.cpp | 39 +- .../webkit/WebCore/generated/JSPositionError.h | 29 +- .../WebCore/generated/JSProcessingInstruction.cpp | 31 +- .../WebCore/generated/JSProcessingInstruction.h | 21 +- .../webkit/WebCore/generated/JSProgressEvent.cpp | 44 +- .../webkit/WebCore/generated/JSProgressEvent.h | 21 +- .../webkit/WebCore/generated/JSRGBColor.lut.h | 5 - src/3rdparty/webkit/WebCore/generated/JSRange.cpp | 244 +- src/3rdparty/webkit/WebCore/generated/JSRange.h | 91 +- .../webkit/WebCore/generated/JSRangeException.cpp | 45 +- .../webkit/WebCore/generated/JSRangeException.h | 29 +- src/3rdparty/webkit/WebCore/generated/JSRect.cpp | 37 +- src/3rdparty/webkit/WebCore/generated/JSRect.h | 23 +- .../webkit/WebCore/generated/JSSQLError.cpp | 28 +- src/3rdparty/webkit/WebCore/generated/JSSQLError.h | 20 +- .../webkit/WebCore/generated/JSSQLResultSet.cpp | 32 +- .../webkit/WebCore/generated/JSSQLResultSet.h | 22 +- .../WebCore/generated/JSSQLResultSetRowList.cpp | 30 +- .../WebCore/generated/JSSQLResultSetRowList.h | 24 +- .../webkit/WebCore/generated/JSSQLTransaction.cpp | 27 +- .../webkit/WebCore/generated/JSSQLTransaction.h | 20 +- .../webkit/WebCore/generated/JSSVGAElement.cpp | 107 +- .../webkit/WebCore/generated/JSSVGAElement.h | 53 +- .../WebCore/generated/JSSVGAltGlyphElement.cpp | 29 +- .../WebCore/generated/JSSVGAltGlyphElement.h | 19 +- .../webkit/WebCore/generated/JSSVGAngle.cpp | 75 +- src/3rdparty/webkit/WebCore/generated/JSSVGAngle.h | 47 +- .../WebCore/generated/JSSVGAnimateColorElement.cpp | 10 +- .../WebCore/generated/JSSVGAnimateColorElement.h | 5 +- .../WebCore/generated/JSSVGAnimateElement.cpp | 10 +- .../webkit/WebCore/generated/JSSVGAnimateElement.h | 5 +- .../generated/JSSVGAnimateTransformElement.cpp | 10 +- .../generated/JSSVGAnimateTransformElement.h | 5 +- .../WebCore/generated/JSSVGAnimatedAngle.cpp | 23 +- .../webkit/WebCore/generated/JSSVGAnimatedAngle.h | 15 +- .../WebCore/generated/JSSVGAnimatedBoolean.cpp | 29 +- .../WebCore/generated/JSSVGAnimatedBoolean.h | 19 +- .../WebCore/generated/JSSVGAnimatedEnumeration.cpp | 29 +- .../WebCore/generated/JSSVGAnimatedEnumeration.h | 19 +- .../WebCore/generated/JSSVGAnimatedInteger.cpp | 29 +- .../WebCore/generated/JSSVGAnimatedInteger.h | 19 +- .../WebCore/generated/JSSVGAnimatedLength.cpp | 23 +- .../webkit/WebCore/generated/JSSVGAnimatedLength.h | 15 +- .../WebCore/generated/JSSVGAnimatedLengthList.cpp | 23 +- .../WebCore/generated/JSSVGAnimatedLengthList.h | 15 +- .../WebCore/generated/JSSVGAnimatedNumber.cpp | 29 +- .../webkit/WebCore/generated/JSSVGAnimatedNumber.h | 19 +- .../WebCore/generated/JSSVGAnimatedNumberList.cpp | 23 +- .../WebCore/generated/JSSVGAnimatedNumberList.h | 15 +- .../generated/JSSVGAnimatedPreserveAspectRatio.cpp | 23 +- .../generated/JSSVGAnimatedPreserveAspectRatio.h | 15 +- .../webkit/WebCore/generated/JSSVGAnimatedRect.cpp | 23 +- .../webkit/WebCore/generated/JSSVGAnimatedRect.h | 15 +- .../WebCore/generated/JSSVGAnimatedString.cpp | 29 +- .../webkit/WebCore/generated/JSSVGAnimatedString.h | 19 +- .../generated/JSSVGAnimatedTransformList.cpp | 23 +- .../WebCore/generated/JSSVGAnimatedTransformList.h | 15 +- .../WebCore/generated/JSSVGAnimationElement.cpp | 87 +- .../WebCore/generated/JSSVGAnimationElement.h | 35 +- .../WebCore/generated/JSSVGCircleElement.cpp | 110 +- .../webkit/WebCore/generated/JSSVGCircleElement.h | 55 +- .../WebCore/generated/JSSVGClipPathElement.cpp | 104 +- .../WebCore/generated/JSSVGClipPathElement.h | 51 +- .../webkit/WebCore/generated/JSSVGColor.cpp | 59 +- src/3rdparty/webkit/WebCore/generated/JSSVGColor.h | 31 +- .../JSSVGComponentTransferFunctionElement.cpp | 55 +- .../JSSVGComponentTransferFunctionElement.h | 43 +- .../WebCore/generated/JSSVGCursorElement.cpp | 40 +- .../webkit/WebCore/generated/JSSVGCursorElement.h | 25 +- .../generated/JSSVGDefinitionSrcElement.cpp | 10 +- .../WebCore/generated/JSSVGDefinitionSrcElement.h | 5 +- .../webkit/WebCore/generated/JSSVGDefsElement.cpp | 101 +- .../webkit/WebCore/generated/JSSVGDefsElement.h | 49 +- .../webkit/WebCore/generated/JSSVGDescElement.cpp | 41 +- .../webkit/WebCore/generated/JSSVGDescElement.h | 25 +- .../webkit/WebCore/generated/JSSVGDocument.cpp | 22 +- .../webkit/WebCore/generated/JSSVGDocument.h | 13 +- .../webkit/WebCore/generated/JSSVGElement.cpp | 32 +- .../webkit/WebCore/generated/JSSVGElement.h | 23 +- .../WebCore/generated/JSSVGElementInstance.cpp | 624 +- .../WebCore/generated/JSSVGElementInstance.h | 203 +- .../WebCore/generated/JSSVGElementInstanceList.cpp | 29 +- .../WebCore/generated/JSSVGElementInstanceList.h | 17 +- .../generated/JSSVGElementWrapperFactory.cpp | 184 - .../WebCore/generated/JSSVGEllipseElement.cpp | 113 +- .../webkit/WebCore/generated/JSSVGEllipseElement.h | 57 +- .../webkit/WebCore/generated/JSSVGException.cpp | 47 +- .../webkit/WebCore/generated/JSSVGException.h | 31 +- .../WebCore/generated/JSSVGFEBlendElement.cpp | 73 +- .../webkit/WebCore/generated/JSSVGFEBlendElement.h | 51 +- .../generated/JSSVGFEColorMatrixElement.cpp | 71 +- .../WebCore/generated/JSSVGFEColorMatrixElement.h | 49 +- .../generated/JSSVGFEComponentTransferElement.cpp | 47 +- .../generated/JSSVGFEComponentTransferElement.h | 31 +- .../WebCore/generated/JSSVGFECompositeElement.cpp | 87 +- .../WebCore/generated/JSSVGFECompositeElement.h | 61 +- .../generated/JSSVGFEDiffuseLightingElement.cpp | 59 +- .../generated/JSSVGFEDiffuseLightingElement.h | 39 +- .../generated/JSSVGFEDisplacementMapElement.cpp | 77 +- .../generated/JSSVGFEDisplacementMapElement.h | 53 +- .../generated/JSSVGFEDistantLightElement.cpp | 20 +- .../WebCore/generated/JSSVGFEDistantLightElement.h | 15 +- .../WebCore/generated/JSSVGFEFloodElement.cpp | 106 +- .../webkit/WebCore/generated/JSSVGFEFloodElement.h | 32 +- .../WebCore/generated/JSSVGFEFuncAElement.cpp | 14 +- .../webkit/WebCore/generated/JSSVGFEFuncAElement.h | 9 +- .../WebCore/generated/JSSVGFEFuncBElement.cpp | 14 +- .../webkit/WebCore/generated/JSSVGFEFuncBElement.h | 9 +- .../WebCore/generated/JSSVGFEFuncGElement.cpp | 14 +- .../webkit/WebCore/generated/JSSVGFEFuncGElement.h | 9 +- .../WebCore/generated/JSSVGFEFuncRElement.cpp | 14 +- .../webkit/WebCore/generated/JSSVGFEFuncRElement.h | 9 +- .../generated/JSSVGFEGaussianBlurElement.cpp | 62 +- .../WebCore/generated/JSSVGFEGaussianBlurElement.h | 37 +- .../WebCore/generated/JSSVGFEImageElement.cpp | 66 +- .../webkit/WebCore/generated/JSSVGFEImageElement.h | 43 +- .../WebCore/generated/JSSVGFEMergeElement.cpp | 44 +- .../webkit/WebCore/generated/JSSVGFEMergeElement.h | 29 +- .../WebCore/generated/JSSVGFEMergeNodeElement.cpp | 17 +- .../WebCore/generated/JSSVGFEMergeNodeElement.h | 13 +- .../WebCore/generated/JSSVGFEOffsetElement.cpp | 53 +- .../WebCore/generated/JSSVGFEOffsetElement.h | 35 +- .../WebCore/generated/JSSVGFEPointLightElement.cpp | 23 +- .../WebCore/generated/JSSVGFEPointLightElement.h | 17 +- .../generated/JSSVGFESpecularLightingElement.cpp | 56 +- .../generated/JSSVGFESpecularLightingElement.h | 37 +- .../WebCore/generated/JSSVGFESpotLightElement.cpp | 38 +- .../WebCore/generated/JSSVGFESpotLightElement.h | 27 +- .../WebCore/generated/JSSVGFETileElement.cpp | 47 +- .../webkit/WebCore/generated/JSSVGFETileElement.h | 31 +- .../WebCore/generated/JSSVGFETurbulenceElement.cpp | 82 +- .../WebCore/generated/JSSVGFETurbulenceElement.h | 57 +- .../WebCore/generated/JSSVGFilterElement.cpp | 84 +- .../webkit/WebCore/generated/JSSVGFilterElement.h | 51 +- .../webkit/WebCore/generated/JSSVGFontElement.cpp | 10 +- .../webkit/WebCore/generated/JSSVGFontElement.h | 5 +- .../WebCore/generated/JSSVGFontFaceElement.cpp | 10 +- .../WebCore/generated/JSSVGFontFaceElement.h | 5 +- .../generated/JSSVGFontFaceFormatElement.cpp | 10 +- .../WebCore/generated/JSSVGFontFaceFormatElement.h | 5 +- .../WebCore/generated/JSSVGFontFaceNameElement.cpp | 10 +- .../WebCore/generated/JSSVGFontFaceNameElement.h | 5 +- .../WebCore/generated/JSSVGFontFaceSrcElement.cpp | 10 +- .../WebCore/generated/JSSVGFontFaceSrcElement.h | 5 +- .../WebCore/generated/JSSVGFontFaceUriElement.cpp | 10 +- .../WebCore/generated/JSSVGFontFaceUriElement.h | 5 +- .../generated/JSSVGForeignObjectElement.cpp | 113 +- .../WebCore/generated/JSSVGForeignObjectElement.h | 57 +- .../webkit/WebCore/generated/JSSVGGElement.cpp | 101 +- .../webkit/WebCore/generated/JSSVGGElement.h | 49 +- .../webkit/WebCore/generated/JSSVGGlyphElement.cpp | 10 +- .../webkit/WebCore/generated/JSSVGGlyphElement.h | 5 +- .../WebCore/generated/JSSVGGradientElement.cpp | 56 +- .../WebCore/generated/JSSVGGradientElement.h | 37 +- .../webkit/WebCore/generated/JSSVGHKernElement.cpp | 10 +- .../webkit/WebCore/generated/JSSVGHKernElement.h | 5 +- .../webkit/WebCore/generated/JSSVGImageElement.cpp | 119 +- .../webkit/WebCore/generated/JSSVGImageElement.h | 61 +- .../webkit/WebCore/generated/JSSVGLength.cpp | 84 +- .../webkit/WebCore/generated/JSSVGLength.h | 63 +- .../webkit/WebCore/generated/JSSVGLengthList.cpp | 83 +- .../webkit/WebCore/generated/JSSVGLengthList.h | 29 +- .../webkit/WebCore/generated/JSSVGLineElement.cpp | 113 +- .../webkit/WebCore/generated/JSSVGLineElement.h | 57 +- .../generated/JSSVGLinearGradientElement.cpp | 22 +- .../WebCore/generated/JSSVGLinearGradientElement.h | 15 +- .../WebCore/generated/JSSVGMarkerElement.cpp | 103 +- .../webkit/WebCore/generated/JSSVGMarkerElement.h | 65 +- .../webkit/WebCore/generated/JSSVGMaskElement.cpp | 80 +- .../webkit/WebCore/generated/JSSVGMaskElement.h | 47 +- .../webkit/WebCore/generated/JSSVGMatrix.cpp | 189 +- .../webkit/WebCore/generated/JSSVGMatrix.h | 74 +- .../WebCore/generated/JSSVGMetadataElement.cpp | 10 +- .../WebCore/generated/JSSVGMetadataElement.h | 5 +- .../WebCore/generated/JSSVGMissingGlyphElement.cpp | 10 +- .../WebCore/generated/JSSVGMissingGlyphElement.h | 5 +- .../webkit/WebCore/generated/JSSVGNumber.cpp | 26 +- .../webkit/WebCore/generated/JSSVGNumber.h | 17 +- .../webkit/WebCore/generated/JSSVGNumberList.cpp | 83 +- .../webkit/WebCore/generated/JSSVGNumberList.h | 29 +- .../webkit/WebCore/generated/JSSVGPaint.cpp | 64 +- src/3rdparty/webkit/WebCore/generated/JSSVGPaint.h | 41 +- .../webkit/WebCore/generated/JSSVGPathElement.cpp | 390 +- .../webkit/WebCore/generated/JSSVGPathElement.h | 103 +- .../webkit/WebCore/generated/JSSVGPathSeg.cpp | 69 +- .../webkit/WebCore/generated/JSSVGPathSeg.h | 61 +- .../WebCore/generated/JSSVGPathSegArcAbs.cpp | 61 +- .../webkit/WebCore/generated/JSSVGPathSegArcAbs.h | 37 +- .../WebCore/generated/JSSVGPathSegArcRel.cpp | 61 +- .../webkit/WebCore/generated/JSSVGPathSegArcRel.h | 37 +- .../WebCore/generated/JSSVGPathSegClosePath.cpp | 10 +- .../WebCore/generated/JSSVGPathSegClosePath.h | 5 +- .../generated/JSSVGPathSegCurvetoCubicAbs.cpp | 54 +- .../generated/JSSVGPathSegCurvetoCubicAbs.h | 33 +- .../generated/JSSVGPathSegCurvetoCubicRel.cpp | 54 +- .../generated/JSSVGPathSegCurvetoCubicRel.h | 33 +- .../JSSVGPathSegCurvetoCubicSmoothAbs.cpp | 40 +- .../generated/JSSVGPathSegCurvetoCubicSmoothAbs.h | 25 +- .../JSSVGPathSegCurvetoCubicSmoothRel.cpp | 40 +- .../generated/JSSVGPathSegCurvetoCubicSmoothRel.h | 25 +- .../generated/JSSVGPathSegCurvetoQuadraticAbs.cpp | 40 +- .../generated/JSSVGPathSegCurvetoQuadraticAbs.h | 25 +- .../generated/JSSVGPathSegCurvetoQuadraticRel.cpp | 40 +- .../generated/JSSVGPathSegCurvetoQuadraticRel.h | 25 +- .../JSSVGPathSegCurvetoQuadraticSmoothAbs.cpp | 26 +- .../JSSVGPathSegCurvetoQuadraticSmoothAbs.h | 17 +- .../JSSVGPathSegCurvetoQuadraticSmoothRel.cpp | 26 +- .../JSSVGPathSegCurvetoQuadraticSmoothRel.h | 17 +- .../WebCore/generated/JSSVGPathSegLinetoAbs.cpp | 26 +- .../WebCore/generated/JSSVGPathSegLinetoAbs.h | 17 +- .../generated/JSSVGPathSegLinetoHorizontalAbs.cpp | 19 +- .../generated/JSSVGPathSegLinetoHorizontalAbs.h | 13 +- .../generated/JSSVGPathSegLinetoHorizontalRel.cpp | 19 +- .../generated/JSSVGPathSegLinetoHorizontalRel.h | 13 +- .../WebCore/generated/JSSVGPathSegLinetoRel.cpp | 26 +- .../WebCore/generated/JSSVGPathSegLinetoRel.h | 17 +- .../generated/JSSVGPathSegLinetoVerticalAbs.cpp | 19 +- .../generated/JSSVGPathSegLinetoVerticalAbs.h | 13 +- .../generated/JSSVGPathSegLinetoVerticalRel.cpp | 19 +- .../generated/JSSVGPathSegLinetoVerticalRel.h | 13 +- .../webkit/WebCore/generated/JSSVGPathSegList.cpp | 55 +- .../webkit/WebCore/generated/JSSVGPathSegList.h | 43 +- .../WebCore/generated/JSSVGPathSegMovetoAbs.cpp | 26 +- .../WebCore/generated/JSSVGPathSegMovetoAbs.h | 17 +- .../WebCore/generated/JSSVGPathSegMovetoRel.cpp | 26 +- .../WebCore/generated/JSSVGPathSegMovetoRel.h | 17 +- .../WebCore/generated/JSSVGPatternElement.cpp | 92 +- .../webkit/WebCore/generated/JSSVGPatternElement.h | 55 +- .../webkit/WebCore/generated/JSSVGPoint.cpp | 42 +- src/3rdparty/webkit/WebCore/generated/JSSVGPoint.h | 25 +- .../webkit/WebCore/generated/JSSVGPointList.cpp | 55 +- .../webkit/WebCore/generated/JSSVGPointList.h | 43 +- .../WebCore/generated/JSSVGPolygonElement.cpp | 107 +- .../webkit/WebCore/generated/JSSVGPolygonElement.h | 53 +- .../WebCore/generated/JSSVGPolylineElement.cpp | 107 +- .../WebCore/generated/JSSVGPolylineElement.h | 53 +- .../WebCore/generated/JSSVGPreserveAspectRatio.cpp | 69 +- .../WebCore/generated/JSSVGPreserveAspectRatio.h | 55 +- .../generated/JSSVGRadialGradientElement.cpp | 25 +- .../WebCore/generated/JSSVGRadialGradientElement.h | 17 +- .../webkit/WebCore/generated/JSSVGRect.cpp | 47 +- src/3rdparty/webkit/WebCore/generated/JSSVGRect.h | 29 +- .../webkit/WebCore/generated/JSSVGRectElement.cpp | 119 +- .../webkit/WebCore/generated/JSSVGRectElement.h | 61 +- .../WebCore/generated/JSSVGRenderingIntent.cpp | 37 +- .../WebCore/generated/JSSVGRenderingIntent.h | 29 +- .../webkit/WebCore/generated/JSSVGSVGElement.cpp | 339 +- .../webkit/WebCore/generated/JSSVGSVGElement.h | 141 +- .../WebCore/generated/JSSVGScriptElement.cpp | 23 +- .../webkit/WebCore/generated/JSSVGScriptElement.h | 17 +- .../webkit/WebCore/generated/JSSVGSetElement.cpp | 10 +- .../webkit/WebCore/generated/JSSVGSetElement.h | 5 +- .../webkit/WebCore/generated/JSSVGStopElement.cpp | 28 +- .../webkit/WebCore/generated/JSSVGStopElement.h | 17 +- .../webkit/WebCore/generated/JSSVGStringList.cpp | 83 +- .../webkit/WebCore/generated/JSSVGStringList.h | 29 +- .../webkit/WebCore/generated/JSSVGStyleElement.cpp | 40 +- .../webkit/WebCore/generated/JSSVGStyleElement.h | 25 +- .../WebCore/generated/JSSVGSwitchElement.cpp | 101 +- .../webkit/WebCore/generated/JSSVGSwitchElement.h | 49 +- .../WebCore/generated/JSSVGSymbolElement.cpp | 50 +- .../webkit/WebCore/generated/JSSVGSymbolElement.h | 31 +- .../webkit/WebCore/generated/JSSVGTRefElement.cpp | 13 +- .../webkit/WebCore/generated/JSSVGTRefElement.h | 9 +- .../webkit/WebCore/generated/JSSVGTSpanElement.cpp | 10 +- .../webkit/WebCore/generated/JSSVGTSpanElement.h | 5 +- .../WebCore/generated/JSSVGTextContentElement.cpp | 194 +- .../WebCore/generated/JSSVGTextContentElement.h | 67 +- .../webkit/WebCore/generated/JSSVGTextElement.cpp | 49 +- .../webkit/WebCore/generated/JSSVGTextElement.h | 23 +- .../WebCore/generated/JSSVGTextPathElement.cpp | 42 +- .../WebCore/generated/JSSVGTextPathElement.h | 33 +- .../generated/JSSVGTextPositioningElement.cpp | 25 +- .../generated/JSSVGTextPositioningElement.h | 17 +- .../webkit/WebCore/generated/JSSVGTitleElement.cpp | 41 +- .../webkit/WebCore/generated/JSSVGTitleElement.h | 25 +- .../webkit/WebCore/generated/JSSVGTransform.cpp | 98 +- .../webkit/WebCore/generated/JSSVGTransform.h | 49 +- .../WebCore/generated/JSSVGTransformList.cpp | 71 +- .../webkit/WebCore/generated/JSSVGTransformList.h | 47 +- .../webkit/WebCore/generated/JSSVGUnitTypes.cpp | 31 +- .../webkit/WebCore/generated/JSSVGUnitTypes.h | 23 +- .../webkit/WebCore/generated/JSSVGUseElement.cpp | 122 +- .../webkit/WebCore/generated/JSSVGUseElement.h | 63 +- .../webkit/WebCore/generated/JSSVGViewElement.cpp | 37 +- .../webkit/WebCore/generated/JSSVGViewElement.h | 29 +- .../webkit/WebCore/generated/JSSVGZoomEvent.cpp | 27 +- .../webkit/WebCore/generated/JSSVGZoomEvent.h | 17 +- src/3rdparty/webkit/WebCore/generated/JSScreen.cpp | 41 +- src/3rdparty/webkit/WebCore/generated/JSScreen.h | 27 +- .../webkit/WebCore/generated/JSStorage.cpp | 69 +- src/3rdparty/webkit/WebCore/generated/JSStorage.h | 35 +- .../webkit/WebCore/generated/JSStorageEvent.cpp | 73 +- .../webkit/WebCore/generated/JSStorageEvent.h | 26 +- .../webkit/WebCore/generated/JSStyleSheet.cpp | 50 +- .../webkit/WebCore/generated/JSStyleSheet.h | 33 +- .../webkit/WebCore/generated/JSStyleSheetList.cpp | 39 +- .../webkit/WebCore/generated/JSStyleSheetList.h | 25 +- src/3rdparty/webkit/WebCore/generated/JSText.cpp | 39 +- src/3rdparty/webkit/WebCore/generated/JSText.h | 20 +- .../webkit/WebCore/generated/JSTextEvent.cpp | 36 +- .../webkit/WebCore/generated/JSTextEvent.h | 17 +- .../webkit/WebCore/generated/JSTextMetrics.cpp | 28 +- .../webkit/WebCore/generated/JSTextMetrics.h | 17 +- .../webkit/WebCore/generated/JSTimeRanges.cpp | 38 +- .../webkit/WebCore/generated/JSTimeRanges.h | 19 +- .../webkit/WebCore/generated/JSTreeWalker.cpp | 79 +- .../webkit/WebCore/generated/JSTreeWalker.h | 59 +- .../webkit/WebCore/generated/JSUIEvent.cpp | 60 +- src/3rdparty/webkit/WebCore/generated/JSUIEvent.h | 33 +- .../webkit/WebCore/generated/JSVoidCallback.cpp | 18 +- .../webkit/WebCore/generated/JSVoidCallback.h | 13 +- .../WebCore/generated/JSWebKitAnimationEvent.cpp | 39 +- .../WebCore/generated/JSWebKitAnimationEvent.h | 19 +- .../WebCore/generated/JSWebKitCSSKeyframeRule.cpp | 30 +- .../WebCore/generated/JSWebKitCSSKeyframeRule.h | 19 +- .../WebCore/generated/JSWebKitCSSKeyframesRule.cpp | 53 +- .../WebCore/generated/JSWebKitCSSKeyframesRule.h | 29 +- .../webkit/WebCore/generated/JSWebKitCSSMatrix.cpp | 556 + .../webkit/WebCore/generated/JSWebKitCSSMatrix.h | 130 + .../generated/JSWebKitCSSTransformValue.cpp | 121 +- .../WebCore/generated/JSWebKitCSSTransformValue.h | 47 +- .../webkit/WebCore/generated/JSWebKitPoint.cpp | 137 + .../webkit/WebCore/generated/JSWebKitPoint.h | 75 + .../WebCore/generated/JSWebKitTransitionEvent.cpp | 39 +- .../WebCore/generated/JSWebKitTransitionEvent.h | 19 +- .../webkit/WebCore/generated/JSWheelEvent.cpp | 63 +- .../webkit/WebCore/generated/JSWheelEvent.h | 41 +- src/3rdparty/webkit/WebCore/generated/JSWorker.cpp | 78 +- src/3rdparty/webkit/WebCore/generated/JSWorker.h | 37 +- .../webkit/WebCore/generated/JSWorkerContext.cpp | 186 +- .../webkit/WebCore/generated/JSWorkerContext.h | 57 +- .../WebCore/generated/JSWorkerContextBase.lut.h | 18 - .../webkit/WebCore/generated/JSWorkerLocation.cpp | 56 +- .../webkit/WebCore/generated/JSWorkerLocation.h | 35 +- .../webkit/WebCore/generated/JSWorkerNavigator.cpp | 32 +- .../webkit/WebCore/generated/JSWorkerNavigator.h | 21 +- .../webkit/WebCore/generated/JSXMLHttpRequest.cpp | 226 +- .../webkit/WebCore/generated/JSXMLHttpRequest.h | 99 +- .../generated/JSXMLHttpRequestException.cpp | 61 +- .../WebCore/generated/JSXMLHttpRequestException.h | 29 +- .../generated/JSXMLHttpRequestProgressEvent.cpp | 38 +- .../generated/JSXMLHttpRequestProgressEvent.h | 15 +- .../WebCore/generated/JSXMLHttpRequestUpload.cpp | 134 +- .../WebCore/generated/JSXMLHttpRequestUpload.h | 49 +- .../webkit/WebCore/generated/JSXMLSerializer.cpp | 34 +- .../webkit/WebCore/generated/JSXMLSerializer.h | 19 +- .../webkit/WebCore/generated/JSXPathEvaluator.cpp | 66 +- .../webkit/WebCore/generated/JSXPathEvaluator.h | 23 +- .../webkit/WebCore/generated/JSXPathException.cpp | 45 +- .../webkit/WebCore/generated/JSXPathException.h | 29 +- .../webkit/WebCore/generated/JSXPathExpression.cpp | 38 +- .../webkit/WebCore/generated/JSXPathExpression.h | 19 +- .../webkit/WebCore/generated/JSXPathNSResolver.cpp | 26 +- .../webkit/WebCore/generated/JSXPathNSResolver.h | 13 +- .../webkit/WebCore/generated/JSXPathResult.cpp | 87 +- .../webkit/WebCore/generated/JSXPathResult.h | 55 +- .../webkit/WebCore/generated/JSXSLTProcessor.cpp | 177 - .../webkit/WebCore/generated/JSXSLTProcessor.h | 89 - src/3rdparty/webkit/WebCore/generated/Lexer.lut.h | 5 - .../webkit/WebCore/generated/MathObject.lut.h | 5 - .../WebCore/generated/NumberConstructor.lut.h | 5 - .../WebCore/generated/RegExpConstructor.lut.h | 5 - .../webkit/WebCore/generated/RegExpObject.lut.h | 5 - .../webkit/WebCore/generated/SVGElementFactory.cpp | 484 +- .../webkit/WebCore/generated/SVGElementFactory.h | 3 +- src/3rdparty/webkit/WebCore/generated/SVGNames.cpp | 94 +- src/3rdparty/webkit/WebCore/generated/SVGNames.h | 55 +- .../webkit/WebCore/generated/StringPrototype.lut.h | 5 - .../WebCore/generated/UserAgentStyleSheets.h | 4 +- .../WebCore/generated/UserAgentStyleSheetsData.cpp | 690 +- src/3rdparty/webkit/WebCore/generated/XLinkNames.h | 5 +- src/3rdparty/webkit/WebCore/generated/XMLNames.h | 5 +- .../webkit/WebCore/generated/XPathGrammar.cpp | 422 +- .../webkit/WebCore/generated/XPathGrammar.h | 64 +- .../webkit/WebCore/history/BackForwardList.h | 32 +- .../WebCore/history/BackForwardListChromium.cpp | 143 + .../webkit/WebCore/history/CachedFrame.cpp | 158 + src/3rdparty/webkit/WebCore/history/CachedFrame.h | 80 + .../WebCore/history/CachedFramePlatformData.h | 45 + src/3rdparty/webkit/WebCore/history/CachedPage.cpp | 117 +- src/3rdparty/webkit/WebCore/history/CachedPage.h | 44 +- .../WebCore/history/CachedPagePlatformData.h | 45 - .../webkit/WebCore/history/HistoryItem.cpp | 214 +- src/3rdparty/webkit/WebCore/history/HistoryItem.h | 53 +- src/3rdparty/webkit/WebCore/history/PageCache.cpp | 1 + .../WebCore/history/cf/HistoryPropertyList.cpp | 156 + .../WebCore/history/cf/HistoryPropertyList.h | 69 + .../webkit/WebCore/html/CanvasGradient.cpp | 5 +- src/3rdparty/webkit/WebCore/html/CanvasGradient.h | 5 + .../webkit/WebCore/html/CanvasPixelArray.cpp | 44 + .../webkit/WebCore/html/CanvasPixelArray.h | 64 + .../webkit/WebCore/html/CanvasPixelArray.idl | 39 + .../WebCore/html/CanvasRenderingContext2D.cpp | 59 +- .../webkit/WebCore/html/CanvasRenderingContext2D.h | 3 +- src/3rdparty/webkit/WebCore/html/CanvasStyle.cpp | 21 +- .../webkit/WebCore/html/CollectionCache.cpp | 88 + src/3rdparty/webkit/WebCore/html/CollectionCache.h | 64 + src/3rdparty/webkit/WebCore/html/CollectionType.h | 67 + .../webkit/WebCore/html/HTMLAnchorElement.cpp | 42 +- .../webkit/WebCore/html/HTMLAnchorElement.idl | 4 +- .../webkit/WebCore/html/HTMLAppletElement.cpp | 12 +- .../webkit/WebCore/html/HTMLAppletElement.idl | 4 +- .../webkit/WebCore/html/HTMLAreaElement.cpp | 32 +- src/3rdparty/webkit/WebCore/html/HTMLAreaElement.h | 27 +- .../webkit/WebCore/html/HTMLAreaElement.idl | 2 +- .../webkit/WebCore/html/HTMLAttributeNames.in | 8 +- src/3rdparty/webkit/WebCore/html/HTMLBRElement.cpp | 2 + .../webkit/WebCore/html/HTMLBaseElement.cpp | 1 + .../webkit/WebCore/html/HTMLBaseFontElement.cpp | 2 +- .../webkit/WebCore/html/HTMLBaseFontElement.idl | 2 +- .../webkit/WebCore/html/HTMLBodyElement.cpp | 65 +- src/3rdparty/webkit/WebCore/html/HTMLBodyElement.h | 15 +- .../webkit/WebCore/html/HTMLBodyElement.idl | 6 - .../webkit/WebCore/html/HTMLButtonElement.cpp | 8 +- .../webkit/WebCore/html/HTMLButtonElement.h | 2 +- .../webkit/WebCore/html/HTMLCanvasElement.cpp | 11 +- .../webkit/WebCore/html/HTMLCanvasElement.h | 5 +- .../webkit/WebCore/html/HTMLCanvasElement.idl | 4 +- .../webkit/WebCore/html/HTMLCollection.cpp | 74 +- src/3rdparty/webkit/WebCore/html/HTMLCollection.h | 90 +- .../webkit/WebCore/html/HTMLCollection.idl | 3 +- .../webkit/WebCore/html/HTMLDivElement.cpp | 2 + src/3rdparty/webkit/WebCore/html/HTMLDocument.cpp | 8 +- src/3rdparty/webkit/WebCore/html/HTMLDocument.h | 1 + src/3rdparty/webkit/WebCore/html/HTMLDocument.idl | 2 +- src/3rdparty/webkit/WebCore/html/HTMLElement.cpp | 130 +- src/3rdparty/webkit/WebCore/html/HTMLElement.h | 4 - src/3rdparty/webkit/WebCore/html/HTMLElement.idl | 4 +- .../webkit/WebCore/html/HTMLElementFactory.cpp | 509 - .../webkit/WebCore/html/HTMLElementFactory.h | 47 - .../webkit/WebCore/html/HTMLElementsAllInOne.cpp | 101 + .../webkit/WebCore/html/HTMLEmbedElement.cpp | 16 +- .../webkit/WebCore/html/HTMLEmbedElement.idl | 10 +- .../webkit/WebCore/html/HTMLFieldSetElement.cpp | 2 +- .../webkit/WebCore/html/HTMLFieldSetElement.h | 2 +- .../webkit/WebCore/html/HTMLFontElement.cpp | 1 + .../webkit/WebCore/html/HTMLFormCollection.cpp | 7 +- .../webkit/WebCore/html/HTMLFormCollection.h | 2 +- .../webkit/WebCore/html/HTMLFormControlElement.cpp | 28 +- .../webkit/WebCore/html/HTMLFormControlElement.h | 31 +- .../webkit/WebCore/html/HTMLFormElement.cpp | 176 +- src/3rdparty/webkit/WebCore/html/HTMLFormElement.h | 28 +- .../webkit/WebCore/html/HTMLFormElement.idl | 4 +- .../webkit/WebCore/html/HTMLFrameElement.cpp | 5 +- .../webkit/WebCore/html/HTMLFrameElement.h | 5 +- .../webkit/WebCore/html/HTMLFrameElement.idl | 6 +- .../webkit/WebCore/html/HTMLFrameElementBase.cpp | 14 +- .../webkit/WebCore/html/HTMLFrameElementBase.h | 2 +- .../webkit/WebCore/html/HTMLFrameOwnerElement.cpp | 3 +- .../webkit/WebCore/html/HTMLFrameOwnerElement.h | 5 +- .../webkit/WebCore/html/HTMLFrameSetElement.cpp | 17 +- src/3rdparty/webkit/WebCore/html/HTMLHRElement.cpp | 2 + .../webkit/WebCore/html/HTMLHtmlElement.cpp | 4 +- .../webkit/WebCore/html/HTMLIFrameElement.cpp | 5 +- .../webkit/WebCore/html/HTMLIFrameElement.h | 2 +- .../webkit/WebCore/html/HTMLIFrameElement.idl | 6 +- .../webkit/WebCore/html/HTMLImageElement.cpp | 14 +- .../webkit/WebCore/html/HTMLImageElement.idl | 2 +- .../webkit/WebCore/html/HTMLImageLoader.cpp | 18 +- .../webkit/WebCore/html/HTMLInputElement.cpp | 579 +- .../webkit/WebCore/html/HTMLInputElement.h | 96 +- .../webkit/WebCore/html/HTMLInputElement.idl | 13 +- .../webkit/WebCore/html/HTMLIsIndexElement.cpp | 6 +- .../webkit/WebCore/html/HTMLKeygenElement.cpp | 3 +- .../webkit/WebCore/html/HTMLKeygenElement.h | 2 +- src/3rdparty/webkit/WebCore/html/HTMLLIElement.cpp | 1 + .../webkit/WebCore/html/HTMLLabelElement.cpp | 2 +- .../webkit/WebCore/html/HTMLLegendElement.cpp | 13 +- .../webkit/WebCore/html/HTMLLegendElement.h | 3 +- .../webkit/WebCore/html/HTMLLinkElement.cpp | 70 +- src/3rdparty/webkit/WebCore/html/HTMLLinkElement.h | 2 +- .../webkit/WebCore/html/HTMLLinkElement.idl | 4 +- .../webkit/WebCore/html/HTMLMapElement.cpp | 6 +- .../webkit/WebCore/html/HTMLMarqueeElement.cpp | 28 +- .../webkit/WebCore/html/HTMLMarqueeElement.h | 8 +- .../webkit/WebCore/html/HTMLMediaElement.cpp | 1418 +- .../webkit/WebCore/html/HTMLMediaElement.h | 199 +- .../webkit/WebCore/html/HTMLMediaElement.idl | 46 +- .../webkit/WebCore/html/HTMLMetaElement.cpp | 2 + .../webkit/WebCore/html/HTMLNameCollection.cpp | 2 +- .../webkit/WebCore/html/HTMLNameCollection.h | 4 +- .../webkit/WebCore/html/HTMLNoScriptElement.cpp | 85 + .../webkit/WebCore/html/HTMLNoScriptElement.h | 46 + .../webkit/WebCore/html/HTMLOListElement.cpp | 2 + .../webkit/WebCore/html/HTMLObjectElement.cpp | 22 +- .../webkit/WebCore/html/HTMLObjectElement.idl | 8 +- .../webkit/WebCore/html/HTMLOptGroupElement.cpp | 15 +- .../webkit/WebCore/html/HTMLOptGroupElement.h | 7 +- .../webkit/WebCore/html/HTMLOptionElement.cpp | 97 +- .../webkit/WebCore/html/HTMLOptionElement.h | 26 +- .../webkit/WebCore/html/HTMLOptionElement.idl | 2 +- .../webkit/WebCore/html/HTMLOptionsCollection.idl | 2 +- .../webkit/WebCore/html/HTMLParagraphElement.cpp | 2 + .../webkit/WebCore/html/HTMLParamElement.cpp | 1 + src/3rdparty/webkit/WebCore/html/HTMLParser.cpp | 446 +- src/3rdparty/webkit/WebCore/html/HTMLParser.h | 35 +- .../webkit/WebCore/html/HTMLParserQuirks.h | 49 + .../webkit/WebCore/html/HTMLPlugInElement.cpp | 4 +- .../webkit/WebCore/html/HTMLPreElement.cpp | 2 + .../webkit/WebCore/html/HTMLQuoteElement.cpp | 8 + .../webkit/WebCore/html/HTMLQuoteElement.h | 2 + .../webkit/WebCore/html/HTMLScriptElement.cpp | 13 +- .../webkit/WebCore/html/HTMLScriptElement.h | 5 +- .../webkit/WebCore/html/HTMLSelectElement.cpp | 881 +- .../webkit/WebCore/html/HTMLSelectElement.h | 164 +- .../webkit/WebCore/html/HTMLSelectElement.idl | 4 +- .../webkit/WebCore/html/HTMLSourceElement.cpp | 22 +- .../webkit/WebCore/html/HTMLSourceElement.h | 9 + .../webkit/WebCore/html/HTMLStyleElement.cpp | 2 + .../webkit/WebCore/html/HTMLStyleElement.idl | 2 +- .../WebCore/html/HTMLTableCaptionElement.cpp | 2 + .../webkit/WebCore/html/HTMLTableCellElement.cpp | 2 + .../webkit/WebCore/html/HTMLTableColElement.cpp | 4 +- .../webkit/WebCore/html/HTMLTableElement.cpp | 9 +- .../webkit/WebCore/html/HTMLTablePartElement.cpp | 2 + .../webkit/WebCore/html/HTMLTableRowElement.cpp | 2 +- .../WebCore/html/HTMLTableRowsCollection.cpp | 2 +- .../WebCore/html/HTMLTableSectionElement.cpp | 2 +- src/3rdparty/webkit/WebCore/html/HTMLTagNames.in | 46 +- .../webkit/WebCore/html/HTMLTextAreaElement.cpp | 59 +- .../webkit/WebCore/html/HTMLTextAreaElement.h | 14 +- src/3rdparty/webkit/WebCore/html/HTMLTokenizer.cpp | 82 +- src/3rdparty/webkit/WebCore/html/HTMLTokenizer.h | 6 +- .../webkit/WebCore/html/HTMLUListElement.cpp | 2 + .../webkit/WebCore/html/HTMLVideoElement.cpp | 23 +- .../webkit/WebCore/html/HTMLVideoElement.h | 3 + .../webkit/WebCore/html/HTMLViewSourceDocument.cpp | 35 +- src/3rdparty/webkit/WebCore/html/ImageData.cpp | 2 +- src/3rdparty/webkit/WebCore/html/ImageData.h | 8 +- src/3rdparty/webkit/WebCore/html/ImageData.idl | 5 +- src/3rdparty/webkit/WebCore/html/MediaError.h | 2 +- src/3rdparty/webkit/WebCore/html/MediaError.idl | 1 + .../webkit/WebCore/html/PreloadScanner.cpp | 14 +- src/3rdparty/webkit/WebCore/html/TimeRanges.cpp | 56 +- src/3rdparty/webkit/WebCore/html/TimeRanges.h | 40 +- .../webkit/WebCore/inspector/ConsoleMessage.cpp | 119 + .../webkit/WebCore/inspector/ConsoleMessage.h | 68 + .../webkit/WebCore/inspector/InspectorClient.h | 2 + .../WebCore/inspector/InspectorController.cpp | 2996 +- .../webkit/WebCore/inspector/InspectorController.h | 173 +- .../WebCore/inspector/InspectorController.idl | 94 + .../inspector/InspectorDOMStorageResource.cpp | 83 + .../inspector/InspectorDOMStorageResource.h | 76 + .../inspector/InspectorDatabaseResource.cpp | 78 + .../WebCore/inspector/InspectorDatabaseResource.h | 72 + .../webkit/WebCore/inspector/InspectorFrontend.cpp | 298 + .../webkit/WebCore/inspector/InspectorFrontend.h | 105 + .../webkit/WebCore/inspector/InspectorResource.cpp | 325 + .../webkit/WebCore/inspector/InspectorResource.h | 163 + .../webkit/WebCore/inspector/JSONObject.cpp | 95 + src/3rdparty/webkit/WebCore/inspector/JSONObject.h | 60 + .../WebCore/inspector/JavaScriptCallFrame.cpp | 14 +- .../webkit/WebCore/inspector/JavaScriptCallFrame.h | 8 +- .../WebCore/inspector/JavaScriptCallFrame.idl | 2 +- .../WebCore/inspector/JavaScriptDebugListener.h | 5 + .../WebCore/inspector/JavaScriptDebugServer.cpp | 38 +- .../WebCore/inspector/JavaScriptDebugServer.h | 4 + .../webkit/WebCore/inspector/JavaScriptProfile.cpp | 125 +- .../webkit/WebCore/inspector/JavaScriptProfile.h | 6 +- .../WebCore/inspector/JavaScriptProfileNode.cpp | 51 +- .../WebCore/inspector/JavaScriptProfileNode.h | 6 +- .../front-end/BottomUpProfileDataGridTree.js | 252 + .../webkit/WebCore/inspector/front-end/Console.js | 223 +- .../WebCore/inspector/front-end/DOMStorage.js | 72 + .../inspector/front-end/DOMStorageDataGrid.js | 103 + .../inspector/front-end/DOMStorageItemsView.js | 108 + .../webkit/WebCore/inspector/front-end/DataGrid.js | 79 +- .../inspector/front-end/DatabaseQueryView.js | 2 +- .../inspector/front-end/DatabaseTableView.js | 20 +- .../WebCore/inspector/front-end/DatabasesPanel.js | 199 +- .../inspector/front-end/ElementsTreeOutline.js | 4 +- .../inspector/front-end/Images/domStorage.png | Bin 0 -> 442 bytes .../inspector/front-end/Images/radioDot.png | Bin 0 -> 235 bytes .../front-end/Images/userInputResultIcon.png | Bin 0 -> 259 bytes .../inspector/front-end/PanelEnablerView.js | 21 + .../inspector/front-end/ProfileDataGridTree.js | 398 + .../WebCore/inspector/front-end/ProfileView.js | 382 +- .../WebCore/inspector/front-end/ProfilesPanel.js | 16 +- .../WebCore/inspector/front-end/ResourcesPanel.js | 59 +- .../WebCore/inspector/front-end/ScriptsPanel.js | 56 +- .../WebCore/inspector/front-end/SourceFrame.js | 31 + .../WebCore/inspector/front-end/SourceView.js | 13 +- .../inspector/front-end/StylesSidebarPane.js | 4 +- .../front-end/TopDownProfileDataGridTree.js | 111 + .../webkit/WebCore/inspector/front-end/WebKit.qrc | 9 + .../WebCore/inspector/front-end/inspector.css | 172 +- .../WebCore/inspector/front-end/inspector.html | 6 + .../WebCore/inspector/front-end/inspector.js | 148 +- .../WebCore/inspector/front-end/utilities.js | 38 + src/3rdparty/webkit/WebCore/loader/Cache.cpp | 23 +- .../webkit/WebCore/loader/CachedCSSStyleSheet.cpp | 20 +- src/3rdparty/webkit/WebCore/loader/CachedFont.cpp | 11 +- src/3rdparty/webkit/WebCore/loader/CachedFont.h | 3 +- src/3rdparty/webkit/WebCore/loader/CachedImage.cpp | 7 +- src/3rdparty/webkit/WebCore/loader/CachedImage.h | 6 +- .../webkit/WebCore/loader/CachedResource.cpp | 84 +- .../webkit/WebCore/loader/CachedResource.h | 22 +- .../webkit/WebCore/loader/CachedScript.cpp | 14 +- src/3rdparty/webkit/WebCore/loader/CachedScript.h | 4 +- .../WebCore/loader/CrossOriginAccessControl.cpp | 116 + .../WebCore/loader/CrossOriginAccessControl.h | 41 + .../loader/CrossOriginPreflightResultCache.cpp | 173 + .../loader/CrossOriginPreflightResultCache.h | 78 + src/3rdparty/webkit/WebCore/loader/DocLoader.cpp | 23 +- src/3rdparty/webkit/WebCore/loader/DocLoader.h | 6 +- .../webkit/WebCore/loader/DocumentLoader.cpp | 66 +- .../webkit/WebCore/loader/DocumentLoader.h | 20 +- .../WebCore/loader/DocumentThreadableLoader.cpp | 199 + .../WebCore/loader/DocumentThreadableLoader.h | 83 + src/3rdparty/webkit/WebCore/loader/EmptyClients.h | 74 +- .../webkit/WebCore/loader/FTPDirectoryDocument.cpp | 37 +- .../webkit/WebCore/loader/FTPDirectoryParser.cpp | 4 + src/3rdparty/webkit/WebCore/loader/FormState.cpp | 14 +- src/3rdparty/webkit/WebCore/loader/FormState.h | 16 +- src/3rdparty/webkit/WebCore/loader/FrameLoader.cpp | 1790 +- src/3rdparty/webkit/WebCore/loader/FrameLoader.h | 271 +- .../webkit/WebCore/loader/FrameLoaderClient.cpp | 92 - .../webkit/WebCore/loader/FrameLoaderClient.h | 44 +- .../webkit/WebCore/loader/FrameLoaderTypes.h | 8 +- .../webkit/WebCore/loader/ImageDocument.cpp | 23 +- src/3rdparty/webkit/WebCore/loader/ImageLoader.cpp | 136 +- src/3rdparty/webkit/WebCore/loader/ImageLoader.h | 31 +- .../webkit/WebCore/loader/MainResourceLoader.cpp | 75 +- .../webkit/WebCore/loader/MainResourceLoader.h | 21 +- .../webkit/WebCore/loader/MediaDocument.cpp | 89 +- src/3rdparty/webkit/WebCore/loader/MediaDocument.h | 6 + .../WebCore/loader/NetscapePlugInStreamLoader.cpp | 5 + .../webkit/WebCore/loader/PluginDocument.cpp | 13 +- .../webkit/WebCore/loader/ProgressTracker.cpp | 10 +- .../webkit/WebCore/loader/ResourceLoader.cpp | 8 +- .../webkit/WebCore/loader/ResourceLoader.h | 6 +- .../webkit/WebCore/loader/SubresourceLoader.cpp | 9 +- .../webkit/WebCore/loader/SubresourceLoader.h | 2 +- .../WebCore/loader/SubresourceLoaderClient.h | 4 +- .../webkit/WebCore/loader/TextDocument.cpp | 27 +- .../webkit/WebCore/loader/TextResourceDecoder.cpp | 152 +- .../webkit/WebCore/loader/TextResourceDecoder.h | 36 +- .../webkit/WebCore/loader/ThreadableLoader.cpp | 72 + .../webkit/WebCore/loader/ThreadableLoader.h | 80 + .../webkit/WebCore/loader/ThreadableLoaderClient.h | 57 + .../WebCore/loader/ThreadableLoaderClientWrapper.h | 117 + .../WebCore/loader/WorkerThreadableLoader.cpp | 261 + .../webkit/WebCore/loader/WorkerThreadableLoader.h | 147 + .../WebCore/loader/appcache/ApplicationCache.cpp | 14 +- .../WebCore/loader/appcache/ApplicationCache.h | 7 +- .../loader/appcache/ApplicationCacheGroup.cpp | 756 +- .../loader/appcache/ApplicationCacheGroup.h | 78 +- .../loader/appcache/ApplicationCacheResource.cpp | 4 +- .../loader/appcache/ApplicationCacheResource.h | 2 +- .../loader/appcache/ApplicationCacheStorage.cpp | 116 +- .../loader/appcache/ApplicationCacheStorage.h | 11 +- .../loader/appcache/DOMApplicationCache.cpp | 33 +- .../WebCore/loader/appcache/DOMApplicationCache.h | 8 +- .../loader/appcache/DOMApplicationCache.idl | 8 +- .../WebCore/loader/appcache/ManifestParser.cpp | 41 +- .../WebCore/loader/archive/cf/LegacyWebArchive.cpp | 152 +- .../WebCore/loader/archive/cf/LegacyWebArchive.h | 27 +- .../loader/archive/cf/LegacyWebArchiveMac.mm | 20 +- .../WebCore/loader/cf/ResourceLoaderCFNet.cpp | 44 + .../webkit/WebCore/loader/icon/IconDatabase.cpp | 122 +- .../webkit/WebCore/loader/icon/IconDatabase.h | 10 +- .../WebCore/loader/icon/IconDatabaseNone.cpp | 47 +- .../webkit/WebCore/loader/icon/IconFetcher.cpp | 22 +- .../webkit/WebCore/loader/icon/IconLoader.cpp | 23 +- .../webkit/WebCore/loader/icon/IconRecord.cpp | 1 - src/3rdparty/webkit/WebCore/loader/loader.cpp | 63 +- src/3rdparty/webkit/WebCore/loader/loader.h | 6 + .../webkit/WebCore/make-generated-sources.sh | 2 +- src/3rdparty/webkit/WebCore/page/AXObjectCache.cpp | 239 - src/3rdparty/webkit/WebCore/page/AXObjectCache.h | 113 - .../WebCore/page/AccessibilityImageMapLink.cpp | 130 - .../WebCore/page/AccessibilityImageMapLink.h | 72 - .../webkit/WebCore/page/AccessibilityList.cpp | 94 - .../webkit/WebCore/page/AccessibilityList.h | 56 - .../webkit/WebCore/page/AccessibilityListBox.cpp | 177 - .../webkit/WebCore/page/AccessibilityListBox.h | 66 - .../WebCore/page/AccessibilityListBoxOption.cpp | 207 - .../WebCore/page/AccessibilityListBoxOption.h | 79 - .../webkit/WebCore/page/AccessibilityObject.cpp | 1031 - .../webkit/WebCore/page/AccessibilityObject.h | 424 - .../WebCore/page/AccessibilityRenderObject.cpp | 2387 - .../WebCore/page/AccessibilityRenderObject.h | 237 - .../webkit/WebCore/page/AccessibilityTable.cpp | 491 - .../webkit/WebCore/page/AccessibilityTable.h | 86 - .../webkit/WebCore/page/AccessibilityTableCell.cpp | 157 - .../webkit/WebCore/page/AccessibilityTableCell.h | 65 - .../WebCore/page/AccessibilityTableColumn.cpp | 167 - .../webkit/WebCore/page/AccessibilityTableColumn.h | 75 - .../page/AccessibilityTableHeaderContainer.cpp | 87 - .../page/AccessibilityTableHeaderContainer.h | 67 - .../webkit/WebCore/page/AccessibilityTableRow.cpp | 110 - .../webkit/WebCore/page/AccessibilityTableRow.h | 65 - src/3rdparty/webkit/WebCore/page/BarInfo.cpp | 10 + src/3rdparty/webkit/WebCore/page/BarInfo.h | 3 + src/3rdparty/webkit/WebCore/page/Chrome.cpp | 112 +- src/3rdparty/webkit/WebCore/page/Chrome.h | 9 +- src/3rdparty/webkit/WebCore/page/ChromeClient.h | 46 +- src/3rdparty/webkit/WebCore/page/Console.cpp | 59 +- src/3rdparty/webkit/WebCore/page/Console.h | 13 +- src/3rdparty/webkit/WebCore/page/Console.idl | 4 +- .../webkit/WebCore/page/ContextMenuController.cpp | 62 +- src/3rdparty/webkit/WebCore/page/Coordinates.cpp | 38 + src/3rdparty/webkit/WebCore/page/Coordinates.h | 88 + src/3rdparty/webkit/WebCore/page/Coordinates.idl | 41 + src/3rdparty/webkit/WebCore/page/DOMSelection.cpp | 103 +- src/3rdparty/webkit/WebCore/page/DOMSelection.h | 8 +- src/3rdparty/webkit/WebCore/page/DOMSelection.idl | 40 +- src/3rdparty/webkit/WebCore/page/DOMTimer.cpp | 171 + src/3rdparty/webkit/WebCore/page/DOMTimer.h | 75 + src/3rdparty/webkit/WebCore/page/DOMWindow.cpp | 969 +- src/3rdparty/webkit/WebCore/page/DOMWindow.h | 139 +- src/3rdparty/webkit/WebCore/page/DOMWindow.idl | 207 +- .../webkit/WebCore/page/DragController.cpp | 162 +- src/3rdparty/webkit/WebCore/page/DragController.h | 33 +- src/3rdparty/webkit/WebCore/page/EditorClient.h | 44 +- src/3rdparty/webkit/WebCore/page/EventHandler.cpp | 684 +- src/3rdparty/webkit/WebCore/page/EventHandler.h | 76 +- .../webkit/WebCore/page/FocusController.cpp | 60 +- src/3rdparty/webkit/WebCore/page/Frame.cpp | 778 +- src/3rdparty/webkit/WebCore/page/Frame.h | 127 +- .../webkit/WebCore/page/FrameLoadRequest.h | 7 - src/3rdparty/webkit/WebCore/page/FramePrivate.h | 99 - src/3rdparty/webkit/WebCore/page/FrameTree.cpp | 5 +- src/3rdparty/webkit/WebCore/page/FrameTree.h | 4 +- src/3rdparty/webkit/WebCore/page/FrameView.cpp | 871 +- src/3rdparty/webkit/WebCore/page/FrameView.h | 137 +- src/3rdparty/webkit/WebCore/page/Geolocation.cpp | 95 +- src/3rdparty/webkit/WebCore/page/Geolocation.h | 41 +- src/3rdparty/webkit/WebCore/page/Geoposition.cpp | 4 +- src/3rdparty/webkit/WebCore/page/Geoposition.h | 31 +- src/3rdparty/webkit/WebCore/page/Geoposition.idl | 10 +- src/3rdparty/webkit/WebCore/page/History.idl | 9 +- src/3rdparty/webkit/WebCore/page/Location.cpp | 12 +- src/3rdparty/webkit/WebCore/page/Location.idl | 23 +- src/3rdparty/webkit/WebCore/page/Navigator.cpp | 16 +- src/3rdparty/webkit/WebCore/page/Navigator.idl | 5 +- src/3rdparty/webkit/WebCore/page/NavigatorBase.cpp | 4 +- src/3rdparty/webkit/WebCore/page/Page.cpp | 130 +- src/3rdparty/webkit/WebCore/page/Page.h | 26 +- .../webkit/WebCore/page/PageGroupLoadDeferrer.cpp | 72 + .../webkit/WebCore/page/PageGroupLoadDeferrer.h | 41 + src/3rdparty/webkit/WebCore/page/PositionOptions.h | 8 +- src/3rdparty/webkit/WebCore/page/PrintContext.cpp | 4 +- src/3rdparty/webkit/WebCore/page/Screen.cpp | 5 + src/3rdparty/webkit/WebCore/page/Screen.h | 2 + .../webkit/WebCore/page/SecurityOrigin.cpp | 35 +- src/3rdparty/webkit/WebCore/page/SecurityOrigin.h | 6 + src/3rdparty/webkit/WebCore/page/Settings.cpp | 69 +- src/3rdparty/webkit/WebCore/page/Settings.h | 67 +- src/3rdparty/webkit/WebCore/page/WebKitPoint.h | 63 + src/3rdparty/webkit/WebCore/page/WebKitPoint.idl | 33 + .../WebCore/page/android/DragControllerAndroid.cpp | 58 + .../WebCore/page/android/EventHandlerAndroid.cpp | 129 + .../page/android/InspectorControllerAndroid.cpp | 106 + .../WebCore/page/animation/AnimationBase.cpp | 420 +- .../webkit/WebCore/page/animation/AnimationBase.h | 44 +- .../WebCore/page/animation/AnimationController.cpp | 379 +- .../WebCore/page/animation/AnimationController.h | 27 +- .../page/animation/AnimationControllerPrivate.h | 135 + .../WebCore/page/animation/CompositeAnimation.cpp | 638 +- .../WebCore/page/animation/CompositeAnimation.h | 47 +- .../WebCore/page/animation/ImplicitAnimation.cpp | 89 +- .../WebCore/page/animation/ImplicitAnimation.h | 9 +- .../WebCore/page/animation/KeyframeAnimation.cpp | 190 +- .../WebCore/page/animation/KeyframeAnimation.h | 13 +- .../page/chromium/AccessibilityObjectChromium.cpp | 37 - .../page/chromium/AccessibilityObjectWrapper.h | 50 - .../WebCore/page/qt/AccessibilityObjectQt.cpp | 34 - src/3rdparty/webkit/WebCore/page/qt/FrameQt.cpp | 18 +- .../webkit/WebCore/page/win/AXObjectCacheWin.cpp | 61 - .../WebCore/page/win/AccessibilityObjectWin.cpp | 40 - .../page/win/AccessibilityObjectWrapperWin.h | 54 - .../webkit/WebCore/page/win/FrameCGWin.cpp | 5 +- src/3rdparty/webkit/WebCore/page/win/FrameWin.cpp | 5 +- src/3rdparty/webkit/WebCore/platform/Arena.cpp | 23 - .../webkit/WebCore/platform/ContentType.cpp | 73 + src/3rdparty/webkit/WebCore/platform/ContentType.h | 47 + .../webkit/WebCore/platform/ContextMenu.cpp | 133 +- src/3rdparty/webkit/WebCore/platform/ContextMenu.h | 1 - .../webkit/WebCore/platform/ContextMenuItem.h | 15 + src/3rdparty/webkit/WebCore/platform/CookieJar.h | 2 +- .../webkit/WebCore/platform/CrossThreadCopier.cpp | 62 + .../webkit/WebCore/platform/CrossThreadCopier.h | 109 + src/3rdparty/webkit/WebCore/platform/Cursor.h | 7 + .../WebCore/platform/DeprecatedPtrListImpl.cpp | 2 +- src/3rdparty/webkit/WebCore/platform/FileSystem.h | 11 +- .../webkit/WebCore/platform/GeolocationService.cpp | 4 +- .../webkit/WebCore/platform/GeolocationService.h | 12 +- src/3rdparty/webkit/WebCore/platform/HostWindow.h | 7 +- src/3rdparty/webkit/WebCore/platform/KURL.cpp | 185 +- src/3rdparty/webkit/WebCore/platform/KURL.h | 40 +- .../webkit/WebCore/platform/KURLGoogle.cpp | 962 + .../webkit/WebCore/platform/KURLGooglePrivate.h | 115 + .../webkit/WebCore/platform/KeyboardCodes.h | 574 + .../webkit/WebCore/platform/LocalizedStrings.h | 13 + src/3rdparty/webkit/WebCore/platform/Logging.cpp | 30 + src/3rdparty/webkit/WebCore/platform/Logging.h | 3 + .../webkit/WebCore/platform/MIMETypeRegistry.cpp | 120 +- .../webkit/WebCore/platform/MIMETypeRegistry.h | 4 + .../webkit/WebCore/platform/NotImplemented.h | 2 +- .../webkit/WebCore/platform/PlatformMouseEvent.h | 71 +- .../webkit/WebCore/platform/PlatformWheelEvent.h | 71 +- .../webkit/WebCore/platform/PopupMenuStyle.h | 10 +- .../webkit/WebCore/platform/RunLoopTimer.h | 79 + .../webkit/WebCore/platform/ScrollView.cpp | 186 +- src/3rdparty/webkit/WebCore/platform/ScrollView.h | 17 +- src/3rdparty/webkit/WebCore/platform/Scrollbar.cpp | 69 +- src/3rdparty/webkit/WebCore/platform/Scrollbar.h | 8 +- .../webkit/WebCore/platform/ScrollbarTheme.h | 1 + .../webkit/WebCore/platform/SharedBuffer.h | 4 +- src/3rdparty/webkit/WebCore/platform/SharedTimer.h | 43 +- .../webkit/WebCore/platform/SuddenTermination.h | 43 + src/3rdparty/webkit/WebCore/platform/SystemTime.h | 4 - src/3rdparty/webkit/WebCore/platform/ThemeTypes.h | 5 +- src/3rdparty/webkit/WebCore/platform/ThreadCheck.h | 14 +- .../webkit/WebCore/platform/ThreadGlobalData.cpp | 19 +- .../webkit/WebCore/platform/ThreadGlobalData.h | 11 +- .../webkit/WebCore/platform/ThreadTimers.cpp | 158 + .../webkit/WebCore/platform/ThreadTimers.h | 69 + src/3rdparty/webkit/WebCore/platform/Timer.cpp | 177 +- src/3rdparty/webkit/WebCore/platform/Timer.h | 18 +- src/3rdparty/webkit/WebCore/platform/Widget.h | 4 +- .../WebCore/platform/android/ClipboardAndroid.cpp | 105 + .../WebCore/platform/android/ClipboardAndroid.h | 64 + .../WebCore/platform/animation/Animation.cpp | 39 +- .../webkit/WebCore/platform/animation/Animation.h | 25 +- .../WebCore/platform/graphics/BitmapImage.cpp | 31 +- .../webkit/WebCore/platform/graphics/BitmapImage.h | 26 +- .../webkit/WebCore/platform/graphics/Color.cpp | 41 +- .../webkit/WebCore/platform/graphics/Color.h | 7 +- .../WebCore/platform/graphics/FloatPoint.cpp | 2 +- .../WebCore/platform/graphics/FloatPoint3D.cpp | 2 - .../WebCore/platform/graphics/FloatPoint3D.h | 4 - .../webkit/WebCore/platform/graphics/FloatQuad.cpp | 39 + .../webkit/WebCore/platform/graphics/FloatQuad.h | 8 + .../webkit/WebCore/platform/graphics/Font.cpp | 71 +- .../webkit/WebCore/platform/graphics/Font.h | 36 +- .../webkit/WebCore/platform/graphics/FontCache.cpp | 43 +- .../webkit/WebCore/platform/graphics/FontCache.h | 43 +- .../WebCore/platform/graphics/FontDescription.h | 6 +- .../WebCore/platform/graphics/FontFallbackList.cpp | 22 +- .../WebCore/platform/graphics/FontFallbackList.h | 2 +- .../WebCore/platform/graphics/FontFastPath.cpp | 22 +- .../WebCore/platform/graphics/GeneratedImage.cpp | 2 +- .../webkit/WebCore/platform/graphics/GlyphBuffer.h | 14 +- .../platform/graphics/GlyphPageTreeNode.cpp | 28 +- .../WebCore/platform/graphics/GlyphPageTreeNode.h | 67 +- .../WebCore/platform/graphics/GlyphWidthMap.cpp | 37 +- .../WebCore/platform/graphics/GlyphWidthMap.h | 43 +- .../webkit/WebCore/platform/graphics/Gradient.cpp | 9 + .../webkit/WebCore/platform/graphics/Gradient.h | 10 + .../WebCore/platform/graphics/GraphicsContext.cpp | 85 +- .../WebCore/platform/graphics/GraphicsContext.h | 72 +- .../platform/graphics/GraphicsContextPrivate.h | 18 +- .../WebCore/platform/graphics/GraphicsLayer.cpp | 545 + .../WebCore/platform/graphics/GraphicsLayer.h | 409 + .../platform/graphics/GraphicsLayerClient.h | 69 + .../WebCore/platform/graphics/GraphicsTypes.h | 8 + .../webkit/WebCore/platform/graphics/Image.cpp | 24 +- .../webkit/WebCore/platform/graphics/Image.h | 29 +- .../webkit/WebCore/platform/graphics/ImageBuffer.h | 14 +- .../webkit/WebCore/platform/graphics/ImageSource.h | 5 + .../webkit/WebCore/platform/graphics/IntPoint.h | 1 + .../webkit/WebCore/platform/graphics/IntSize.h | 6 + .../WebCore/platform/graphics/MediaPlayer.cpp | 282 +- .../webkit/WebCore/platform/graphics/MediaPlayer.h | 103 +- .../WebCore/platform/graphics/MediaPlayerPrivate.h | 98 + .../webkit/WebCore/platform/graphics/Path.cpp | 2 +- .../webkit/WebCore/platform/graphics/Path.h | 17 +- .../webkit/WebCore/platform/graphics/Pattern.h | 6 +- .../platform/graphics/SegmentedFontData.cpp | 17 +- .../WebCore/platform/graphics/SegmentedFontData.h | 12 +- .../WebCore/platform/graphics/SimpleFontData.cpp | 86 +- .../WebCore/platform/graphics/SimpleFontData.h | 52 +- .../WebCore/platform/graphics/WidthIterator.cpp | 27 +- .../WebCore/platform/graphics/WidthIterator.h | 5 +- .../WebCore/platform/graphics/filters/FEBlend.cpp | 8 +- .../WebCore/platform/graphics/filters/FEBlend.h | 10 +- .../platform/graphics/filters/FEColorMatrix.cpp | 8 +- .../platform/graphics/filters/FEColorMatrix.h | 10 +- .../graphics/filters/FEComponentTransfer.cpp | 8 +- .../graphics/filters/FEComponentTransfer.h | 11 +- .../platform/graphics/filters/FEComposite.cpp | 8 +- .../platform/graphics/filters/FEComposite.h | 10 +- .../WebCore/platform/graphics/filters/Filter.h | 52 + .../platform/graphics/filters/FilterEffect.cpp | 46 + .../platform/graphics/filters/FilterEffect.h | 81 + .../platform/graphics/filters/SourceAlpha.cpp | 54 + .../platform/graphics/filters/SourceAlpha.h | 47 + .../platform/graphics/filters/SourceGraphic.cpp | 54 + .../platform/graphics/filters/SourceGraphic.h | 48 + .../graphics/opentype/OpenTypeUtilities.cpp | 408 + .../platform/graphics/opentype/OpenTypeUtilities.h | 58 + .../WebCore/platform/graphics/qt/FontCacheQt.cpp | 19 + .../platform/graphics/qt/FontPlatformDataQt.cpp | 2 + .../webkit/WebCore/platform/graphics/qt/FontQt.cpp | 50 +- .../WebCore/platform/graphics/qt/GradientQt.cpp | 12 + .../platform/graphics/qt/GraphicsContextQt.cpp | 80 +- .../webkit/WebCore/platform/graphics/qt/IconQt.cpp | 1 - .../WebCore/platform/graphics/qt/ImageBufferQt.cpp | 5 +- .../WebCore/platform/graphics/qt/ImageQt.cpp | 33 +- .../WebCore/platform/graphics/qt/ImageSourceQt.cpp | 3 +- .../graphics/qt/MediaPlayerPrivatePhonon.cpp | 58 +- .../graphics/qt/MediaPlayerPrivatePhonon.h | 43 +- .../webkit/WebCore/platform/graphics/qt/PathQt.cpp | 37 +- .../WebCore/platform/graphics/qt/PatternQt.cpp | 5 +- .../platform/graphics/qt/SimpleFontDataQt.cpp | 11 +- .../graphics/qt/TransformationMatrixQt.cpp | 167 +- .../transforms/Matrix3DTransformOperation.cpp | 56 + .../transforms/Matrix3DTransformOperation.h | 72 + .../transforms/MatrixTransformOperation.cpp | 4 +- .../graphics/transforms/MatrixTransformOperation.h | 19 +- .../transforms/PerspectiveTransformOperation.cpp | 58 + .../transforms/PerspectiveTransformOperation.h | 71 + .../transforms/RotateTransformOperation.cpp | 61 +- .../graphics/transforms/RotateTransformOperation.h | 29 +- .../transforms/ScaleTransformOperation.cpp | 9 +- .../graphics/transforms/ScaleTransformOperation.h | 23 +- .../graphics/transforms/TransformOperation.h | 26 +- .../graphics/transforms/TransformOperations.h | 10 + .../graphics/transforms/TransformationMatrix.cpp | 1076 +- .../graphics/transforms/TransformationMatrix.h | 300 +- .../transforms/TranslateTransformOperation.cpp | 7 +- .../transforms/TranslateTransformOperation.h | 25 +- .../WebCore/platform/image-decoders/ImageDecoder.h | 270 +- .../webkit/WebCore/platform/mac/ClipboardMac.mm | 129 +- .../webkit/WebCore/platform/mac/CookieJar.mm | 5 +- .../webkit/WebCore/platform/mac/DragDataMac.mm | 2 +- .../webkit/WebCore/platform/mac/DragImageMac.mm | 31 +- .../webkit/WebCore/platform/mac/FoundationExtras.h | 3 + .../WebCore/platform/mac/GeolocationServiceMac.h | 75 + .../WebCore/platform/mac/GeolocationServiceMac.mm | 219 + .../platform/mac/LocalCurrentGraphicsContext.h | 4 + .../WebCore/platform/mac/LocalizedStringsMac.mm | 104 + .../webkit/WebCore/platform/mac/PasteboardMac.mm | 23 +- .../WebCore/platform/mac/PlatformMouseEventMac.mm | 40 +- .../WebCore/platform/mac/PlatformScreenMac.mm | 6 +- .../platform/mac/RuntimeApplicationChecks.h | 36 + .../platform/mac/RuntimeApplicationChecks.mm | 44 + .../WebCore/platform/mac/ScrollbarThemeMac.mm | 28 +- .../webkit/WebCore/platform/mac/SharedBufferMac.mm | 10 +- .../webkit/WebCore/platform/mac/SharedTimerMac.mm | 10 +- .../WebCore/platform/mac/SuddenTermination.mm | 45 + .../webkit/WebCore/platform/mac/SystemTimeMac.cpp | 5 - .../webkit/WebCore/platform/mac/ThreadCheck.mm | 62 +- .../WebCore/platform/mac/WebCoreKeyGenerator.m | 9 +- .../WebCore/platform/mac/WebCoreObjCExtras.mm | 3 + .../WebCore/platform/mac/WebCoreSystemInterface.h | 21 +- .../WebCore/platform/mac/WebCoreSystemInterface.mm | 14 +- .../WebCore/platform/mac/WebCoreTextRenderer.h | 40 - .../WebCore/platform/mac/WebCoreTextRenderer.mm | 93 - .../webkit/WebCore/platform/mac/WebFontCache.h | 5 +- .../webkit/WebCore/platform/mac/WebFontCache.mm | 24 +- .../webkit/WebCore/platform/mac/WheelEventMac.mm | 18 +- .../webkit/WebCore/platform/mac/WidgetMac.mm | 26 +- .../webkit/WebCore/platform/network/FormData.cpp | 27 +- .../webkit/WebCore/platform/network/FormData.h | 9 +- .../WebCore/platform/network/HTTPHeaderMap.cpp | 63 + .../WebCore/platform/network/HTTPHeaderMap.h | 14 +- .../WebCore/platform/network/HTTPParsers.cpp | 41 +- .../WebCore/platform/network/ResourceErrorBase.cpp | 17 +- .../WebCore/platform/network/ResourceErrorBase.h | 7 +- .../WebCore/platform/network/ResourceHandle.cpp | 26 + .../WebCore/platform/network/ResourceHandle.h | 21 +- .../platform/network/ResourceHandleClient.h | 8 +- .../platform/network/ResourceHandleInternal.h | 25 +- .../platform/network/ResourceRequestBase.cpp | 104 +- .../WebCore/platform/network/ResourceRequestBase.h | 46 +- .../platform/network/ResourceResponseBase.cpp | 261 +- .../platform/network/ResourceResponseBase.h | 102 +- .../platform/network/chromium/ResourceResponse.h | 83 - .../platform/network/qt/QNetworkReplyHandler.cpp | 5 +- .../platform/network/qt/QNetworkReplyHandler.h | 1 - .../platform/network/qt/ResourceHandleQt.cpp | 2 +- .../WebCore/platform/posix/FileSystemPOSIX.cpp | 12 +- .../webkit/WebCore/platform/qt/ContextMenuQt.cpp | 1 - .../webkit/WebCore/platform/qt/CookieJarQt.cpp | 6 +- .../webkit/WebCore/platform/qt/DragDataQt.cpp | 1 - .../webkit/WebCore/platform/qt/FileSystemQt.cpp | 29 +- src/3rdparty/webkit/WebCore/platform/qt/KURLQt.cpp | 3 +- .../webkit/WebCore/platform/qt/KeyboardCodes.h | 561 - .../webkit/WebCore/platform/qt/Localizations.cpp | 5 +- .../webkit/WebCore/platform/qt/MenuEventProxy.h | 54 - .../WebCore/platform/qt/PlatformMouseEventQt.cpp | 4 +- .../webkit/WebCore/platform/qt/PopupMenuQt.cpp | 1 - .../webkit/WebCore/platform/qt/QWebPopup.cpp | 4 +- .../webkit/WebCore/platform/qt/RenderThemeQt.cpp | 10 +- .../webkit/WebCore/platform/qt/ScrollViewQt.cpp | 20 +- .../webkit/WebCore/platform/qt/SharedTimerQt.cpp | 2 +- .../webkit/WebCore/platform/qt/SystemTimeQt.cpp | 46 - .../WebCore/platform/qt/TemporaryLinkStubs.cpp | 33 - .../webkit/WebCore/platform/qt/WheelEventQt.cpp | 13 +- .../webkit/WebCore/platform/text/AtomicString.cpp | 6 +- .../webkit/WebCore/platform/text/AtomicString.h | 20 +- .../webkit/WebCore/platform/text/Base64.cpp | 6 +- .../webkit/WebCore/platform/text/BidiContext.cpp | 31 +- .../webkit/WebCore/platform/text/BidiContext.h | 33 +- .../webkit/WebCore/platform/text/BidiResolver.h | 21 +- .../webkit/WebCore/platform/text/CString.cpp | 25 +- .../webkit/WebCore/platform/text/CString.h | 17 +- .../webkit/WebCore/platform/text/CharacterNames.h | 2 + .../webkit/WebCore/platform/text/PlatformString.h | 19 +- .../WebCore/platform/text/RegularExpression.cpp | 121 +- .../WebCore/platform/text/RegularExpression.h | 14 +- .../webkit/WebCore/platform/text/String.cpp | 98 +- .../webkit/WebCore/platform/text/StringBuilder.cpp | 9 +- .../webkit/WebCore/platform/text/StringImpl.cpp | 253 +- .../webkit/WebCore/platform/text/StringImpl.h | 72 +- .../webkit/WebCore/platform/text/TextBoundaries.h | 5 + .../WebCore/platform/text/TextBoundariesICU.cpp | 1 + .../WebCore/platform/text/TextBreakIterator.h | 12 + .../WebCore/platform/text/TextBreakIteratorICU.cpp | 116 + .../webkit/WebCore/platform/text/TextCodec.h | 3 +- .../webkit/WebCore/platform/text/TextCodecICU.cpp | 10 +- .../webkit/WebCore/platform/text/TextCodecICU.h | 2 + .../WebCore/platform/text/TextCodecLatin1.cpp | 14 +- .../WebCore/platform/text/TextCodecUTF16.cpp | 11 +- .../WebCore/platform/text/TextCodecUserDefined.cpp | 12 +- .../webkit/WebCore/platform/text/TextDecoder.cpp | 129 - .../webkit/WebCore/platform/text/TextDecoder.h | 64 - .../webkit/WebCore/platform/text/TextEncoding.cpp | 50 +- .../webkit/WebCore/platform/text/TextEncoding.h | 27 +- .../WebCore/platform/text/TextEncodingDetector.h | 48 + .../platform/text/TextEncodingDetectorICU.cpp | 129 + .../platform/text/TextEncodingDetectorNone.cpp | 44 + .../WebCore/platform/text/TextEncodingRegistry.cpp | 8 +- .../WebCore/platform/text/TextEncodingRegistry.h | 10 +- .../webkit/WebCore/platform/text/TextStream.cpp | 5 + .../webkit/WebCore/platform/text/TextStream.h | 1 + .../WebCore/platform/text/cf/StringImplCF.cpp | 131 +- .../webkit/WebCore/platform/text/mac/ShapeArabic.c | 9 +- .../WebCore/platform/text/mac/StringImplMac.mm | 8 +- .../webkit/WebCore/platform/text/mac/StringMac.mm | 1 + .../WebCore/platform/text/mac/TextBoundaries.mm | 2 + .../WebCore/platform/text/mac/TextCodecMac.cpp | 6 +- .../platform/text/qt/TextBreakIteratorQt.cpp | 11 + .../WebCore/platform/text/qt/TextCodecQt.cpp | 4 +- .../text/win/TextBreakIteratorInternalICUWin.cpp | 6 +- .../webkit/WebCore/platform/win/SystemTimeWin.cpp | 9 - .../webkit/WebCore/plugins/PluginDataNone.cpp | 44 + .../webkit/WebCore/plugins/PluginPackage.cpp | 86 +- .../webkit/WebCore/plugins/PluginPackage.h | 1 + .../webkit/WebCore/plugins/PluginPackageNone.cpp | 77 + .../webkit/WebCore/plugins/PluginStream.cpp | 8 +- src/3rdparty/webkit/WebCore/plugins/PluginView.cpp | 31 +- src/3rdparty/webkit/WebCore/plugins/PluginView.h | 25 +- .../webkit/WebCore/plugins/PluginViewNone.cpp | 156 + .../WebCore/plugins/mac/PluginPackageMac.cpp | 73 +- .../webkit/WebCore/plugins/mac/PluginViewMac.cpp | 10 +- src/3rdparty/webkit/WebCore/plugins/npfunctions.h | 9 + .../WebCore/plugins/qt/PluginContainerQt.cpp | 149 + .../webkit/WebCore/plugins/qt/PluginContainerQt.h | 63 + .../webkit/WebCore/plugins/qt/PluginPackageQt.cpp | 72 +- .../webkit/WebCore/plugins/qt/PluginViewQt.cpp | 149 +- .../WebCore/plugins/win/PluginPackageWin.cpp | 58 +- .../webkit/WebCore/plugins/win/PluginViewWin.cpp | 143 +- .../webkit/WebCore/rendering/EllipsisBox.cpp | 20 +- .../webkit/WebCore/rendering/EllipsisBox.h | 11 +- .../webkit/WebCore/rendering/FixedTableLayout.cpp | 42 +- .../webkit/WebCore/rendering/HitTestRequest.h | 34 +- .../webkit/WebCore/rendering/HitTestResult.cpp | 20 +- .../webkit/WebCore/rendering/HitTestResult.h | 1 + .../webkit/WebCore/rendering/InlineBox.cpp | 81 +- src/3rdparty/webkit/WebCore/rendering/InlineBox.h | 124 +- .../webkit/WebCore/rendering/InlineFlowBox.cpp | 570 +- .../webkit/WebCore/rendering/InlineFlowBox.h | 62 +- .../webkit/WebCore/rendering/InlineTextBox.cpp | 344 +- .../webkit/WebCore/rendering/InlineTextBox.h | 59 +- .../webkit/WebCore/rendering/LayoutState.cpp | 25 +- .../webkit/WebCore/rendering/LayoutState.h | 11 +- .../webkit/WebCore/rendering/ListMarkerBox.cpp | 45 - .../webkit/WebCore/rendering/ListMarkerBox.h | 41 - .../WebCore/rendering/MediaControlElements.cpp | 146 +- .../WebCore/rendering/MediaControlElements.h | 36 +- .../WebCore/rendering/OverlapTestRequestClient.h | 39 + .../WebCore/rendering/PointerEventsHitRules.h | 2 +- .../webkit/WebCore/rendering/RenderApplet.cpp | 27 +- .../webkit/WebCore/rendering/RenderApplet.h | 9 +- .../webkit/WebCore/rendering/RenderArena.cpp | 4 +- src/3rdparty/webkit/WebCore/rendering/RenderBR.cpp | 15 +- src/3rdparty/webkit/WebCore/rendering/RenderBR.h | 8 +- .../webkit/WebCore/rendering/RenderBlock.cpp | 2006 +- .../webkit/WebCore/rendering/RenderBlock.h | 234 +- .../webkit/WebCore/rendering/RenderBox.cpp | 1611 +- src/3rdparty/webkit/WebCore/rendering/RenderBox.h | 298 +- .../WebCore/rendering/RenderBoxModelObject.cpp | 1177 + .../WebCore/rendering/RenderBoxModelObject.h | 135 + .../webkit/WebCore/rendering/RenderButton.cpp | 36 +- .../webkit/WebCore/rendering/RenderButton.h | 22 +- .../webkit/WebCore/rendering/RenderContainer.cpp | 701 - .../webkit/WebCore/rendering/RenderContainer.h | 75 - .../webkit/WebCore/rendering/RenderCounter.cpp | 15 +- .../webkit/WebCore/rendering/RenderCounter.h | 1 - .../webkit/WebCore/rendering/RenderFieldset.cpp | 60 +- .../webkit/WebCore/rendering/RenderFieldset.h | 5 +- .../WebCore/rendering/RenderFileUploadControl.cpp | 22 +- .../WebCore/rendering/RenderFileUploadControl.h | 2 +- .../webkit/WebCore/rendering/RenderFlexibleBox.cpp | 248 +- .../webkit/WebCore/rendering/RenderFlexibleBox.h | 4 +- .../webkit/WebCore/rendering/RenderFlow.cpp | 883 - src/3rdparty/webkit/WebCore/rendering/RenderFlow.h | 146 - .../WebCore/rendering/RenderForeignObject.cpp | 95 +- .../webkit/WebCore/rendering/RenderForeignObject.h | 19 +- .../webkit/WebCore/rendering/RenderFrame.cpp | 39 +- .../webkit/WebCore/rendering/RenderFrame.h | 14 +- .../webkit/WebCore/rendering/RenderFrameSet.cpp | 45 +- .../webkit/WebCore/rendering/RenderFrameSet.h | 12 +- .../webkit/WebCore/rendering/RenderHTMLCanvas.cpp | 16 +- .../webkit/WebCore/rendering/RenderImage.cpp | 91 +- .../webkit/WebCore/rendering/RenderImage.h | 16 + .../rendering/RenderImageGeneratedContent.h | 14 +- .../webkit/WebCore/rendering/RenderInline.cpp | 876 +- .../webkit/WebCore/rendering/RenderInline.h | 129 +- .../webkit/WebCore/rendering/RenderLayer.cpp | 1481 +- .../webkit/WebCore/rendering/RenderLayer.h | 220 +- .../WebCore/rendering/RenderLayerBacking.cpp | 1023 + .../webkit/WebCore/rendering/RenderLayerBacking.h | 172 + .../WebCore/rendering/RenderLayerCompositor.cpp | 827 + .../WebCore/rendering/RenderLayerCompositor.h | 145 + .../webkit/WebCore/rendering/RenderLegend.cpp | 36 - .../webkit/WebCore/rendering/RenderLegend.h | 42 - .../webkit/WebCore/rendering/RenderLineBoxList.cpp | 333 + .../webkit/WebCore/rendering/RenderLineBoxList.h | 86 + .../webkit/WebCore/rendering/RenderListBox.cpp | 121 +- .../webkit/WebCore/rendering/RenderListBox.h | 9 +- .../webkit/WebCore/rendering/RenderListItem.cpp | 32 +- .../webkit/WebCore/rendering/RenderListItem.h | 2 +- .../webkit/WebCore/rendering/RenderListMarker.cpp | 67 +- .../webkit/WebCore/rendering/RenderListMarker.h | 10 +- .../webkit/WebCore/rendering/RenderMarquee.cpp | 29 +- .../webkit/WebCore/rendering/RenderMarquee.h | 3 +- .../webkit/WebCore/rendering/RenderMedia.cpp | 180 +- .../webkit/WebCore/rendering/RenderMedia.h | 27 +- .../WebCore/rendering/RenderMediaControls.cpp | 152 + .../webkit/WebCore/rendering/RenderMediaControls.h | 43 + .../webkit/WebCore/rendering/RenderMenuList.cpp | 138 +- .../webkit/WebCore/rendering/RenderMenuList.h | 15 +- .../webkit/WebCore/rendering/RenderObject.cpp | 2466 +- .../webkit/WebCore/rendering/RenderObject.h | 775 +- .../WebCore/rendering/RenderObjectChildList.cpp | 426 + .../WebCore/rendering/RenderObjectChildList.h | 67 + .../webkit/WebCore/rendering/RenderPart.cpp | 86 +- src/3rdparty/webkit/WebCore/rendering/RenderPart.h | 24 +- .../webkit/WebCore/rendering/RenderPartObject.cpp | 158 +- .../webkit/WebCore/rendering/RenderPartObject.h | 10 +- .../webkit/WebCore/rendering/RenderPath.cpp | 186 +- src/3rdparty/webkit/WebCore/rendering/RenderPath.h | 46 +- .../webkit/WebCore/rendering/RenderReplaced.cpp | 140 +- .../webkit/WebCore/rendering/RenderReplaced.h | 16 +- .../webkit/WebCore/rendering/RenderReplica.cpp | 22 +- .../webkit/WebCore/rendering/RenderReplica.h | 2 +- .../webkit/WebCore/rendering/RenderSVGBlock.h | 3 +- .../WebCore/rendering/RenderSVGContainer.cpp | 356 +- .../webkit/WebCore/rendering/RenderSVGContainer.h | 78 +- .../WebCore/rendering/RenderSVGGradientStop.cpp | 4 +- .../WebCore/rendering/RenderSVGGradientStop.h | 16 +- .../WebCore/rendering/RenderSVGHiddenContainer.cpp | 36 +- .../WebCore/rendering/RenderSVGHiddenContainer.h | 29 +- .../webkit/WebCore/rendering/RenderSVGImage.cpp | 103 +- .../webkit/WebCore/rendering/RenderSVGImage.h | 38 +- .../webkit/WebCore/rendering/RenderSVGInline.cpp | 57 +- .../webkit/WebCore/rendering/RenderSVGInline.h | 18 +- .../WebCore/rendering/RenderSVGInlineText.cpp | 92 +- .../webkit/WebCore/rendering/RenderSVGInlineText.h | 17 +- .../WebCore/rendering/RenderSVGModelObject.cpp | 97 + .../WebCore/rendering/RenderSVGModelObject.h | 71 + .../webkit/WebCore/rendering/RenderSVGRoot.cpp | 305 +- .../webkit/WebCore/rendering/RenderSVGRoot.h | 53 +- .../webkit/WebCore/rendering/RenderSVGTSpan.cpp | 44 - .../webkit/WebCore/rendering/RenderSVGTSpan.h | 11 +- .../webkit/WebCore/rendering/RenderSVGText.cpp | 145 +- .../webkit/WebCore/rendering/RenderSVGText.h | 37 +- .../webkit/WebCore/rendering/RenderSVGTextPath.cpp | 51 +- .../webkit/WebCore/rendering/RenderSVGTextPath.h | 2 - .../rendering/RenderSVGTransformableContainer.cpp | 21 +- .../rendering/RenderSVGTransformableContainer.h | 15 +- .../rendering/RenderSVGViewportContainer.cpp | 126 +- .../WebCore/rendering/RenderSVGViewportContainer.h | 23 +- .../webkit/WebCore/rendering/RenderScrollbar.cpp | 20 +- .../webkit/WebCore/rendering/RenderScrollbar.h | 15 +- .../WebCore/rendering/RenderScrollbarPart.cpp | 38 +- .../webkit/WebCore/rendering/RenderScrollbarPart.h | 5 +- .../webkit/WebCore/rendering/RenderSelectionInfo.h | 104 + .../webkit/WebCore/rendering/RenderSlider.cpp | 395 +- .../webkit/WebCore/rendering/RenderSlider.h | 39 +- .../webkit/WebCore/rendering/RenderTable.cpp | 233 +- .../webkit/WebCore/rendering/RenderTable.h | 39 +- .../webkit/WebCore/rendering/RenderTableCell.cpp | 174 +- .../webkit/WebCore/rendering/RenderTableCell.h | 43 +- .../webkit/WebCore/rendering/RenderTableCol.cpp | 13 +- .../webkit/WebCore/rendering/RenderTableCol.h | 14 +- .../webkit/WebCore/rendering/RenderTableRow.cpp | 44 +- .../webkit/WebCore/rendering/RenderTableRow.h | 17 +- .../WebCore/rendering/RenderTableSection.cpp | 263 +- .../webkit/WebCore/rendering/RenderTableSection.h | 34 +- .../webkit/WebCore/rendering/RenderText.cpp | 428 +- src/3rdparty/webkit/WebCore/rendering/RenderText.h | 74 +- .../webkit/WebCore/rendering/RenderTextControl.cpp | 175 +- .../webkit/WebCore/rendering/RenderTextControl.h | 42 +- .../rendering/RenderTextControlMultiLine.cpp | 49 +- .../WebCore/rendering/RenderTextControlMultiLine.h | 1 - .../rendering/RenderTextControlSingleLine.cpp | 268 +- .../rendering/RenderTextControlSingleLine.h | 23 +- .../WebCore/rendering/RenderTextFragment.cpp | 4 +- .../webkit/WebCore/rendering/RenderTheme.cpp | 172 +- .../webkit/WebCore/rendering/RenderTheme.h | 66 +- .../WebCore/rendering/RenderThemeChromiumLinux.cpp | 607 + .../WebCore/rendering/RenderThemeChromiumLinux.h | 138 + .../WebCore/rendering/RenderThemeChromiumMac.h | 215 + .../WebCore/rendering/RenderThemeChromiumMac.mm | 1997 + .../WebCore/rendering/RenderThemeChromiumSkia.cpp | 2 + .../WebCore/rendering/RenderThemeChromiumSkia.h | 2 + .../WebCore/rendering/RenderThemeChromiumWin.cpp | 930 + .../WebCore/rendering/RenderThemeChromiumWin.h | 158 + .../webkit/WebCore/rendering/RenderThemeMac.h | 18 +- .../webkit/WebCore/rendering/RenderThemeSafari.cpp | 109 +- .../webkit/WebCore/rendering/RenderThemeWin.cpp | 298 +- .../webkit/WebCore/rendering/RenderThemeWin.h | 21 +- .../webkit/WebCore/rendering/RenderTreeAsText.cpp | 124 +- .../webkit/WebCore/rendering/RenderVideo.cpp | 24 +- .../webkit/WebCore/rendering/RenderView.cpp | 281 +- src/3rdparty/webkit/WebCore/rendering/RenderView.h | 151 +- .../webkit/WebCore/rendering/RenderWidget.cpp | 146 +- .../webkit/WebCore/rendering/RenderWidget.h | 48 +- .../webkit/WebCore/rendering/RootInlineBox.cpp | 120 +- .../webkit/WebCore/rendering/RootInlineBox.h | 44 +- .../WebCore/rendering/SVGCharacterLayoutInfo.cpp | 4 +- .../webkit/WebCore/rendering/SVGInlineFlowBox.cpp | 3 +- .../webkit/WebCore/rendering/SVGInlineFlowBox.h | 9 +- .../webkit/WebCore/rendering/SVGInlineTextBox.cpp | 93 +- .../webkit/WebCore/rendering/SVGInlineTextBox.h | 12 +- .../webkit/WebCore/rendering/SVGRenderSupport.cpp | 112 +- .../webkit/WebCore/rendering/SVGRenderSupport.h | 53 +- .../WebCore/rendering/SVGRenderTreeAsText.cpp | 202 +- .../webkit/WebCore/rendering/SVGRenderTreeAsText.h | 6 +- .../webkit/WebCore/rendering/SVGRootInlineBox.cpp | 128 +- .../webkit/WebCore/rendering/SVGRootInlineBox.h | 7 +- .../webkit/WebCore/rendering/ScrollBehavior.cpp | 55 + .../webkit/WebCore/rendering/ScrollBehavior.h | 78 + .../WebCore/rendering/TextControlInnerElements.cpp | 37 +- .../webkit/WebCore/rendering/TransformState.cpp | 169 + .../webkit/WebCore/rendering/TransformState.h | 133 + src/3rdparty/webkit/WebCore/rendering/bidi.cpp | 546 +- src/3rdparty/webkit/WebCore/rendering/bidi.h | 2 - .../webkit/WebCore/rendering/break_lines.cpp | 6 +- .../webkit/WebCore/rendering/style/ContentData.cpp | 58 +- .../webkit/WebCore/rendering/style/ContentData.h | 50 +- .../WebCore/rendering/style/CounterContent.h | 8 +- .../webkit/WebCore/rendering/style/RenderStyle.cpp | 324 +- .../webkit/WebCore/rendering/style/RenderStyle.h | 177 +- .../WebCore/rendering/style/RenderStyleConstants.h | 53 +- .../WebCore/rendering/style/SVGRenderStyle.cpp | 2 +- .../rendering/style/StyleGeneratedImage.cpp | 23 +- .../WebCore/rendering/style/StyleInheritedData.cpp | 2 +- .../rendering/style/StyleRareInheritedData.cpp | 2 +- .../rendering/style/StyleRareNonInheritedData.cpp | 50 +- .../rendering/style/StyleRareNonInheritedData.h | 13 +- .../WebCore/rendering/style/StyleTransformData.cpp | 4 +- .../WebCore/rendering/style/StyleTransformData.h | 1 + .../WebCore/storage/ChangeVersionWrapper.cpp | 3 + .../webkit/WebCore/storage/ChangeVersionWrapper.h | 4 + src/3rdparty/webkit/WebCore/storage/Database.cpp | 61 +- src/3rdparty/webkit/WebCore/storage/Database.h | 17 + src/3rdparty/webkit/WebCore/storage/Database.idl | 4 +- .../webkit/WebCore/storage/DatabaseAuthorizer.cpp | 42 + .../webkit/WebCore/storage/DatabaseAuthorizer.h | 8 +- .../webkit/WebCore/storage/DatabaseDetails.h | 4 + .../webkit/WebCore/storage/DatabaseTask.cpp | 4 + src/3rdparty/webkit/WebCore/storage/DatabaseTask.h | 2 + .../webkit/WebCore/storage/DatabaseThread.cpp | 8 +- .../webkit/WebCore/storage/DatabaseThread.h | 9 +- .../webkit/WebCore/storage/DatabaseTracker.cpp | 3 + .../webkit/WebCore/storage/DatabaseTracker.h | 3 + .../webkit/WebCore/storage/DatabaseTrackerClient.h | 4 + .../webkit/WebCore/storage/LocalStorage.cpp | 2 +- src/3rdparty/webkit/WebCore/storage/LocalStorage.h | 2 +- .../webkit/WebCore/storage/LocalStorageArea.cpp | 100 +- .../webkit/WebCore/storage/LocalStorageArea.h | 9 +- .../webkit/WebCore/storage/LocalStorageThread.cpp | 2 +- .../webkit/WebCore/storage/OriginQuotaManager.cpp | 4 + .../webkit/WebCore/storage/OriginQuotaManager.h | 4 + .../webkit/WebCore/storage/OriginUsageRecord.cpp | 4 + .../webkit/WebCore/storage/OriginUsageRecord.h | 4 + src/3rdparty/webkit/WebCore/storage/SQLError.h | 4 + src/3rdparty/webkit/WebCore/storage/SQLError.idl | 6 +- .../webkit/WebCore/storage/SQLResultSet.cpp | 4 + src/3rdparty/webkit/WebCore/storage/SQLResultSet.h | 4 + .../webkit/WebCore/storage/SQLResultSet.idl | 8 +- .../webkit/WebCore/storage/SQLResultSetRowList.cpp | 4 + .../webkit/WebCore/storage/SQLResultSetRowList.h | 4 + .../webkit/WebCore/storage/SQLResultSetRowList.idl | 4 +- .../webkit/WebCore/storage/SQLStatement.cpp | 14 +- src/3rdparty/webkit/WebCore/storage/SQLStatement.h | 10 +- .../webkit/WebCore/storage/SQLStatementCallback.h | 6 +- .../WebCore/storage/SQLStatementCallback.idl | 35 - .../WebCore/storage/SQLStatementErrorCallback.h | 6 +- .../WebCore/storage/SQLStatementErrorCallback.idl | 35 - .../webkit/WebCore/storage/SQLTransaction.cpp | 43 +- .../webkit/WebCore/storage/SQLTransaction.h | 5 +- .../webkit/WebCore/storage/SQLTransaction.idl | 4 +- .../WebCore/storage/SQLTransactionCallback.h | 4 + .../WebCore/storage/SQLTransactionCallback.idl | 35 - .../WebCore/storage/SQLTransactionErrorCallback.h | 6 +- .../storage/SQLTransactionErrorCallback.idl | 35 - .../webkit/WebCore/storage/SessionStorageArea.cpp | 16 +- .../webkit/WebCore/storage/StorageArea.cpp | 20 +- .../webkit/WebCore/storage/StorageEvent.cpp | 11 +- src/3rdparty/webkit/WebCore/storage/StorageEvent.h | 21 +- .../webkit/WebCore/storage/StorageEvent.idl | 7 +- src/3rdparty/webkit/WebCore/svg/Filter.cpp | 39 - src/3rdparty/webkit/WebCore/svg/Filter.h | 46 - src/3rdparty/webkit/WebCore/svg/FilterBuilder.h | 51 - src/3rdparty/webkit/WebCore/svg/FilterEffect.cpp | 42 - src/3rdparty/webkit/WebCore/svg/FilterEffect.h | 48 - src/3rdparty/webkit/WebCore/svg/SVGAElement.cpp | 9 +- src/3rdparty/webkit/WebCore/svg/SVGAllInOne.cpp | 152 + .../webkit/WebCore/svg/SVGAnimateMotionElement.cpp | 6 +- .../WebCore/svg/SVGAnimateTransformElement.cpp | 5 +- .../webkit/WebCore/svg/SVGAnimatedProperty.h | 2 +- .../webkit/WebCore/svg/SVGAnimationElement.cpp | 4 +- .../webkit/WebCore/svg/SVGCircleElement.cpp | 1 + .../webkit/WebCore/svg/SVGClipPathElement.cpp | 1 + .../svg/SVGComponentTransferFunctionElement.cpp | 3 +- .../svg/SVGComponentTransferFunctionElement.h | 4 +- .../svg/SVGComponentTransferFunctionElement.idl | 2 +- .../webkit/WebCore/svg/SVGCursorElement.cpp | 5 +- src/3rdparty/webkit/WebCore/svg/SVGElement.cpp | 26 +- .../webkit/WebCore/svg/SVGElementInstance.cpp | 164 +- .../webkit/WebCore/svg/SVGElementInstance.h | 3 +- .../webkit/WebCore/svg/SVGElementInstance.idl | 86 +- .../webkit/WebCore/svg/SVGEllipseElement.cpp | 1 + src/3rdparty/webkit/WebCore/svg/SVGException.idl | 2 +- .../WebCore/svg/SVGExternalResourcesRequired.cpp | 3 +- .../webkit/WebCore/svg/SVGFEBlendElement.cpp | 19 +- .../webkit/WebCore/svg/SVGFEBlendElement.h | 7 +- .../webkit/WebCore/svg/SVGFEBlendElement.idl | 2 +- .../webkit/WebCore/svg/SVGFEColorMatrixElement.cpp | 17 +- .../webkit/WebCore/svg/SVGFEColorMatrixElement.h | 7 +- .../webkit/WebCore/svg/SVGFEColorMatrixElement.idl | 2 +- .../WebCore/svg/SVGFEComponentTransferElement.cpp | 25 +- .../WebCore/svg/SVGFEComponentTransferElement.h | 7 +- .../WebCore/svg/SVGFEComponentTransferElement.idl | 2 +- .../webkit/WebCore/svg/SVGFECompositeElement.cpp | 20 +- .../webkit/WebCore/svg/SVGFECompositeElement.h | 7 +- .../webkit/WebCore/svg/SVGFECompositeElement.idl | 2 +- .../WebCore/svg/SVGFEDiffuseLightingElement.cpp | 20 +- .../WebCore/svg/SVGFEDiffuseLightingElement.h | 7 +- .../WebCore/svg/SVGFEDiffuseLightingElement.idl | 2 +- .../WebCore/svg/SVGFEDisplacementMapElement.cpp | 23 +- .../WebCore/svg/SVGFEDisplacementMapElement.h | 7 +- .../WebCore/svg/SVGFEDisplacementMapElement.idl | 2 +- .../WebCore/svg/SVGFEDistantLightElement.cpp | 2 +- .../webkit/WebCore/svg/SVGFEDistantLightElement.h | 2 +- .../WebCore/svg/SVGFEDistantLightElement.idl | 2 +- .../webkit/WebCore/svg/SVGFEFloodElement.cpp | 28 +- .../webkit/WebCore/svg/SVGFEFloodElement.h | 9 +- .../webkit/WebCore/svg/SVGFEFloodElement.idl | 6 +- .../webkit/WebCore/svg/SVGFEFuncAElement.cpp | 2 +- .../webkit/WebCore/svg/SVGFEFuncAElement.h | 2 +- .../webkit/WebCore/svg/SVGFEFuncAElement.idl | 2 +- .../webkit/WebCore/svg/SVGFEFuncBElement.cpp | 2 +- .../webkit/WebCore/svg/SVGFEFuncBElement.h | 2 +- .../webkit/WebCore/svg/SVGFEFuncBElement.idl | 2 +- .../webkit/WebCore/svg/SVGFEFuncGElement.cpp | 2 +- .../webkit/WebCore/svg/SVGFEFuncGElement.h | 2 +- .../webkit/WebCore/svg/SVGFEFuncGElement.idl | 2 +- .../webkit/WebCore/svg/SVGFEFuncRElement.cpp | 2 +- .../webkit/WebCore/svg/SVGFEFuncRElement.h | 2 +- .../webkit/WebCore/svg/SVGFEFuncRElement.idl | 2 +- .../WebCore/svg/SVGFEGaussianBlurElement.cpp | 20 +- .../webkit/WebCore/svg/SVGFEGaussianBlurElement.h | 7 +- .../WebCore/svg/SVGFEGaussianBlurElement.idl | 2 +- .../webkit/WebCore/svg/SVGFEImageElement.cpp | 20 +- .../webkit/WebCore/svg/SVGFEImageElement.h | 6 +- .../webkit/WebCore/svg/SVGFEImageElement.idl | 2 +- .../webkit/WebCore/svg/SVGFELightElement.cpp | 4 +- .../webkit/WebCore/svg/SVGFELightElement.h | 4 +- .../webkit/WebCore/svg/SVGFEMergeElement.cpp | 16 +- .../webkit/WebCore/svg/SVGFEMergeElement.h | 8 +- .../webkit/WebCore/svg/SVGFEMergeElement.idl | 2 +- .../webkit/WebCore/svg/SVGFEMergeNodeElement.cpp | 4 +- .../webkit/WebCore/svg/SVGFEMergeNodeElement.h | 2 +- .../webkit/WebCore/svg/SVGFEMergeNodeElement.idl | 2 +- .../webkit/WebCore/svg/SVGFEOffsetElement.cpp | 17 +- .../webkit/WebCore/svg/SVGFEOffsetElement.h | 7 +- .../webkit/WebCore/svg/SVGFEOffsetElement.idl | 2 +- .../webkit/WebCore/svg/SVGFEPointLightElement.cpp | 2 +- .../webkit/WebCore/svg/SVGFEPointLightElement.h | 2 +- .../webkit/WebCore/svg/SVGFEPointLightElement.idl | 2 +- .../WebCore/svg/SVGFESpecularLightingElement.cpp | 20 +- .../WebCore/svg/SVGFESpecularLightingElement.h | 7 +- .../WebCore/svg/SVGFESpecularLightingElement.idl | 2 +- .../webkit/WebCore/svg/SVGFESpotLightElement.cpp | 2 +- .../webkit/WebCore/svg/SVGFESpotLightElement.h | 2 +- .../webkit/WebCore/svg/SVGFESpotLightElement.idl | 2 +- .../webkit/WebCore/svg/SVGFETileElement.cpp | 17 +- src/3rdparty/webkit/WebCore/svg/SVGFETileElement.h | 7 +- .../webkit/WebCore/svg/SVGFETileElement.idl | 2 +- .../webkit/WebCore/svg/SVGFETurbulenceElement.cpp | 16 +- .../webkit/WebCore/svg/SVGFETurbulenceElement.h | 7 +- .../webkit/WebCore/svg/SVGFETurbulenceElement.idl | 2 +- .../webkit/WebCore/svg/SVGFilterElement.cpp | 26 +- src/3rdparty/webkit/WebCore/svg/SVGFilterElement.h | 2 +- .../webkit/WebCore/svg/SVGFilterElement.idl | 2 +- .../svg/SVGFilterPrimitiveStandardAttributes.cpp | 13 +- .../svg/SVGFilterPrimitiveStandardAttributes.h | 11 +- .../webkit/WebCore/svg/SVGFitToViewBox.cpp | 3 +- src/3rdparty/webkit/WebCore/svg/SVGFont.cpp | 23 +- .../webkit/WebCore/svg/SVGFontFaceElement.cpp | 3 +- .../webkit/WebCore/svg/SVGFontFaceUriElement.cpp | 42 + .../webkit/WebCore/svg/SVGFontFaceUriElement.h | 17 +- .../webkit/WebCore/svg/SVGForeignObjectElement.cpp | 6 +- .../webkit/WebCore/svg/SVGGlyphElement.cpp | 3 +- src/3rdparty/webkit/WebCore/svg/SVGGlyphElement.h | 2 +- .../webkit/WebCore/svg/SVGGradientElement.cpp | 1 + src/3rdparty/webkit/WebCore/svg/SVGHKernElement.h | 2 +- .../webkit/WebCore/svg/SVGImageElement.cpp | 1 + src/3rdparty/webkit/WebCore/svg/SVGImageLoader.cpp | 16 +- src/3rdparty/webkit/WebCore/svg/SVGLangSpace.cpp | 1 + src/3rdparty/webkit/WebCore/svg/SVGLength.cpp | 9 +- src/3rdparty/webkit/WebCore/svg/SVGLineElement.cpp | 1 + .../WebCore/svg/SVGLinearGradientElement.cpp | 3 +- src/3rdparty/webkit/WebCore/svg/SVGList.h | 6 +- src/3rdparty/webkit/WebCore/svg/SVGLocatable.cpp | 70 +- .../webkit/WebCore/svg/SVGMarkerElement.cpp | 1 + src/3rdparty/webkit/WebCore/svg/SVGMaskElement.cpp | 13 +- src/3rdparty/webkit/WebCore/svg/SVGMaskElement.h | 3 +- src/3rdparty/webkit/WebCore/svg/SVGMatrix.idl | 18 +- .../webkit/WebCore/svg/SVGParserUtilities.cpp | 111 +- src/3rdparty/webkit/WebCore/svg/SVGPathElement.cpp | 1 + src/3rdparty/webkit/WebCore/svg/SVGPathSeg.idl | 4 +- .../WebCore/svg/SVGPathSegCurvetoCubicSmooth.h | 2 +- src/3rdparty/webkit/WebCore/svg/SVGPathSegList.idl | 14 +- .../webkit/WebCore/svg/SVGPatternElement.cpp | 20 +- src/3rdparty/webkit/WebCore/svg/SVGPointList.idl | 14 +- src/3rdparty/webkit/WebCore/svg/SVGPolyElement.cpp | 1 + .../webkit/WebCore/svg/SVGPreserveAspectRatio.cpp | 6 +- .../WebCore/svg/SVGRadialGradientElement.cpp | 3 +- src/3rdparty/webkit/WebCore/svg/SVGRectElement.cpp | 1 + src/3rdparty/webkit/WebCore/svg/SVGSVGElement.cpp | 57 +- .../webkit/WebCore/svg/SVGScriptElement.cpp | 8 +- src/3rdparty/webkit/WebCore/svg/SVGScriptElement.h | 3 + src/3rdparty/webkit/WebCore/svg/SVGStopElement.cpp | 3 +- .../webkit/WebCore/svg/SVGStyleElement.cpp | 2 + .../webkit/WebCore/svg/SVGStyledElement.cpp | 11 +- .../WebCore/svg/SVGStyledTransformableElement.cpp | 8 +- src/3rdparty/webkit/WebCore/svg/SVGTests.cpp | 1 + .../webkit/WebCore/svg/SVGTextContentElement.cpp | 51 +- .../webkit/WebCore/svg/SVGTextContentElement.h | 16 +- .../webkit/WebCore/svg/SVGTextContentElement.idl | 16 +- src/3rdparty/webkit/WebCore/svg/SVGTextElement.cpp | 3 +- .../webkit/WebCore/svg/SVGTextPathElement.cpp | 4 +- .../WebCore/svg/SVGTextPositioningElement.cpp | 1 + src/3rdparty/webkit/WebCore/svg/SVGTransform.cpp | 12 +- .../webkit/WebCore/svg/SVGTransformDistance.cpp | 4 +- .../webkit/WebCore/svg/SVGTransformList.idl | 14 +- .../webkit/WebCore/svg/SVGTransformable.cpp | 3 +- .../webkit/WebCore/svg/SVGURIReference.cpp | 2 + src/3rdparty/webkit/WebCore/svg/SVGUseElement.cpp | 40 +- src/3rdparty/webkit/WebCore/svg/SVGViewElement.cpp | 1 + src/3rdparty/webkit/WebCore/svg/SVGViewSpec.idl | 2 +- .../webkit/WebCore/svg/animation/SMILTime.h | 2 - .../WebCore/svg/animation/SMILTimeContainer.cpp | 4 +- .../WebCore/svg/animation/SVGSMILElement.cpp | 4 +- .../webkit/WebCore/svg/graphics/SVGImage.cpp | 117 +- .../webkit/WebCore/svg/graphics/SVGImage.h | 14 +- .../webkit/WebCore/svg/graphics/SVGPaintServer.cpp | 47 +- .../webkit/WebCore/svg/graphics/SVGPaintServer.h | 6 - .../svg/graphics/SVGPaintServerGradient.cpp | 101 +- .../WebCore/svg/graphics/SVGPaintServerGradient.h | 5 - .../WebCore/svg/graphics/SVGPaintServerPattern.cpp | 100 +- .../WebCore/svg/graphics/SVGPaintServerPattern.h | 11 +- .../WebCore/svg/graphics/SVGPaintServerSolid.cpp | 11 - .../WebCore/svg/graphics/SVGPaintServerSolid.h | 1 - .../WebCore/svg/graphics/SVGResourceClipper.cpp | 2 +- .../WebCore/svg/graphics/SVGResourceFilter.cpp | 98 +- .../WebCore/svg/graphics/SVGResourceFilter.h | 51 +- .../WebCore/svg/graphics/SVGResourceMarker.cpp | 6 +- .../WebCore/svg/graphics/SVGResourceMasker.cpp | 47 + .../svg/graphics/filters/SVGDistantLightSource.h | 4 +- .../svg/graphics/filters/SVGFEConvolveMatrix.cpp | 7 +- .../svg/graphics/filters/SVGFEConvolveMatrix.h | 10 +- .../svg/graphics/filters/SVGFEDiffuseLighting.cpp | 7 +- .../svg/graphics/filters/SVGFEDiffuseLighting.h | 9 +- .../svg/graphics/filters/SVGFEDisplacementMap.cpp | 7 +- .../svg/graphics/filters/SVGFEDisplacementMap.h | 9 +- .../WebCore/svg/graphics/filters/SVGFEFlood.cpp | 14 +- .../WebCore/svg/graphics/filters/SVGFEFlood.h | 14 +- .../svg/graphics/filters/SVGFEGaussianBlur.cpp | 7 +- .../svg/graphics/filters/SVGFEGaussianBlur.h | 9 +- .../WebCore/svg/graphics/filters/SVGFEImage.cpp | 7 +- .../WebCore/svg/graphics/filters/SVGFEImage.h | 9 +- .../WebCore/svg/graphics/filters/SVGFEMerge.cpp | 7 +- .../WebCore/svg/graphics/filters/SVGFEMerge.h | 10 +- .../svg/graphics/filters/SVGFEMorphology.cpp | 7 +- .../WebCore/svg/graphics/filters/SVGFEMorphology.h | 9 +- .../WebCore/svg/graphics/filters/SVGFEOffset.cpp | 7 +- .../WebCore/svg/graphics/filters/SVGFEOffset.h | 9 +- .../svg/graphics/filters/SVGFESpecularLighting.cpp | 7 +- .../svg/graphics/filters/SVGFESpecularLighting.h | 11 +- .../WebCore/svg/graphics/filters/SVGFETile.cpp | 7 +- .../WebCore/svg/graphics/filters/SVGFETile.h | 9 +- .../svg/graphics/filters/SVGFETurbulence.cpp | 7 +- .../WebCore/svg/graphics/filters/SVGFETurbulence.h | 9 +- .../WebCore/svg/graphics/filters/SVGFilter.cpp | 47 + .../WebCore/svg/graphics/filters/SVGFilter.h | 53 + .../svg/graphics/filters/SVGFilterBuilder.cpp | 79 + .../svg/graphics/filters/SVGFilterBuilder.h | 56 + .../svg/graphics/filters/SVGFilterEffect.cpp | 133 - .../WebCore/svg/graphics/filters/SVGFilterEffect.h | 99 - .../svg/graphics/filters/SVGLightSource.cpp | 4 +- .../WebCore/svg/graphics/filters/SVGLightSource.h | 4 +- .../svg/graphics/filters/SVGPointLightSource.h | 4 +- .../svg/graphics/filters/SVGSpotLightSource.h | 4 +- .../WebCore/svg/graphics/qt/RenderPathQt.cpp | 47 - .../svg/graphics/qt/SVGPaintServerPatternQt.cpp | 90 - .../WebCore/svg/graphics/qt/SVGPaintServerQt.cpp | 72 - .../svg/graphics/qt/SVGResourceFilterQt.cpp | 50 - .../svg/graphics/qt/SVGResourceMaskerQt.cpp | 38 - src/3rdparty/webkit/WebCore/svg/svgattrs.in | 4 +- src/3rdparty/webkit/WebCore/svg/svgtags.in | 8 +- src/3rdparty/webkit/WebCore/svg/xlinkattrs.in | 2 +- src/3rdparty/webkit/WebCore/wml/WMLAElement.cpp | 19 +- .../webkit/WebCore/wml/WMLAccessElement.cpp | 1 + .../webkit/WebCore/wml/WMLAttributeNames.in | 2 +- src/3rdparty/webkit/WebCore/wml/WMLBRElement.cpp | 1 + src/3rdparty/webkit/WebCore/wml/WMLCardElement.cpp | 25 +- src/3rdparty/webkit/WebCore/wml/WMLCardElement.h | 4 +- src/3rdparty/webkit/WebCore/wml/WMLDoElement.cpp | 10 +- src/3rdparty/webkit/WebCore/wml/WMLDocument.cpp | 8 +- src/3rdparty/webkit/WebCore/wml/WMLDocument.h | 2 + src/3rdparty/webkit/WebCore/wml/WMLElement.cpp | 1 + src/3rdparty/webkit/WebCore/wml/WMLElement.h | 3 +- .../webkit/WebCore/wml/WMLEventHandlingElement.cpp | 27 +- .../webkit/WebCore/wml/WMLEventHandlingElement.h | 16 +- .../webkit/WebCore/wml/WMLFieldSetElement.cpp | 1 + .../webkit/WebCore/wml/WMLFormControlElement.cpp | 80 + .../webkit/WebCore/wml/WMLFormControlElement.h | 53 + src/3rdparty/webkit/WebCore/wml/WMLGoElement.cpp | 5 +- .../webkit/WebCore/wml/WMLImageElement.cpp | 5 +- src/3rdparty/webkit/WebCore/wml/WMLImageLoader.cpp | 4 - .../webkit/WebCore/wml/WMLInputElement.cpp | 507 + src/3rdparty/webkit/WebCore/wml/WMLInputElement.h | 110 + .../WebCore/wml/WMLInsertedLegendElement.cpp | 7 - .../webkit/WebCore/wml/WMLInsertedLegendElement.h | 2 - src/3rdparty/webkit/WebCore/wml/WMLMetaElement.cpp | 1 + src/3rdparty/webkit/WebCore/wml/WMLNoopElement.cpp | 2 +- .../webkit/WebCore/wml/WMLOnEventElement.cpp | 8 +- .../webkit/WebCore/wml/WMLOptGroupElement.cpp | 175 + .../webkit/WebCore/wml/WMLOptGroupElement.h | 69 + .../webkit/WebCore/wml/WMLOptionElement.cpp | 163 + src/3rdparty/webkit/WebCore/wml/WMLOptionElement.h | 69 + src/3rdparty/webkit/WebCore/wml/WMLPElement.cpp | 1 + .../webkit/WebCore/wml/WMLPostfieldElement.cpp | 1 + .../webkit/WebCore/wml/WMLSelectElement.cpp | 224 + src/3rdparty/webkit/WebCore/wml/WMLSelectElement.h | 94 + .../webkit/WebCore/wml/WMLSetvarElement.cpp | 1 + .../webkit/WebCore/wml/WMLTableElement.cpp | 3 +- src/3rdparty/webkit/WebCore/wml/WMLTagNames.in | 11 +- .../webkit/WebCore/wml/WMLTemplateElement.cpp | 7 +- .../webkit/WebCore/wml/WMLTemplateElement.h | 5 +- .../webkit/WebCore/wml/WMLTimerElement.cpp | 1 + .../webkit/WebCore/workers/GenericWorkerTask.h | 415 + src/3rdparty/webkit/WebCore/workers/Worker.cpp | 212 + src/3rdparty/webkit/WebCore/workers/Worker.h | 111 + src/3rdparty/webkit/WebCore/workers/Worker.idl | 48 + .../webkit/WebCore/workers/WorkerContext.cpp | 300 + .../webkit/WebCore/workers/WorkerContext.h | 154 + .../webkit/WebCore/workers/WorkerContext.idl | 86 + .../webkit/WebCore/workers/WorkerContextProxy.h | 64 + .../WebCore/workers/WorkerImportScriptsClient.cpp | 96 + .../WebCore/workers/WorkerImportScriptsClient.h | 77 + .../webkit/WebCore/workers/WorkerLocation.cpp | 85 + .../webkit/WebCore/workers/WorkerLocation.h | 73 + .../webkit/WebCore/workers/WorkerLocation.idl | 48 + .../WebCore/workers/WorkerMessagingProxy.cpp | 344 + .../webkit/WebCore/workers/WorkerMessagingProxy.h | 104 + .../webkit/WebCore/workers/WorkerObjectProxy.h | 64 + .../webkit/WebCore/workers/WorkerRunLoop.cpp | 210 + .../webkit/WebCore/workers/WorkerRunLoop.h | 82 + .../webkit/WebCore/workers/WorkerThread.cpp | 153 + src/3rdparty/webkit/WebCore/workers/WorkerThread.h | 78 + src/3rdparty/webkit/WebCore/xml/XMLHttpRequest.cpp | 539 +- src/3rdparty/webkit/WebCore/xml/XMLHttpRequest.h | 54 +- src/3rdparty/webkit/WebCore/xml/XMLHttpRequest.idl | 5 +- .../webkit/WebCore/xml/XMLHttpRequestException.idl | 5 +- .../WebCore/xml/XMLHttpRequestProgressEvent.idl | 3 +- .../webkit/WebCore/xml/XMLHttpRequestUpload.cpp | 6 +- .../webkit/WebCore/xml/XMLHttpRequestUpload.h | 2 + .../webkit/WebCore/xml/XMLHttpRequestUpload.idl | 3 +- src/3rdparty/webkit/WebCore/xml/XPathException.idl | 2 +- .../webkit/WebCore/xml/XPathExpression.cpp | 21 +- .../webkit/WebCore/xml/XPathExpressionNode.cpp | 4 +- .../webkit/WebCore/xml/XPathExpressionNode.h | 32 +- src/3rdparty/webkit/WebCore/xml/XPathFunctions.cpp | 131 +- src/3rdparty/webkit/WebCore/xml/XPathFunctions.h | 12 +- src/3rdparty/webkit/WebCore/xml/XPathGrammar.y | 4 +- src/3rdparty/webkit/WebCore/xml/XPathNodeSet.cpp | 2 +- src/3rdparty/webkit/WebCore/xml/XPathNodeSet.h | 16 +- src/3rdparty/webkit/WebCore/xml/XPathPath.cpp | 92 +- src/3rdparty/webkit/WebCore/xml/XPathPath.h | 14 +- src/3rdparty/webkit/WebCore/xml/XPathPredicate.cpp | 2 - src/3rdparty/webkit/WebCore/xml/XPathPredicate.h | 16 + src/3rdparty/webkit/WebCore/xml/XPathResult.cpp | 48 +- src/3rdparty/webkit/WebCore/xml/XPathResult.h | 22 +- src/3rdparty/webkit/WebCore/xml/XPathStep.cpp | 283 +- src/3rdparty/webkit/WebCore/xml/XPathStep.h | 41 +- src/3rdparty/webkit/WebCore/xml/XPathUtil.cpp | 20 +- src/3rdparty/webkit/WebCore/xml/XPathValue.cpp | 22 +- .../webkit/WebCore/xml/XPathVariableReference.h | 4 +- src/3rdparty/webkit/WebCore/xml/XSLStyleSheet.cpp | 14 +- src/3rdparty/webkit/WebCore/xml/XSLTExtensions.cpp | 1 + src/3rdparty/webkit/WebCore/xml/XSLTProcessor.cpp | 9 +- .../webkit/WebCore/xml/XSLTUnicodeSort.cpp | 54 +- src/3rdparty/webkit/WebKit.pri | 7 +- src/3rdparty/webkit/WebKit/ChangeLog | 317 + .../webkit/WebKit/StringsNotToBeLocalized.txt | 179 +- src/3rdparty/webkit/WebKit/qt/Api/headers.pri | 3 +- src/3rdparty/webkit/WebKit/qt/Api/qwebdatabase.cpp | 20 + src/3rdparty/webkit/WebKit/qt/Api/qwebelement.cpp | 1603 + src/3rdparty/webkit/WebKit/qt/Api/qwebelement.h | 153 + src/3rdparty/webkit/WebKit/qt/Api/qwebframe.cpp | 284 +- src/3rdparty/webkit/WebKit/qt/Api/qwebframe.h | 17 +- src/3rdparty/webkit/WebKit/qt/Api/qwebframe_p.h | 10 +- src/3rdparty/webkit/WebKit/qt/Api/qwebkitglobal.h | 22 +- src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp | 177 +- src/3rdparty/webkit/WebKit/qt/Api/qwebpage.h | 30 +- src/3rdparty/webkit/WebKit/qt/Api/qwebpage_p.h | 5 + .../webkit/WebKit/qt/Api/qwebsecurityorigin.cpp | 23 +- src/3rdparty/webkit/WebKit/qt/Api/qwebsettings.cpp | 96 +- src/3rdparty/webkit/WebKit/qt/Api/qwebsettings.h | 8 +- src/3rdparty/webkit/WebKit/qt/Api/qwebview.cpp | 121 +- src/3rdparty/webkit/WebKit/qt/Api/qwebview.h | 9 + src/3rdparty/webkit/WebKit/qt/ChangeLog | 1464 +- .../webkit/WebKit/qt/Plugins/ICOHandler.cpp | 1 + .../WebKit/qt/WebCoreSupport/ChromeClientQt.cpp | 25 +- .../WebKit/qt/WebCoreSupport/ChromeClientQt.h | 16 +- .../WebKit/qt/WebCoreSupport/DragClientQt.cpp | 1 + .../WebKit/qt/WebCoreSupport/EditCommandQt.cpp | 1 + .../WebKit/qt/WebCoreSupport/EditorClientQt.cpp | 15 +- .../WebKit/qt/WebCoreSupport/EditorClientQt.h | 1 + .../qt/WebCoreSupport/FrameLoaderClientQt.cpp | 59 +- .../WebKit/qt/WebCoreSupport/FrameLoaderClientQt.h | 11 +- .../WebKit/qt/WebCoreSupport/InspectorClientQt.cpp | 6 + .../WebKit/qt/WebCoreSupport/InspectorClientQt.h | 2 + src/3rdparty/webkit/WebKit/qt/docs/qtwebkit.qdoc | 3 +- .../qt/docs/webkitsnippets/webelement/main.cpp | 69 + .../docs/webkitsnippets/webelement/webelement.pro | 5 + .../WebKit/qt/tests/qwebelement/qwebelement.pro | 7 + .../WebKit/qt/tests/qwebelement/qwebelement.qrc | 6 + .../webkit/WebKit/qt/tests/qwebelement/style.css | 1 + .../webkit/WebKit/qt/tests/qwebelement/style2.css | 1 + .../qt/tests/qwebelement/tst_qwebelement.cpp | 882 + .../webkit/WebKit/qt/tests/qwebframe/qwebframe.qrc | 1 + .../webkit/WebKit/qt/tests/qwebframe/style.css | 1 + .../WebKit/qt/tests/qwebframe/tst_qwebframe.cpp | 63 +- .../qt/tests/qwebpage/frametest/frame_a.html | 2 + .../WebKit/qt/tests/qwebpage/frametest/index.html | 4 + .../webkit/WebKit/qt/tests/qwebpage/qwebpage.pro | 1 + .../WebKit/qt/tests/qwebpage/tst_qwebpage.cpp | 99 +- .../WebKit/qt/tests/qwebpage/tst_qwebpage.qrc | 7 + .../webkit/WebKit/qt/tests/qwebview/.gitignore | 1 + .../webkit/WebKit/qt/tests/qwebview/qwebview.pro | 6 + .../WebKit/qt/tests/qwebview/tst_qwebview.cpp | 165 + src/3rdparty/webkit/WebKit/qt/tests/tests.pro | 2 +- 2871 files changed, 248621 insertions(+), 104532 deletions(-) create mode 100644 src/3rdparty/webkit/JavaScriptCore/assembler/AbstractMacroAssembler.h create mode 100644 src/3rdparty/webkit/JavaScriptCore/assembler/MacroAssemblerCodeRef.h create mode 100644 src/3rdparty/webkit/JavaScriptCore/assembler/MacroAssemblerX86.h create mode 100644 src/3rdparty/webkit/JavaScriptCore/assembler/MacroAssemblerX86Common.h create mode 100644 src/3rdparty/webkit/JavaScriptCore/assembler/MacroAssemblerX86_64.h create mode 100644 src/3rdparty/webkit/JavaScriptCore/debugger/DebuggerActivation.cpp create mode 100644 src/3rdparty/webkit/JavaScriptCore/debugger/DebuggerActivation.h create mode 100644 src/3rdparty/webkit/JavaScriptCore/interpreter/CachedCall.h create mode 100644 src/3rdparty/webkit/JavaScriptCore/interpreter/CallFrameClosure.h create mode 100644 src/3rdparty/webkit/JavaScriptCore/jit/ExecutableAllocatorFixedVMPool.cpp create mode 100644 src/3rdparty/webkit/JavaScriptCore/jit/JITCode.h create mode 100644 src/3rdparty/webkit/JavaScriptCore/jit/JITOpcodes.cpp create mode 100644 src/3rdparty/webkit/JavaScriptCore/jit/JITStubCall.h create mode 100644 src/3rdparty/webkit/JavaScriptCore/jit/JITStubs.cpp create mode 100644 src/3rdparty/webkit/JavaScriptCore/jit/JITStubs.h create mode 100644 src/3rdparty/webkit/JavaScriptCore/parser/NodeConstructors.h create mode 100644 src/3rdparty/webkit/JavaScriptCore/parser/ParserArena.cpp create mode 100644 src/3rdparty/webkit/JavaScriptCore/parser/ParserArena.h delete mode 100644 src/3rdparty/webkit/JavaScriptCore/runtime/ByteArray.cpp delete mode 100644 src/3rdparty/webkit/JavaScriptCore/runtime/ByteArray.h create mode 100644 src/3rdparty/webkit/JavaScriptCore/runtime/LiteralParser.cpp create mode 100644 src/3rdparty/webkit/JavaScriptCore/runtime/LiteralParser.h create mode 100644 src/3rdparty/webkit/JavaScriptCore/runtime/NativeFunctionWrapper.h create mode 100644 src/3rdparty/webkit/JavaScriptCore/runtime/TimeoutChecker.cpp create mode 100644 src/3rdparty/webkit/JavaScriptCore/runtime/TimeoutChecker.h create mode 100644 src/3rdparty/webkit/JavaScriptCore/wtf/ByteArray.cpp create mode 100644 src/3rdparty/webkit/JavaScriptCore/wtf/ByteArray.h create mode 100644 src/3rdparty/webkit/JavaScriptCore/wtf/CONTRIBUTORS.pthreads-win32 create mode 100644 src/3rdparty/webkit/JavaScriptCore/wtf/CrossThreadRefCounted.h create mode 100644 src/3rdparty/webkit/JavaScriptCore/wtf/CurrentTime.cpp create mode 100644 src/3rdparty/webkit/JavaScriptCore/wtf/CurrentTime.h create mode 100644 src/3rdparty/webkit/JavaScriptCore/wtf/FastAllocBase.h create mode 100644 src/3rdparty/webkit/JavaScriptCore/wtf/OwnFastMallocPtr.h create mode 100644 src/3rdparty/webkit/JavaScriptCore/wtf/OwnPtrCommon.h create mode 100644 src/3rdparty/webkit/JavaScriptCore/wtf/PassOwnPtr.h create mode 100644 src/3rdparty/webkit/JavaScriptCore/wtf/PtrAndFlags.h delete mode 100644 src/3rdparty/webkit/JavaScriptCore/wtf/ThreadingGtk.cpp delete mode 100644 src/3rdparty/webkit/JavaScriptCore/wtf/ThreadingQt.cpp create mode 100644 src/3rdparty/webkit/JavaScriptCore/wtf/TypeTraits.cpp create mode 100644 src/3rdparty/webkit/JavaScriptCore/wtf/TypeTraits.h create mode 100644 src/3rdparty/webkit/JavaScriptCore/wtf/VMTags.h create mode 100644 src/3rdparty/webkit/JavaScriptCore/wtf/qt/ThreadingQt.cpp create mode 100644 src/3rdparty/webkit/JavaScriptCore/wtf/unicode/glib/UnicodeGLib.cpp create mode 100644 src/3rdparty/webkit/JavaScriptCore/wtf/unicode/glib/UnicodeGLib.h create mode 100644 src/3rdparty/webkit/JavaScriptCore/wtf/unicode/glib/UnicodeMacrosFromICU.h create mode 100644 src/3rdparty/webkit/JavaScriptCore/yarr/RegexCompiler.cpp create mode 100644 src/3rdparty/webkit/JavaScriptCore/yarr/RegexCompiler.h create mode 100644 src/3rdparty/webkit/JavaScriptCore/yarr/RegexInterpreter.cpp create mode 100644 src/3rdparty/webkit/JavaScriptCore/yarr/RegexInterpreter.h create mode 100644 src/3rdparty/webkit/JavaScriptCore/yarr/RegexJIT.cpp create mode 100644 src/3rdparty/webkit/JavaScriptCore/yarr/RegexJIT.h create mode 100644 src/3rdparty/webkit/JavaScriptCore/yarr/RegexParser.h create mode 100644 src/3rdparty/webkit/JavaScriptCore/yarr/RegexPattern.h create mode 100644 src/3rdparty/webkit/WebCore/ForwardingHeaders/debugger/DebuggerActivation.h create mode 100644 src/3rdparty/webkit/WebCore/ForwardingHeaders/jit/JITCode.h delete mode 100644 src/3rdparty/webkit/WebCore/ForwardingHeaders/runtime/ByteArray.h create mode 100644 src/3rdparty/webkit/WebCore/ForwardingHeaders/runtime/DateMath.h create mode 100644 src/3rdparty/webkit/WebCore/ForwardingHeaders/wtf/ByteArray.h create mode 100644 src/3rdparty/webkit/WebCore/ForwardingHeaders/wtf/CrossThreadRefCounted.h create mode 100644 src/3rdparty/webkit/WebCore/ForwardingHeaders/wtf/CurrentTime.h create mode 100644 src/3rdparty/webkit/WebCore/ForwardingHeaders/wtf/OwnFastMallocPtr.h create mode 100644 src/3rdparty/webkit/WebCore/ForwardingHeaders/wtf/OwnPtrCommon.h create mode 100644 src/3rdparty/webkit/WebCore/ForwardingHeaders/wtf/PassOwnPtr.h create mode 100644 src/3rdparty/webkit/WebCore/ForwardingHeaders/wtf/PtrAndFlags.h create mode 100644 src/3rdparty/webkit/WebCore/ForwardingHeaders/wtf/TypeTraits.h create mode 100644 src/3rdparty/webkit/WebCore/ForwardingHeaders/wtf/VMTags.h create mode 100644 src/3rdparty/webkit/WebCore/Resources/panIcon.png create mode 100644 src/3rdparty/webkit/WebCore/WebCore.VideoProxy.exp create mode 100644 src/3rdparty/webkit/WebCore/accessibility/AXObjectCache.cpp create mode 100644 src/3rdparty/webkit/WebCore/accessibility/AXObjectCache.h create mode 100644 src/3rdparty/webkit/WebCore/accessibility/AccessibilityARIAGrid.cpp create mode 100644 src/3rdparty/webkit/WebCore/accessibility/AccessibilityARIAGrid.h create mode 100644 src/3rdparty/webkit/WebCore/accessibility/AccessibilityARIAGridCell.cpp create mode 100644 src/3rdparty/webkit/WebCore/accessibility/AccessibilityARIAGridCell.h create mode 100644 src/3rdparty/webkit/WebCore/accessibility/AccessibilityARIAGridRow.cpp create mode 100644 src/3rdparty/webkit/WebCore/accessibility/AccessibilityARIAGridRow.h create mode 100644 src/3rdparty/webkit/WebCore/accessibility/AccessibilityImageMapLink.cpp create mode 100644 src/3rdparty/webkit/WebCore/accessibility/AccessibilityImageMapLink.h create mode 100644 src/3rdparty/webkit/WebCore/accessibility/AccessibilityList.cpp create mode 100644 src/3rdparty/webkit/WebCore/accessibility/AccessibilityList.h create mode 100644 src/3rdparty/webkit/WebCore/accessibility/AccessibilityListBox.cpp create mode 100644 src/3rdparty/webkit/WebCore/accessibility/AccessibilityListBox.h create mode 100644 src/3rdparty/webkit/WebCore/accessibility/AccessibilityListBoxOption.cpp create mode 100644 src/3rdparty/webkit/WebCore/accessibility/AccessibilityListBoxOption.h create mode 100644 src/3rdparty/webkit/WebCore/accessibility/AccessibilityObject.cpp create mode 100644 src/3rdparty/webkit/WebCore/accessibility/AccessibilityObject.h create mode 100644 src/3rdparty/webkit/WebCore/accessibility/AccessibilityRenderObject.cpp create mode 100644 src/3rdparty/webkit/WebCore/accessibility/AccessibilityRenderObject.h create mode 100644 src/3rdparty/webkit/WebCore/accessibility/AccessibilityTable.cpp create mode 100644 src/3rdparty/webkit/WebCore/accessibility/AccessibilityTable.h create mode 100644 src/3rdparty/webkit/WebCore/accessibility/AccessibilityTableCell.cpp create mode 100644 src/3rdparty/webkit/WebCore/accessibility/AccessibilityTableCell.h create mode 100644 src/3rdparty/webkit/WebCore/accessibility/AccessibilityTableColumn.cpp create mode 100644 src/3rdparty/webkit/WebCore/accessibility/AccessibilityTableColumn.h create mode 100644 src/3rdparty/webkit/WebCore/accessibility/AccessibilityTableHeaderContainer.cpp create mode 100644 src/3rdparty/webkit/WebCore/accessibility/AccessibilityTableHeaderContainer.h create mode 100644 src/3rdparty/webkit/WebCore/accessibility/AccessibilityTableRow.cpp create mode 100644 src/3rdparty/webkit/WebCore/accessibility/AccessibilityTableRow.h create mode 100644 src/3rdparty/webkit/WebCore/accessibility/qt/AccessibilityObjectQt.cpp delete mode 100644 src/3rdparty/webkit/WebCore/bindings/js/DOMTimer.cpp delete mode 100644 src/3rdparty/webkit/WebCore/bindings/js/DOMTimer.h create mode 100644 src/3rdparty/webkit/WebCore/bindings/js/JSCDATASectionCustom.cpp create mode 100644 src/3rdparty/webkit/WebCore/bindings/js/JSCoordinatesCustom.cpp delete mode 100644 src/3rdparty/webkit/WebCore/bindings/js/JSEventTargetBase.h delete mode 100644 src/3rdparty/webkit/WebCore/bindings/js/JSEventTargetNodeCustom.cpp create mode 100644 src/3rdparty/webkit/WebCore/bindings/js/JSInspectorControllerCustom.cpp create mode 100644 src/3rdparty/webkit/WebCore/bindings/js/JSLazyEventListener.cpp create mode 100644 src/3rdparty/webkit/WebCore/bindings/js/JSLazyEventListener.h create mode 100644 src/3rdparty/webkit/WebCore/bindings/js/JSWebKitCSSMatrixConstructor.cpp create mode 100644 src/3rdparty/webkit/WebCore/bindings/js/JSWebKitCSSMatrixConstructor.h create mode 100644 src/3rdparty/webkit/WebCore/bindings/js/JSWebKitPointConstructor.cpp create mode 100644 src/3rdparty/webkit/WebCore/bindings/js/JSWebKitPointConstructor.h create mode 100644 src/3rdparty/webkit/WebCore/bindings/js/ScriptCachedFrameData.cpp create mode 100644 src/3rdparty/webkit/WebCore/bindings/js/ScriptCachedFrameData.h delete mode 100644 src/3rdparty/webkit/WebCore/bindings/js/ScriptCachedPageData.cpp delete mode 100644 src/3rdparty/webkit/WebCore/bindings/js/ScriptCachedPageData.h create mode 100644 src/3rdparty/webkit/WebCore/bindings/js/ScriptEventListener.cpp create mode 100644 src/3rdparty/webkit/WebCore/bindings/js/ScriptEventListener.h create mode 100644 src/3rdparty/webkit/WebCore/bindings/js/ScriptFunctionCall.cpp create mode 100644 src/3rdparty/webkit/WebCore/bindings/js/ScriptFunctionCall.h create mode 100644 src/3rdparty/webkit/WebCore/bindings/js/ScriptObject.cpp create mode 100644 src/3rdparty/webkit/WebCore/bindings/js/ScriptObject.h create mode 100644 src/3rdparty/webkit/WebCore/bindings/js/ScriptObjectQuarantine.cpp create mode 100644 src/3rdparty/webkit/WebCore/bindings/js/ScriptObjectQuarantine.h create mode 100644 src/3rdparty/webkit/WebCore/bindings/js/ScriptState.cpp create mode 100644 src/3rdparty/webkit/WebCore/bridge/IdentifierRep.cpp create mode 100644 src/3rdparty/webkit/WebCore/bridge/IdentifierRep.h create mode 100644 src/3rdparty/webkit/WebCore/css/CSSPropertyLonghand.cpp create mode 100644 src/3rdparty/webkit/WebCore/css/CSSPropertyLonghand.h create mode 100644 src/3rdparty/webkit/WebCore/css/WebKitCSSMatrix.cpp create mode 100644 src/3rdparty/webkit/WebCore/css/WebKitCSSMatrix.h create mode 100644 src/3rdparty/webkit/WebCore/css/WebKitCSSMatrix.idl create mode 100644 src/3rdparty/webkit/WebCore/css/mediaControlsChromium.css create mode 100644 src/3rdparty/webkit/WebCore/css/mediaControlsQT.css create mode 100644 src/3rdparty/webkit/WebCore/dom/CheckedRadioButtons.cpp create mode 100644 src/3rdparty/webkit/WebCore/dom/CheckedRadioButtons.h create mode 100644 src/3rdparty/webkit/WebCore/dom/ClientRect.cpp create mode 100644 src/3rdparty/webkit/WebCore/dom/ClientRect.h create mode 100644 src/3rdparty/webkit/WebCore/dom/ClientRect.idl create mode 100644 src/3rdparty/webkit/WebCore/dom/ClientRectList.cpp create mode 100644 src/3rdparty/webkit/WebCore/dom/ClientRectList.h create mode 100644 src/3rdparty/webkit/WebCore/dom/ClientRectList.idl delete mode 100644 src/3rdparty/webkit/WebCore/dom/EventTargetNode.cpp delete mode 100644 src/3rdparty/webkit/WebCore/dom/EventTargetNode.h delete mode 100644 src/3rdparty/webkit/WebCore/dom/EventTargetNode.idl delete mode 100644 src/3rdparty/webkit/WebCore/dom/FormControlElement.h create mode 100644 src/3rdparty/webkit/WebCore/dom/InputElement.cpp create mode 100644 src/3rdparty/webkit/WebCore/dom/InputElement.h create mode 100644 src/3rdparty/webkit/WebCore/dom/MessagePortProxy.h create mode 100644 src/3rdparty/webkit/WebCore/dom/OptionElement.cpp create mode 100644 src/3rdparty/webkit/WebCore/dom/OptionElement.h create mode 100644 src/3rdparty/webkit/WebCore/dom/OptionGroupElement.cpp create mode 100644 src/3rdparty/webkit/WebCore/dom/OptionGroupElement.h create mode 100644 src/3rdparty/webkit/WebCore/dom/SelectElement.cpp create mode 100644 src/3rdparty/webkit/WebCore/dom/SelectElement.h delete mode 100644 src/3rdparty/webkit/WebCore/dom/Worker.cpp delete mode 100644 src/3rdparty/webkit/WebCore/dom/Worker.h delete mode 100644 src/3rdparty/webkit/WebCore/dom/Worker.idl delete mode 100644 src/3rdparty/webkit/WebCore/dom/WorkerContext.cpp delete mode 100644 src/3rdparty/webkit/WebCore/dom/WorkerContext.h delete mode 100644 src/3rdparty/webkit/WebCore/dom/WorkerContext.idl delete mode 100644 src/3rdparty/webkit/WebCore/dom/WorkerLocation.cpp delete mode 100644 src/3rdparty/webkit/WebCore/dom/WorkerLocation.h delete mode 100644 src/3rdparty/webkit/WebCore/dom/WorkerLocation.idl delete mode 100644 src/3rdparty/webkit/WebCore/dom/WorkerMessagingProxy.cpp delete mode 100644 src/3rdparty/webkit/WebCore/dom/WorkerMessagingProxy.h delete mode 100644 src/3rdparty/webkit/WebCore/dom/WorkerTask.cpp delete mode 100644 src/3rdparty/webkit/WebCore/dom/WorkerTask.h delete mode 100644 src/3rdparty/webkit/WebCore/dom/WorkerThread.cpp delete mode 100644 src/3rdparty/webkit/WebCore/dom/WorkerThread.h create mode 100644 src/3rdparty/webkit/WebCore/dom/XMLTokenizerScope.cpp create mode 100644 src/3rdparty/webkit/WebCore/dom/XMLTokenizerScope.h delete mode 100644 src/3rdparty/webkit/WebCore/editing/RemoveNodeAttributeCommand.cpp delete mode 100644 src/3rdparty/webkit/WebCore/editing/RemoveNodeAttributeCommand.h create mode 100644 src/3rdparty/webkit/WebCore/editing/ReplaceNodeWithSpanCommand.cpp create mode 100644 src/3rdparty/webkit/WebCore/editing/ReplaceNodeWithSpanCommand.h delete mode 100644 src/3rdparty/webkit/WebCore/editing/Selection.cpp delete mode 100644 src/3rdparty/webkit/WebCore/editing/Selection.h create mode 100644 src/3rdparty/webkit/WebCore/editing/VisibleSelection.cpp create mode 100644 src/3rdparty/webkit/WebCore/editing/VisibleSelection.h create mode 100644 src/3rdparty/webkit/WebCore/editing/android/EditorAndroid.cpp create mode 100644 src/3rdparty/webkit/WebCore/editing/chromium/EditorChromium.cpp create mode 100644 src/3rdparty/webkit/WebCore/editing/gtk/SelectionControllerGtk.cpp create mode 100644 src/3rdparty/webkit/WebCore/generated/HTMLElementFactory.cpp create mode 100644 src/3rdparty/webkit/WebCore/generated/HTMLElementFactory.h create mode 100644 src/3rdparty/webkit/WebCore/generated/JSClientRect.cpp create mode 100644 src/3rdparty/webkit/WebCore/generated/JSClientRect.h create mode 100644 src/3rdparty/webkit/WebCore/generated/JSClientRectList.cpp create mode 100644 src/3rdparty/webkit/WebCore/generated/JSClientRectList.h create mode 100644 src/3rdparty/webkit/WebCore/generated/JSCoordinates.cpp create mode 100644 src/3rdparty/webkit/WebCore/generated/JSCoordinates.h delete mode 100644 src/3rdparty/webkit/WebCore/generated/JSEventTargetNode.cpp delete mode 100644 src/3rdparty/webkit/WebCore/generated/JSEventTargetNode.h create mode 100644 src/3rdparty/webkit/WebCore/generated/JSInspectorController.cpp create mode 100644 src/3rdparty/webkit/WebCore/generated/JSInspectorController.h create mode 100644 src/3rdparty/webkit/WebCore/generated/JSWebKitCSSMatrix.cpp create mode 100644 src/3rdparty/webkit/WebCore/generated/JSWebKitCSSMatrix.h create mode 100644 src/3rdparty/webkit/WebCore/generated/JSWebKitPoint.cpp create mode 100644 src/3rdparty/webkit/WebCore/generated/JSWebKitPoint.h delete mode 100644 src/3rdparty/webkit/WebCore/generated/JSXSLTProcessor.cpp delete mode 100644 src/3rdparty/webkit/WebCore/generated/JSXSLTProcessor.h create mode 100644 src/3rdparty/webkit/WebCore/history/BackForwardListChromium.cpp create mode 100644 src/3rdparty/webkit/WebCore/history/CachedFrame.cpp create mode 100644 src/3rdparty/webkit/WebCore/history/CachedFrame.h create mode 100644 src/3rdparty/webkit/WebCore/history/CachedFramePlatformData.h delete mode 100644 src/3rdparty/webkit/WebCore/history/CachedPagePlatformData.h create mode 100644 src/3rdparty/webkit/WebCore/history/cf/HistoryPropertyList.cpp create mode 100644 src/3rdparty/webkit/WebCore/history/cf/HistoryPropertyList.h create mode 100644 src/3rdparty/webkit/WebCore/html/CanvasPixelArray.cpp create mode 100644 src/3rdparty/webkit/WebCore/html/CanvasPixelArray.h create mode 100644 src/3rdparty/webkit/WebCore/html/CanvasPixelArray.idl create mode 100644 src/3rdparty/webkit/WebCore/html/CollectionCache.cpp create mode 100644 src/3rdparty/webkit/WebCore/html/CollectionCache.h create mode 100644 src/3rdparty/webkit/WebCore/html/CollectionType.h delete mode 100644 src/3rdparty/webkit/WebCore/html/HTMLElementFactory.cpp delete mode 100644 src/3rdparty/webkit/WebCore/html/HTMLElementFactory.h create mode 100644 src/3rdparty/webkit/WebCore/html/HTMLElementsAllInOne.cpp create mode 100644 src/3rdparty/webkit/WebCore/html/HTMLNoScriptElement.cpp create mode 100644 src/3rdparty/webkit/WebCore/html/HTMLNoScriptElement.h create mode 100644 src/3rdparty/webkit/WebCore/html/HTMLParserQuirks.h create mode 100644 src/3rdparty/webkit/WebCore/inspector/ConsoleMessage.cpp create mode 100644 src/3rdparty/webkit/WebCore/inspector/ConsoleMessage.h create mode 100644 src/3rdparty/webkit/WebCore/inspector/InspectorController.idl create mode 100644 src/3rdparty/webkit/WebCore/inspector/InspectorDOMStorageResource.cpp create mode 100644 src/3rdparty/webkit/WebCore/inspector/InspectorDOMStorageResource.h create mode 100644 src/3rdparty/webkit/WebCore/inspector/InspectorDatabaseResource.cpp create mode 100644 src/3rdparty/webkit/WebCore/inspector/InspectorDatabaseResource.h create mode 100644 src/3rdparty/webkit/WebCore/inspector/InspectorFrontend.cpp create mode 100644 src/3rdparty/webkit/WebCore/inspector/InspectorFrontend.h create mode 100644 src/3rdparty/webkit/WebCore/inspector/InspectorResource.cpp create mode 100644 src/3rdparty/webkit/WebCore/inspector/InspectorResource.h create mode 100644 src/3rdparty/webkit/WebCore/inspector/JSONObject.cpp create mode 100644 src/3rdparty/webkit/WebCore/inspector/JSONObject.h create mode 100644 src/3rdparty/webkit/WebCore/inspector/front-end/BottomUpProfileDataGridTree.js create mode 100644 src/3rdparty/webkit/WebCore/inspector/front-end/DOMStorage.js create mode 100644 src/3rdparty/webkit/WebCore/inspector/front-end/DOMStorageDataGrid.js create mode 100644 src/3rdparty/webkit/WebCore/inspector/front-end/DOMStorageItemsView.js create mode 100644 src/3rdparty/webkit/WebCore/inspector/front-end/Images/domStorage.png create mode 100644 src/3rdparty/webkit/WebCore/inspector/front-end/Images/radioDot.png create mode 100644 src/3rdparty/webkit/WebCore/inspector/front-end/Images/userInputResultIcon.png create mode 100644 src/3rdparty/webkit/WebCore/inspector/front-end/ProfileDataGridTree.js create mode 100644 src/3rdparty/webkit/WebCore/inspector/front-end/TopDownProfileDataGridTree.js create mode 100644 src/3rdparty/webkit/WebCore/loader/CrossOriginAccessControl.cpp create mode 100644 src/3rdparty/webkit/WebCore/loader/CrossOriginAccessControl.h create mode 100644 src/3rdparty/webkit/WebCore/loader/CrossOriginPreflightResultCache.cpp create mode 100644 src/3rdparty/webkit/WebCore/loader/CrossOriginPreflightResultCache.h create mode 100644 src/3rdparty/webkit/WebCore/loader/DocumentThreadableLoader.cpp create mode 100644 src/3rdparty/webkit/WebCore/loader/DocumentThreadableLoader.h delete mode 100644 src/3rdparty/webkit/WebCore/loader/FrameLoaderClient.cpp create mode 100644 src/3rdparty/webkit/WebCore/loader/ThreadableLoader.cpp create mode 100644 src/3rdparty/webkit/WebCore/loader/ThreadableLoader.h create mode 100644 src/3rdparty/webkit/WebCore/loader/ThreadableLoaderClient.h create mode 100644 src/3rdparty/webkit/WebCore/loader/ThreadableLoaderClientWrapper.h create mode 100644 src/3rdparty/webkit/WebCore/loader/WorkerThreadableLoader.cpp create mode 100644 src/3rdparty/webkit/WebCore/loader/WorkerThreadableLoader.h create mode 100644 src/3rdparty/webkit/WebCore/loader/cf/ResourceLoaderCFNet.cpp delete mode 100644 src/3rdparty/webkit/WebCore/page/AXObjectCache.cpp delete mode 100644 src/3rdparty/webkit/WebCore/page/AXObjectCache.h delete mode 100644 src/3rdparty/webkit/WebCore/page/AccessibilityImageMapLink.cpp delete mode 100644 src/3rdparty/webkit/WebCore/page/AccessibilityImageMapLink.h delete mode 100644 src/3rdparty/webkit/WebCore/page/AccessibilityList.cpp delete mode 100644 src/3rdparty/webkit/WebCore/page/AccessibilityList.h delete mode 100644 src/3rdparty/webkit/WebCore/page/AccessibilityListBox.cpp delete mode 100644 src/3rdparty/webkit/WebCore/page/AccessibilityListBox.h delete mode 100644 src/3rdparty/webkit/WebCore/page/AccessibilityListBoxOption.cpp delete mode 100644 src/3rdparty/webkit/WebCore/page/AccessibilityListBoxOption.h delete mode 100644 src/3rdparty/webkit/WebCore/page/AccessibilityObject.cpp delete mode 100644 src/3rdparty/webkit/WebCore/page/AccessibilityObject.h delete mode 100644 src/3rdparty/webkit/WebCore/page/AccessibilityRenderObject.cpp delete mode 100644 src/3rdparty/webkit/WebCore/page/AccessibilityRenderObject.h delete mode 100644 src/3rdparty/webkit/WebCore/page/AccessibilityTable.cpp delete mode 100644 src/3rdparty/webkit/WebCore/page/AccessibilityTable.h delete mode 100644 src/3rdparty/webkit/WebCore/page/AccessibilityTableCell.cpp delete mode 100644 src/3rdparty/webkit/WebCore/page/AccessibilityTableCell.h delete mode 100644 src/3rdparty/webkit/WebCore/page/AccessibilityTableColumn.cpp delete mode 100644 src/3rdparty/webkit/WebCore/page/AccessibilityTableColumn.h delete mode 100644 src/3rdparty/webkit/WebCore/page/AccessibilityTableHeaderContainer.cpp delete mode 100644 src/3rdparty/webkit/WebCore/page/AccessibilityTableHeaderContainer.h delete mode 100644 src/3rdparty/webkit/WebCore/page/AccessibilityTableRow.cpp delete mode 100644 src/3rdparty/webkit/WebCore/page/AccessibilityTableRow.h create mode 100644 src/3rdparty/webkit/WebCore/page/Coordinates.cpp create mode 100644 src/3rdparty/webkit/WebCore/page/Coordinates.h create mode 100644 src/3rdparty/webkit/WebCore/page/Coordinates.idl create mode 100644 src/3rdparty/webkit/WebCore/page/DOMTimer.cpp create mode 100644 src/3rdparty/webkit/WebCore/page/DOMTimer.h delete mode 100644 src/3rdparty/webkit/WebCore/page/FramePrivate.h create mode 100644 src/3rdparty/webkit/WebCore/page/PageGroupLoadDeferrer.cpp create mode 100644 src/3rdparty/webkit/WebCore/page/PageGroupLoadDeferrer.h create mode 100644 src/3rdparty/webkit/WebCore/page/WebKitPoint.h create mode 100644 src/3rdparty/webkit/WebCore/page/WebKitPoint.idl create mode 100644 src/3rdparty/webkit/WebCore/page/android/DragControllerAndroid.cpp create mode 100644 src/3rdparty/webkit/WebCore/page/android/EventHandlerAndroid.cpp create mode 100644 src/3rdparty/webkit/WebCore/page/android/InspectorControllerAndroid.cpp create mode 100644 src/3rdparty/webkit/WebCore/page/animation/AnimationControllerPrivate.h delete mode 100644 src/3rdparty/webkit/WebCore/page/chromium/AccessibilityObjectChromium.cpp delete mode 100644 src/3rdparty/webkit/WebCore/page/chromium/AccessibilityObjectWrapper.h delete mode 100644 src/3rdparty/webkit/WebCore/page/qt/AccessibilityObjectQt.cpp delete mode 100644 src/3rdparty/webkit/WebCore/page/win/AXObjectCacheWin.cpp delete mode 100644 src/3rdparty/webkit/WebCore/page/win/AccessibilityObjectWin.cpp delete mode 100644 src/3rdparty/webkit/WebCore/page/win/AccessibilityObjectWrapperWin.h create mode 100644 src/3rdparty/webkit/WebCore/platform/ContentType.cpp create mode 100644 src/3rdparty/webkit/WebCore/platform/ContentType.h create mode 100644 src/3rdparty/webkit/WebCore/platform/CrossThreadCopier.cpp create mode 100644 src/3rdparty/webkit/WebCore/platform/CrossThreadCopier.h create mode 100644 src/3rdparty/webkit/WebCore/platform/KURLGoogle.cpp create mode 100644 src/3rdparty/webkit/WebCore/platform/KURLGooglePrivate.h create mode 100644 src/3rdparty/webkit/WebCore/platform/KeyboardCodes.h create mode 100644 src/3rdparty/webkit/WebCore/platform/RunLoopTimer.h create mode 100644 src/3rdparty/webkit/WebCore/platform/SuddenTermination.h create mode 100644 src/3rdparty/webkit/WebCore/platform/ThreadTimers.cpp create mode 100644 src/3rdparty/webkit/WebCore/platform/ThreadTimers.h create mode 100644 src/3rdparty/webkit/WebCore/platform/android/ClipboardAndroid.cpp create mode 100644 src/3rdparty/webkit/WebCore/platform/android/ClipboardAndroid.h create mode 100644 src/3rdparty/webkit/WebCore/platform/graphics/GraphicsLayer.cpp create mode 100644 src/3rdparty/webkit/WebCore/platform/graphics/GraphicsLayer.h create mode 100644 src/3rdparty/webkit/WebCore/platform/graphics/GraphicsLayerClient.h create mode 100644 src/3rdparty/webkit/WebCore/platform/graphics/MediaPlayerPrivate.h create mode 100644 src/3rdparty/webkit/WebCore/platform/graphics/filters/Filter.h create mode 100644 src/3rdparty/webkit/WebCore/platform/graphics/filters/FilterEffect.cpp create mode 100644 src/3rdparty/webkit/WebCore/platform/graphics/filters/FilterEffect.h create mode 100644 src/3rdparty/webkit/WebCore/platform/graphics/filters/SourceAlpha.cpp create mode 100644 src/3rdparty/webkit/WebCore/platform/graphics/filters/SourceAlpha.h create mode 100644 src/3rdparty/webkit/WebCore/platform/graphics/filters/SourceGraphic.cpp create mode 100644 src/3rdparty/webkit/WebCore/platform/graphics/filters/SourceGraphic.h create mode 100644 src/3rdparty/webkit/WebCore/platform/graphics/opentype/OpenTypeUtilities.cpp create mode 100644 src/3rdparty/webkit/WebCore/platform/graphics/opentype/OpenTypeUtilities.h create mode 100644 src/3rdparty/webkit/WebCore/platform/graphics/transforms/Matrix3DTransformOperation.cpp create mode 100644 src/3rdparty/webkit/WebCore/platform/graphics/transforms/Matrix3DTransformOperation.h create mode 100644 src/3rdparty/webkit/WebCore/platform/graphics/transforms/PerspectiveTransformOperation.cpp create mode 100644 src/3rdparty/webkit/WebCore/platform/graphics/transforms/PerspectiveTransformOperation.h create mode 100644 src/3rdparty/webkit/WebCore/platform/mac/GeolocationServiceMac.h create mode 100644 src/3rdparty/webkit/WebCore/platform/mac/GeolocationServiceMac.mm create mode 100644 src/3rdparty/webkit/WebCore/platform/mac/RuntimeApplicationChecks.h create mode 100644 src/3rdparty/webkit/WebCore/platform/mac/RuntimeApplicationChecks.mm create mode 100644 src/3rdparty/webkit/WebCore/platform/mac/SuddenTermination.mm delete mode 100644 src/3rdparty/webkit/WebCore/platform/mac/WebCoreTextRenderer.h delete mode 100644 src/3rdparty/webkit/WebCore/platform/mac/WebCoreTextRenderer.mm create mode 100644 src/3rdparty/webkit/WebCore/platform/network/HTTPHeaderMap.cpp delete mode 100644 src/3rdparty/webkit/WebCore/platform/network/chromium/ResourceResponse.h delete mode 100644 src/3rdparty/webkit/WebCore/platform/qt/KeyboardCodes.h delete mode 100644 src/3rdparty/webkit/WebCore/platform/qt/MenuEventProxy.h delete mode 100644 src/3rdparty/webkit/WebCore/platform/qt/SystemTimeQt.cpp delete mode 100644 src/3rdparty/webkit/WebCore/platform/text/TextDecoder.cpp delete mode 100644 src/3rdparty/webkit/WebCore/platform/text/TextDecoder.h create mode 100644 src/3rdparty/webkit/WebCore/platform/text/TextEncodingDetector.h create mode 100644 src/3rdparty/webkit/WebCore/platform/text/TextEncodingDetectorICU.cpp create mode 100644 src/3rdparty/webkit/WebCore/platform/text/TextEncodingDetectorNone.cpp create mode 100644 src/3rdparty/webkit/WebCore/plugins/PluginDataNone.cpp create mode 100644 src/3rdparty/webkit/WebCore/plugins/PluginPackageNone.cpp create mode 100644 src/3rdparty/webkit/WebCore/plugins/PluginViewNone.cpp create mode 100644 src/3rdparty/webkit/WebCore/plugins/qt/PluginContainerQt.cpp create mode 100644 src/3rdparty/webkit/WebCore/plugins/qt/PluginContainerQt.h delete mode 100644 src/3rdparty/webkit/WebCore/rendering/ListMarkerBox.cpp delete mode 100644 src/3rdparty/webkit/WebCore/rendering/ListMarkerBox.h create mode 100644 src/3rdparty/webkit/WebCore/rendering/OverlapTestRequestClient.h create mode 100644 src/3rdparty/webkit/WebCore/rendering/RenderBoxModelObject.cpp create mode 100644 src/3rdparty/webkit/WebCore/rendering/RenderBoxModelObject.h delete mode 100644 src/3rdparty/webkit/WebCore/rendering/RenderContainer.cpp delete mode 100644 src/3rdparty/webkit/WebCore/rendering/RenderContainer.h delete mode 100644 src/3rdparty/webkit/WebCore/rendering/RenderFlow.cpp delete mode 100644 src/3rdparty/webkit/WebCore/rendering/RenderFlow.h create mode 100644 src/3rdparty/webkit/WebCore/rendering/RenderLayerBacking.cpp create mode 100644 src/3rdparty/webkit/WebCore/rendering/RenderLayerBacking.h create mode 100644 src/3rdparty/webkit/WebCore/rendering/RenderLayerCompositor.cpp create mode 100644 src/3rdparty/webkit/WebCore/rendering/RenderLayerCompositor.h delete mode 100644 src/3rdparty/webkit/WebCore/rendering/RenderLegend.cpp delete mode 100644 src/3rdparty/webkit/WebCore/rendering/RenderLegend.h create mode 100644 src/3rdparty/webkit/WebCore/rendering/RenderLineBoxList.cpp create mode 100644 src/3rdparty/webkit/WebCore/rendering/RenderLineBoxList.h create mode 100644 src/3rdparty/webkit/WebCore/rendering/RenderMediaControls.cpp create mode 100644 src/3rdparty/webkit/WebCore/rendering/RenderMediaControls.h create mode 100644 src/3rdparty/webkit/WebCore/rendering/RenderObjectChildList.cpp create mode 100644 src/3rdparty/webkit/WebCore/rendering/RenderObjectChildList.h create mode 100644 src/3rdparty/webkit/WebCore/rendering/RenderSVGModelObject.cpp create mode 100644 src/3rdparty/webkit/WebCore/rendering/RenderSVGModelObject.h create mode 100644 src/3rdparty/webkit/WebCore/rendering/RenderSelectionInfo.h create mode 100644 src/3rdparty/webkit/WebCore/rendering/RenderThemeChromiumLinux.cpp create mode 100644 src/3rdparty/webkit/WebCore/rendering/RenderThemeChromiumLinux.h create mode 100644 src/3rdparty/webkit/WebCore/rendering/RenderThemeChromiumMac.h create mode 100644 src/3rdparty/webkit/WebCore/rendering/RenderThemeChromiumMac.mm create mode 100644 src/3rdparty/webkit/WebCore/rendering/RenderThemeChromiumSkia.cpp create mode 100644 src/3rdparty/webkit/WebCore/rendering/RenderThemeChromiumSkia.h create mode 100644 src/3rdparty/webkit/WebCore/rendering/RenderThemeChromiumWin.cpp create mode 100644 src/3rdparty/webkit/WebCore/rendering/RenderThemeChromiumWin.h create mode 100644 src/3rdparty/webkit/WebCore/rendering/ScrollBehavior.cpp create mode 100644 src/3rdparty/webkit/WebCore/rendering/ScrollBehavior.h create mode 100644 src/3rdparty/webkit/WebCore/rendering/TransformState.cpp create mode 100644 src/3rdparty/webkit/WebCore/rendering/TransformState.h delete mode 100644 src/3rdparty/webkit/WebCore/storage/SQLStatementCallback.idl delete mode 100644 src/3rdparty/webkit/WebCore/storage/SQLStatementErrorCallback.idl delete mode 100644 src/3rdparty/webkit/WebCore/storage/SQLTransactionCallback.idl delete mode 100644 src/3rdparty/webkit/WebCore/storage/SQLTransactionErrorCallback.idl delete mode 100644 src/3rdparty/webkit/WebCore/svg/Filter.cpp delete mode 100644 src/3rdparty/webkit/WebCore/svg/Filter.h delete mode 100644 src/3rdparty/webkit/WebCore/svg/FilterBuilder.h delete mode 100644 src/3rdparty/webkit/WebCore/svg/FilterEffect.cpp delete mode 100644 src/3rdparty/webkit/WebCore/svg/FilterEffect.h create mode 100644 src/3rdparty/webkit/WebCore/svg/SVGAllInOne.cpp create mode 100644 src/3rdparty/webkit/WebCore/svg/graphics/filters/SVGFilter.cpp create mode 100644 src/3rdparty/webkit/WebCore/svg/graphics/filters/SVGFilter.h create mode 100644 src/3rdparty/webkit/WebCore/svg/graphics/filters/SVGFilterBuilder.cpp create mode 100644 src/3rdparty/webkit/WebCore/svg/graphics/filters/SVGFilterBuilder.h delete mode 100644 src/3rdparty/webkit/WebCore/svg/graphics/filters/SVGFilterEffect.cpp delete mode 100644 src/3rdparty/webkit/WebCore/svg/graphics/filters/SVGFilterEffect.h delete mode 100644 src/3rdparty/webkit/WebCore/svg/graphics/qt/RenderPathQt.cpp delete mode 100644 src/3rdparty/webkit/WebCore/svg/graphics/qt/SVGPaintServerPatternQt.cpp delete mode 100644 src/3rdparty/webkit/WebCore/svg/graphics/qt/SVGPaintServerQt.cpp delete mode 100644 src/3rdparty/webkit/WebCore/svg/graphics/qt/SVGResourceFilterQt.cpp delete mode 100644 src/3rdparty/webkit/WebCore/svg/graphics/qt/SVGResourceMaskerQt.cpp create mode 100644 src/3rdparty/webkit/WebCore/wml/WMLFormControlElement.cpp create mode 100644 src/3rdparty/webkit/WebCore/wml/WMLFormControlElement.h create mode 100644 src/3rdparty/webkit/WebCore/wml/WMLInputElement.cpp create mode 100644 src/3rdparty/webkit/WebCore/wml/WMLInputElement.h create mode 100644 src/3rdparty/webkit/WebCore/wml/WMLOptGroupElement.cpp create mode 100644 src/3rdparty/webkit/WebCore/wml/WMLOptGroupElement.h create mode 100644 src/3rdparty/webkit/WebCore/wml/WMLOptionElement.cpp create mode 100644 src/3rdparty/webkit/WebCore/wml/WMLOptionElement.h create mode 100644 src/3rdparty/webkit/WebCore/wml/WMLSelectElement.cpp create mode 100644 src/3rdparty/webkit/WebCore/wml/WMLSelectElement.h create mode 100644 src/3rdparty/webkit/WebCore/workers/GenericWorkerTask.h create mode 100644 src/3rdparty/webkit/WebCore/workers/Worker.cpp create mode 100644 src/3rdparty/webkit/WebCore/workers/Worker.h create mode 100644 src/3rdparty/webkit/WebCore/workers/Worker.idl create mode 100644 src/3rdparty/webkit/WebCore/workers/WorkerContext.cpp create mode 100644 src/3rdparty/webkit/WebCore/workers/WorkerContext.h create mode 100644 src/3rdparty/webkit/WebCore/workers/WorkerContext.idl create mode 100644 src/3rdparty/webkit/WebCore/workers/WorkerContextProxy.h create mode 100644 src/3rdparty/webkit/WebCore/workers/WorkerImportScriptsClient.cpp create mode 100644 src/3rdparty/webkit/WebCore/workers/WorkerImportScriptsClient.h create mode 100644 src/3rdparty/webkit/WebCore/workers/WorkerLocation.cpp create mode 100644 src/3rdparty/webkit/WebCore/workers/WorkerLocation.h create mode 100644 src/3rdparty/webkit/WebCore/workers/WorkerLocation.idl create mode 100644 src/3rdparty/webkit/WebCore/workers/WorkerMessagingProxy.cpp create mode 100644 src/3rdparty/webkit/WebCore/workers/WorkerMessagingProxy.h create mode 100644 src/3rdparty/webkit/WebCore/workers/WorkerObjectProxy.h create mode 100644 src/3rdparty/webkit/WebCore/workers/WorkerRunLoop.cpp create mode 100644 src/3rdparty/webkit/WebCore/workers/WorkerRunLoop.h create mode 100644 src/3rdparty/webkit/WebCore/workers/WorkerThread.cpp create mode 100644 src/3rdparty/webkit/WebCore/workers/WorkerThread.h create mode 100644 src/3rdparty/webkit/WebKit/qt/Api/qwebelement.cpp create mode 100644 src/3rdparty/webkit/WebKit/qt/Api/qwebelement.h create mode 100644 src/3rdparty/webkit/WebKit/qt/docs/webkitsnippets/webelement/main.cpp create mode 100644 src/3rdparty/webkit/WebKit/qt/docs/webkitsnippets/webelement/webelement.pro create mode 100644 src/3rdparty/webkit/WebKit/qt/tests/qwebelement/qwebelement.pro create mode 100644 src/3rdparty/webkit/WebKit/qt/tests/qwebelement/qwebelement.qrc create mode 100644 src/3rdparty/webkit/WebKit/qt/tests/qwebelement/style.css create mode 100644 src/3rdparty/webkit/WebKit/qt/tests/qwebelement/style2.css create mode 100644 src/3rdparty/webkit/WebKit/qt/tests/qwebelement/tst_qwebelement.cpp create mode 100644 src/3rdparty/webkit/WebKit/qt/tests/qwebframe/style.css create mode 100644 src/3rdparty/webkit/WebKit/qt/tests/qwebpage/frametest/frame_a.html create mode 100644 src/3rdparty/webkit/WebKit/qt/tests/qwebpage/frametest/index.html create mode 100644 src/3rdparty/webkit/WebKit/qt/tests/qwebpage/tst_qwebpage.qrc create mode 100644 src/3rdparty/webkit/WebKit/qt/tests/qwebview/.gitignore create mode 100644 src/3rdparty/webkit/WebKit/qt/tests/qwebview/qwebview.pro create mode 100644 src/3rdparty/webkit/WebKit/qt/tests/qwebview/tst_qwebview.cpp diff --git a/src/3rdparty/webkit/ChangeLog b/src/3rdparty/webkit/ChangeLog index 76cfc80..1946d56 100644 --- a/src/3rdparty/webkit/ChangeLog +++ b/src/3rdparty/webkit/ChangeLog @@ -1,3 +1,303 @@ +2009-05-29 Gustavo Noronha Silva + + Reviewed by Jan Alonzo. + + Add a test-case for our HTTP backend, currently checking the + ref-counting of the SoupMessage. + + * GNUmakefile.am: + +2009-05-28 Dirk Schulze + + Reviewed by Nikolas Zimmermann. + + Enable the new build flag --filters for Gtk. More details in WebCore/ChangeLog. + + * configure.ac: + +2009-05-19 Xan Lopez + + Reviewed by Jan Alonzo and Gustavo Noronha. + + https://bugs.webkit.org/show_bug.cgi?id=25415 + [GTK][ATK] Please implement support for get_text_at_offset + + Add new test file for ATK. + + * GNUmakefile.am: + +2009-05-28 Gustavo Noronha Silva + + Rubber-stamped by Xan Lopez. + + Fix webkitgtk_cleanfiles to clean gtk-doc-related files in the + correct directory, so that we pass make distcheck. + + * GNUmakefile.am: + +2009-05-28 Xan Lopez + + Bump version numbers in preparation for 1.1.8 release. + + * configure.ac: + +2009-05-23 Jan Michael Alonzo + + Unreviewed build fix. Add gstreamer-video-0.10 libs to + GSTREAMER_LIBS to resolve an undefined reference to gst_video_get_size + - symbol used in MediaPlayerPrivateGstreamer. + + * configure.ac: + +2009-05-23 Jan Michael Alonzo + + Reviewed by Xan Lopez. + + [Gtk] Various autotools build refactoring and fixes + https://bugs.webkit.org/show_bug.cgi?id=25286 + + Refactor library LIBS. Move third-party libs in libwebkit instead + of libWebCore. + + * GNUmakefile.am: + +2009-05-22 Antonio Gomes + + Reviewed by Gustavo Noronha. + + Make Gtk build not bail out if gtk-doc-tools is not installed. + + Warning message shown instead. + + * autogen.sh: + +2009-05-22 Gustavo Noronha Silva + + Reviewed by Xan Lopez. + + Add big warnings about the glib unicode backend being slow and + incomplete, since it is a work in progress. + + * autotools/webkit.m4: + * configure.ac: + +2009-05-22 Dominik Röttsches + + Reviewed by Gustavo Noronha. + + https://bugs.webkit.org/show_bug.cgi?id=15914 + [GTK] Implement Unicode functionality using GLib + + Initial version of this patch by Jürg Billeter. + + Adding options for --with-unicode-backend=icu|glib + and checking for pango version >= 1.21.0 if GLib backend + is selected. Temporarily, until remaining parts of + this patch are committed, introduce WTF_USE_GLIB_ICU_UNICODE_HYBRID + macro to allow for a mixed compilation with WTF Unicode + backend based on GLib while text codecs and TextBreakIterator + remain ICU dependent. + + * GNUmakefile.am: + * configure.ac: + +2009-05-18 Gustavo Noronha Silva + + Reviewed by Gavin Barraclough. + + Enable YARR, and disable WREC for GTK+. + + * configure.ac: + +2009-05-18 Jan Michael Alonzo + + Reviewed by Xan Lopez. + + [Gtk] Various autotools build refactoring and fixes + https://bugs.webkit.org/show_bug.cgi?id=25286 + + Add support for running unit tests. Also run the tests whenever + the 'check' target runs. + + * GNUmakefile.am: + +2009-05-18 Jan Michael Alonzo + + Reviewed by Xan Lopez. + + [Gtk] Various autotools build refactoring and fixes + https://bugs.webkit.org/show_bug.cgi?id=25286 + + Style fixes + + * GNUmakefile.am: + +2009-05-18 Jan Michael Alonzo + + Reviewed by Xan Lopez. + + [Gtk] Various autotools build refactoring and fixes + https://bugs.webkit.org/show_bug.cgi?id=25286 + + Add -no-install and -no-fast-install to programs and tests that we + don't install. Also remove -O2 since this is already handled at + configure time. + + * GNUmakefile.am: + +2009-05-17 Jan Michael Alonzo + + Reviewed by Xan Lopez. + + [Gtk] Various autotools build refactoring and fixes + https://bugs.webkit.org/show_bug.cgi?id=25286 + + Refactor library cflags + + * GNUmakefile.am: + +2009-05-15 Fridrich Strba + + Reviewed by Jan Alonzo. + + Use AC_CANONICAL_HOST instead of AC_CANONICAL_SYSTEM, since + the JIT compiler is not a cross-compiler + + * configure.ac: + +2009-05-13 Xan Lopez + + Unreviewed: bump versions in preparation for 1.1.7 release. + + * configure.ac: + +2009-05-13 Xan Lopez + + Rubber-stamped by Gustavo Noronha. + + Revert commit r43563, since it breaks WebKitGTK+ when compiled + with gcc 4.4. + + * GNUmakefile.am: + +2009-05-12 Jan Michael Alonzo + + Reviewed by Holger Freyther. + + [Gtk] Various autotools build refactoring and fixes + https://bugs.webkit.org/show_bug.cgi?id=25286 + + Refactor use of CFLAGS, CXXFLAGS, LIBADD and LDFLAGS. + + * GNUmakefile.am: + +2009-05-09 Jan Michael Alonzo + + Reviewed by Gustavo Noronha. + + WebKit-r43163 won't build for gtk-directfb + https://bugs.webkit.org/show_bug.cgi?id=25538 + + Move the ENCHANT check out of the with_target conditional since it + applies to all targets + + * configure.ac: + +2009-05-09 Mike Hommey + + Reviewed by Geoffrey Garen. Landed by Jan Alonzo. + + Enable JIT on x86-64 gtk+ + https://bugs.webkit.org/show_bug.cgi?id=24724 + + * configure.ac: + +2009-05-08 Gustavo Noronha Silva + + Reviewed by Xan Lopez. + + Ship the gtk-doc.make file, so as to not depend on gtkdoc-tools. + + * GNUmakefile.am: + * autogen.sh: + +2009-05-06 Tor Arne Vestbø + + Reviewed by Simon Hausmann. + + Build QtWebKit as a framework on Mac + + This implies both debug and release build by default, unless + one of the --debug or --release config options are passed to + the build-webkit script. + + Frameworks can be disabled by passing CONFIG+=webkit_no_framework + to the build-webkit script. + + To be able to build both debug and release targets in parallel + we have to use separate output directories for the generated + sources, which is not optimal, but required to avoid race conditions. + + An optimization would be to only require this spit-up on Mac. + + * WebKit.pri: + +2009-04-30 Jan Michael Alonzo + + Unreviewed build GTK build fix + + * configure.ac: typo fix - javascript_debugger should be enable_javascript_debugger + +2009-04-30 Dimitri Glazkov + + Unreviewed, build fix. + + https://bugs.webkit.org/show_bug.cgi?id=25470 + Extend the cover of ENABLE_JAVASCRIPT_DEBUGGER to profiler. + + * configure.ac: Add autoconfig options, missed in the first commit. + +2009-04-28 Xan Lopez + + Unreviewed: bump versions in preparation for 1.1.6 release. + + * configure.ac: + +2009-04-25 Jan Michael Alonzo + + Reviewed by Xan Lopez. + + [GTK] Error reporting + https://bugs.webkit.org/show_bug.cgi?id=18344 + + Add webkiterror to the build. + + * GNUmakefile.am: + +2009-04-25 Jan Michael Alonzo + + Reviewed by Xan Lopez. + + [GTK] Error reporting + https://bugs.webkit.org/show_bug.cgi?id=18344 + + Add the default error page for installation. + + * GNUmakefile.am: + +2009-04-24 Diego Escalante Urrelo + + Reviewed by Gustavo Noronha. + + https://bugs.webkit.org/show_bug.cgi?id=15616 + [GTK] Add spell checking + + Add enchant support for spell-checking-languages property to work + properly. + + * GNUmakefile.am: + * configure.ac: + 2009-04-24 Simon Hausmann Reviewed by Ariya Hidayat. @@ -6,6 +306,375 @@ * WebKit.pro: Include docs.pri for "make docs" target. +2009-04-14 Xan Lopez + + Unreviewed version bump in preparation for 1.1.5 release. + + * configure.ac: + +2009-04-06 Gustavo Noronha Silva + + Rubber-stamped by Sam Weinig. + + Added rules to maintain the localization support. We cannot simply + use whatever gettextize gives us because our build system is + non-recursive. + + * GNUmakefile.am: + * configure.ac: + +2009-04-05 Mike Hommey + + Reviewed by Holger Freyther. + + Filter out all C++ symbols + https://bugs.webkit.org/show_bug.cgi?id=24960 + + Considering the public API is all C, we can just filter out all + C++ mangled symbols, which will avoid exporting symbols in some + corner cases such as gcc bugs on specific architectures, etc. + + * autotools/symbols.filter: + +2009-04-03 Gustavo Noronha Silva + + Reviewed by Holger Freyther. + + Require GTK+ >= 2.10; 2.8 is already very old, and some very + useful APIs are only available since 2.10. + + * configure.ac: + +2009-04-01 Christian Dywan + + Reviewed by Holger Freyther. + + Unit test WebKitDownload + http://bugs.webkit.org/show_bug.cgi?id=24844 + + * GNUmakefile.am: Add a unit test for downloading. + +2009-04-01 Gustavo Noronha Silva + + Unreviewed build fix. Fix make distcheck, after the gtk-doc + integration. + + * GNUmakefile.am: + +2009-03-30 Gustavo Noronha Silva + + Reviewed by Holger Freyther. + + Integrate gtk-doc into the Gtk+ buildsystem. + + * autogen.sh: + * configure.ac: + +2009-03-30 Xan Lopez + + Unreviewed: bump version to 1.1.4 for release. + + * configure.ac: + +2009-03-21 Xan Lopez + + Reviewed by Holger Freyther. + + Require gnome-keyring 2.26.0, since we were depending on an + unreleased trunk revision between 2.25.91 and 2.26.0. + + * configure.ac: + +2009-03-20 Jan Michael Alonzo + + Reviewed by Holger Freyther. + + [GTK] Misc patches for WebKitWebHistoryItem + https://bugs.webkit.org/show_bug.cgi?id=24493 + + Added build support for build the WebKitWebHistoryItem unit test. + + * GNUmakefile.am: + +2009-03-20 Jan Michael Alonzo + + Reviewed by Holger Freyther. + + Separate gtk unit tests + https://bugs.webkit.org/show_bug.cgi?id=24039 + + Build the unit tests accordingly. + + * GNUmakefile.am: + +2009-03-17 Gustavo Noronha Silva + + Reviewed by Mark Rowe. + + Enable HTML5 media elements support by default in the GTK+ port. + + * configure.ac: + +2009-03-17 Mike Hommey + + Reviewed by Holger Freyther. + + Do not export cti* symbols. + See http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=519924. + + * autotools/symbols.filter: + +2009-03-15 Xan Lopez + + Bump version to 1.1.3 for release and fix soversion + calculation (oops). Thanks to Frederik Himpe for pointing this + out. + + * configure.ac: + +2009-03-15 Xan Lopez + + Bump version and libtool version for release. + + * configure.ac: + +2009-03-14 Xan Lopez + + No review, build fix. + + Split clean rules to make distcheck pass. + + * GNUmakefile.am: + +2009-03-13 Mark Rowe + + Reviewed by Dan Bernstein. + + Remove rarely used Makefile targets from the Makefile. + + There are many situations in which the targets don't work as expected, + and their primary use is addressed by having the build system default + to building the appropriate architecture. + + * Makefile.shared: + +2009-03-11 Jan Michael Alonzo + + Reviewed by Holger Freyther. + + [Gtk] Fix make clean targets + https://bugs.webkit.org/show_bug.cgi?id=24450 + + Fix 'make' clean targets. We shouldn't be removing DerivedSources + if it's only clean. Only remove it if it's distclean or + maintainer-clean. Also remove build-related auxillary files on + dist/maintainer clean. + + * GNUmakefile.am: + +2009-03-11 Jan Michael Alonzo + + Reviewed by Holger Freyther + + [GTK]DumpRenderTree doesn't compile for non-X11 GTK ports anymore + https://bugs.webkit.org/show_bug.cgi?id=2260 + + pangoft2 is also used in directfb builds so use it for all targets + + * configure.ac: + +2009-03-02 Xan Lopez + + Reviewed by Mark Rowe. + + https://bugs.webkit.org/show_bug.cgi?id=24287 + [GTK] Move auth dialog feature to WebKit/ + + Add WebKitSoupAuthDialog files to build. + + * GNUmakefile.am: + +2009-03-03 Gustavo Noronha Silva + + Reviewed by Alexey Proskuryakov. + + https://bugs.webkit.org/show_bug.cgi?id=16826 + [Gtk] Implement WebKitDownload + + Adding new files related to WebKitDownload to the GTK+ port. + + * GNUmakefile.am: + +2009-03-02 Gustavo Noronha Silva + + Unreviewed build fix; adding missing files to EXTRA_DIST, so that + they show up in the tarball. + + * GNUmakefile.am: + +2009-03-01 Christian Dywan + + * configure.ac: Bump GTK port version to 1.1.1. + +2009-02-27 Gustavo Noronha Silva + + Unreviewed build fix. Adding the WebKit/gtk/webkitmarshal.list + file to EXTRA_DIST to fix make dist. + + * GNUmakefile.am: + +2009-02-26 Xan Lopez + + Reviewed by Holger Freyther. + + https://bugs.webkit.org/show_bug.cgi?id=16947 + [GTK] Missing HTTP Auth challenge + + Add HTTP authentication dialog with optional GNOME Keyring + storage. + + * GNUmakefile.am: + * configure.ac: + +2009-02-26 Xan Lopez + + Reviewed by Holger Freyther. + + https://bugs.webkit.org/show_bug.cgi?id=16947 + [GTK] Missing HTTP Auth challenge + + Take marshallers to be built from a manually maintained list + instead of grepping the sources. + + It's much faster, especially so now that we want to add + marshallers from WebCore too. A system to only take into account + the modified files when generating the marshallers from sources + could be hacked, but I think it's overkill considering how rarely + a new marshaller is added. + + * GNUmakefile.am: + +2009-02-24 Jan Michael Alonzo + + Reviewed by Alexey Proskuryakov. + + [Gtk] add options for 3D transforms and HTML5 channel messaging to the build + https://bugs.webkit.org/show_bug.cgi?id=24072 + + Add options for toggling 3D transforms and HTML5 channel messaging + support on or off. + + Also fix the web-workers option. It should be web-workers and not workers. + + * configure.ac: + +2009-02-23 Xan Lopez + + Reviewed by Alexey Proskuryakov. + + https://bugs.webkit.org/show_bug.cgi?id=22624 + [SOUP][GTK] Need API to get SoupSession from WebKit. + + Remove CURL support, the only supported HTTP backend is SOUP now. + + * GNUmakefile.am: + * configure.ac: + +2009-02-19 Christian Dywan + + Rubber-stamped by Holger Freyther. + + http://bugs.webkit.org/show_bug.cgi?id=22811 + Underlinking in Programs_UnitTests (GTK+ build) + + * GNUmakefile.am: Add GLIB_LIBS to unit test library flags. + +2009-02-18 Gustavo Noronha Silva + + Reviewed by Holger Freyther. + + Fix symbols.filter location, and add other missing files to the + autotools build, so that make dist works. + + * GNUmakefile.am: + +2009-02-17 Gustavo Noronha Silva + + Reviewed by Alexey Proskuryakov. + + https://bugs.webkit.org/show_bug.cgi?id=23939 + Release build being built with debugging symbols + + * configure.ac: Revert change done in revision 40790, since we + already have a AC_PROG_CXX macro call as part of WEBKIT_INIT + +2009-02-12 Gustavo Noronha Silva + + Reviewed by Eric Seidel. + + * configure.ac: Make soup the default HTTP backend for the Gtk port. + +2009-02-09 Calvin Walton + + Reviewed by Holger Freyther. + + https://bugs.webkit.org/show_bug.cgi?id=23823 + + [Gtk] Fix build with recent autotools + + Current versions of automake/libtool don't assume you want C++ enabled + by default any more, so explicitly check for a C++ compiler. + + * configure.ac: Add AC_PROG_CXX macro + +2009-02-02 Christian Dywan + + Rubber-stamped by Holger Freyther. + + Don't require Geolocation by default. + + * configure.ac: + +2009-01-30 Jan Michael Alonzo + + Reviewed by Nikolas Zimmermann. + + [Gtk] Refactor autoconf/configure.ac in preparation for jsc and webkit build splits + https://bugs.webkit.org/show_bug.cgi?id=22136 + + * GNUmakefile.am: + * acinclude.m4: Removed. + * autogen.sh: + * autotools/acinclude.m4: Added. + * autotools/dolt.m4: Added. + * autotools/symbols.filter: Renamed from symbols.filter. + * autotools/webkit.m4: Added. + * configure.ac: + +2009-01-30 Holger Hans Peter Freyther + + Reviewed by Nikolas Zimmermann. + + [GTK] Implement GeolocationService using the Geoclue library + + https://bugs.webkit.org/show_bug.cgi?id=22022 + + Untested implementation of the GeolocationService using the geoclue + library. Velocity handling is completely missing and the accuracy + handling might be wrong. + + * GNUmakefile.am: + * configure.ac: + +2009-01-11 Xan Lopez + + Reviewed by Holger Freyther. + + Bump version to 1.1.0 since we are breaking ABI and adding new + major features. + + * configure.ac: + 2008-12-19 Marco Barisione Reviewed by Holger Freyther. @@ -203,7 +872,7 @@ 2008-11-16 Geoffrey Garen Not reviewed. - + Try to fix gtk build. * configure.ac: @@ -801,7 +1470,7 @@ Reviewed by Mark. Add x86_64 rule. - + * Makefile: 2008-05-09 Simon Hausmann @@ -809,11 +1478,11 @@ Reviewed by Holger. Removed explicit linkage against libxml and libxslt on Qt/Mac builds. - + This dependency is completely unnecessary here and creates only problems by propagating through WebCore.pro over libQtWebKit.prl right now customer applications. - + * WebKit.pri: @@ -822,7 +1491,7 @@ Reviewed by Mark. Add an "x86_64" make rule. - + * Makefile.shared: 2008-05-02 Jan Michael Alonzo @@ -973,7 +1642,7 @@ http://bugs.webkit.org/show_bug.cgi?id=16476 Add support for multiple http backends, and add soup backend (off by default). - + * GNUmakefile.am: * configure.ac: @@ -1060,7 +1729,7 @@ Add separator '\' after libJavaScriptCore_la_LIBADD and cleanup whitespaces introduced in the previous commit. - * GNUmakefile.am: + * GNUmakefile.am: 2008-02-23 Jan Michael Alonzo @@ -2452,7 +3121,7 @@ Reviewed by Lars. Don't compile the ICO plugin when building against Qt >= 4.4 - + * WebKit.pro: diff --git a/src/3rdparty/webkit/JavaScriptCore/API/APICast.h b/src/3rdparty/webkit/JavaScriptCore/API/APICast.h index d356bca..762a15e 100644 --- a/src/3rdparty/webkit/JavaScriptCore/API/APICast.h +++ b/src/3rdparty/webkit/JavaScriptCore/API/APICast.h @@ -26,7 +26,10 @@ #ifndef APICast_h #define APICast_h +#include "JSNumberCell.h" #include "JSValue.h" +#include +#include namespace JSC { class ExecState; @@ -34,7 +37,6 @@ namespace JSC { class JSGlobalData; class JSObject; class JSValue; - class JSValuePtr; } typedef const struct OpaqueJSContextGroup* JSContextGroupRef; @@ -56,9 +58,18 @@ inline JSC::ExecState* toJS(JSGlobalContextRef c) return reinterpret_cast(c); } -inline JSC::JSValuePtr toJS(JSValueRef v) +inline JSC::JSValue toJS(JSC::ExecState* exec, JSValueRef v) { - return JSC::JSValuePtr::decode(reinterpret_cast(const_cast(v))); + JSC::JSValue jsValue = JSC::JSValue::decode(reinterpret_cast(const_cast(v))); +#if USE(ALTERNATE_JSIMMEDIATE) + UNUSED_PARAM(exec); +#else + if (jsValue && jsValue.isNumber()) { + ASSERT(jsValue.isAPIMangledNumber()); + return JSC::jsNumber(exec, jsValue.uncheckedGetNumber()); + } +#endif + return jsValue; } inline JSC::JSObject* toJS(JSObjectRef o) @@ -76,14 +87,17 @@ inline JSC::JSGlobalData* toJS(JSContextGroupRef g) return reinterpret_cast(const_cast(g)); } -inline JSValueRef toRef(JSC::JSValuePtr v) +inline JSValueRef toRef(JSC::ExecState* exec, JSC::JSValue v) { - return reinterpret_cast(JSC::JSValuePtr::encode(v)); -} - -inline JSValueRef* toRef(JSC::JSValuePtr* v) -{ - return reinterpret_cast(v); +#if USE(ALTERNATE_JSIMMEDIATE) + UNUSED_PARAM(exec); +#else + if (v && v.isNumber()) { + ASSERT(!v.isAPIMangledNumber()); + return reinterpret_cast(JSC::JSValue::encode(JSC::jsAPIMangledNumber(exec, v.uncheckedGetNumber()))); + } +#endif + return reinterpret_cast(JSC::JSValue::encode(v)); } inline JSObjectRef toRef(JSC::JSObject* o) diff --git a/src/3rdparty/webkit/JavaScriptCore/API/JSBase.cpp b/src/3rdparty/webkit/JavaScriptCore/API/JSBase.cpp index 2ffe345..fc3d0fe 100644 --- a/src/3rdparty/webkit/JavaScriptCore/API/JSBase.cpp +++ b/src/3rdparty/webkit/JavaScriptCore/API/JSBase.cpp @@ -55,15 +55,15 @@ JSValueRef JSEvaluateScript(JSContextRef ctx, JSStringRef script, JSObjectRef th if (completion.complType() == Throw) { if (exception) - *exception = toRef(completion.value()); + *exception = toRef(exec, completion.value()); return 0; } - + if (completion.value()) - return toRef(completion.value()); + return toRef(exec, completion.value()); // happens, for example, when the only statement is an empty (';') statement - return toRef(jsUndefined()); + return toRef(exec, jsUndefined()); } bool JSCheckScriptSyntax(JSContextRef ctx, JSStringRef script, JSStringRef sourceURL, int startingLineNumber, JSValueRef* exception) @@ -76,7 +76,7 @@ bool JSCheckScriptSyntax(JSContextRef ctx, JSStringRef script, JSStringRef sourc Completion completion = checkSyntax(exec->dynamicGlobalObject()->globalExec(), source); if (completion.complType() == Throw) { if (exception) - *exception = toRef(completion.value()); + *exception = toRef(exec, completion.value()); return false; } diff --git a/src/3rdparty/webkit/JavaScriptCore/API/JSBase.h b/src/3rdparty/webkit/JavaScriptCore/API/JSBase.h index f44d4ad..6f012ca 100644 --- a/src/3rdparty/webkit/JavaScriptCore/API/JSBase.h +++ b/src/3rdparty/webkit/JavaScriptCore/API/JSBase.h @@ -65,14 +65,20 @@ typedef struct OpaqueJSValue* JSObjectRef; /* JavaScript symbol exports */ #undef JS_EXPORT -#if defined(__GNUC__) +#if defined(BUILDING_WX__) + #define JS_EXPORT +#elif defined(__GNUC__) #define JS_EXPORT __attribute__((visibility("default"))) #elif defined(WIN32) || defined(_WIN32) /* * TODO: Export symbols with JS_EXPORT when using MSVC. * See http://bugs.webkit.org/show_bug.cgi?id=16227 */ - #define JS_EXPORT + #if defined(BUILDING_JavaScriptCore) || defined(BUILDING_WTF) + #define JS_EXPORT __declspec(dllexport) + #else + #define JS_EXPORT __declspec(dllimport) + #endif #else #define JS_EXPORT #endif diff --git a/src/3rdparty/webkit/JavaScriptCore/API/JSBasePrivate.h b/src/3rdparty/webkit/JavaScriptCore/API/JSBasePrivate.h index 6beacda..befa316 100644 --- a/src/3rdparty/webkit/JavaScriptCore/API/JSBasePrivate.h +++ b/src/3rdparty/webkit/JavaScriptCore/API/JSBasePrivate.h @@ -43,7 +43,7 @@ owns a large non-GC memory region. Calling this function will encourage the garbage collector to collect soon, hoping to reclaim that large non-GC memory region. */ -JS_EXPORT void JSReportExtraMemoryCost(JSContextRef ctx, size_t size) AVAILABLE_AFTER_WEBKIT_VERSION_3_1; +JS_EXPORT void JSReportExtraMemoryCost(JSContextRef ctx, size_t size) AVAILABLE_IN_WEBKIT_VERSION_4_0; #ifdef __cplusplus } diff --git a/src/3rdparty/webkit/JavaScriptCore/API/JSCallbackConstructor.cpp b/src/3rdparty/webkit/JavaScriptCore/API/JSCallbackConstructor.cpp index e10733e..64c83cb 100644 --- a/src/3rdparty/webkit/JavaScriptCore/API/JSCallbackConstructor.cpp +++ b/src/3rdparty/webkit/JavaScriptCore/API/JSCallbackConstructor.cpp @@ -61,10 +61,17 @@ static JSObject* constructJSCallback(ExecState* exec, JSObject* constructor, con int argumentCount = static_cast(args.size()); Vector arguments(argumentCount); for (int i = 0; i < argumentCount; i++) - arguments[i] = toRef(args.at(exec, i)); - - JSLock::DropAllLocks dropAllLocks(exec); - return toJS(callback(ctx, constructorRef, argumentCount, arguments.data(), toRef(exec->exceptionSlot()))); + arguments[i] = toRef(exec, args.at(i)); + + JSValueRef exception = 0; + JSObjectRef result; + { + JSLock::DropAllLocks dropAllLocks(exec); + result = callback(ctx, constructorRef, argumentCount, arguments.data(), &exception); + } + if (exception) + exec->setException(toJS(exec, exception)); + return toJS(result); } return toJS(JSObjectMake(ctx, static_cast(constructor)->classRef(), 0)); diff --git a/src/3rdparty/webkit/JavaScriptCore/API/JSCallbackConstructor.h b/src/3rdparty/webkit/JavaScriptCore/API/JSCallbackConstructor.h index cb8307f..1f06249 100644 --- a/src/3rdparty/webkit/JavaScriptCore/API/JSCallbackConstructor.h +++ b/src/3rdparty/webkit/JavaScriptCore/API/JSCallbackConstructor.h @@ -39,7 +39,7 @@ public: JSObjectCallAsConstructorCallback callback() const { return m_callback; } static const ClassInfo info; - static PassRefPtr createStructure(JSValuePtr proto) + static PassRefPtr createStructure(JSValue proto) { return Structure::create(proto, TypeInfo(ObjectType, ImplementsHasInstance | HasStandardGetOwnPropertySlot)); } diff --git a/src/3rdparty/webkit/JavaScriptCore/API/JSCallbackFunction.cpp b/src/3rdparty/webkit/JavaScriptCore/API/JSCallbackFunction.cpp index b82932e..1b3217b 100644 --- a/src/3rdparty/webkit/JavaScriptCore/API/JSCallbackFunction.cpp +++ b/src/3rdparty/webkit/JavaScriptCore/API/JSCallbackFunction.cpp @@ -46,19 +46,27 @@ JSCallbackFunction::JSCallbackFunction(ExecState* exec, JSObjectCallAsFunctionCa { } -JSValuePtr JSCallbackFunction::call(ExecState* exec, JSObject* functionObject, JSValuePtr thisValue, const ArgList& args) +JSValue JSCallbackFunction::call(ExecState* exec, JSObject* functionObject, JSValue thisValue, const ArgList& args) { JSContextRef execRef = toRef(exec); JSObjectRef functionRef = toRef(functionObject); - JSObjectRef thisObjRef = toRef(thisValue->toThisObject(exec)); + JSObjectRef thisObjRef = toRef(thisValue.toThisObject(exec)); int argumentCount = static_cast(args.size()); Vector arguments(argumentCount); for (int i = 0; i < argumentCount; i++) - arguments[i] = toRef(args.at(exec, i)); + arguments[i] = toRef(exec, args.at(i)); - JSLock::DropAllLocks dropAllLocks(exec); - return toJS(static_cast(functionObject)->m_callback(execRef, functionRef, thisObjRef, argumentCount, arguments.data(), toRef(exec->exceptionSlot()))); + JSValueRef exception = 0; + JSValueRef result; + { + JSLock::DropAllLocks dropAllLocks(exec); + result = static_cast(functionObject)->m_callback(execRef, functionRef, thisObjRef, argumentCount, arguments.data(), &exception); + } + if (exception) + exec->setException(toJS(exec, exception)); + + return toJS(exec, result); } CallType JSCallbackFunction::getCallData(CallData& callData) diff --git a/src/3rdparty/webkit/JavaScriptCore/API/JSCallbackFunction.h b/src/3rdparty/webkit/JavaScriptCore/API/JSCallbackFunction.h index 46f6fcc..7dd87b5 100644 --- a/src/3rdparty/webkit/JavaScriptCore/API/JSCallbackFunction.h +++ b/src/3rdparty/webkit/JavaScriptCore/API/JSCallbackFunction.h @@ -39,7 +39,7 @@ public: // InternalFunction mish-mashes constructor and function behavior -- we should // refactor the code so this override isn't necessary - static PassRefPtr createStructure(JSValuePtr proto) + static PassRefPtr createStructure(JSValue proto) { return Structure::create(proto, TypeInfo(ObjectType, HasStandardGetOwnPropertySlot)); } @@ -48,7 +48,7 @@ private: virtual CallType getCallData(CallData&); virtual const ClassInfo* classInfo() const { return &info; } - static JSValuePtr call(ExecState*, JSObject*, JSValuePtr, const ArgList&); + static JSValue JSC_HOST_CALL call(ExecState*, JSObject*, JSValue, const ArgList&); JSObjectCallAsFunctionCallback m_callback; }; diff --git a/src/3rdparty/webkit/JavaScriptCore/API/JSCallbackObject.h b/src/3rdparty/webkit/JavaScriptCore/API/JSCallbackObject.h index 9001c43..9d22ad9 100644 --- a/src/3rdparty/webkit/JavaScriptCore/API/JSCallbackObject.h +++ b/src/3rdparty/webkit/JavaScriptCore/API/JSCallbackObject.h @@ -48,7 +48,7 @@ public: JSClassRef classRef() const { return m_callbackObjectData->jsClass; } bool inherits(JSClassRef) const; - static PassRefPtr createStructure(JSValuePtr proto) + static PassRefPtr createStructure(JSValue proto) { return Structure::create(proto, TypeInfo(ObjectType, ImplementsHasInstance | OverridesHasInstance)); } @@ -59,12 +59,12 @@ private: virtual bool getOwnPropertySlot(ExecState*, const Identifier&, PropertySlot&); virtual bool getOwnPropertySlot(ExecState*, unsigned, PropertySlot&); - virtual void put(ExecState*, const Identifier&, JSValuePtr, PutPropertySlot&); + virtual void put(ExecState*, const Identifier&, JSValue, PutPropertySlot&); virtual bool deleteProperty(ExecState*, const Identifier&); virtual bool deleteProperty(ExecState*, unsigned); - virtual bool hasInstance(ExecState* exec, JSValuePtr value, JSValuePtr proto); + virtual bool hasInstance(ExecState* exec, JSValue value, JSValue proto); virtual void getPropertyNames(ExecState*, PropertyNameArray&); @@ -77,14 +77,14 @@ private: void init(ExecState*); - static JSCallbackObject* asCallbackObject(JSValuePtr); + static JSCallbackObject* asCallbackObject(JSValue); - static JSValuePtr call(ExecState*, JSObject* functionObject, JSValuePtr thisValue, const ArgList&); + static JSValue JSC_HOST_CALL call(ExecState*, JSObject* functionObject, JSValue thisValue, const ArgList&); static JSObject* construct(ExecState*, JSObject* constructor, const ArgList&); - static JSValuePtr staticValueGetter(ExecState*, const Identifier&, const PropertySlot&); - static JSValuePtr staticFunctionGetter(ExecState*, const Identifier&, const PropertySlot&); - static JSValuePtr callbackGetter(ExecState*, const Identifier&, const PropertySlot&); + static JSValue staticValueGetter(ExecState*, const Identifier&, const PropertySlot&); + static JSValue staticFunctionGetter(ExecState*, const Identifier&, const PropertySlot&); + static JSValue callbackGetter(ExecState*, const Identifier&, const PropertySlot&); struct JSCallbackObjectData { JSCallbackObjectData(void* privateData, JSClassRef jsClass) diff --git a/src/3rdparty/webkit/JavaScriptCore/API/JSCallbackObjectFunctions.h b/src/3rdparty/webkit/JavaScriptCore/API/JSCallbackObjectFunctions.h index fdbafbc..987c59f 100644 --- a/src/3rdparty/webkit/JavaScriptCore/API/JSCallbackObjectFunctions.h +++ b/src/3rdparty/webkit/JavaScriptCore/API/JSCallbackObjectFunctions.h @@ -40,7 +40,7 @@ namespace JSC { template -inline JSCallbackObject* JSCallbackObject::asCallbackObject(JSValuePtr value) +inline JSCallbackObject* JSCallbackObject::asCallbackObject(JSValue value) { ASSERT(asObject(value)->inherits(&info)); return static_cast(asObject(value)); @@ -99,7 +99,7 @@ template UString JSCallbackObject::className() const { UString thisClassName = classRef()->className(); - if (!thisClassName.isNull()) + if (!thisClassName.isEmpty()) return thisClassName; return Base::className(); @@ -125,9 +125,19 @@ bool JSCallbackObject::getOwnPropertySlot(ExecState* exec, const Identifie } else if (JSObjectGetPropertyCallback getProperty = jsClass->getProperty) { if (!propertyNameRef) propertyNameRef = OpaqueJSString::create(propertyName.ustring()); - JSLock::DropAllLocks dropAllLocks(exec); - if (JSValueRef value = getProperty(ctx, thisRef, propertyNameRef.get(), toRef(exec->exceptionSlot()))) { - slot.setValue(toJS(value)); + JSValueRef exception = 0; + JSValueRef value; + { + JSLock::DropAllLocks dropAllLocks(exec); + value = getProperty(ctx, thisRef, propertyNameRef.get(), &exception); + } + exec->setException(toJS(exec, exception)); + if (value) { + slot.setValue(toJS(exec, value)); + return true; + } + if (exception) { + slot.setValue(jsUndefined()); return true; } } @@ -157,19 +167,25 @@ bool JSCallbackObject::getOwnPropertySlot(ExecState* exec, unsigned proper } template -void JSCallbackObject::put(ExecState* exec, const Identifier& propertyName, JSValuePtr value, PutPropertySlot& slot) +void JSCallbackObject::put(ExecState* exec, const Identifier& propertyName, JSValue value, PutPropertySlot& slot) { JSContextRef ctx = toRef(exec); JSObjectRef thisRef = toRef(this); RefPtr propertyNameRef; - JSValueRef valueRef = toRef(value); + JSValueRef valueRef = toRef(exec, value); for (JSClassRef jsClass = classRef(); jsClass; jsClass = jsClass->parentClass) { if (JSObjectSetPropertyCallback setProperty = jsClass->setProperty) { if (!propertyNameRef) propertyNameRef = OpaqueJSString::create(propertyName.ustring()); - JSLock::DropAllLocks dropAllLocks(exec); - if (setProperty(ctx, thisRef, propertyNameRef.get(), valueRef, toRef(exec->exceptionSlot()))) + JSValueRef exception = 0; + bool result; + { + JSLock::DropAllLocks dropAllLocks(exec); + result = setProperty(ctx, thisRef, propertyNameRef.get(), valueRef, &exception); + } + exec->setException(toJS(exec, exception)); + if (result || exception) return; } @@ -180,8 +196,14 @@ void JSCallbackObject::put(ExecState* exec, const Identifier& propertyName if (JSObjectSetPropertyCallback setProperty = entry->setProperty) { if (!propertyNameRef) propertyNameRef = OpaqueJSString::create(propertyName.ustring()); - JSLock::DropAllLocks dropAllLocks(exec); - if (setProperty(ctx, thisRef, propertyNameRef.get(), valueRef, toRef(exec->exceptionSlot()))) + JSValueRef exception = 0; + bool result; + { + JSLock::DropAllLocks dropAllLocks(exec); + result = setProperty(ctx, thisRef, propertyNameRef.get(), valueRef, &exception); + } + exec->setException(toJS(exec, exception)); + if (result || exception) return; } else throwError(exec, ReferenceError, "Attempt to set a property that is not settable."); @@ -212,8 +234,14 @@ bool JSCallbackObject::deleteProperty(ExecState* exec, const Identifier& p if (JSObjectDeletePropertyCallback deleteProperty = jsClass->deleteProperty) { if (!propertyNameRef) propertyNameRef = OpaqueJSString::create(propertyName.ustring()); - JSLock::DropAllLocks dropAllLocks(exec); - if (deleteProperty(ctx, thisRef, propertyNameRef.get(), toRef(exec->exceptionSlot()))) + JSValueRef exception = 0; + bool result; + { + JSLock::DropAllLocks dropAllLocks(exec); + result = deleteProperty(ctx, thisRef, propertyNameRef.get(), &exception); + } + exec->setException(toJS(exec, exception)); + if (result || exception) return true; } @@ -266,9 +294,15 @@ JSObject* JSCallbackObject::construct(ExecState* exec, JSObject* construct int argumentCount = static_cast(args.size()); Vector arguments(argumentCount); for (int i = 0; i < argumentCount; i++) - arguments[i] = toRef(args.at(exec, i)); - JSLock::DropAllLocks dropAllLocks(exec); - return toJS(callAsConstructor(execRef, constructorRef, argumentCount, arguments.data(), toRef(exec->exceptionSlot()))); + arguments[i] = toRef(exec, args.at(i)); + JSValueRef exception = 0; + JSObject* result; + { + JSLock::DropAllLocks dropAllLocks(exec); + result = toJS(callAsConstructor(execRef, constructorRef, argumentCount, arguments.data(), &exception)); + } + exec->setException(toJS(exec, exception)); + return result; } } @@ -277,15 +311,21 @@ JSObject* JSCallbackObject::construct(ExecState* exec, JSObject* construct } template -bool JSCallbackObject::hasInstance(ExecState* exec, JSValuePtr value, JSValuePtr) +bool JSCallbackObject::hasInstance(ExecState* exec, JSValue value, JSValue) { JSContextRef execRef = toRef(exec); JSObjectRef thisRef = toRef(this); for (JSClassRef jsClass = classRef(); jsClass; jsClass = jsClass->parentClass) { if (JSObjectHasInstanceCallback hasInstance = jsClass->hasInstance) { - JSLock::DropAllLocks dropAllLocks(exec); - return hasInstance(execRef, thisRef, toRef(value), toRef(exec->exceptionSlot())); + JSValueRef exception = 0; + bool result; + { + JSLock::DropAllLocks dropAllLocks(exec); + result = hasInstance(execRef, thisRef, toRef(exec, value), &exception); + } + exec->setException(toJS(exec, exception)); + return result; } } return false; @@ -304,25 +344,31 @@ CallType JSCallbackObject::getCallData(CallData& callData) } template -JSValuePtr JSCallbackObject::call(ExecState* exec, JSObject* functionObject, JSValuePtr thisValue, const ArgList& args) +JSValue JSCallbackObject::call(ExecState* exec, JSObject* functionObject, JSValue thisValue, const ArgList& args) { JSContextRef execRef = toRef(exec); JSObjectRef functionRef = toRef(functionObject); - JSObjectRef thisObjRef = toRef(thisValue->toThisObject(exec)); + JSObjectRef thisObjRef = toRef(thisValue.toThisObject(exec)); for (JSClassRef jsClass = static_cast*>(functionObject)->classRef(); jsClass; jsClass = jsClass->parentClass) { if (JSObjectCallAsFunctionCallback callAsFunction = jsClass->callAsFunction) { int argumentCount = static_cast(args.size()); Vector arguments(argumentCount); for (int i = 0; i < argumentCount; i++) - arguments[i] = toRef(args.at(exec, i)); - JSLock::DropAllLocks dropAllLocks(exec); - return toJS(callAsFunction(execRef, functionRef, thisObjRef, argumentCount, arguments.data(), toRef(exec->exceptionSlot()))); + arguments[i] = toRef(exec, args.at(i)); + JSValueRef exception = 0; + JSValue result; + { + JSLock::DropAllLocks dropAllLocks(exec); + result = toJS(exec, callAsFunction(execRef, functionRef, thisObjRef, argumentCount, arguments.data(), &exception)); + } + exec->setException(toJS(exec, exception)); + return result; } } ASSERT_NOT_REACHED(); // getCallData should prevent us from reaching here - return noValue(); + return JSValue(); } template @@ -376,9 +422,17 @@ double JSCallbackObject::toNumber(ExecState* exec) const for (JSClassRef jsClass = classRef(); jsClass; jsClass = jsClass->parentClass) if (JSObjectConvertToTypeCallback convertToType = jsClass->convertToType) { - JSLock::DropAllLocks dropAllLocks(exec); - if (JSValueRef value = convertToType(ctx, thisRef, kJSTypeNumber, toRef(exec->exceptionSlot()))) - return toJS(value)->getNumber(); + JSValueRef exception = 0; + JSValueRef value; + { + JSLock::DropAllLocks dropAllLocks(exec); + value = convertToType(ctx, thisRef, kJSTypeNumber, &exception); + } + exec->setException(toJS(exec, exception)); + if (value) { + double dValue; + return toJS(exec, value).getNumber(dValue) ? dValue : NaN; + } } return Base::toNumber(exec); @@ -392,13 +446,17 @@ UString JSCallbackObject::toString(ExecState* exec) const for (JSClassRef jsClass = classRef(); jsClass; jsClass = jsClass->parentClass) if (JSObjectConvertToTypeCallback convertToType = jsClass->convertToType) { + JSValueRef exception = 0; JSValueRef value; { JSLock::DropAllLocks dropAllLocks(exec); - value = convertToType(ctx, thisRef, kJSTypeString, toRef(exec->exceptionSlot())); + value = convertToType(ctx, thisRef, kJSTypeString, &exception); } + exec->setException(toJS(exec, exception)); if (value) - return toJS(value)->getString(); + return toJS(exec, value).getString(); + if (exception) + return ""; } return Base::toString(exec); @@ -427,7 +485,7 @@ bool JSCallbackObject::inherits(JSClassRef c) const } template -JSValuePtr JSCallbackObject::staticValueGetter(ExecState* exec, const Identifier& propertyName, const PropertySlot& slot) +JSValue JSCallbackObject::staticValueGetter(ExecState* exec, const Identifier& propertyName, const PropertySlot& slot) { JSCallbackObject* thisObj = asCallbackObject(slot.slotBase()); @@ -440,16 +498,24 @@ JSValuePtr JSCallbackObject::staticValueGetter(ExecState* exec, const Iden if (JSObjectGetPropertyCallback getProperty = entry->getProperty) { if (!propertyNameRef) propertyNameRef = OpaqueJSString::create(propertyName.ustring()); - JSLock::DropAllLocks dropAllLocks(exec); - if (JSValueRef value = getProperty(toRef(exec), thisRef, propertyNameRef.get(), toRef(exec->exceptionSlot()))) - return toJS(value); + JSValueRef exception = 0; + JSValueRef value; + { + JSLock::DropAllLocks dropAllLocks(exec); + value = getProperty(toRef(exec), thisRef, propertyNameRef.get(), &exception); + } + exec->setException(toJS(exec, exception)); + if (value) + return toJS(exec, value); + if (exception) + return jsUndefined(); } return throwError(exec, ReferenceError, "Static value property defined with NULL getProperty callback."); } template -JSValuePtr JSCallbackObject::staticFunctionGetter(ExecState* exec, const Identifier& propertyName, const PropertySlot& slot) +JSValue JSCallbackObject::staticFunctionGetter(ExecState* exec, const Identifier& propertyName, const PropertySlot& slot) { JSCallbackObject* thisObj = asCallbackObject(slot.slotBase()); @@ -474,7 +540,7 @@ JSValuePtr JSCallbackObject::staticFunctionGetter(ExecState* exec, const I } template -JSValuePtr JSCallbackObject::callbackGetter(ExecState* exec, const Identifier& propertyName, const PropertySlot& slot) +JSValue JSCallbackObject::callbackGetter(ExecState* exec, const Identifier& propertyName, const PropertySlot& slot) { JSCallbackObject* thisObj = asCallbackObject(slot.slotBase()); @@ -485,9 +551,17 @@ JSValuePtr JSCallbackObject::callbackGetter(ExecState* exec, const Identif if (JSObjectGetPropertyCallback getProperty = jsClass->getProperty) { if (!propertyNameRef) propertyNameRef = OpaqueJSString::create(propertyName.ustring()); - JSLock::DropAllLocks dropAllLocks(exec); - if (JSValueRef value = getProperty(toRef(exec), thisRef, propertyNameRef.get(), toRef(exec->exceptionSlot()))) - return toJS(value); + JSValueRef exception = 0; + JSValueRef value; + { + JSLock::DropAllLocks dropAllLocks(exec); + value = getProperty(toRef(exec), thisRef, propertyNameRef.get(), &exception); + } + exec->setException(toJS(exec, exception)); + if (value) + return toJS(exec, value); + if (exception) + return jsUndefined(); } return throwError(exec, ReferenceError, "hasProperty callback returned true for a property that doesn't exist."); diff --git a/src/3rdparty/webkit/JavaScriptCore/API/JSClassRef.cpp b/src/3rdparty/webkit/JavaScriptCore/API/JSClassRef.cpp index 77a33f0..afde7ce 100644 --- a/src/3rdparty/webkit/JavaScriptCore/API/JSClassRef.cpp +++ b/src/3rdparty/webkit/JavaScriptCore/API/JSClassRef.cpp @@ -111,7 +111,7 @@ PassRefPtr OpaqueJSClass::createNoAutomaticPrototype(const JSClas return adoptRef(new OpaqueJSClass(definition, 0)); } -void clearReferenceToPrototype(JSObjectRef prototype) +static void clearReferenceToPrototype(JSObjectRef prototype) { OpaqueJSClassContextData* jsClassData = static_cast(JSObjectGetPrivate(prototype)); ASSERT(jsClassData); diff --git a/src/3rdparty/webkit/JavaScriptCore/API/JSContextRef.cpp b/src/3rdparty/webkit/JavaScriptCore/API/JSContextRef.cpp index 40c45d3..a3bdc69 100644 --- a/src/3rdparty/webkit/JavaScriptCore/API/JSContextRef.cpp +++ b/src/3rdparty/webkit/JavaScriptCore/API/JSContextRef.cpp @@ -44,6 +44,7 @@ using namespace JSC; JSContextGroupRef JSContextGroupCreate() { + initializeThreading(); return toRef(JSGlobalData::create().releaseRef()); } @@ -60,6 +61,7 @@ void JSContextGroupRelease(JSContextGroupRef group) JSGlobalContextRef JSGlobalContextCreate(JSClassRef globalObjectClass) { + initializeThreading(); #if PLATFORM(DARWIN) // When running on Tiger or Leopard, or if the application was linked before JSGlobalContextCreate was changed // to use a unique JSGlobalData, we use a shared one for compatibility. @@ -95,7 +97,7 @@ JSGlobalContextRef JSGlobalContextCreateInGroup(JSContextGroupRef group, JSClass JSGlobalObject* globalObject = new (globalData.get()) JSCallbackObject(globalObjectClass); ExecState* exec = globalObject->globalExec(); - JSValuePtr prototype = globalObjectClass->prototype(exec); + JSValue prototype = globalObjectClass->prototype(exec); if (!prototype) prototype = jsNull(); globalObject->resetPrototype(prototype); diff --git a/src/3rdparty/webkit/JavaScriptCore/API/JSContextRef.h b/src/3rdparty/webkit/JavaScriptCore/API/JSContextRef.h index bc89511..c5c8a71 100644 --- a/src/3rdparty/webkit/JavaScriptCore/API/JSContextRef.h +++ b/src/3rdparty/webkit/JavaScriptCore/API/JSContextRef.h @@ -48,7 +48,7 @@ extern "C" { synchronization is required. @result The created JSContextGroup. */ -JS_EXPORT JSContextGroupRef JSContextGroupCreate() AVAILABLE_AFTER_WEBKIT_VERSION_3_1; +JS_EXPORT JSContextGroupRef JSContextGroupCreate() AVAILABLE_IN_WEBKIT_VERSION_4_0; /*! @function @@ -56,14 +56,14 @@ JS_EXPORT JSContextGroupRef JSContextGroupCreate() AVAILABLE_AFTER_WEBKIT_VERSIO @param group The JSContextGroup to retain. @result A JSContextGroup that is the same as group. */ -JS_EXPORT JSContextGroupRef JSContextGroupRetain(JSContextGroupRef group) AVAILABLE_AFTER_WEBKIT_VERSION_3_1; +JS_EXPORT JSContextGroupRef JSContextGroupRetain(JSContextGroupRef group) AVAILABLE_IN_WEBKIT_VERSION_4_0; /*! @function @abstract Releases a JavaScript context group. @param group The JSContextGroup to release. */ -JS_EXPORT void JSContextGroupRelease(JSContextGroupRef group) AVAILABLE_AFTER_WEBKIT_VERSION_3_1; +JS_EXPORT void JSContextGroupRelease(JSContextGroupRef group) AVAILABLE_IN_WEBKIT_VERSION_4_0; /*! @function @@ -92,7 +92,7 @@ JS_EXPORT JSGlobalContextRef JSGlobalContextCreate(JSClassRef globalObjectClass) @result A JSGlobalContext with a global object of class globalObjectClass and a context group equal to group. */ -JS_EXPORT JSGlobalContextRef JSGlobalContextCreateInGroup(JSContextGroupRef group, JSClassRef globalObjectClass) AVAILABLE_AFTER_WEBKIT_VERSION_3_1; +JS_EXPORT JSGlobalContextRef JSGlobalContextCreateInGroup(JSContextGroupRef group, JSClassRef globalObjectClass) AVAILABLE_IN_WEBKIT_VERSION_4_0; /*! @function @@ -123,7 +123,7 @@ JS_EXPORT JSObjectRef JSContextGetGlobalObject(JSContextRef ctx); @param ctx The JSContext whose group you want to get. @result ctx's group. */ -JS_EXPORT JSContextGroupRef JSContextGetGroup(JSContextRef ctx) AVAILABLE_AFTER_WEBKIT_VERSION_3_1; +JS_EXPORT JSContextGroupRef JSContextGetGroup(JSContextRef ctx) AVAILABLE_IN_WEBKIT_VERSION_4_0; #ifdef __cplusplus } diff --git a/src/3rdparty/webkit/JavaScriptCore/API/JSObjectRef.cpp b/src/3rdparty/webkit/JavaScriptCore/API/JSObjectRef.cpp index c08b8b0..50ee635 100644 --- a/src/3rdparty/webkit/JavaScriptCore/API/JSObjectRef.cpp +++ b/src/3rdparty/webkit/JavaScriptCore/API/JSObjectRef.cpp @@ -32,6 +32,7 @@ #include "ErrorConstructor.h" #include "FunctionConstructor.h" #include "Identifier.h" +#include "InitializeThreading.h" #include "JSArray.h" #include "JSCallbackConstructor.h" #include "JSCallbackFunction.h" @@ -52,6 +53,7 @@ using namespace JSC; JSClassRef JSClassCreate(const JSClassDefinition* definition) { + initializeThreading(); RefPtr jsClass = (definition->attributes & kJSClassAttributeNoAutomaticPrototype) ? OpaqueJSClass::createNoAutomaticPrototype(definition) : OpaqueJSClass::create(definition); @@ -103,10 +105,10 @@ JSObjectRef JSObjectMakeConstructor(JSContextRef ctx, JSClassRef jsClass, JSObje exec->globalData().heap.registerThread(); JSLock lock(exec); - JSValuePtr jsPrototype = jsClass - ? jsClass->prototype(exec) - : exec->lexicalGlobalObject()->objectPrototype(); - + JSValue jsPrototype = jsClass ? jsClass->prototype(exec) : 0; + if (!jsPrototype) + jsPrototype = exec->lexicalGlobalObject()->objectPrototype(); + JSCallbackConstructor* constructor = new (exec) JSCallbackConstructor(exec->lexicalGlobalObject()->callbackConstructorStructure(), jsClass, callAsConstructor); constructor->putDirect(exec->propertyNames().prototype, jsPrototype, DontEnum | DontDelete | ReadOnly); return toRef(constructor); @@ -120,7 +122,7 @@ JSObjectRef JSObjectMakeFunction(JSContextRef ctx, JSStringRef name, unsigned pa Identifier nameID = name ? name->identifier(&exec->globalData()) : Identifier(exec, "anonymous"); - ArgList args; + MarkedArgumentBuffer args; for (unsigned i = 0; i < parameterCount; i++) args.append(jsString(exec, parameterNames[i]->ustring())); args.append(jsString(exec, body->ustring())); @@ -128,7 +130,7 @@ JSObjectRef JSObjectMakeFunction(JSContextRef ctx, JSStringRef name, unsigned pa JSObject* result = constructFunction(exec, args, nameID, sourceURL->ustring(), startingLineNumber); if (exec->hadException()) { if (exception) - *exception = toRef(exec->exception()); + *exception = toRef(exec, exec->exception()); exec->clearException(); result = 0; } @@ -143,9 +145,9 @@ JSObjectRef JSObjectMakeArray(JSContextRef ctx, size_t argumentCount, const JSVa JSObject* result; if (argumentCount) { - ArgList argList; + MarkedArgumentBuffer argList; for (size_t i = 0; i < argumentCount; ++i) - argList.append(toJS(arguments[i])); + argList.append(toJS(exec, arguments[i])); result = constructArray(exec, argList); } else @@ -153,7 +155,7 @@ JSObjectRef JSObjectMakeArray(JSContextRef ctx, size_t argumentCount, const JSVa if (exec->hadException()) { if (exception) - *exception = toRef(exec->exception()); + *exception = toRef(exec, exec->exception()); exec->clearException(); result = 0; } @@ -167,14 +169,14 @@ JSObjectRef JSObjectMakeDate(JSContextRef ctx, size_t argumentCount, const JSVal exec->globalData().heap.registerThread(); JSLock lock(exec); - ArgList argList; + MarkedArgumentBuffer argList; for (size_t i = 0; i < argumentCount; ++i) - argList.append(toJS(arguments[i])); + argList.append(toJS(exec, arguments[i])); JSObject* result = constructDate(exec, argList); if (exec->hadException()) { if (exception) - *exception = toRef(exec->exception()); + *exception = toRef(exec, exec->exception()); exec->clearException(); result = 0; } @@ -188,14 +190,14 @@ JSObjectRef JSObjectMakeError(JSContextRef ctx, size_t argumentCount, const JSVa exec->globalData().heap.registerThread(); JSLock lock(exec); - ArgList argList; + MarkedArgumentBuffer argList; for (size_t i = 0; i < argumentCount; ++i) - argList.append(toJS(arguments[i])); + argList.append(toJS(exec, arguments[i])); JSObject* result = constructError(exec, argList); if (exec->hadException()) { if (exception) - *exception = toRef(exec->exception()); + *exception = toRef(exec, exec->exception()); exec->clearException(); result = 0; } @@ -209,14 +211,14 @@ JSObjectRef JSObjectMakeRegExp(JSContextRef ctx, size_t argumentCount, const JSV exec->globalData().heap.registerThread(); JSLock lock(exec); - ArgList argList; + MarkedArgumentBuffer argList; for (size_t i = 0; i < argumentCount; ++i) - argList.append(toJS(arguments[i])); + argList.append(toJS(exec, arguments[i])); JSObject* result = constructRegExp(exec, argList); if (exec->hadException()) { if (exception) - *exception = toRef(exec->exception()); + *exception = toRef(exec, exec->exception()); exec->clearException(); result = 0; } @@ -224,18 +226,26 @@ JSObjectRef JSObjectMakeRegExp(JSContextRef ctx, size_t argumentCount, const JSV return toRef(result); } -JSValueRef JSObjectGetPrototype(JSContextRef, JSObjectRef object) +JSValueRef JSObjectGetPrototype(JSContextRef ctx, JSObjectRef object) { + ExecState* exec = toJS(ctx); + exec->globalData().heap.registerThread(); + JSLock lock(exec); + JSObject* jsObject = toJS(object); - return toRef(jsObject->prototype()); + return toRef(exec, jsObject->prototype()); } -void JSObjectSetPrototype(JSContextRef, JSObjectRef object, JSValueRef value) +void JSObjectSetPrototype(JSContextRef ctx, JSObjectRef object, JSValueRef value) { + ExecState* exec = toJS(ctx); + exec->globalData().heap.registerThread(); + JSLock lock(exec); + JSObject* jsObject = toJS(object); - JSValuePtr jsValue = toJS(value); + JSValue jsValue = toJS(exec, value); - jsObject->setPrototype(jsValue->isObject() ? jsValue : jsNull()); + jsObject->setPrototype(jsValue.isObject() ? jsValue : jsNull()); } bool JSObjectHasProperty(JSContextRef ctx, JSObjectRef object, JSStringRef propertyName) @@ -257,13 +267,13 @@ JSValueRef JSObjectGetProperty(JSContextRef ctx, JSObjectRef object, JSStringRef JSObject* jsObject = toJS(object); - JSValuePtr jsValue = jsObject->get(exec, propertyName->identifier(&exec->globalData())); + JSValue jsValue = jsObject->get(exec, propertyName->identifier(&exec->globalData())); if (exec->hadException()) { if (exception) - *exception = toRef(exec->exception()); + *exception = toRef(exec, exec->exception()); exec->clearException(); } - return toRef(jsValue); + return toRef(exec, jsValue); } void JSObjectSetProperty(JSContextRef ctx, JSObjectRef object, JSStringRef propertyName, JSValueRef value, JSPropertyAttributes attributes, JSValueRef* exception) @@ -274,7 +284,7 @@ void JSObjectSetProperty(JSContextRef ctx, JSObjectRef object, JSStringRef prope JSObject* jsObject = toJS(object); Identifier name(propertyName->identifier(&exec->globalData())); - JSValuePtr jsValue = toJS(value); + JSValue jsValue = toJS(exec, value); if (attributes && !jsObject->hasProperty(exec, name)) jsObject->putWithAttributes(exec, name, jsValue, attributes); @@ -285,7 +295,7 @@ void JSObjectSetProperty(JSContextRef ctx, JSObjectRef object, JSStringRef prope if (exec->hadException()) { if (exception) - *exception = toRef(exec->exception()); + *exception = toRef(exec, exec->exception()); exec->clearException(); } } @@ -298,13 +308,13 @@ JSValueRef JSObjectGetPropertyAtIndex(JSContextRef ctx, JSObjectRef object, unsi JSObject* jsObject = toJS(object); - JSValuePtr jsValue = jsObject->get(exec, propertyIndex); + JSValue jsValue = jsObject->get(exec, propertyIndex); if (exec->hadException()) { if (exception) - *exception = toRef(exec->exception()); + *exception = toRef(exec, exec->exception()); exec->clearException(); } - return toRef(jsValue); + return toRef(exec, jsValue); } @@ -315,12 +325,12 @@ void JSObjectSetPropertyAtIndex(JSContextRef ctx, JSObjectRef object, unsigned p JSLock lock(exec); JSObject* jsObject = toJS(object); - JSValuePtr jsValue = toJS(value); + JSValue jsValue = toJS(exec, value); jsObject->put(exec, propertyIndex, jsValue); if (exec->hadException()) { if (exception) - *exception = toRef(exec->exception()); + *exception = toRef(exec, exec->exception()); exec->clearException(); } } @@ -336,7 +346,7 @@ bool JSObjectDeleteProperty(JSContextRef ctx, JSObjectRef object, JSStringRef pr bool result = jsObject->deleteProperty(exec, propertyName->identifier(&exec->globalData())); if (exec->hadException()) { if (exception) - *exception = toRef(exec->exception()); + *exception = toRef(exec, exec->exception()); exec->clearException(); } return result; @@ -387,19 +397,19 @@ JSValueRef JSObjectCallAsFunction(JSContextRef ctx, JSObjectRef object, JSObject if (!jsThisObject) jsThisObject = exec->globalThisValue(); - ArgList argList; + MarkedArgumentBuffer argList; for (size_t i = 0; i < argumentCount; i++) - argList.append(toJS(arguments[i])); + argList.append(toJS(exec, arguments[i])); CallData callData; CallType callType = jsObject->getCallData(callData); if (callType == CallTypeNone) return 0; - JSValueRef result = toRef(call(exec, jsObject, callType, callData, jsThisObject, argList)); + JSValueRef result = toRef(exec, call(exec, jsObject, callType, callData, jsThisObject, argList)); if (exec->hadException()) { if (exception) - *exception = toRef(exec->exception()); + *exception = toRef(exec, exec->exception()); exec->clearException(); result = 0; } @@ -426,13 +436,13 @@ JSObjectRef JSObjectCallAsConstructor(JSContextRef ctx, JSObjectRef object, size if (constructType == ConstructTypeNone) return 0; - ArgList argList; + MarkedArgumentBuffer argList; for (size_t i = 0; i < argumentCount; i++) - argList.append(toJS(arguments[i])); + argList.append(toJS(exec, arguments[i])); JSObjectRef result = toRef(construct(exec, jsObject, constructType, constructData, argList)); if (exec->hadException()) { if (exception) - *exception = toRef(exec->exception()); + *exception = toRef(exec, exec->exception()); exec->clearException(); result = 0; } @@ -465,7 +475,7 @@ JSPropertyNameArrayRef JSObjectCopyPropertyNames(JSContextRef ctx, JSObjectRef o jsObject->getPropertyNames(exec, array); size_t size = array.size(); - propertyNames->array.reserveCapacity(size); + propertyNames->array.reserveInitialCapacity(size); for (size_t i = 0; i < size; ++i) propertyNames->array.append(JSRetainPtr(Adopt, OpaqueJSString::create(array[i].ustring()).releaseRef())); diff --git a/src/3rdparty/webkit/JavaScriptCore/API/JSObjectRef.h b/src/3rdparty/webkit/JavaScriptCore/API/JSObjectRef.h index 461764c..3e8b0eb 100644 --- a/src/3rdparty/webkit/JavaScriptCore/API/JSObjectRef.h +++ b/src/3rdparty/webkit/JavaScriptCore/API/JSObjectRef.h @@ -441,7 +441,7 @@ JS_EXPORT JSObjectRef JSObjectMakeConstructor(JSContextRef ctx, JSClassRef jsCla @discussion The behavior of this function does not exactly match the behavior of the built-in Array constructor. Specifically, if one argument is supplied, this function returns an array with one element. */ -JS_EXPORT JSObjectRef JSObjectMakeArray(JSContextRef ctx, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception) AVAILABLE_AFTER_WEBKIT_VERSION_3_1; +JS_EXPORT JSObjectRef JSObjectMakeArray(JSContextRef ctx, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception) AVAILABLE_IN_WEBKIT_VERSION_4_0; /*! @function @@ -452,7 +452,7 @@ JS_EXPORT JSObjectRef JSObjectMakeArray(JSContextRef ctx, size_t argumentCount, @param exception A pointer to a JSValueRef in which to store an exception, if any. Pass NULL if you do not care to store an exception. @result A JSObject that is a Date. */ -JS_EXPORT JSObjectRef JSObjectMakeDate(JSContextRef ctx, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception) AVAILABLE_AFTER_WEBKIT_VERSION_3_1; +JS_EXPORT JSObjectRef JSObjectMakeDate(JSContextRef ctx, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception) AVAILABLE_IN_WEBKIT_VERSION_4_0; /*! @function @@ -463,7 +463,7 @@ JS_EXPORT JSObjectRef JSObjectMakeDate(JSContextRef ctx, size_t argumentCount, c @param exception A pointer to a JSValueRef in which to store an exception, if any. Pass NULL if you do not care to store an exception. @result A JSObject that is a Error. */ -JS_EXPORT JSObjectRef JSObjectMakeError(JSContextRef ctx, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception) AVAILABLE_AFTER_WEBKIT_VERSION_3_1; +JS_EXPORT JSObjectRef JSObjectMakeError(JSContextRef ctx, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception) AVAILABLE_IN_WEBKIT_VERSION_4_0; /*! @function @@ -474,7 +474,7 @@ JS_EXPORT JSObjectRef JSObjectMakeError(JSContextRef ctx, size_t argumentCount, @param exception A pointer to a JSValueRef in which to store an exception, if any. Pass NULL if you do not care to store an exception. @result A JSObject that is a RegExp. */ -JS_EXPORT JSObjectRef JSObjectMakeRegExp(JSContextRef ctx, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception) AVAILABLE_AFTER_WEBKIT_VERSION_3_1; +JS_EXPORT JSObjectRef JSObjectMakeRegExp(JSContextRef ctx, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception) AVAILABLE_IN_WEBKIT_VERSION_4_0; /*! @function diff --git a/src/3rdparty/webkit/JavaScriptCore/API/JSStringRef.cpp b/src/3rdparty/webkit/JavaScriptCore/API/JSStringRef.cpp index 6452ffc..8e236e4 100644 --- a/src/3rdparty/webkit/JavaScriptCore/API/JSStringRef.cpp +++ b/src/3rdparty/webkit/JavaScriptCore/API/JSStringRef.cpp @@ -26,6 +26,7 @@ #include "config.h" #include "JSStringRef.h" +#include "InitializeThreading.h" #include "OpaqueJSString.h" #include @@ -34,11 +35,13 @@ using namespace WTF::Unicode; JSStringRef JSStringCreateWithCharacters(const JSChar* chars, size_t numChars) { + initializeThreading(); return OpaqueJSString::create(chars, numChars).releaseRef(); } JSStringRef JSStringCreateWithUTF8CString(const char* string) { + initializeThreading(); if (string) { size_t length = strlen(string); Vector buffer(length); diff --git a/src/3rdparty/webkit/JavaScriptCore/API/JSStringRefCF.cpp b/src/3rdparty/webkit/JavaScriptCore/API/JSStringRefCF.cpp index 65edd09..d1f6fe3 100644 --- a/src/3rdparty/webkit/JavaScriptCore/API/JSStringRefCF.cpp +++ b/src/3rdparty/webkit/JavaScriptCore/API/JSStringRefCF.cpp @@ -27,6 +27,7 @@ #include "JSStringRefCF.h" #include "APICast.h" +#include "InitializeThreading.h" #include "JSStringRef.h" #include "OpaqueJSString.h" #include @@ -35,7 +36,11 @@ JSStringRef JSStringCreateWithCFString(CFStringRef string) { - CFIndex length = CFStringGetLength(string); + JSC::initializeThreading(); + + // We cannot use CFIndex here since CFStringGetLength can return values larger than + // it can hold. () + size_t length = CFStringGetLength(string); if (length) { OwnArrayPtr buffer(new UniChar[length]); CFStringGetCharacters(string, CFRangeMake(0, length), buffer.get()); @@ -44,7 +49,7 @@ JSStringRef JSStringCreateWithCFString(CFStringRef string) } else { return OpaqueJSString::create(0, 0).releaseRef(); } - } +} CFStringRef JSStringCopyCFString(CFAllocatorRef alloc, JSStringRef string) { diff --git a/src/3rdparty/webkit/JavaScriptCore/API/JSValueRef.cpp b/src/3rdparty/webkit/JavaScriptCore/API/JSValueRef.cpp index 351a105..2207181 100644 --- a/src/3rdparty/webkit/JavaScriptCore/API/JSValueRef.cpp +++ b/src/3rdparty/webkit/JavaScriptCore/API/JSValueRef.cpp @@ -41,66 +41,99 @@ #include // for std::min -JSType JSValueGetType(JSContextRef, JSValueRef value) +JSType JSValueGetType(JSContextRef ctx, JSValueRef value) { - JSC::JSValuePtr jsValue = toJS(value); - if (jsValue->isUndefined()) + JSC::ExecState* exec = toJS(ctx); + exec->globalData().heap.registerThread(); + JSC::JSLock lock(exec); + + JSC::JSValue jsValue = toJS(exec, value); + + if (jsValue.isUndefined()) return kJSTypeUndefined; - if (jsValue->isNull()) + if (jsValue.isNull()) return kJSTypeNull; - if (jsValue->isBoolean()) + if (jsValue.isBoolean()) return kJSTypeBoolean; - if (jsValue->isNumber()) + if (jsValue.isNumber()) return kJSTypeNumber; - if (jsValue->isString()) + if (jsValue.isString()) return kJSTypeString; - ASSERT(jsValue->isObject()); + ASSERT(jsValue.isObject()); return kJSTypeObject; } using namespace JSC; // placed here to avoid conflict between JSC::JSType and JSType, above. -bool JSValueIsUndefined(JSContextRef, JSValueRef value) +bool JSValueIsUndefined(JSContextRef ctx, JSValueRef value) { - JSValuePtr jsValue = toJS(value); - return jsValue->isUndefined(); + ExecState* exec = toJS(ctx); + exec->globalData().heap.registerThread(); + JSLock lock(exec); + + JSValue jsValue = toJS(exec, value); + return jsValue.isUndefined(); } -bool JSValueIsNull(JSContextRef, JSValueRef value) +bool JSValueIsNull(JSContextRef ctx, JSValueRef value) { - JSValuePtr jsValue = toJS(value); - return jsValue->isNull(); + ExecState* exec = toJS(ctx); + exec->globalData().heap.registerThread(); + JSLock lock(exec); + + JSValue jsValue = toJS(exec, value); + return jsValue.isNull(); } -bool JSValueIsBoolean(JSContextRef, JSValueRef value) +bool JSValueIsBoolean(JSContextRef ctx, JSValueRef value) { - JSValuePtr jsValue = toJS(value); - return jsValue->isBoolean(); + ExecState* exec = toJS(ctx); + exec->globalData().heap.registerThread(); + JSLock lock(exec); + + JSValue jsValue = toJS(exec, value); + return jsValue.isBoolean(); } -bool JSValueIsNumber(JSContextRef, JSValueRef value) +bool JSValueIsNumber(JSContextRef ctx, JSValueRef value) { - JSValuePtr jsValue = toJS(value); - return jsValue->isNumber(); + ExecState* exec = toJS(ctx); + exec->globalData().heap.registerThread(); + JSLock lock(exec); + + JSValue jsValue = toJS(exec, value); + return jsValue.isNumber(); } -bool JSValueIsString(JSContextRef, JSValueRef value) +bool JSValueIsString(JSContextRef ctx, JSValueRef value) { - JSValuePtr jsValue = toJS(value); - return jsValue->isString(); + ExecState* exec = toJS(ctx); + exec->globalData().heap.registerThread(); + JSLock lock(exec); + + JSValue jsValue = toJS(exec, value); + return jsValue.isString(); } -bool JSValueIsObject(JSContextRef, JSValueRef value) +bool JSValueIsObject(JSContextRef ctx, JSValueRef value) { - JSValuePtr jsValue = toJS(value); - return jsValue->isObject(); + ExecState* exec = toJS(ctx); + exec->globalData().heap.registerThread(); + JSLock lock(exec); + + JSValue jsValue = toJS(exec, value); + return jsValue.isObject(); } -bool JSValueIsObjectOfClass(JSContextRef, JSValueRef value, JSClassRef jsClass) +bool JSValueIsObjectOfClass(JSContextRef ctx, JSValueRef value, JSClassRef jsClass) { - JSValuePtr jsValue = toJS(value); + ExecState* exec = toJS(ctx); + exec->globalData().heap.registerThread(); + JSLock lock(exec); + + JSValue jsValue = toJS(exec, value); - if (JSObject* o = jsValue->getObject()) { + if (JSObject* o = jsValue.getObject()) { if (o->inherits(&JSCallbackObject::info)) return static_cast*>(o)->inherits(jsClass); else if (o->inherits(&JSCallbackObject::info)) @@ -115,25 +148,28 @@ bool JSValueIsEqual(JSContextRef ctx, JSValueRef a, JSValueRef b, JSValueRef* ex exec->globalData().heap.registerThread(); JSLock lock(exec); - JSValuePtr jsA = toJS(a); - JSValuePtr jsB = toJS(b); + JSValue jsA = toJS(exec, a); + JSValue jsB = toJS(exec, b); - bool result = equal(exec, jsA, jsB); // false if an exception is thrown + bool result = JSValue::equal(exec, jsA, jsB); // false if an exception is thrown if (exec->hadException()) { if (exception) - *exception = toRef(exec->exception()); + *exception = toRef(exec, exec->exception()); exec->clearException(); } return result; } -bool JSValueIsStrictEqual(JSContextRef, JSValueRef a, JSValueRef b) +bool JSValueIsStrictEqual(JSContextRef ctx, JSValueRef a, JSValueRef b) { - JSValuePtr jsA = toJS(a); - JSValuePtr jsB = toJS(b); - - bool result = strictEqual(jsA, jsB); - return result; + ExecState* exec = toJS(ctx); + exec->globalData().heap.registerThread(); + JSLock lock(exec); + + JSValue jsA = toJS(exec, a); + JSValue jsB = toJS(exec, b); + + return JSValue::strictEqual(jsA, jsB); } bool JSValueIsInstanceOfConstructor(JSContextRef ctx, JSValueRef value, JSObjectRef constructor, JSValueRef* exception) @@ -142,32 +178,45 @@ bool JSValueIsInstanceOfConstructor(JSContextRef ctx, JSValueRef value, JSObject exec->globalData().heap.registerThread(); JSLock lock(exec); - JSValuePtr jsValue = toJS(value); + JSValue jsValue = toJS(exec, value); + JSObject* jsConstructor = toJS(constructor); if (!jsConstructor->structure()->typeInfo().implementsHasInstance()) return false; bool result = jsConstructor->hasInstance(exec, jsValue, jsConstructor->get(exec, exec->propertyNames().prototype)); // false if an exception is thrown if (exec->hadException()) { if (exception) - *exception = toRef(exec->exception()); + *exception = toRef(exec, exec->exception()); exec->clearException(); } return result; } -JSValueRef JSValueMakeUndefined(JSContextRef) +JSValueRef JSValueMakeUndefined(JSContextRef ctx) { - return toRef(jsUndefined()); + ExecState* exec = toJS(ctx); + exec->globalData().heap.registerThread(); + JSLock lock(exec); + + return toRef(exec, jsUndefined()); } -JSValueRef JSValueMakeNull(JSContextRef) +JSValueRef JSValueMakeNull(JSContextRef ctx) { - return toRef(jsNull()); + ExecState* exec = toJS(ctx); + exec->globalData().heap.registerThread(); + JSLock lock(exec); + + return toRef(exec, jsNull()); } -JSValueRef JSValueMakeBoolean(JSContextRef, bool value) +JSValueRef JSValueMakeBoolean(JSContextRef ctx, bool value) { - return toRef(jsBoolean(value)); + ExecState* exec = toJS(ctx); + exec->globalData().heap.registerThread(); + JSLock lock(exec); + + return toRef(exec, jsBoolean(value)); } JSValueRef JSValueMakeNumber(JSContextRef ctx, double value) @@ -176,7 +225,7 @@ JSValueRef JSValueMakeNumber(JSContextRef ctx, double value) exec->globalData().heap.registerThread(); JSLock lock(exec); - return toRef(jsNumber(exec, value)); + return toRef(exec, jsNumber(exec, value)); } JSValueRef JSValueMakeString(JSContextRef ctx, JSStringRef string) @@ -185,14 +234,17 @@ JSValueRef JSValueMakeString(JSContextRef ctx, JSStringRef string) exec->globalData().heap.registerThread(); JSLock lock(exec); - return toRef(jsString(exec, string->ustring())); + return toRef(exec, jsString(exec, string->ustring())); } bool JSValueToBoolean(JSContextRef ctx, JSValueRef value) { ExecState* exec = toJS(ctx); - JSValuePtr jsValue = toJS(value); - return jsValue->toBoolean(exec); + exec->globalData().heap.registerThread(); + JSLock lock(exec); + + JSValue jsValue = toJS(exec, value); + return jsValue.toBoolean(exec); } double JSValueToNumber(JSContextRef ctx, JSValueRef value, JSValueRef* exception) @@ -201,12 +253,12 @@ double JSValueToNumber(JSContextRef ctx, JSValueRef value, JSValueRef* exception exec->globalData().heap.registerThread(); JSLock lock(exec); - JSValuePtr jsValue = toJS(value); + JSValue jsValue = toJS(exec, value); - double number = jsValue->toNumber(exec); + double number = jsValue.toNumber(exec); if (exec->hadException()) { if (exception) - *exception = toRef(exec->exception()); + *exception = toRef(exec, exec->exception()); exec->clearException(); number = NaN; } @@ -219,12 +271,12 @@ JSStringRef JSValueToStringCopy(JSContextRef ctx, JSValueRef value, JSValueRef* exec->globalData().heap.registerThread(); JSLock lock(exec); - JSValuePtr jsValue = toJS(value); + JSValue jsValue = toJS(exec, value); - RefPtr stringRef(OpaqueJSString::create(jsValue->toString(exec))); + RefPtr stringRef(OpaqueJSString::create(jsValue.toString(exec))); if (exec->hadException()) { if (exception) - *exception = toRef(exec->exception()); + *exception = toRef(exec, exec->exception()); exec->clearException(); stringRef.clear(); } @@ -237,12 +289,12 @@ JSObjectRef JSValueToObject(JSContextRef ctx, JSValueRef value, JSValueRef* exce exec->globalData().heap.registerThread(); JSLock lock(exec); - JSValuePtr jsValue = toJS(value); + JSValue jsValue = toJS(exec, value); - JSObjectRef objectRef = toRef(jsValue->toObject(exec)); + JSObjectRef objectRef = toRef(jsValue.toObject(exec)); if (exec->hadException()) { if (exception) - *exception = toRef(exec->exception()); + *exception = toRef(exec, exec->exception()); exec->clearException(); objectRef = 0; } @@ -255,7 +307,7 @@ void JSValueProtect(JSContextRef ctx, JSValueRef value) exec->globalData().heap.registerThread(); JSLock lock(exec); - JSValuePtr jsValue = toJS(value); + JSValue jsValue = toJS(exec, value); gcProtect(jsValue); } @@ -265,6 +317,6 @@ void JSValueUnprotect(JSContextRef ctx, JSValueRef value) exec->globalData().heap.registerThread(); JSLock lock(exec); - JSValuePtr jsValue = toJS(value); + JSValue jsValue = toJS(exec, value); gcUnprotect(jsValue); } diff --git a/src/3rdparty/webkit/JavaScriptCore/API/WebKitAvailability.h b/src/3rdparty/webkit/JavaScriptCore/API/WebKitAvailability.h index 1273360..8402528 100644 --- a/src/3rdparty/webkit/JavaScriptCore/API/WebKitAvailability.h +++ b/src/3rdparty/webkit/JavaScriptCore/API/WebKitAvailability.h @@ -38,6 +38,7 @@ #define WEBKIT_VERSION_2_0 0x0200 #define WEBKIT_VERSION_3_0 0x0300 #define WEBKIT_VERSION_3_1 0x0310 +#define WEBKIT_VERSION_4_0 0x0400 #define WEBKIT_VERSION_LATEST 0x9999 #ifdef __APPLE__ @@ -640,123 +641,123 @@ /* - * AVAILABLE_AFTER_WEBKIT_VERSION_3_1 + * AVAILABLE_IN_WEBKIT_VERSION_4_0 * - * Used on declarations introduced after WebKit 3.1 + * Used on declarations introduced in WebKit 4.0 */ #if WEBKIT_VERSION_MAX_ALLOWED < WEBKIT_VERSION_LATEST - #define AVAILABLE_AFTER_WEBKIT_VERSION_3_1 UNAVAILABLE_ATTRIBUTE + #define AVAILABLE_IN_WEBKIT_VERSION_4_0 UNAVAILABLE_ATTRIBUTE #elif WEBKIT_VERSION_MIN_REQUIRED < WEBKIT_VERSION_LATEST - #define AVAILABLE_AFTER_WEBKIT_VERSION_3_1 WEAK_IMPORT_ATTRIBUTE + #define AVAILABLE_IN_WEBKIT_VERSION_4_0 WEAK_IMPORT_ATTRIBUTE #else - #define AVAILABLE_AFTER_WEBKIT_VERSION_3_1 + #define AVAILABLE_IN_WEBKIT_VERSION_4_0 #endif /* - * AVAILABLE_AFTER_WEBKIT_VERSION_3_1_BUT_DEPRECATED + * AVAILABLE_IN_WEBKIT_VERSION_4_0_BUT_DEPRECATED * - * Used on declarations introduced after WebKit 3.1, - * and deprecated after WebKit 3.1 + * Used on declarations introduced in WebKit 4.0, + * and deprecated in WebKit 4.0 */ #if WEBKIT_VERSION_MIN_REQUIRED >= WEBKIT_VERSION_LATEST - #define AVAILABLE_AFTER_WEBKIT_VERSION_3_1_BUT_DEPRECATED DEPRECATED_ATTRIBUTE + #define AVAILABLE_IN_WEBKIT_VERSION_4_0_BUT_DEPRECATED DEPRECATED_ATTRIBUTE #else - #define AVAILABLE_AFTER_WEBKIT_VERSION_3_1_BUT_DEPRECATED AVAILABLE_AFTER_WEBKIT_VERSION_3_1 + #define AVAILABLE_IN_WEBKIT_VERSION_4_0_BUT_DEPRECATED AVAILABLE_IN_WEBKIT_VERSION_4_0 #endif /* - * AVAILABLE_WEBKIT_VERSION_1_0_AND_LATER_BUT_DEPRECATED_AFTER_WEBKIT_VERSION_3_1 + * AVAILABLE_WEBKIT_VERSION_1_0_AND_LATER_BUT_DEPRECATED_IN_WEBKIT_VERSION_4_0 * * Used on declarations introduced in WebKit 1.0, - * but later deprecated after WebKit 3.1 + * but later deprecated in WebKit 4.0 */ #if WEBKIT_VERSION_MIN_REQUIRED >= WEBKIT_VERSION_LATEST - #define AVAILABLE_WEBKIT_VERSION_1_0_AND_LATER_BUT_DEPRECATED_AFTER_WEBKIT_VERSION_3_1 DEPRECATED_ATTRIBUTE + #define AVAILABLE_WEBKIT_VERSION_1_0_AND_LATER_BUT_DEPRECATED_IN_WEBKIT_VERSION_4_0 DEPRECATED_ATTRIBUTE #else - #define AVAILABLE_WEBKIT_VERSION_1_0_AND_LATER_BUT_DEPRECATED_AFTER_WEBKIT_VERSION_3_1 AVAILABLE_WEBKIT_VERSION_1_0_AND_LATER + #define AVAILABLE_WEBKIT_VERSION_1_0_AND_LATER_BUT_DEPRECATED_IN_WEBKIT_VERSION_4_0 AVAILABLE_WEBKIT_VERSION_1_0_AND_LATER #endif /* - * AVAILABLE_WEBKIT_VERSION_1_1_AND_LATER_BUT_DEPRECATED_AFTER_WEBKIT_VERSION_3_1 + * AVAILABLE_WEBKIT_VERSION_1_1_AND_LATER_BUT_DEPRECATED_IN_WEBKIT_VERSION_4_0 * * Used on declarations introduced in WebKit 1.1, - * but later deprecated after WebKit 3.1 + * but later deprecated in WebKit 4.0 */ #if WEBKIT_VERSION_MIN_REQUIRED >= WEBKIT_VERSION_LATEST - #define AVAILABLE_WEBKIT_VERSION_1_1_AND_LATER_BUT_DEPRECATED_AFTER_WEBKIT_VERSION_3_1 DEPRECATED_ATTRIBUTE + #define AVAILABLE_WEBKIT_VERSION_1_1_AND_LATER_BUT_DEPRECATED_IN_WEBKIT_VERSION_4_0 DEPRECATED_ATTRIBUTE #else - #define AVAILABLE_WEBKIT_VERSION_1_1_AND_LATER_BUT_DEPRECATED_AFTER_WEBKIT_VERSION_3_1 AVAILABLE_WEBKIT_VERSION_1_1_AND_LATER + #define AVAILABLE_WEBKIT_VERSION_1_1_AND_LATER_BUT_DEPRECATED_IN_WEBKIT_VERSION_4_0 AVAILABLE_WEBKIT_VERSION_1_1_AND_LATER #endif /* - * AVAILABLE_WEBKIT_VERSION_1_2_AND_LATER_BUT_DEPRECATED_AFTER_WEBKIT_VERSION_3_1 + * AVAILABLE_WEBKIT_VERSION_1_2_AND_LATER_BUT_DEPRECATED_IN_WEBKIT_VERSION_4_0 * * Used on declarations introduced in WebKit 1.2, - * but later deprecated after WebKit 3.1 + * but later deprecated in WebKit 4.0 */ #if WEBKIT_VERSION_MIN_REQUIRED >= WEBKIT_VERSION_LATEST - #define AVAILABLE_WEBKIT_VERSION_1_2_AND_LATER_BUT_DEPRECATED_AFTER_WEBKIT_VERSION_3_1 DEPRECATED_ATTRIBUTE + #define AVAILABLE_WEBKIT_VERSION_1_2_AND_LATER_BUT_DEPRECATED_IN_WEBKIT_VERSION_4_0 DEPRECATED_ATTRIBUTE #else - #define AVAILABLE_WEBKIT_VERSION_1_2_AND_LATER_BUT_DEPRECATED_AFTER_WEBKIT_VERSION_3_1 AVAILABLE_WEBKIT_VERSION_1_2_AND_LATER + #define AVAILABLE_WEBKIT_VERSION_1_2_AND_LATER_BUT_DEPRECATED_IN_WEBKIT_VERSION_4_0 AVAILABLE_WEBKIT_VERSION_1_2_AND_LATER #endif /* - * AVAILABLE_WEBKIT_VERSION_1_3_AND_LATER_BUT_DEPRECATED_AFTER_WEBKIT_VERSION_3_1 + * AVAILABLE_WEBKIT_VERSION_1_3_AND_LATER_BUT_DEPRECATED_IN_WEBKIT_VERSION_4_0 * * Used on declarations introduced in WebKit 1.3, - * but later deprecated after WebKit 3.1 + * but later deprecated in WebKit 4.0 */ #if WEBKIT_VERSION_MIN_REQUIRED >= WEBKIT_VERSION_LATEST - #define AVAILABLE_WEBKIT_VERSION_1_3_AND_LATER_BUT_DEPRECATED_AFTER_WEBKIT_VERSION_3_1 DEPRECATED_ATTRIBUTE + #define AVAILABLE_WEBKIT_VERSION_1_3_AND_LATER_BUT_DEPRECATED_IN_WEBKIT_VERSION_4_0 DEPRECATED_ATTRIBUTE #else - #define AVAILABLE_WEBKIT_VERSION_1_3_AND_LATER_BUT_DEPRECATED_AFTER_WEBKIT_VERSION_3_1 AVAILABLE_WEBKIT_VERSION_1_3_AND_LATER + #define AVAILABLE_WEBKIT_VERSION_1_3_AND_LATER_BUT_DEPRECATED_IN_WEBKIT_VERSION_4_0 AVAILABLE_WEBKIT_VERSION_1_3_AND_LATER #endif /* - * AVAILABLE_WEBKIT_VERSION_2_0_AND_LATER_BUT_DEPRECATED_AFTER_WEBKIT_VERSION_3_1 + * AVAILABLE_WEBKIT_VERSION_2_0_AND_LATER_BUT_DEPRECATED_IN_WEBKIT_VERSION_4_0 * * Used on declarations introduced in WebKit 2.0, - * but later deprecated after WebKit 3.1 + * but later deprecated in WebKit 4.0 */ #if WEBKIT_VERSION_MIN_REQUIRED >= WEBKIT_VERSION_LATEST - #define AVAILABLE_WEBKIT_VERSION_2_0_AND_LATER_BUT_DEPRECATED_AFTER_WEBKIT_VERSION_3_1 DEPRECATED_ATTRIBUTE + #define AVAILABLE_WEBKIT_VERSION_2_0_AND_LATER_BUT_DEPRECATED_IN_WEBKIT_VERSION_4_0 DEPRECATED_ATTRIBUTE #else - #define AVAILABLE_WEBKIT_VERSION_2_0_AND_LATER_BUT_DEPRECATED_AFTER_WEBKIT_VERSION_3_1 AVAILABLE_WEBKIT_VERSION_2_0_AND_LATER + #define AVAILABLE_WEBKIT_VERSION_2_0_AND_LATER_BUT_DEPRECATED_IN_WEBKIT_VERSION_4_0 AVAILABLE_WEBKIT_VERSION_2_0_AND_LATER #endif /* - * AVAILABLE_WEBKIT_VERSION_3_0_AND_LATER_BUT_DEPRECATED_AFTER_WEBKIT_VERSION_3_1 + * AVAILABLE_WEBKIT_VERSION_3_0_AND_LATER_BUT_DEPRECATED_IN_WEBKIT_VERSION_4_0 * * Used on declarations introduced in WebKit 3.0, - * but later deprecated after WebKit 3.1 + * but later deprecated in WebKit 4.0 */ #if WEBKIT_VERSION_MIN_REQUIRED >= WEBKIT_VERSION_LATEST - #define AVAILABLE_WEBKIT_VERSION_3_0_AND_LATER_BUT_DEPRECATED_AFTER_WEBKIT_VERSION_3_1 DEPRECATED_ATTRIBUTE + #define AVAILABLE_WEBKIT_VERSION_3_0_AND_LATER_BUT_DEPRECATED_IN_WEBKIT_VERSION_4_0 DEPRECATED_ATTRIBUTE #else - #define AVAILABLE_WEBKIT_VERSION_3_0_AND_LATER_BUT_DEPRECATED_AFTER_WEBKIT_VERSION_3_1 AVAILABLE_WEBKIT_VERSION_3_0_AND_LATER + #define AVAILABLE_WEBKIT_VERSION_3_0_AND_LATER_BUT_DEPRECATED_IN_WEBKIT_VERSION_4_0 AVAILABLE_WEBKIT_VERSION_3_0_AND_LATER #endif /* - * AVAILABLE_WEBKIT_VERSION_3_1_AND_LATER_BUT_DEPRECATED_AFTER_WEBKIT_VERSION_3_1 + * AVAILABLE_WEBKIT_VERSION_3_1_AND_LATER_BUT_DEPRECATED_IN_WEBKIT_VERSION_4_0 * * Used on declarations introduced in WebKit 3.1, - * but later deprecated after WebKit 3.1 + * but later deprecated in WebKit 4.0 */ #if WEBKIT_VERSION_MIN_REQUIRED >= WEBKIT_VERSION_LATEST - #define AVAILABLE_WEBKIT_VERSION_3_1_AND_LATER_BUT_DEPRECATED_AFTER_WEBKIT_VERSION_3_1 DEPRECATED_ATTRIBUTE + #define AVAILABLE_WEBKIT_VERSION_3_1_AND_LATER_BUT_DEPRECATED_IN_WEBKIT_VERSION_4_0 DEPRECATED_ATTRIBUTE #else - #define AVAILABLE_WEBKIT_VERSION_3_1_AND_LATER_BUT_DEPRECATED_AFTER_WEBKIT_VERSION_3_1 AVAILABLE_WEBKIT_VERSION_3_1_AND_LATER + #define AVAILABLE_WEBKIT_VERSION_3_1_AND_LATER_BUT_DEPRECATED_IN_WEBKIT_VERSION_4_0 AVAILABLE_WEBKIT_VERSION_3_1_AND_LATER #endif /* - * DEPRECATED_AFTER_WEBKIT_VERSION_3_1 + * DEPRECATED_IN_WEBKIT_VERSION_4_0 * - * Used on types deprecated after WebKit 3.1 + * Used on types deprecated in WebKit 4.0 */ #if WEBKIT_VERSION_MIN_REQUIRED >= WEBKIT_VERSION_LATEST - #define DEPRECATED_AFTER_WEBKIT_VERSION_3_1 DEPRECATED_ATTRIBUTE + #define DEPRECATED_IN_WEBKIT_VERSION_4_0 DEPRECATED_ATTRIBUTE #else - #define DEPRECATED_AFTER_WEBKIT_VERSION_3_1 + #define DEPRECATED_IN_WEBKIT_VERSION_4_0 #endif diff --git a/src/3rdparty/webkit/JavaScriptCore/ChangeLog b/src/3rdparty/webkit/JavaScriptCore/ChangeLog index 3321570..fbda515 100644 --- a/src/3rdparty/webkit/JavaScriptCore/ChangeLog +++ b/src/3rdparty/webkit/JavaScriptCore/ChangeLog @@ -1,123 +1,13253 @@ +2009-06-08 Tor Arne Vestbø + + Reviewed by Simon Hausmann. + + [Qt] Use $QMAKE_PATH_SEP instead of hardcoded / to fix Windows build + + * JavaScriptCore.pri: + * JavaScriptCore.pro: + * jsc.pro: + +2009-06-07 Gavin Barraclough + + RS by Sam Weinig. + + Remove bonus bogus \n from last commit. + + * jit/JITStubs.cpp: + (JSC::): + +2009-06-07 Gavin Barraclough + + Reviewed by Sam Weinig. + + Change the implementation of op_throw so the stub function always modifies its + return address - if it doesn't find a 'catch' it will switch to a trampoline + to force a return from JIT execution. This saves memory, by avoiding the need + for a unique return for every op_throw. + + * jit/JITOpcodes.cpp: + (JSC::JIT::emit_op_throw): + JITStubs::cti_op_throw now always changes its return address, + remove return code generated after the stub call (this is now + handled by ctiOpThrowNotCaught). + * jit/JITStubs.cpp: + (JSC::): + Add ctiOpThrowNotCaught definitions. + (JSC::JITStubs::DEFINE_STUB_FUNCTION): + Change cti_op_throw to always change its return address. + * jit/JITStubs.h: + Add ctiOpThrowNotCaught declaration. + +2009-06-05 Gavin Barraclough + + Rudder stamped by Sam Weinig. + + Add missing ASSERT. + + * assembler/X86Assembler.h: + (JSC::X86Assembler::getRelocatedAddress): + +2009-06-05 Gavin Barraclough + + Reviewed by Sam Weinig. + + Switch storePtrWithPatch to take the initial immediate value as an argument. + + * assembler/MacroAssemblerX86.h: + (JSC::MacroAssemblerX86::storePtrWithPatch): + * assembler/MacroAssemblerX86_64.h: + (JSC::MacroAssemblerX86_64::storePtrWithPatch): + * jit/JITOpcodes.cpp: + (JSC::JIT::emit_op_jsr): + +2009-06-05 Gavin Barraclough + + Reviewed by Sam Weinig. + + Remove patchLength..tByIdExternalLoadPrefix magic numbers from JIT.h. + + These aren't really suitable values to be tracking within common code + of the JIT, since they are not (and realistically cannot) be checked + by ASSERTs, as the other repatch offsets are. Move this functionality + (skipping the REX prefix when patching load instructions to LEAs on + x86-64) into the X86Assembler. + + * assembler/AbstractMacroAssembler.h: + (JSC::AbstractMacroAssembler::CodeLocationInstruction::repatchLoadPtrToLEA): + * assembler/X86Assembler.h: + (JSC::X86Assembler::repatchLoadPtrToLEA): + * jit/JIT.h: + * jit/JITPropertyAccess.cpp: + (JSC::JIT::patchGetByIdSelf): + (JSC::JIT::patchPutByIdReplace): + +2009-06-05 Shinichiro Hamaji + + Bug 26160: Compile fails in MacOSX when GNU fileutils are installed + + + + Reviewed by Alexey Proskuryakov. + + Use /bin/ln instead of ln for cases where this command is used with -h option. + As this option is not supported by GNU fileutils, this change helps users + who have GNU fileutils in their PATH. + + * JavaScriptCore.xcodeproj/project.pbxproj: + +2009-06-05 Gavin Barraclough + + Reviewed by Oliver Hunt. + + Remove DoubleNotEqual floating point comparison condition for now - + it is not used, and it is unclear the semantics are correct (I think + this comparison would actually give you not-equal-or-unordered, which + might be what is wanted... we can revisit this interface & get it + right when required). + + Also, fix asserts in branchArith32 ops. All adds & subs can check + for Signed, multiply only sets OF so can only check for overflow. + + * assembler/MacroAssemblerX86Common.h: + (JSC::MacroAssemblerX86Common::): + (JSC::MacroAssemblerX86Common::branchAdd32): + (JSC::MacroAssemblerX86Common::branchMul32): + (JSC::MacroAssemblerX86Common::branchSub32): + +2009-06-05 Gavin Barraclough + + Reviewed by Oliver Hunt. + + Minor tidy up in JITStubs. + + * jit/JITStubs.cpp: + (JSC::StackHack::StackHack): + * jit/JITStubs.h: + +2009-06-05 Koen Kooi + + Reviewed by Xan Lopez. + + Build fix for glib unicode backend. + + * wtf/unicode/glib/UnicodeMacrosFromICU.h: + +2009-06-05 Gavin Barraclough + + Reviewed by Oliver Hunt. + + 3 tiny cleanups: + + * assembler/MacroAssemblerX86.h: + * assembler/MacroAssemblerX86_64.h: + (JSC::MacroAssemblerX86_64::storePtrWithPatch): + store*() methods should take an ImplicitAddress, rather than an Address. + * assembler/X86Assembler.h: + Make patchPointer private. + * jit/JITOpcodes.cpp: + (JSC::JIT::emit_op_ret): + Remove empty line at end of function. + +2009-06-05 Gavin Barraclough + + Reviewed by Oliver Hunt. + + Encapsulate many uses of void* in the assembler & jit with types that provide + more semantic information. The new types are: + + * MacroAssemblerCodePtr - this wraps a pointer into JIT generated code. + * FunctionPtr - this wraps a pointer to a C/C++ function in JSC. + * ReturnAddressPtr - this wraps a return address resulting from a 'call' instruction. + + Wrapping these types allows for stronger type-checking than is possible with everything + represented a void*. For example, it is now enforced by the type system that near + calls can only be linked to JIT code and not to C functions in JSC (this was previously + required, but could not be enforced on the interface). + + * assembler/AbstractMacroAssembler.h: + (JSC::AbstractMacroAssembler::CodeLocationCommon::CodeLocationCommon): + (JSC::AbstractMacroAssembler::CodeLocationCommon::dataLocation): + (JSC::AbstractMacroAssembler::CodeLocationCommon::executableAddress): + (JSC::AbstractMacroAssembler::CodeLocationCommon::reset): + (JSC::AbstractMacroAssembler::CodeLocationInstruction::repatchLoadToLEA): + (JSC::AbstractMacroAssembler::CodeLocationInstruction::CodeLocationInstruction): + (JSC::AbstractMacroAssembler::CodeLocationLabel::addressForSwitch): + (JSC::AbstractMacroAssembler::CodeLocationLabel::addressForExceptionHandler): + (JSC::AbstractMacroAssembler::CodeLocationLabel::addressForJSR): + (JSC::AbstractMacroAssembler::CodeLocationLabel::operator!): + (JSC::AbstractMacroAssembler::CodeLocationLabel::reset): + (JSC::AbstractMacroAssembler::CodeLocationLabel::CodeLocationLabel): + (JSC::AbstractMacroAssembler::CodeLocationLabel::getJumpDestination): + (JSC::AbstractMacroAssembler::CodeLocationJump::relink): + (JSC::AbstractMacroAssembler::CodeLocationJump::CodeLocationJump): + (JSC::AbstractMacroAssembler::CodeLocationCall::relink): + (JSC::AbstractMacroAssembler::CodeLocationCall::calleeReturnAddressValue): + (JSC::AbstractMacroAssembler::CodeLocationCall::CodeLocationCall): + (JSC::AbstractMacroAssembler::CodeLocationNearCall::relink): + (JSC::AbstractMacroAssembler::CodeLocationNearCall::calleeReturnAddressValue): + (JSC::AbstractMacroAssembler::CodeLocationNearCall::CodeLocationNearCall): + (JSC::AbstractMacroAssembler::CodeLocationDataLabel32::repatch): + (JSC::AbstractMacroAssembler::CodeLocationDataLabel32::CodeLocationDataLabel32): + (JSC::AbstractMacroAssembler::CodeLocationDataLabelPtr::repatch): + (JSC::AbstractMacroAssembler::CodeLocationDataLabelPtr::CodeLocationDataLabelPtr): + (JSC::AbstractMacroAssembler::ProcessorReturnAddress::relinkCallerToTrampoline): + (JSC::AbstractMacroAssembler::ProcessorReturnAddress::relinkCallerToFunction): + (JSC::AbstractMacroAssembler::ProcessorReturnAddress::relinkNearCallerToTrampoline): + (JSC::AbstractMacroAssembler::ProcessorReturnAddress::addressForLookup): + (JSC::AbstractMacroAssembler::trampolineAt): + (JSC::AbstractMacroAssembler::PatchBuffer::link): + (JSC::AbstractMacroAssembler::PatchBuffer::performFinalization): + (JSC::::CodeLocationCommon::instructionAtOffset): + (JSC::::CodeLocationCommon::labelAtOffset): + (JSC::::CodeLocationCommon::jumpAtOffset): + (JSC::::CodeLocationCommon::callAtOffset): + (JSC::::CodeLocationCommon::nearCallAtOffset): + (JSC::::CodeLocationCommon::dataLabelPtrAtOffset): + (JSC::::CodeLocationCommon::dataLabel32AtOffset): + * assembler/MacroAssemblerCodeRef.h: + (JSC::FunctionPtr::FunctionPtr): + (JSC::FunctionPtr::value): + (JSC::FunctionPtr::executableAddress): + (JSC::ReturnAddressPtr::ReturnAddressPtr): + (JSC::ReturnAddressPtr::value): + (JSC::MacroAssemblerCodePtr::MacroAssemblerCodePtr): + (JSC::MacroAssemblerCodePtr::executableAddress): + (JSC::MacroAssemblerCodePtr::dataLocation): + (JSC::MacroAssemblerCodeRef::MacroAssemblerCodeRef): + * assembler/X86Assembler.h: + (JSC::X86Assembler::patchPointerForCall): + * jit/JIT.cpp: + (JSC::ctiPatchNearCallByReturnAddress): + (JSC::ctiPatchCallByReturnAddress): + (JSC::JIT::privateCompile): + (JSC::JIT::privateCompileCTIMachineTrampolines): + * jit/JIT.h: + (JSC::JIT::compileCTIMachineTrampolines): + * jit/JITCall.cpp: + (JSC::JIT::compileOpCall): + * jit/JITCode.h: + (JSC::JITCode::operator !): + (JSC::JITCode::addressForCall): + (JSC::JITCode::offsetOf): + (JSC::JITCode::execute): + (JSC::JITCode::size): + (JSC::JITCode::HostFunction): + * jit/JITInlineMethods.h: + (JSC::JIT::emitNakedCall): + * jit/JITPropertyAccess.cpp: + (JSC::JIT::privateCompilePutByIdTransition): + (JSC::JIT::patchGetByIdSelf): + (JSC::JIT::patchPutByIdReplace): + (JSC::JIT::privateCompilePatchGetArrayLength): + (JSC::JIT::privateCompileGetByIdProto): + (JSC::JIT::privateCompileGetByIdChain): + * jit/JITStubs.cpp: + (JSC::JITThunks::JITThunks): + (JSC::JITThunks::tryCachePutByID): + (JSC::JITThunks::tryCacheGetByID): + (JSC::JITStubs::DEFINE_STUB_FUNCTION): + * jit/JITStubs.h: + (JSC::JITThunks::ctiArrayLengthTrampoline): + (JSC::JITThunks::ctiStringLengthTrampoline): + (JSC::JITThunks::ctiVirtualCallPreLink): + (JSC::JITThunks::ctiVirtualCallLink): + (JSC::JITThunks::ctiVirtualCall): + (JSC::JITThunks::ctiNativeCallThunk): + * yarr/RegexJIT.h: + (JSC::Yarr::RegexCodeBlock::operator!): + (JSC::Yarr::RegexCodeBlock::execute): + +2009-06-05 Antti Koivisto + + Try to unbreak Windows build. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: + +2009-06-03 Antti Koivisto + + Reviewed by Dave Kilzer. + + https://bugs.webkit.org/show_bug.cgi?id=13128 + Safari not obeying cache header + + Export JSC::parseDate() + + * JavaScriptCore.exp: + * JavaScriptCore.xcodeproj/project.pbxproj: + +2009-06-04 Oliver Hunt + + Reviewed by Gavin Barraclough. + + Bug in property caching of getters and setters. + + Make sure that the transition logic accounts for getters and setters. + If we don't we end up screwing up the transition tables so that some + transitions will start incorrectly believing that they need to check + for getters and setters. + + * runtime/JSObject.cpp: + (JSC::JSObject::defineGetter): + (JSC::JSObject::defineSetter): + * runtime/JSObject.h: + (JSC::): + * runtime/Structure.h: + +2009-06-04 Gavin Barraclough + + Reviewed by Sam Weinig. + + Minor tweak to PatchBuffer, change it so it no longer holds a CodeRef, and instead + holds a separate code pointer and executable pool. Since it now always holds its + own copy of the code size, and to simplify the construction sequence, it's neater + this way. + + * assembler/AbstractMacroAssembler.h: + (JSC::AbstractMacroAssembler::PatchBuffer::PatchBuffer): + (JSC::AbstractMacroAssembler::PatchBuffer::finalizeCode): + (JSC::AbstractMacroAssembler::PatchBuffer::code): + (JSC::AbstractMacroAssembler::PatchBuffer::performFinalization): + +2009-06-04 Gavin Barraclough + + Reviewed by Oliver Hunt. + + Remove 'JIT_STUB_ARGUMENT_STACK' this is unused and untested. + + This just leaves JIT_STUB_ARGUMENT_REGISTER and JIT_STUB_ARGUMENT_VA_LIST. + Since JIT_STUB_ARGUMENT_REGISTER is the sensible configuration on most platforms, + remove this define and make this the default behaviour. + Platforms must now define JIT_STUB_ARGUMENT_VA_LIST to get crazy va_list voodoo, + if they so desire. + + (Refactoring of #ifdefs only, no functional change, no performance impact.) + + * jit/JIT.h: + * jit/JITInlineMethods.h: + (JSC::JIT::restoreArgumentReference): + (JSC::JIT::restoreArgumentReferenceForTrampoline): + * jit/JITStubs.cpp: + (JSC::): + * jit/JITStubs.h: + * wtf/Platform.h: + +2009-06-04 Gavin Barraclough + + Rubber stamped by Sam Weinig. + + * jit/JITArithmetic.cpp: + Remove some redundant typedefs, unused since arithmetic was added to the MacroAssembler interface. + +2009-06-04 Brent Fulgham + + Build fix due to header include problem. + + * interpreter/Interpreter.h: Remove wtf from includes so that + compile can find the headers in expected places. + +2009-06-04 Zoltan Horvath + + Reviewed by Darin Adler. + + HashTable class (JavaScriptCore/wtf/HashTable.h) doesn't instantiated by 'new', so + inheritance was removed. HashTable struct has been instantiated by operator new in + JSGlobalData.cpp:106. + HashTable couldn't inherited from FastAllocBase since struct with inheritance is + no longer POD, so HashTable struct has been instantiated by fastNew, destroyed by + fastDelete. + + * interpreter/Interpreter.h: + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): + (JSC::JSGlobalData::~JSGlobalData): + * wtf/HashTable.h: + +2009-06-04 Gavin Barraclough + + Reviewed by Oliver Hunt. + + Wrap the code that plants pushes/pops planted by JIT in explanatorily named + methods; move property storage reallocation into a standard stub function. + + ~No performance impact (possible <1% progression on x86-64, likely just noise). + + * jit/JIT.cpp: + (JSC::JIT::privateCompile): + (JSC::JIT::privateCompileCTIMachineTrampolines): + Wrap calls to push/pop. + * jit/JIT.h: + Declare the new wrapper methods. + * jit/JITInlineMethods.h: + (JSC::JIT::preverveReturnAddressAfterCall): + (JSC::JIT::restoreReturnAddressBeforeReturn): + Define the new wrapper methods. + * jit/JITOpcodes.cpp: + (JSC::JIT::emit_op_end): + (JSC::JIT::emit_op_ret): + Wrap calls to push/pop. + * jit/JITPropertyAccess.cpp: + (JSC::JIT::privateCompilePutByIdTransition): + Move property storage reallocation into a standard stub function. + * jit/JITStubs.cpp: + (JSC::JITStubs::DEFINE_STUB_FUNCTION): + * jit/JITStubs.h: + (JSC::JITStubs::): + +2009-06-04 Laszlo Gombos + + Reviewed by Ariya Hidayat. + + [Qt] Single-threaded QtWebKit configuration + + + * JavaScriptCore.pri: Use ThreadingNone.cpp instead of + ThreadingQt.cpp and make sure ENABLE_JSC_MULTIPLE_THREADS is turned off + when ENABLE_SINGLE_THREADED is tuned on + * wtf/ThreadingNone.cpp: + (WTF::ThreadCondition::wait): Fix compilation warning. + (WTF::ThreadCondition::timedWait): Ditto. + +2009-06-02 Mark Rowe + + Reviewed by Anders Carlsson. + + Remove workaround that was added to address as it no longer affects our Tiger builds. + + * Configurations/Base.xcconfig: + +2009-06-02 Xan Lopez + + Reviewed by Sam Weinig. + + Use C-style comments in Platform.h so it can be included from C + files. + + * wtf/Platform.h: + +2009-06-02 Tor Arne Vestbø + + Rubber-stamped by Simon Hausmann. + + Use File::Spec->tmpdir instead of hardcoded paths for tempfile() dir + + This fixes the Windows-build if the user does not have a /tmp directory. + + * pcre/dftables: + +2009-06-02 Gavin Barraclough + + Reviewed by Oliver ">>" Hunt. + + emitSlow_op_rshift is linking the wrong number of slow cases, if !supportsFloatingPoint(). + Fixerate, and refactor/comment the code a little to make it clearer what is going on. + + * jit/JITArithmetic.cpp: + (JSC::JIT::emit_op_rshift): + (JSC::JIT::emitSlow_op_rshift): + +2009-06-01 Gavin Barraclough + + Reviewed by NOBODY - speculative windows build fix (errm, for the other patch!). + + * jit/JITStubs.cpp: + (JSC::): + +2009-06-01 Gavin Barraclough + + Reviewed by NOBODY - speculative windows build fix. + + * assembler/AbstractMacroAssembler.h: + (JSC::::CodeLocationCall::CodeLocationCall): + (JSC::::CodeLocationNearCall::CodeLocationNearCall): + +2009-06-01 Gavin Barraclough + + Reviewed by Olliej Hunt. + + Change JITStub functions from being static members on the JITStub class to be + global extern "C" functions, and switch their the function signature declaration + in the definition of the functions to be C-macro generated. This makes it easier + to work with the stub functions from assembler code (since the names no longer + require mangling), and by delaring the functions with a macro we can look at + also auto-generating asm thunks to wrap the JITStub functions to perform the + work currently in 'restoreArgumentReference' (as a memory saving). + + Making this change also forces us to be a bit more realistic about what is private + on the Register and CallFrame objects. Presently most everything on these classes + is private, and the classes have plenty of friends. We could befriend all the + global functions to perpetuate the delusion of encapsulation, but using friends is + a bit of a sledgehammer solution here - since friends can poke around with all of + the class's privates, and since all the major classes taht operate on Regsiters are + currently friends, right there is currently in practice very little protection at + all. Better to start removing friend delclarations, and exposing just the parts + that need to be exposed. + + * interpreter/CallFrame.h: + (JSC::ExecState::returnPC): + (JSC::ExecState::setCallerFrame): + (JSC::ExecState::returnValueRegister): + (JSC::ExecState::setArgumentCount): + (JSC::ExecState::setCallee): + (JSC::ExecState::setCodeBlock): + * interpreter/Interpreter.h: + * interpreter/Register.h: + (JSC::Register::Register): + (JSC::Register::i): + * jit/JITStubs.cpp: + (JSC::): + (JSC::JITThunks::JITThunks): + (JSC::JITThunks::tryCachePutByID): + (JSC::JITThunks::tryCacheGetByID): + (JSC::JITStubs::DEFINE_STUB_FUNCTION): + * jit/JITStubs.h: + (JSC::JITStubs::): + * runtime/JSFunction.h: + (JSC::JSFunction::nativeFunction): + (JSC::JSFunction::classInfo): + * runtime/JSGlobalData.h: + +2009-06-01 Oliver Hunt + + Reviewed by Gavin Barraclough. + + Tidy up the literal parser. + + Make the number lexing in the LiteralParser exactly match the JSON spec, which + makes us cover more cases, but also more strict. Also made string lexing only + allow double-quoted strings. + + * runtime/LiteralParser.cpp: + (JSC::LiteralParser::Lexer::lex): + (JSC::LiteralParser::Lexer::lexString): + (JSC::LiteralParser::Lexer::lexNumber): + +2009-06-01 Gavin Barraclough + + Reviewed by Sam "WX" Weinig. + + Allow the JIT to operate without relying on use of RWX memory, on platforms where this is supported. + + This patch adds a switch to Platform.h (ENABLE_ASSEMBLER_WX_EXCLUSIVE) which enables this mode of operation. + When this flag is set, all executable memory will be allocated RX, and switched to RW only whilst being + modified. Upon completion of code generation the protection is switched back to RX to allow execution. + + Further optimization will be required before it is desirable to enable this mode of operation by default; + enabling this presently incurs a 5%-10% regression. + + (Submitting disabled - no performance impact). + + * assembler/AbstractMacroAssembler.h: + (JSC::AbstractMacroAssembler::CodeLocationInstruction::repatchLoadToLEA): + (JSC::AbstractMacroAssembler::CodeLocationLabel::fromFunctionPointer): + (JSC::AbstractMacroAssembler::CodeLocationJump::relink): + (JSC::AbstractMacroAssembler::CodeLocationCall::relink): + (JSC::AbstractMacroAssembler::CodeLocationNearCall::relink): + (JSC::AbstractMacroAssembler::CodeLocationDataLabel32::repatch): + (JSC::AbstractMacroAssembler::CodeLocationDataLabelPtr::repatch): + (JSC::AbstractMacroAssembler::ProcessorReturnAddress::relinkCallerToTrampoline): + (JSC::AbstractMacroAssembler::ProcessorReturnAddress::relinkCallerToFunction): + (JSC::AbstractMacroAssembler::ProcessorReturnAddress::relinkNearCallerToTrampoline): + (JSC::AbstractMacroAssembler::ProcessorReturnAddress::relinkNearCallerToFunction): + (JSC::AbstractMacroAssembler::PatchBuffer::PatchBuffer): + (JSC::AbstractMacroAssembler::PatchBuffer::~PatchBuffer): + (JSC::AbstractMacroAssembler::PatchBuffer::link): + (JSC::AbstractMacroAssembler::PatchBuffer::patch): + (JSC::AbstractMacroAssembler::PatchBuffer::performFinalization): + (JSC::::CodeLocationCommon::nearCallAtOffset): + (JSC::::CodeLocationCall::CodeLocationCall): + (JSC::::CodeLocationNearCall::CodeLocationNearCall): + * assembler/AssemblerBuffer.h: + (JSC::AssemblerBuffer::executableCopy): + * assembler/X86Assembler.h: + (JSC::CAN_SIGN_EXTEND_U32_64): + (JSC::X86Assembler::linkJump): + (JSC::X86Assembler::linkCall): + (JSC::X86Assembler::patchPointer): + (JSC::X86Assembler::relinkJump): + (JSC::X86Assembler::relinkCall): + (JSC::X86Assembler::repatchInt32): + (JSC::X86Assembler::repatchPointer): + (JSC::X86Assembler::repatchLoadToLEA): + (JSC::X86Assembler::patchInt32): + (JSC::X86Assembler::patchRel32): + * jit/ExecutableAllocator.h: + (JSC::ExecutableAllocator::): + (JSC::ExecutableAllocator::makeWritable): + (JSC::ExecutableAllocator::makeExecutable): + * jit/ExecutableAllocatorFixedVMPool.cpp: + (JSC::FixedVMPoolAllocator::FixedVMPoolAllocator): + * jit/ExecutableAllocatorPosix.cpp: + (JSC::ExecutablePool::systemAlloc): + (JSC::ExecutablePool::systemRelease): + (JSC::ExecutableAllocator::reprotectRegion): + * jit/ExecutableAllocatorWin.cpp: + * jit/JITPropertyAccess.cpp: + (JSC::JIT::patchGetByIdSelf): + (JSC::JIT::patchPutByIdReplace): + * wtf/Platform.h: + +2009-05-29 Zoltan Horvath + + Reviewed by Darin Adler. + + Inherits Interpreter class from FastAllocBase because it has been + instantiated by 'new' in JavaScriptCore/runtime/JSGlobalData.cpp. + + * interpreter/Interpreter.h: + +2009-06-01 David Levin + + Reviewed by NOBODY (windows build fix). + + Add exports for windows (corresponding to the JavaScriptCore.exp modification + in the previous change). + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: + +2009-06-01 David Levin + + Reviewed by Darin Alder and Maciej Stachowiak. + + Bug 26057: StringImpl should share buffers with UString. + https://bugs.webkit.org/show_bug.cgi?id=26057 + + * JavaScriptCore.exp: + * runtime/UString.cpp: + (JSC::UString::Rep::create): + (JSC::UString::BaseString::sharedBuffer): Only do the sharing when + the buffer exceeds a certain size. The size was tuned by running + various dom benchmarks with numbers ranging from 20 to 800 and finding + a place that seemed to do the best overall. + * runtime/UString.h: + +2009-05-31 Gavin Barraclough + + Reviewed by Olliej "you just need to change NativeFunctionWrapper.h" Hunt. + + Add ENABLE_JIT_OPTIMIZE_NATIVE_CALL switch to allow JIT to operate without native call optimizations. + + * runtime/NativeFunctionWrapper.h: + * wtf/Platform.h: + +2009-05-30 Darin Adler + + Reviewed by Sam Weinig. + + REGRESSION (r42734): Celtic Kane JavaScript benchmark does not run: + "Maximum call stack size exceeded" + + * runtime/ArrayPrototype.cpp: + (JSC::arrayProtoFuncToString): Use the same recursion limit as the other recursion checks. + We need a limit of at least 100 to run the benchmark above. + (JSC::arrayProtoFuncToLocaleString): Ditto. + (JSC::arrayProtoFuncJoin): Ditto. + +2009-05-28 Dirk Schulze + + Reviewed by Nikolas Zimmermann. + + Added new build flag --filters for Mac. More details in WebCore/ChangeLog. + + * Configurations/FeatureDefines.xcconfig: + +2009-05-27 Oliver Hunt + + Reviewed by Mark Rowe. + + Stack overflow in JSC::stringProtoFuncReplace() running jsFunFuzz + + We should always check for exceptions after creating a CachedCall, this wasn't being done in + the string replace logic. + + * runtime/StringPrototype.cpp: + (JSC::stringProtoFuncReplace): + +2009-05-27 Gustavo Noronha Silva + + Unreviewed (make distcheck) build fix; adding missing headers. + + * GNUmakefile.am: + +2009-05-27 Jessie Berlin + + Reviewed by Adam Roben + + Fix the Windows build. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: + +2009-05-27 Fridrich Strba + + Reviewed by Gustavo Noronha. + + When building on Windows, consider Windows specific files. + + * GNUmakefile.am: + +2009-05-27 Fridrich Strba + + Reviewed by Maciej Stachowiak. + + When building with MinGW, don't use the __declspec(dl{import,export}) + decorations and rely on the linker to use its nifty auto-import feature. + It is extremely hard to get the decorations right with MinGW in general + and impossible in WebKit, where the resulting shared library is linking + together some static libraries. + + * config.h: + +2009-05-26 Holger Hans Peter Freyther + + Reviewed by Xan Lopez. + + https://bugs.webkit.org/show_bug.cgi?id=25613 + + Be able to use GOwnPtr for GHashTable as well. The assumption + is that the hash table has been created with g_hash_table_new_full + and has proper destruction functions. + + * wtf/GOwnPtr.cpp: + (WTF::GHashTable): + * wtf/GOwnPtr.h: + +2009-05-26 Oliver Hunt + + Reviewed by Gavin Barraclough. + + REGRESSION: Assertion failure due to forward references + + Add a pattern type for forward references to ensure that we don't confuse the + quantifier alternatives assertion. + + * yarr/RegexCompiler.cpp: + (JSC::Yarr::RegexPatternConstructor::atomBackReference): + (JSC::Yarr::RegexPatternConstructor::setupAlternativeOffsets): + * yarr/RegexInterpreter.cpp: + (JSC::Yarr::ByteCompiler::emitDisjunction): + * yarr/RegexJIT.cpp: + (JSC::Yarr::RegexGenerator::generateTerm): + * yarr/RegexPattern.h: + (JSC::Yarr::PatternTerm::): + (JSC::Yarr::PatternTerm::PatternTerm): + (JSC::Yarr::PatternTerm::ForwardReference): + +2009-05-26 Gavin Barraclough + + Reviewed by Oliver Hunt. + + Fix for: REGRESSION: jQuery load() issue (25981), + and also an ASSERT failure on http://ihasahotdog.com/. + + When overwriting a property on a dictionary with a cached specific value, + clear the cache if new value being written is different. + + * JavaScriptCore.exp: + Export the new symbols. + * jit/JITStubs.cpp: + (JSC::JITStubs::cti_op_get_by_id_method_check_second): + Close dictionary prototypes upon caching a method access, as would happen when caching + a regular get_by_id. + * runtime/JSObject.h: + (JSC::JSObject::propertyStorage): + (JSC::JSObject::locationForOffset): + Make these methods private. + (JSC::JSObject::putDirectInternal): + When overwriting a property on a dictionary with a cached specific value, + clear the cache if new value being written is different. + * runtime/Structure.cpp: + (JSC::Structure::despecifyDictionaryFunction): + Reset the specific value field for a given property in a dictionary. + (JSC::Structure::despecifyFunctionTransition): + Rename of 'changeFunctionTransition' (this was already internally refered to as a despecification). + * runtime/Structure.h: + Declare new method. + +2009-05-26 Gavin Barraclough + + Reviewed by Oliver "pieces of eight" Hunt. + + When reseting RegexPattern class, should fully reset the class, not just bits of it. + In particular, we delete the cached character classes (for wordchars, etc), but do + not reset the set of pointers to the cached classes. In the case of a repeated parse + due to an illegal back-reference we will continue to use the deleted character class. + + * yarr/RegexPattern.h: + (JSC::Yarr::RegexPattern::reset): + +2009-05-26 Brent Fulgham + + Build fix to correct r44161. + + * wtf/FastAllocBase.h: + +2009-05-26 Zoltan Horvath + + Reviewed by Maciej Stachowiak. + + Inherite HashTable from FastAllocBase, because it has been instantiated by + 'new' in JavaScriptCore/runtime/JSGlobalData.cpp. + + * wtf/HashTable.h: + * wtf/FastAllocBase.h: Remove 'wtf' path from TypeTraits.h to allow use outside of wtf. + +2009-05-25 David Levin + + Reviewed by Maciej Stachowiak and Oliver Hunt. + + https://bugs.webkit.org/show_bug.cgi?id=25126 + Allow the buffer underlying UString to be shared. + + In order to not grow the underlying size of any structure, + there is a union in the Rep string which holds + + m_sharedBuffer -- a pointer to the shared ref counted buffer + if the class is BaseString and the buffer is being shared OR + + m_baseString -- the BaseString if the class is only UString::Rep + but not a UString::BaseString + + Ideally, m_sharedBuffer would be a RefPtr, but it cannot be because + it is in a union. + + No change in sunspider perf. + + * JavaScriptCore.vcproj/WTF/WTF.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * runtime/UString.cpp: + (JSC::UString::Rep::share): + (JSC::UString::Rep::destroy): + (JSC::UString::BaseString::sharedBuffer): + (JSC::UString::BaseString::setSharedBuffer): + (JSC::UString::BaseString::slowIsBufferReadOnly): + (JSC::expandCapacity): + (JSC::UString::Rep::reserveCapacity): + (JSC::UString::expandPreCapacity): + (JSC::concatenate): + (JSC::UString::append): + * runtime/UString.h: + (JSC::UString::Rep::Rep): + (JSC::UString::Rep::): + (JSC::UString::BaseString::isShared): + (JSC::UString::BaseString::isBufferReadOnly): + (JSC::UString::Rep::baseString): + * wtf/CrossThreadRefCounted.h: + (WTF::CrossThreadRefCounted::isShared): + * wtf/OwnFastMallocPtr.h: Added. + (WTF::OwnFastMallocPtr::OwnFastMallocPtr): + (WTF::OwnFastMallocPtr::~OwnFastMallocPtr): + (WTF::OwnFastMallocPtr::get): + (WTF::OwnFastMallocPtr::release): + +2009-05-25 Oliver Hunt + + Reviewed by Maciej Stachowiak. + + Re-add interpreter logic to jit-enabled builds as GCC mysteriously regresses without it + + * wtf/Platform.h: + +2009-05-25 Fridrich Strba + + Reviewed by Maciej Stachowiak. + + The functions written in assembly need to have a leading + underscore on Windows too. + + * jit/JITStubs.cpp: + +2009-05-24 Steve Falkenburg + + Build fix for experimental PGO Windows target. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + +2009-05-23 David Kilzer + + Part 1 of 2: Bug 25495: Implement PassOwnPtr and replace uses of std::auto_ptr + + + + Reviewed by Oliver Hunt. + + * GNUmakefile.am: Added OwnPtrCommon.h and PassOwnPtr.h. + * JavaScriptCore.vcproj/WTF/WTF.vcproj: Ditto. + * JavaScriptCore.xcodeproj/project.pbxproj: Ditto. + + * wtf/OwnPtr.h: + (WTF::OwnPtr::OwnPtr): Added constructors that take a + PassOwnPtr. Also added a copy constructor declaration that's + required when assigning a PassOwnPtr to a stack-based OwnPtr. + (WTF::operator=): Added assignment operator methods that take a + PassOwnPtr. + (WTF::swap): Reformatted. + (WTF::operator==): Whitespace changes. + (WTF::operator!=): Ditto. + + * wtf/OwnPtrCommon.h: Added. + (WTF::deleteOwnedPtr): + + * wtf/PassOwnPtr.h: Added. + (WTF::PassOwnPtr::PassOwnPtr): + (WTF::PassOwnPtr::~PassOwnPtr): + (WTF::PassOwnPtr::get): + (WTF::PassOwnPtr::clear): + (WTF::PassOwnPtr::release): + (WTF::PassOwnPtr::operator*): + (WTF::PassOwnPtr::operator->): + (WTF::PassOwnPtr::operator!): + (WTF::PassOwnPtr::operator UnspecifiedBoolType): + (WTF::::operator): + (WTF::operator==): + (WTF::operator!=): + (WTF::static_pointer_cast): + (WTF::const_pointer_cast): + (WTF::getPtr): + +2009-05-23 Oliver Hunt + + Reviewed by Maciej Stachowiak. + + Remove interpreter specific logic from the JIT builds. + + This saves ~100k in JSC release builds. + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): + * interpreter/Interpreter.h: + * wtf/Platform.h: + +2009-05-22 Mark Rowe + + Part two of an attempted Windows build fix. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: + +2009-05-22 Mark Rowe + + Part one of an attempted Windows build fix. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: + +2009-05-21 Gavin Barraclough + + Reviewed by Geoff Garen. + + op_method_check + + Optimize method calls, by caching specific function values within the Structure. + The new opcode is used almost like an x86 opcode prefix byte to optimize op_get_by_id, + where the property access is being used to read a function to be passed to op-call (i.e. + 'foo.bar();'). This patch modifies the Structure class such that when a property is + put to an object for the first time we will check if the value is a function. If it is, + we will cache the function value on the Structure. A Structure in such a state guarantees + that not only does a property with the given identifier exist on the object, but also that + its value is unchanged. Upon any further attempt to put a property with the same identifier + (but a different value) to the object, it will transition back to a normal Structure (where + it will guarantee the presence but not the value of the property). + + op_method_check makes use of the new information made available by the Structure, by + augmenting the functionality of op_get_by_id. Upon generating a FunctionCallDotNode a + check will be emitted prior to the property access reading the function value, and the JIT + will generate an extra (initially unlinked but patchable) set of checks prior to the regular + JIT code for get_by_id. The new code will do inline structure and prototype structure check + (unlike a regular get_by_id, which can only handle 'self' accesses inline), and then performs + an immediate load of the function value, rather than using memory accesses to load the value + from the obejct's property storage array. If the method check fails it will revert, or if + the access is polymorphic, the op_get_by_id will continue to operate - and optimize itself - + just as any other regular op_get_by_id would. + + ~2.5% on v8-tests, due to a ~9% progression on richards. + + * API/JSCallbackObjectFunctions.h: + (JSC::::put): + (JSC::::staticFunctionGetter): + * API/JSObjectRef.cpp: + (JSObjectMakeConstructor): + * JavaScriptCore.exp: + * assembler/AbstractMacroAssembler.h: + (JSC::AbstractMacroAssembler::differenceBetween): + * assembler/MacroAssemblerX86.h: + (JSC::MacroAssemblerX86::moveWithPatch): + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::dump): + * bytecode/CodeBlock.h: + (JSC::getMethodCallLinkInfoReturnLocation): + (JSC::CodeBlock::getMethodCallLinkInfo): + (JSC::CodeBlock::addMethodCallLinkInfos): + (JSC::CodeBlock::methodCallLinkInfo): + * bytecode/Opcode.h: + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::emitMethodCheck): + * bytecompiler/BytecodeGenerator.h: + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + (JSC::JIT::privateCompileSlowCases): + (JSC::JIT::privateCompile): + * jit/JIT.h: + (JSC::MethodCallCompilationInfo::MethodCallCompilationInfo): + * jit/JITOpcodes.cpp: + * jit/JITPropertyAccess.cpp: + (JSC::JIT::emit_op_method_check): + (JSC::JIT::emitSlow_op_method_check): + (JSC::JIT::emit_op_get_by_id): + (JSC::JIT::emitSlow_op_get_by_id): + (JSC::JIT::emit_op_put_by_id): + (JSC::JIT::emitSlow_op_put_by_id): + (JSC::JIT::compileGetByIdHotPath): + (JSC::JIT::compileGetByIdSlowCase): + (JSC::JIT::patchMethodCallProto): + * jit/JITStubs.cpp: + (JSC::JITStubs::cti_op_get_by_id_method_check): + (JSC::JITStubs::cti_op_get_by_id_method_check_second): + * jit/JITStubs.h: + * jsc.cpp: + (GlobalObject::GlobalObject): + * parser/Nodes.cpp: + (JSC::FunctionCallDotNode::emitBytecode): + * runtime/Arguments.cpp: + (JSC::Arguments::put): + * runtime/ArrayConstructor.cpp: + (JSC::ArrayConstructor::ArrayConstructor): + * runtime/BooleanConstructor.cpp: + (JSC::BooleanConstructor::BooleanConstructor): + * runtime/DateConstructor.cpp: + (JSC::DateConstructor::DateConstructor): + * runtime/ErrorConstructor.cpp: + (JSC::ErrorConstructor::ErrorConstructor): + (JSC::constructError): + * runtime/ErrorPrototype.cpp: + (JSC::ErrorPrototype::ErrorPrototype): + * runtime/FunctionConstructor.cpp: + (JSC::FunctionConstructor::FunctionConstructor): + * runtime/FunctionPrototype.cpp: + (JSC::FunctionPrototype::FunctionPrototype): + * runtime/InternalFunction.cpp: + (JSC::InternalFunction::InternalFunction): + * runtime/JSActivation.cpp: + (JSC::JSActivation::put): + (JSC::JSActivation::putWithAttributes): + * runtime/JSByteArray.cpp: + (JSC::JSByteArray::JSByteArray): + * runtime/JSFunction.cpp: + (JSC::JSFunction::JSFunction): + (JSC::JSFunction::getOwnPropertySlot): + * runtime/JSGlobalObject.cpp: + (JSC::JSGlobalObject::putWithAttributes): + (JSC::JSGlobalObject::reset): + (JSC::JSGlobalObject::mark): + * runtime/JSGlobalObject.h: + (JSC::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData): + (JSC::JSGlobalObject::methodCallDummy): + * runtime/JSObject.cpp: + (JSC::JSObject::put): + (JSC::JSObject::putWithAttributes): + (JSC::JSObject::deleteProperty): + (JSC::JSObject::defineGetter): + (JSC::JSObject::defineSetter): + (JSC::JSObject::getPropertyAttributes): + (JSC::JSObject::getPropertySpecificFunction): + (JSC::JSObject::putDirectFunction): + (JSC::JSObject::putDirectFunctionWithoutTransition): + * runtime/JSObject.h: + (JSC::getJSFunction): + (JSC::JSObject::getDirectLocation): + (JSC::JSObject::putDirect): + (JSC::JSObject::putDirectWithoutTransition): + * runtime/LiteralParser.cpp: + (JSC::LiteralParser::parseObject): + * runtime/Lookup.cpp: + (JSC::setUpStaticFunctionSlot): + * runtime/Lookup.h: + (JSC::lookupPut): + * runtime/MathObject.cpp: + (JSC::MathObject::MathObject): + * runtime/NativeErrorConstructor.cpp: + (JSC::NativeErrorConstructor::NativeErrorConstructor): + (JSC::NativeErrorConstructor::construct): + * runtime/NativeErrorPrototype.cpp: + (JSC::NativeErrorPrototype::NativeErrorPrototype): + * runtime/NumberConstructor.cpp: + (JSC::NumberConstructor::NumberConstructor): + * runtime/ObjectConstructor.cpp: + (JSC::ObjectConstructor::ObjectConstructor): + * runtime/PropertyMapHashTable.h: + (JSC::PropertyMapEntry::PropertyMapEntry): + * runtime/PrototypeFunction.cpp: + (JSC::PrototypeFunction::PrototypeFunction): + * runtime/PutPropertySlot.h: + (JSC::PutPropertySlot::): + (JSC::PutPropertySlot::PutPropertySlot): + (JSC::PutPropertySlot::setNewProperty): + (JSC::PutPropertySlot::setDespecifyFunctionProperty): + (JSC::PutPropertySlot::isCacheable): + (JSC::PutPropertySlot::cachedOffset): + * runtime/RegExpConstructor.cpp: + (JSC::RegExpConstructor::RegExpConstructor): + * runtime/StringConstructor.cpp: + (JSC::StringConstructor::StringConstructor): + * runtime/StringPrototype.cpp: + (JSC::StringPrototype::StringPrototype): + * runtime/Structure.cpp: + (JSC::Structure::Structure): + (JSC::Structure::~Structure): + (JSC::Structure::materializePropertyMap): + (JSC::Structure::addPropertyTransitionToExistingStructure): + (JSC::Structure::addPropertyTransition): + (JSC::Structure::changeFunctionTransition): + (JSC::Structure::addPropertyWithoutTransition): + (JSC::Structure::get): + (JSC::Structure::despecifyFunction): + (JSC::Structure::put): + (JSC::Structure::remove): + * runtime/Structure.h: + (JSC::Structure::get): + (JSC::Structure::specificFunction): + * runtime/StructureTransitionTable.h: + (JSC::StructureTransitionTableHashTraits::emptyValue): + * wtf/Platform.h: + +2009-05-22 Brent Fulgham + + Reviewed by Steve Falkenburg. + + https://bugs.webkit.org/show_bug.cgi?id=25950 + JavaScriptCore Fails to build on Windows (Cairo) due to CoreFoundation + link requirement. + + Modify project to add new Debug_CFLite and Release_CFLite targets. These + use the new JavaScriptCoreCFLite.vsprops to link against CFLite.dll. + Existing projects are changed to use the new JavaScriptCoreCF.vsprops + to link against CoreFoundation.dll. + + The JavaScriptCoreCommon.vsprops is modified to remove the link + against CoreFoundation.dll. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCF.vsprops: Added. + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCFLite.vsprops: Added. + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops: + +2009-05-22 Dominik Röttsches + + Reviewed by Gustavo Noronha. + + https://bugs.webkit.org/show_bug.cgi?id=15914 + [GTK] Implement Unicode functionality using GLib + + Original patch by Jürg Billeter and Naiem Shaik. + Implementing WTF Unicode functionality based on GLib. + + * GNUmakefile.am: + * wtf/unicode/Unicode.h: + * wtf/unicode/glib: Added. + * wtf/unicode/glib/UnicodeGLib.cpp: Added. + (WTF::Unicode::foldCase): + (WTF::Unicode::toLower): + (WTF::Unicode::toUpper): + (WTF::Unicode::direction): + (WTF::Unicode::umemcasecmp): + * wtf/unicode/glib/UnicodeGLib.h: Added. + (WTF::Unicode::): + (WTF::Unicode::toLower): + (WTF::Unicode::toUpper): + (WTF::Unicode::toTitleCase): + (WTF::Unicode::isArabicChar): + (WTF::Unicode::isFormatChar): + (WTF::Unicode::isSeparatorSpace): + (WTF::Unicode::isPrintableChar): + (WTF::Unicode::isDigit): + (WTF::Unicode::isPunct): + (WTF::Unicode::mirroredChar): + (WTF::Unicode::category): + (WTF::Unicode::isLower): + (WTF::Unicode::digitValue): + (WTF::Unicode::combiningClass): + (WTF::Unicode::decompositionType): + * wtf/unicode/glib/UnicodeMacrosFromICU.h: Added. + +2009-05-21 Xan Lopez + + Unreviewed build fix. + + Add MacroAssemblerCodeRef.h to file list. + + * GNUmakefile.am: + +2009-05-21 Gavin Barraclough + + Reviewed by Darin Adler. + Addition of MacroAssemblerCodeRef.h rubber stamped by Geoff Garen. + + Refactor JIT code-handle objects. The representation of generated code is currently + a bit of a mess. We have a class JITCode which wraps the pointer to a block of + generated code, but this object does not reference the executable pool meaning that + external events (the pool being derefed) could make the pointer become invalid. + To overcome this both the JIT and Yarr implement further (and similar) objects to + wrap the code pointer with a RefPtr to the pool. To add to the mire, as well as the + CodeBlock containing a handle onto the code the FunctionBodyNode also contains a + copy of the code pointer which is used almost (but not entirely) uniquely to access + the JIT code for a function. + + Rationalization of all this: + + * Add a new type 'MacroAssembler::CodeRef' as a handle for a block of JIT generated code. + * Change the JIT & Yarr to internally handle code using CodeRefs. + * Move the CodeRef (formerly anow defunct JITCodeRef) from CodeBlock to its owner node. + * Remove the (now) redundant code pointer from FunctionBodyNode. + + While tidying this up I've made the PatchBuffer return code in new allocations using a CodeRef, + and have enforced an interface that the PatchBuffer will always be used, and 'finalizeCode()' or + 'finalizeCodeAddendum()' will always be called exactly once on the PatchBuffer to complete code generation. + + This gives us a potentially useful hook ('PatchBuffer::performFinalization()') at the end of generation, + which may have a number of uses. It may be helpful should we wish to switch our generation + model to allow RW/RX exclusive memory, and it may be useful on non-cache-coherent platforms to + give us an oportunity to cache flush as necessary. + + No performance impact. + + * assembler/AbstractMacroAssembler.h: + (JSC::AbstractMacroAssembler::ProcessorReturnAddress::relinkCallerToTrampoline): + (JSC::AbstractMacroAssembler::CodeRef::CodeRef): + (JSC::AbstractMacroAssembler::CodeRef::trampolineAt): + (JSC::AbstractMacroAssembler::PatchBuffer::PatchBuffer): + (JSC::AbstractMacroAssembler::PatchBuffer::~PatchBuffer): + (JSC::AbstractMacroAssembler::PatchBuffer::link): + (JSC::AbstractMacroAssembler::PatchBuffer::linkTailRecursive): + (JSC::AbstractMacroAssembler::PatchBuffer::patch): + (JSC::AbstractMacroAssembler::PatchBuffer::complete): + (JSC::AbstractMacroAssembler::PatchBuffer::finalize): + (JSC::AbstractMacroAssembler::PatchBuffer::entry): + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::CodeBlock): + (JSC::CodeBlock::reparseForExceptionInfoIfNecessary): + (JSC::CodeBlock::setJITCode): + * bytecode/CodeBlock.h: + (JSC::CodeBlock::getBytecodeIndex): + (JSC::CodeBlock::executablePool): + * interpreter/CallFrameClosure.h: + * interpreter/Interpreter.cpp: + (JSC::Interpreter::execute): + (JSC::Interpreter::prepareForRepeatCall): + * jit/JIT.cpp: + (JSC::JIT::privateCompile): + (JSC::JIT::privateCompileCTIMachineTrampolines): + (JSC::JIT::linkCall): + * jit/JIT.h: + * jit/JITCode.h: + (JSC::JITCode::JITCode): + (JSC::JITCode::operator bool): + (JSC::JITCode::addressForCall): + (JSC::JITCode::offsetOf): + (JSC::JITCode::execute): + (JSC::JITCode::size): + (JSC::JITCode::executablePool): + (JSC::JITCode::HostFunction): + * jit/JITPropertyAccess.cpp: + (JSC::JIT::privateCompilePutByIdTransition): + (JSC::JIT::privateCompilePatchGetArrayLength): + (JSC::JIT::privateCompileGetByIdProto): + (JSC::JIT::privateCompileGetByIdSelfList): + (JSC::JIT::privateCompileGetByIdProtoList): + (JSC::JIT::privateCompileGetByIdChainList): + (JSC::JIT::privateCompileGetByIdChain): + * jit/JITStubs.cpp: + (JSC::JITStubs::cti_vm_dontLazyLinkCall): + (JSC::JITStubs::cti_vm_lazyLinkCall): + * parser/Nodes.cpp: + (JSC::ProgramNode::generateJITCode): + (JSC::EvalNode::generateJITCode): + (JSC::FunctionBodyNode::FunctionBodyNode): + (JSC::FunctionBodyNode::createNativeThunk): + (JSC::FunctionBodyNode::generateJITCode): + * parser/Nodes.h: + (JSC::ScopeNode::generatedJITCode): + (JSC::ScopeNode::getExecutablePool): + (JSC::ScopeNode::setJITCode): + (JSC::ProgramNode::jitCode): + (JSC::EvalNode::jitCode): + (JSC::FunctionBodyNode::jitCode): + * runtime/RegExp.cpp: + (JSC::RegExp::match): + * yarr/RegexJIT.cpp: + (JSC::Yarr::RegexGenerator::compile): + (JSC::Yarr::jitCompileRegex): + (JSC::Yarr::executeRegex): + * yarr/RegexJIT.h: + (JSC::Yarr::RegexCodeBlock::RegexCodeBlock): + (JSC::Yarr::RegexCodeBlock::pcreFallback): + (JSC::Yarr::RegexCodeBlock::setFallback): + (JSC::Yarr::RegexCodeBlock::operator bool): + (JSC::Yarr::RegexCodeBlock::set): + (JSC::Yarr::RegexCodeBlock::execute): + +2009-05-21 Oliver Hunt + + Reviewed by Maciej Stachowiak. + + REGRESSION: Cached DOM global object property access fails in browser (25921) + + + When caching properties on the global object we need to ensure that we're + not attempting to cache through a shell object. + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::resolveGlobal): + * jit/JITStubs.cpp: + (JSC::JITStubs::cti_op_resolve_global): + +2009-05-21 Steve Falkenburg + + Windows build fix. + + * JavaScriptCore.vcproj/jsc/jscCommon.vsprops: + +2009-05-21 Cameron Zwarich + + Reviewed by Mark Rowe. + + Bug 25945: Add support for MADV_FREE to TCMalloc + + + + Add support for MADV_FREE to TCMalloc_SystemRelease for platforms that + don't also support MADV_FREE_REUSE. The code is identical to the MADV_DONTNEED + case except for the advice passed to madvise(), so combining the two cases + makes the most sense. + + * wtf/Platform.h: Only define HAVE_MADV_FREE when not building on Tiger or + Leopard, because while it is defined on these platforms it actually does + nothing. + * wtf/TCSystemAlloc.cpp: + (TCMalloc_SystemRelease): use MADV_FREE if it is available; otherwise use + MADV_DONTNEED. + +2009-05-21 Mark Rowe + + Reviewed by Oliver Hunt. + + Fix / . + Bug 25917: REGRESSION (r43559?): Javascript debugger crashes when pausing page + + The debugger currently retrieves the arguments object from an activation rather than pulling + it from a call frame. This is unreliable to due to the recent optimization to lazily create + the arguments object. In the long-term it should stop doing that (), + but for now we force eager creation of the arguments object when debugging. + + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::BytecodeGenerator): + +2009-05-21 Cameron Zwarich + + Reviewed by Maciej Stachowiak. + + Bug 25912: Harden NumberPrototype.cpp by removing use of strcpy() + + + This causes no change on SunSpider. + + * runtime/NumberPrototype.cpp: + (JSC::integerPartNoExp): replace strcpy() with memcpy(), ASSERT that the + temporary buffer has sufficient space to store the result, and move the + explicit null-termination closer to the memcpy() for easier visual inspection + of the code. + (JSC::fractionalPartToString): replace strcpy() with memcpy(), and ASSERT + that the temporary buffer has sufficient space to store the result. There + is no explicit null-termination because this is done by the caller. The + same is already true for exponentialPartToString(). + (JSC::numberProtoFuncToExponential): replace strcpy() with memcpy(), explicitly + null-terminate the result, and ASSERT that the temporary buffer has sufficient + space to store the result. + +2009-05-20 Sam Weinig + + Reviewed by Cameron Zwarich. + + Cleanup the JSGlobalData when exiting early with the usage statement in jsc. + + * jsc.cpp: + (printUsageStatement): + (parseArguments): + (jscmain): + +2009-05-20 Stephanie Lewis + + Update the order files. Generate new order files. + + * JavaScriptCore.order: + +2009-05-19 Kenneth Rohde Christiansen + + Reviewed by Simon Hausmann. + + Replace WREC with YARR + YARR_JIT for the Qt port. This is only + used when compiled with JIT support for now, so it is a drop-in + replacement for the WREC usage. Still including the wrec headers + as they are being referred from RegExp.h, though the contents of + that header it protected by "#if ENABLE(WREC)". + + * JavaScriptCore.pri: + +2009-05-20 Xan Lopez + + Reviewed by Eric Seidel. + + Fix GTK debug build. + + The function dumpDisjunction, compiled with debug enabled, uses + printf, which needs stdio.h to be included. + + * yarr/RegexInterpreter.cpp: + +2009-05-20 Laszlo Gombos + + Reviewed by George Staikos. + + BUG 25843: [Qt] Remove qt-port build flag + + + * JavaScriptCore.pro: + + +2009-05-19 Geoffrey Garen + + Windows build fix. + + * interpreter/RegisterFile.cpp: + (JSC::RegisterFile::releaseExcessCapacity): Copy-paste typo. + +2009-05-19 Geoffrey Garen + + Reviewed by Sam Weinig. + + Fixed CrashTracer: [USER] 1 crash in Install + Mac OS X at • 0x9274241c + + (Original patch by Joe Sokol and Ronnie Misra.) + + SunSpider says 1.004x faster. + + * interpreter/RegisterFile.cpp: + (JSC::RegisterFile::releaseExcessCapacity): Instead of doing complicated + math that sometimes used to overflow, just release the full range of the + register file. + + * interpreter/RegisterFile.h: + (JSC::isPageAligned): + (JSC::RegisterFile::RegisterFile): Added ASSERTs to verify that it's + safe to release the full range of the register file. + + (JSC::RegisterFile::shrink): No need to releaseExcessCapacity() if the + new end is not smaller than the old end. (Also, doing so used to cause + numeric overflow, unmapping basically the whole process from memory.) + +2009-05-19 Oliver Hunt + + RS=Mark Rowe. + + REGRESSION: Start Debugging JavaScript crashes browser (nightly builds only?) + + + Remove JSC_FAST_CALL as it wasn't gaining us anything, and was + resulting in weird bugs in the nightly builds. + + * parser/Nodes.cpp: + * parser/Nodes.h: + (JSC::ExpressionNode::isNumber): + (JSC::ExpressionNode::isString): + (JSC::ExpressionNode::isNull): + (JSC::ExpressionNode::isPure): + (JSC::ExpressionNode::isLocation): + (JSC::ExpressionNode::isResolveNode): + (JSC::ExpressionNode::isBracketAccessorNode): + (JSC::ExpressionNode::isDotAccessorNode): + (JSC::ExpressionNode::isFuncExprNode): + (JSC::ExpressionNode::isSimpleArray): + (JSC::ExpressionNode::isAdd): + (JSC::ExpressionNode::resultDescriptor): + (JSC::StatementNode::firstLine): + (JSC::StatementNode::lastLine): + (JSC::StatementNode::isEmptyStatement): + (JSC::StatementNode::isReturnNode): + (JSC::StatementNode::isExprStatement): + (JSC::StatementNode::isBlock): + (JSC::NullNode::isNull): + (JSC::BooleanNode::isPure): + (JSC::NumberNode::value): + (JSC::NumberNode::setValue): + (JSC::NumberNode::isNumber): + (JSC::NumberNode::isPure): + (JSC::StringNode::isPure): + (JSC::StringNode::isString): + (JSC::ResolveNode::identifier): + (JSC::ResolveNode::isLocation): + (JSC::ResolveNode::isResolveNode): + (JSC::BracketAccessorNode::isLocation): + (JSC::BracketAccessorNode::isBracketAccessorNode): + (JSC::DotAccessorNode::base): + (JSC::DotAccessorNode::identifier): + (JSC::DotAccessorNode::isLocation): + (JSC::DotAccessorNode::isDotAccessorNode): + (JSC::TypeOfResolveNode::identifier): + (JSC::AddNode::isAdd): + (JSC::BlockNode::isBlock): + (JSC::EmptyStatementNode::isEmptyStatement): + (JSC::ExprStatementNode::isExprStatement): + (JSC::ReturnNode::isReturnNode): + (JSC::ScopeNode::sourceURL): + (JSC::ProgramNode::bytecode): + (JSC::EvalNode::bytecode): + (JSC::FunctionBodyNode::parameters): + (JSC::FunctionBodyNode::toSourceString): + (JSC::FunctionBodyNode::bytecode): + (JSC::FuncExprNode::isFuncExprNode): + +2009-05-19 Maciej Stachowiak + + Reviewed by Gavin Barraclough. + + - speed up string comparison, especially for short strings + + ~1% on SunSpider + + * JavaScriptCore.exp: + * runtime/UString.cpp: + * runtime/UString.h: + (JSC::operator==): Inline UString's operator==, since it is called from + hot places in the runtime. Also, specialize 2-char strings in a similar way to + 1-char, since we're taking the hit of a switch anyway. + +2009-05-18 Maciej Stachowiak + + Reviewed by Gavin Barraclough. + + - for polymorphic prototype lookups, increase the number of slots from 4 to 8 + + ~4% faster on v8 raytrace benchmark + + * bytecode/Instruction.h: + +2009-05-18 Maciej Stachowiak + + Reviewed by Oliver Hunt. + + - tighten up the code for the load_varargs stub + + ~1-2% on v8-raytrace + + * jit/JITStubs.cpp: + (JSC::JITStubs::cti_op_load_varargs): Hoist some loop invariants that + the compiler didn't feel like hoisting for us. Remove unneeded exception check. + +2009-05-18 Maciej Stachowiak + + Reviewed by Geoff Garen. + + - Improve code generation for access to prototype properties + + ~0.4% speedup on SunSpider. + + Based on a suggestion from Geoff Garen. + + * jit/JIT.h: + * jit/JITPropertyAccess.cpp: + (JSC::JIT::compileGetDirectOffset): + (JSC::JIT::privateCompileGetByIdProto): + (JSC::JIT::privateCompileGetByIdProtoList): + (JSC::JIT::privateCompileGetByIdChainList): + (JSC::JIT::privateCompileGetByIdChain): + +2009-05-18 Gustavo Noronha Silva + + Reviewed by Gavin Barraclough. + + Enable YARR, and disable WREC for GTK+. + + * GNUmakefile.am: + * yarr/RegexParser.h: + +2009-05-18 Jan Michael Alonzo + + Reviewed by Xan Lopez. + + [Gtk] Various autotools build refactoring and fixes + https://bugs.webkit.org/show_bug.cgi?id=25286 + + Add -no-install and -no-fast-install to programs and tests that we + don't install. Also remove -O2 since this is already handled at + configure time. + + * GNUmakefile.am: + +2009-05-17 Jan Michael Alonzo + + Reviewed by Xan Lopez. + + [Gtk] Various autotools build refactoring and fixes + https://bugs.webkit.org/show_bug.cgi?id=25286 + + Add JavaScriptCore/ to JSC include path only since it's not + required when building WebCore. + + * GNUmakefile.am: + +2009-05-17 Steve Falkenburg + + Windows build fix + + * JavaScriptCore.vcproj/JavaScriptCore.make: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + +2009-05-15 Gavin Barraclough + + Reviewed by Oliver Hunt. + + Looking like MSVC doesn't like static variables in inline methods? + Make the state of the SSE2 check a static variable on the class + MacroAssemblerX86Common as a speculative build fix for Windows. + + * assembler/MacroAssemblerX86Common.h: + (JSC::MacroAssemblerX86Common::convertInt32ToDouble): + (JSC::MacroAssemblerX86Common::branchDouble): + (JSC::MacroAssemblerX86Common::branchTruncateDoubleToInt32): + (JSC::MacroAssemblerX86Common::isSSE2Present): + (JSC::MacroAssemblerX86Common::): + * jit/JIT.cpp: + +2009-05-15 Adam Roben + + Add some assembler headers to JavaScriptCore.vcproj + + This is just a convenience for Windows developers. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + +2009-05-15 Gavin Barraclough + + Reviewed by Oliver Hunt. + + Add FP support to the MacroAssembler, port JITArithmetic over to make use of this. Also add + API to determine whether FP support is available 'MacroAssembler::supportsFloatingPoint()', + FP is presently only supported on SSE2 platforms, not x87. On platforms where a suitable + hardware FPU is not available 'supportsFloatingPoint()' may simply return false, and all + other methods ASSERT_NOT_REACHED(). + + * assembler/AbstractMacroAssembler.h: + * assembler/MacroAssemblerX86.h: + (JSC::MacroAssemblerX86::MacroAssemblerX86): + (JSC::MacroAssemblerX86::branch32): + (JSC::MacroAssemblerX86::branchPtrWithPatch): + (JSC::MacroAssemblerX86::supportsFloatingPoint): + * assembler/MacroAssemblerX86Common.h: + (JSC::MacroAssemblerX86Common::): + (JSC::MacroAssemblerX86Common::loadDouble): + (JSC::MacroAssemblerX86Common::storeDouble): + (JSC::MacroAssemblerX86Common::addDouble): + (JSC::MacroAssemblerX86Common::subDouble): + (JSC::MacroAssemblerX86Common::mulDouble): + (JSC::MacroAssemblerX86Common::convertInt32ToDouble): + (JSC::MacroAssemblerX86Common::branchDouble): + (JSC::MacroAssemblerX86Common::branchTruncateDoubleToInt32): + (JSC::MacroAssemblerX86Common::branch32): + (JSC::MacroAssemblerX86Common::branch16): + (JSC::MacroAssemblerX86Common::branchTest32): + (JSC::MacroAssemblerX86Common::branchAdd32): + (JSC::MacroAssemblerX86Common::branchMul32): + (JSC::MacroAssemblerX86Common::branchSub32): + (JSC::MacroAssemblerX86Common::set32): + (JSC::MacroAssemblerX86Common::setTest32): + (JSC::MacroAssemblerX86Common::x86Condition): + (JSC::MacroAssemblerX86Common::isSSE2Present): + * assembler/MacroAssemblerX86_64.h: + (JSC::MacroAssemblerX86_64::movePtrToDouble): + (JSC::MacroAssemblerX86_64::moveDoubleToPtr): + (JSC::MacroAssemblerX86_64::setPtr): + (JSC::MacroAssemblerX86_64::branchPtr): + (JSC::MacroAssemblerX86_64::branchTestPtr): + (JSC::MacroAssemblerX86_64::branchAddPtr): + (JSC::MacroAssemblerX86_64::branchSubPtr): + (JSC::MacroAssemblerX86_64::supportsFloatingPoint): + * assembler/X86Assembler.h: + * jit/JIT.cpp: + (JSC::JIT::JIT): + * jit/JIT.h: + * jit/JITArithmetic.cpp: + (JSC::JIT::emit_op_rshift): + (JSC::JIT::emitSlow_op_rshift): + (JSC::JIT::emitSlow_op_jnless): + (JSC::JIT::emitSlow_op_jnlesseq): + (JSC::JIT::compileBinaryArithOp): + (JSC::JIT::compileBinaryArithOpSlowCase): + (JSC::JIT::emit_op_add): + (JSC::JIT::emitSlow_op_add): + (JSC::JIT::emit_op_mul): + (JSC::JIT::emitSlow_op_mul): + * jit/JITPropertyAccess.cpp: + (JSC::JIT::privateCompilePutByIdTransition): + +2009-05-15 Francisco Tolmasky + + BUG 25467: JavaScript debugger should use function.displayName as the function's name in the call stack + + + Reviewed by Adam Roben. + + * JavaScriptCore.exp: Added calculatedFunctionName + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: Added calculatedFunctionName + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Added calculatedFunctionName + * debugger/DebuggerCallFrame.cpp: Added calculatedFunctionName to match existing one in ProfileNode. + (JSC::DebuggerCallFrame::calculatedFunctionName): + * debugger/DebuggerCallFrame.h: Added calculatedFunctionName to match existing one in ProfileNode. + +2009-05-14 Gavin Barraclough + + Build fix, not reviewed. + + Quick fixes for JIT builds with OPTIMIZE flags disabled. + + * jit/JITCall.cpp: + (JSC::JIT::compileOpCall): + (JSC::JIT::compileOpCallSlowCase): + * jit/JITPropertyAccess.cpp: + (JSC::JIT::compilePutByIdHotPath): + +2009-05-14 Steve Falkenburg + + Back out incorrect Windows build fix + + * JavaScriptCore.vcproj/JavaScriptCore.make: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + +2009-05-14 Steve Falkenburg + + Windows build fix + + * JavaScriptCore.vcproj/JavaScriptCore.make: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + +2009-05-14 Adam Roben + + Windows jsc build fix + + r43648 modified jsc.vcproj's post-build event not to try to copy files + that aren't present. Then r43661 mistakenly un-did that modification. + This patch restores the modification from r43648, but puts the code in + jscCommon.vsprops (where it should have been added in r43648). + + * JavaScriptCore.vcproj/jsc/jsc.vcproj: Restored empty + VCPostBuildEventTool tags. + * JavaScriptCore.vcproj/jsc/jscCommon.vsprops: Modified the post-build + event command line to match the one in jsc.vcproj from r43648. + +2009-05-14 Laszlo Gombos + + Reviewed by Darin Adler. + + https://bugs.webkit.org/show_bug.cgi?id=25325 + + Make sure pthread_self() is declared before it gets called in Collector.cpp + + * runtime/Collector.cpp: Include pthread.h in most Unix-like platforms + (not just for OPENBSD) + +2009-05-14 Mark Rowe + + Reviewed by Oliver Hunt. + + Fix . + Bug 25785: Segfault in mark when using JSObjectMakeConstructor + + * API/JSObjectRef.cpp: + (JSObjectMakeConstructor): OpaqueJSClass::prototype can return 0. We need to use the default object prototype when it does. + * API/tests/testapi.c: + (main): Add a test case. + * runtime/JSObject.h: + (JSC::JSObject::putDirect): Add a clearer assertion for a null value. The assertion on the next line does catch this, + but the cause of the failure is not clear from the assertion itself. + +2009-05-14 Mark Rowe + + Rubber-stamped by Darin Adler. + + When building with Xcode 3.1.3 should be using gcc 4.2 + + The meaning of XCODE_VERSION_ACTUAL is more sensible in newer versions of Xcode. + Update our logic to select the compiler version to use the more appropriate XCODE_VERSION_MINOR + if the version of Xcode supports it, and fall back to XCODE_VERSION_ACTUAL if not. + + * Configurations/Base.xcconfig: + +2009-05-14 Gavin Barraclough + + Reviewed by Geoff Garen. + + Checking register file bounds should be a ptr comparison (m_end is a Register*). + Also, the compare should be unsigned, pointers don'ts go negative. + + * jit/JIT.cpp: + (JSC::JIT::privateCompile): + +2009-05-13 Gavin Barraclough + + Reviewed by Oliver Hunt. + + Fix REGRESSION: page at Metroauto site crashes in cti_op_loop_if_less (25730) + + op_loop_if_less (imm < op) was loading op into regT1, but in the slow path spills regT0. + This leads to bad happen. + + * jit/JITOpcodes.cpp: + (JSC::JIT::emit_op_loop_if_less): + (JSC::JIT::emitSlow_op_loop_if_less): + +2009-05-13 Dmitry Titov + + Rubber-stamped by Mark Rowe. + + https://bugs.webkit.org/show_bug.cgi?id=25746 + Revert http://trac.webkit.org/changeset/43507 which caused crash in PPC nightlies with Safari 4. + + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: + * bytecode/SamplingTool.cpp: + (JSC::SamplingThread::start): + (JSC::SamplingThread::stop): + * bytecode/SamplingTool.h: + * wtf/CrossThreadRefCounted.h: + (WTF::CrossThreadRefCounted::CrossThreadRefCounted): + (WTF::::ref): + (WTF::::deref): + * wtf/Threading.h: + * wtf/ThreadingNone.cpp: + * wtf/ThreadingPthreads.cpp: + (WTF::threadMapMutex): + (WTF::initializeThreading): + (WTF::threadMap): + (WTF::identifierByPthreadHandle): + (WTF::establishIdentifierForPthreadHandle): + (WTF::pthreadHandleForIdentifier): + (WTF::clearPthreadHandleForIdentifier): + (WTF::createThreadInternal): + (WTF::waitForThreadCompletion): + (WTF::detachThread): + (WTF::currentThread): + * wtf/ThreadingWin.cpp: + (WTF::threadMapMutex): + (WTF::initializeThreading): + (WTF::threadMap): + (WTF::storeThreadHandleByIdentifier): + (WTF::threadHandleForIdentifier): + (WTF::clearThreadHandleForIdentifier): + (WTF::createThreadInternal): + (WTF::waitForThreadCompletion): + (WTF::detachThread): + (WTF::currentThread): + * wtf/gtk/ThreadingGtk.cpp: + (WTF::threadMapMutex): + (WTF::initializeThreading): + (WTF::threadMap): + (WTF::identifierByGthreadHandle): + (WTF::establishIdentifierForThread): + (WTF::threadForIdentifier): + (WTF::clearThreadForIdentifier): + (WTF::createThreadInternal): + (WTF::waitForThreadCompletion): + (WTF::currentThread): + * wtf/qt/ThreadingQt.cpp: + (WTF::threadMapMutex): + (WTF::threadMap): + (WTF::identifierByQthreadHandle): + (WTF::establishIdentifierForThread): + (WTF::clearThreadForIdentifier): + (WTF::threadForIdentifier): + (WTF::initializeThreading): + (WTF::createThreadInternal): + (WTF::waitForThreadCompletion): + (WTF::currentThread): + +2009-05-13 Darin Adler + + Revert the parser arena change. It was a slowdown, not a speedup. + Better luck next time (I'll break it up into pieces). + +2009-05-13 Darin Adler + + Tiger build fix. + + * parser/Grammar.y: Add back empty code blocks, needed by older + versions of bison on certain rules. + +2009-05-13 Steve Falkenburg + + Windows build fix. + + * JavaScriptCore.vcproj/jsc/jsc.vcproj: + +2009-05-13 Adam Roben + + Windows build fixes after r43642 + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: + Updated. + + * debugger/Debugger.cpp: + * runtime/ArrayConstructor.cpp: + * runtime/JSArray.cpp: + * runtime/RegExp.cpp: + * runtime/RegExpConstructor.cpp: + * runtime/RegExpPrototype.cpp: + * runtime/StringPrototype.cpp: + Added missing #includes. + +2009-05-13 Darin Adler + + Reviewed by Cameron Zwarich. + + Bug 25674: syntax tree nodes should use arena allocation + https://bugs.webkit.org/show_bug.cgi?id=25674 + + Step 3: Add some actual arena allocation. About 1% SunSpider speedup. + + * JavaScriptCore.exp: Updated. + + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::BytecodeGenerator): Updated since VarStack + contains const Identifier* now. + (JSC::BytecodeGenerator::emitPushNewScope): Updated to take a const + Identifier&. + * bytecompiler/BytecodeGenerator.h: Ditto + + * bytecompiler/SegmentedVector.h: Added isEmpty. + + * debugger/Debugger.cpp: + (JSC::Debugger::recompileAllJSFunctions): Moved this function here from + WebCore so WebCore doesn't need the details of FunctionBodyNode. + * debugger/Debugger.h: Ditto. + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::execute): Updated since VarStack contains const + Identifier* now. + + * jit/JITStubs.cpp: + (JSC::JITStubs::cti_vm_lazyLinkCall): Call isHostFunction on the body + rather than on the function object, since we can't easily have inlined + access to the FunctionBodyNode in JSFunction.h since WebCore needs + access to that header. + (JSC::JITStubs::cti_op_construct_JSConstruct): Ditto. + * profiler/Profiler.cpp: + (JSC::Profiler::createCallIdentifier): Ditto. + + * parser/Grammar.y: Use JSGlobalData* to pass the global data pointer + around whenever possible instead of using void*. Changed + SET_EXCEPTION_LOCATION from a macro to an inline function. Marked + the structure-creating functions inline. Changed the VarStack to use + identifier pointers instead of actual identifiers. This takes + advantage of the fact that all identifier pointers come from the + arena and avoids reference count churn. Changed Identifier* to + const Identifier* to make sure we don't modify any by accident. + Used identifiers for regular expression strings too, using the new + scanRegExp that has out parameters instead of the old one that relied + on side effects in the Lexer. Move the creation of numeric identifiers + out of this file and into the PropertyNode constructor. + + * parser/Lexer.cpp: + (JSC::Lexer::setCode): Pass in ParserArena, used for identifiers. + (JSC::Lexer::makeIdentifier): Changed return type to const Identifier* + and changed to call ParserArena. + (JSC::Lexer::scanRegExp): Added out arguments that are const Identifier* + as well as a prefix character argument so we can handle the /= case + without a string append. + (JSC::Lexer::skipRegExp): Added. Skips a regular expression without + allocating Identifier objects. + (JSC::Lexer::clear): Removed the code to manage m_identifiers, m_pattern, + and m_flags, and added code to set m_arena to 0. + * parser/Lexer.h: Updated for changes above. + + * parser/NodeConstructors.h: + (JSC::ParserArenaFreeable::operator new): Added. Calls allocateFreeable + on the arena. + (JSC::ParserArenaDeletable::operator new): Changed to call the + allocateDeletable function on the arena instead of deleteWithArena. + (JSC::RegExpNode::RegExpNode): Changed arguments to Identifier instead + of UString since these come from the parser which makes identifiers. + (JSC::PropertyNode::PropertyNode): Added new constructor that makes + numeric identifiers. Some day we might want to optimize this for + integers so it doesn't create a string for each one. + (JSC::ContinueNode::ContinueNode): Initialize m_ident to nullIdentifier + since it's now a const Identifier& so it can't be left uninitialized. + (JSC::BreakNode::BreakNode): Ditto. + (JSC::CaseClauseNode::CaseClauseNode): Updated to use SourceElements* + to keep track of the statements rather than a separate statement vector. + (JSC::BlockNode::BlockNode): Ditto. + (JSC::ForInNode::ForInNode): Initialize m_ident to nullIdentifier. + + * parser/Nodes.cpp: Moved the comment explaining emitBytecode in here. + It seemed strangely out of place in the header. + (JSC::ThrowableExpressionData::emitThrowError): Added an overload for + UString as well as Identifier. + (JSC::SourceElements::singleStatement): Added. + (JSC::SourceElements::lastStatement): Added. + (JSC::RegExpNode::emitBytecode): Updated since the pattern and flags + are now Identifier instead of UString. Also changed the throwError code + to use the substitution mechanism instead of doing a string append. + (JSC::SourceElements::emitBytecode): Added. Replaces the old + statementListEmitCode function, since we now keep the SourceElements + objects around. + (JSC::BlockNode::lastStatement): Added. + (JSC::BlockNode::emitBytecode): Changed to use emitBytecode instead of + statementListEmitCode. + (JSC::CaseClauseNode::emitBytecode): Added. + (JSC::CaseBlockNode::emitBytecodeForBlock): Changed to use emitBytecode + instead of statementListEmitCode. + (JSC::ScopeNodeData::ScopeNodeData): Changed to store the + SourceElements* instead of using releaseContentsIntoVector. + (JSC::ScopeNode::emitStatementsBytecode): Added. + (JSC::ScopeNode::singleStatement): Added. + (JSC::ProgramNode::emitBytecode): Call emitStatementsBytecode instead + of statementListEmitCode. + (JSC::EvalNode::emitBytecode): Ditto. + (JSC::EvalNode::generateBytecode): Removed code to clear the children + vector. This optimization is no longer possible since everything is in + a single arena. + (JSC::FunctionBodyNode::emitBytecode): Call emitStatementsBytecode + insetad of statementListEmitCode and check for the return node using + the new functions. + + * parser/Nodes.h: Changed VarStack to store const Identifier* instead + of Identifier and rely on the arena to control lifetime. Added a new + ParserArenaFreeable class. Made ParserArenaDeletable inherit from + FastAllocBase instead of having its own operator new. Base the Node + class on ParserArenaFreeable. Changed the various Node classes + to use const Identifier& instead of Identifier to avoid the need to + call their destructors and allow them to function as "freeable" in the + arena. Removed extraneous JSC_FAST_CALL on definitions of inline functions. + Changed ElementNode, PropertyNode, ArgumentsNode, ParameterNode, + CaseClauseNode, ClauseListNode, and CaseBlockNode to use ParserArenaFreeable + as a base class since they do not descend from Node. Eliminated the + StatementVector type and instead have various classes use SourceElements* + instead of StatementVector. This prevents those classes from having th + use ParserArenaDeletable to make sure the vector destructor is called. + + * parser/Parser.cpp: + (JSC::Parser::parse): Pass the arena to the lexer. + + * parser/Parser.h: Added an include of ParserArena.h, which is no longer + included by Nodes.h. + + * parser/ParserArena.cpp: + (JSC::ParserArena::ParserArena): Added. Initializes the new members, + m_freeableMemory, m_freeablePoolEnd, and m_identifiers. + (JSC::ParserArena::freeablePool): Added. Computes the pool pointer, + since we store only the current pointer and the end of pool pointer. + (JSC::ParserArena::deallocateObjects): Added. Contains the common + memory-deallocation logic used by both the destructor and the + reset function. + (JSC::ParserArena::~ParserArena): Changed to call deallocateObjects. + (JSC::ParserArena::reset): Ditto. Also added code to zero out the + new structures, and switched to use clear() instead of shrink(0) since + we don't really reuse arenas. + (JSC::ParserArena::makeNumericIdentifier): Added. + (JSC::ParserArena::allocateFreeablePool): Added. Used when the pool + is empty. + (JSC::ParserArena::isEmpty): Added. No longer inline, which is fine + since this is used only for assertions at the moment. + + * parser/ParserArena.h: Added an actual arena of "freeable" objects, + ones that don't need destructors to be called. Also added the segmented + vector of identifiers that used to be in the Lexer. + + * runtime/FunctionConstructor.cpp: + (JSC::extractFunctionBody): Use singleStatement function rather than + getting at a StatementVector. + + * runtime/FunctionPrototype.cpp: + (JSC::functionProtoFuncToString): Call isHostFunction on the body + rather than the function object. + + * runtime/JSFunction.cpp: + (JSC::JSFunction::JSFunction): Moved the structure version of this in + here from the header. It's not hot enough that it needs to be inlined. + (JSC::JSFunction::isHostFunction): Moved this in here from the header. + It's now a helper to be used only within the class. + (JSC::JSFunction::setBody): Moved this in here. It's not hot enough that + it needs to be inlined, and we want to be able to compile the header + without the definition of FunctionBodyNode. + + * runtime/JSFunction.h: Eliminated the include of "Nodes.h". This was + exposing too much JavaScriptCore dependency to WebCore. Because of this + change and some changes made to WebCore, we could now export a lot fewer + headers from JavaScriptCore, but I have not done that yet in this check-in. + Made a couple functions non-inline. Removes some isHostFunction() assertions. + + * wtf/FastAllocBase.h: Added the conventional using statements we use in + WTF so we can use identifiers from the WTF namespace without explicit + namespace qualification or namespace directive. This is the usual WTF style, + although it's unconventional in the C++ world. We use the namespace primarily + for link-time disambiguation, not compile-time. + + * wtf/FastMalloc.cpp: Fixed an incorrect comment. + +2009-05-13 Xan Lopez + + Unreviewed build fix: add JITStubCall.h to files list. + + * GNUmakefile.am: + +2009-05-13 Ariya Hidayat + + Unreviewed build fix, as suggested by Yael Aharon . + + * wtf/qt/ThreadingQt.cpp: + (WTF::waitForThreadCompletion): renamed IsValid to isValid. + +2009-05-13 Jan Michael Alonzo + + Revert r43562 - [Gtk] WTF_USE_JSC is already defined in + WebCore/config.h. + + * wtf/Platform.h: + +2009-05-12 Gavin Barraclough + + Reviewed by Oliver Hunt. + + Add SamplingCounter tool to provide a simple mechanism for counting events in JSC + (enabled using ENABLE(SAMPLING_COUNTERS)). To count events within a single function + use the class 'SamplingCounter', where the counter may be incremented from multiple + functions 'GlobalSamplingCounter' may be convenient; all other counters (stack or + heap allocated, rather than statically declared) should use the DeletableSamplingCounter. + Further description of these classes is provided alongside their definition in + SamplingTool.h. + + Counters may be incremented from c++ by calling the 'count()' method on the counter, + or may be incremented by JIT code by using the 'emitCount()' method within the JIT. + + This patch also fixes CODEBLOCK_SAMPLING, which was missing a null pointer check. + + * JavaScriptCore.exp: + * assembler/MacroAssemblerX86.h: + (JSC::MacroAssemblerX86::addWithCarry32): + (JSC::MacroAssemblerX86::and32): + (JSC::MacroAssemblerX86::or32): + * assembler/MacroAssemblerX86Common.h: + (JSC::MacroAssemblerX86Common::and32): + (JSC::MacroAssemblerX86Common::or32): + * assembler/MacroAssemblerX86_64.h: + (JSC::MacroAssemblerX86_64::and32): + (JSC::MacroAssemblerX86_64::or32): + (JSC::MacroAssemblerX86_64::addPtr): + * assembler/X86Assembler.h: + (JSC::X86Assembler::): + (JSC::X86Assembler::adcl_im): + (JSC::X86Assembler::addq_im): + (JSC::X86Assembler::andl_im): + (JSC::X86Assembler::orl_im): + * bytecode/SamplingTool.cpp: + (JSC::AbstractSamplingCounter::dump): + * bytecode/SamplingTool.h: + (JSC::AbstractSamplingCounter::count): + (JSC::GlobalSamplingCounter::name): + (JSC::SamplingCounter::SamplingCounter): + * jit/JIT.h: + * jit/JITCall.cpp: + (JSC::): + * jit/JITInlineMethods.h: + (JSC::JIT::setSamplingFlag): + (JSC::JIT::clearSamplingFlag): + (JSC::JIT::emitCount): + * jsc.cpp: + (runWithScripts): + * parser/Nodes.cpp: + (JSC::ScopeNode::ScopeNode): + * wtf/Platform.h: + +2009-05-13 Steve Falkenburg + + Windows build fix. + + * JavaScriptCore.vcproj/JavaScriptCore.make: + +2009-05-12 Steve Falkenburg + + Windows build fix. + + * JavaScriptCore.vcproj/JavaScriptCore.make: + +2009-05-12 Oliver Hunt + + Reviewed by Gavin Barraclough. + + Crash occurs at JSC::Interpreter::execute() when loading http://www.sears.com + + We created the arguments objects before an op_push_scope but not + before op_push_new_scope, this meant a null arguments object could + be resolved inside catch blocks. + + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::emitPushNewScope): + +2009-05-12 Oliver Hunt + + Reviewed by Gavin Barraclough. + + Crash occurs at JSC::JSActivation::mark() when loading http://www.monster.com; http://www.cnet.com + Crash loading www.google.dk/ig (and other igoogle's as well) + + Following on from the lazy arguments creation patch, it's now + possible for an activation to to have a null register in the callframe + so we can't just blindly mark the local registers in an activation, + and must null check first instead. + + * API/tests/testapi.c: + (functionGC): + * API/tests/testapi.js: + (bludgeonArguments.return.g): + (bludgeonArguments): + * runtime/JSActivation.cpp: + (JSC::JSActivation::mark): + +2009-05-12 Gavin Barraclough + + Rubber stamped by Geoff Garen. + + WTF_USE_CTI_REPATCH_PIC is no longer used, remove. + + * jit/JIT.h: + * jit/JITStubCall.h: + +2009-05-12 Gavin Barraclough + + Reviewed by Maciej Stachowiak. + + We've run into some problems where changing the size of the class JIT leads to + performance fluctuations. Try forcing alignment in an attempt to stabalize this. + + * jit/JIT.h: + +2009-05-12 Kevin Ollivier + + wx build fix. Add ParserArena.cpp to the build. + + * JavaScriptCoreSources.bkl: + +2009-05-12 Oliver Hunt + + Reviewed by Geoff Garen. + + Unsigned underflow on 64bit cannot be treated as a negative number + + This code included some placeswhere we deliberately create negative offsets + from unsigned values, on 32bit this is "safe", but in 64bit builds much + badness occurs. Solution is to use signed types as nature intended. + + * jit/JITStubs.cpp: + (JSC::JITStubs::cti_op_load_varargs): + +2009-05-12 Jan Michael Alonzo + + Reviewed by Holger Freyther. + + [Gtk] Various autotools build refactoring and fixes + https://bugs.webkit.org/show_bug.cgi?id=25286 + + Define WTF_USE_JSC for the Gtk port. + + * wtf/Platform.h: + +2009-05-12 Maciej Stachowiak + + Reviewed by Oliver Hunt. + + - allow all of strictEqual to be inlined into cti_op_stricteq once again + + We had this optimization once but accidentally lost it at some point. + + * runtime/Operations.h: + (JSC::JSValue::strictEqualSlowCaseInline): + (JSC::JSValue::strictEqual): + +2009-05-12 Gavin Barraclough + + Reviewed by Oliver Hunt. + + instanceof should throw if the constructor being tested does not implement + 'HasInstance" (i.e. is a function). Instead we were returning false. + + * interpreter/Interpreter.cpp: + (JSC::isInvalidParamForIn): + (JSC::isInvalidParamForInstanceOf): + (JSC::Interpreter::privateExecute): + * jit/JITStubs.cpp: + (JSC::JITStubs::cti_op_instanceof): + * tests/mozilla/ecma_2/instanceof/instanceof-003.js: + Fix broken test case. + * tests/mozilla/ecma_2/instanceof/regress-7635.js: + Remove broken test case (was an exact duplicate of a test in instanceof-003.js). + +2009-05-12 Oliver Hunt + + Reviewed by Gavin Barraclough. + + Improve function call forwarding performance + + Make creation of the Arguments object occur lazily, so it + is not necessarily created for every function that references + it. Then add logic to Function.apply to allow it to avoid + allocating the Arguments object at all. Helps a lot with + the function forwarding/binding logic in jQuery, Prototype, + and numerous other JS libraries. + + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::dump): + * bytecode/Opcode.h: + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::BytecodeGenerator): + (JSC::BytecodeGenerator::registerFor): + (JSC::BytecodeGenerator::willResolveToArguments): + (JSC::BytecodeGenerator::uncheckedRegisterForArguments): + (JSC::BytecodeGenerator::createArgumentsIfNecessary): + (JSC::BytecodeGenerator::emitCallEval): + (JSC::BytecodeGenerator::emitPushScope): + * bytecompiler/BytecodeGenerator.h: + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): + (JSC::Interpreter::retrieveArguments): + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + * jit/JIT.h: + * jit/JITOpcodes.cpp: + (JSC::JIT::emit_op_create_arguments): + (JSC::JIT::emit_op_init_arguments): + * jit/JITStubs.cpp: + (JSC::JITStubs::cti_op_tear_off_arguments): + (JSC::JITStubs::cti_op_load_varargs): + * parser/Nodes.cpp: + (JSC::ApplyFunctionCallDotNode::emitBytecode): + +2009-05-11 Gavin Barraclough + + Reviewed by Oliver Hunt. + + Enable use of SamplingFlags directly from JIT code. + + * bytecode/SamplingTool.h: + * jit/JIT.h: + (JSC::JIT::sampleCodeBlock): + (JSC::JIT::sampleInstruction): + * jit/JITInlineMethods.h: + (JSC::JIT::setSamplingFlag): + (JSC::JIT::clearSamplingFlag): + +2009-05-11 Gavin Barraclough + + Reviewed by Cameron Zwarich. + + Implement JIT generation for instanceof for non-objects (always returns false). + Also fixes the sequencing of the prototype and value isObject checks, to no match the spec. + + 0.5% progression on v8 tests overall, due to 3.5% on early-boyer. + + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + (JSC::JIT::privateCompileSlowCases): + * runtime/JSObject.cpp: + (JSC::JSObject::hasInstance): + * runtime/TypeInfo.h: + (JSC::TypeInfo::TypeInfo): + +2009-05-11 Geoffrey Garen + + Reviewed by Sam Weinig. + + A little more JIT refactoring. + + Rearranged code to more clearly indicate what's conditionally compiled + and why. Now, all shared code is at the top of our JIT files, and all + #if'd code is at the bottom. #if'd code is delineated by large comments. + + Moved functions that relate to the JIT but don't explicitly do codegen + into JIT.cpp. Refactored SSE2 check to store its result as a data member + in the JIT. + + * jit/JIT.cpp: + (JSC::isSSE2Present): + (JSC::JIT::JIT): + (JSC::JIT::unlinkCall): + (JSC::JIT::linkCall): + * jit/JIT.h: + (JSC::JIT::isSSE2Present): + * jit/JITArithmetic.cpp: + (JSC::JIT::emit_op_mod): + (JSC::JIT::emitSlow_op_mod): + * jit/JITCall.cpp: + (JSC::JIT::compileOpCallVarargs): + (JSC::JIT::compileOpCallVarargsSlowCase): + +2009-05-11 Holger Hans Peter Freyther + + Build fix. + + * JavaScriptCore.pri: Build the new JITOpcodes.cpp + +2009-05-11 Sam Weinig + + Reviewed by Geoffrey Garen. + + More re-factoring of JIT code generation. Use a macro to + forward the main switch-statement cases to the helper functions. + + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + (JSC::JIT::privateCompileSlowCases): + +2009-05-11 Sam Weinig + + Reviewed by Geoffrey Garen. + + More re-factoring of JIT code generation to move opcode generation + to helper functions outside the main switch-statement and gave those + helper functions standardized names. This patch covers the remaining + slow cases. + + * jit/JIT.cpp: + * jit/JIT.h: + * jit/JITOpcodes.cpp: + +2009-05-11 Geoffrey Garen + + Build fix. + + * GNUmakefile.am: Added JITOpcodes.cpp and JITStubCall.h to the project. + +2009-05-11 Geoffrey Garen + + Build fix. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Added + JITOpcodes.cpp and JITStubCall.h to the project. + +2009-05-11 Geoffrey Garen + + Reviewed by Sam Weinig. + + Some JIT refactoring. + + Moved JITStubCall* into its own header. + + Modified JITStubCall to ASSERT that its return value is handled correctly. + Also, replaced function template with explicit instantiations to resolve + some confusion. + + Replaced all uses of emit{Get,Put}CTIArgument with explicit peeks, pokes, + and calls to killLastResultRegister(). + + * JavaScriptCore.xcodeproj/project.pbxproj: + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + (JSC::JIT::privateCompile): + * jit/JIT.h: + * jit/JITArithmetic.cpp: + * jit/JITCall.cpp: + * jit/JITInlineMethods.h: + (JSC::JIT::restoreArgumentReference): + * jit/JITPropertyAccess.cpp: + * jit/JITStubCall.h: Copied from jit/JIT.h. + (JSC::JITStubCall::JITStubCall): + (JSC::JITStubCall::addArgument): + (JSC::JITStubCall::call): + (JSC::JITStubCall::): + +2009-05-11 Sam Weinig + + Reviewed by Geoffrey Garen. + + Start re-factoring JIT code generation to move opcode generation + to helper functions outside the main switch-statement and gave those + helper functions standardized names. This patch only covers the main + pass and all the arithmetic opcodes in the slow path. + + * JavaScriptCore.xcodeproj/project.pbxproj: + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + (JSC::JIT::privateCompileSlowCases): + * jit/JIT.h: + * jit/JITArithmetic.cpp: + * jit/JITOpcodes.cpp: Copied from jit/JIT.cpp. + * jit/JITPropertyAccess.cpp: + +2009-05-11 Steve Falkenburg + + Re-add experimental PGO configs. + + Reviewed by Adam Roben. + + * JavaScriptCore.vcproj/JavaScriptCore.make: + * JavaScriptCore.vcproj/JavaScriptCore.sln: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.vcproj/JavaScriptCoreSubmit.sln: + * JavaScriptCore.vcproj/jsc/jsc.vcproj: + +2009-05-11 Sam Weinig + + Reviewed by Geoffrey "1" Garen. + + Rip out the !USE(CTI_REPATCH_PIC) code. It was untested and unused. + + * jit/JIT.h: + (JSC::JIT::compileGetByIdChainList): + (JSC::JIT::compileGetByIdChain): + (JSC::JIT::compileCTIMachineTrampolines): + * jit/JITPropertyAccess.cpp: + (JSC::JIT::privateCompileGetByIdProto): + (JSC::JIT::privateCompileGetByIdChainList): + (JSC::JIT::privateCompileGetByIdChain): + * jit/JITStubs.cpp: + (JSC::JITStubs::tryCachePutByID): + (JSC::JITStubs::tryCacheGetByID): + +2009-05-11 Dmitry Titov + + GTK build fix - the deprecated waitForThreadCompletion is not needed on GTK. + + * wtf/ThreadingPthreads.cpp: used #ifdef PLATFORM(DARWIN) around waitForThreadCompletion(). + +2009-05-11 Adam Roben + + Build fix for newer versions of GCC + + * wtf/ThreadingPthreads.cpp: Added a declaration of + waitForThreadCompletion before its definition to silence a warning. + +2009-05-11 Dmitry Titov + + Reviewed by Alexey Proskuryakov and Adam Roben. + + https://bugs.webkit.org/show_bug.cgi?id=25348 + Change WTF::ThreadIdentifier to be an actual (but wrapped) thread id, remove ThreadMap. + + * wtf/Threading.h: + (WTF::ThreadIdentifier::ThreadIdentifier): + (WTF::ThreadIdentifier::isValid): + (WTF::ThreadIdentifier::invalidate): + (WTF::ThreadIdentifier::platformId): + ThreadIdentifier is now a class, containing a PlatformThreadIdentifier and + methods that are used across the code on thread ids: construction, comparisons, + check for 'valid' state etc. '0' is used as invalid id, which happens to just work + with all platform-specific thread id implementations. + + All the following files repeatedly reflect the new ThreadIdentifier for each platform. + We remove ThreadMap and threadMapMutex from all of them, remove the functions that + populated/searched/cleared the map and add platform-specific comparison operators + for ThreadIdentifier. + + There are specific temporary workarounds for Safari 4 beta on OSX and Win32 since the + public build uses WTF threading functions with old type of ThreadingIdentifier. + The next time Safari 4 is rebuilt, it will 'automatically' pick up the new type and new + functions so the deprecated ones can be removed. + + * wtf/gtk/ThreadingGtk.cpp: + (WTF::ThreadIdentifier::operator==): + (WTF::ThreadIdentifier::operator!=): + (WTF::initializeThreading): + (WTF::createThreadInternal): + (WTF::waitForThreadCompletion): + (WTF::currentThread): + + * wtf/ThreadingNone.cpp: + (WTF::ThreadIdentifier::operator==): + (WTF::ThreadIdentifier::operator!=): + + * wtf/ThreadingPthreads.cpp: + (WTF::ThreadIdentifier::operator==): + (WTF::ThreadIdentifier::operator!=): + (WTF::initializeThreading): + (WTF::createThreadInternal): + (WTF::waitForThreadCompletion): + (WTF::detachThread): + (WTF::currentThread): + (WTF::waitForThreadCompletion): This is a workaround for Safari 4 beta on Mac. + Safari 4 is linked against old definition of ThreadIdentifier so it treats it as uint32_t. + This 'old' variant of waitForThreadCompletion takes uint32_t and has the old decorated name, so Safari can + load it from JavaScriptCore library. The other functions (CurrentThread() etc) happen to match their previous + decorated names and, while they return pthread_t now, it is a pointer which round-trips through a uint32_t. + This function will be removed as soon as Safari 4 will release next public build. + + * wtf/qt/ThreadingQt.cpp: + (WTF::ThreadIdentifier::operator==): + (WTF::ThreadIdentifier::operator!=): + (WTF::initializeThreading): + (WTF::createThreadInternal): + (WTF::waitForThreadCompletion): + (WTF::currentThread): + + * wtf/ThreadingWin.cpp: + (WTF::ThreadIdentifier::operator==): + (WTF::ThreadIdentifier::operator!=): + (WTF::initializeThreading): + (WTF::createThreadInternal): All the platforms (except Windows) used a sequential + counter as a thread ID and mapped it into platform ID. Windows was using native thread + id and mapped it into thread handle. Since we can always obtain a thread handle + by thread id, createThread now closes the handle. + (WTF::waitForThreadCompletion): obtains another one using OpenThread(id) API. If can not obtain a handle, + it means the thread already exited. + (WTF::detachThread): + (WTF::currentThread): + (WTF::detachThreadDeprecated): old function, renamed (for Win Safari 4 beta which uses it for now). + (WTF::waitForThreadCompletionDeprecated): same. + (WTF::currentThreadDeprecated): same. + (WTF::createThreadDeprecated): same. + + * bytecode/SamplingTool.h: + * bytecode/SamplingTool.cpp: Use DEFINE_STATIC_LOCAL for a static ThreadIdentifier variable, to avoid static constructor. + + * JavaScriptCore.exp: export lists - updated decorated names of the WTF threading functions + since they now take a different type as a parameter. + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: ditto for Windows, plus added "deprecated" functions + that take old parameter type - turns out public beta of Safari 4 uses those, so they need to be kept along for a while. + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: ditto. + +2009-05-11 Darin Adler + + Reviewed by Oliver Hunt. + + Bug 25560: REGRESSION (r34821): "string value".__proto__ gets the wrong object. + https://bugs.webkit.org/show_bug.cgi?id=25560 + rdar://problem/6861069 + + I missed this case back a year ago when I sped up handling + of JavaScript wrappers. Easy to fix. + + * runtime/JSObject.h: + (JSC::JSValue::get): Return the prototype itself if the property name + is __proto__. + * runtime/JSString.cpp: + (JSC::JSString::getOwnPropertySlot): Ditto. + +2009-05-09 Oliver Hunt + + Reviewed by Maciej Stachowiak. + + Rename emitGetFromCallFrameHeader to emitGetFromCallFrameHeaderPtr + + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + (JSC::JIT::privateCompileCTIMachineTrampolines): + * jit/JIT.h: + * jit/JITInlineMethods.h: + (JSC::JIT::emitGetFromCallFrameHeaderPtr): + (JSC::JIT::emitGetFromCallFrameHeader32): + +2009-05-11 Holger Hans Peter Freyther + + Unreviewed build fix. Build ParserAreana.cpp for Qt + + * JavaScriptCore.pri: + +2009-05-11 Norbert Leser + + Reviewed by Darin Adler. + + https://bugs.webkit.org/show_bug.cgi?id=24536 + + Symbian compilers cannot resolve WTF::PassRefPtr + unless Profile.h is included. + + * profiler/ProfileGenerator.h: + +2009-05-11 Csaba Osztrogonac + + Reviewed by Holger Freyther. + + https://bugs.webkit.org/show_bug.cgi?id=24284 + + * JavaScriptCore.pri: coding style modified + * jsc.pro: duplicated values removed from INCLUDEPATH, DEFINES + +2009-05-11 Gustavo Noronha Silva + + Reviewed by NOBODY (build fix). + + Also add ParserArena, in addition to AllInOne, for release builds, + since adding it to AllInOne breaks Mac. + + * GNUmakefile.am: + +2009-05-11 Gustavo Noronha Silva + + Unreviewed build fix. Adding ParserArena to the autotools build. + + * GNUmakefile.am: + +2009-05-11 Adam Roben + + More Windows build fixes after r43479 + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: + Export ParserArena::reset. + +2009-05-11 Adam Roben + + Windows build fixes after r43479 + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Added + ParserArena to the project. + + * parser/NodeConstructors.h: Added a missing include. + (JSC::ParserArenaDeletable::operator new): Marked these as inline. + +2009-05-10 Maciej Stachowiak + + Reviewed by Geoff Garen. + + - fixed REGRESSION(r43432): Many JavaScriptCore tests crash in 64-bit + https://bugs.webkit.org/show_bug.cgi?id=25680 + + Accound for the 64-bit instruction prefix when rewriting mov to lea on 64-bit. + + * jit/JIT.h: + * jit/JITPropertyAccess.cpp: + (JSC::JIT::patchGetByIdSelf): + (JSC::JIT::patchPutByIdReplace): + +2009-05-10 Darin Adler + + Reviewed by Cameron Zwarich. + + Bug 25674: syntax tree nodes should use arena allocation + https://bugs.webkit.org/show_bug.cgi?id=25674 + + Part two: Remove reference counting from most nodes. + + * JavaScriptCore.exp: Updated. + + * JavaScriptCore.xcodeproj/project.pbxproj: Added ParserArena.h and .cpp. + + * parser/Grammar.y: Replaced uses of ParserRefCountedData with uses of + ParserArenaData. Took out now-nonfunctional code that tries to manually + release declaration list. Changed the new calls that create FuncDeclNode + and FuncExprNode so that they use the proper version of operator new for + the reference-counted idiom, not the deletion idiom. + + * parser/NodeConstructors.h: + (JSC::ParserArenaDeletable::operator new): Added. + (JSC::ParserArenaRefCounted::ParserArenaRefCounted): Added. + (JSC::Node::Node): Removed ParserRefCounted initializer. + (JSC::ElementNode::ElementNode): Ditto. + (JSC::PropertyNode::PropertyNode): Ditto. + (JSC::ArgumentsNode::ArgumentsNode): Ditto. + (JSC::SourceElements::SourceElements): Ditto. + (JSC::ParameterNode::ParameterNode): Ditto. + (JSC::FuncExprNode::FuncExprNode): Added ParserArenaRefCounted initializer. + (JSC::FuncDeclNode::FuncDeclNode): Ditto. + (JSC::CaseClauseNode::CaseClauseNode): Removed ParserRefCounted initializer. + (JSC::ClauseListNode::ClauseListNode): Ditto. + (JSC::CaseBlockNode::CaseBlockNode): Ditto. + + * parser/NodeInfo.h: Replaced uses of ParserRefCountedData with uses of + ParserArenaData. + + * parser/Nodes.cpp: + (JSC::ScopeNode::ScopeNode): Added ParserArenaRefCounted initializer. + (JSC::ProgramNode::create): Use the proper version of operator new for + the reference-counted idiom, not the deletion idiom. Use the arena + contains function instead of the vecctor find function. + (JSC::EvalNode::create): Use the proper version of operator new for + the reference-counted idiom, not the deletion idiom. Use the arena + reset function instead of the vector shrink function. + (JSC::FunctionBodyNode::createNativeThunk): Use the proper version + of operator new for the reference-counted idiom, not the deletion idiom. + (JSC::FunctionBodyNode::create): More of the same. + + * parser/Nodes.h: Added ParserArenaDeletable and ParserArenaRefCounted + to replace ParserRefCounted. Fixed inheritance so only the classes that + need reference counting inherit from ParserArenaRefCounted. + + * parser/Parser.cpp: + (JSC::Parser::parse): Set m_sourceElements to 0 since it now starts + uninitialized. Just set it to 0 again in the failure case, since it's + now just a raw pointer, not an owning one. + (JSC::Parser::reparseInPlace): Removed now-unneeded get() function. + (JSC::Parser::didFinishParsing): Replaced uses of ParserRefCountedData + with uses of ParserArenaData. + + * parser/Parser.h: Less RefPtr, more arena. + + * parser/ParserArena.cpp: Added. + * parser/ParserArena.h: Added. + + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::~JSGlobalData): Removed arena-related code, since it's + now in the Parser. + (JSC::JSGlobalData::createLeaked): Removed unneeded #ifndef. + (JSC::JSGlobalData::createNativeThunk): Tweaked #if a bit. + + * runtime/JSGlobalData.h: Removed parserArena, which is now in Parser. + + * wtf/RefCounted.h: Added deletionHasBegun function, for use in + assertions to catch deletion not done by the deref function. + +2009-05-10 David Kilzer + + Part 2: Try to fix the Windows build by adding a symbol which is really just a re-mangling of a changed method signature + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: + +2009-05-10 David Kilzer + + Try to fix the Windows build by removing an unknown symbol + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: + +2009-05-10 David Kilzer + + Touch Nodes.cpp to try to fix Windows build + + * parser/Nodes.cpp: Removed whitespace. + +2009-05-10 Darin Adler + + Reviewed by Maciej Stachowiak. + + Quick fix for failures seen on buildbot. Maciej plans a better fix later. + + * wtf/dtoa.cpp: Change the hardcoded number of 32-bit words in a BigInt + from 32 to 64. Parsing "1e500", for example, requires more than 32 words. + +2009-05-10 Darin Adler + + Reviewed by Sam Weinig. + + Bug 25674: syntax tree nodes should use arena allocation + Part one: Change lifetimes so we won't have to use reference + counting so much, but don't eliminate the reference counts + entirely yet. + + * JavaScriptCore.exp: Updated. + + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::BytecodeGenerator): Update for use of raw pointers + instead of RefPtr. + (JSC::BytecodeGenerator::emitCall): Ditto. + (JSC::BytecodeGenerator::emitConstruct): Ditto. + + * parser/Grammar.y: Update node creating code to use new (JSGlobalData*) + instead of the plain new. At the moment this is just a hook for future + arena allocation; it's inline and JSGlobalData* is not used. + + * parser/NodeConstructors.h: Updated for name change of parserObjects to + parserArena. Also added explicit initialization for raw pointers that used + to be RefPtr. Also removed some uses of get() that aren't needed now that + the pointers are raw pointers. Also eliminated m_parameter from FuncExprNode + and FuncDeclNode. Also changed node-creating code to use new (JSGlobalData*) + as above. + + * parser/Nodes.cpp: Eliminated NodeReleaser and all use of it. + (JSC::ParserRefCounted::ParserRefCounted): Updated for name change of + parserObjects to parserArena. + (JSC::SourceElements::append): Use raw pointers. + (JSC::ArrayNode::emitBytecode): Ditto. + (JSC::ArrayNode::isSimpleArray): Ditto. + (JSC::ArrayNode::toArgumentList): Ditto. + (JSC::ObjectLiteralNode::emitBytecode): Ditto. + (JSC::PropertyListNode::emitBytecode): Ditto. + (JSC::BracketAccessorNode::emitBytecode): Ditto. + (JSC::DotAccessorNode::emitBytecode): Ditto. + (JSC::ArgumentListNode::emitBytecode): Ditto. + (JSC::NewExprNode::emitBytecode): Ditto. + (JSC::EvalFunctionCallNode::emitBytecode): Ditto. + (JSC::FunctionCallValueNode::emitBytecode): Ditto. + (JSC::FunctionCallResolveNode::emitBytecode): Ditto. + (JSC::FunctionCallBracketNode::emitBytecode): Ditto. + (JSC::FunctionCallDotNode::emitBytecode): Ditto. + (JSC::CallFunctionCallDotNode::emitBytecode): Ditto. + (JSC::ApplyFunctionCallDotNode::emitBytecode): Ditto. + (JSC::PostfixBracketNode::emitBytecode): Ditto. + (JSC::PostfixDotNode::emitBytecode): Ditto. + (JSC::DeleteBracketNode::emitBytecode): Ditto. + (JSC::DeleteDotNode::emitBytecode): Ditto. + (JSC::DeleteValueNode::emitBytecode): Ditto. + (JSC::VoidNode::emitBytecode): Ditto. + (JSC::TypeOfValueNode::emitBytecode): Ditto. + (JSC::PrefixBracketNode::emitBytecode): Ditto. + (JSC::PrefixDotNode::emitBytecode): Ditto. + (JSC::UnaryOpNode::emitBytecode): Ditto. + (JSC::BinaryOpNode::emitStrcat): Ditto. + (JSC::BinaryOpNode::emitBytecode): Ditto. + (JSC::EqualNode::emitBytecode): Ditto. + (JSC::StrictEqualNode::emitBytecode): Ditto. + (JSC::ReverseBinaryOpNode::emitBytecode): Ditto. + (JSC::ThrowableBinaryOpNode::emitBytecode): Ditto. + (JSC::InstanceOfNode::emitBytecode): Ditto. + (JSC::LogicalOpNode::emitBytecode): Ditto. + (JSC::ConditionalNode::emitBytecode): Ditto. + (JSC::ReadModifyResolveNode::emitBytecode): Ditto. + (JSC::AssignResolveNode::emitBytecode): Ditto. + (JSC::AssignDotNode::emitBytecode): Ditto. + (JSC::ReadModifyDotNode::emitBytecode): Ditto. + (JSC::AssignBracketNode::emitBytecode): Ditto. + (JSC::ReadModifyBracketNode::emitBytecode): Ditto. + (JSC::CommaNode::emitBytecode): Ditto. + (JSC::ConstDeclNode::emitCodeSingle): Ditto. + (JSC::ConstDeclNode::emitBytecode): Ditto. + (JSC::ConstStatementNode::emitBytecode): Ditto. + (JSC::statementListEmitCode): Ditto. + (JSC::BlockNode::emitBytecode): Ditto. + (JSC::ExprStatementNode::emitBytecode): Ditto. + (JSC::VarStatementNode::emitBytecode): Ditto. + (JSC::IfNode::emitBytecode): Ditto. + (JSC::IfElseNode::emitBytecode): Ditto. + (JSC::DoWhileNode::emitBytecode): Ditto. + (JSC::WhileNode::emitBytecode): Ditto. + (JSC::ForNode::emitBytecode): Ditto. + (JSC::ForInNode::emitBytecode): Ditto. + (JSC::ReturnNode::emitBytecode): Ditto. + (JSC::WithNode::emitBytecode): Ditto. + (JSC::CaseBlockNode::tryOptimizedSwitch): Ditto. + (JSC::CaseBlockNode::emitBytecodeForBlock): Ditto. + (JSC::SwitchNode::emitBytecode): Ditto. + (JSC::LabelNode::emitBytecode): Ditto. + (JSC::ThrowNode::emitBytecode): Ditto. + (JSC::TryNode::emitBytecode): Ditto. + (JSC::ScopeNodeData::ScopeNodeData): Use swap to transfer ownership + of the arena, varStack and functionStack. + (JSC::ScopeNode::ScopeNode): Pass in the arena when creating the + ScopeNodeData. + (JSC::ProgramNode::ProgramNode): Made this inline since it's used + in only one place. + (JSC::ProgramNode::create): Changed this to return a PassRefPtr since + we plan to have the scope nodes be outside the arena, so they will need + some kind of ownership transfer (maybe auto_ptr instead of PassRefPtr + in the future, though). Remove the node from the newly-created arena to + avoid a circular reference. Later we'll keep the node out of the arena + by using a different operator new, but for now it's the ParserRefCounted + constructor that puts the node into the arena, and there's no way to + bypass that. + (JSC::EvalNode::EvalNode): Ditto. + (JSC::EvalNode::create): Ditto. + (JSC::FunctionBodyNode::FunctionBodyNode): Ditto. + (JSC::FunctionBodyNode::createNativeThunk): Moved the code that + reseets the arena here instead of the caller. + (JSC::FunctionBodyNode::create): Same change as the other create + functions above. + (JSC::FunctionBodyNode::emitBytecode): Use raw pointers. + + * parser/Nodes.h: Removed NodeReleaser. Changed FunctionStack to + use raw pointers. Removed the releaseNodes function. Added an override + of operator new that takes a JSGlobalData* to prepare for future arena use. + Use raw pointers instead of RefPtr everywhere possible. + + * parser/Parser.cpp: + (JSC::Parser::reparseInPlace): Pass the arena in. + + * parser/Parser.h: + (JSC::Parser::parse): Updated for name change of parserObjects to parserArena. + (JSC::Parser::reparse): Ditto. + * runtime/FunctionConstructor.cpp: + (JSC::extractFunctionBody): Ditto. + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::~JSGlobalData): Ditto. + (JSC::JSGlobalData::createNativeThunk): Moved arena manipulation into the + FunctionBodyNode::createNativeThunk function. + + * runtime/JSGlobalData.h: Tweaked formatting and renamed parserObjects to + parserArena. + + * wtf/NotFound.h: Added the usual "using WTF" to this header to match the + rest of WTF. + +2009-05-10 Dimitri Glazkov + + Reviewed by Geoffrey Garen. + + https://bugs.webkit.org/show_bug.cgi?id=25670 + Remove no longer valid chunk of code from dtoa. + + * wtf/dtoa.cpp: + (WTF::dtoa): Removed invalid code. + +2009-05-10 Alexey Proskuryakov + + Reviewed by Geoff Garen. + + "Class const *" is the same as "const Class*", use the latter syntax consistently. + + See . + + * pcre/pcre_compile.cpp: + (calculateCompiledPatternLength): + * runtime/JSObject.h: + (JSC::JSObject::offsetForLocation): + (JSC::JSObject::locationForOffset): + +2009-05-10 Maciej Stachowiak + + Reviewed by Alexey Proskuryakov. + + - speedup dtoa/strtod + + Added a bunch of inlining, and replaced malloc with stack allocation. + + 0.5% SunSpider speedup (7% on string-tagcloud). + + * runtime/NumberPrototype.cpp: + (JSC::integerPartNoExp): + (JSC::numberProtoFuncToExponential): + * runtime/UString.cpp: + (JSC::concatenate): + (JSC::UString::from): + * wtf/dtoa.cpp: + (WTF::BigInt::BigInt): + (WTF::BigInt::operator=): + (WTF::Balloc): + (WTF::Bfree): + (WTF::multadd): + (WTF::s2b): + (WTF::i2b): + (WTF::mult): + (WTF::pow5mult): + (WTF::lshift): + (WTF::cmp): + (WTF::diff): + (WTF::b2d): + (WTF::d2b): + (WTF::ratio): + (WTF::strtod): + (WTF::quorem): + (WTF::freedtoa): + (WTF::dtoa): + * wtf/dtoa.h: + +2009-05-09 Mike Hommey + + Reviewed by Geoffrey Garen. Landed by Jan Alonzo. + + Enable JIT on x86-64 gtk+ + https://bugs.webkit.org/show_bug.cgi?id=24724 + + * GNUmakefile.am: + +2009-05-09 Geoffrey Garen + + Reviewed by Cameron Zwarich. + + Removed the last non-call-related manually managed JIT stub call. + + * jit/JITArithmetic.cpp: + (JSC::JIT::compileFastArithSlow_op_rshift): Fully use the JITStubCall + abstraction, instead of emitPutJITStubArg. + +2009-05-09 Sebastian Andrzej Siewior + + Reviewed by Gustavo Noronha. + + https://bugs.webkit.org/show_bug.cgi?id=25653 + PLATFORM(X86_64) inherits ia64 + + __ia64__ is defined by gcc in an IA64 arch and has completely + nothing in common with X86-64 exept both are from Intel and have + an 64bit address space. That's it. Since code seems to expect x86 + here, ia64 has to go. + + * wtf/Platform.h: + +2009-05-09 Gustavo Noronha Silva + + Suggested by Geoffrey Garen. + + Assume SSE2 is present on X86-64 and on MAC X86-32. This fixes a + build breakage on non-Mac X86-64 when JIT is enabled. + + * jit/JITArithmetic.cpp: + +2009-05-09 Gustavo Noronha Silva + + Build fix, adding missing files to make dist. + + * GNUmakefile.am: + +2009-05-09 Geoffrey Garen + + Windows build fix. + + * assembler/X86Assembler.h: + (JSC::X86Assembler::patchLoadToLEA): + +2009-05-09 Geoffrey Garen + + Windows build fix. + + * assembler/X86Assembler.h: + (JSC::X86Assembler::patchLoadToLEA): + +2009-05-09 Maciej Stachowiak + + Reviewed by Gavin Barraclough. + + Original patch by John McCall. Updated by Cameron Zwarich. Further refined by me. + + - Assorted speedups to property access + + ~.3%-1% speedup on SunSpider + + 1) When we know from the structure ID that an object is using inline storage, plant direct + loads and stores against it; no need to indirect through storage pointer. + + 2) Also because of the above, union the property storage pointer with the first inline property + slot and add an extra inline property slot. + + * assembler/AbstractMacroAssembler.h: + (JSC::AbstractMacroAssembler::CodeLocationInstruction::CodeLocationInstruction): + (JSC::AbstractMacroAssembler::CodeLocationInstruction::patchLoadToLEA): + (JSC::::CodeLocationCommon::instructionAtOffset): + * assembler/MacroAssembler.h: + (JSC::MacroAssembler::storePtr): + * assembler/MacroAssemblerX86.h: + (JSC::MacroAssemblerX86::store32): + * assembler/MacroAssemblerX86_64.h: + (JSC::MacroAssemblerX86_64::storePtr): + * assembler/X86Assembler.h: + (JSC::X86Assembler::movq_EAXm): + (JSC::X86Assembler::movl_rm): + (JSC::X86Assembler::patchLoadToLEA): + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + * jit/JIT.h: + * jit/JITPropertyAccess.cpp: + (JSC::JIT::compileGetByIdHotPath): + (JSC::JIT::compilePutByIdHotPath): + (JSC::JIT::compilePutDirectOffset): + (JSC::JIT::compileGetDirectOffset): + (JSC::JIT::privateCompilePutByIdTransition): + (JSC::JIT::patchGetByIdSelf): + (JSC::JIT::patchPutByIdReplace): + (JSC::JIT::privateCompileGetByIdSelf): + (JSC::JIT::privateCompileGetByIdProto): + (JSC::JIT::privateCompileGetByIdSelfList): + (JSC::JIT::privateCompileGetByIdProtoList): + (JSC::JIT::privateCompileGetByIdChainList): + (JSC::JIT::privateCompileGetByIdChain): + (JSC::JIT::privateCompilePutByIdReplace): + * runtime/JSObject.cpp: + (JSC::JSObject::mark): + (JSC::JSObject::removeDirect): + * runtime/JSObject.h: + (JSC::JSObject::propertyStorage): + (JSC::JSObject::getDirect): + (JSC::JSObject::getOffset): + (JSC::JSObject::offsetForLocation): + (JSC::JSObject::locationForOffset): + (JSC::JSObject::getDirectOffset): + (JSC::JSObject::putDirectOffset): + (JSC::JSObject::isUsingInlineStorage): + (JSC::JSObject::): + (JSC::JSObject::JSObject): + (JSC::JSObject::~JSObject): + (JSC::Structure::isUsingInlineStorage): + (JSC::JSObject::putDirect): + (JSC::JSObject::putDirectWithoutTransition): + (JSC::JSObject::allocatePropertyStorageInline): + * runtime/Structure.h: + +2009-05-09 Geoffrey Garen + + Reviewed by Gavin Barraclough. + + Changed all our JIT stubs so that they return a maximum of 1 JS value or + two non-JS pointers, and do all other value returning through out + parameters, in preparation for 64bit JS values on a 32bit system. + + Stubs that used to return two JSValues now return one JSValue and take + and out parameter specifying where in the register array the second + value should go. + + SunSpider reports no change. + + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + * jit/JITArithmetic.cpp: + (JSC::JIT::compileFastArithSlow_op_post_inc): + (JSC::JIT::compileFastArithSlow_op_post_dec): + * jit/JITStubs.cpp: + (JSC::JITStubs::cti_op_call_arityCheck): + (JSC::JITStubs::cti_op_resolve_func): + (JSC::JITStubs::cti_op_post_inc): + (JSC::JITStubs::cti_op_resolve_with_base): + (JSC::JITStubs::cti_op_post_dec): + * jit/JITStubs.h: + (JSC::): + +2009-05-08 Geoffrey Garen + + Reviewed by Cameron Zwarich. + + Fixed CrashTracer: [REGRESSION] >400 crashes + in Safari at com.apple.JavaScriptCore • JSC::BytecodeGenerator::emitComplexJumpScopes + 468 + https://bugs.webkit.org/show_bug.cgi?id=25658 + + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::emitComplexJumpScopes): Guard the whole loop + with a bounds check. The old loop logic would decrement and read topScope + without a bounds check, which could cause crashes on page boundaries. + +2009-05-08 Jan Michael Alonzo + + Reviewed by NOBODY (BuildFix). + + Gtk fix: add LiteralParser to the build script per r43424. + + Add LiteralParser to the Qt and Wx build scripts too. + + * GNUmakefile.am: + * JavaScriptCore.pri: + * JavaScriptCoreSources.bkl: + +2009-05-08 Oliver Hunt + + Reviewed by Gavin Barraclough and Darin Adler. + + Add a limited literal parser for eval to handle object and array literals fired at eval + + This is a simplified parser and lexer that we can throw at strings passed to eval + in case a site is using eval to parse JSON (eg. json2.js). The lexer is intentionally + limited (in effect it's whitelisting a limited "common" subset of the JSON grammar) + as this decreases the likelihood of us wating time attempting to parse any significant + amount of non-JSON content. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * interpreter/Interpreter.cpp: + (JSC::Interpreter::callEval): + * runtime/JSGlobalObjectFunctions.cpp: + (JSC::globalFuncEval): + * runtime/LiteralParser.cpp: Added. + (JSC::isStringCharacter): + (JSC::LiteralParser::Lexer::lex): + (JSC::LiteralParser::Lexer::lexString): + (JSC::LiteralParser::Lexer::lexNumber): + (JSC::LiteralParser::parseStatement): + (JSC::LiteralParser::parseExpression): + (JSC::LiteralParser::parseArray): + (JSC::LiteralParser::parseObject): + (JSC::LiteralParser::StackGuard::StackGuard): + (JSC::LiteralParser::StackGuard::~StackGuard): + (JSC::LiteralParser::StackGuard::isSafe): + * runtime/LiteralParser.h: Added. + (JSC::LiteralParser::LiteralParser): + (JSC::LiteralParser::attemptJSONParse): + (JSC::LiteralParser::): + (JSC::LiteralParser::Lexer::Lexer): + (JSC::LiteralParser::Lexer::next): + (JSC::LiteralParser::Lexer::currentToken): + (JSC::LiteralParser::abortParse): + +2009-05-08 Geoffrey Garen + + Not reviewed. + + Restored a Mozilla JS test I accidentally gutted. + + * tests/mozilla/ecma/Array/15.4.4.2.js: + (getTestCases): + (test): + +2009-05-08 Geoffrey Garen + + Reviewed by Gavin Barraclough. + + More abstraction for JITStub calls from JITed code. + + Added a JITStubCall class that automatically handles things like assigning + arguments to different stack slots and storing return values. Deployed + the class in about a billion places. A bunch more places remain to be + fixed up, but this is a good stopping point for now. + + * jit/JIT.cpp: + (JSC::JIT::emitTimeoutCheck): + (JSC::JIT::privateCompileMainPass): + (JSC::JIT::privateCompileSlowCases): + (JSC::JIT::privateCompile): + * jit/JIT.h: + (JSC::JIT::JSRInfo::JSRInfo): + (JSC::JITStubCall::JITStubCall): + (JSC::JITStubCall::addArgument): + (JSC::JITStubCall::call): + (JSC::JITStubCall::): + (JSC::CallEvalJITStub::CallEvalJITStub): + * jit/JITArithmetic.cpp: + (JSC::JIT::compileFastArithSlow_op_lshift): + (JSC::JIT::compileFastArithSlow_op_rshift): + (JSC::JIT::compileFastArithSlow_op_jnless): + (JSC::JIT::compileFastArithSlow_op_bitand): + (JSC::JIT::compileFastArithSlow_op_mod): + (JSC::JIT::compileFastArith_op_mod): + (JSC::JIT::compileFastArithSlow_op_post_inc): + (JSC::JIT::compileFastArithSlow_op_post_dec): + (JSC::JIT::compileFastArithSlow_op_pre_inc): + (JSC::JIT::compileFastArithSlow_op_pre_dec): + (JSC::JIT::compileFastArith_op_add): + (JSC::JIT::compileFastArith_op_mul): + (JSC::JIT::compileFastArith_op_sub): + (JSC::JIT::compileBinaryArithOpSlowCase): + (JSC::JIT::compileFastArithSlow_op_add): + (JSC::JIT::compileFastArithSlow_op_mul): + * jit/JITCall.cpp: + (JSC::JIT::compileOpCall): + (JSC::): + * jit/JITPropertyAccess.cpp: + (JSC::JIT::compileGetByIdHotPath): + (JSC::JIT::compilePutByIdHotPath): + (JSC::JIT::compileGetByIdSlowCase): + (JSC::JIT::compilePutByIdSlowCase): + * jit/JITStubs.cpp: + (JSC::JITStubs::cti_op_resolve_func): + (JSC::JITStubs::cti_op_resolve_with_base): + +2009-05-08 Cameron Zwarich + + Reviewed by Maciej Stachowiak. + + Add a new opcode jnlesseq, and optimize its compilation in the JIT using + techniques similar to what were used to optimize jnless in r43363. + + This gives a 0.7% speedup on SunSpider, particularly on the tests 3d-cube, + control-flow-recursive, date-format-xparb, and string-base64. + + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::dump): Add support for dumping op_jnlesseq. + * bytecode/Opcode.h: Add op_jnlesseq to the list of opcodes. + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::emitJumpIfFalse): Add a peephole optimization + for op_jnlesseq when emitting lesseq followed by a jump. + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): Add case for op_jnlesseq. + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): Add case for op_jnlesseq. + (JSC::JIT::privateCompileSlowCases): Add case for op_jnlesseq. + * jit/JIT.h: + * jit/JITArithmetic.cpp: + (JSC::JIT::compileFastArith_op_jnlesseq): Added. + (JSC::JIT::compileFastArithSlow_op_jnlesseq): Added. + * jit/JITStubs.cpp: + (JSC::JITStubs::cti_op_jlesseq): Added. + * jit/JITStubs.h: + +2009-05-08 Maciej Stachowiak + + Reviewed by Cameron Zwarich. + + - fix test failures on 64-bit + + * jit/JITArithmetic.cpp: + (JSC::JIT::compileFastArithSlow_op_jnless): Avoid accidentaly treating an + immediate int as an immediate float in the 64-bit value representation. + +2009-05-08 Gavin Barraclough + + Rubber stamped by Oliver Hunt. + + Removing an empty constructor and an uncalled, empty function seems to be a + pretty solid 1% regeression on my machine, so I'm going to put them back. + Um. Yeah, this this pretty pointles and makes no sense at all. I officially + lose the will to live in 3... 2... + + * bytecode/SamplingTool.cpp: + (JSC::SamplingTool::notifyOfScope): + * bytecode/SamplingTool.h: + (JSC::SamplingTool::~SamplingTool): + +2009-05-08 Gavin Barraclough + + Reviewed by Oliver "I see lots of ifdefs" Hunt. + + Fix (kinda) for sampling tool breakage. The codeblock sampling tool has become + b0rked due to recent changes in native function calling. The initialization of + a ScopeNode appears to now occur before the sampling tool (or possibly the + interpreter has been brought into existence, wihich leads to crashyness). + + This patch doesn't fix the problem. The crash occurs when tracking a Scope, but + we shouldn't need to track scopes when we're just sampling opcodes, not + codeblocks. Not retaining Scopes when just opcode sampling will reduce sampling + overhead reducing any instrumentation skew, which is a good thing. As a side + benefit this patch also gets the opcode sampling going again, albeit in a bit of + a lame way. Will come back later with a proper fix from codeblock sampling. + + * JavaScriptCore.exp: + * bytecode/SamplingTool.cpp: + (JSC::compareLineCountInfoSampling): + (JSC::SamplingTool::dump): + * bytecode/SamplingTool.h: + (JSC::SamplingTool::SamplingTool): + * parser/Nodes.cpp: + (JSC::ScopeNode::ScopeNode): + +2009-05-07 Mark Rowe + + Rubber-stamped by Oliver Hunt. + + Fix . + Bug 25640: Crash on quit in r43384 nightly build on Leopard w/ Safari 4 beta installed + + Roll out r43366 as it removed symbols that Safari 4 Beta uses. + + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: + * bytecode/SamplingTool.cpp: + (JSC::SamplingThread::start): + (JSC::SamplingThread::stop): + * bytecode/SamplingTool.h: + * wtf/CrossThreadRefCounted.h: + (WTF::CrossThreadRefCounted::CrossThreadRefCounted): + (WTF::::ref): + (WTF::::deref): + * wtf/Threading.h: + * wtf/ThreadingNone.cpp: + * wtf/ThreadingPthreads.cpp: + (WTF::threadMapMutex): + (WTF::initializeThreading): + (WTF::threadMap): + (WTF::identifierByPthreadHandle): + (WTF::establishIdentifierForPthreadHandle): + (WTF::pthreadHandleForIdentifier): + (WTF::clearPthreadHandleForIdentifier): + (WTF::createThreadInternal): + (WTF::waitForThreadCompletion): + (WTF::detachThread): + (WTF::currentThread): + * wtf/ThreadingWin.cpp: + (WTF::threadMapMutex): + (WTF::initializeThreading): + (WTF::threadMap): + (WTF::storeThreadHandleByIdentifier): + (WTF::threadHandleForIdentifier): + (WTF::clearThreadHandleForIdentifier): + (WTF::createThreadInternal): + (WTF::waitForThreadCompletion): + (WTF::detachThread): + (WTF::currentThread): + * wtf/gtk/ThreadingGtk.cpp: + (WTF::threadMapMutex): + (WTF::initializeThreading): + (WTF::threadMap): + (WTF::identifierByGthreadHandle): + (WTF::establishIdentifierForThread): + (WTF::threadForIdentifier): + (WTF::clearThreadForIdentifier): + (WTF::createThreadInternal): + (WTF::waitForThreadCompletion): + (WTF::currentThread): + * wtf/qt/ThreadingQt.cpp: + (WTF::threadMapMutex): + (WTF::threadMap): + (WTF::identifierByQthreadHandle): + (WTF::establishIdentifierForThread): + (WTF::clearThreadForIdentifier): + (WTF::threadForIdentifier): + (WTF::initializeThreading): + (WTF::createThreadInternal): + (WTF::waitForThreadCompletion): + (WTF::currentThread): + +2009-05-07 Gustavo Noronha Silva + + Suggested by Oliver Hunt. + + Also check for Linux for the special-cased calling convention. + + * jit/JIT.cpp: + (JSC::JIT::privateCompileCTIMachineTrampolines): + * wtf/Platform.h: + +2009-05-07 Gavin Barraclough + + Reviewed by Maciej Stachowiak. + + Previously, when appending to an existing string and growing the underlying buffer, + we would actually allocate 110% of the required size in order to give us some space + to expand into. Now we treat strings differently based on their size: + + Small Strings (up to 4 pages): + Expand the allocation size to 112.5% of the amount requested. This is largely sicking + to our previous policy, however 112.5% is cheaper to calculate. + + Medium Strings (up to 128 pages): + For pages covering multiple pages over-allocation is less of a concern - any unused + space will not be paged in if it is not used, so this is purely a VM overhead. For + these strings allocate 2x the requested size. + + Large Strings (to infinity and beyond!): + Revert to our 112.5% policy - probably best to limit the amount of unused VM we allow + any individual string be responsible for. + + Additionally, round small allocations up to a multiple of 16 bytes, and medium and + large allocations up to a multiple of page size. + + ~1.5% progression on Sunspider, due to 5% improvement on tagcloud & 15% on validate. + + * runtime/UString.cpp: + (JSC::expandedSize): + +2009-05-07 Geoffrey Garen + + Reviewed by Cameron Zwarich. + + Fixed a minor sequencing error introduced by recent Parser speedups. + + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::createNativeThunk): Missed a spot in my last patch. + +2009-05-07 Geoffrey Garen + + Not reviewed. + + * wtf/Platform.h: Reverted an accidental (and performance-catastrophic) + change. + +2009-05-07 Geoffrey Garen + + Reviewed by Cameron Zwarich. + + Fixed a minor sequencing error introduced by recent Parser speedups. + + * parser/Parser.cpp: + (JSC::Parser::reparseInPlace): Missed a spot in my last patch. + +2009-05-07 Geoffrey Garen + + Reviewed by Cameron Zwarich. + + Fixed a minor sequencing error introduced by recent Parser speedups. + + * parser/Parser.cpp: + (JSC::Parser::parse): + * parser/Parser.h: + (JSC::Parser::parse): + (JSC::Parser::reparse): Shrink the parsedObjects vector after allocating + the root node, to avoid leaving a stray node in the vector, since that's + a slight memory leak, and it causes problems during JSGlobalData teardown. + + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::~JSGlobalData): ASSERT that we're not being torn + down while we think we're still parsing, since that would cause lots of + bad memory references during our destruction. + +2009-05-07 Geoffrey Garen + + Reviewed by Cameron Zwarich. + + Replaced two more macros with references to the JITStackFrame structure. + + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + * jit/JITInlineMethods.h: + (JSC::JIT::restoreArgumentReference): + * jit/JITStubs.cpp: + (JSC::): + * jit/JITStubs.h: + +2009-05-07 Oliver Hunt + + Reviewed by Gavin Barraclough. + + Improve native call performance + + Fix the windows build by adding calling convention declarations everywhere, + chose fastcall as that seemed most sensible given we were having to declare + the convention explicitly. In addition switched to fastcall on mac in the + deluded belief that documented fastcall behavior on windows would match + actual its actual behavior. + + * API/JSCallbackFunction.h: + * API/JSCallbackObject.h: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: + * interpreter/CallFrame.h: + (JSC::ExecState::argumentCount): + * jit/JIT.cpp: + (JSC::JIT::privateCompileCTIMachineTrampolines): + * jsc.cpp: + (functionPrint): + (functionDebug): + (functionGC): + (functionVersion): + (functionRun): + (functionLoad): + (functionSetSamplingFlags): + (functionClearSamplingFlags): + (functionReadline): + (functionQuit): + * runtime/ArrayConstructor.cpp: + (JSC::callArrayConstructor): + * runtime/ArrayPrototype.cpp: + (JSC::arrayProtoFuncToString): + (JSC::arrayProtoFuncToLocaleString): + (JSC::arrayProtoFuncJoin): + (JSC::arrayProtoFuncConcat): + (JSC::arrayProtoFuncPop): + (JSC::arrayProtoFuncPush): + (JSC::arrayProtoFuncReverse): + (JSC::arrayProtoFuncShift): + (JSC::arrayProtoFuncSlice): + (JSC::arrayProtoFuncSort): + (JSC::arrayProtoFuncSplice): + (JSC::arrayProtoFuncUnShift): + (JSC::arrayProtoFuncFilter): + (JSC::arrayProtoFuncMap): + (JSC::arrayProtoFuncEvery): + (JSC::arrayProtoFuncForEach): + (JSC::arrayProtoFuncSome): + (JSC::arrayProtoFuncReduce): + (JSC::arrayProtoFuncReduceRight): + (JSC::arrayProtoFuncIndexOf): + (JSC::arrayProtoFuncLastIndexOf): + * runtime/BooleanConstructor.cpp: + (JSC::callBooleanConstructor): + * runtime/BooleanPrototype.cpp: + (JSC::booleanProtoFuncToString): + (JSC::booleanProtoFuncValueOf): + * runtime/CallData.h: + * runtime/DateConstructor.cpp: + (JSC::callDate): + (JSC::dateParse): + (JSC::dateNow): + (JSC::dateUTC): + * runtime/DatePrototype.cpp: + (JSC::dateProtoFuncToString): + (JSC::dateProtoFuncToUTCString): + (JSC::dateProtoFuncToDateString): + (JSC::dateProtoFuncToTimeString): + (JSC::dateProtoFuncToLocaleString): + (JSC::dateProtoFuncToLocaleDateString): + (JSC::dateProtoFuncToLocaleTimeString): + (JSC::dateProtoFuncGetTime): + (JSC::dateProtoFuncGetFullYear): + (JSC::dateProtoFuncGetUTCFullYear): + (JSC::dateProtoFuncToGMTString): + (JSC::dateProtoFuncGetMonth): + (JSC::dateProtoFuncGetUTCMonth): + (JSC::dateProtoFuncGetDate): + (JSC::dateProtoFuncGetUTCDate): + (JSC::dateProtoFuncGetDay): + (JSC::dateProtoFuncGetUTCDay): + (JSC::dateProtoFuncGetHours): + (JSC::dateProtoFuncGetUTCHours): + (JSC::dateProtoFuncGetMinutes): + (JSC::dateProtoFuncGetUTCMinutes): + (JSC::dateProtoFuncGetSeconds): + (JSC::dateProtoFuncGetUTCSeconds): + (JSC::dateProtoFuncGetMilliSeconds): + (JSC::dateProtoFuncGetUTCMilliseconds): + (JSC::dateProtoFuncGetTimezoneOffset): + (JSC::dateProtoFuncSetTime): + (JSC::dateProtoFuncSetMilliSeconds): + (JSC::dateProtoFuncSetUTCMilliseconds): + (JSC::dateProtoFuncSetSeconds): + (JSC::dateProtoFuncSetUTCSeconds): + (JSC::dateProtoFuncSetMinutes): + (JSC::dateProtoFuncSetUTCMinutes): + (JSC::dateProtoFuncSetHours): + (JSC::dateProtoFuncSetUTCHours): + (JSC::dateProtoFuncSetDate): + (JSC::dateProtoFuncSetUTCDate): + (JSC::dateProtoFuncSetMonth): + (JSC::dateProtoFuncSetUTCMonth): + (JSC::dateProtoFuncSetFullYear): + (JSC::dateProtoFuncSetUTCFullYear): + (JSC::dateProtoFuncSetYear): + (JSC::dateProtoFuncGetYear): + * runtime/ErrorConstructor.cpp: + (JSC::callErrorConstructor): + * runtime/ErrorPrototype.cpp: + (JSC::errorProtoFuncToString): + * runtime/FunctionConstructor.cpp: + (JSC::callFunctionConstructor): + * runtime/FunctionPrototype.cpp: + (JSC::callFunctionPrototype): + (JSC::functionProtoFuncToString): + (JSC::functionProtoFuncApply): + (JSC::functionProtoFuncCall): + * runtime/JSFunction.h: + (JSC::JSFunction::nativeFunction): + (JSC::JSFunction::setScopeChain): + * runtime/JSGlobalObjectFunctions.cpp: + (JSC::globalFuncEval): + (JSC::globalFuncParseInt): + (JSC::globalFuncParseFloat): + (JSC::globalFuncIsNaN): + (JSC::globalFuncIsFinite): + (JSC::globalFuncDecodeURI): + (JSC::globalFuncDecodeURIComponent): + (JSC::globalFuncEncodeURI): + (JSC::globalFuncEncodeURIComponent): + (JSC::globalFuncEscape): + (JSC::globalFuncUnescape): + (JSC::globalFuncJSCPrint): + * runtime/JSGlobalObjectFunctions.h: + * runtime/MathObject.cpp: + (JSC::mathProtoFuncAbs): + (JSC::mathProtoFuncACos): + (JSC::mathProtoFuncASin): + (JSC::mathProtoFuncATan): + (JSC::mathProtoFuncATan2): + (JSC::mathProtoFuncCeil): + (JSC::mathProtoFuncCos): + (JSC::mathProtoFuncExp): + (JSC::mathProtoFuncFloor): + (JSC::mathProtoFuncLog): + (JSC::mathProtoFuncMax): + (JSC::mathProtoFuncMin): + (JSC::mathProtoFuncPow): + (JSC::mathProtoFuncRandom): + (JSC::mathProtoFuncRound): + (JSC::mathProtoFuncSin): + (JSC::mathProtoFuncSqrt): + (JSC::mathProtoFuncTan): + * runtime/NativeErrorConstructor.cpp: + (JSC::callNativeErrorConstructor): + * runtime/NativeFunctionWrapper.h: + * runtime/NumberConstructor.cpp: + (JSC::callNumberConstructor): + * runtime/NumberPrototype.cpp: + (JSC::numberProtoFuncToString): + (JSC::numberProtoFuncToLocaleString): + (JSC::numberProtoFuncValueOf): + (JSC::numberProtoFuncToFixed): + (JSC::numberProtoFuncToExponential): + (JSC::numberProtoFuncToPrecision): + * runtime/ObjectConstructor.cpp: + (JSC::callObjectConstructor): + * runtime/ObjectPrototype.cpp: + (JSC::objectProtoFuncValueOf): + (JSC::objectProtoFuncHasOwnProperty): + (JSC::objectProtoFuncIsPrototypeOf): + (JSC::objectProtoFuncDefineGetter): + (JSC::objectProtoFuncDefineSetter): + (JSC::objectProtoFuncLookupGetter): + (JSC::objectProtoFuncLookupSetter): + (JSC::objectProtoFuncPropertyIsEnumerable): + (JSC::objectProtoFuncToLocaleString): + (JSC::objectProtoFuncToString): + * runtime/ObjectPrototype.h: + * runtime/RegExpConstructor.cpp: + (JSC::callRegExpConstructor): + * runtime/RegExpObject.cpp: + (JSC::callRegExpObject): + * runtime/RegExpPrototype.cpp: + (JSC::regExpProtoFuncTest): + (JSC::regExpProtoFuncExec): + (JSC::regExpProtoFuncCompile): + (JSC::regExpProtoFuncToString): + * runtime/StringConstructor.cpp: + (JSC::stringFromCharCode): + (JSC::callStringConstructor): + * runtime/StringPrototype.cpp: + (JSC::stringProtoFuncReplace): + (JSC::stringProtoFuncToString): + (JSC::stringProtoFuncCharAt): + (JSC::stringProtoFuncCharCodeAt): + (JSC::stringProtoFuncConcat): + (JSC::stringProtoFuncIndexOf): + (JSC::stringProtoFuncLastIndexOf): + (JSC::stringProtoFuncMatch): + (JSC::stringProtoFuncSearch): + (JSC::stringProtoFuncSlice): + (JSC::stringProtoFuncSplit): + (JSC::stringProtoFuncSubstr): + (JSC::stringProtoFuncSubstring): + (JSC::stringProtoFuncToLowerCase): + (JSC::stringProtoFuncToUpperCase): + (JSC::stringProtoFuncLocaleCompare): + (JSC::stringProtoFuncBig): + (JSC::stringProtoFuncSmall): + (JSC::stringProtoFuncBlink): + (JSC::stringProtoFuncBold): + (JSC::stringProtoFuncFixed): + (JSC::stringProtoFuncItalics): + (JSC::stringProtoFuncStrike): + (JSC::stringProtoFuncSub): + (JSC::stringProtoFuncSup): + (JSC::stringProtoFuncFontcolor): + (JSC::stringProtoFuncFontsize): + (JSC::stringProtoFuncAnchor): + (JSC::stringProtoFuncLink): + * wtf/Platform.h: + +2009-05-07 Geoffrey Garen + + Not reviewed. + + Rolled out a portion of r43352 because it broke 64bit. + + * jit/JITStubs.h: + +2009-05-07 Kevin Ollivier + + Build fix for functions reaturning ThreadIdentifier. + + * wtf/ThreadingNone.cpp: + (WTF::createThreadInternal): + (WTF::currentThread): + +2009-05-07 Maciej Stachowiak + + Reviewed by John Honeycutt. + + - enable optimization case im the last patch that I accidentally had disabled. + + * jit/JITArithmetic.cpp: + (JSC::JIT::compileFastArithSlow_op_jnless): + +2009-05-07 Dmitry Titov + + Attempt to fix Win build. + + * jit/JITArithmetic.cpp: + (JSC::JIT::compileFastArithSlow_op_jnless): + +2009-05-07 Dmitry Titov + + Reviewed by Alexey Proskuryakov and Adam Roben. + + https://bugs.webkit.org/show_bug.cgi?id=25348 + Change WTF::ThreadIdentifier to be an actual (but wrapped) thread id, remove ThreadMap. + + * wtf/Threading.h: + (WTF::ThreadIdentifier::ThreadIdentifier): + (WTF::ThreadIdentifier::isValid): + (WTF::ThreadIdentifier::invalidate): + (WTF::ThreadIdentifier::platformId): + ThreadIdentifier is now a class, containing a PlatformThreadIdentifier and + methods that are used across the code on thread ids: construction, comparisons, + check for 'valid' state etc. '0' is used as invalid id, which happens to just work + with all platform-specific thread id implementations. + + All the following files repeatedly reflect the new ThreadIdentifier for each platform. + We remove ThreadMap and threadMapMutex from all of them, remove the functions that + populated/searched/cleared the map and add platform-specific comparison operators + for ThreadIdentifier. + + * wtf/gtk/ThreadingGtk.cpp: + (WTF::ThreadIdentifier::operator==): + (WTF::ThreadIdentifier::operator!=): + (WTF::initializeThreading): + (WTF::createThreadInternal): + (WTF::waitForThreadCompletion): + (WTF::currentThread): + + * wtf/ThreadingNone.cpp: + (WTF::ThreadIdentifier::operator==): + (WTF::ThreadIdentifier::operator!=): + + * wtf/ThreadingPthreads.cpp: + (WTF::ThreadIdentifier::operator==): + (WTF::ThreadIdentifier::operator!=): + (WTF::initializeThreading): + (WTF::createThreadInternal): + (WTF::waitForThreadCompletion): + (WTF::detachThread): + (WTF::currentThread): + + * wtf/qt/ThreadingQt.cpp: + (WTF::ThreadIdentifier::operator==): + (WTF::ThreadIdentifier::operator!=): + (WTF::initializeThreading): + (WTF::createThreadInternal): + (WTF::waitForThreadCompletion): + (WTF::currentThread): + + * wtf/ThreadingWin.cpp: + (WTF::ThreadIdentifier::operator==): + (WTF::ThreadIdentifier::operator!=): + (WTF::initializeThreading): + (WTF::createThreadInternal): All the platforms (except Windows) used a sequential + counter as a thread ID and mapped it into platform ID. Windows was using native thread + id and mapped it into thread handle. Since we can always obtain a thread handle + by thread id, createThread now closes the handle. + (WTF::waitForThreadCompletion): obtains another one using OpenThread(id) API. If can not obtain a handle, + it means the thread already exited. + (WTF::detachThread): + (WTF::currentThread): + (WTF::detachThreadDeprecated): old function, renamed (for Win Safari 4 beta which uses it for now). + (WTF::waitForThreadCompletionDeprecated): same. + (WTF::currentThreadDeprecated): same. + (WTF::createThreadDeprecated): same. + + * bytecode/SamplingTool.h: + * bytecode/SamplingTool.cpp: Use DEFINE_STATIC_LOCAL for a static ThreadIdentifier variable, to avoid static constructor. + + * JavaScriptCore.exp: export lists - updated the WTF threading functions decorated names + since they now take a different type as a parameter. + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: ditto for Windows, plus added "deprecated" functions + that take old parameter type - turns out public beta of Safari 4 uses those, so they need to be kept along for a while. + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: ditto. + +2009-05-07 Maciej Stachowiak + + Reviewed by Sam Weinig. + + - optimize various cases of branch-fused less + + 1% speedup on SunSpider overall + 13% speedup on math-cordic + + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + op_loop_if_less: Optimize case of constant as first operand, just as case of constant as + second operand. + op_jnless: Factored out into compileFastArith_op_jnless. + (JSC::JIT::privateCompileSlowCases): + op_jnless: Factored out into compileFastArithSlow_op_jnless. + * jit/JIT.h: + * jit/JITArithmetic.cpp: + (JSC::JIT::compileFastArith_op_jnless): Factored out from main compile loop. + - Generate inline code for comparison of constant immediate int as first operand to another + immediate int, as for loop_if_less + + (JSC::JIT::compileFastArithSlow_op_jnless): + - Generate inline code for comparing two floating point numbers. + - Generate code for both cases of comparing a floating point number to a constant immediate + int. + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::dump): Fix dumping of op_jnless (tangentially related bugfix). + +2009-05-07 Geoffrey Garen + + Reviewed by Sam Weinig. + + Added the return address of a stub function to the JITStackFrame abstraction. + + * jit/JIT.cpp: + * jit/JIT.h: + * jit/JITStubs.cpp: + (JSC::): + (JSC::StackHack::StackHack): + (JSC::StackHack::~StackHack): + (JSC::returnToThrowTrampoline): + (JSC::JITStubs::cti_op_convert_this): + (JSC::JITStubs::cti_op_end): + (JSC::JITStubs::cti_op_add): + (JSC::JITStubs::cti_op_pre_inc): + (JSC::JITStubs::cti_timeout_check): + (JSC::JITStubs::cti_register_file_check): + (JSC::JITStubs::cti_op_loop_if_less): + (JSC::JITStubs::cti_op_loop_if_lesseq): + (JSC::JITStubs::cti_op_new_object): + (JSC::JITStubs::cti_op_put_by_id_generic): + (JSC::JITStubs::cti_op_get_by_id_generic): + (JSC::JITStubs::cti_op_put_by_id): + (JSC::JITStubs::cti_op_put_by_id_second): + (JSC::JITStubs::cti_op_put_by_id_fail): + (JSC::JITStubs::cti_op_get_by_id): + (JSC::JITStubs::cti_op_get_by_id_second): + (JSC::JITStubs::cti_op_get_by_id_self_fail): + (JSC::JITStubs::cti_op_get_by_id_proto_list): + (JSC::JITStubs::cti_op_get_by_id_proto_list_full): + (JSC::JITStubs::cti_op_get_by_id_proto_fail): + (JSC::JITStubs::cti_op_get_by_id_array_fail): + (JSC::JITStubs::cti_op_get_by_id_string_fail): + (JSC::JITStubs::cti_op_instanceof): + (JSC::JITStubs::cti_op_del_by_id): + (JSC::JITStubs::cti_op_mul): + (JSC::JITStubs::cti_op_new_func): + (JSC::JITStubs::cti_op_call_JSFunction): + (JSC::JITStubs::cti_op_call_arityCheck): + (JSC::JITStubs::cti_vm_dontLazyLinkCall): + (JSC::JITStubs::cti_vm_lazyLinkCall): + (JSC::JITStubs::cti_op_push_activation): + (JSC::JITStubs::cti_op_call_NotJSFunction): + (JSC::JITStubs::cti_op_create_arguments): + (JSC::JITStubs::cti_op_create_arguments_no_params): + (JSC::JITStubs::cti_op_tear_off_activation): + (JSC::JITStubs::cti_op_tear_off_arguments): + (JSC::JITStubs::cti_op_profile_will_call): + (JSC::JITStubs::cti_op_profile_did_call): + (JSC::JITStubs::cti_op_ret_scopeChain): + (JSC::JITStubs::cti_op_new_array): + (JSC::JITStubs::cti_op_resolve): + (JSC::JITStubs::cti_op_construct_JSConstruct): + (JSC::JITStubs::cti_op_construct_NotJSConstruct): + (JSC::JITStubs::cti_op_get_by_val): + (JSC::JITStubs::cti_op_get_by_val_string): + (JSC::JITStubs::cti_op_get_by_val_byte_array): + (JSC::JITStubs::cti_op_resolve_func): + (JSC::JITStubs::cti_op_sub): + (JSC::JITStubs::cti_op_put_by_val): + (JSC::JITStubs::cti_op_put_by_val_array): + (JSC::JITStubs::cti_op_put_by_val_byte_array): + (JSC::JITStubs::cti_op_lesseq): + (JSC::JITStubs::cti_op_loop_if_true): + (JSC::JITStubs::cti_op_load_varargs): + (JSC::JITStubs::cti_op_negate): + (JSC::JITStubs::cti_op_resolve_base): + (JSC::JITStubs::cti_op_resolve_skip): + (JSC::JITStubs::cti_op_resolve_global): + (JSC::JITStubs::cti_op_div): + (JSC::JITStubs::cti_op_pre_dec): + (JSC::JITStubs::cti_op_jless): + (JSC::JITStubs::cti_op_not): + (JSC::JITStubs::cti_op_jtrue): + (JSC::JITStubs::cti_op_post_inc): + (JSC::JITStubs::cti_op_eq): + (JSC::JITStubs::cti_op_lshift): + (JSC::JITStubs::cti_op_bitand): + (JSC::JITStubs::cti_op_rshift): + (JSC::JITStubs::cti_op_bitnot): + (JSC::JITStubs::cti_op_resolve_with_base): + (JSC::JITStubs::cti_op_new_func_exp): + (JSC::JITStubs::cti_op_mod): + (JSC::JITStubs::cti_op_less): + (JSC::JITStubs::cti_op_neq): + (JSC::JITStubs::cti_op_post_dec): + (JSC::JITStubs::cti_op_urshift): + (JSC::JITStubs::cti_op_bitxor): + (JSC::JITStubs::cti_op_new_regexp): + (JSC::JITStubs::cti_op_bitor): + (JSC::JITStubs::cti_op_call_eval): + (JSC::JITStubs::cti_op_throw): + (JSC::JITStubs::cti_op_get_pnames): + (JSC::JITStubs::cti_op_next_pname): + (JSC::JITStubs::cti_op_push_scope): + (JSC::JITStubs::cti_op_pop_scope): + (JSC::JITStubs::cti_op_typeof): + (JSC::JITStubs::cti_op_is_undefined): + (JSC::JITStubs::cti_op_is_boolean): + (JSC::JITStubs::cti_op_is_number): + (JSC::JITStubs::cti_op_is_string): + (JSC::JITStubs::cti_op_is_object): + (JSC::JITStubs::cti_op_is_function): + (JSC::JITStubs::cti_op_stricteq): + (JSC::JITStubs::cti_op_to_primitive): + (JSC::JITStubs::cti_op_strcat): + (JSC::JITStubs::cti_op_nstricteq): + (JSC::JITStubs::cti_op_to_jsnumber): + (JSC::JITStubs::cti_op_in): + (JSC::JITStubs::cti_op_push_new_scope): + (JSC::JITStubs::cti_op_jmp_scopes): + (JSC::JITStubs::cti_op_put_by_index): + (JSC::JITStubs::cti_op_switch_imm): + (JSC::JITStubs::cti_op_switch_char): + (JSC::JITStubs::cti_op_switch_string): + (JSC::JITStubs::cti_op_del_by_val): + (JSC::JITStubs::cti_op_put_getter): + (JSC::JITStubs::cti_op_put_setter): + (JSC::JITStubs::cti_op_new_error): + (JSC::JITStubs::cti_op_debug): + (JSC::JITStubs::cti_vm_throw): + * jit/JITStubs.h: + (JSC::JITStackFrame::returnAddressSlot): + +2009-05-07 Darin Adler + + Reviewed by Geoff Garen. + + * parser/Lexer.cpp: + (JSC::Lexer::lex): Fix missing braces. This would make us always + take the slower case for string parsing and Visual Studio correctly + noticed unreachable code. + +2009-05-07 Darin Adler + + Reviewed by Sam Weinig. + + Bug 25589: goto instead of state machine in lexer + https://bugs.webkit.org/show_bug.cgi?id=25589 + + SunSpider is 0.8% faster. + + * parser/Lexer.cpp: + (JSC::Lexer::currentCharacter): Added. + (JSC::Lexer::currentOffset): Changed to call currentCharacter for clarity. + (JSC::Lexer::setCode): Removed code to set now-obsolete m_skipLineEnd. + (JSC::Lexer::shiftLineTerminator): Added. Handles line numbers and the + two-character line terminators. + (JSC::Lexer::makeIdentifier): Changed to take characters and length rather + than a vector, since we now make these directly out of the source buffer + when possible. + (JSC::Lexer::lastTokenWasRestrKeyword): Added. + (JSC::isNonASCIIIdentStart): Broke out the non-inline part. + (JSC::isIdentStart): Moved here. + (JSC::isNonASCIIIdentPart): Broke out the non-inline part. + (JSC::isIdentPart): Moved here. + (JSC::singleEscape): Moved here, and removed some unneeded cases. + (JSC::Lexer::record8): Moved here. + (JSC::Lexer::record16): Moved here. + (JSC::Lexer::lex): Rewrote this whole function to use goto and not use + a state machine. Got rid of most of the local variables. Also rolled the + matchPunctuator function in here. + (JSC::Lexer::scanRegExp): Changed to use the new version of isLineTerminator. + Clear m_buffer16 after using it instead of before. + + * parser/Lexer.h: Removed State enum, setDone function, nextLine function, + lookupKeywordFunction, one of the isLineTerminator functions, m_done data member, + m_skipLineEnd data member, and m_state data member. Added shiftLineTerminator + function, currentCharacter function, and changed the arguments to the makeIdentifier + function. Removed one branch from the isLineTerminator function. + + * runtime/StringPrototype.cpp: + (JSC::stringProtoFuncReplace): Streamlined the case where we don't replace anything. + +2009-05-07 Geoffrey Garen + + Reviewed by Gavin Barraclough. + + Removed a few more special constants, and replaced them with uses of + the JITStackFrame struct. + + Removed one of the two possible definitions of VoidPtrPair. The Mac + definition was more elegant, but SunSpider doesn't think it's any + faster, and it's net less elegant to have two ways of doing things. + + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + (JSC::JIT::privateCompile): + * jit/JITStubs.h: + (JSC::): + +2009-05-07 Darin Adler + + * runtime/ScopeChain.h: + (JSC::ScopeChainNode::~ScopeChainNode): Tweak formatting. + +2009-05-07 Simon Hausmann + + Reviewed by Tor Arne Vestbø. + + Fix the build thread stack base determination build on Symbian, + by moving the code block before PLATFORM(UNIX), which is also + enabled on Symbian builds. + + * runtime/Collector.cpp: + (JSC::currentThreadStackBase): + +2009-05-07 Oliver Hunt + + Reviewed by Gavin Barraclough. + + Fix crash due to incorrectly using an invalid scopechain + + stringProtoFuncReplace was checking for an exception on a CachedCall + by asking for the cached callframes exception. Unfortunately this + could crash in certain circumstances as CachedCall does not guarantee + a valid callframe following a call. Even more unfortunately the check + was entirely unnecessary as there is only a single exception slot per + global data, so it was already checked via the initial exec->hadException() + check. + + To make bugs like this more obvious, i've added a debug only destructor + to ScopeChainNode that 0's all of its fields. This exposed a crash in + the standard javascriptcore tests. + + * runtime/ScopeChain.h: + (JSC::ScopeChainNode::~ScopeChainNode): + (JSC::ScopeChain::~ScopeChain): + * runtime/StringPrototype.cpp: + (JSC::stringProtoFuncReplace): + +2009-05-07 Gavin Barraclough + + Reviewed by Geoff Garen. + + Enable op_strcat across += assignments. This patch allows the lhs of a read/modify node + to be included within the concatenation operation, and also modifies the implementation + of the concatenation to attempt to reuse and cat onto the leftmost string, rather than + always allocating a new empty output string to copy into (as was previously the behaviour). + + ~0.5% progression, due to a 3%-3.5% progression on the string tests (particularly validate). + + * parser/Nodes.cpp: + (JSC::BinaryOpNode::emitStrcat): + (JSC::emitReadModifyAssignment): + (JSC::ReadModifyResolveNode::emitBytecode): + (JSC::ReadModifyDotNode::emitBytecode): + (JSC::ReadModifyBracketNode::emitBytecode): + * parser/Nodes.h: + * runtime/Operations.h: + (JSC::concatenateStrings): + * runtime/UString.cpp: + (JSC::UString::reserveCapacity): + * runtime/UString.h: + +2009-05-07 Simon Hausmann + + Reviewed by Oliver Hunt. + + Fix the build on Windows without JIT: interpreter/RegisterFile.h needs + roundUpAllocationSize, which is protected by #if ENABLED(ASSEMBLER). + Moved the #ifdef down and always offer the function. + + * jit/ExecutableAllocator.h: + +2009-05-06 Geoffrey Garen + + Reviewed by Gavin "++" Barraclough. + + Added some abstraction around the JIT stub calling convention by creating + a struct to represent the persistent stack frame JIT code shares with + JIT stubs. + + SunSpider reports no change. + + * jit/JIT.h: + * jit/JITStubs.cpp: + (JSC::JITStubs::cti_op_convert_this): + (JSC::JITStubs::cti_op_end): + (JSC::JITStubs::cti_op_add): + (JSC::JITStubs::cti_op_pre_inc): + (JSC::JITStubs::cti_timeout_check): + (JSC::JITStubs::cti_register_file_check): + (JSC::JITStubs::cti_op_loop_if_less): + (JSC::JITStubs::cti_op_loop_if_lesseq): + (JSC::JITStubs::cti_op_new_object): + (JSC::JITStubs::cti_op_put_by_id_generic): + (JSC::JITStubs::cti_op_get_by_id_generic): + (JSC::JITStubs::cti_op_put_by_id): + (JSC::JITStubs::cti_op_put_by_id_second): + (JSC::JITStubs::cti_op_put_by_id_fail): + (JSC::JITStubs::cti_op_get_by_id): + (JSC::JITStubs::cti_op_get_by_id_second): + (JSC::JITStubs::cti_op_get_by_id_self_fail): + (JSC::JITStubs::cti_op_get_by_id_proto_list): + (JSC::JITStubs::cti_op_get_by_id_proto_list_full): + (JSC::JITStubs::cti_op_get_by_id_proto_fail): + (JSC::JITStubs::cti_op_get_by_id_array_fail): + (JSC::JITStubs::cti_op_get_by_id_string_fail): + (JSC::JITStubs::cti_op_instanceof): + (JSC::JITStubs::cti_op_del_by_id): + (JSC::JITStubs::cti_op_mul): + (JSC::JITStubs::cti_op_new_func): + (JSC::JITStubs::cti_op_call_JSFunction): + (JSC::JITStubs::cti_op_call_arityCheck): + (JSC::JITStubs::cti_vm_dontLazyLinkCall): + (JSC::JITStubs::cti_vm_lazyLinkCall): + (JSC::JITStubs::cti_op_push_activation): + (JSC::JITStubs::cti_op_call_NotJSFunction): + (JSC::JITStubs::cti_op_create_arguments): + (JSC::JITStubs::cti_op_create_arguments_no_params): + (JSC::JITStubs::cti_op_tear_off_activation): + (JSC::JITStubs::cti_op_tear_off_arguments): + (JSC::JITStubs::cti_op_profile_will_call): + (JSC::JITStubs::cti_op_profile_did_call): + (JSC::JITStubs::cti_op_ret_scopeChain): + (JSC::JITStubs::cti_op_new_array): + (JSC::JITStubs::cti_op_resolve): + (JSC::JITStubs::cti_op_construct_JSConstruct): + (JSC::JITStubs::cti_op_construct_NotJSConstruct): + (JSC::JITStubs::cti_op_get_by_val): + (JSC::JITStubs::cti_op_get_by_val_string): + (JSC::JITStubs::cti_op_get_by_val_byte_array): + (JSC::JITStubs::cti_op_resolve_func): + (JSC::JITStubs::cti_op_sub): + (JSC::JITStubs::cti_op_put_by_val): + (JSC::JITStubs::cti_op_put_by_val_array): + (JSC::JITStubs::cti_op_put_by_val_byte_array): + (JSC::JITStubs::cti_op_lesseq): + (JSC::JITStubs::cti_op_loop_if_true): + (JSC::JITStubs::cti_op_load_varargs): + (JSC::JITStubs::cti_op_negate): + (JSC::JITStubs::cti_op_resolve_base): + (JSC::JITStubs::cti_op_resolve_skip): + (JSC::JITStubs::cti_op_resolve_global): + (JSC::JITStubs::cti_op_div): + (JSC::JITStubs::cti_op_pre_dec): + (JSC::JITStubs::cti_op_jless): + (JSC::JITStubs::cti_op_not): + (JSC::JITStubs::cti_op_jtrue): + (JSC::JITStubs::cti_op_post_inc): + (JSC::JITStubs::cti_op_eq): + (JSC::JITStubs::cti_op_lshift): + (JSC::JITStubs::cti_op_bitand): + (JSC::JITStubs::cti_op_rshift): + (JSC::JITStubs::cti_op_bitnot): + (JSC::JITStubs::cti_op_resolve_with_base): + (JSC::JITStubs::cti_op_new_func_exp): + (JSC::JITStubs::cti_op_mod): + (JSC::JITStubs::cti_op_less): + (JSC::JITStubs::cti_op_neq): + (JSC::JITStubs::cti_op_post_dec): + (JSC::JITStubs::cti_op_urshift): + (JSC::JITStubs::cti_op_bitxor): + (JSC::JITStubs::cti_op_new_regexp): + (JSC::JITStubs::cti_op_bitor): + (JSC::JITStubs::cti_op_call_eval): + (JSC::JITStubs::cti_op_throw): + (JSC::JITStubs::cti_op_get_pnames): + (JSC::JITStubs::cti_op_next_pname): + (JSC::JITStubs::cti_op_push_scope): + (JSC::JITStubs::cti_op_pop_scope): + (JSC::JITStubs::cti_op_typeof): + (JSC::JITStubs::cti_op_is_undefined): + (JSC::JITStubs::cti_op_is_boolean): + (JSC::JITStubs::cti_op_is_number): + (JSC::JITStubs::cti_op_is_string): + (JSC::JITStubs::cti_op_is_object): + (JSC::JITStubs::cti_op_is_function): + (JSC::JITStubs::cti_op_stricteq): + (JSC::JITStubs::cti_op_to_primitive): + (JSC::JITStubs::cti_op_strcat): + (JSC::JITStubs::cti_op_nstricteq): + (JSC::JITStubs::cti_op_to_jsnumber): + (JSC::JITStubs::cti_op_in): + (JSC::JITStubs::cti_op_push_new_scope): + (JSC::JITStubs::cti_op_jmp_scopes): + (JSC::JITStubs::cti_op_put_by_index): + (JSC::JITStubs::cti_op_switch_imm): + (JSC::JITStubs::cti_op_switch_char): + (JSC::JITStubs::cti_op_switch_string): + (JSC::JITStubs::cti_op_del_by_val): + (JSC::JITStubs::cti_op_put_getter): + (JSC::JITStubs::cti_op_put_setter): + (JSC::JITStubs::cti_op_new_error): + (JSC::JITStubs::cti_op_debug): + (JSC::JITStubs::cti_vm_throw): + * jit/JITStubs.h: + (JSC::): + +2009-05-06 Gavin Barraclough + + Reviewed by Maciej Stachowiak & Darin Adler. + + Improve string concatenation (as coded in JS as a sequence of adds). + + Detect patterns corresponding to string concatenation, and change the bytecode + generation to emit a new op_strcat instruction. By handling the full set of + additions within a single function we do not need allocate JSString wrappers + for intermediate results, and we can calculate the size of the output string + prior to allocating storage, in order to prevent reallocation of the buffer. + + 1.5%-2% progression on Sunspider, largely due to a 30% progression on date-format-xparb. + + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::dump): + Add new opcodes. + * bytecode/Opcode.h: + Add new opcodes. + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::emitStrcat): + (JSC::BytecodeGenerator::emitToPrimitive): + Add generation of new opcodes. + * bytecompiler/BytecodeGenerator.h: + Add generation of new opcodes. + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): + Add implmentation of new opcodes. + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + (JSC::JIT::privateCompileSlowCases): + Add implmentation of new opcodes. + * jit/JITStubs.cpp: + (JSC::JITStubs::cti_op_to_primitive): + (JSC::JITStubs::cti_op_strcat): + Add implmentation of new opcodes. + * jit/JITStubs.h: + Add implmentation of new opcodes. + * parser/Nodes.cpp: + (JSC::BinaryOpNode::emitStrcat): + (JSC::BinaryOpNode::emitBytecode): + (JSC::ReadModifyResolveNode::emitBytecode): + Add generation of new opcodes. + * parser/Nodes.h: + (JSC::ExpressionNode::): + (JSC::AddNode::): + Add methods to allow identification of add nodes. + * parser/ResultType.h: + (JSC::ResultType::definitelyIsString): + (JSC::ResultType::forAdd): + Fix error in detection of adds that will produce string results. + * runtime/Operations.h: + (JSC::concatenateStrings): + Add implmentation of new opcodes. + * runtime/UString.cpp: + (JSC::UString::appendNumeric): + Add methods to append numbers to an existing string. + * runtime/UString.h: + (JSC::UString::Rep::createEmptyBuffer): + (JSC::UString::BaseString::BaseString): + Add support for creating an empty string with a non-zero capacity available in the BaseString. + +2009-05-06 Darin Adler + + Reviewed by Sam Weinig. + + Made RefCounted::m_refCount private. + + * runtime/Structure.h: Removed addressOfCount. + * wtf/RefCounted.h: Made m_refCount private. + Added addressOfCount. + +2009-05-06 Darin Adler + + Fixed assertion seen a lot! + + * parser/Nodes.cpp: + (JSC::FunctionBodyNode::~FunctionBodyNode): Removed now-bogus assertion. + +2009-05-06 Darin Adler + + Working with Sam Weinig. + + Redo parse tree constructor optimization without breaking the Windows + build the way I did yesterday. The previous try broke the build by adding + an include of Lexer.h and all its dependencies that had to work outside + the JavaScriptCore project. + + * GNUmakefile.am: Added NodeConstructors.h. + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Ditto. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops: + Removed byteocde directory -- we no longer are trying to include Lexer.h + outside JavaScriptCore. + + * JavaScriptCore.xcodeproj/project.pbxproj: Change SegmentedVector.h + and Lexer.h back to internal files. Added NodeConstructors.h. + + * parser/Grammar.y: Added include of NodeConstructors.h. + Changed use of ConstDeclNode to use public functions. + + * parser/NodeConstructors.h: Copied from parser/Nodes.h. + Just contains the inlined constructors now. + + * parser/Nodes.cpp: Added include of NodeConstructors.h. + Moved node constructors into the header. + (JSC::FunctionBodyNode::FunctionBodyNode): Removed m_refCount + initialization. + + * parser/Nodes.h: Removed all the constructor definitions, and also + removed the JSC_FAST_CALL from them since these are all inlined, so the + calling convention is irrelevant. Made more things private. Used a data + member for operator opcodes instead of a virtual function. Removed the + special FunctionBodyNode::ref/deref functions since the default functions + are now just as fast. + + * runtime/FunctionConstructor.cpp: + (JSC::extractFunctionBody): Fixed types here so we don't typecast until + after we do type checking. + +2009-05-06 Simon Hausmann + + Reviewed by Ariya Hidayat. + + Fix the Qt build on Windows. + + * JavaScriptCore.pri: Define BUILDING_JavaScriptCore/WTF to get the meaning + of the JS_EXPORTDATA macros correct + +2009-05-06 Simon Hausmann + + Reviewed by Ariya Hidayat. + + Enable the JIT for the Qt build on Windows. + + * JavaScriptCore.pri: + +2009-05-06 Simon Hausmann + + Reviewed by Tor Arne Vestbø. + + Tweak JavaScriptCore.pri for being able to override the generated sources dir for the + generated_files target. + + * JavaScriptCore.pri: + +2009-05-06 Tor Arne Vestbø + + Reviewed by Simon Hausmann. + + Build QtWebKit as a framework on Mac + + This implies both debug and release build by default, unless + one of the --debug or --release config options are passed to + the build-webkit script. + + Frameworks can be disabled by passing CONFIG+=webkit_no_framework + to the build-webkit script. + + To be able to build both debug and release targets in parallel + we have to use separate output directories for the generated + sources, which is not optimal, but required to avoid race conditions. + + An optimization would be to only require this spit-up on Mac. + + * JavaScriptCore.pri: + * JavaScriptCore.pro: + * jsc.pro: + +2009-05-06 Tor Arne Vestbø + + Reviewed by Simon Hausmann. + + [Qt] Use $$GENERATED_SOURCES_DIR as output when running bison + + A couple of the generators left the bison output file in the source + tree, and then moved it into $$GENERATED_SOURCES_DIR, which did not + work well when building release and debug configurations in parallel. + + * JavaScriptCore.pri: + +2009-05-05 Geoffrey Garen + + Reviewed by Maciej Stachowiak. + + Simplified a bit of codegen. + + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + +2009-05-05 Geoffrey Garen + + Reviewed by Cameron Zwarich. + + Moved all the JIT stub related code into one place. + + * jit/JIT.cpp: + * jit/JIT.h: + * jit/JITCode.h: + * jit/JITStubs.cpp: + (JSC::): + * jit/JITStubs.h: + +2009-05-05 Sam Weinig + + Try to fix Windows build. + + Move Node constructor to the .cpp file. + + * parser/Nodes.cpp: + * parser/Nodes.h: + +2009-05-05 Darin Adler + + Try to fix Windows build. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: + + Try to fix Mac build. + + * JavaScriptCore.xcodeproj/project.pbxproj: Made SegmentedVector.h private. + +2009-05-05 Darin Adler + + Try to fix Mac build. + + * JavaScriptCore.xcodeproj/project.pbxproj: Made Lexer.h private. + +2009-05-05 Darin Adler + + Reviewed by Sam Weinig. + + Bug 25569: make ParserRefCounted use conventional reference counting + https://bugs.webkit.org/show_bug.cgi?id=25569 + + SunSpider speedup of about 1.6%. + + * JavaScriptCore.exp: Updated. + + * parser/Nodes.cpp: + (JSC::NodeReleaser::releaseAllNodes): ALWAYS_INLINE. + (JSC::NodeReleaser::adopt): Ditto. + (JSC::ParserRefCounted::ParserRefCounted): Removed most of the code. + Add the object to a Vector that gets cleared after parsing. + (JSC::ParserRefCounted::~ParserRefCounted): Removed most of the code. + + * parser/Nodes.h: Made ParserRefCounted inherit from RefCounted and + made inline versions of the constructor and destructor. Made the + Node constructor inline. + + * parser/Parser.cpp: + (JSC::Parser::parse): Call globalData->parserObjects.shrink(0) after + parsing, where it used to call ParserRefCounted::deleteNewObjects. + + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): Eliminated code to manage the + newParserObjects and parserObjectExtraRefCounts. + (JSC::JSGlobalData::~JSGlobalData): Ditto. + + * runtime/JSGlobalData.h: Replaced the HashSet and HashCountedSet + with a Vector. + + * wtf/PassRefPtr.h: + (WTF::PassRefPtr::~PassRefPtr): The most common thing to do with a + PassRefPtr in hot code is to pass it and then destroy it once it's + set to zero. Help the optimizer by telling it that's true. + +2009-05-05 Xan Lopez and Gustavo Noronha Silva + + Reviewed by Oliver Hunt. + + Disable the NativeFunctionWrapper for all non-Mac ports for now, + as it is also crashing on Linux/x86. + + * runtime/NativeFunctionWrapper.h: + +2009-05-05 Steve Falkenburg + + Fix build. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: + +2009-05-05 Oliver Hunt + + Reviewed by Maciej Stachowiak. + + Expose toThisObject for the DOM Window + + * JavaScriptCore.exp: + +2009-05-05 Oliver Hunt + + Reviewed by NOBODY (Make windows go again until i work out the + accursed calling convention). + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * jit/JIT.cpp: + * runtime/NativeFunctionWrapper.h: + +2009-05-05 Oliver Hunt + + Reviewed by NOBODY (Fix windows debug builds). + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: + +2009-05-05 Oliver Hunt + + Reviewed by NOBODY (Hopefully the last fix). + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + +2009-05-05 Oliver Hunt + + Reviewed by NOBODY (Fix the build fix caused by a different build fix). + + * parser/Nodes.cpp: + * parser/Nodes.h: + +2009-05-05 Oliver Hunt + + Reviewed by NOBODY (No idea how my changes could have broken these). + + * runtime/DatePrototype.cpp: + * runtime/RegExpObject.cpp: + +2009-05-05 Oliver Hunt + + Reviewed by NOBODY (Why should i expect msvc to list all the errors in a file?). + + * parser/Nodes.cpp: + +2009-05-05 Oliver Hunt + + Reviewed by NOBODY (Fix warning, and another missing include). + + * jit/JIT.cpp: + * parser/Nodes.h: + +2009-05-05 Oliver Hunt + + Reviewed by NOBODY (More build fixes). + + * runtime/ErrorPrototype.cpp: + * runtime/JSGlobalObject.cpp: + * runtime/NumberPrototype.cpp: + * runtime/ObjectPrototype.cpp: + * runtime/StringConstructor.cpp: + +2009-05-05 Oliver Hunt + + Reviewed by NOBODY (Will the fixes never end?). + + * runtime/FunctionPrototype.h: + * runtime/Lookup.cpp: + +2009-05-05 Oliver Hunt + + Reviewed by NOBODY (More build fixes). + + * jit/JIT.cpp: + +2009-05-05 Oliver Hunt + + Reviewed by NOBODY (More build fixing). + + * runtime/CallData.h: + +2009-05-05 Oliver Hunt + + Reviewed by NOBODY (Build fix). + + * runtime/ArrayConstructor.cpp: + * runtime/BooleanPrototype.cpp: + * runtime/DateConstructor.cpp: + * runtime/Error.cpp: + * runtime/ObjectConstructor.cpp: + * runtime/RegExpPrototype.cpp: + +2009-05-05 Oliver Hunt + + Reviewed by NOBODY (Buildfix). + + Add missing file + + * runtime/NativeFunctionWrapper.h: Copied from JavaScriptCore/jit/ExecutableAllocator.cpp. + +2009-05-05 Oliver Hunt + + Reviewed by Gavin Barraclough. + + Bug 25559: Improve native function call performance + + + In order to cache calls to native functions we now make the standard + prototype functions use a small assembly thunk that converts the JS + calling convention into the native calling convention. As this is + only beneficial in the JIT we use the NativeFunctionWrapper typedef + to alternate between PrototypeFunction and JSFunction to keep the + code sane. This change from PrototypeFunction to NativeFunctionWrapper + is the bulk of this patch. + + * JavaScriptCore.exp: + * JavaScriptCore.xcodeproj/project.pbxproj: + * assembler/MacroAssemblerX86Common.h: + (JSC::MacroAssemblerX86Common::call): + * assembler/MacroAssemblerX86_64.h: + (JSC::MacroAssemblerX86_64::addPtr): + * assembler/X86Assembler.h: + (JSC::X86Assembler::leaq_mr): + (JSC::X86Assembler::call_m): + * interpreter/Interpreter.cpp: + (JSC::Interpreter::execute): + (JSC::Interpreter::prepareForRepeatCall): + * jit/JIT.cpp: + (JSC::JIT::privateCompileCTIMachineTrampolines): + * jit/JIT.h: + (JSC::JIT::compileCTIMachineTrampolines): + * jit/JITCall.cpp: + (JSC::JIT::linkCall): + (JSC::JIT::compileOpCallInitializeCallFrame): + (JSC::JIT::compileOpCall): + * jit/JITCode.h: + (JSC::JITCode::operator bool): + * jit/JITInlineMethods.h: + (JSC::JIT::emitGetFromCallFrameHeader): + (JSC::JIT::emitGetFromCallFrameHeader32): + * jit/JITStubs.cpp: + (JSC::JITStubs::JITStubs): + (JSC::JITStubs::cti_op_call_JSFunction): + (JSC::JITStubs::cti_vm_dontLazyLinkCall): + (JSC::JITStubs::cti_vm_lazyLinkCall): + (JSC::JITStubs::cti_op_construct_JSConstruct): + * jit/JITStubs.h: + (JSC::JITStubs::ctiNativeCallThunk): + * jsc.cpp: + (GlobalObject::GlobalObject): + * parser/Nodes.cpp: + (JSC::FunctionBodyNode::FunctionBodyNode): + (JSC::FunctionBodyNode::createNativeThunk): + (JSC::FunctionBodyNode::generateJITCode): + * parser/Nodes.h: + (JSC::FunctionBodyNode::): + (JSC::FunctionBodyNode::generatedJITCode): + (JSC::FunctionBodyNode::jitCode): + * profiler/Profiler.cpp: + (JSC::Profiler::createCallIdentifier): + * runtime/ArgList.h: + * runtime/ArrayPrototype.cpp: + (JSC::isNumericCompareFunction): + * runtime/BooleanPrototype.cpp: + (JSC::BooleanPrototype::BooleanPrototype): + * runtime/DateConstructor.cpp: + (JSC::DateConstructor::DateConstructor): + * runtime/ErrorPrototype.cpp: + (JSC::ErrorPrototype::ErrorPrototype): + * runtime/FunctionPrototype.cpp: + (JSC::FunctionPrototype::addFunctionProperties): + (JSC::functionProtoFuncToString): + * runtime/FunctionPrototype.h: + * runtime/JSFunction.cpp: + (JSC::JSFunction::JSFunction): + (JSC::JSFunction::~JSFunction): + (JSC::JSFunction::mark): + (JSC::JSFunction::getCallData): + (JSC::JSFunction::call): + (JSC::JSFunction::argumentsGetter): + (JSC::JSFunction::callerGetter): + (JSC::JSFunction::lengthGetter): + (JSC::JSFunction::getOwnPropertySlot): + (JSC::JSFunction::put): + (JSC::JSFunction::deleteProperty): + (JSC::JSFunction::getConstructData): + (JSC::JSFunction::construct): + * runtime/JSFunction.h: + (JSC::JSFunction::JSFunction): + (JSC::JSFunction::setScope): + (JSC::JSFunction::scope): + (JSC::JSFunction::isHostFunction): + (JSC::JSFunction::scopeChain): + (JSC::JSFunction::clearScopeChain): + (JSC::JSFunction::setScopeChain): + (JSC::JSFunction::nativeFunction): + (JSC::JSFunction::setNativeFunction): + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::~JSGlobalData): + (JSC::JSGlobalData::createNativeThunk): + * runtime/JSGlobalData.h: + (JSC::JSGlobalData::nativeFunctionThunk): + * runtime/JSGlobalObject.cpp: + (JSC::JSGlobalObject::reset): + * runtime/JSGlobalObject.h: + * runtime/Lookup.cpp: + (JSC::setUpStaticFunctionSlot): + * runtime/Lookup.h: + * runtime/NumberPrototype.cpp: + (JSC::NumberPrototype::NumberPrototype): + * runtime/ObjectPrototype.cpp: + (JSC::ObjectPrototype::ObjectPrototype): + * runtime/RegExpPrototype.cpp: + (JSC::RegExpPrototype::RegExpPrototype): + * runtime/StringConstructor.cpp: + (JSC::StringConstructor::StringConstructor): + +2009-05-05 Gavin Barraclough + + Reviewed by Oliver Hunt. + + For convenience, let the sampling flags tool clear multiple flags at once. + + * jsc.cpp: + (GlobalObject::GlobalObject): + (functionSetSamplingFlags): + (functionClearSamplingFlags): + +2009-05-04 Maciej Stachowiak + + Rubber stamped by Gavin. + + - inline Vector::resize for a ~1.5% speedup on string-tagcloud + + * wtf/Vector.h: + (WTF::Vector::resize): Inline + +2009-05-03 Steve Falkenburg + + Windows build fix. + + * JavaScriptCore.vcproj/JavaScriptCoreSubmit.sln: + +2009-05-03 Mark Rowe + + Fix the 64-bit build. + + * API/APICast.h: + (toJS): + (toRef): + * runtime/JSNumberCell.cpp: + (JSC::jsAPIMangledNumber): + * runtime/JSNumberCell.h: + +2009-05-02 Sam Weinig + + Roll JSC API number marshaling back in one last time (I hope). + +2009-05-03 Sam Weinig + + Roll JSC API number marshaling back out. It still breaks windows. + +2009-05-03 Sam Weinig + + Roll JSC API number marshaling back in. + +2009-05-02 Darin Adler + + Reviewed by Maciej Stachowiak. + + Bug 25519: streamline lexer by handling BOMs differently + https://bugs.webkit.org/show_bug.cgi?id=25519 + + Roughly 1% faster SunSpider. + + * parser/Grammar.y: Tweak formatting a bit. + + * parser/Lexer.cpp: + (JSC::Lexer::Lexer): Remove unnnecessary initialization of data members + that are set up by setCode. + (JSC::Lexer::currentOffset): Added. Used where the old code would look at + m_currentOffset. + (JSC::Lexer::shift1): Replaces the old shift function. No longer does anything + to handle BOM characters. + (JSC::Lexer::shift2): Ditto. + (JSC::Lexer::shift3): Ditto. + (JSC::Lexer::shift4): Ditto. + (JSC::Lexer::setCode): Updated for name change from yylineno to m_line. + Removed now-unused m_eatNextIdentifier, m_stackToken, and m_restrKeyword. + Replaced m_skipLF and m_skipCR with m_skipLineEnd. Replaced the old + m_length with m_codeEnd and m_currentOffset with m_codeStart. Added code + to scan for a BOM character and call copyCodeWithoutBOMs() if we find any. + (JSC::Lexer::copyCodeWithoutBOMs): Added. + (JSC::Lexer::nextLine): Updated for name change from yylineno to m_line. + (JSC::Lexer::makeIdentifier): Moved up higher in the file. + (JSC::Lexer::matchPunctuator): Moved up higher in the file and changed to + use a switch statement instead of just if statements. + (JSC::Lexer::isLineTerminator): Moved up higher in the file and changed to + have fewer branches. + (JSC::Lexer::lastTokenWasRestrKeyword): Added. This replaces the old + m_restrKeyword boolean. + (JSC::Lexer::isIdentStart): Moved up higher in the file. Changed to use + fewer branches in the ASCII but not identifier case. + (JSC::Lexer::isIdentPart): Ditto. + (JSC::Lexer::singleEscape): Moved up higher in the file. + (JSC::Lexer::convertOctal): Moved up higher in the file. + (JSC::Lexer::convertHex): Moved up higher in the file. Changed to use + toASCIIHexValue instead of rolling our own here. + (JSC::Lexer::convertUnicode): Ditto. + (JSC::Lexer::record8): Moved up higher in the file. + (JSC::Lexer::record16): Moved up higher in the file. + (JSC::Lexer::lex): Changed type of stringType to int. Replaced m_skipLF + and m_skipCR with m_skipLineEnd, which requires fewer branches in the + main lexer loop. Use currentOffset instead of m_currentOffset. Removed + unneeded m_stackToken. Use isASCIIDigit instead of isDecimalDigit. + Split out the two cases for InIdentifierOrKeyword and InIdentifier. + Added special case tight loops for identifiers and other simple states. + Removed a branch from the code that sets m_atLineStart to false using goto. + Streamlined the number-handling code so we don't check for the same types + twice for non-numeric cases and don't add a null to m_buffer8 when it's + not being used. Removed m_eatNextIdentifier, which wasn't working anyway, + and m_restrKeyword, which is redundant with m_lastToken. Set the + m_delimited flag without using a branch. + (JSC::Lexer::scanRegExp): Tweaked style a bit. + (JSC::Lexer::clear): Clear m_codeWithoutBOMs so we don't use memory after + parsing. Clear out UString objects in the more conventional way. + (JSC::Lexer::sourceCode): Made this no-longer inline since it has more + work to do in the case where we stripped BOMs. + + * parser/Lexer.h: Renamed yylineno to m_lineNumber. Removed convertHex + function, which is the same as toASCIIHexValue. Removed isHexDigit + function, which is the same as isASCIIHedDigit. Replaced shift with four + separate shift functions. Removed isWhiteSpace function that passes + m_current, instead just passing m_current explicitly. Removed isOctalDigit, + which is the same as isASCIIOctalDigit. Eliminated unused arguments from + matchPunctuator. Added copyCoodeWithoutBOMs and currentOffset. Moved the + makeIdentifier function out of the header. Added lastTokenWasRestrKeyword + function. Added new constants for m_skipLineEnd. Removed unused yycolumn, + m_restrKeyword, m_skipLF, m_skipCR, m_eatNextIdentifier, m_stackToken, + m_position, m_length, m_currentOffset, m_nextOffset1, m_nextOffset2, + m_nextOffset3. Added m_skipLineEnd, m_codeStart, m_codeEnd, and + m_codeWithoutBOMs. + + * parser/SourceProvider.h: Added hasBOMs function. In the future this can + be used to tell the lexer about strings known not to have BOMs. + + * runtime/JSGlobalObjectFunctions.cpp: + (JSC::globalFuncUnescape): Changed to use isASCIIHexDigit. + + * wtf/ASCIICType.h: Added using statements to match the design of the + other WTF headers. + +2009-05-02 Ada Chan + + Fix windows build (when doing a clean build) + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: + +2009-05-02 Geoffrey Garen + + Reviewed by Sam Weinig. + + Simplified null-ish JSValues. + + Replaced calls to noValue() with calls to JSValue() (which is what + noValue() returned). Removed noValue(). + + Replaced almost all uses of jsImpossibleValue() with uses of JSValue(). + Its one remaining use is for construction of hash table deleted values. + For that specific task, I made a new, private constructor with a special + tag. Removed jsImpossibleValue(). + + Removed "JSValue()" initialiazers, since default construction happens... + by default. + + * API/JSCallbackObjectFunctions.h: + (JSC::::call): + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::emitLoad): + * bytecompiler/BytecodeGenerator.h: + * debugger/DebuggerCallFrame.cpp: + (JSC::DebuggerCallFrame::evaluate): + * debugger/DebuggerCallFrame.h: + (JSC::DebuggerCallFrame::DebuggerCallFrame): + * interpreter/CallFrame.h: + (JSC::ExecState::clearException): + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): + (JSC::Interpreter::retrieveLastCaller): + * interpreter/Register.h: + (JSC::Register::Register): + * jit/JITCall.cpp: + (JSC::JIT::unlinkCall): + (JSC::JIT::compileOpCallInitializeCallFrame): + (JSC::JIT::compileOpCall): + * jit/JITStubs.cpp: + (JSC::JITStubs::cti_op_call_eval): + (JSC::JITStubs::cti_vm_throw): + * profiler/Profiler.cpp: + (JSC::Profiler::willExecute): + (JSC::Profiler::didExecute): + * runtime/ArrayPrototype.cpp: + (JSC::getProperty): + * runtime/Completion.cpp: + (JSC::evaluate): + * runtime/Completion.h: + (JSC::Completion::Completion): + * runtime/GetterSetter.cpp: + (JSC::GetterSetter::getPrimitiveNumber): + * runtime/JSArray.cpp: + (JSC::JSArray::putSlowCase): + (JSC::JSArray::deleteProperty): + (JSC::JSArray::increaseVectorLength): + (JSC::JSArray::setLength): + (JSC::JSArray::pop): + (JSC::JSArray::sort): + (JSC::JSArray::compactForSorting): + * runtime/JSCell.cpp: + (JSC::JSCell::getJSNumber): + * runtime/JSCell.h: + (JSC::JSValue::getJSNumber): + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): + * runtime/JSImmediate.h: + (JSC::JSImmediate::fromNumberOutsideIntegerRange): + (JSC::JSImmediate::from): + * runtime/JSNumberCell.cpp: + (JSC::jsNumberCell): + * runtime/JSObject.cpp: + (JSC::callDefaultValueFunction): + * runtime/JSObject.h: + (JSC::JSObject::getDirect): + * runtime/JSPropertyNameIterator.cpp: + (JSC::JSPropertyNameIterator::toPrimitive): + * runtime/JSPropertyNameIterator.h: + (JSC::JSPropertyNameIterator::next): + * runtime/JSValue.h: + (JSC::JSValue::): + (JSC::JSValueHashTraits::constructDeletedValue): + (JSC::JSValueHashTraits::isDeletedValue): + (JSC::JSValue::JSValue): + * runtime/JSWrapperObject.h: + (JSC::JSWrapperObject::JSWrapperObject): + * runtime/Operations.h: + (JSC::resolveBase): + * runtime/PropertySlot.h: + (JSC::PropertySlot::clearBase): + (JSC::PropertySlot::clearValue): + +2009-05-02 Maciej Stachowiak + + Reviewed by Cameron Zwarich. + + - speed up the lexer in various ways + + ~2% command-line SunSpider speedup + + * parser/Lexer.cpp: + (JSC::Lexer::setCode): Moved below shift() so it can inline. + (JSC::Lexer::scanRegExp): Use resize(0) instead of clear() on Vectors, since the intent + here is not to free the underlying buffer. + (JSC::Lexer::lex): ditto; also, change the loop logic a bit for the main lexing loop + to avoid branching on !m_done twice per iteration. Now we only check it once. + (JSC::Lexer::shift): Make this ALWAYS_INLINE and tag an unusual branch as UNLIKELY + * parser/Lexer.h: + (JSC::Lexer::makeIdentifier): force to be ALWAYS_INLINE + * wtf/Vector.h: + (WTF::::append): force to be ALWAYS_INLINE (may have helped in ways other than parsing but it wasn't + getting inlined in a hot code path in the lexer) + +2009-05-01 Steve Falkenburg + + Windows build fix. + + * JavaScriptCore.vcproj/JavaScriptCore.make: + +2009-05-01 Sam Weinig + + Fix 64bit build. + + * runtime/JSNumberCell.h: + (JSC::JSValue::JSValue): + * runtime/JSValue.h: + (JSC::jsNumber): + +2009-05-01 Sam Weinig + + Roll out JavaScriptCore API number marshaling. + + * API/APICast.h: + (toJS): + (toRef): + * API/JSBase.cpp: + (JSEvaluateScript): + (JSCheckScriptSyntax): + * API/JSCallbackConstructor.cpp: + (JSC::constructJSCallback): + * API/JSCallbackFunction.cpp: + (JSC::JSCallbackFunction::call): + * API/JSCallbackObjectFunctions.h: + (JSC::::getOwnPropertySlot): + (JSC::::put): + (JSC::::deleteProperty): + (JSC::::construct): + (JSC::::hasInstance): + (JSC::::call): + (JSC::::toNumber): + (JSC::::toString): + (JSC::::staticValueGetter): + (JSC::::callbackGetter): + * API/JSObjectRef.cpp: + (JSObjectMakeFunction): + (JSObjectMakeArray): + (JSObjectMakeDate): + (JSObjectMakeError): + (JSObjectMakeRegExp): + (JSObjectGetPrototype): + (JSObjectSetPrototype): + (JSObjectGetProperty): + (JSObjectSetProperty): + (JSObjectGetPropertyAtIndex): + (JSObjectSetPropertyAtIndex): + (JSObjectDeleteProperty): + (JSObjectCallAsFunction): + (JSObjectCallAsConstructor): + * API/JSValueRef.cpp: + (JSValueGetType): + (JSValueIsUndefined): + (JSValueIsNull): + (JSValueIsBoolean): + (JSValueIsNumber): + (JSValueIsString): + (JSValueIsObject): + (JSValueIsObjectOfClass): + (JSValueIsEqual): + (JSValueIsStrictEqual): + (JSValueIsInstanceOfConstructor): + (JSValueMakeUndefined): + (JSValueMakeNull): + (JSValueMakeBoolean): + (JSValueMakeNumber): + (JSValueMakeString): + (JSValueToBoolean): + (JSValueToNumber): + (JSValueToStringCopy): + (JSValueToObject): + (JSValueProtect): + (JSValueUnprotect): + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: + * runtime/JSNumberCell.cpp: + * runtime/JSNumberCell.h: + * runtime/JSValue.h: + +2009-05-01 Sam Weinig + + Fix windows build. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: + +2009-05-01 Sam Weinig + + Fix the build. + + * JavaScriptCore.exp: + +2009-05-01 Sam Weinig + + Reviewed by Geoffrey "Too Far!" Garen. + + Move JS number construction into JSValue. + + * runtime/JSImmediate.h: + * runtime/JSNumberCell.h: + (JSC::JSValue::JSValue): + * runtime/JSValue.h: + (JSC::jsNumber): + +2009-05-01 Sam Weinig + + Reviewed by Geoff "The Minneapolis" Garen. + + Add mechanism to vend heap allocated JS numbers to JavaScriptCore API clients with a + representation that is independent of the number representation in the VM. + - Numbers leaving the interpreter are converted to a tagged JSNumberCell. + - The numbers coming into the interpreter (asserted to be the tagged JSNumberCell) are + converted back to the VM's internal number representation. + + * API/APICast.h: + (toJS): + (toRef): + * API/JSBase.cpp: + (JSEvaluateScript): + (JSCheckScriptSyntax): + * API/JSCallbackConstructor.cpp: + (JSC::constructJSCallback): + * API/JSCallbackFunction.cpp: + (JSC::JSCallbackFunction::call): + * API/JSCallbackObjectFunctions.h: + (JSC::::getOwnPropertySlot): + (JSC::::put): + (JSC::::deleteProperty): + (JSC::::construct): + (JSC::::hasInstance): + (JSC::::call): + (JSC::::toNumber): + (JSC::::toString): + (JSC::::staticValueGetter): + (JSC::::callbackGetter): + * API/JSObjectRef.cpp: + (JSObjectMakeFunction): + (JSObjectMakeArray): + (JSObjectMakeDate): + (JSObjectMakeError): + (JSObjectMakeRegExp): + (JSObjectGetPrototype): + (JSObjectSetPrototype): + (JSObjectGetProperty): + (JSObjectSetProperty): + (JSObjectGetPropertyAtIndex): + (JSObjectSetPropertyAtIndex): + (JSObjectDeleteProperty): + (JSObjectCallAsFunction): + (JSObjectCallAsConstructor): + * API/JSValueRef.cpp: + (JSValueGetType): + (JSValueIsUndefined): + (JSValueIsNull): + (JSValueIsBoolean): + (JSValueIsNumber): + (JSValueIsString): + (JSValueIsObject): + (JSValueIsObjectOfClass): + (JSValueIsEqual): + (JSValueIsStrictEqual): + (JSValueIsInstanceOfConstructor): + (JSValueMakeUndefined): + (JSValueMakeNull): + (JSValueMakeBoolean): + (JSValueMakeNumber): + (JSValueMakeString): + (JSValueToBoolean): + (JSValueToNumber): + (JSValueToStringCopy): + (JSValueToObject): + (JSValueProtect): + (JSValueUnprotect): + * runtime/JSNumberCell.cpp: + (JSC::jsAPIMangledNumber): + * runtime/JSNumberCell.h: + (JSC::JSNumberCell::isAPIMangledNumber): + (JSC::JSNumberCell::): + (JSC::JSNumberCell::JSNumberCell): + (JSC::JSValue::isAPIMangledNumber): + * runtime/JSValue.h: + +2009-05-01 Geoffrey Garen + + Windows build fix take 6. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + +2009-05-01 Geoffrey Garen + + Windows build fix take 5. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: + +2009-05-01 Geoffrey Garen + + Windows build fix take 4. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: + +2009-05-01 Geoffrey Garen + + Windows build fix take 3. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: + +2009-05-01 Geoffrey Garen + + Windows build fix take 2. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + +2009-05-01 Geoffrey Garen + + Windows build fix take 1. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: + +2009-05-01 Geoffrey Garen + + Rubber Stamped by Sam Weinig. + + Renamed JSValuePtr => JSValue. + + * API/APICast.h: + (toJS): + (toRef): + * API/JSCallbackConstructor.h: + (JSC::JSCallbackConstructor::createStructure): + * API/JSCallbackFunction.cpp: + (JSC::JSCallbackFunction::call): + * API/JSCallbackFunction.h: + (JSC::JSCallbackFunction::createStructure): + * API/JSCallbackObject.h: + (JSC::JSCallbackObject::createStructure): + * API/JSCallbackObjectFunctions.h: + (JSC::::asCallbackObject): + (JSC::::put): + (JSC::::hasInstance): + (JSC::::call): + (JSC::::staticValueGetter): + (JSC::::staticFunctionGetter): + (JSC::::callbackGetter): + * API/JSContextRef.cpp: + * API/JSObjectRef.cpp: + (JSObjectMakeConstructor): + (JSObjectSetPrototype): + (JSObjectGetProperty): + (JSObjectSetProperty): + (JSObjectGetPropertyAtIndex): + (JSObjectSetPropertyAtIndex): + * API/JSValueRef.cpp: + (JSValueGetType): + (JSValueIsUndefined): + (JSValueIsNull): + (JSValueIsBoolean): + (JSValueIsNumber): + (JSValueIsString): + (JSValueIsObject): + (JSValueIsObjectOfClass): + (JSValueIsEqual): + (JSValueIsStrictEqual): + (JSValueIsInstanceOfConstructor): + (JSValueToBoolean): + (JSValueToNumber): + (JSValueToStringCopy): + (JSValueToObject): + (JSValueProtect): + (JSValueUnprotect): + * JavaScriptCore.exp: + * bytecode/CodeBlock.cpp: + (JSC::valueToSourceString): + (JSC::constantName): + (JSC::CodeBlock::dump): + * bytecode/CodeBlock.h: + (JSC::CodeBlock::getConstant): + (JSC::CodeBlock::addUnexpectedConstant): + (JSC::CodeBlock::unexpectedConstant): + * bytecode/EvalCodeCache.h: + (JSC::EvalCodeCache::get): + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::addConstant): + (JSC::BytecodeGenerator::addUnexpectedConstant): + (JSC::BytecodeGenerator::emitLoad): + (JSC::BytecodeGenerator::emitGetScopedVar): + (JSC::BytecodeGenerator::emitPutScopedVar): + (JSC::BytecodeGenerator::emitNewError): + (JSC::keyForImmediateSwitch): + * bytecompiler/BytecodeGenerator.h: + (JSC::BytecodeGenerator::JSValueHashTraits::constructDeletedValue): + (JSC::BytecodeGenerator::JSValueHashTraits::isDeletedValue): + * debugger/Debugger.cpp: + (JSC::evaluateInGlobalCallFrame): + * debugger/Debugger.h: + * debugger/DebuggerActivation.cpp: + (JSC::DebuggerActivation::put): + (JSC::DebuggerActivation::putWithAttributes): + (JSC::DebuggerActivation::lookupGetter): + (JSC::DebuggerActivation::lookupSetter): + * debugger/DebuggerActivation.h: + (JSC::DebuggerActivation::createStructure): + * debugger/DebuggerCallFrame.cpp: + (JSC::DebuggerCallFrame::evaluate): + * debugger/DebuggerCallFrame.h: + (JSC::DebuggerCallFrame::DebuggerCallFrame): + (JSC::DebuggerCallFrame::exception): + * interpreter/CachedCall.h: + (JSC::CachedCall::CachedCall): + (JSC::CachedCall::call): + (JSC::CachedCall::setThis): + (JSC::CachedCall::setArgument): + * interpreter/CallFrame.cpp: + (JSC::CallFrame::thisValue): + (JSC::CallFrame::dumpCaller): + * interpreter/CallFrame.h: + (JSC::ExecState::setException): + (JSC::ExecState::exception): + (JSC::ExecState::exceptionSlot): + * interpreter/CallFrameClosure.h: + (JSC::CallFrameClosure::setArgument): + * interpreter/Interpreter.cpp: + (JSC::Interpreter::resolve): + (JSC::Interpreter::resolveSkip): + (JSC::Interpreter::resolveGlobal): + (JSC::Interpreter::resolveBase): + (JSC::Interpreter::resolveBaseAndProperty): + (JSC::Interpreter::resolveBaseAndFunc): + (JSC::isNotObject): + (JSC::Interpreter::callEval): + (JSC::Interpreter::unwindCallFrame): + (JSC::Interpreter::throwException): + (JSC::Interpreter::execute): + (JSC::Interpreter::prepareForRepeatCall): + (JSC::Interpreter::createExceptionScope): + (JSC::Interpreter::tryCachePutByID): + (JSC::Interpreter::tryCacheGetByID): + (JSC::Interpreter::privateExecute): + (JSC::Interpreter::retrieveArguments): + (JSC::Interpreter::retrieveCaller): + (JSC::Interpreter::retrieveLastCaller): + * interpreter/Interpreter.h: + * interpreter/Register.h: + (JSC::Register::): + (JSC::Register::Register): + (JSC::Register::jsValue): + * jit/JIT.cpp: + (JSC::): + (JSC::JIT::privateCompileMainPass): + * jit/JIT.h: + * jit/JITArithmetic.cpp: + (JSC::JIT::compileFastArith_op_mod): + * jit/JITCall.cpp: + (JSC::JIT::unlinkCall): + (JSC::JIT::compileOpCallInitializeCallFrame): + (JSC::JIT::compileOpCall): + * jit/JITCode.h: + (JSC::): + (JSC::JITCode::execute): + * jit/JITInlineMethods.h: + (JSC::JIT::emitGetVirtualRegister): + (JSC::JIT::getConstantOperand): + (JSC::JIT::emitPutJITStubArgFromVirtualRegister): + (JSC::JIT::emitInitRegister): + * jit/JITPropertyAccess.cpp: + (JSC::JIT::privateCompilePutByIdTransition): + (JSC::JIT::patchGetByIdSelf): + (JSC::JIT::patchPutByIdReplace): + (JSC::JIT::privateCompileGetByIdSelf): + (JSC::JIT::privateCompileGetByIdProto): + (JSC::JIT::privateCompileGetByIdSelfList): + (JSC::JIT::privateCompileGetByIdProtoList): + (JSC::JIT::privateCompileGetByIdChainList): + (JSC::JIT::privateCompileGetByIdChain): + (JSC::JIT::privateCompilePutByIdReplace): + * jit/JITStubs.cpp: + (JSC::JITStubs::tryCachePutByID): + (JSC::JITStubs::tryCacheGetByID): + (JSC::JITStubs::cti_op_convert_this): + (JSC::JITStubs::cti_op_add): + (JSC::JITStubs::cti_op_pre_inc): + (JSC::JITStubs::cti_op_loop_if_less): + (JSC::JITStubs::cti_op_loop_if_lesseq): + (JSC::JITStubs::cti_op_get_by_id_generic): + (JSC::JITStubs::cti_op_get_by_id): + (JSC::JITStubs::cti_op_get_by_id_second): + (JSC::JITStubs::cti_op_get_by_id_self_fail): + (JSC::JITStubs::cti_op_get_by_id_proto_list): + (JSC::JITStubs::cti_op_get_by_id_proto_list_full): + (JSC::JITStubs::cti_op_get_by_id_proto_fail): + (JSC::JITStubs::cti_op_get_by_id_array_fail): + (JSC::JITStubs::cti_op_get_by_id_string_fail): + (JSC::JITStubs::cti_op_instanceof): + (JSC::JITStubs::cti_op_del_by_id): + (JSC::JITStubs::cti_op_mul): + (JSC::JITStubs::cti_op_call_NotJSFunction): + (JSC::JITStubs::cti_op_resolve): + (JSC::JITStubs::cti_op_construct_NotJSConstruct): + (JSC::JITStubs::cti_op_get_by_val): + (JSC::JITStubs::cti_op_get_by_val_string): + (JSC::JITStubs::cti_op_get_by_val_byte_array): + (JSC::JITStubs::cti_op_resolve_func): + (JSC::JITStubs::cti_op_sub): + (JSC::JITStubs::cti_op_put_by_val): + (JSC::JITStubs::cti_op_put_by_val_array): + (JSC::JITStubs::cti_op_put_by_val_byte_array): + (JSC::JITStubs::cti_op_lesseq): + (JSC::JITStubs::cti_op_loop_if_true): + (JSC::JITStubs::cti_op_load_varargs): + (JSC::JITStubs::cti_op_negate): + (JSC::JITStubs::cti_op_resolve_base): + (JSC::JITStubs::cti_op_resolve_skip): + (JSC::JITStubs::cti_op_resolve_global): + (JSC::JITStubs::cti_op_div): + (JSC::JITStubs::cti_op_pre_dec): + (JSC::JITStubs::cti_op_jless): + (JSC::JITStubs::cti_op_not): + (JSC::JITStubs::cti_op_jtrue): + (JSC::JITStubs::cti_op_post_inc): + (JSC::JITStubs::cti_op_eq): + (JSC::JITStubs::cti_op_lshift): + (JSC::JITStubs::cti_op_bitand): + (JSC::JITStubs::cti_op_rshift): + (JSC::JITStubs::cti_op_bitnot): + (JSC::JITStubs::cti_op_resolve_with_base): + (JSC::JITStubs::cti_op_mod): + (JSC::JITStubs::cti_op_less): + (JSC::JITStubs::cti_op_neq): + (JSC::JITStubs::cti_op_post_dec): + (JSC::JITStubs::cti_op_urshift): + (JSC::JITStubs::cti_op_bitxor): + (JSC::JITStubs::cti_op_bitor): + (JSC::JITStubs::cti_op_call_eval): + (JSC::JITStubs::cti_op_throw): + (JSC::JITStubs::cti_op_next_pname): + (JSC::JITStubs::cti_op_typeof): + (JSC::JITStubs::cti_op_is_undefined): + (JSC::JITStubs::cti_op_is_boolean): + (JSC::JITStubs::cti_op_is_number): + (JSC::JITStubs::cti_op_is_string): + (JSC::JITStubs::cti_op_is_object): + (JSC::JITStubs::cti_op_is_function): + (JSC::JITStubs::cti_op_stricteq): + (JSC::JITStubs::cti_op_nstricteq): + (JSC::JITStubs::cti_op_to_jsnumber): + (JSC::JITStubs::cti_op_in): + (JSC::JITStubs::cti_op_switch_imm): + (JSC::JITStubs::cti_op_switch_char): + (JSC::JITStubs::cti_op_switch_string): + (JSC::JITStubs::cti_op_del_by_val): + (JSC::JITStubs::cti_op_new_error): + (JSC::JITStubs::cti_vm_throw): + * jit/JITStubs.h: + * jsc.cpp: + (functionPrint): + (functionDebug): + (functionGC): + (functionVersion): + (functionRun): + (functionLoad): + (functionSetSamplingFlag): + (functionClearSamplingFlag): + (functionReadline): + (functionQuit): + * parser/Nodes.cpp: + (JSC::processClauseList): + * profiler/ProfileGenerator.cpp: + (JSC::ProfileGenerator::addParentForConsoleStart): + * profiler/Profiler.cpp: + (JSC::Profiler::willExecute): + (JSC::Profiler::didExecute): + (JSC::Profiler::createCallIdentifier): + * profiler/Profiler.h: + * runtime/ArgList.cpp: + (JSC::MarkedArgumentBuffer::slowAppend): + * runtime/ArgList.h: + (JSC::MarkedArgumentBuffer::at): + (JSC::MarkedArgumentBuffer::append): + (JSC::ArgList::ArgList): + (JSC::ArgList::at): + * runtime/Arguments.cpp: + (JSC::Arguments::put): + * runtime/Arguments.h: + (JSC::Arguments::createStructure): + (JSC::asArguments): + * runtime/ArrayConstructor.cpp: + (JSC::callArrayConstructor): + * runtime/ArrayPrototype.cpp: + (JSC::getProperty): + (JSC::putProperty): + (JSC::arrayProtoFuncToString): + (JSC::arrayProtoFuncToLocaleString): + (JSC::arrayProtoFuncJoin): + (JSC::arrayProtoFuncConcat): + (JSC::arrayProtoFuncPop): + (JSC::arrayProtoFuncPush): + (JSC::arrayProtoFuncReverse): + (JSC::arrayProtoFuncShift): + (JSC::arrayProtoFuncSlice): + (JSC::arrayProtoFuncSort): + (JSC::arrayProtoFuncSplice): + (JSC::arrayProtoFuncUnShift): + (JSC::arrayProtoFuncFilter): + (JSC::arrayProtoFuncMap): + (JSC::arrayProtoFuncEvery): + (JSC::arrayProtoFuncForEach): + (JSC::arrayProtoFuncSome): + (JSC::arrayProtoFuncReduce): + (JSC::arrayProtoFuncReduceRight): + (JSC::arrayProtoFuncIndexOf): + (JSC::arrayProtoFuncLastIndexOf): + * runtime/BooleanConstructor.cpp: + (JSC::callBooleanConstructor): + (JSC::constructBooleanFromImmediateBoolean): + * runtime/BooleanConstructor.h: + * runtime/BooleanObject.h: + (JSC::asBooleanObject): + * runtime/BooleanPrototype.cpp: + (JSC::booleanProtoFuncToString): + (JSC::booleanProtoFuncValueOf): + * runtime/CallData.cpp: + (JSC::call): + * runtime/CallData.h: + * runtime/Collector.cpp: + (JSC::Heap::protect): + (JSC::Heap::unprotect): + (JSC::Heap::heap): + * runtime/Collector.h: + * runtime/Completion.cpp: + (JSC::evaluate): + * runtime/Completion.h: + (JSC::Completion::Completion): + (JSC::Completion::value): + (JSC::Completion::setValue): + * runtime/ConstructData.cpp: + (JSC::construct): + * runtime/ConstructData.h: + * runtime/DateConstructor.cpp: + (JSC::constructDate): + (JSC::callDate): + (JSC::dateParse): + (JSC::dateNow): + (JSC::dateUTC): + * runtime/DateInstance.h: + (JSC::asDateInstance): + * runtime/DatePrototype.cpp: + (JSC::dateProtoFuncToString): + (JSC::dateProtoFuncToUTCString): + (JSC::dateProtoFuncToDateString): + (JSC::dateProtoFuncToTimeString): + (JSC::dateProtoFuncToLocaleString): + (JSC::dateProtoFuncToLocaleDateString): + (JSC::dateProtoFuncToLocaleTimeString): + (JSC::dateProtoFuncGetTime): + (JSC::dateProtoFuncGetFullYear): + (JSC::dateProtoFuncGetUTCFullYear): + (JSC::dateProtoFuncToGMTString): + (JSC::dateProtoFuncGetMonth): + (JSC::dateProtoFuncGetUTCMonth): + (JSC::dateProtoFuncGetDate): + (JSC::dateProtoFuncGetUTCDate): + (JSC::dateProtoFuncGetDay): + (JSC::dateProtoFuncGetUTCDay): + (JSC::dateProtoFuncGetHours): + (JSC::dateProtoFuncGetUTCHours): + (JSC::dateProtoFuncGetMinutes): + (JSC::dateProtoFuncGetUTCMinutes): + (JSC::dateProtoFuncGetSeconds): + (JSC::dateProtoFuncGetUTCSeconds): + (JSC::dateProtoFuncGetMilliSeconds): + (JSC::dateProtoFuncGetUTCMilliseconds): + (JSC::dateProtoFuncGetTimezoneOffset): + (JSC::dateProtoFuncSetTime): + (JSC::setNewValueFromTimeArgs): + (JSC::setNewValueFromDateArgs): + (JSC::dateProtoFuncSetMilliSeconds): + (JSC::dateProtoFuncSetUTCMilliseconds): + (JSC::dateProtoFuncSetSeconds): + (JSC::dateProtoFuncSetUTCSeconds): + (JSC::dateProtoFuncSetMinutes): + (JSC::dateProtoFuncSetUTCMinutes): + (JSC::dateProtoFuncSetHours): + (JSC::dateProtoFuncSetUTCHours): + (JSC::dateProtoFuncSetDate): + (JSC::dateProtoFuncSetUTCDate): + (JSC::dateProtoFuncSetMonth): + (JSC::dateProtoFuncSetUTCMonth): + (JSC::dateProtoFuncSetFullYear): + (JSC::dateProtoFuncSetUTCFullYear): + (JSC::dateProtoFuncSetYear): + (JSC::dateProtoFuncGetYear): + * runtime/DatePrototype.h: + (JSC::DatePrototype::createStructure): + * runtime/ErrorConstructor.cpp: + (JSC::callErrorConstructor): + * runtime/ErrorPrototype.cpp: + (JSC::errorProtoFuncToString): + * runtime/ExceptionHelpers.cpp: + (JSC::createInterruptedExecutionException): + (JSC::createError): + (JSC::createStackOverflowError): + (JSC::createUndefinedVariableError): + (JSC::createErrorMessage): + (JSC::createInvalidParamError): + (JSC::createNotAConstructorError): + (JSC::createNotAFunctionError): + * runtime/ExceptionHelpers.h: + * runtime/FunctionConstructor.cpp: + (JSC::callFunctionConstructor): + * runtime/FunctionPrototype.cpp: + (JSC::callFunctionPrototype): + (JSC::functionProtoFuncToString): + (JSC::functionProtoFuncApply): + (JSC::functionProtoFuncCall): + * runtime/FunctionPrototype.h: + (JSC::FunctionPrototype::createStructure): + * runtime/GetterSetter.cpp: + (JSC::GetterSetter::toPrimitive): + (JSC::GetterSetter::getPrimitiveNumber): + * runtime/GetterSetter.h: + (JSC::asGetterSetter): + * runtime/InternalFunction.cpp: + (JSC::InternalFunction::displayName): + * runtime/InternalFunction.h: + (JSC::InternalFunction::createStructure): + (JSC::asInternalFunction): + * runtime/JSActivation.cpp: + (JSC::JSActivation::getOwnPropertySlot): + (JSC::JSActivation::put): + (JSC::JSActivation::putWithAttributes): + (JSC::JSActivation::argumentsGetter): + * runtime/JSActivation.h: + (JSC::JSActivation::createStructure): + (JSC::asActivation): + * runtime/JSArray.cpp: + (JSC::storageSize): + (JSC::JSArray::JSArray): + (JSC::JSArray::getOwnPropertySlot): + (JSC::JSArray::put): + (JSC::JSArray::putSlowCase): + (JSC::JSArray::deleteProperty): + (JSC::JSArray::setLength): + (JSC::JSArray::pop): + (JSC::JSArray::push): + (JSC::JSArray::mark): + (JSC::compareNumbersForQSort): + (JSC::JSArray::sortNumeric): + (JSC::JSArray::sort): + (JSC::JSArray::compactForSorting): + (JSC::JSArray::checkConsistency): + (JSC::constructArray): + * runtime/JSArray.h: + (JSC::JSArray::getIndex): + (JSC::JSArray::setIndex): + (JSC::JSArray::createStructure): + (JSC::asArray): + (JSC::isJSArray): + * runtime/JSByteArray.cpp: + (JSC::JSByteArray::createStructure): + (JSC::JSByteArray::put): + * runtime/JSByteArray.h: + (JSC::JSByteArray::getIndex): + (JSC::JSByteArray::setIndex): + (JSC::asByteArray): + (JSC::isJSByteArray): + * runtime/JSCell.cpp: + (JSC::JSCell::put): + (JSC::JSCell::getJSNumber): + * runtime/JSCell.h: + (JSC::asCell): + (JSC::JSValue::asCell): + (JSC::JSValue::isString): + (JSC::JSValue::isGetterSetter): + (JSC::JSValue::isObject): + (JSC::JSValue::getString): + (JSC::JSValue::getObject): + (JSC::JSValue::getCallData): + (JSC::JSValue::getConstructData): + (JSC::JSValue::getUInt32): + (JSC::JSValue::getTruncatedInt32): + (JSC::JSValue::getTruncatedUInt32): + (JSC::JSValue::mark): + (JSC::JSValue::marked): + (JSC::JSValue::toPrimitive): + (JSC::JSValue::getPrimitiveNumber): + (JSC::JSValue::toBoolean): + (JSC::JSValue::toNumber): + (JSC::JSValue::toString): + (JSC::JSValue::toObject): + (JSC::JSValue::toThisObject): + (JSC::JSValue::needsThisConversion): + (JSC::JSValue::toThisString): + (JSC::JSValue::getJSNumber): + * runtime/JSFunction.cpp: + (JSC::JSFunction::call): + (JSC::JSFunction::argumentsGetter): + (JSC::JSFunction::callerGetter): + (JSC::JSFunction::lengthGetter): + (JSC::JSFunction::getOwnPropertySlot): + (JSC::JSFunction::put): + (JSC::JSFunction::construct): + * runtime/JSFunction.h: + (JSC::JSFunction::createStructure): + (JSC::asFunction): + * runtime/JSGlobalData.h: + * runtime/JSGlobalObject.cpp: + (JSC::markIfNeeded): + (JSC::JSGlobalObject::put): + (JSC::JSGlobalObject::putWithAttributes): + (JSC::JSGlobalObject::reset): + (JSC::JSGlobalObject::resetPrototype): + * runtime/JSGlobalObject.h: + (JSC::JSGlobalObject::createStructure): + (JSC::JSGlobalObject::GlobalPropertyInfo::GlobalPropertyInfo): + (JSC::asGlobalObject): + (JSC::Structure::prototypeForLookup): + (JSC::Structure::prototypeChain): + (JSC::Structure::isValid): + * runtime/JSGlobalObjectFunctions.cpp: + (JSC::encode): + (JSC::decode): + (JSC::globalFuncEval): + (JSC::globalFuncParseInt): + (JSC::globalFuncParseFloat): + (JSC::globalFuncIsNaN): + (JSC::globalFuncIsFinite): + (JSC::globalFuncDecodeURI): + (JSC::globalFuncDecodeURIComponent): + (JSC::globalFuncEncodeURI): + (JSC::globalFuncEncodeURIComponent): + (JSC::globalFuncEscape): + (JSC::globalFuncUnescape): + (JSC::globalFuncJSCPrint): + * runtime/JSGlobalObjectFunctions.h: + * runtime/JSImmediate.cpp: + (JSC::JSImmediate::toThisObject): + (JSC::JSImmediate::toObject): + (JSC::JSImmediate::prototype): + (JSC::JSImmediate::toString): + * runtime/JSImmediate.h: + (JSC::JSImmediate::isImmediate): + (JSC::JSImmediate::isNumber): + (JSC::JSImmediate::isIntegerNumber): + (JSC::JSImmediate::isDoubleNumber): + (JSC::JSImmediate::isPositiveIntegerNumber): + (JSC::JSImmediate::isBoolean): + (JSC::JSImmediate::isUndefinedOrNull): + (JSC::JSImmediate::isEitherImmediate): + (JSC::JSImmediate::areBothImmediate): + (JSC::JSImmediate::areBothImmediateIntegerNumbers): + (JSC::JSImmediate::makeValue): + (JSC::JSImmediate::makeInt): + (JSC::JSImmediate::makeDouble): + (JSC::JSImmediate::makeBool): + (JSC::JSImmediate::makeUndefined): + (JSC::JSImmediate::makeNull): + (JSC::JSImmediate::doubleValue): + (JSC::JSImmediate::intValue): + (JSC::JSImmediate::uintValue): + (JSC::JSImmediate::boolValue): + (JSC::JSImmediate::rawValue): + (JSC::JSImmediate::trueImmediate): + (JSC::JSImmediate::falseImmediate): + (JSC::JSImmediate::undefinedImmediate): + (JSC::JSImmediate::nullImmediate): + (JSC::JSImmediate::zeroImmediate): + (JSC::JSImmediate::oneImmediate): + (JSC::JSImmediate::impossibleValue): + (JSC::JSImmediate::toBoolean): + (JSC::JSImmediate::getTruncatedUInt32): + (JSC::JSImmediate::fromNumberOutsideIntegerRange): + (JSC::JSImmediate::from): + (JSC::JSImmediate::getTruncatedInt32): + (JSC::JSImmediate::toDouble): + (JSC::JSImmediate::getUInt32): + (JSC::JSValue::JSValue): + (JSC::JSValue::isUndefinedOrNull): + (JSC::JSValue::isBoolean): + (JSC::JSValue::getBoolean): + (JSC::JSValue::toInt32): + (JSC::JSValue::toUInt32): + (JSC::JSValue::isCell): + (JSC::JSValue::isInt32Fast): + (JSC::JSValue::getInt32Fast): + (JSC::JSValue::isUInt32Fast): + (JSC::JSValue::getUInt32Fast): + (JSC::JSValue::makeInt32Fast): + (JSC::JSValue::areBothInt32Fast): + (JSC::JSFastMath::canDoFastBitwiseOperations): + (JSC::JSFastMath::equal): + (JSC::JSFastMath::notEqual): + (JSC::JSFastMath::andImmediateNumbers): + (JSC::JSFastMath::xorImmediateNumbers): + (JSC::JSFastMath::orImmediateNumbers): + (JSC::JSFastMath::canDoFastRshift): + (JSC::JSFastMath::canDoFastUrshift): + (JSC::JSFastMath::rightShiftImmediateNumbers): + (JSC::JSFastMath::canDoFastAdditiveOperations): + (JSC::JSFastMath::addImmediateNumbers): + (JSC::JSFastMath::subImmediateNumbers): + (JSC::JSFastMath::incImmediateNumber): + (JSC::JSFastMath::decImmediateNumber): + * runtime/JSNotAnObject.cpp: + (JSC::JSNotAnObject::toPrimitive): + (JSC::JSNotAnObject::getPrimitiveNumber): + (JSC::JSNotAnObject::put): + * runtime/JSNotAnObject.h: + (JSC::JSNotAnObject::createStructure): + * runtime/JSNumberCell.cpp: + (JSC::JSNumberCell::toPrimitive): + (JSC::JSNumberCell::getPrimitiveNumber): + (JSC::JSNumberCell::getJSNumber): + (JSC::jsNumberCell): + * runtime/JSNumberCell.h: + (JSC::JSNumberCell::createStructure): + (JSC::isNumberCell): + (JSC::asNumberCell): + (JSC::jsNumber): + (JSC::JSValue::isDoubleNumber): + (JSC::JSValue::getDoubleNumber): + (JSC::JSValue::isNumber): + (JSC::JSValue::uncheckedGetNumber): + (JSC::jsNaN): + (JSC::JSValue::toJSNumber): + (JSC::JSValue::getNumber): + (JSC::JSValue::numberToInt32): + (JSC::JSValue::numberToUInt32): + * runtime/JSObject.cpp: + (JSC::JSObject::mark): + (JSC::JSObject::put): + (JSC::JSObject::putWithAttributes): + (JSC::callDefaultValueFunction): + (JSC::JSObject::getPrimitiveNumber): + (JSC::JSObject::defaultValue): + (JSC::JSObject::defineGetter): + (JSC::JSObject::defineSetter): + (JSC::JSObject::lookupGetter): + (JSC::JSObject::lookupSetter): + (JSC::JSObject::hasInstance): + (JSC::JSObject::toNumber): + (JSC::JSObject::toString): + (JSC::JSObject::fillGetterPropertySlot): + * runtime/JSObject.h: + (JSC::JSObject::getDirect): + (JSC::JSObject::getDirectLocation): + (JSC::JSObject::offsetForLocation): + (JSC::JSObject::locationForOffset): + (JSC::JSObject::getDirectOffset): + (JSC::JSObject::putDirectOffset): + (JSC::JSObject::createStructure): + (JSC::asObject): + (JSC::JSObject::prototype): + (JSC::JSObject::setPrototype): + (JSC::JSValue::isObject): + (JSC::JSObject::inlineGetOwnPropertySlot): + (JSC::JSObject::getOwnPropertySlotForWrite): + (JSC::JSObject::getPropertySlot): + (JSC::JSObject::get): + (JSC::JSObject::putDirect): + (JSC::JSObject::putDirectWithoutTransition): + (JSC::JSObject::toPrimitive): + (JSC::JSValue::get): + (JSC::JSValue::put): + (JSC::JSObject::allocatePropertyStorageInline): + * runtime/JSPropertyNameIterator.cpp: + (JSC::JSPropertyNameIterator::toPrimitive): + (JSC::JSPropertyNameIterator::getPrimitiveNumber): + * runtime/JSPropertyNameIterator.h: + (JSC::JSPropertyNameIterator::create): + (JSC::JSPropertyNameIterator::next): + * runtime/JSStaticScopeObject.cpp: + (JSC::JSStaticScopeObject::put): + (JSC::JSStaticScopeObject::putWithAttributes): + * runtime/JSStaticScopeObject.h: + (JSC::JSStaticScopeObject::JSStaticScopeObject): + (JSC::JSStaticScopeObject::createStructure): + * runtime/JSString.cpp: + (JSC::JSString::toPrimitive): + (JSC::JSString::getPrimitiveNumber): + (JSC::JSString::getOwnPropertySlot): + * runtime/JSString.h: + (JSC::JSString::createStructure): + (JSC::asString): + (JSC::isJSString): + (JSC::JSValue::toThisJSString): + * runtime/JSValue.cpp: + (JSC::JSValue::toInteger): + (JSC::JSValue::toIntegerPreserveNaN): + * runtime/JSValue.h: + (JSC::JSValue::makeImmediate): + (JSC::JSValue::asValue): + (JSC::noValue): + (JSC::jsImpossibleValue): + (JSC::jsNull): + (JSC::jsUndefined): + (JSC::jsBoolean): + (JSC::operator==): + (JSC::operator!=): + (JSC::JSValue::encode): + (JSC::JSValue::decode): + (JSC::JSValue::JSValue): + (JSC::JSValue::operator bool): + (JSC::JSValue::operator==): + (JSC::JSValue::operator!=): + (JSC::JSValue::isUndefined): + (JSC::JSValue::isNull): + * runtime/JSVariableObject.h: + (JSC::JSVariableObject::symbolTablePut): + (JSC::JSVariableObject::symbolTablePutWithAttributes): + * runtime/JSWrapperObject.h: + (JSC::JSWrapperObject::internalValue): + (JSC::JSWrapperObject::setInternalValue): + * runtime/Lookup.cpp: + (JSC::setUpStaticFunctionSlot): + * runtime/Lookup.h: + (JSC::lookupPut): + * runtime/MathObject.cpp: + (JSC::mathProtoFuncAbs): + (JSC::mathProtoFuncACos): + (JSC::mathProtoFuncASin): + (JSC::mathProtoFuncATan): + (JSC::mathProtoFuncATan2): + (JSC::mathProtoFuncCeil): + (JSC::mathProtoFuncCos): + (JSC::mathProtoFuncExp): + (JSC::mathProtoFuncFloor): + (JSC::mathProtoFuncLog): + (JSC::mathProtoFuncMax): + (JSC::mathProtoFuncMin): + (JSC::mathProtoFuncPow): + (JSC::mathProtoFuncRandom): + (JSC::mathProtoFuncRound): + (JSC::mathProtoFuncSin): + (JSC::mathProtoFuncSqrt): + (JSC::mathProtoFuncTan): + * runtime/MathObject.h: + (JSC::MathObject::createStructure): + * runtime/NativeErrorConstructor.cpp: + (JSC::callNativeErrorConstructor): + * runtime/NumberConstructor.cpp: + (JSC::numberConstructorNaNValue): + (JSC::numberConstructorNegInfinity): + (JSC::numberConstructorPosInfinity): + (JSC::numberConstructorMaxValue): + (JSC::numberConstructorMinValue): + (JSC::callNumberConstructor): + * runtime/NumberConstructor.h: + (JSC::NumberConstructor::createStructure): + * runtime/NumberObject.cpp: + (JSC::NumberObject::getJSNumber): + (JSC::constructNumber): + * runtime/NumberObject.h: + * runtime/NumberPrototype.cpp: + (JSC::numberProtoFuncToString): + (JSC::numberProtoFuncToLocaleString): + (JSC::numberProtoFuncValueOf): + (JSC::numberProtoFuncToFixed): + (JSC::numberProtoFuncToExponential): + (JSC::numberProtoFuncToPrecision): + * runtime/ObjectConstructor.cpp: + (JSC::constructObject): + (JSC::callObjectConstructor): + * runtime/ObjectPrototype.cpp: + (JSC::objectProtoFuncValueOf): + (JSC::objectProtoFuncHasOwnProperty): + (JSC::objectProtoFuncIsPrototypeOf): + (JSC::objectProtoFuncDefineGetter): + (JSC::objectProtoFuncDefineSetter): + (JSC::objectProtoFuncLookupGetter): + (JSC::objectProtoFuncLookupSetter): + (JSC::objectProtoFuncPropertyIsEnumerable): + (JSC::objectProtoFuncToLocaleString): + (JSC::objectProtoFuncToString): + * runtime/ObjectPrototype.h: + * runtime/Operations.cpp: + (JSC::JSValue::equalSlowCase): + (JSC::JSValue::strictEqualSlowCase): + (JSC::throwOutOfMemoryError): + (JSC::jsAddSlowCase): + (JSC::jsTypeStringForValue): + (JSC::jsIsObjectType): + (JSC::jsIsFunctionType): + * runtime/Operations.h: + (JSC::JSValue::equal): + (JSC::JSValue::equalSlowCaseInline): + (JSC::JSValue::strictEqual): + (JSC::JSValue::strictEqualSlowCaseInline): + (JSC::jsLess): + (JSC::jsLessEq): + (JSC::jsAdd): + (JSC::countPrototypeChainEntriesAndCheckForProxies): + (JSC::resolveBase): + * runtime/PropertySlot.cpp: + (JSC::PropertySlot::functionGetter): + * runtime/PropertySlot.h: + (JSC::PropertySlot::PropertySlot): + (JSC::PropertySlot::getValue): + (JSC::PropertySlot::putValue): + (JSC::PropertySlot::setValueSlot): + (JSC::PropertySlot::setValue): + (JSC::PropertySlot::setCustom): + (JSC::PropertySlot::setCustomIndex): + (JSC::PropertySlot::slotBase): + (JSC::PropertySlot::setBase): + (JSC::PropertySlot::): + * runtime/Protect.h: + (JSC::gcProtect): + (JSC::gcUnprotect): + (JSC::ProtectedPtr::operator JSValue): + (JSC::ProtectedJSValue::ProtectedJSValue): + (JSC::ProtectedJSValue::get): + (JSC::ProtectedJSValue::operator JSValue): + (JSC::ProtectedJSValue::operator->): + (JSC::ProtectedJSValue::~ProtectedJSValue): + (JSC::ProtectedJSValue::operator=): + (JSC::operator==): + (JSC::operator!=): + * runtime/RegExpConstructor.cpp: + (JSC::RegExpConstructor::getBackref): + (JSC::RegExpConstructor::getLastParen): + (JSC::RegExpConstructor::getLeftContext): + (JSC::RegExpConstructor::getRightContext): + (JSC::regExpConstructorDollar1): + (JSC::regExpConstructorDollar2): + (JSC::regExpConstructorDollar3): + (JSC::regExpConstructorDollar4): + (JSC::regExpConstructorDollar5): + (JSC::regExpConstructorDollar6): + (JSC::regExpConstructorDollar7): + (JSC::regExpConstructorDollar8): + (JSC::regExpConstructorDollar9): + (JSC::regExpConstructorInput): + (JSC::regExpConstructorMultiline): + (JSC::regExpConstructorLastMatch): + (JSC::regExpConstructorLastParen): + (JSC::regExpConstructorLeftContext): + (JSC::regExpConstructorRightContext): + (JSC::RegExpConstructor::put): + (JSC::setRegExpConstructorInput): + (JSC::setRegExpConstructorMultiline): + (JSC::constructRegExp): + (JSC::callRegExpConstructor): + * runtime/RegExpConstructor.h: + (JSC::RegExpConstructor::createStructure): + (JSC::asRegExpConstructor): + * runtime/RegExpMatchesArray.h: + (JSC::RegExpMatchesArray::put): + * runtime/RegExpObject.cpp: + (JSC::regExpObjectGlobal): + (JSC::regExpObjectIgnoreCase): + (JSC::regExpObjectMultiline): + (JSC::regExpObjectSource): + (JSC::regExpObjectLastIndex): + (JSC::RegExpObject::put): + (JSC::setRegExpObjectLastIndex): + (JSC::RegExpObject::test): + (JSC::RegExpObject::exec): + (JSC::callRegExpObject): + * runtime/RegExpObject.h: + (JSC::RegExpObject::createStructure): + (JSC::asRegExpObject): + * runtime/RegExpPrototype.cpp: + (JSC::regExpProtoFuncTest): + (JSC::regExpProtoFuncExec): + (JSC::regExpProtoFuncCompile): + (JSC::regExpProtoFuncToString): + * runtime/StringConstructor.cpp: + (JSC::stringFromCharCodeSlowCase): + (JSC::stringFromCharCode): + (JSC::callStringConstructor): + * runtime/StringObject.cpp: + (JSC::StringObject::put): + * runtime/StringObject.h: + (JSC::StringObject::createStructure): + (JSC::asStringObject): + * runtime/StringObjectThatMasqueradesAsUndefined.h: + (JSC::StringObjectThatMasqueradesAsUndefined::createStructure): + * runtime/StringPrototype.cpp: + (JSC::stringProtoFuncReplace): + (JSC::stringProtoFuncToString): + (JSC::stringProtoFuncCharAt): + (JSC::stringProtoFuncCharCodeAt): + (JSC::stringProtoFuncConcat): + (JSC::stringProtoFuncIndexOf): + (JSC::stringProtoFuncLastIndexOf): + (JSC::stringProtoFuncMatch): + (JSC::stringProtoFuncSearch): + (JSC::stringProtoFuncSlice): + (JSC::stringProtoFuncSplit): + (JSC::stringProtoFuncSubstr): + (JSC::stringProtoFuncSubstring): + (JSC::stringProtoFuncToLowerCase): + (JSC::stringProtoFuncToUpperCase): + (JSC::stringProtoFuncLocaleCompare): + (JSC::stringProtoFuncBig): + (JSC::stringProtoFuncSmall): + (JSC::stringProtoFuncBlink): + (JSC::stringProtoFuncBold): + (JSC::stringProtoFuncFixed): + (JSC::stringProtoFuncItalics): + (JSC::stringProtoFuncStrike): + (JSC::stringProtoFuncSub): + (JSC::stringProtoFuncSup): + (JSC::stringProtoFuncFontcolor): + (JSC::stringProtoFuncFontsize): + (JSC::stringProtoFuncAnchor): + (JSC::stringProtoFuncLink): + * runtime/Structure.cpp: + (JSC::Structure::Structure): + (JSC::Structure::changePrototypeTransition): + * runtime/Structure.h: + (JSC::Structure::create): + (JSC::Structure::setPrototypeWithoutTransition): + (JSC::Structure::storedPrototype): + +2009-05-01 Geoffrey Garen + + Reviewed by Sam "That doesn't look like what I thought it looks like" Weinig. + + Beefed up the JSValuePtr class and removed some non-JSValuePtr dependencies + on JSImmediate, in prepapration for making JSImmediate an implementation + detail of JSValuePtr. + + SunSpider reports no change. + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + * jit/JITArithmetic.cpp: + (JSC::JIT::compileFastArith_op_mod): + * runtime/JSGlobalObjectFunctions.cpp: + (JSC::globalFuncParseInt): Updated for interface changes. + + * runtime/JSImmediate.h: + (JSC::JSValuePtr::JSValuePtr): + * runtime/JSValue.h: + (JSC::JSValuePtr::): + (JSC::jsImpossibleValue): + (JSC::jsNull): + (JSC::jsUndefined): + (JSC::jsBoolean): + (JSC::JSValuePtr::encode): + (JSC::JSValuePtr::decode): + (JSC::JSValuePtr::JSValuePtr): + (JSC::JSValuePtr::operator bool): + (JSC::JSValuePtr::operator==): + (JSC::JSValuePtr::operator!=): + (JSC::JSValuePtr::isUndefined): + (JSC::JSValuePtr::isNull): Changed jsImpossibleValue(), jsNull(), + jsUndefined(), and jsBoolean() to operate in terms of JSValuePtr instead + of JSImmediate. + + * wtf/StdLibExtras.h: + (WTF::bitwise_cast): Fixed up for clarity. + +2009-04-30 Gavin Barraclough + + Reviewed by Geoff Garen. + + Bug fix for rdar:/6845379. If a case-insensitive regex contains + a character class containing a range with an upper bound of \uFFFF + the parser will infinite-loop whist adding other-case characters + for characters in the range that do have another case. + + * yarr/RegexCompiler.cpp: + (JSC::Yarr::CharacterClassConstructor::putRange): + +2009-04-30 Gavin Barraclough + + Reviewed by Oliver Hunt. + + OPCODE_SAMPLING without CODEBLOCK_SAMPLING is currently broken, + since SamplingTool::Sample::isNull() checks the m_codeBlock + member (which is always null without CODEBLOCK_SAMPLING). + + Restructure the checks so make this work again. + + * bytecode/SamplingTool.cpp: + (JSC::SamplingTool::doRun): + * bytecode/SamplingTool.h: + (JSC::SamplingTool::Sample::isNull): + +2009-04-30 Maciej Stachowiak + + Reviewed by Gavin Barraclough. + + - Concatenate final three strings in simple replace case at one go + + ~0.2% SunSpider speedup + + * runtime/StringPrototype.cpp: + (JSC::stringProtoFuncReplace): Use new replaceRange helper instead of + taking substrings and concatenating three strings. + * runtime/UString.cpp: + (JSC::UString::replaceRange): New helper function. + * runtime/UString.h: + +2009-04-30 Geoffrey Garen + + Rubber Stamped by Gavin Barraclough. + + Changed JSValueEncodedAsPtr* => EncodedJSValuePtr to support a non-pointer + encoding for JSValuePtrs. + + * API/APICast.h: + (toJS): + * bytecompiler/BytecodeGenerator.h: + (JSC::BytecodeGenerator::JSValueHashTraits::constructDeletedValue): + (JSC::BytecodeGenerator::JSValueHashTraits::isDeletedValue): + * interpreter/Register.h: + (JSC::Register::): + * jit/JIT.cpp: + (JSC::): + * jit/JIT.h: + * jit/JITCode.h: + (JSC::): + * jit/JITStubs.cpp: + (JSC::JITStubs::cti_op_add): + (JSC::JITStubs::cti_op_pre_inc): + (JSC::JITStubs::cti_op_get_by_id_generic): + (JSC::JITStubs::cti_op_get_by_id): + (JSC::JITStubs::cti_op_get_by_id_second): + (JSC::JITStubs::cti_op_get_by_id_self_fail): + (JSC::JITStubs::cti_op_get_by_id_proto_list): + (JSC::JITStubs::cti_op_get_by_id_proto_list_full): + (JSC::JITStubs::cti_op_get_by_id_proto_fail): + (JSC::JITStubs::cti_op_get_by_id_array_fail): + (JSC::JITStubs::cti_op_get_by_id_string_fail): + (JSC::JITStubs::cti_op_instanceof): + (JSC::JITStubs::cti_op_del_by_id): + (JSC::JITStubs::cti_op_mul): + (JSC::JITStubs::cti_op_call_NotJSFunction): + (JSC::JITStubs::cti_op_resolve): + (JSC::JITStubs::cti_op_construct_NotJSConstruct): + (JSC::JITStubs::cti_op_get_by_val): + (JSC::JITStubs::cti_op_get_by_val_string): + (JSC::JITStubs::cti_op_get_by_val_byte_array): + (JSC::JITStubs::cti_op_sub): + (JSC::JITStubs::cti_op_lesseq): + (JSC::JITStubs::cti_op_negate): + (JSC::JITStubs::cti_op_resolve_base): + (JSC::JITStubs::cti_op_resolve_skip): + (JSC::JITStubs::cti_op_resolve_global): + (JSC::JITStubs::cti_op_div): + (JSC::JITStubs::cti_op_pre_dec): + (JSC::JITStubs::cti_op_not): + (JSC::JITStubs::cti_op_eq): + (JSC::JITStubs::cti_op_lshift): + (JSC::JITStubs::cti_op_bitand): + (JSC::JITStubs::cti_op_rshift): + (JSC::JITStubs::cti_op_bitnot): + (JSC::JITStubs::cti_op_mod): + (JSC::JITStubs::cti_op_less): + (JSC::JITStubs::cti_op_neq): + (JSC::JITStubs::cti_op_urshift): + (JSC::JITStubs::cti_op_bitxor): + (JSC::JITStubs::cti_op_bitor): + (JSC::JITStubs::cti_op_call_eval): + (JSC::JITStubs::cti_op_throw): + (JSC::JITStubs::cti_op_next_pname): + (JSC::JITStubs::cti_op_typeof): + (JSC::JITStubs::cti_op_is_undefined): + (JSC::JITStubs::cti_op_is_boolean): + (JSC::JITStubs::cti_op_is_number): + (JSC::JITStubs::cti_op_is_string): + (JSC::JITStubs::cti_op_is_object): + (JSC::JITStubs::cti_op_is_function): + (JSC::JITStubs::cti_op_stricteq): + (JSC::JITStubs::cti_op_nstricteq): + (JSC::JITStubs::cti_op_to_jsnumber): + (JSC::JITStubs::cti_op_in): + (JSC::JITStubs::cti_op_del_by_val): + (JSC::JITStubs::cti_vm_throw): + * jit/JITStubs.h: + * runtime/JSValue.h: + (JSC::JSValuePtr::encode): + (JSC::JSValuePtr::decode): + +2009-04-30 Gavin Barraclough + + Reviewed by Oliver "Abandon Ship!" Hunt. + + Fix a leak in Yarr. + + All Disjunctions should be recorded in RegexPattern::m_disjunctions, + so that they can be freed at the end of compilation - copyDisjunction + is failing to do so. + + * yarr/RegexCompiler.cpp: + (JSC::Yarr::RegexPatternConstructor::copyDisjunction): + +2009-04-30 Oliver Hunt + + Reviewed by Gavin Barraclough. + + Add function to CallFrame for dumping the current JS caller + + Added debug only method CallFrame::dumpCaller() that provide the call location + of the deepest currently executing JS function. + + * interpreter/CallFrame.cpp: + (JSC::CallFrame::dumpCaller): + * interpreter/CallFrame.h: + +2009-04-30 Maciej Stachowiak + + Reviewed by Geoff Garen. + + - make BaseStrings have themselves as a base, instead of nothing, to remove common branches + + ~0.7% SunSpider speedup + + * runtime/UString.h: + (JSC::UString::Rep::Rep): For the constructor without a base, set self as base instead of null. + (JSC::UString::Rep::baseString): Just read m_baseString - no more branching. + +2009-04-30 Gavin Barraclough + + Reviewed by Oliver Hunt. + + Two quick improvements to SamplingFlags mechanism. + + SamplingFlags::ScopedFlag class to provide support for automagically + clearing a flag as it goes out of scope, and add a little more detail + to the output generated by the tool. + + * bytecode/SamplingTool.cpp: + (JSC::SamplingFlags::stop): + * bytecode/SamplingTool.h: + (JSC::SamplingFlags::ScopedFlag::ScopedFlag): + (JSC::SamplingFlags::ScopedFlag::~ScopedFlag): + +2009-04-30 Adam Roben + + Restore build event steps that were truncated in r43082 + + Rubber-stamped by Steve Falkenburg. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops: + * JavaScriptCore.vcproj/jsc/jscCommon.vsprops: + * JavaScriptCore.vcproj/testapi/testapiCommon.vsprops: + Re-copied the command lines for the build events from the pre-r43082 + .vcproj files. + + * JavaScriptCore.vcproj/jsc/jsc.vcproj: Removed an unnecessary + attribute. + +2009-04-30 Adam Roben + + Move settings from .vcproj files to .vsprops files within the + JavaScriptCore directory + + Moving the settings to a .vsprops file means that we will only have to + change a single setting to affect all configurations, instead of one + setting per configuration. + + Reviewed by Steve Falkenburg. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.vcproj/WTF/WTF.vcproj: + * JavaScriptCore.vcproj/jsc/jsc.vcproj: + * JavaScriptCore.vcproj/testapi/testapi.vcproj: + Moved settings from these files to the new .vsprops files. Note that + testapi.vcproj had a lot of overrides of default settings that were + the same as the defaults, which I've removed. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops: Added. + * JavaScriptCore.vcproj/WTF/WTFCommon.vsprops: Added. + * JavaScriptCore.vcproj/jsc/jscCommon.vsprops: Added. + * JavaScriptCore.vcproj/testapi/testapiCommon.vsprops: Added. + +2009-04-30 Dimitri Glazkov + + Reviewed by Timothy Hatcher. + + https://bugs.webkit.org/show_bug.cgi?id=25470 + Extend the cover of ENABLE_JAVASCRIPT_DEBUGGER to profiler. + + * Configurations/FeatureDefines.xcconfig: Added ENABLE_JAVASCRIPT_DEBUGGER define. + +2009-04-30 Maciej Stachowiak + + Reviewed by Alexey Proskuryakov. + + - speed up string concatenation by reorganizing some simple cases + + 0.7% SunSpider speedup + + * runtime/UString.cpp: + (JSC::concatenate): Put fast case for appending a single character + before the empty string special cases; streamline code a bit to + delay computing values that are not needed in the fast path. + +2009-04-30 Gavin Barraclough + + Reviewed by Maciej Stachowiak. + + Add SamplingFlags mechanism. + + This mechanism allows fine-grained JSC and JavaScript program aware + performance measurement. The mechanism provides a set of 32 flags, + numbered #1..#32. Flag #16 is initially set, and all other flags + are cleared. Flags may be set and cleared from within + + Enable by setting ENABLE_SAMPLING_FLAGS to 1 in wtf/Platform.h. + Disabled by default, no performance impact. Flags may be modified + by calling SamplingFlags::setFlag() and SamplingFlags::clearFlag() + from within JSC implementation, or by calling setSamplingFlag() and + clearSamplingFlag() from JavaScript. + + The flags are sampled with a frequency of 10000Hz, and the highest + set flag in recorded, allowing multiple events to be measured (with + the highest flag number representing the highest priority). + + Disabled by default; no performance impact. + + * JavaScriptCore.exp: + * bytecode/SamplingTool.cpp: + (JSC::SamplingFlags::sample): + (JSC::SamplingFlags::start): + (JSC::SamplingFlags::stop): + (JSC::SamplingThread::threadStartFunc): + (JSC::SamplingThread::start): + (JSC::SamplingThread::stop): + (JSC::ScopeSampleRecord::sample): + (JSC::SamplingTool::doRun): + (JSC::SamplingTool::sample): + (JSC::SamplingTool::start): + (JSC::SamplingTool::stop): + * bytecode/SamplingTool.h: + (JSC::SamplingFlags::setFlag): + (JSC::SamplingFlags::clearFlag): + (JSC::SamplingTool::SamplingTool): + * jsc.cpp: + (GlobalObject::GlobalObject): + (functionSetSamplingFlag): + (functionClearSamplingFlag): + (runWithScripts): + * wtf/Platform.h: + +2009-04-29 Sam Weinig + + Another attempt to fix the windows build. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: + +2009-04-29 Sam Weinig + + Try and fix the windows build. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: + +2009-04-29 Gavin Barraclough + + Reviewed by Oliver "Peg-Leg" Hunt. + + Coallesce input checking and reduce futzing with the index position + between alternatives and iterations of the main loop of a regex, + when run in YARR. + + Consider the following regex: /foo|bar/ + + Prior to this patch, this will be implemented something like this pseudo-code description: + + loop: + check_for_available_input(3) // this increments the index by 3, for the first alterantive. + if (available) { test "foo" } + decrement_index(3) + check_for_available_input(3) // this increments the index by 3, for the second alterantive. + if (available) { test "bar" } + decrement_index(3) + check_for_available_input(1) // can we loop again? + if (available) { goto loop } + + With these changes it will look more like this: + + check_for_available_input(3) // this increments the index by 3, for the first alterantive. + if (!available) { goto fail } + loop: + test "foo" + test "bar" + check_for_available_input(1) // can we loop again? + if (available) { goto loop } + fail: + + + This gives about a 5% gain on v8-regex, no change on Sunspider. + + * yarr/RegexJIT.cpp: + (JSC::Yarr::RegexGenerator::TermGenerationState::linkAlternativeBacktracksTo): + (JSC::Yarr::RegexGenerator::generateDisjunction): + +2009-04-29 Oliver Hunt + + Reviewed by Gavin Barraclough. + + Clean up ArgList to be a trivial type + + Separate out old ArgList logic to handle buffering and marking arguments + into a distinct MarkedArgumentBuffer type. ArgList becomes a trivial + struct of a pointer and length. + + * API/JSObjectRef.cpp: + (JSObjectMakeFunction): + (JSObjectMakeArray): + (JSObjectMakeDate): + (JSObjectMakeError): + (JSObjectMakeRegExp): + (JSObjectCallAsFunction): + (JSObjectCallAsConstructor): + * JavaScriptCore.exp: + * interpreter/CallFrame.h: + (JSC::ExecState::emptyList): + * runtime/ArgList.cpp: + (JSC::ArgList::getSlice): + (JSC::MarkedArgumentBuffer::markLists): + (JSC::MarkedArgumentBuffer::slowAppend): + * runtime/ArgList.h: + (JSC::MarkedArgumentBuffer::MarkedArgumentBuffer): + (JSC::MarkedArgumentBuffer::~MarkedArgumentBuffer): + (JSC::ArgList::ArgList): + (JSC::ArgList::at): + (JSC::ArgList::isEmpty): + (JSC::ArgList::size): + (JSC::ArgList::begin): + (JSC::ArgList::end): + * runtime/Arguments.cpp: + (JSC::Arguments::fillArgList): + * runtime/Arguments.h: + * runtime/ArrayPrototype.cpp: + (JSC::arrayProtoFuncConcat): + (JSC::arrayProtoFuncPush): + (JSC::arrayProtoFuncSort): + (JSC::arrayProtoFuncFilter): + (JSC::arrayProtoFuncMap): + (JSC::arrayProtoFuncEvery): + (JSC::arrayProtoFuncForEach): + (JSC::arrayProtoFuncSome): + (JSC::arrayProtoFuncReduce): + (JSC::arrayProtoFuncReduceRight): + * runtime/Collector.cpp: + (JSC::Heap::collect): + * runtime/Collector.h: + (JSC::Heap::markListSet): + * runtime/CommonIdentifiers.h: + * runtime/Error.cpp: + (JSC::Error::create): + * runtime/FunctionPrototype.cpp: + (JSC::functionProtoFuncApply): + * runtime/JSArray.cpp: + (JSC::JSArray::JSArray): + (JSC::AVLTreeAbstractorForArrayCompare::compare_key_key): + (JSC::JSArray::fillArgList): + (JSC::constructArray): + * runtime/JSArray.h: + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): + * runtime/JSGlobalData.h: + * runtime/JSObject.cpp: + (JSC::JSObject::put): + * runtime/StringConstructor.cpp: + (JSC::stringFromCharCodeSlowCase): + * runtime/StringPrototype.cpp: + (JSC::stringProtoFuncReplace): + (JSC::stringProtoFuncConcat): + (JSC::stringProtoFuncMatch): + +2009-04-29 Laszlo Gombos + + Reviewed by Sam Weinig. + + https://bugs.webkit.org/show_bug.cgi?id=25334 + + Fix Qt build when ENABLE_JIT is explicitly set to 1 + to overrule defaults. + + * JavaScriptCore.pri: + +2009-04-29 Oliver Hunt + + Reviewed by Steve Falkenburg. + + Crash in profiler due to incorrect assuming displayName would be a string. + + Fixed by adding a type guard. + + * runtime/InternalFunction.cpp: + (JSC::InternalFunction::displayName): + +2009-04-28 Geoffrey Garen + + Rubber stamped by Beth Dakin. + + Removed scaffolding supporting dynamically converting between 32bit and + 64bit value representations. + + * API/JSCallbackConstructor.cpp: + (JSC::constructJSCallback): + * API/JSCallbackFunction.cpp: + (JSC::JSCallbackFunction::call): + * API/JSCallbackObjectFunctions.h: + (JSC::::construct): + (JSC::::call): + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::dump): + * bytecode/CodeBlock.h: + (JSC::CodeBlock::getConstant): + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::emitEqualityOp): + * interpreter/CallFrame.cpp: + (JSC::CallFrame::thisValue): + * interpreter/Interpreter.cpp: + (JSC::Interpreter::callEval): + (JSC::Interpreter::throwException): + (JSC::Interpreter::createExceptionScope): + (JSC::Interpreter::privateExecute): + (JSC::Interpreter::retrieveArguments): + * interpreter/Register.h: + (JSC::Register::): + (JSC::Register::Register): + (JSC::Register::jsValue): + (JSC::Register::marked): + (JSC::Register::mark): + (JSC::Register::i): + (JSC::Register::activation): + (JSC::Register::arguments): + (JSC::Register::callFrame): + (JSC::Register::codeBlock): + (JSC::Register::function): + (JSC::Register::propertyNameIterator): + (JSC::Register::scopeChain): + (JSC::Register::vPC): + * jit/JITStubs.cpp: + (JSC::JITStubs::cti_op_call_NotJSFunction): + (JSC::JITStubs::cti_op_load_varargs): + (JSC::JITStubs::cti_op_call_eval): + * jsc.cpp: + (functionPrint): + (functionDebug): + (functionRun): + (functionLoad): + * runtime/ArgList.h: + (JSC::ArgList::at): + * runtime/Arguments.cpp: + (JSC::Arguments::copyToRegisters): + (JSC::Arguments::fillArgList): + (JSC::Arguments::getOwnPropertySlot): + * runtime/ArrayConstructor.cpp: + (JSC::constructArrayWithSizeQuirk): + * runtime/ArrayPrototype.cpp: + (JSC::arrayProtoFuncJoin): + (JSC::arrayProtoFuncConcat): + (JSC::arrayProtoFuncPush): + (JSC::arrayProtoFuncSlice): + (JSC::arrayProtoFuncSort): + (JSC::arrayProtoFuncSplice): + (JSC::arrayProtoFuncUnShift): + (JSC::arrayProtoFuncFilter): + (JSC::arrayProtoFuncMap): + (JSC::arrayProtoFuncEvery): + (JSC::arrayProtoFuncForEach): + (JSC::arrayProtoFuncSome): + (JSC::arrayProtoFuncReduce): + (JSC::arrayProtoFuncReduceRight): + (JSC::arrayProtoFuncIndexOf): + (JSC::arrayProtoFuncLastIndexOf): + * runtime/BooleanConstructor.cpp: + (JSC::constructBoolean): + (JSC::callBooleanConstructor): + * runtime/DateConstructor.cpp: + (JSC::constructDate): + (JSC::dateParse): + (JSC::dateUTC): + * runtime/DatePrototype.cpp: + (JSC::formatLocaleDate): + (JSC::fillStructuresUsingTimeArgs): + (JSC::fillStructuresUsingDateArgs): + (JSC::dateProtoFuncSetTime): + (JSC::dateProtoFuncSetYear): + * runtime/ErrorConstructor.cpp: + (JSC::constructError): + * runtime/FunctionConstructor.cpp: + (JSC::constructFunction): + * runtime/FunctionPrototype.cpp: + (JSC::functionProtoFuncApply): + (JSC::functionProtoFuncCall): + * runtime/JSArray.cpp: + (JSC::JSArray::JSArray): + (JSC::constructArray): + * runtime/JSArray.h: + * runtime/JSGlobalObjectFunctions.cpp: + (JSC::encode): + (JSC::decode): + (JSC::globalFuncEval): + (JSC::globalFuncParseInt): + (JSC::globalFuncParseFloat): + (JSC::globalFuncIsNaN): + (JSC::globalFuncIsFinite): + (JSC::globalFuncEscape): + (JSC::globalFuncUnescape): + (JSC::globalFuncJSCPrint): + * runtime/MathObject.cpp: + (JSC::mathProtoFuncAbs): + (JSC::mathProtoFuncACos): + (JSC::mathProtoFuncASin): + (JSC::mathProtoFuncATan): + (JSC::mathProtoFuncATan2): + (JSC::mathProtoFuncCeil): + (JSC::mathProtoFuncCos): + (JSC::mathProtoFuncExp): + (JSC::mathProtoFuncFloor): + (JSC::mathProtoFuncLog): + (JSC::mathProtoFuncMax): + (JSC::mathProtoFuncMin): + (JSC::mathProtoFuncPow): + (JSC::mathProtoFuncRound): + (JSC::mathProtoFuncSin): + (JSC::mathProtoFuncSqrt): + (JSC::mathProtoFuncTan): + * runtime/NativeErrorConstructor.cpp: + (JSC::NativeErrorConstructor::construct): + * runtime/NumberConstructor.cpp: + (JSC::constructWithNumberConstructor): + (JSC::callNumberConstructor): + * runtime/NumberPrototype.cpp: + (JSC::numberProtoFuncToString): + (JSC::numberProtoFuncToFixed): + (JSC::numberProtoFuncToExponential): + (JSC::numberProtoFuncToPrecision): + * runtime/ObjectConstructor.cpp: + (JSC::constructObject): + * runtime/ObjectPrototype.cpp: + (JSC::objectProtoFuncHasOwnProperty): + (JSC::objectProtoFuncIsPrototypeOf): + (JSC::objectProtoFuncDefineGetter): + (JSC::objectProtoFuncDefineSetter): + (JSC::objectProtoFuncLookupGetter): + (JSC::objectProtoFuncLookupSetter): + (JSC::objectProtoFuncPropertyIsEnumerable): + * runtime/PropertySlot.h: + (JSC::PropertySlot::getValue): + * runtime/RegExpConstructor.cpp: + (JSC::constructRegExp): + * runtime/RegExpObject.cpp: + (JSC::RegExpObject::match): + * runtime/RegExpPrototype.cpp: + (JSC::regExpProtoFuncCompile): + * runtime/StringConstructor.cpp: + (JSC::stringFromCharCodeSlowCase): + (JSC::stringFromCharCode): + (JSC::constructWithStringConstructor): + (JSC::callStringConstructor): + * runtime/StringPrototype.cpp: + (JSC::stringProtoFuncReplace): + (JSC::stringProtoFuncCharAt): + (JSC::stringProtoFuncCharCodeAt): + (JSC::stringProtoFuncConcat): + (JSC::stringProtoFuncIndexOf): + (JSC::stringProtoFuncLastIndexOf): + (JSC::stringProtoFuncMatch): + (JSC::stringProtoFuncSearch): + (JSC::stringProtoFuncSlice): + (JSC::stringProtoFuncSplit): + (JSC::stringProtoFuncSubstr): + (JSC::stringProtoFuncSubstring): + (JSC::stringProtoFuncLocaleCompare): + (JSC::stringProtoFuncFontcolor): + (JSC::stringProtoFuncFontsize): + (JSC::stringProtoFuncAnchor): + (JSC::stringProtoFuncLink): + +2009-04-28 David Kilzer + + A little more hardening for UString + + Reviewed by Maciej Stachowiak. + + Revised fix for in r42644. + + * runtime/UString.cpp: + (JSC::newCapacityWithOverflowCheck): Added. + (JSC::concatenate): Used newCapacityWithOverflowCheck(). + (JSC::UString::append): Ditto. + +2009-04-28 Oliver Hunt + + Reviewed by Gavin Barraclough. + + Bring back r42969, this time with correct codegen + + Add logic to the codegen for right shift to avoid jumping to a helper function + when shifting a small floating point value. + + * jit/JITArithmetic.cpp: + (isSSE2Present): + (JSC::JIT::compileFastArith_op_rshift): + (JSC::JIT::compileFastArithSlow_op_rshift): + +2009-04-28 Kevin Ollivier + + wxMSW build fix. Switch JSCore build back to static. + + * API/JSBase.h: + * config.h: + * jscore.bkl: + +2009-04-28 Oliver Hunt + + Reviewed by NOBODY (Build fix). + + Roll out r42969, due to hangs in build bot. + + * jit/JITArithmetic.cpp: + (JSC::JIT::compileFastArith_op_rshift): + (JSC::JIT::compileFastArithSlow_op_rshift): + (JSC::isSSE2Present): + +2009-04-28 Xan Lopez + + Unreviewed: fix distcheck build, add (even more) missing files to list. + + * GNUmakefile.am: + +2009-04-28 Oliver Hunt + + Reviewed by Geoff Garen. + + Improve performance of string indexing + + Add a cti_get_by_val_string function to specialise indexing into a string object. + This gives us a slight performance win on a number of string tests. + + * jit/JITStubs.cpp: + (JSC::JITStubs::cti_op_get_by_val): + (JSC::JITStubs::cti_op_get_by_val_string): + * jit/JITStubs.h: + +2009-04-28 Oliver Hunt + + Reviewed by Geoff Garen. + + Improve performance of right shifts of large or otherwise floating point values. + + Add logic to the codegen for right shift to avoid jumping to a helper function + when shifting a small floating point value. + + * jit/JITArithmetic.cpp: + (isSSE2Present): Moved to the head of file. + (JSC::JIT::compileFastArith_op_rshift): + (JSC::JIT::compileFastArithSlow_op_rshift): + +2009-04-28 Xan Lopez + + Unreviewed: fix distcheck build, add (more) missing files to list. + + * GNUmakefile.am: + +2009-04-28 Xan Lopez + + Unreviewed: fix distcheck build, add missing header to file list. + + * GNUmakefile.am: + +2009-04-28 Gavin Barraclough + + Rubber stamped by Maciej "Henry Morgan" Stachowiak. + + Enable YARR. + (Again.) + + * wtf/Platform.h: + +2009-04-27 Gavin Barraclough + + Reviewed by Maciej Stachowiak. + + Tweak a loop condition to keep GCC happy, + some GCCs seem to be having issues with this. :-/ + + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::breakTarget): + * wtf/Platform.h: + +2009-04-27 Adam Roben + + Windows Debug build fix + + Not sure why the buildbots weren't affected by this problem. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Let VS + re-order the file list, and added JavaScriptCore[_debug].def to the + project. This was not necessary for the fix, but made making the fix + easier. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: + Removed a function that no longer exists. + +2009-04-26 Gavin Barraclough + + Reviewed by Weinig Sam. + + Fix for https://bugs.webkit.org/show_bug.cgi?id=25416 + "Cached prototype accesses unsafely hoist property storage load above structure checks." + + Do not hoist the load of the pointer to the property storage array. + + No performance impact. + + * jit/JITPropertyAccess.cpp: + (JSC::JIT::privateCompileGetByIdProto): + (JSC::JIT::privateCompileGetByIdProtoList): + +2009-04-26 Gavin Barraclough + + Reviewed by Geoffrey "Gaffe or energy?" Garen. + + Randomize address requested by ExecutableAllocatorFixedVMPool. + + * jit/ExecutableAllocatorFixedVMPool.cpp: + (JSC::FixedVMPoolAllocator::FixedVMPoolAllocator): + +2009-04-26 Sam Weinig + + Reviewed by Eric Seidel. + + Remove scons-based build system. + + * JavaScriptCore.scons: Removed. + +2009-04-25 Oliver Hunt + + Reviewed by NOBODY (Buildfix). + + Make HAVE_MADV_FREE darwin only for now + + * wtf/Platform.h: + +2009-04-25 Jan Michael Alonzo + + Reviewed by Oliver Hunt. + + Gtk build fix - check if we have MADV_FREE before using it. + + * interpreter/RegisterFile.cpp: + (JSC::RegisterFile::releaseExcessCapacity): + * wtf/Platform.h: + +2009-04-24 Kevin Ollivier + + wx build fix. Switching JSCore from a static lib to a dynamic lib + to match the Apple build and fix symbol exports. + + * jscore.bkl: + +2009-04-24 Laszlo Gombos + + Rubber-stamped by Mark Rowe. + + https://bugs.webkit.org/show_bug.cgi?id=25337 + Move ThreadingQt.cpp under the qt directory. + + * JavaScriptCore.pri: + * wtf/ThreadingQt.cpp: Removed. + * wtf/qt/ThreadingQt.cpp: Copied from JavaScriptCore/wtf/ThreadingQt.cpp. + +2009-04-24 Laszlo Gombos + + Rubber-stamped by Mark Rowe. + + https://bugs.webkit.org/show_bug.cgi?id=25338 + Move ThreadingGtk.cpp under the gtk directory. + + * GNUmakefile.am: + * wtf/ThreadingGtk.cpp: Removed. + * wtf/gtk/ThreadingGtk.cpp: Copied from JavaScriptCore/wtf/ThreadingGtk.cpp. + +2009-04-24 Gavin Barraclough + + Reviewed by Sam "Wesley" Weinig. + + Improve performance to YARR interpreter. + (From about 3x slower than PCRE on regex-dna to about 30% slower). + + * yarr/RegexCompiler.cpp: + (JSC::Yarr::RegexPatternConstructor::setupAlternativeOffsets): + * yarr/RegexInterpreter.cpp: + (JSC::Yarr::Interpreter::checkCharacter): + (JSC::Yarr::Interpreter::checkCasedCharacter): + (JSC::Yarr::Interpreter::backtrackPatternCharacter): + (JSC::Yarr::Interpreter::backtrackPatternCasedCharacter): + (JSC::Yarr::Interpreter::matchParentheticalAssertionBegin): + (JSC::Yarr::Interpreter::matchParentheticalAssertionEnd): + (JSC::Yarr::Interpreter::backtrackParentheticalAssertionBegin): + (JSC::Yarr::Interpreter::backtrackParentheticalAssertionEnd): + (JSC::Yarr::Interpreter::matchDisjunction): + (JSC::Yarr::Interpreter::interpret): + (JSC::Yarr::ByteCompiler::atomPatternCharacter): + (JSC::Yarr::ByteCompiler::atomParenthesesSubpatternBegin): + (JSC::Yarr::ByteCompiler::atomParentheticalAssertionBegin): + (JSC::Yarr::ByteCompiler::closeAlternative): + (JSC::Yarr::ByteCompiler::closeBodyAlternative): + (JSC::Yarr::ByteCompiler::atomParenthesesEnd): + (JSC::Yarr::ByteCompiler::regexBegin): + (JSC::Yarr::ByteCompiler::regexEnd): + (JSC::Yarr::ByteCompiler::alterantiveBodyDisjunction): + (JSC::Yarr::ByteCompiler::alterantiveDisjunction): + (JSC::Yarr::ByteCompiler::emitDisjunction): + * yarr/RegexInterpreter.h: + (JSC::Yarr::ByteTerm::): + (JSC::Yarr::ByteTerm::ByteTerm): + (JSC::Yarr::ByteTerm::BodyAlternativeBegin): + (JSC::Yarr::ByteTerm::BodyAlternativeDisjunction): + (JSC::Yarr::ByteTerm::BodyAlternativeEnd): + (JSC::Yarr::ByteTerm::AlternativeBegin): + (JSC::Yarr::ByteTerm::AlternativeDisjunction): + (JSC::Yarr::ByteTerm::AlternativeEnd): + (JSC::Yarr::ByteTerm::SubpatternBegin): + (JSC::Yarr::ByteTerm::SubpatternEnd): + * yarr/RegexJIT.cpp: + (JSC::Yarr::RegexGenerator::generateParentheticalAssertion): + * yarr/RegexPattern.h: + +2009-04-24 Rob Raguet-Schofield + + Rubber-stamped by Mark Rowe. + + * wtf/CurrentTime.h: Fix a typo in a comment. + +2009-04-24 Oliver Hunt + + Reviewed by NOBODY (Build fix). + + Add reinterpret_cast + + * interpreter/RegisterFile.cpp: + (JSC::RegisterFile::releaseExcessCapacity): + +2009-04-23 Oliver Hunt + + Reviewed by Geoff Garen. + + JavaScript register file should remap to release physical pages accumulated during deep recursion + + We now track the maximum extent of the RegisterFile, and when we reach the final + return from JS (so the stack portion of the registerfile becomes empty) we see + if that extent is greater than maxExcessCapacity. If it is we use madvise or + VirtualFree to release the physical pages that were backing the excess. + + * interpreter/RegisterFile.cpp: + (JSC::RegisterFile::releaseExcessCapacity): + * interpreter/RegisterFile.h: + (JSC::RegisterFile::RegisterFile): + (JSC::RegisterFile::shrink): + (JSC::RegisterFile::grow): + +2009-04-23 Mark Rowe + + With great sadness and a heavy heart I switch us back from YARR to WREC in + order to restore greenness to the world once more. + + * wtf/Platform.h: + +2009-04-23 Mark Rowe + + More Windows build fixage. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: + +2009-04-23 Mark Rowe + + Attempt to fix the Windows build. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Remove a symbol that no longer exists. + +2009-04-23 Francisco Tolmasky + + BUG 24604: WebKit profiler reports incorrect total times + + + Reviewed by Timothy Hatcher and Kevin McCullough. + + * JavaScriptCore.exp: + * JavaScriptCore.xcodeproj/project.pbxproj: + * profiler/CallIdentifier.h: + (JSC::CallIdentifier::Hash::hash): + (JSC::CallIdentifier::Hash::equal): + (JSC::CallIdentifier::hash): + (WTF::): + * profiler/HeavyProfile.cpp: Removed. + * profiler/HeavyProfile.h: Removed. + * profiler/Profile.cpp: No more need for TreeProfile/HeavyProfile + (JSC::Profile::create): + * profiler/Profile.h: + * profiler/ProfileNode.cpp: + * profiler/ProfileNode.h: + * profiler/TreeProfile.cpp: Removed. + * profiler/TreeProfile.h: Removed. + +2009-04-23 Gavin Barraclough + + Not Reviewed. + + Speculative Windows build fix II. + + * yarr/RegexInterpreter.cpp: + +2009-04-23 Gavin Barraclough + + Not Reviewed. + + Speculative Windows build fix. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * runtime/RegExp.cpp: + +2009-04-23 Gavin Barraclough + + Rubber stamped by salty sea dogs Sam & Geoff. + + Enable YARR_JIT by default (where supported), replacing WREC. + + * wtf/Platform.h: + +2009-04-23 Gavin Barraclough + + Reviewed by Geoff "Dread Pirate Roberts" Garen. + + Various small fixes to YARR JIT, in preparation for enabling it by default. + + * Correctly index into the callframe when storing restart addresses for + nested alternatives. + * Allow backtracking back into matched alternatives of parentheses. + * Fix callframe offset calculation for parenthetical assertions. + * When a set of parenthese are quantified with a fixed and variable portion, + and the variable portion is quantified once, this should not reset the + pattern match on failure to match (the last match from the firxed portion + should be preserved). + * Up the pattern size limit to match PCRE's new limit. + * Unlclosed parentheses should be reported with the message "missing )". + + * wtf/Platform.h: + * yarr/RegexCompiler.cpp: + (JSC::Yarr::RegexPatternConstructor::quantifyAtom): + (JSC::Yarr::RegexPatternConstructor::setupAlternativeOffsets): + * yarr/RegexInterpreter.cpp: + (JSC::Yarr::Interpreter::matchParentheses): + (JSC::Yarr::Interpreter::backtrackParentheses): + (JSC::Yarr::ByteCompiler::emitDisjunction): + * yarr/RegexJIT.cpp: + (JSC::Yarr::RegexGenerator::loadFromFrameAndJump): + (JSC::Yarr::RegexGenerator::generateParenthesesDisjunction): + (JSC::Yarr::RegexGenerator::generateParentheticalAssertion): + (JSC::Yarr::RegexGenerator::generateTerm): + (JSC::Yarr::executeRegex): + * yarr/RegexParser.h: + (JSC::Yarr::Parser::): + (JSC::Yarr::Parser::parseTokens): + (JSC::Yarr::Parser::parse): + * yarr/RegexPattern.h: + (JSC::Yarr::PatternTerm::): + (JSC::Yarr::PatternTerm::PatternTerm): + +2009-04-22 Mark Rowe + + Rubber-stamped by Gavin Barraclough. + + Add the m_ prefix on FixedVMPoolAllocator's member variables, and fix typos in a few comments. + + * jit/ExecutableAllocatorFixedVMPool.cpp: + (JSC::FixedVMPoolAllocator::addToFreeList): + (JSC::FixedVMPoolAllocator::coalesceFreeSpace): + (JSC::FixedVMPoolAllocator::FixedVMPoolAllocator): + (JSC::FixedVMPoolAllocator::alloc): + (JSC::FixedVMPoolAllocator::free): + (JSC::FixedVMPoolAllocator::isWithinVMPool): + +2009-04-22 Mark Rowe + + Rubber-stamped by Gavin Barraclough. + + Add some assertions to FixedVMPoolAllocator to guard against cases where we + attempt to free memory that didn't originate from the pool, or we attempt to + hand out a bogus address from alloc. + + * jit/ExecutableAllocatorFixedVMPool.cpp: + (JSC::FixedVMPoolAllocator::release): + (JSC::FixedVMPoolAllocator::FixedVMPoolAllocator): + (JSC::FixedVMPoolAllocator::alloc): + (JSC::FixedVMPoolAllocator::free): + (JSC::FixedVMPoolAllocator::isWithinVMPool): + +2009-04-22 Gavin Barraclough + + Rubber stamped by Sam "Blackbeard" Weinig. + + Although pirates do spell the word 'generate' as 'genertate', + webkit developers do not. Fixertate. + + * yarr/RegexJIT.cpp: + (JSC::Yarr::RegexGenerator::generateAssertionBOL): + (JSC::Yarr::RegexGenerator::generateAssertionEOL): + (JSC::Yarr::RegexGenerator::generateAssertionWordBoundary): + (JSC::Yarr::RegexGenerator::generatePatternCharacterSingle): + (JSC::Yarr::RegexGenerator::generatePatternCharacterPair): + (JSC::Yarr::RegexGenerator::generatePatternCharacterFixed): + (JSC::Yarr::RegexGenerator::generatePatternCharacterGreedy): + (JSC::Yarr::RegexGenerator::generatePatternCharacterNonGreedy): + (JSC::Yarr::RegexGenerator::generateCharacterClassSingle): + (JSC::Yarr::RegexGenerator::generateCharacterClassFixed): + (JSC::Yarr::RegexGenerator::generateCharacterClassGreedy): + (JSC::Yarr::RegexGenerator::generateCharacterClassNonGreedy): + (JSC::Yarr::RegexGenerator::generateTerm): + +2009-04-22 Gavin Barraclough + + Reviewed by Sam "Blackbeard" Weinig. + + Improvements to YARR JIT. This patch expands support in three key areas: + * Add (temporary) support for falling back to PCRE for expressions not supported. + * Add support for x86_64 and Windows. + * Add support for singly quantified parentheses (? and ??), alternatives within + parentheses, and parenthetical assertions. + + * runtime/RegExp.cpp: + (JSC::RegExp::match): + * yarr/RegexJIT.cpp: + (JSC::Yarr::RegexGenerator::storeToFrame): + (JSC::Yarr::RegexGenerator::storeToFrameWithPatch): + (JSC::Yarr::RegexGenerator::loadFromFrameAndJump): + (JSC::Yarr::RegexGenerator::AlternativeBacktrackRecord::AlternativeBacktrackRecord): + (JSC::Yarr::RegexGenerator::TermGenerationState::resetAlternative): + (JSC::Yarr::RegexGenerator::TermGenerationState::resetTerm): + (JSC::Yarr::RegexGenerator::TermGenerationState::jumpToBacktrack): + (JSC::Yarr::RegexGenerator::TermGenerationState::plantJumpToBacktrackIfExists): + (JSC::Yarr::RegexGenerator::TermGenerationState::addBacktrackJump): + (JSC::Yarr::RegexGenerator::TermGenerationState::linkAlternativeBacktracks): + (JSC::Yarr::RegexGenerator::TermGenerationState::propagateBacktrackingFrom): + (JSC::Yarr::RegexGenerator::genertateAssertionBOL): + (JSC::Yarr::RegexGenerator::genertateAssertionEOL): + (JSC::Yarr::RegexGenerator::matchAssertionWordchar): + (JSC::Yarr::RegexGenerator::genertateAssertionWordBoundary): + (JSC::Yarr::RegexGenerator::genertatePatternCharacterSingle): + (JSC::Yarr::RegexGenerator::genertatePatternCharacterPair): + (JSC::Yarr::RegexGenerator::genertatePatternCharacterFixed): + (JSC::Yarr::RegexGenerator::genertatePatternCharacterGreedy): + (JSC::Yarr::RegexGenerator::genertatePatternCharacterNonGreedy): + (JSC::Yarr::RegexGenerator::genertateCharacterClassSingle): + (JSC::Yarr::RegexGenerator::genertateCharacterClassFixed): + (JSC::Yarr::RegexGenerator::genertateCharacterClassGreedy): + (JSC::Yarr::RegexGenerator::genertateCharacterClassNonGreedy): + (JSC::Yarr::RegexGenerator::generateParenthesesDisjunction): + (JSC::Yarr::RegexGenerator::generateParenthesesSingle): + (JSC::Yarr::RegexGenerator::generateParentheticalAssertion): + (JSC::Yarr::RegexGenerator::generateTerm): + (JSC::Yarr::RegexGenerator::generateDisjunction): + (JSC::Yarr::RegexGenerator::generateEnter): + (JSC::Yarr::RegexGenerator::generateReturn): + (JSC::Yarr::RegexGenerator::RegexGenerator): + (JSC::Yarr::RegexGenerator::generate): + (JSC::Yarr::RegexGenerator::compile): + (JSC::Yarr::RegexGenerator::generationFailed): + (JSC::Yarr::jitCompileRegex): + (JSC::Yarr::executeRegex): + * yarr/RegexJIT.h: + (JSC::Yarr::RegexCodeBlock::RegexCodeBlock): + (JSC::Yarr::RegexCodeBlock::~RegexCodeBlock): + +2009-04-22 Sam Weinig + + Rubber-stamped by Darin Adler. + + Fix for + Turn off Geolocation by default + + * Configurations/FeatureDefines.xcconfig: + +2009-04-22 Oliver Hunt + + Reviewed by NOBODY (Buildfix). + + * interpreter/CachedCall.h: + +2009-04-21 Oliver Hunt + + Reviewed by NOBODY (Build fix). + + * runtime/StringPrototype.cpp: + +2009-04-21 Oliver Hunt + + Reviewed by Maciej Stachowiak. + + Improve String.replace performance slightly + + Apply our vm reentry caching logic to String.replace with global + regexes. + + * runtime/StringPrototype.cpp: + (JSC::stringProtoFuncReplace): + +2009-04-21 Geoffrey Garen + + Reviewed by Cameron Zwarich and Oliver Hunt. + + Re-Fixed REGRESSION: Stack overflow on PowerPC on + fast/workers/use-machine-stack.html (22531) + + SunSpider reports no change. + + Use a larger recursion limit on the main thread (because we can, and + there's some evidence that it may improve compatibility), and a smaller + recursion limit on secondary threads (because they tend to have smaller + stacks). + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::execute): + (JSC::Interpreter::prepareForRepeatCall): + * interpreter/Interpreter.h: + (JSC::): Ditto. I wrote the recursion test slightly funny, so that the + common case remains a simple compare to constant. + + * runtime/ArrayPrototype.cpp: + (JSC::arrayProtoFuncToString): + (JSC::arrayProtoFuncToLocaleString): + (JSC::arrayProtoFuncJoin): Conservatively, set the array recursion limits + to the lower, secondary thread limit. We can do something fancier if + compatibility moves us, but this seems sufficient for now. + +2009-04-21 Geoffrey Garen + + Rubber-stamped by Adam Roben. + + Disabled one more Mozilla JS test because it fails intermittently on Windows. + (See https://bugs.webkit.org/show_bug.cgi?id=25160.) + + * tests/mozilla/expected.html: + +2009-04-21 Adam Roben + + Rename JavaScriptCore_debug.dll to JavaScriptCore.dll in the Debug + configuration + + This matches the naming scheme for WebKit.dll, and will be necessary + once Safari links against JavaScriptCore.dll. This change also causes + run-safari not to fail (because the launcher printed by FindSafari was + always looking for JavaScriptCore.dll, never + JavaScriptCore_debug.dll). + + Part of Bug 25305: can't run safari or drt on windows + + + Reviewed by Steve Falkenburg and Sam Weinig. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.vcproj/jsc/jsc.vcproj: + * JavaScriptCore.vcproj/testapi/testapi.vcproj: + Use $(WebKitDLLConfigSuffix) for naming JavaScriptCore.{dll,lib}. + +2009-04-21 Adam Roben + + Fix JavaScriptCore build on VC++ Express + + Reviewed by Steve Falkenburg and Sam Weinig. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Link + explicitly against gdi32.lib and oleaut32.lib. + +2009-04-21 Geoffrey Garen + + Reviewed by Mark Rowe. + + Tiger crash fix: Put VM tags in their own header file, and fixed up the + #ifdefs so they're not used on Tiger. + + * JavaScriptCore.xcodeproj/project.pbxproj: + * interpreter/RegisterFile.h: + (JSC::RegisterFile::RegisterFile): + * jit/ExecutableAllocatorFixedVMPool.cpp: + (JSC::FixedVMPoolAllocator::FixedVMPoolAllocator): + * jit/ExecutableAllocatorPosix.cpp: + (JSC::ExecutablePool::systemAlloc): + * runtime/Collector.cpp: + (JSC::allocateBlock): + * wtf/VMTags.h: Added. + +2009-04-20 Steve Falkenburg + + More Windows build fixes. + + * JavaScriptCore.vcproj/JavaScriptCore.make: Copy DLLs, PDBs. + * JavaScriptCore.vcproj/JavaScriptCore.resources: Added. + * JavaScriptCore.vcproj/JavaScriptCore.resources/Info.plist: Added. + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.rc: Added. + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Add version stamping, resource copying. + +2009-04-20 Steve Falkenburg + + Separate JavaScriptCore.dll from WebKit.dll. + Slight performance improvement or no change on benchmarks. + + Allows us to break a circular dependency between CFNetwork and WebKit on Windows, + and simplifies standalone JavaScriptCore builds. + + Reviewed by Oliver Hunt. + + * API/JSBase.h: Export symbols with JS_EXPORT when using MSVC. + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.vcproj/WTF/WTF.vcproj: Build JavaScriptCore as a DLL instead of a static library. + * config.h: Specify __declspec(dllexport/dllimport) appropriately when exporting data. + * runtime/InternalFunction.h: Specify JS_EXPORTDATA on exported data. + * runtime/JSArray.h: Specify JS_EXPORTDATA on exported data. + * runtime/JSFunction.h: Specify JS_EXPORTDATA on exported data. + * runtime/StringObject.h: Specify JS_EXPORTDATA on exported data. + * runtime/UString.h: Specify JS_EXPORTDATA on exported data. + +2009-04-20 Sam Weinig + + Reviewed by Kevin McCullough. + + Always tag mmaped memory on darwin and clean up #defines + now that they are a little bigger. + + * interpreter/RegisterFile.h: + (JSC::RegisterFile::RegisterFile): + * jit/ExecutableAllocatorFixedVMPool.cpp: + (JSC::FixedVMPoolAllocator::FixedVMPoolAllocator): + * jit/ExecutableAllocatorPosix.cpp: + (JSC::ExecutablePool::systemAlloc): + * runtime/Collector.cpp: + (JSC::allocateBlock): + +2009-04-20 Sam Weinig + + Rubber-stamped by Tim Hatcher. + + Add licenses for xcconfig files. + + * Configurations/Base.xcconfig: + * Configurations/DebugRelease.xcconfig: + * Configurations/FeatureDefines.xcconfig: + * Configurations/JavaScriptCore.xcconfig: + * Configurations/Version.xcconfig: + +2009-04-20 Ariya Hidayat + + Build fix for Qt port (after r42646). Not reviewed. + + * wtf/unicode/qt4/UnicodeQt4.h: Added U16_PREV. + +2009-04-19 Sam Weinig + + Reviewed by Darin Adler. + + Better fix for JSStringCreateWithCFString hardening. + + * API/JSStringRefCF.cpp: + (JSStringCreateWithCFString): + +2009-04-19 Sam Weinig + + Reviewed by Dan Bernstein. + + Fix for + Harden JSStringCreateWithCFString against malformed CFStringRefs. + + * API/JSStringRefCF.cpp: + (JSStringCreateWithCFString): + +2009-04-19 David Kilzer + + Make FEATURE_DEFINES completely dynamic + + Reviewed by Darin Adler. + + Make FEATURE_DEFINES depend on individual ENABLE_FEATURE_NAME + variables for each feature, making it possible to remove all + knowledge of FEATURE_DEFINES from build-webkit. + + * Configurations/FeatureDefines.xcconfig: Extract a variable + from FEATURE_DEFINES for each feature setting. + +2009-04-18 Sam Weinig + + Reviewed by Dan Bernstein. + + Fix typo. s/VM_MEMORY_JAVASCRIPT_JIT_REGISTER_FILE/VM_MEMORY_JAVASCRIPT_CORE/ + + * runtime/Collector.cpp: + (JSC::allocateBlock): Fix bozo typo. + +2009-04-18 Sam Weinig + + Reviewed by Anders Carlsson. + + Fix for Tag JavaScript memory on SnowLeopard + + * interpreter/RegisterFile.h: + (JSC::RegisterFile::RegisterFile): + * jit/ExecutableAllocatorFixedVMPool.cpp: + (JSC::FixedVMPoolAllocator::FixedVMPoolAllocator): + * jit/ExecutableAllocatorPosix.cpp: + (JSC::ExecutablePool::systemAlloc): + * runtime/Collector.cpp: + (JSC::allocateBlock): + +2009-04-18 Drew Wilson + + VisiblePosition.characterAfter should return UChar32 + + Reviewed by Dan Bernstein. + + * wtf/unicode/icu/UnicodeIcu.h: + (WTF::Unicode::hasLineBreakingPropertyComplexContextOrIdeographic): Added. + +2009-04-18 Sam Weinig + + Reviewed by Mark Rowe. + + Fix for + A little bit of hardening for UString. + + * runtime/UString.cpp: + (JSC::concatenate): + (JSC::UString::append): + +2009-04-18 Sam Weinig + + Reviewed by Mark Rowe and Dan Bernstein. + + Fix for + A little bit of hardening for Vector. + + * wtf/Vector.h: + (WTF::Vector::append): + (WTF::Vector::insert): + +2009-04-17 Gavin Barraclough + + Reviewed by Geoff Garen. + + On x86_64, make all JIT-code allocations from a new heap, managed + by FixedVMPoolAllocator. This class allocates a single large (2Gb) + pool of virtual memory from which all further allocations take place. + Since all JIT code is allocated from this pool, we can continue to + safely assume (as is already asserted) that it will always be possible + to link any JIT-code to JIT-code jumps and calls. + + * JavaScriptCore.xcodeproj/project.pbxproj: + Add new file. + * jit/ExecutableAllocatorFixedVMPool.cpp: Added. + (JSC::FreeListEntry::FreeListEntry): + (JSC::AVLTreeAbstractorForFreeList::get_less): + (JSC::AVLTreeAbstractorForFreeList::set_less): + (JSC::AVLTreeAbstractorForFreeList::get_greater): + (JSC::AVLTreeAbstractorForFreeList::set_greater): + (JSC::AVLTreeAbstractorForFreeList::get_balance_factor): + (JSC::AVLTreeAbstractorForFreeList::set_balance_factor): + (JSC::AVLTreeAbstractorForFreeList::null): + (JSC::AVLTreeAbstractorForFreeList::compare_key_key): + (JSC::AVLTreeAbstractorForFreeList::compare_key_node): + (JSC::AVLTreeAbstractorForFreeList::compare_node_node): + (JSC::sortFreeListEntriesByPointer): + (JSC::sortCommonSizedAllocations): + (JSC::FixedVMPoolAllocator::release): + (JSC::FixedVMPoolAllocator::reuse): + (JSC::FixedVMPoolAllocator::addToFreeList): + (JSC::FixedVMPoolAllocator::coalesceFreeSpace): + (JSC::FixedVMPoolAllocator::FixedVMPoolAllocator): + (JSC::FixedVMPoolAllocator::alloc): + (JSC::FixedVMPoolAllocator::free): + (JSC::ExecutableAllocator::intializePageSize): + (JSC::ExecutablePool::systemAlloc): + (JSC::ExecutablePool::systemRelease): + The new 2Gb heap class! + * jit/ExecutableAllocatorPosix.cpp: + Disable use of this implementation on x86_64. + * wtf/AVLTree.h: + Add missing variable initialization. + (WTF::::remove): + +2009-04-17 Oliver Hunt + + Reviewed by Darin Adler. + + Fix bug where the VM reentry cache would not correctly unroll the cached callframe + + Fix a check that was intended to mark a cached call as invalid when the callframe could + not be constructed. Instead it was just checking that there was a place to put the + exception. This eventually results in a non-recoverable RegisterFile starvation. + + * interpreter/CachedCall.h: + (JSC::CachedCall::CachedCall): + (JSC::CachedCall::call): add assertion to ensure we don't use a bad callframe + +2009-04-17 David Kilzer + + Simplify FEATURE_DEFINES definition + + Reviewed by Darin Adler. + + This moves FEATURE_DEFINES and its related ENABLE_FEATURE_NAME + variables to their own FeatureDefines.xcconfig file. It also + extracts a new ENABLE_GEOLOCATION variable so that + FEATURE_DEFINES only needs to be defined once. + + * Configurations/FeatureDefines.xcconfig: Added. + * Configurations/JavaScriptCore.xcconfig: Removed definition of + ENABLE_SVG_DOM_OBJC_BINDINGS and FEATURE_DEFINES. Added include + of FeatureDefines.xcconfig. + * JavaScriptCore.xcodeproj/project.pbxproj: Added + FeatureDefines.xcconfig file. + +2009-04-08 Mihnea Ovidenie + + Reviewed by Oliver Hunt. + + Bug 25027: JavaScript parseInt wrong on negative numbers + + + When dealing with negative numbers, parseInt should use ceil instead of floor. + + * runtime/JSGlobalObjectFunctions.cpp: + (JSC::globalFuncParseInt): + +2009-04-16 Stephanie Lewis + + Reviewed by Oliver Hunt. + + 32-bit to 64-bit: Javascript hash tables double in size + + Remove perfect hash optimization which removes 1 MB of overhead on 32-bit and almost 2 MB on 64-bit. Removing the optimization was not a regression on SunSpider and the acid 3 test still passes. + + * create_hash_table: + * runtime/Lookup.cpp: + (JSC::HashTable::createTable): + (JSC::HashTable::deleteTable): + * runtime/Lookup.h: + (JSC::HashEntry::initialize): + (JSC::HashEntry::next): + (JSC::HashTable::entry): + * runtime/Structure.cpp: + (JSC::Structure::getEnumerableNamesFromClassInfoTable): + +2009-04-16 Oliver Hunt + + Reviewed by Gavin Barraclough. + + Fix subtle error in optimised VM reentry in Array.sort + + Basically to ensure we don't accidentally invalidate the cached callframe + we should be using the cached callframe rather than our own exec state. + While the old behaviour was wrong i have been unable to actually create a + test case where anything actually ends up going wrong. + + * interpreter/CachedCall.h: + (JSC::CachedCall::newCallFrame): + * runtime/JSArray.cpp: + (JSC::AVLTreeAbstractorForArrayCompare::compare_key_key): + +2009-04-16 Oliver Hunt + + Reviewed by Gavin Barraclough. + + Optimise op_resolve_base + + If we can statically find a property we are trying to resolve + the base of, the base is guaranteed to be the global object. + + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::emitResolveBase): + +2009-04-16 Oliver Hunt + + Reviewed by Gavin Barraclough. + + Improve performance of read-write-modify operators + + Implement cross scope optimisation for read-write-modify + operators, to avoid unnecessary calls to property resolve + helper functions. + + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::BytecodeGenerator): + (JSC::BytecodeGenerator::emitLoadGlobalObject): + (JSC::BytecodeGenerator::emitResolveWithBase): + * bytecompiler/BytecodeGenerator.h: + +2009-04-16 Oliver Hunt + + Reviewed by Gavin Barraclough. + + Improve performance of remaining array enumeration functions + + Make use of function entry cache for remaining Array enumeration functions. + + * runtime/ArrayPrototype.cpp: + (JSC::arrayProtoFuncMap): + (JSC::arrayProtoFuncEvery): + (JSC::arrayProtoFuncForEach): + (JSC::arrayProtoFuncSome): + +2009-04-15 Oliver Hunt + + Reviewed by Gavin Barraclough. + + Improve performance of Array.sort + + Cache the VM entry for Array.sort when using a JS comparison function. + + * runtime/JSArray.cpp: + (JSC::AVLTreeAbstractorForArrayCompare::compare_key_key): + (JSC::JSArray::sort): + +2009-04-15 Oliver Hunt + + Reviewed by Gavin Barraclough. + + Bug 25229: Need support for Array.prototype.reduceRight + + + Implement Array.reduceRight + + * runtime/ArrayPrototype.cpp: + (JSC::arrayProtoFuncReduceRight): + +2009-04-15 Oliver Hunt + + Reviewed by Gavin Barraclough. + + Bug 25227: Array.filter triggers an assertion when the target array shrinks while being filtered + + + We correct this simply by making the fast array path fall back on the slow path if + we ever discover the fast access is unsafe. + + * runtime/ArrayPrototype.cpp: + (JSC::arrayProtoFuncFilter): + +2009-04-13 Oliver Hunt + + Reviewed by Gavin Barraclough. + + Bug 25159: Support Array.prototype.reduce + + + Implement Array.prototype.reduce + + * runtime/ArrayPrototype.cpp: + (JSC::arrayProtoFuncReduce): + +2009-04-15 Oliver Hunt + + Reviewed by NOBODY (Build fix). + + Move CallFrameClosure from inside the Interpreter class to its own file. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * interpreter/CachedCall.h: + * interpreter/CallFrameClosure.h: Copied from JavaScriptCore/yarr/RegexJIT.h. + (JSC::CallFrameClosure::setArgument): + (JSC::CallFrameClosure::resetCallFrame): + * interpreter/Interpreter.cpp: + (JSC::Interpreter::prepareForRepeatCall): + * interpreter/Interpreter.h: + +2009-04-14 Oliver Hunt + + Reviewed by Cameron Zwarich. + + Bug 25202: Improve performance of repeated callbacks into the VM + + Add the concept of a CachedCall to native code for use in Array + prototype and similar functions where a single callback function + is called repeatedly with the same number of arguments. + + Used Array.prototype.filter as the test function and got a 50% win + over a naive non-caching specialised version. This makes the native + implementation of Array.prototype.filter faster than the JS one once + more. + + * JavaScriptCore.vcproj/JavaScriptCore.sln: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * interpreter/CachedCall.h: Added. + (JSC::CachedCall::CachedCall): + (JSC::CachedCall::call): + (JSC::CachedCall::setThis): + (JSC::CachedCall::setArgument): + (JSC::CachedCall::~CachedCall): + CachedCall is a wrapper that automates the calling and teardown + for a CallFrameClosure + * interpreter/CallFrame.h: + * interpreter/Interpreter.cpp: + (JSC::Interpreter::prepareForRepeatCall): + Create the basic entry closure for a function + (JSC::Interpreter::execute): + A new ::execute method to enter the interpreter from a closure + (JSC::Interpreter::endRepeatCall): + Clear the entry closure + * interpreter/Interpreter.h: + (JSC::Interpreter::CallFrameClosure::setArgument): + (JSC::Interpreter::CallFrameClosure::resetCallFrame): + Helper functions to simplify setting up the closure's callframe + * runtime/ArrayPrototype.cpp: + (JSC::arrayProtoFuncFilter): + +2009-04-14 Xan Lopez + + Fix the build. + + Add the yarr headers (and only the headers) to the build, so that + RegExp.cpp can compile. The headers are ifdefed out with yarr + disabled, so we don't need anything else for now. + + * GNUmakefile.am: + +2009-04-14 Adam Roben + + Remove support for profile-guided optimization on Windows + + Rubber-stamped by Steve Falkenburg. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Removed + the Release_PGO configuration. Also let VS re-order the source files + list. + +2009-04-14 Xan Lopez + + Unreviewed build fix. + + * GNUmakefile.am: + +2009-04-14 Jan Michael Alonzo + + Gtk build fix when building minidom. Not reviewed. + + Use C-style comment instead of C++ style since autotools builds + minidom using gcc and not g++. + + * wtf/Platform.h: + +2009-04-14 Gavin Barraclough + + Reviewed by NOBODY - speculative build fix. + + * runtime/RegExp.h: + +2009-04-13 Gavin Barraclough + + Reviewed by Cap'n Geoff Garen. + + Yarr! + (Yet another regex runtime). + + Currently disabled by default since the interpreter, whilst awesomely + functional, has not been optimized and is likely slower than PCRE, and + the JIT, whilst faster than WREC, is presently incomplete and does not + fallback to using an interpreter for the cases it cannot handle. + + * JavaScriptCore.xcodeproj/project.pbxproj: + * assembler/MacroAssemblerX86Common.h: + (JSC::MacroAssemblerX86Common::move): + (JSC::MacroAssemblerX86Common::swap): + (JSC::MacroAssemblerX86Common::signExtend32ToPtr): + (JSC::MacroAssemblerX86Common::zeroExtend32ToPtr): + (JSC::MacroAssemblerX86Common::branch32): + (JSC::MacroAssemblerX86Common::branch16): + * assembler/X86Assembler.h: + (JSC::X86Assembler::cmpw_im): + (JSC::X86Assembler::testw_rr): + (JSC::X86Assembler::X86InstructionFormatter::immediate16): + * runtime/RegExp.cpp: + (JSC::RegExp::RegExp): + (JSC::RegExp::~RegExp): + (JSC::RegExp::create): + (JSC::RegExp::compile): + (JSC::RegExp::match): + * runtime/RegExp.h: + * wtf/Platform.h: + * yarr: Added. + * yarr/RegexCompiler.cpp: Added. + (JSC::Yarr::CharacterClassConstructor::CharacterClassConstructor): + (JSC::Yarr::CharacterClassConstructor::reset): + (JSC::Yarr::CharacterClassConstructor::append): + (JSC::Yarr::CharacterClassConstructor::putChar): + (JSC::Yarr::CharacterClassConstructor::isUnicodeUpper): + (JSC::Yarr::CharacterClassConstructor::isUnicodeLower): + (JSC::Yarr::CharacterClassConstructor::putRange): + (JSC::Yarr::CharacterClassConstructor::charClass): + (JSC::Yarr::CharacterClassConstructor::addSorted): + (JSC::Yarr::CharacterClassConstructor::addSortedRange): + (JSC::Yarr::newlineCreate): + (JSC::Yarr::digitsCreate): + (JSC::Yarr::spacesCreate): + (JSC::Yarr::wordcharCreate): + (JSC::Yarr::nondigitsCreate): + (JSC::Yarr::nonspacesCreate): + (JSC::Yarr::nonwordcharCreate): + (JSC::Yarr::RegexPatternConstructor::RegexPatternConstructor): + (JSC::Yarr::RegexPatternConstructor::~RegexPatternConstructor): + (JSC::Yarr::RegexPatternConstructor::reset): + (JSC::Yarr::RegexPatternConstructor::assertionBOL): + (JSC::Yarr::RegexPatternConstructor::assertionEOL): + (JSC::Yarr::RegexPatternConstructor::assertionWordBoundary): + (JSC::Yarr::RegexPatternConstructor::atomPatternCharacter): + (JSC::Yarr::RegexPatternConstructor::atomBuiltInCharacterClass): + (JSC::Yarr::RegexPatternConstructor::atomCharacterClassBegin): + (JSC::Yarr::RegexPatternConstructor::atomCharacterClassAtom): + (JSC::Yarr::RegexPatternConstructor::atomCharacterClassRange): + (JSC::Yarr::RegexPatternConstructor::atomCharacterClassBuiltIn): + (JSC::Yarr::RegexPatternConstructor::atomCharacterClassEnd): + (JSC::Yarr::RegexPatternConstructor::atomParenthesesSubpatternBegin): + (JSC::Yarr::RegexPatternConstructor::atomParentheticalAssertionBegin): + (JSC::Yarr::RegexPatternConstructor::atomParenthesesEnd): + (JSC::Yarr::RegexPatternConstructor::atomBackReference): + (JSC::Yarr::RegexPatternConstructor::copyDisjunction): + (JSC::Yarr::RegexPatternConstructor::copyTerm): + (JSC::Yarr::RegexPatternConstructor::quantifyAtom): + (JSC::Yarr::RegexPatternConstructor::disjunction): + (JSC::Yarr::RegexPatternConstructor::regexBegin): + (JSC::Yarr::RegexPatternConstructor::regexEnd): + (JSC::Yarr::RegexPatternConstructor::regexError): + (JSC::Yarr::RegexPatternConstructor::setupAlternativeOffsets): + (JSC::Yarr::RegexPatternConstructor::setupDisjunctionOffsets): + (JSC::Yarr::RegexPatternConstructor::setupOffsets): + (JSC::Yarr::compileRegex): + * yarr/RegexCompiler.h: Added. + * yarr/RegexInterpreter.cpp: Added. + (JSC::Yarr::Interpreter::appendParenthesesDisjunctionContext): + (JSC::Yarr::Interpreter::popParenthesesDisjunctionContext): + (JSC::Yarr::Interpreter::DisjunctionContext::DisjunctionContext): + (JSC::Yarr::Interpreter::DisjunctionContext::operator new): + (JSC::Yarr::Interpreter::allocDisjunctionContext): + (JSC::Yarr::Interpreter::freeDisjunctionContext): + (JSC::Yarr::Interpreter::ParenthesesDisjunctionContext::ParenthesesDisjunctionContext): + (JSC::Yarr::Interpreter::ParenthesesDisjunctionContext::operator new): + (JSC::Yarr::Interpreter::ParenthesesDisjunctionContext::restoreOutput): + (JSC::Yarr::Interpreter::ParenthesesDisjunctionContext::getDisjunctionContext): + (JSC::Yarr::Interpreter::allocParenthesesDisjunctionContext): + (JSC::Yarr::Interpreter::freeParenthesesDisjunctionContext): + (JSC::Yarr::Interpreter::InputStream::InputStream): + (JSC::Yarr::Interpreter::InputStream::next): + (JSC::Yarr::Interpreter::InputStream::rewind): + (JSC::Yarr::Interpreter::InputStream::read): + (JSC::Yarr::Interpreter::InputStream::readChecked): + (JSC::Yarr::Interpreter::InputStream::reread): + (JSC::Yarr::Interpreter::InputStream::prev): + (JSC::Yarr::Interpreter::InputStream::getPos): + (JSC::Yarr::Interpreter::InputStream::setPos): + (JSC::Yarr::Interpreter::InputStream::atStart): + (JSC::Yarr::Interpreter::InputStream::atEnd): + (JSC::Yarr::Interpreter::InputStream::checkInput): + (JSC::Yarr::Interpreter::InputStream::uncheckInput): + (JSC::Yarr::Interpreter::testCharacterClass): + (JSC::Yarr::Interpreter::tryConsumeCharacter): + (JSC::Yarr::Interpreter::checkCharacter): + (JSC::Yarr::Interpreter::tryConsumeCharacterClass): + (JSC::Yarr::Interpreter::checkCharacterClass): + (JSC::Yarr::Interpreter::tryConsumeBackReference): + (JSC::Yarr::Interpreter::matchAssertionBOL): + (JSC::Yarr::Interpreter::matchAssertionEOL): + (JSC::Yarr::Interpreter::matchAssertionWordBoundary): + (JSC::Yarr::Interpreter::matchPatternCharacter): + (JSC::Yarr::Interpreter::backtrackPatternCharacter): + (JSC::Yarr::Interpreter::matchCharacterClass): + (JSC::Yarr::Interpreter::backtrackCharacterClass): + (JSC::Yarr::Interpreter::matchBackReference): + (JSC::Yarr::Interpreter::backtrackBackReference): + (JSC::Yarr::Interpreter::recordParenthesesMatch): + (JSC::Yarr::Interpreter::resetMatches): + (JSC::Yarr::Interpreter::resetAssertionMatches): + (JSC::Yarr::Interpreter::parenthesesDoBacktrack): + (JSC::Yarr::Interpreter::matchParenthesesOnceBegin): + (JSC::Yarr::Interpreter::matchParenthesesOnceEnd): + (JSC::Yarr::Interpreter::backtrackParenthesesOnceBegin): + (JSC::Yarr::Interpreter::backtrackParenthesesOnceEnd): + (JSC::Yarr::Interpreter::matchParentheticalAssertionOnceBegin): + (JSC::Yarr::Interpreter::matchParentheticalAssertionOnceEnd): + (JSC::Yarr::Interpreter::backtrackParentheticalAssertionOnceBegin): + (JSC::Yarr::Interpreter::backtrackParentheticalAssertionOnceEnd): + (JSC::Yarr::Interpreter::matchParentheses): + (JSC::Yarr::Interpreter::backtrackParentheses): + (JSC::Yarr::Interpreter::matchTerm): + (JSC::Yarr::Interpreter::backtrackTerm): + (JSC::Yarr::Interpreter::matchAlternative): + (JSC::Yarr::Interpreter::matchDisjunction): + (JSC::Yarr::Interpreter::matchNonZeroDisjunction): + (JSC::Yarr::Interpreter::interpret): + (JSC::Yarr::Interpreter::Interpreter): + (JSC::Yarr::ByteCompiler::ParenthesesStackEntry::ParenthesesStackEntry): + (JSC::Yarr::ByteCompiler::ByteCompiler): + (JSC::Yarr::ByteCompiler::compile): + (JSC::Yarr::ByteCompiler::checkInput): + (JSC::Yarr::ByteCompiler::assertionBOL): + (JSC::Yarr::ByteCompiler::assertionEOL): + (JSC::Yarr::ByteCompiler::assertionWordBoundary): + (JSC::Yarr::ByteCompiler::atomPatternCharacter): + (JSC::Yarr::ByteCompiler::atomCharacterClass): + (JSC::Yarr::ByteCompiler::atomBackReference): + (JSC::Yarr::ByteCompiler::atomParenthesesSubpatternBegin): + (JSC::Yarr::ByteCompiler::atomParentheticalAssertionBegin): + (JSC::Yarr::ByteCompiler::popParenthesesStack): + (JSC::Yarr::ByteCompiler::dumpDisjunction): + (JSC::Yarr::ByteCompiler::closeAlternative): + (JSC::Yarr::ByteCompiler::atomParenthesesEnd): + (JSC::Yarr::ByteCompiler::regexBegin): + (JSC::Yarr::ByteCompiler::regexEnd): + (JSC::Yarr::ByteCompiler::alterantiveDisjunction): + (JSC::Yarr::ByteCompiler::emitDisjunction): + (JSC::Yarr::byteCompileRegex): + (JSC::Yarr::interpretRegex): + * yarr/RegexInterpreter.h: Added. + (JSC::Yarr::ByteTerm::): + (JSC::Yarr::ByteTerm::ByteTerm): + (JSC::Yarr::ByteTerm::BOL): + (JSC::Yarr::ByteTerm::CheckInput): + (JSC::Yarr::ByteTerm::EOL): + (JSC::Yarr::ByteTerm::WordBoundary): + (JSC::Yarr::ByteTerm::BackReference): + (JSC::Yarr::ByteTerm::AlternativeBegin): + (JSC::Yarr::ByteTerm::AlternativeDisjunction): + (JSC::Yarr::ByteTerm::AlternativeEnd): + (JSC::Yarr::ByteTerm::PatternEnd): + (JSC::Yarr::ByteTerm::invert): + (JSC::Yarr::ByteTerm::capture): + (JSC::Yarr::ByteDisjunction::ByteDisjunction): + (JSC::Yarr::BytecodePattern::BytecodePattern): + (JSC::Yarr::BytecodePattern::~BytecodePattern): + * yarr/RegexJIT.cpp: Added. + (JSC::Yarr::RegexGenerator::optimizeAlternative): + (JSC::Yarr::RegexGenerator::matchCharacterClassRange): + (JSC::Yarr::RegexGenerator::matchCharacterClass): + (JSC::Yarr::RegexGenerator::jumpIfNoAvailableInput): + (JSC::Yarr::RegexGenerator::jumpIfAvailableInput): + (JSC::Yarr::RegexGenerator::checkInput): + (JSC::Yarr::RegexGenerator::atEndOfInput): + (JSC::Yarr::RegexGenerator::notAtEndOfInput): + (JSC::Yarr::RegexGenerator::jumpIfCharEquals): + (JSC::Yarr::RegexGenerator::jumpIfCharNotEquals): + (JSC::Yarr::RegexGenerator::readCharacter): + (JSC::Yarr::RegexGenerator::storeToFrame): + (JSC::Yarr::RegexGenerator::loadFromFrame): + (JSC::Yarr::RegexGenerator::TermGenerationState::TermGenerationState): + (JSC::Yarr::RegexGenerator::TermGenerationState::resetAlternative): + (JSC::Yarr::RegexGenerator::TermGenerationState::alternativeValid): + (JSC::Yarr::RegexGenerator::TermGenerationState::nextAlternative): + (JSC::Yarr::RegexGenerator::TermGenerationState::alternative): + (JSC::Yarr::RegexGenerator::TermGenerationState::resetTerm): + (JSC::Yarr::RegexGenerator::TermGenerationState::termValid): + (JSC::Yarr::RegexGenerator::TermGenerationState::nextTerm): + (JSC::Yarr::RegexGenerator::TermGenerationState::term): + (JSC::Yarr::RegexGenerator::TermGenerationState::lookaheadTerm): + (JSC::Yarr::RegexGenerator::TermGenerationState::isSinglePatternCharacterLookaheadTerm): + (JSC::Yarr::RegexGenerator::TermGenerationState::inputOffset): + (JSC::Yarr::RegexGenerator::TermGenerationState::jumpToBacktrack): + (JSC::Yarr::RegexGenerator::TermGenerationState::setBacktrackGenerated): + (JSC::Yarr::RegexGenerator::jumpToBacktrackCheckEmitPending): + (JSC::Yarr::RegexGenerator::genertateAssertionBOL): + (JSC::Yarr::RegexGenerator::genertateAssertionEOL): + (JSC::Yarr::RegexGenerator::matchAssertionWordchar): + (JSC::Yarr::RegexGenerator::genertateAssertionWordBoundary): + (JSC::Yarr::RegexGenerator::genertatePatternCharacterSingle): + (JSC::Yarr::RegexGenerator::genertatePatternCharacterPair): + (JSC::Yarr::RegexGenerator::genertatePatternCharacterFixed): + (JSC::Yarr::RegexGenerator::genertatePatternCharacterGreedy): + (JSC::Yarr::RegexGenerator::genertatePatternCharacterNonGreedy): + (JSC::Yarr::RegexGenerator::genertateCharacterClassSingle): + (JSC::Yarr::RegexGenerator::genertateCharacterClassFixed): + (JSC::Yarr::RegexGenerator::genertateCharacterClassGreedy): + (JSC::Yarr::RegexGenerator::genertateCharacterClassNonGreedy): + (JSC::Yarr::RegexGenerator::generateParenthesesSingleDisjunctionOneAlternative): + (JSC::Yarr::RegexGenerator::generateParenthesesSingle): + (JSC::Yarr::RegexGenerator::generateTerm): + (JSC::Yarr::RegexGenerator::generateDisjunction): + (JSC::Yarr::RegexGenerator::RegexGenerator): + (JSC::Yarr::RegexGenerator::generate): + (JSC::Yarr::jitCompileRegex): + (JSC::Yarr::executeRegex): + * yarr/RegexJIT.h: Added. + (JSC::Yarr::RegexCodeBlock::RegexCodeBlock): + * yarr/RegexParser.h: Added. + (JSC::Yarr::): + (JSC::Yarr::Parser::): + (JSC::Yarr::Parser::CharacterClassParserDelegate::CharacterClassParserDelegate): + (JSC::Yarr::Parser::CharacterClassParserDelegate::begin): + (JSC::Yarr::Parser::CharacterClassParserDelegate::atomPatternCharacterUnescaped): + (JSC::Yarr::Parser::CharacterClassParserDelegate::atomPatternCharacter): + (JSC::Yarr::Parser::CharacterClassParserDelegate::atomBuiltInCharacterClass): + (JSC::Yarr::Parser::CharacterClassParserDelegate::end): + (JSC::Yarr::Parser::CharacterClassParserDelegate::assertionWordBoundary): + (JSC::Yarr::Parser::CharacterClassParserDelegate::atomBackReference): + (JSC::Yarr::Parser::CharacterClassParserDelegate::flush): + (JSC::Yarr::Parser::CharacterClassParserDelegate::): + (JSC::Yarr::Parser::Parser): + (JSC::Yarr::Parser::parseEscape): + (JSC::Yarr::Parser::parseAtomEscape): + (JSC::Yarr::Parser::parseCharacterClassEscape): + (JSC::Yarr::Parser::parseCharacterClass): + (JSC::Yarr::Parser::parseParenthesesBegin): + (JSC::Yarr::Parser::parseParenthesesEnd): + (JSC::Yarr::Parser::parseQuantifier): + (JSC::Yarr::Parser::parseTokens): + (JSC::Yarr::Parser::parse): + (JSC::Yarr::Parser::saveState): + (JSC::Yarr::Parser::restoreState): + (JSC::Yarr::Parser::atEndOfPattern): + (JSC::Yarr::Parser::peek): + (JSC::Yarr::Parser::peekIsDigit): + (JSC::Yarr::Parser::peekDigit): + (JSC::Yarr::Parser::consume): + (JSC::Yarr::Parser::consumeDigit): + (JSC::Yarr::Parser::consumeNumber): + (JSC::Yarr::Parser::consumeOctal): + (JSC::Yarr::Parser::tryConsume): + (JSC::Yarr::Parser::tryConsumeHex): + (JSC::Yarr::parse): + * yarr/RegexPattern.h: Added. + (JSC::Yarr::CharacterRange::CharacterRange): + (JSC::Yarr::): + (JSC::Yarr::PatternTerm::): + (JSC::Yarr::PatternTerm::PatternTerm): + (JSC::Yarr::PatternTerm::BOL): + (JSC::Yarr::PatternTerm::EOL): + (JSC::Yarr::PatternTerm::WordBoundary): + (JSC::Yarr::PatternTerm::invert): + (JSC::Yarr::PatternTerm::capture): + (JSC::Yarr::PatternTerm::quantify): + (JSC::Yarr::PatternAlternative::PatternAlternative): + (JSC::Yarr::PatternAlternative::lastTerm): + (JSC::Yarr::PatternAlternative::removeLastTerm): + (JSC::Yarr::PatternDisjunction::PatternDisjunction): + (JSC::Yarr::PatternDisjunction::~PatternDisjunction): + (JSC::Yarr::PatternDisjunction::addNewAlternative): + (JSC::Yarr::RegexPattern::RegexPattern): + (JSC::Yarr::RegexPattern::~RegexPattern): + (JSC::Yarr::RegexPattern::reset): + (JSC::Yarr::RegexPattern::containsIllegalBackReference): + (JSC::Yarr::RegexPattern::newlineCharacterClass): + (JSC::Yarr::RegexPattern::digitsCharacterClass): + (JSC::Yarr::RegexPattern::spacesCharacterClass): + (JSC::Yarr::RegexPattern::wordcharCharacterClass): + (JSC::Yarr::RegexPattern::nondigitsCharacterClass): + (JSC::Yarr::RegexPattern::nonspacesCharacterClass): + (JSC::Yarr::RegexPattern::nonwordcharCharacterClass): + +2009-04-13 Oliver Hunt + + Reviewed by NOBODY (Missed code from last patch). + + * runtime/InternalFunction.cpp: + (JSC::InternalFunction::displayName): + (JSC::InternalFunction::calculatedDisplayName): + * runtime/InternalFunction.h: + +2009-04-13 Francisco Tolmasky + + Reviewed by Oliver Hunt. + + BUG 25171: It should be possible to manually set the name of an anonymous function + + + This change adds the displayName property to functions, which when set overrides the + normal name when appearing in the console. + + * profiler/Profiler.cpp: + (JSC::createCallIdentifierFromFunctionImp): Changed call to InternalFunction::name to InternalFunction::calculatedDisplayName + * runtime/CommonIdentifiers.h: Added displayName common identifier. + * runtime/InternalFunction.cpp: + (JSC::InternalFunction::displayName): Access to user settable displayName property + (JSC::InternalFunction::calculatedDisplayName): Returns displayName if it exists, if not then the natural name + +2009-04-13 Geoffrey Garen + + Reviewed by Sam Weinig. + + Disabled another JavaScriptCore test because it fails on Windows but + not Mac, so it makes the bots red. + + * tests/mozilla/expected.html: + +2009-04-13 Geoffrey Garen + + Reviewed by Sam Weinig. + + Disabled two JavaScriptCore tests because they fail on Window or Mac but + not both, so they make the bots red. + + * tests/mozilla/expected.html: Updated expected results. + +2009-04-09 Ben Murdoch + + Reviewed by Alexey Proskuryakov. + + https://bugs.webkit.org/show_bug.cgi?id=25091 + The Android platform requires threads to be registered with the VM. + This patch implements this behaviour inside ThreadingPthreads.cpp. + + * wtf/ThreadingPthreads.cpp: Add a level above threadEntryPoint that takes care of (un)registering threads with the VM. + (WTF::runThreadWithRegistration): register the thread and run entryPoint. Unregister the thread afterwards. + (WTF::createThreadInternal): call runThreadWithRegistration instead of entryPoint directly. + +2009-04-09 David Kilzer + + Reinstating Option to turn off SVG DOM Objective-C bindings + + Rolled r42345 back in. The build failure was caused by an + internal script which had not been updated the same way that + build-webkit was updated. + + * Configurations/JavaScriptCore.xcconfig: + +2009-04-09 Alexey Proskuryakov + + Reverting Option to turn off SVG DOM Objective-C bindings. + It broke Mac build, and I don't know how to fix it. + + * Configurations/JavaScriptCore.xcconfig: + +2009-04-09 Xan Lopez + + Unreviewed build fix. + + Checking for __GLIBCXX__ being bigger than some date is not enough + to get std::tr1, C++0x has to be in use too. Add another check for + __GXX_EXPERIMENTAL_CXX0X__. + + * wtf/TypeTraits.h: + +2009-04-08 Oliver Hunt + + Reviewed by Adam Roben. + + Fix assertion failure in function.apply + + The result of excess arguments to function.apply is irrelevant + so we don't need to provide a result register. We were providing + temporary result register but not ref'ing it resulting in an + assertion failure. + + * parser/Nodes.cpp: + (JSC::ApplyFunctionCallDotNode::emitBytecode): + +2009-04-08 David Kilzer + + Option to turn off SVG DOM Objective-C bindings + + Reviewed by Darin Adler and Maciej Stachowiak. + + Introduce the ENABLE_SVG_DOM_OBJC_BINDINGS feature define so + that SVG DOM Objective-C bindings may be optionally disabled. + + * Configurations/JavaScriptCore.xcconfig: Added + ENABLE_SVG_DOM_OBJC_BINDINGS variable and use it in + FEATURE_DEFINES. + +2009-04-08 Paul Pedriana + + Reviewed by Darin Adler. + + https://bugs.webkit.org/show_bug.cgi?id=20422 + Allow custom memory allocation control. + + * wtf/FastAllocBase.h: + New added file. Implements allocation base class. + * wtf/TypeTraits.h: + Augments existing type traits support as needed by FastAllocBase. + * wtf/FastMalloc.h: + Changed to support FastMalloc match validation. + * wtf/FastMalloc.cpp: + Changed to support FastMalloc match validation. + * wtf/Platform.h: + Added ENABLE_FAST_MALLOC_MATCH_VALIDATION; defaults to 0. + * GNUmakefile.am: + Updated to include added FastAllocBase.h. + * JavaScriptCore.xcodeproj/project.pbxproj: + Updated to include added FastAllocBase.h. + * JavaScriptCore.vcproj/WTF/WTF.vcproj: + Updated to include added FastAllocBase.h. + +2009-04-07 Oliver Hunt + + Reviewed by Geoff Garen. + + Improve function.apply performance + + Jump through a few hoops to improve performance of function.apply in the general case. + + In the case of zero or one arguments, or if there are only two arguments and the + second is an array literal we treat function.apply as function.call. + + Otherwise we use the new opcodes op_load_varargs and op_call_varargs to do the .apply call + without re-entering the virtual machine. + + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::dump): + * bytecode/Opcode.h: + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::emitJumpIfNotFunctionApply): + (JSC::BytecodeGenerator::emitLoadVarargs): + (JSC::BytecodeGenerator::emitCallVarargs): + * bytecompiler/BytecodeGenerator.h: + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + (JSC::JIT::privateCompileSlowCases): + * jit/JIT.h: + * jit/JITCall.cpp: + (JSC::JIT::compileOpCallSetupArgs): + (JSC::JIT::compileOpCallVarargsSetupArgs): + (JSC::JIT::compileOpCallVarargs): + (JSC::JIT::compileOpCallVarargsSlowCase): + * jit/JITStubs.cpp: + (JSC::JITStubs::cti_op_load_varargs): + * jit/JITStubs.h: + * parser/Grammar.y: + * parser/Nodes.cpp: + (JSC::ArrayNode::isSimpleArray): + (JSC::ArrayNode::toArgumentList): + (JSC::CallFunctionCallDotNode::emitBytecode): + (JSC::ApplyFunctionCallDotNode::emitBytecode): + * parser/Nodes.h: + (JSC::ExpressionNode::): + (JSC::ApplyFunctionCallDotNode::): + * runtime/Arguments.cpp: + (JSC::Arguments::copyToRegisters): + (JSC::Arguments::fillArgList): + * runtime/Arguments.h: + (JSC::Arguments::numProvidedArguments): + * runtime/FunctionPrototype.cpp: + (JSC::FunctionPrototype::addFunctionProperties): + * runtime/FunctionPrototype.h: + * runtime/JSArray.cpp: + (JSC::JSArray::copyToRegisters): + * runtime/JSArray.h: + * runtime/JSGlobalObject.cpp: + (JSC::JSGlobalObject::reset): + (JSC::JSGlobalObject::mark): + * runtime/JSGlobalObject.h: + +2009-04-08 Alexey Proskuryakov + + Reviewed by Darin Adler. + + https://bugs.webkit.org/show_bug.cgi?id=25073 + JavaScriptCore tests don't run if time zone is not PST + + * API/tests/testapi.c: + (timeZoneIsPST): Added a function that checks whether the time zone is PST, using the same + method as functions in DateMath.cpp do for formatting the result. + (main): Skip date string format test if the time zone is not PST. + +2009-04-07 David Levin + + Reviewed by Sam Weinig and Geoff Garen. + + https://bugs.webkit.org/show_bug.cgi?id=25039 + UString refactoring to support UChar* sharing. + + No change in sunspider perf. + + * runtime/SmallStrings.cpp: + (JSC::SmallStringsStorage::SmallStringsStorage): + * runtime/UString.cpp: + (JSC::initializeStaticBaseString): + (JSC::initializeUString): + (JSC::UString::BaseString::isShared): + Encapsulate the meaning behind the refcount == 1 checks because + this needs to do slightly more when sharing is added. + (JSC::concatenate): + (JSC::UString::append): + (JSC::UString::operator=): + * runtime/UString.h: + Make m_baseString part of a union to get rid of casts, but make it protected because + it is tricky to use it correctly since it is only valid when the Rep is not a BaseString. + The void* will be filled in when sharing is added. + + Add constructors due to the making members protected and it make ensuring proper + initialization work better (like in SmallStringsStorage). + (JSC::UString::Rep::create): + (JSC::UString::Rep::Rep): + (JSC::UString::Rep::): + (JSC::UString::BaseString::BaseString): + (JSC::UString::Rep::setBaseString): + (JSC::UString::Rep::baseString): + +2009-04-04 Xan Lopez + + Reviewed by Alexey Proskuryakov. + + https://bugs.webkit.org/show_bug.cgi?id=25033 + dtoa.cpp segfaults with g++ 4.4.0 + + g++ 4.4.0 seems to be more strict about aliasing rules, so it + produces incorrect code if dtoa.cpp is compiled with + -fstrict-aliasing (it also emits a ton of warnings, so fair enough + I guess). The problem was that we were only casting variables to + union types in order to do type punning, but GCC and the C + standard require that we actually use a union to store the value. + + This patch does just that, the code is mostly copied from the dtoa + version in GCC: + http://gcc.gnu.org/viewcvs/trunk/libjava/classpath/native/fdlibm/dtoa.c?view=markup. + + * wtf/dtoa.cpp: + (WTF::ulp): + (WTF::b2d): + (WTF::ratio): + (WTF::hexnan): + (WTF::strtod): + (WTF::dtoa): + +2009-04-04 Kevin Ollivier + + wx build fix for Win port. Build the assembler sources to get missing functions. + + * JavaScriptCoreSources.bkl: + * jscore.bkl: + * wtf/Platform.h: + +2009-04-02 Darin Adler + + Reviewed by Kevin Decker. + + crash in GC due to uninitialized callFunction pointer + + * runtime/JSGlobalObject.h: + (JSC::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData): Initialize + callFunction as we do the other data members that are used in the mark function. + +2009-04-02 Yael Aharon + + Reviewed by Simon Hausmann + + https://bugs.webkit.org/show_bug.cgi?id=24490 + + Implement WTF::ThreadSpecific in the Qt build using + QThreadStorage. + + * wtf/ThreadSpecific.h: + +2009-04-01 Greg Bolsinga + + Reviewed by Mark Rowe. + + https://bugs.webkit.org/show_bug.cgi?id=24990 + Put SECTORDER_FLAGS into xcconfig files. + + * Configurations/Base.xcconfig: + * Configurations/DebugRelease.xcconfig: + * JavaScriptCore.xcodeproj/project.pbxproj: + +2009-03-27 Oliver Hunt + + Reviewed by NOBODY (Build fix). + + Fix non-AllInOneFile builds. + + * bytecompiler/BytecodeGenerator.cpp: + +2009-03-27 Oliver Hunt + + Reviewed by Gavin Barraclough. + + Improve performance of Function.prototype.call + + + Optimistically assume that expression.call(..) is going to be a call to + Function.prototype.call, and handle it specially to attempt to reduce the + degree of VM reentrancy. + + When everything goes right this removes the vm reentry improving .call() + by around a factor of 10. + + * JavaScriptCore.xcodeproj/project.pbxproj: + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::dump): + * bytecode/Opcode.h: + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::emitJumpIfNotFunctionCall): + * bytecompiler/BytecodeGenerator.h: + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + * parser/Grammar.y: + * parser/Nodes.cpp: + (JSC::CallFunctionCallDotNode::emitBytecode): + * parser/Nodes.h: + (JSC::CallFunctionCallDotNode::): + * runtime/FunctionPrototype.cpp: + (JSC::FunctionPrototype::addFunctionProperties): + * runtime/FunctionPrototype.h: + * runtime/JSGlobalObject.cpp: + (JSC::JSGlobalObject::reset): + (JSC::JSGlobalObject::mark): + * runtime/JSGlobalObject.h: + +2009-03-27 Laszlo Gombos + + Reviewed by Darin Adler. + + Bug 24884: Include strings.h for strcasecmp() + https://bugs.webkit.org/show_bug.cgi?id=24884 + + * runtime/DateMath.cpp: Reversed previous change including strings.h + * wtf/StringExtras.h: Include strings.h here is available + +2009-03-26 Adam Roben + + Copy testapi.js to $WebKitOutputDir on Windows + + Part of Bug 24856: run-javascriptcore-tests should run testapi on + Windows + + + This matches what Mac does, which will help once we enable running + testapi from run-javascriptcore-tests on Windows. + + Reviewed by Steve Falkenburg. + + * JavaScriptCore.vcproj/testapi/testapi.vcproj: Copy testapi.js next + to testapi.exe. + +2009-03-25 Oliver Hunt + + Reviewed by Geoff Garen. + + Fix exception handling for instanceof in the interpreter. + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): + +2009-03-25 Geoffrey Garen + + Reviewed by Cameron Zwarich. + + Fixed Write to freed memory in JSC::Label::deref + when reloading http://helpme.att.net/speedtest/ + + * bytecompiler/BytecodeGenerator.h: Reversed the declaration order for + m_labelScopes and m_labels to reverse their destruction order. + m_labelScopes has references to memory within m_labels, so its destructor + needs to run first. + +2009-03-24 Eli Fidler + + Reviewed by George Staikos. + + Correct warnings which in some environments are treated as errors. + + * wtf/dtoa.cpp: + (WTF::b2d): + (WTF::d2b): + (WTF::strtod): + (WTF::dtoa): + +2009-03-24 Kevin Ollivier + + Reviewed by Darin Adler. + + Explicitly define HAVE_LANGINFO_H on Darwin. Fixes the wx build bot jscore + test failure. + + https://bugs.webkit.org/show_bug.cgi?id=24780 + + * wtf/Platform.h: + +2009-03-23 Oliver Hunt + + Reviewed by Cameron Zwarich. + + Fix className() for API defined class + + * API/JSCallbackObjectFunctions.h: + (JSC::::className): + * API/tests/testapi.c: + (EmptyObject_class): + (main): + * API/tests/testapi.js: + +2009-03-23 Oliver Hunt + + Reviewed by Geoff Garen. + + Make testapi assertions run in release builds, so that testapi actually + works in a release build. + + Many of the testapi assertions have side effects that are necessary, and + given testapi is a testing program, perf impact of an assertion is not + important, so it makes sense to apply the assertions in release builds + anyway. + + * API/tests/testapi.c: + (EvilExceptionObject_hasInstance): + +2009-03-23 David Kilzer + + Provide JavaScript exception information after slow script timeout + + Reviewed by Oliver Hunt. + + * runtime/Completion.cpp: + (JSC::evaluate): Set the exception object as the Completion + object's value for slow script timeouts. This is used in + WebCore when reporting the exception. + * runtime/ExceptionHelpers.cpp: + (JSC::InterruptedExecutionError::toString): Added. Provides a + description message for the exception when it is reported. + +2009-03-23 Gustavo Noronha Silva and Thadeu Lima de Souza Cascardo + + Reviewed by Adam Roben. + + https://bugs.webkit.org/show_bug.cgi?id=24674 + Crashes in !PLATFORM(MAC)'s formatLocaleDate, in very specific situations + + Make sure strftime never returns 2-digits years to avoid ambiguity + and a crash. We wrap this new code option in HAVE_LANGINFO_H, + since it is apparently not available in all platforms. + + * runtime/DatePrototype.cpp: + (JSC::formatLocaleDate): + * wtf/Platform.h: + +2009-03-22 Oliver Hunt + + Reviewed by Cameron Zwarich. + + Fix exception handling in API + + We can't just use the ExecState exception slot for returning exceptions + from class introspection functions provided through the API as many JSC + functions will explicitly clear the ExecState exception when returning. + + * API/JSCallbackObjectFunctions.h: + (JSC::JSCallbackObject::getOwnPropertySlot): + (JSC::JSCallbackObject::put): + (JSC::JSCallbackObject::deleteProperty): + (JSC::JSCallbackObject::construct): + (JSC::JSCallbackObject::hasInstance): + (JSC::JSCallbackObject::call): + (JSC::JSCallbackObject::toNumber): + (JSC::JSCallbackObject::toString): + (JSC::JSCallbackObject::staticValueGetter): + (JSC::JSCallbackObject::callbackGetter): + * API/tests/testapi.c: + (MyObject_hasProperty): + (MyObject_getProperty): + (MyObject_setProperty): + (MyObject_deleteProperty): + (MyObject_callAsFunction): + (MyObject_callAsConstructor): + (MyObject_hasInstance): + (EvilExceptionObject_hasInstance): + (EvilExceptionObject_convertToType): + (EvilExceptionObject_class): + (main): + * API/tests/testapi.js: + (EvilExceptionObject.hasInstance): + (EvilExceptionObject.toNumber): + (EvilExceptionObject.toStringExplicit): + +2009-03-21 Cameron Zwarich + + Reviewed by Oliver Hunt. + + Bug 20049: testapi failure: MyObject - 0 should be NaN but instead is 1. + + + + In this case, the test is wrong. According to the ECMA spec, subtraction + uses ToNumber, not ToPrimitive. Change the test to match the spec. + + * API/tests/testapi.js: + +2009-03-21 Oliver Hunt + + Reviewed by Cameron Zwarich. + + Ensure that JSObjectMakeFunction doesn't produce incorrect line numbers. + + Also make test api correctly propagate failures. + + * API/tests/testapi.c: + (main): + * runtime/FunctionConstructor.cpp: + (JSC::constructFunction): + +2009-03-21 Oliver Hunt + + Reviewed by Mark Rowe. + + Improve testapi by making it report failures in a way we can pick up + from our test scripts. + + * API/tests/testapi.c: + (assertEqualsAsBoolean): + (assertEqualsAsNumber): + (assertEqualsAsUTF8String): + (assertEqualsAsCharactersPtr): + (main): + * API/tests/testapi.js: + (pass): + (fail): + (shouldBe): + (shouldThrow): + +2009-03-20 Norbert Leser + + Reviewed by Darin Adler. + + https://bugs.webkit.org/show_bug.cgi?id=24535 + + Fixes missing line terminator character (;) after macro call. + It is common practice to add the trailing ";" where macros are substituted + and not where they are defined with #define. + This change is consistent with other macro declarations across webkit, + and it also solves compilation failure with symbian compilers. + + * runtime/UString.cpp: + * wtf/Assertions.h: + +2009-03-20 Geoffrey Garen + + Reviewed by Darin Adler. + + Fixed a JavaScriptCore crash on the Windows buildbot. + + * bytecompiler/BytecodeGenerator.h: Reduced the AST recursion limit. + Apparently, Windows has small stacks. + +2009-03-20 Geoffrey Garen + + Reviewed by Oliver Hunt. + + A little cleanup in the RegisterFile code. + + Moved large inline functions out of the class declaration, to make it + more readable. + + Switched over to using the roundUpAllocationSize function to avoid + duplicate code and subtle bugs. + + Renamed m_maxCommitted to m_commitEnd, to match m_end. + + Renamed allocationSize to commitSize because it's the chunk size for + committing memory, not allocating memory. + + SunSpider reports no change. + + * interpreter/RegisterFile.h: + (JSC::RegisterFile::RegisterFile): + (JSC::RegisterFile::shrink): + (JSC::RegisterFile::grow): + * jit/ExecutableAllocator.h: + (JSC::roundUpAllocationSize): + +2009-03-19 Geoffrey Garen + + Reviewed by Oliver Hunt. + + Fixed -- a little bit of hardening in the Collector. + + SunSpider reports no change. I also verified in the disassembly that + we end up with a single compare to constant. + + * runtime/Collector.cpp: + (JSC::Heap::heapAllocate): + +2009-03-19 Geoffrey Garen + + Reviewed by Cameron Zwarich and Oliver Hunt. + + Fixed REGRESSION: Stack overflow on PowerPC on + fast/workers/use-machine-stack.html (22531) + + Dialed down the re-entry allowance to 64 (from 128). + + On a 512K stack, this leaves about 64K for other code on the stack while + JavaScript is running. Not perfect, but it solves our crash on PPC. + + Different platforms may want to dial this down even more. + + Also, substantially shrunk BytecodeGenerator. Since we allocate one on + the stack in order to throw a stack overflow exception -- well, let's + just say the old code had an appreciation for irony. + + SunSpider reports no change. + + * bytecompiler/BytecodeGenerator.h: + * interpreter/Interpreter.h: + (JSC::): + +2009-03-19 Cameron Zwarich + + Reviewed by Oliver Hunt. + + Bug 24350: REGRESSION: Safari 4 breaks SPAW wysiwyg editor multiple instances + + + + The SPAW editor's JavaScript assumes that toString() on a function + constructed with the Function constructor produces a function with + a newline after the opening brace. + + * runtime/FunctionConstructor.cpp: + (JSC::constructFunction): Add a newline after the opening brace of the + function's source code. + +2009-03-19 Cameron Zwarich + + Reviewed by Geoff Garen. + + Bug 23771: REGRESSION (r36016): JSObjectHasProperty freezes on global class without kJSClassAttributeNoAutomaticPrototype + + + + * API/tests/testapi.c: + (main): Add a test for this bug. + * runtime/JSGlobalObject.cpp: + (JSC::JSGlobalObject::resetPrototype): Don't set the prototype of the + last object in the prototype chain to the object prototype when the + object prototype is already the last object in the prototype chain. + +2009-03-19 Timothy Hatcher + + -[WebView scheduleInRunLoop:forMode:] has no affect on timers + + Reviewed by Darin Adler. + + * wtf/Platform.h: Added HAVE_RUNLOOP_TIMER for PLATFORM(MAC). + +2009-03-19 Geoffrey Garen + + Reviewed by Oliver Hunt. + + Fixed Regular expression run-time complexity + limit too low for long inputs (21485) + + I raised PCRE's "matchLimit" (limit on backtracking) by an order of + magnitude. This fixes all the reported examples of timing out on legitimate + regular expression matches. + + In my testing on a Core Duo MacBook Pro, the longest you can get stuck + trying to match a string is still under 1s, so this seems like a safe change. + + I can think of a number of better solutions that are more complicated, + but this is a good improvement for now. + + * pcre/pcre_exec.cpp: + +2009-03-19 Geoffrey Garen + + Reviewed by Sam Weinig. + + Fixed REGRESSION (Safari 4): regular expression + pattern size limit lower than Safari 3.2, other browsers, breaks SAP (14873) + + Bumped the pattern size limit to 1MB, and standardized it between PCRE + and WREC. (Empirical testing says that we can easily compile a 1MB regular + expression without risking a hang. Other browsers support bigger regular + expressions, but also hang.) + + SunSpider reports no change. + + I started with a patch posted to Bugzilla by Erik Corry (erikcorry@google.com). + + * pcre/pcre_internal.h: + (put3ByteValue): + (get3ByteValue): + (put3ByteValueAndAdvance): + (putLinkValueAllowZero): + (getLinkValueAllowZero): Made PCRE's "LINK_SIZE" (the number of bytes + used to record jumps between bytecodes) 3, to accomodate larger potential + jumps. Bumped PCRE's "MAX_PATTERN_SIZE" to 1MB. (Technically, at this + LINK_SIZE, we can support even larger patterns, but we risk a hang during + compilation, and it's not clear that such large patterns are important + on the web.) + + * wrec/WREC.cpp: + (JSC::WREC::Generator::compileRegExp): Match PCRE's maximum pattern size, + to avoid quirks between platforms. + +2009-03-18 Ada Chan + + Rolling out r41818 since it broke the windows build. + Error: ..\..\runtime\DatePrototype.cpp(30) : fatal error C1083: Cannot open include file: 'langinfo.h': No such file or directory + + * runtime/DatePrototype.cpp: + (JSC::formatLocaleDate): + +2009-03-17 Oliver Hunt + + Reviewed by Cameron Zwarich. + + REGRESSION (Safari 4): Incorrect function return value when using IE "try ... finally" memory leak work-around (24654) + + + If the return value for a function is in a local register we need + to copy it before executing any finalisers, otherwise it is possible + for the finaliser to clobber the result. + + * bytecompiler/BytecodeGenerator.h: + (JSC::BytecodeGenerator::hasFinaliser): + * parser/Nodes.cpp: + (JSC::ReturnNode::emitBytecode): + +2009-03-17 Kevin Ollivier + + Reviewed by Mark Rowe. + + Move BUILDING_ON_* defines into Platform.h to make them available to other ports. + Also tweak the defines so that they work with the default values set by + AvailabilityMacros.h. + + https://bugs.webkit.org/show_bug.cgi?id=24630 + + * JavaScriptCorePrefix.h: + * wtf/Platform.h: + +2009-03-15 Simon Fraser + + Revert r41718 because it broke DumpRenderTree on Tiger. + + * JavaScriptCorePrefix.h: + * wtf/Platform.h: + +2009-03-15 Kevin Ollivier + + Non-Apple Mac ports build fix. Move defines for the BUILDING_ON_ macros into + Platform.h so that they're defined for all ports building on Mac, and tweak + the definitions of those macros based on Mark Rowe's suggestions to accomodate + cases where the values may not be <= to the .0 release for that version. + + * JavaScriptCorePrefix.h: + * wtf/Platform.h: + +2009-03-13 Mark Rowe + + Rubber-stamped by Dan Bernstein. + + Take advantage of the ability of recent versions of Xcode to easily switch the active + architecture. + + * Configurations/DebugRelease.xcconfig: + +2009-03-13 Mark Rowe + + Reviewed by David Kilzer. + + Prevent AllInOneFile.cpp and ProfileGenerator.cpp from rebuilding unnecessarily when + switching between building in Xcode and via build-webkit. + + build-webkit passes FEATURE_DEFINES to xcodebuild, resulting in it being present in the + Derived Sources build settings. When building in Xcode, this setting isn't present so + Xcode reruns the script build phases. This results in a new version of TracingDtrace.h + being generated, and the files that include it being rebuilt. + + * JavaScriptCore.xcodeproj/project.pbxproj: Don't regenerate TracingDtrace.h if it is + already newer than the input file. + +2009-03-13 Norbert Leser + + Reviewed by Darin Adler. + + Resolved name conflict with globally defined tzname in Symbian. + Replaced with different name instead of using namespace qualifier + (appeared to be less clumsy). + + * runtime/DateMath.cpp: + +2009-03-12 Mark Rowe + + Reviewed by Darin Adler. + + TCMalloc_SystemRelease should use madvise rather than re-mmaping span of pages + + * wtf/FastMalloc.cpp: + (WTF::mergeDecommittedStates): If either of the spans has been released to the system, release the other + span as well so that the flag in the merged span is accurate. + * wtf/Platform.h: + * wtf/TCSystemAlloc.cpp: Track decommitted spans when using MADV_FREE_REUSABLE / MADV_FREE_REUSE. + (TCMalloc_SystemRelease): Use madvise with MADV_FREE_REUSABLE when it is available. + (TCMalloc_SystemCommit): Use madvise with MADV_FREE_REUSE when it is available. + * wtf/TCSystemAlloc.h: + +2009-03-12 Adam Treat + + Reviewed by NOBODY (Build fix). + + Include string.h for strlen usage. + + * wtf/Threading.cpp: + +2009-03-12 David Kilzer + + Add NO_RETURN attribute to runInteractive() when not using readline + + Reviewed by Darin Adler. + + * jsc.cpp: + (runInteractive): If the readline library is not used, this method + will never return, thus the NO_RETURN attribute is needed to prevent + a gcc warning. + +2009-03-12 Adam Roben + + Adopt setThreadNameInternal on Windows + + Also changed a Windows-only assertion about thread name length to an + all-platform log message. + + Reviewed by Adam Treat. + + * wtf/Threading.cpp: + (WTF::createThread): Warn if the thread name is longer than 31 + characters, as Visual Studio will truncate names longer than that + length. + + * wtf/ThreadingWin.cpp: + (WTF::setThreadNameInternal): Renamed from setThreadName and changed + to always operate on the current thread. + (WTF::initializeThreading): Changed to use setThreadNameInternal. + (WTF::createThreadInternal): Removed call to setThreadName. This is + now handled by threadEntryPoint and setThreadNameInternal. + +2009-03-11 David Kilzer + + Clarify comments regarding order of FEATURE_DEFINES + + Rubber-stamped by Mark Rowe. + + * Configurations/JavaScriptCore.xcconfig: Added warning about + the consequences when FEATURE_DEFINES are not kept in sync. + +2009-03-11 Dan Bernstein + + Reviewed by Darin Adler. + + - WTF support for fixing Thai text selection + in Safari is incorrect + + * wtf/unicode/icu/UnicodeIcu.h: + (WTF::Unicode::hasLineBreakingPropertyComplexContext): Added. Returns + whether the character has Unicode line breaking property value SA + ("Complex Context"). + * wtf/unicode/qt4/UnicodeQt4.h: + (WTF::Unicode::hasLineBreakingPropertyComplexContext): Added an + implementation that always returns false. + +2009-03-11 Darin Adler + + Reviewed by Mark Rowe. + + Give threads names on platforms with pthread_setname_np. + + * wtf/Threading.cpp: + (WTF::NewThreadContext::NewThreadContext): Initialize thread name. + (WTF::threadEntryPoint): Call setThreadNameInternal. + (WTF::createThread): Pass thread name. + + * wtf/Threading.h: Added new comments, setThreadNameInternal. + + * wtf/ThreadingGtk.cpp: + (WTF::setThreadNameInternal): Added. Empty. + * wtf/ThreadingNone.cpp: + (WTF::setThreadNameInternal): Added. Empty. + * wtf/ThreadingPthreads.cpp: + (WTF::setThreadNameInternal): Call pthread_setname_np when available. + * wtf/ThreadingQt.cpp: + (WTF::setThreadNameInternal): Added. Empty. + * wtf/ThreadingWin.cpp: + (WTF::setThreadNameInternal): Added. Empty. + +2009-03-11 Adam Roben + + Change the Windows implementation of ThreadSpecific to use functions + instead of extern globals + + This will make it easier to export ThreadSpecific from WebKit. + + Reviewed by John Sullivan. + + * API/JSBase.cpp: + (JSEvaluateScript): + Touched this file to force ThreadSpecific.h to be copied into + $WebKitOutputDir. + + * wtf/ThreadSpecific.h: Replaced g_tls_key_count with tlsKeyCount() + and g_tls_keys with tlsKeys(). + + (WTF::::ThreadSpecific): + (WTF::::~ThreadSpecific): + (WTF::::get): + (WTF::::set): + (WTF::::destroy): + Updated to use the new functions. + + * wtf/ThreadSpecificWin.cpp: + (WTF::tlsKeyCount): + (WTF::tlsKeys): + Added. + + (WTF::ThreadSpecificThreadExit): Changed to use the new functions. + +2009-03-10 Cameron Zwarich + + Reviewed by Geoff Garen. + + Bug 24291: REGRESSION (r38635): Single line JavaScript comment prevents HTML button click handler execution + + + + Add an extra newline to the end of the body of the program text constructed + by the Function constructor for parsing. This allows single line comments to + be handled correctly by the parser. + + * runtime/FunctionConstructor.cpp: + (JSC::constructFunction): + +2009-03-09 Oliver Hunt + + Reviewed by Gavin Barraclough. + + Bug 24447: REGRESSION (r41508): Google Maps does not complete initialization + + + r41508 actually exposed a pre-existing bug where we were not invalidating the result + register cache at jump targets. This causes problems when condition loads occur in an + expression -- namely through the ?: and || operators. This patch corrects these issues + by marking the target of all forward jumps as being a jump target, and then clears the + result register cache when ever it starts generating code for a targeted instruction. + + I do not believe it is possible to cause this class of failure outside of a single + expression, and expressions only provide forward branches, so this should resolve this + entire class of bug. That said i've included a test case that gets as close as possible + to hitting this bug with a back branch, to hopefully prevent anyone from introducing the + problem in future. + + * assembler/AbstractMacroAssembler.h: + (JSC::AbstractMacroAssembler::Label::isUsed): + (JSC::AbstractMacroAssembler::Label::used): + * assembler/X86Assembler.h: + (JSC::X86Assembler::JmpDst::JmpDst): + (JSC::X86Assembler::JmpDst::isUsed): + (JSC::X86Assembler::JmpDst::used): + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + +2009-03-09 David Levin + + Reviewed by Darin Adler. + + Bug 23175: String and UString should be able to share a UChar* buffer. + + + Add CrossThreadRefCounted. + + * wtf/CrossThreadRefCounted.h: Added. + (WTF::CrossThreadRefCounted::create): + (WTF::CrossThreadRefCounted::isShared): + (WTF::CrossThreadRefCounted::dataAccessMustBeThreadSafe): + (WTF::CrossThreadRefCounted::mayBePassedToAnotherThread): + (WTF::CrossThreadRefCounted::CrossThreadRefCounted): + (WTF::CrossThreadRefCounted::~CrossThreadRefCounted): + (WTF::CrossThreadRefCounted::ref): + (WTF::CrossThreadRefCounted::deref): + (WTF::CrossThreadRefCounted::release): + (WTF::CrossThreadRefCounted::copy): + (WTF::CrossThreadRefCounted::threadSafeDeref): + * wtf/RefCounted.h: + * wtf/Threading.h: + (WTF::ThreadSafeSharedBase::ThreadSafeSharedBase): + (WTF::ThreadSafeSharedBase::derefBase): + (WTF::ThreadSafeShared::ThreadSafeShared): + (WTF::ThreadSafeShared::deref): + +2009-03-09 Laszlo Gombos + + Reviewed by George Staikos. + + https://bugs.webkit.org/show_bug.cgi?id=24353 + Allow to overrule default build options for Qt build. + + * JavaScriptCore.pri: Allow to overrule ENABLE_JIT + +2009-03-08 Oliver Hunt + + Reviewed by NOBODY (build fix). + + Build fix. + + * runtime/ArrayPrototype.cpp: + (JSC::arrayProtoFuncConcat): + +2009-03-01 Oliver Hunt + + Reviewed by Cameron Zwarich. + + Bug 24268: RuntimeArray is not a fully implemented JSArray + + + Don't cast a type to JSArray, just because it reportsArray as a supertype + in the JS type system. Doesn't appear feasible to create a testcase + unfortunately as setting up the failure conditions requires internal access + to JSC not present in DRT. + + * runtime/ArrayPrototype.cpp: + (JSC::arrayProtoFuncConcat): + +2009-03-06 Gavin Barraclough + + Reviewed by Oliver Hunt. + + When preforming an op_mov, preserve any existing register mapping. + + ~0.5% progression on v8 tests x86-64. + + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + +2009-03-05 Simone Fiorentino + + Bug 24382: request to add SH4 platform + + + + Reviewed by David Kilzer. + + * wtf/Platform.h: Added support for SH4 platform. + +2009-03-05 Gavin Barraclough + + Reviewed by Oliver Hunt. + + Writes of constant values to SF registers should be made with direct memory + writes where possible, rather than moving the value via a hardware register. + + ~3% win on SunSpider tests on x86, ~1.5% win on v8 tests on x86-64. + + * assembler/MacroAssemblerX86_64.h: + (JSC::MacroAssemblerX86_64::storePtr): + * assembler/X86Assembler.h: + (JSC::X86Assembler::movq_i32m): + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + +2009-03-05 Mark Rowe + + Fix the build. + + Sprinkle "static" around NumberConstructor.cpp in order to please the compiler. + + * runtime/NumberConstructor.cpp: + (JSC::numberConstructorNaNValue): + (JSC::numberConstructorNegInfinity): + (JSC::numberConstructorPosInfinity): + (JSC::numberConstructorMaxValue): + (JSC::numberConstructorMinValue): + +2009-03-04 Mark Rowe + + Reviewed by Oliver Hunt. + + FastMallocZone's enumeration code reports fragmented administration space + + The handling of MALLOC_ADMIN_REGION_RANGE_TYPE in FastMalloc's zone was incorrect. It was attempting + to record the memory containing and individual span as an administrative region, when all memory + allocated via MetaDataAlloc should in fact be recorded. This was causing memory regions allocated + via MetaDataAlloc to appear as "VM_ALLOCATE ?" in vmmap output. They are now correctly reported as + "MALLOC_OTHER" regions associated with the JavaScriptCore FastMalloc zone. + + Memory is allocated via MetaDataAlloc from two locations: PageHeapAllocator, and TCMalloc_PageMap{2,3}. + These two cases are handled differently. + + PageHeapAllocator is extended to keep a linked list of memory regions that it has allocated. The + first object in an allocated region contains the link to the previously allocated region. To record + the administrative regions of a PageHeapAllocator we can simply walk the linked list and record + each allocated region we encounter. + + TCMalloc_PageMaps allocate memory via MetaDataAlloc to store each level of the radix tree. To record + the administrative regions of a TCMalloc_PageMap we walk the tree and record the storage used for nodes + at each position rather than the nodes themselves. + + A small performance improvement is achieved by coalescing adjacent memory regions inside the PageMapMemoryUsageRecorder + so that fewer calls in to the range recorder are necessary. We further reduce the number of calls to the + range recorder by aggregating the in-use ranges of a given memory region into a local buffer before recording + them with a single call. A similar approach is also used by AdminRegionRecorder. + + * wtf/FastMalloc.cpp: + (WTF::PageHeapAllocator::Init): + (WTF::PageHeapAllocator::New): + (WTF::PageHeapAllocator::recordAdministrativeRegions): + (WTF::TCMallocStats::FreeObjectFinder::isFreeObject): + (WTF::TCMallocStats::PageMapMemoryUsageRecorder::~PageMapMemoryUsageRecorder): + (WTF::TCMallocStats::PageMapMemoryUsageRecorder::recordPendingRegions): + (WTF::TCMallocStats::PageMapMemoryUsageRecorder::visit): + (WTF::TCMallocStats::AdminRegionRecorder::AdminRegionRecorder): + (WTF::TCMallocStats::AdminRegionRecorder::recordRegion): + (WTF::TCMallocStats::AdminRegionRecorder::visit): + (WTF::TCMallocStats::AdminRegionRecorder::recordPendingRegions): + (WTF::TCMallocStats::AdminRegionRecorder::~AdminRegionRecorder): + (WTF::TCMallocStats::FastMallocZone::enumerate): + (WTF::TCMallocStats::FastMallocZone::FastMallocZone): + (WTF::TCMallocStats::FastMallocZone::init): + * wtf/TCPageMap.h: + (TCMalloc_PageMap2::visitValues): + (TCMalloc_PageMap2::visitAllocations): + (TCMalloc_PageMap3::visitValues): + (TCMalloc_PageMap3::visitAllocations): + +2009-03-04 Antti Koivisto + + Reviewed by Dave Hyatt. + + https://bugs.webkit.org/show_bug.cgi?id=24359 + Repaint throttling mechanism + + Set ENABLE_REPAINT_THROTTLING to 0 by default. + + * wtf/Platform.h: + +2009-03-03 David Kilzer + + WebCore and WebKit should install the same set of headers during installhdrs phase as build phase + + Reviewed by Mark Rowe. + + * Configurations/Base.xcconfig: Defined REAL_PLATFORM_NAME based + on PLATFORM_NAME to work around the missing definition on Tiger. + Updated HAVE_DTRACE to use REAL_PLATFORM_NAME. + +2009-03-03 Kevin McCullough + + Reviewed by Oliver Hunt. + + console.profile() doesn't work without a title + + * profiler/Profiler.cpp: + (JSC::Profiler::startProfiling): assert if there is not title to ensure + we don't start profiling without one. + +2009-03-02 Sam Weinig + + Reviewed by Mark Rowe. + + Enable Geolocation (except on Tiger and Leopard). + + * Configurations/JavaScriptCore.xcconfig: + +2009-03-01 David Kilzer + + Move HAVE_DTRACE check to Base.xcconfig + + Reviewed by Mark Rowe. + + * Configurations/Base.xcconfig: Set HAVE_DTRACE Xcode variable + based on PLATFORM_NAME and MAC_OS_X_VERSION_MAJOR. Also define + it as a preprocessor macro by modifying + GCC_PREPROCESSOR_DEFINITIONS. + * JavaScriptCore.xcodeproj/project.pbxproj: Changed "Generate + DTrace header" script phase to check for HAVE_DTRACE instead of + MACOSX_DEPLOYMENT_TARGET. + * wtf/Platform.h: Removed definition of HAVE_DTRACE macro since + it's defined in Base.xcconfig now. + +2009-03-01 Horia Olaru + + By looking in grammar.y there are only a few types of statement nodes + on which the debugger should stop. + + Removed isBlock and isLoop virtual calls. No need to emit debug hooks in + the "statementListEmitCode" method as long as the necessary hooks can be + added in each "emitCode". + + https://bugs.webkit.org/show_bug.cgi?id=21073 + + Reviewed by Kevin McCullough. + + * parser/Nodes.cpp: + (JSC::ConstStatementNode::emitBytecode): + (JSC::statementListEmitCode): + (JSC::EmptyStatementNode::emitBytecode): + (JSC::ExprStatementNode::emitBytecode): + (JSC::VarStatementNode::emitBytecode): + (JSC::IfNode::emitBytecode): + (JSC::IfElseNode::emitBytecode): + (JSC::DoWhileNode::emitBytecode): + (JSC::WhileNode::emitBytecode): + (JSC::ForNode::emitBytecode): + (JSC::ForInNode::emitBytecode): + (JSC::ContinueNode::emitBytecode): + (JSC::BreakNode::emitBytecode): + (JSC::ReturnNode::emitBytecode): + (JSC::WithNode::emitBytecode): + (JSC::SwitchNode::emitBytecode): + (JSC::LabelNode::emitBytecode): + (JSC::ThrowNode::emitBytecode): + (JSC::TryNode::emitBytecode): + * parser/Nodes.h: + +2009-02-26 Gavin Barraclough + + Reviewed by Geoff Garen. + + Fix bug #23614. Switches on double precision values were incorrectly + truncating the scrutinee value. E.g.: + + switch (1.1) { case 1: print("FAIL"); } + + Was resulting in FAIL. + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): + * jit/JITStubs.cpp: + (JSC::JITStubs::cti_op_switch_imm): + +2009-02-26 Gavin Barraclough + + Reviewed by Oliver Hunt. + + Integer Immediate representation need not be canonical in x86 JIT code. + On x86-64 we already have loosened the requirement that the int immediate + representation in canonical, we should bring x86 into line. + + This patch is a minor (~0.5%) improvement on sunspider & v8-tests, and + should reduce memory footoprint (reduces JIT code size). + + * jit/JIT.cpp: + (JSC::JIT::compileOpStrictEq): + (JSC::JIT::privateCompileSlowCases): + * jit/JIT.h: + (JSC::JIT::emitJumpIfImmediateNumber): + (JSC::JIT::emitJumpIfNotImmediateNumber): + * jit/JITArithmetic.cpp: + (JSC::JIT::putDoubleResultToJSNumberCellOrJSImmediate): + (JSC::JIT::compileBinaryArithOp): + +2009-02-26 Carol Szabo + + Reviewed by Darin Adler. + + https://bugs.webkit.org/show_bug.cgi?id=24099 + ARM Compiler Warnings in pcre_exec.cpp + + * pcre/pcre_exec.cpp: + (match): + +2009-02-25 Cameron Zwarich + + Reviewed by Gavin Barraclough. + + Bug 24086: Regression (r40993): WebKit crashes after logging in to lists.zenbe + + + + The numeric sort optimization in r40993 generated bytecode for a function + without generating JIT code. This breaks an assumption in some parts of + the JIT's function calling logic that the presence of a CodeBlock implies + the existence of JIT code. + + In order to fix this, we simply generate JIT code whenever we check whether + a function is a numeric sort function. This only incurs an additional cost + in the case when the function is a numeric sort function, in which case it + is not expensive to generate JIT code for it. + + * runtime/ArrayPrototype.cpp: + (JSC::isNumericCompareFunction): + +2009-02-25 Geoffrey Garen + + Reviewed by Maciej Stachowiak. + + Fixed REGRESSION (r36701): Unable to select + messages on hotmail (24052) + + The bug was that for-in enumeration used a cached prototype chain without + validating that it was up-to-date. + + This led me to refactor prototype chain caching so it was easier to work + with and harder to get wrong. + + After a bit of inlining, this patch is performance-neutral on SunSpider + and the v8 benchmarks. + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::tryCachePutByID): + (JSC::Interpreter::tryCacheGetByID): + * jit/JITStubs.cpp: + (JSC::JITStubs::tryCachePutByID): + (JSC::JITStubs::tryCacheGetByID): + (JSC::JITStubs::cti_op_get_by_id_proto_list): Use the new refactored goodness. See + lines beginning with "-" and smile. + + * runtime/JSGlobalObject.h: + (JSC::Structure::prototypeForLookup): A shout out to const. + + * runtime/JSPropertyNameIterator.h: + (JSC::JSPropertyNameIterator::next): We can use a pointer comparison to + see if our cached structure chain is equal to the object's structure chain, + since in the case of a cache hit, we share references to the same structure + chain. + + * runtime/Operations.h: + (JSC::countPrototypeChainEntriesAndCheckForProxies): Use the new refactored + goodness. + + * runtime/PropertyNameArray.h: + (JSC::PropertyNameArray::PropertyNameArray): + (JSC::PropertyNameArray::setShouldCache): + (JSC::PropertyNameArray::shouldCache): Renamed "cacheable" to "shouldCache" + to communicate that the client is specifying a recommendation, not a + capability. + + * runtime/Structure.cpp: + (JSC::Structure::Structure): No need to initialize a RefPtr. + (JSC::Structure::getEnumerablePropertyNames): Moved some code into helper + functions. + + (JSC::Structure::prototypeChain): New centralized accessor for a prototype + chain. Revalidates on every access, since the objects in the prototype + chain may have mutated. + + (JSC::Structure::isValid): Helper function for revalidating a cached + prototype chain. + + (JSC::Structure::getEnumerableNamesFromPropertyTable): + (JSC::Structure::getEnumerableNamesFromClassInfoTable): Factored out of + getEnumerablePropertyNames. + + * runtime/Structure.h: + + * runtime/StructureChain.cpp: + (JSC::StructureChain::StructureChain): + * runtime/StructureChain.h: + (JSC::StructureChain::create): No need for structureChainsAreEqual, since + we use pointer equality now. Refactored StructureChain to make a little + more sense and eliminate special cases for null prototypes. + +2009-02-25 Steve Falkenburg + + Use timeBeginPeriod to enable timing resolution greater than 16ms in command line jsc for Windows. + Allows more accurate reporting of benchmark times via command line jsc.exe. Doesn't affect WebKit's use of JavaScriptCore. + + Reviewed by Adam Roben. + + * jsc.cpp: + (main): + +2009-02-24 Geoffrey Garen + + Build fix? + + * GNUmakefile.am: + +2009-02-24 Mark Rowe + + Reviewed by Oliver Hunt. + + Rename AVAILABLE_AFTER_WEBKIT_VERSION_3_1 (etc.) to match the other macros + + * API/JSBasePrivate.h: + * API/JSContextRef.h: + * API/JSObjectRef.h: + * API/WebKitAvailability.h: + +2009-02-23 Geoffrey Garen + + Reviewed by Sam Weinig. + + Next step in splitting JIT functionality out of the Interpreter class: + Moved vptr storage from Interpreter to JSGlobalData, so it could be shared + between Interpreter and JITStubs, and moved the *Trampoline JIT stubs + into the JITStubs class. Also added a VPtrSet class to encapsulate vptr + hacks during JSGlobalData initialization. + + SunSpider says 0.4% faster. Meh. + + * JavaScriptCore.exp: + * JavaScriptCore.xcodeproj/project.pbxproj: + * interpreter/Interpreter.cpp: + (JSC::Interpreter::Interpreter): + (JSC::Interpreter::tryCacheGetByID): + (JSC::Interpreter::privateExecute): + * interpreter/Interpreter.h: + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + (JSC::JIT::privateCompile): + (JSC::JIT::privateCompileCTIMachineTrampolines): + * jit/JIT.h: + (JSC::JIT::compileCTIMachineTrampolines): + * jit/JITCall.cpp: + (JSC::JIT::compileOpCall): + (JSC::JIT::compileOpCallSlowCase): + * jit/JITPropertyAccess.cpp: + (JSC::JIT::privateCompilePatchGetArrayLength): + * jit/JITStubs.cpp: + (JSC::JITStubs::JITStubs): + (JSC::JITStubs::tryCacheGetByID): + (JSC::JITStubs::cti_vm_dontLazyLinkCall): + (JSC::JITStubs::cti_op_get_by_val): + (JSC::JITStubs::cti_op_get_by_val_byte_array): + (JSC::JITStubs::cti_op_put_by_val): + (JSC::JITStubs::cti_op_put_by_val_array): + (JSC::JITStubs::cti_op_put_by_val_byte_array): + (JSC::JITStubs::cti_op_is_string): + * jit/JITStubs.h: + (JSC::JITStubs::ctiArrayLengthTrampoline): + (JSC::JITStubs::ctiStringLengthTrampoline): + (JSC::JITStubs::ctiVirtualCallPreLink): + (JSC::JITStubs::ctiVirtualCallLink): + (JSC::JITStubs::ctiVirtualCall): + * runtime/ArrayPrototype.cpp: + (JSC::arrayProtoFuncPop): + (JSC::arrayProtoFuncPush): + * runtime/FunctionPrototype.cpp: + (JSC::functionProtoFuncApply): + * runtime/JSArray.h: + (JSC::isJSArray): + * runtime/JSByteArray.h: + (JSC::asByteArray): + (JSC::isJSByteArray): + * runtime/JSCell.h: + * runtime/JSFunction.h: + * runtime/JSGlobalData.cpp: + (JSC::VPtrSet::VPtrSet): + (JSC::JSGlobalData::JSGlobalData): + (JSC::JSGlobalData::create): + (JSC::JSGlobalData::sharedInstance): + * runtime/JSGlobalData.h: + * runtime/JSString.h: + (JSC::isJSString): + * runtime/Operations.h: + (JSC::jsLess): + (JSC::jsLessEq): + * wrec/WREC.cpp: + (JSC::WREC::Generator::compileRegExp): + +2009-02-23 Csaba Osztrogonac + + Reviewed by Oliver Hunt. + + Bug 23787: Allow JIT to generate SSE2 code if using GCC + + + GCC version of the cpuid check. + + * jit/JITArithmetic.cpp: + (JSC::isSSE2Present): previous assembly code fixed. + +2009-02-23 David Levin + + Reviewed by Alexey Proskuryakov. + + Bug 24047: Need to simplify nested if's in WorkerRunLoop::runInMode + + + * wtf/MessageQueue.h: + (WTF::MessageQueue::infiniteTime): + Allows for one to call waitForMessageFilteredWithTimeout and wait forever. + + (WTF::MessageQueue::alwaysTruePredicate): + (WTF::MessageQueue::waitForMessage): + Made waitForMessage call waitForMessageFilteredWithTimeout, so that there is less + duplicate code. + + (WTF::MessageQueue::waitForMessageFilteredWithTimeout): + + * wtf/ThreadingQt.cpp: + (WTF::ThreadCondition::timedWait): + * wtf/ThreadingWin.cpp: + (WTF::ThreadCondition::timedWait): + Made these two implementations consistent with the pthread and gtk implementations. + Currently, the time calculations would overflow when passed large values. + +2009-02-23 Jeremy Moskovich + + Reviewed by Adam Roben. + + https://bugs.webkit.org/show_bug.cgi?id=24096 + PLATFORM(MAC)->PLATFORM(CF) since we want to use the CF functions in Chrome on OS X. + + * wtf/CurrentTime.cpp: + +2009-02-22 Geoffrey Garen + + Build fix? + + * GNUmakefile.am: + +2009-02-22 Geoffrey Garen + + Build fix. + + * GNUmakefile.am: + +2009-02-22 Geoffrey Garen + + Reviewed by Sam Weinig. + + Next step in splitting JIT functionality out of the Interpreter class: + Created a JITStubs class and renamed Interpreter::cti_* to JITStubs::cti_*. + + Also, moved timeout checking into its own class, located in JSGlobalData, + so both the Interpreter and the JIT could have access to it. + + * JavaScriptCore.exp: + * JavaScriptCore.pri: + * JavaScriptCore.scons: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * JavaScriptCoreSources.bkl: + * interpreter/CallFrame.h: + * interpreter/Interpreter.cpp: + (JSC::Interpreter::Interpreter): + (JSC::Interpreter::privateExecute): + * interpreter/Interpreter.h: + * interpreter/Register.h: + * jit/JIT.cpp: + (JSC::): + (JSC::JIT::emitTimeoutCheck): + (JSC::JIT::privateCompileMainPass): + (JSC::JIT::privateCompileSlowCases): + (JSC::JIT::privateCompile): + (JSC::JIT::privateCompileCTIMachineTrampolines): + * jit/JIT.h: + * jit/JITArithmetic.cpp: + (JSC::JIT::compileFastArithSlow_op_lshift): + (JSC::JIT::compileFastArithSlow_op_rshift): + (JSC::JIT::compileFastArithSlow_op_bitand): + (JSC::JIT::compileFastArithSlow_op_mod): + (JSC::JIT::compileFastArith_op_mod): + (JSC::JIT::compileFastArithSlow_op_post_inc): + (JSC::JIT::compileFastArithSlow_op_post_dec): + (JSC::JIT::compileFastArithSlow_op_pre_inc): + (JSC::JIT::compileFastArithSlow_op_pre_dec): + (JSC::JIT::compileFastArith_op_add): + (JSC::JIT::compileFastArith_op_mul): + (JSC::JIT::compileFastArith_op_sub): + (JSC::JIT::compileBinaryArithOpSlowCase): + (JSC::JIT::compileFastArithSlow_op_add): + (JSC::JIT::compileFastArithSlow_op_mul): + * jit/JITCall.cpp: + (JSC::JIT::compileOpCall): + (JSC::JIT::compileOpCallSlowCase): + * jit/JITPropertyAccess.cpp: + (JSC::JIT::compileGetByIdHotPath): + (JSC::JIT::compilePutByIdHotPath): + (JSC::JIT::compileGetByIdSlowCase): + (JSC::JIT::compilePutByIdSlowCase): + (JSC::JIT::privateCompilePutByIdTransition): + (JSC::JIT::patchGetByIdSelf): + (JSC::JIT::patchPutByIdReplace): + (JSC::JIT::privateCompilePatchGetArrayLength): + (JSC::JIT::privateCompileGetByIdSelf): + (JSC::JIT::privateCompileGetByIdProto): + (JSC::JIT::privateCompileGetByIdChain): + (JSC::JIT::privateCompilePutByIdReplace): + * jit/JITStubs.cpp: + (JSC::JITStubs::tryCachePutByID): + (JSC::JITStubs::tryCacheGetByID): + (JSC::JITStubs::cti_op_convert_this): + (JSC::JITStubs::cti_op_end): + (JSC::JITStubs::cti_op_add): + (JSC::JITStubs::cti_op_pre_inc): + (JSC::JITStubs::cti_timeout_check): + (JSC::JITStubs::cti_register_file_check): + (JSC::JITStubs::cti_op_loop_if_less): + (JSC::JITStubs::cti_op_loop_if_lesseq): + (JSC::JITStubs::cti_op_new_object): + (JSC::JITStubs::cti_op_put_by_id_generic): + (JSC::JITStubs::cti_op_get_by_id_generic): + (JSC::JITStubs::cti_op_put_by_id): + (JSC::JITStubs::cti_op_put_by_id_second): + (JSC::JITStubs::cti_op_put_by_id_fail): + (JSC::JITStubs::cti_op_get_by_id): + (JSC::JITStubs::cti_op_get_by_id_second): + (JSC::JITStubs::cti_op_get_by_id_self_fail): + (JSC::JITStubs::cti_op_get_by_id_proto_list): + (JSC::JITStubs::cti_op_get_by_id_proto_list_full): + (JSC::JITStubs::cti_op_get_by_id_proto_fail): + (JSC::JITStubs::cti_op_get_by_id_array_fail): + (JSC::JITStubs::cti_op_get_by_id_string_fail): + (JSC::JITStubs::cti_op_instanceof): + (JSC::JITStubs::cti_op_del_by_id): + (JSC::JITStubs::cti_op_mul): + (JSC::JITStubs::cti_op_new_func): + (JSC::JITStubs::cti_op_call_JSFunction): + (JSC::JITStubs::cti_op_call_arityCheck): + (JSC::JITStubs::cti_vm_dontLazyLinkCall): + (JSC::JITStubs::cti_vm_lazyLinkCall): + (JSC::JITStubs::cti_op_push_activation): + (JSC::JITStubs::cti_op_call_NotJSFunction): + (JSC::JITStubs::cti_op_create_arguments): + (JSC::JITStubs::cti_op_create_arguments_no_params): + (JSC::JITStubs::cti_op_tear_off_activation): + (JSC::JITStubs::cti_op_tear_off_arguments): + (JSC::JITStubs::cti_op_profile_will_call): + (JSC::JITStubs::cti_op_profile_did_call): + (JSC::JITStubs::cti_op_ret_scopeChain): + (JSC::JITStubs::cti_op_new_array): + (JSC::JITStubs::cti_op_resolve): + (JSC::JITStubs::cti_op_construct_JSConstruct): + (JSC::JITStubs::cti_op_construct_NotJSConstruct): + (JSC::JITStubs::cti_op_get_by_val): + (JSC::JITStubs::cti_op_get_by_val_byte_array): + (JSC::JITStubs::cti_op_resolve_func): + (JSC::JITStubs::cti_op_sub): + (JSC::JITStubs::cti_op_put_by_val): + (JSC::JITStubs::cti_op_put_by_val_array): + (JSC::JITStubs::cti_op_put_by_val_byte_array): + (JSC::JITStubs::cti_op_lesseq): + (JSC::JITStubs::cti_op_loop_if_true): + (JSC::JITStubs::cti_op_negate): + (JSC::JITStubs::cti_op_resolve_base): + (JSC::JITStubs::cti_op_resolve_skip): + (JSC::JITStubs::cti_op_resolve_global): + (JSC::JITStubs::cti_op_div): + (JSC::JITStubs::cti_op_pre_dec): + (JSC::JITStubs::cti_op_jless): + (JSC::JITStubs::cti_op_not): + (JSC::JITStubs::cti_op_jtrue): + (JSC::JITStubs::cti_op_post_inc): + (JSC::JITStubs::cti_op_eq): + (JSC::JITStubs::cti_op_lshift): + (JSC::JITStubs::cti_op_bitand): + (JSC::JITStubs::cti_op_rshift): + (JSC::JITStubs::cti_op_bitnot): + (JSC::JITStubs::cti_op_resolve_with_base): + (JSC::JITStubs::cti_op_new_func_exp): + (JSC::JITStubs::cti_op_mod): + (JSC::JITStubs::cti_op_less): + (JSC::JITStubs::cti_op_neq): + (JSC::JITStubs::cti_op_post_dec): + (JSC::JITStubs::cti_op_urshift): + (JSC::JITStubs::cti_op_bitxor): + (JSC::JITStubs::cti_op_new_regexp): + (JSC::JITStubs::cti_op_bitor): + (JSC::JITStubs::cti_op_call_eval): + (JSC::JITStubs::cti_op_throw): + (JSC::JITStubs::cti_op_get_pnames): + (JSC::JITStubs::cti_op_next_pname): + (JSC::JITStubs::cti_op_push_scope): + (JSC::JITStubs::cti_op_pop_scope): + (JSC::JITStubs::cti_op_typeof): + (JSC::JITStubs::cti_op_is_undefined): + (JSC::JITStubs::cti_op_is_boolean): + (JSC::JITStubs::cti_op_is_number): + (JSC::JITStubs::cti_op_is_string): + (JSC::JITStubs::cti_op_is_object): + (JSC::JITStubs::cti_op_is_function): + (JSC::JITStubs::cti_op_stricteq): + (JSC::JITStubs::cti_op_nstricteq): + (JSC::JITStubs::cti_op_to_jsnumber): + (JSC::JITStubs::cti_op_in): + (JSC::JITStubs::cti_op_push_new_scope): + (JSC::JITStubs::cti_op_jmp_scopes): + (JSC::JITStubs::cti_op_put_by_index): + (JSC::JITStubs::cti_op_switch_imm): + (JSC::JITStubs::cti_op_switch_char): + (JSC::JITStubs::cti_op_switch_string): + (JSC::JITStubs::cti_op_del_by_val): + (JSC::JITStubs::cti_op_put_getter): + (JSC::JITStubs::cti_op_put_setter): + (JSC::JITStubs::cti_op_new_error): + (JSC::JITStubs::cti_op_debug): + (JSC::JITStubs::cti_vm_throw): + * jit/JITStubs.h: + (JSC::): + * runtime/JSFunction.h: + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): + * runtime/JSGlobalData.h: + * runtime/JSGlobalObject.cpp: + * runtime/JSGlobalObject.h: + * runtime/TimeoutChecker.cpp: Copied from interpreter/Interpreter.cpp. + (JSC::TimeoutChecker::TimeoutChecker): + (JSC::TimeoutChecker::reset): + (JSC::TimeoutChecker::didTimeOut): + * runtime/TimeoutChecker.h: Copied from interpreter/Interpreter.h. + (JSC::TimeoutChecker::setTimeoutInterval): + (JSC::TimeoutChecker::ticksUntilNextCheck): + (JSC::TimeoutChecker::start): + (JSC::TimeoutChecker::stop): + +2009-02-20 Gustavo Noronha Silva + + Unreviewed build fix after r41100. + + * GNUmakefile.am: + +2009-02-20 Oliver Hunt + + Reviewed by Mark Rowe. + + 2==null returns true in 64bit jit + + Code for op_eq_null and op_neq_null was incorrectly performing + a 32bit compare, which truncated the type tag from an integer + immediate, leading to incorrect behaviour. + + * assembler/MacroAssembler.h: + (JSC::MacroAssembler::setPtr): + * assembler/MacroAssemblerX86_64.h: + (JSC::MacroAssemblerX86_64::setPtr): + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + +2009-02-19 Geoffrey Garen + + Reviewed by Gavin Barraclough. + + First step in splitting JIT functionality out of the Interpreter class: + Created JITStubs.h/.cpp, and moved Interpreter::cti_* into JITStubs.cpp. + + Functions that the Interpreter and JITStubs share moved to Operations.h/.cpp. + + * GNUmakefile.am: + * JavaScriptCore.pri: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * interpreter/Interpreter.cpp: + (JSC::Interpreter::resolveBase): + (JSC::Interpreter::checkTimeout): + (JSC::Interpreter::privateExecute): + * interpreter/Interpreter.h: + * jit/JITStubs.cpp: Copied from interpreter/Interpreter.cpp. + (JSC::Interpreter::cti_op_resolve_base): + * jit/JITStubs.h: Copied from interpreter/Interpreter.h. + * runtime/Operations.cpp: + (JSC::jsAddSlowCase): + (JSC::jsTypeStringForValue): + (JSC::jsIsObjectType): + (JSC::jsIsFunctionType): + * runtime/Operations.h: + (JSC::jsLess): + (JSC::jsLessEq): + (JSC::jsAdd): + (JSC::cachePrototypeChain): + (JSC::countPrototypeChainEntriesAndCheckForProxies): + (JSC::resolveBase): + +2009-02-19 Gavin Barraclough + + Reviewed by Oliver Hunt. + + Fix for x86-64. Where the JavaScriptCore text segment lies outside + a 2gb range of the heap containing JIT generated code, callbacks + from JIT code to the stub functions in Interpreter will be incorrectly + linked. + + No performance impact on Sunspider, 1% regression on v8-tests, + due to a 3% regression on richards. + + * assembler/AbstractMacroAssembler.h: + (JSC::AbstractMacroAssembler::Call::Call): + (JSC::AbstractMacroAssembler::Jump::link): + (JSC::AbstractMacroAssembler::Jump::linkTo): + (JSC::AbstractMacroAssembler::CodeLocationJump::relink): + (JSC::AbstractMacroAssembler::CodeLocationCall::relink): + (JSC::AbstractMacroAssembler::ProcessorReturnAddress::relinkCallerToFunction): + (JSC::AbstractMacroAssembler::PatchBuffer::link): + (JSC::AbstractMacroAssembler::PatchBuffer::linkTailRecursive): + (JSC::AbstractMacroAssembler::differenceBetween): + * assembler/MacroAssembler.h: + (JSC::MacroAssembler::tailRecursiveCall): + (JSC::MacroAssembler::makeTailRecursiveCall): + * assembler/MacroAssemblerX86.h: + (JSC::MacroAssemblerX86::call): + * assembler/MacroAssemblerX86Common.h: + * assembler/MacroAssemblerX86_64.h: + (JSC::MacroAssemblerX86_64::call): + (JSC::MacroAssemblerX86_64::moveWithPatch): + (JSC::MacroAssemblerX86_64::branchPtrWithPatch): + (JSC::MacroAssemblerX86_64::storePtrWithPatch): + * assembler/X86Assembler.h: + (JSC::X86Assembler::jmp_r): + (JSC::X86Assembler::linkJump): + (JSC::X86Assembler::patchJump): + (JSC::X86Assembler::patchCall): + (JSC::X86Assembler::linkCall): + (JSC::X86Assembler::patchAddress): + * interpreter/Interpreter.cpp: + (JSC::Interpreter::tryCTICachePutByID): + * jit/JIT.cpp: + (JSC::JIT::privateCompile): + (JSC::JIT::privateCompileCTIMachineTrampolines): + * jit/JIT.h: + * jit/JITArithmetic.cpp: + (JSC::JIT::putDoubleResultToJSNumberCellOrJSImmediate): + (JSC::JIT::compileBinaryArithOp): + * jit/JITPropertyAccess.cpp: + (JSC::JIT::privateCompilePutByIdTransition): + (JSC::JIT::privateCompileGetByIdSelf): + (JSC::JIT::privateCompilePutByIdReplace): + +2009-02-18 Geoffrey Garen + + Reviewed by Oliver Hunt. + + Simplified .call and .apply in preparation for optimizing them. Also, + a little cleanup. + + * runtime/FunctionPrototype.cpp: + (JSC::functionProtoFuncApply): + (JSC::functionProtoFuncCall): No need to do any specific conversion on + 'this' -- op_convert_this will do it if necessary. + + * runtime/JSImmediate.cpp: + (JSC::JSImmediate::toThisObject): Slightly relaxed the rules on + toThisObject to allow for 'undefined', which can be passed through + .call and .apply. + +2009-02-19 David Levin + + Reviewed by Alexey Proskuryakov. + + Bug 23976: MessageQueue needs a way to wait for a message that satisfies an arbitrary criteria. + + + * wtf/Deque.h: + (WTF::Deque::findIf): + * wtf/MessageQueue.h: + (WTF::MessageQueue::waitForMessageFiltered): + +2009-02-18 David Levin + + Reviewed by Alexey Proskuryakov. + + Bug 23974: Deque::Remove would be a useful method. + + + Add Deque::remove and DequeIteratorBase::operator=. + + Why was operator= added? Every concrete iterator (DequeIterator..DequeConstReverseIterator) + was calling DequeIteratorBase::assign(), which called Base::operator=(). Base::operator=() + was not implemented. This went unnoticed because the iterator copy code has been unused. + + * wtf/Deque.h: + (WTF::Deque::remove): + (WTF::DequeIteratorBase::removeFromIteratorsList): + (WTF::DequeIteratorBase::operator=): + (WTF::DequeIteratorBase::~DequeIteratorBase): + +2009-02-18 Gustavo Noronha Silva + + Reviewed by Holger Freyther. + + Fix symbols.filter location, and add other missing files to the + autotools build, so that make dist works. + + * GNUmakefile.am: + +2009-02-17 Geoffrey Garen + + Reviewed by Sam Weinig. + + Fixed failure in js1_5/Regress/regress-168347.js, as seen on the Oliver + bot. + + Technically, both behaviors are OK, but we might as well keep this test + passing. + + * runtime/FunctionPrototype.cpp: + (JSC::insertSemicolonIfNeeded): No need to add a trailing semicolon + after a trailing '}', since '}' ends a block, indicating the end of a + statement. + +2009-02-17 Geoffrey Garen + + Build fix. + + * runtime/FunctionPrototype.cpp: + +2009-02-17 Oliver Hunt + + Reviewed by Geoff Garen. + + Add assertion to guard against oversized pc relative calls. + + * assembler/X86Assembler.h: + (JSC::X86Assembler::link): + +2009-02-17 Geoffrey Garen + + Reviewed by Sam Weinig. + + Fixed REGRESSION: http://www.amnestyusa.org/ + fails to load. + + amnestyusa.org uses the Optimist JavaScript library, which adds event + listeners by concatenating string-ified functions. This is only sure to + be syntactically valid if the string-ified functions end in semicolons. + + * parser/Lexer.cpp: + (JSC::Lexer::isWhiteSpace): + * parser/Lexer.h: + (JSC::Lexer::isWhiteSpace): + (JSC::Lexer::isLineTerminator): Added some helper functions for examining + whitespace. + + * runtime/FunctionPrototype.cpp: + (JSC::appendSemicolonIfNeeded): + (JSC::functionProtoFuncToString): When string-ifying a function, insert + a semicolon in the last non-whitespace position, if one doesn't already exist. + +2009-02-16 Oliver Hunt + + Reviewed by NOBODY (Build fix). + + Roll out r41022 as it breaks qt and gtk builds + + * jit/JITArithmetic.cpp: + (JSC::isSSE2Present): + +2009-02-16 Sam Weinig + + Reviewed by Geoffrey Garen. + + Fix for + REGRESSION (r36779): Adding link, images, flash in TinyMCE blocks entire page (21382) + + No performance regression. + + * runtime/Arguments.cpp: + (JSC::Arguments::fillArgList): Add codepath for when the "length" property has been + overridden. + +2009-02-16 Mark Rowe + + Build fix. + + * wtf/FastMalloc.cpp: + (WTF::TCMallocStats::): + (WTF::TCMallocStats::FastMallocZone::FastMallocZone): + +2009-02-16 Csaba Osztrogonac + + Reviewed by Oliver Hunt. + + Bug 23787: Allow JIT to generate SSE2 code if using GCC + + + GCC version of the cpuid check. + + * jit/JITArithmetic.cpp: + (JSC::isSSE2Present): GCC assembly code added. + 6.6% progression on x86 Linux with JIT and WREC on SunSpider if using SSE2 capable machine. + +2009-02-13 Adam Treat + + Reviewed by George Staikos. + + https://bugs.webkit.org/show_bug.cgi?id=23960 + Crash Fix. + + Don't depend on 'initializeThreading()' to come before a call to 'isMainThread()' + as QtWebKit only calls 'initializeThreading()' during QWebPage construction. + + A client app may well make a call to QWebSettings::iconForUrl() for instance + before creating a QWebPage and that call to QWebSettings triggers an + ASSERT(isMainThread()) deep within WebCore. + + * wtf/ThreadingQt.cpp: + (WTF::isMainThread): + +2009-02-13 Gavin Barraclough + + Reviewed by Darin Adler. + + Some data in the instruction stream is potentially uninitialized - fix this. + + Change the OperandTypes constructor so that uninitialized memory in the int + is zeroed, and modify the Instruction constructor taking an Opcode so that + if !HAVE(COMPUTED_GOTO) (i.e. when Opcode is an enum, and is potentially only + a byte) it zeros the Instruction first before writing the opcode. + + * bytecode/Instruction.h: + (JSC::Instruction::Instruction): + * parser/ResultType.h: + (JSC::OperandTypes::OperandTypes): + +2009-02-13 Geoffrey Garen + + Build fix for non_JIT platforms. + + * bytecode/CodeBlock.h: + (JSC::CodeBlock::setIsNumericCompareFunction): + (JSC::CodeBlock::isNumericCompareFunction): + +2009-02-13 Geoffrey Garen + + Reviewed by Darin Adler. + + Fixed Optimize sort by JS numeric comparison + function not to run the comparison function + + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::CodeBlock): + * bytecode/CodeBlock.h: + (JSC::CodeBlock::setIsNumericCompareFunction): + (JSC::CodeBlock::isNumericCompareFunction): Added the ability to track + whether a CodeBlock performs a sort-like numeric comparison. + + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::generate): Set the isNumericCompareFunction bit + after compiling. + + * parser/Nodes.cpp: + (JSC::FunctionBodyNode::emitBytecode): Fixed a bug that caused us to + codegen an extra return at the end of all functions (eek!), since this + made it harder / weirder to detect the numeric comparison pattern in + bytecode. + + * runtime/ArrayPrototype.cpp: + (JSC::arrayProtoFuncSort): Use the isNumericCompareFunction bit to do + a faster sort if we can. + + * runtime/FunctionConstructor.cpp: + (JSC::extractFunctionBody): + (JSC::constructFunction): + * runtime/FunctionConstructor.h: Renamed and exported extractFunctionBody for + use in initializing lazyNumericCompareFunction. + + * runtime/JSArray.cpp: + (JSC::compareNumbersForQSort): + (JSC::compareByStringPairForQSort): + (JSC::JSArray::sortNumeric): + (JSC::JSArray::sort): + * runtime/JSArray.h: Added a fast numeric sort. Renamed ArrayQSortPair + to be more specific since we do different kinds of qsort now. + + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): + (JSC::JSGlobalData::numericCompareFunction): + (JSC::JSGlobalData::ClientData::~ClientData): + * runtime/JSGlobalData.h: Added helper data for computing the + isNumericCompareFunction bit. + +2009-02-13 Darin Adler + + * Configurations/JavaScriptCore.xcconfig: Undo accidental commit of this file. + +2009-02-12 Darin Adler + + Reviewed by Oliver Hunt and Alexey Proskuryakov. + + Speed up a couple string functions. + + * runtime/StringPrototype.cpp: + (JSC::stringProtoFuncIndexOf): Added a fast path for cases where the second + argument is either missing or an integer. + (JSC::stringProtoFuncBig): Use jsNontrivialString since the string is guaranteed + to be 2 or more characters long. + (JSC::stringProtoFuncSmall): Ditto. + (JSC::stringProtoFuncBlink): Ditto. + (JSC::stringProtoFuncBold): Ditto. + (JSC::stringProtoFuncItalics): Ditto. + (JSC::stringProtoFuncStrike): Ditto. + (JSC::stringProtoFuncSub): Ditto. + (JSC::stringProtoFuncSup): Ditto. + (JSC::stringProtoFuncFontcolor): Ditto. + (JSC::stringProtoFuncFontsize): Make the fast path Sam recently added even faster + by avoiding all but the minimum memory allocation. + (JSC::stringProtoFuncAnchor): Use jsNontrivialString. + (JSC::stringProtoFuncLink): Added a fast path. + + * runtime/UString.cpp: + (JSC::UString::find): Added a fast path for single-character search strings. + +2009-02-13 David Levin + + Reviewed by Darin Adler. + + Bug 23926: Race condition in callOnMainThreadAndWait + + + * wtf/MainThread.cpp: + Removed callOnMainThreadAndWait since it isn't used. + +2009-02-13 Oliver Hunt + + Reviewed by Jon Honeycutt. + + Math.random is really slow on windows. + + Math.random calls WTF::randomNumber which is implemented as + the secure rand_s on windows. Unfortunately rand_s is an order + of magnitude slower than arc4random. For this reason I've + added "weakRandomNumber" for use by JavaScript's Math Object. + In the long term we should look at using our own secure PRNG + in place of the system, but this will do for now. + + 30% win on SunSpider on Windows, resolving most of the remaining + disparity vs. Mac. + + * runtime/MathObject.cpp: + (JSC::MathObject::MathObject): + (JSC::mathProtoFuncRandom): + * wtf/RandomNumber.cpp: + (WTF::weakRandomNumber): + (WTF::randomNumber): + * wtf/RandomNumber.h: + * wtf/RandomNumberSeed.h: + (WTF::initializeWeakRandomNumberGenerator): + +2009-02-12 Mark Rowe + + Fix the build for other platforms. + + * wtf/RandomNumber.cpp: + (WTF::randomNumber): + +2009-02-12 Gavin Barraclough + + Reviewed by Sam Weinig. + + Remove (/reduce) use of hard-wired register names from the JIT. + Currently there is no abstraction of registers used in the JIT, + which has a number of negative consequences. Hard-wiring x86 + register names makes the JIT less portable to other platforms, + and prevents us from performing dynamic register allocation to + attempt to maintain more temporary values in machine registers. + (The latter will be more important on x86-64, where we have more + registers to make use of). + + Also, remove MacroAssembler::mod32. This was not providing a + useful abstraction, and was not in keeping with the rest of the + MacroAssembler interface, in having specific register requirements. + + * assembler/MacroAssemblerX86Common.h: + * jit/JIT.cpp: + (JSC::JIT::compileOpStrictEq): + (JSC::JIT::emitSlowScriptCheck): + (JSC::JIT::privateCompileMainPass): + (JSC::JIT::privateCompileSlowCases): + (JSC::JIT::privateCompile): + (JSC::JIT::privateCompileCTIMachineTrampolines): + * jit/JIT.h: + * jit/JITArithmetic.cpp: + (JSC::JIT::compileFastArith_op_lshift): + (JSC::JIT::compileFastArithSlow_op_lshift): + (JSC::JIT::compileFastArith_op_rshift): + (JSC::JIT::compileFastArithSlow_op_rshift): + (JSC::JIT::compileFastArith_op_bitand): + (JSC::JIT::compileFastArithSlow_op_bitand): + (JSC::JIT::compileFastArith_op_mod): + (JSC::JIT::compileFastArithSlow_op_mod): + (JSC::JIT::compileFastArith_op_post_inc): + (JSC::JIT::compileFastArithSlow_op_post_inc): + (JSC::JIT::compileFastArith_op_post_dec): + (JSC::JIT::compileFastArithSlow_op_post_dec): + (JSC::JIT::compileFastArith_op_pre_inc): + (JSC::JIT::compileFastArithSlow_op_pre_inc): + (JSC::JIT::compileFastArith_op_pre_dec): + (JSC::JIT::compileFastArithSlow_op_pre_dec): + (JSC::JIT::compileFastArith_op_add): + (JSC::JIT::compileFastArith_op_mul): + (JSC::JIT::compileFastArith_op_sub): + (JSC::JIT::compileBinaryArithOp): + * jit/JITCall.cpp: + (JSC::JIT::compileOpCallInitializeCallFrame): + (JSC::JIT::compileOpCallSetupArgs): + (JSC::JIT::compileOpCallEvalSetupArgs): + (JSC::JIT::compileOpConstructSetupArgs): + (JSC::JIT::compileOpCall): + (JSC::JIT::compileOpCallSlowCase): + * jit/JITInlineMethods.h: + (JSC::JIT::emitGetVirtualRegister): + (JSC::JIT::emitPutVirtualRegister): + (JSC::JIT::emitNakedCall): + (JSC::JIT::restoreArgumentReference): + (JSC::JIT::restoreArgumentReferenceForTrampoline): + * jit/JITPropertyAccess.cpp: + (JSC::JIT::compileGetByIdHotPath): + (JSC::JIT::compilePutByIdHotPath): + (JSC::JIT::compileGetByIdSlowCase): + (JSC::JIT::compilePutByIdSlowCase): + (JSC::JIT::privateCompilePutByIdTransition): + (JSC::JIT::privateCompilePatchGetArrayLength): + (JSC::JIT::privateCompileGetByIdSelf): + (JSC::JIT::privateCompileGetByIdProto): + (JSC::JIT::privateCompileGetByIdSelfList): + (JSC::JIT::privateCompileGetByIdProtoList): + (JSC::JIT::privateCompileGetByIdChainList): + (JSC::JIT::privateCompileGetByIdChain): + (JSC::JIT::privateCompilePutByIdReplace): + +2009-02-12 Horia Olaru + + Reviewed by Oliver Hunt. + + https://bugs.webkit.org/show_bug.cgi?id=23400 + + When throwing an exception within an eval argument string, the dst parameter was + modified in the functions below and the return value for eval was altered. Changed + the emitNode call in JSC::ThrowNode::emitBytecode to use a temporary register + to store its results instead of dst. The JSC::FunctionCallResolveNode::emitBytecode + would load the function within the dst registry, also altering the result returned + by eval. Replaced it with another temporary. + + * parser/Nodes.cpp: + (JSC::FunctionCallResolveNode::emitBytecode): + (JSC::ThrowNode::emitBytecode): + +2009-02-12 Sam Weinig + + Reviewed by Geoffrey Garen. + + Speed up String.prototype.fontsize. + + * runtime/StringPrototype.cpp: + (JSC::stringProtoFuncFontsize): Specialize for defined/commonly used values. + +2009-02-12 Geoffrey Garen + + Reviewed by Sam Weinig. + + Correctness fix. + + * wtf/RandomNumber.cpp: + (WTF::randomNumber): Divide by the maximum representable value, which + is different on each platform now, to get values between 0 and 1. + +2009-02-12 Geoffrey Garen + + Build fix. + + * wtf/RandomNumber.cpp: + (WTF::randomNumber): + +2009-02-12 Geoffrey Garen + + Reviewed by Sam Weinig. + + Fixed . + + * wtf/RandomNumber.cpp: + (WTF::randomNumber): Make only one call to the random number generator + on platforms where the generator is cryptographically secure. The value + of randomness over and above cryptographically secure randomness is not + clear, and it caused some performance problems. + +2009-02-12 Adam Roben + + Fix lots of Perl warnings when building JavaScriptCoreGenerated on + Windows + + Reviewed by John Sullivan. + + * JavaScriptCore.vcproj/JavaScriptCore/build-generated-files.sh: + Create the docs/ directory so that we can write bytecode.html into it. + This matches what JavaScriptCore.xcodeproj does. + +2009-02-12 Simon Hausmann + + Rubber-stamped by Lars. + + Re-enable the JIT in the Qt build with -fno-stack-protector on Linux. + + * JavaScriptCore.pri: + +2009-02-11 Dmitry Titov + + Reviewed by Alexey Proskuryakov. + + https://bugs.webkit.org/show_bug.cgi?id=23705 + Fix the UI freeze caused by Worker generating a flood of messages. + Measure time we spend in executing posted work items. If too much time is spent + without returning to the run loop, exit and reschedule. + + * wtf/MainThread.h: + Added initializeMainThreadPlatform() to initialize low-level mechanism for posting + work items from thread to thread. This removes #ifdefs for WIN and CHROMIUM from platform-independent code. + + * wtf/MainThread.cpp: + (WTF::initializeMainThread): + (WTF::dispatchFunctionsFromMainThread): + Instead of dispatching all work items in the queue, dispatch them one by one + and measure elapsed time. After a threshold, reschedule and quit. + + (WTF::callOnMainThread): + (WTF::callOnMainThreadAndWait): + Only schedule dispatch if the queue was empty - to avoid many posted messages in the run loop queue. + + * wtf/mac/MainThreadMac.mm: + (WTF::scheduleDispatchFunctionsOnMainThread): + Use static instance of the mainThreadCaller instead of allocating and releasing it each time. + (WTF::initializeMainThreadPlatform): + * wtf/gtk/MainThreadChromium.cpp: + (WTF::initializeMainThreadPlatform): + * wtf/gtk/MainThreadGtk.cpp: + (WTF::initializeMainThreadPlatform): + * wtf/qt/MainThreadQt.cpp: + (WTF::initializeMainThreadPlatform): + * wtf/win/MainThreadWin.cpp: + (WTF::initializeMainThreadPlatform): + * wtf/wx/MainThreadWx.cpp: + (WTF::initializeMainThreadPlatform): + +2009-02-11 Sam Weinig + + Reviewed by Gavin Barraclough. + + Style cleanup. + + * assembler/AbstractMacroAssembler.h: + (JSC::AbstractMacroAssembler::CodeLocationCommon::CodeLocationCommon): + (JSC::AbstractMacroAssembler::CodeLocationCommon::operator bool): + (JSC::AbstractMacroAssembler::CodeLocationCommon::reset): + (JSC::AbstractMacroAssembler::CodeLocationLabel::addressForSwitch): + (JSC::AbstractMacroAssembler::CodeLocationLabel::addressForExceptionHandler): + (JSC::AbstractMacroAssembler::CodeLocationLabel::addressForJSR): + (JSC::AbstractMacroAssembler::CodeLocationLabel::getJumpDestination): + (JSC::AbstractMacroAssembler::CodeLocationJump::relink): + (JSC::AbstractMacroAssembler::CodeLocationJump::CodeLocationJump): + (JSC::AbstractMacroAssembler::CodeLocationCall::relink): + (JSC::AbstractMacroAssembler::CodeLocationCall::calleeReturnAddressValue): + (JSC::AbstractMacroAssembler::CodeLocationCall::CodeLocationCall): + (JSC::AbstractMacroAssembler::CodeLocationDataLabel32::repatch): + (JSC::AbstractMacroAssembler::CodeLocationDataLabel32::CodeLocationDataLabel32): + (JSC::AbstractMacroAssembler::CodeLocationDataLabelPtr::repatch): + (JSC::AbstractMacroAssembler::CodeLocationDataLabelPtr::CodeLocationDataLabelPtr): + (JSC::AbstractMacroAssembler::ProcessorReturnAddress::ProcessorReturnAddress): + (JSC::AbstractMacroAssembler::ProcessorReturnAddress::relinkCallerToFunction): + (JSC::AbstractMacroAssembler::ProcessorReturnAddress::operator void*): + (JSC::AbstractMacroAssembler::PatchBuffer::link): + (JSC::::CodeLocationCommon::labelAtOffset): + (JSC::::CodeLocationCommon::jumpAtOffset): + (JSC::::CodeLocationCommon::callAtOffset): + (JSC::::CodeLocationCommon::dataLabelPtrAtOffset): + (JSC::::CodeLocationCommon::dataLabel32AtOffset): + +2009-02-11 Sam Weinig + + Reviewed by Gavin Barraclough. + + * assembler/AbstractMacroAssembler.h: Fix comments. + +2009-02-11 Alexey Proskuryakov + + Trying to fix wx build. + + * bytecode/JumpTable.h: Include "MacroAssembler.h", not . + * jscore.bkl: Added assembler directory to search paths. + +2009-02-10 Gavin Barraclough + + Build + fix. + (Narrow + changelog + for + dhyatt). + + * bytecode/Instruction.h: + (JSC::PolymorphicAccessStructureList::PolymorphicStubInfo::set): + (JSC::PolymorphicAccessStructureList::PolymorphicAccessStructureList): + +2009-02-10 Gavin Barraclough + + Reviewed by Oliver Hunt. + + Reduce use of void* / reinterpret_cast in JIT repatching code, + add strong types for Calls and for the various types of pointers + we retain into the JIT generated instruction stream. + + No performance impact. + + * assembler/AbstractMacroAssembler.h: + (JSC::AbstractMacroAssembler::ImmPtr::ImmPtr): + (JSC::AbstractMacroAssembler::ImmPtr::asIntptr): + (JSC::AbstractMacroAssembler::Imm32::Imm32): + (JSC::AbstractMacroAssembler::Label::Label): + (JSC::AbstractMacroAssembler::DataLabelPtr::DataLabelPtr): + (JSC::AbstractMacroAssembler::Call::Call): + (JSC::AbstractMacroAssembler::Call::link): + (JSC::AbstractMacroAssembler::Call::linkTo): + (JSC::AbstractMacroAssembler::Jump::Jump): + (JSC::AbstractMacroAssembler::Jump::linkTo): + (JSC::AbstractMacroAssembler::CodeLocationCommon::CodeLocationCommon): + (JSC::AbstractMacroAssembler::CodeLocationCommon::operator bool): + (JSC::AbstractMacroAssembler::CodeLocationCommon::reset): + (JSC::AbstractMacroAssembler::CodeLocationLabel::CodeLocationLabel): + (JSC::AbstractMacroAssembler::CodeLocationLabel::addressForSwitch): + (JSC::AbstractMacroAssembler::CodeLocationLabel::addressForExceptionHandler): + (JSC::AbstractMacroAssembler::CodeLocationLabel::addressForJSR): + (JSC::AbstractMacroAssembler::CodeLocationLabel::getJumpDestination): + (JSC::AbstractMacroAssembler::CodeLocationJump::CodeLocationJump): + (JSC::AbstractMacroAssembler::CodeLocationJump::relink): + (JSC::AbstractMacroAssembler::CodeLocationCall::CodeLocationCall): + (JSC::AbstractMacroAssembler::CodeLocationCall::relink): + (JSC::AbstractMacroAssembler::CodeLocationCall::calleeReturnAddressValue): + (JSC::AbstractMacroAssembler::CodeLocationDataLabel32::CodeLocationDataLabel32): + (JSC::AbstractMacroAssembler::CodeLocationDataLabel32::repatch): + (JSC::AbstractMacroAssembler::CodeLocationDataLabelPtr::CodeLocationDataLabelPtr): + (JSC::AbstractMacroAssembler::CodeLocationDataLabelPtr::repatch): + (JSC::AbstractMacroAssembler::ProcessorReturnAddress::ProcessorReturnAddress): + (JSC::AbstractMacroAssembler::ProcessorReturnAddress::relinkCallerToFunction): + (JSC::AbstractMacroAssembler::ProcessorReturnAddress::operator void*): + (JSC::AbstractMacroAssembler::PatchBuffer::entry): + (JSC::AbstractMacroAssembler::PatchBuffer::trampolineAt): + (JSC::AbstractMacroAssembler::PatchBuffer::link): + (JSC::AbstractMacroAssembler::PatchBuffer::linkTailRecursive): + (JSC::AbstractMacroAssembler::PatchBuffer::patch): + (JSC::AbstractMacroAssembler::PatchBuffer::locationOf): + (JSC::AbstractMacroAssembler::PatchBuffer::returnAddressOffset): + (JSC::AbstractMacroAssembler::differenceBetween): + (JSC::::CodeLocationCommon::labelAtOffset): + (JSC::::CodeLocationCommon::jumpAtOffset): + (JSC::::CodeLocationCommon::callAtOffset): + (JSC::::CodeLocationCommon::dataLabelPtrAtOffset): + (JSC::::CodeLocationCommon::dataLabel32AtOffset): + * assembler/MacroAssemblerX86Common.h: + (JSC::MacroAssemblerX86Common::call): + * assembler/X86Assembler.h: + (JSC::X86Assembler::getCallReturnOffset): + * bytecode/CodeBlock.h: + (JSC::CallLinkInfo::CallLinkInfo): + (JSC::getStructureStubInfoReturnLocation): + (JSC::getCallLinkInfoReturnLocation): + * bytecode/Instruction.h: + (JSC::PolymorphicAccessStructureList::PolymorphicStubInfo::set): + (JSC::PolymorphicAccessStructureList::PolymorphicAccessStructureList): + * bytecode/JumpTable.h: + (JSC::StringJumpTable::ctiForValue): + (JSC::SimpleJumpTable::ctiForValue): + * bytecode/StructureStubInfo.h: + (JSC::StructureStubInfo::StructureStubInfo): + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::emitCatch): + (JSC::prepareJumpTableForStringSwitch): + * interpreter/Interpreter.cpp: + (JSC::Interpreter::cti_op_get_by_id_self_fail): + (JSC::getPolymorphicAccessStructureListSlot): + (JSC::Interpreter::cti_op_throw): + (JSC::Interpreter::cti_op_switch_imm): + (JSC::Interpreter::cti_op_switch_char): + (JSC::Interpreter::cti_op_switch_string): + (JSC::Interpreter::cti_vm_throw): + * jit/JIT.cpp: + (JSC::ctiSetReturnAddress): + (JSC::ctiPatchCallByReturnAddress): + (JSC::JIT::privateCompile): + (JSC::JIT::privateCompileCTIMachineTrampolines): + * jit/JIT.h: + (JSC::CallRecord::CallRecord): + (JSC::JIT::compileGetByIdSelf): + (JSC::JIT::compileGetByIdProto): + (JSC::JIT::compileGetByIdChain): + (JSC::JIT::compilePutByIdReplace): + (JSC::JIT::compilePutByIdTransition): + (JSC::JIT::compilePatchGetArrayLength): + (JSC::JIT::emitCTICall): + * jit/JITCall.cpp: + (JSC::JIT::unlinkCall): + (JSC::JIT::linkCall): + * jit/JITInlineMethods.h: + (JSC::JIT::emitNakedCall): + (JSC::JIT::emitCTICall_internal): + * jit/JITPropertyAccess.cpp: + (JSC::JIT::compileGetByIdSlowCase): + (JSC::JIT::compilePutByIdSlowCase): + (JSC::JIT::privateCompilePutByIdTransition): + (JSC::JIT::patchGetByIdSelf): + (JSC::JIT::patchPutByIdReplace): + (JSC::JIT::privateCompilePatchGetArrayLength): + (JSC::JIT::privateCompileGetByIdSelf): + (JSC::JIT::privateCompileGetByIdProto): + (JSC::JIT::privateCompileGetByIdSelfList): + (JSC::JIT::privateCompileGetByIdProtoList): + (JSC::JIT::privateCompileGetByIdChainList): + (JSC::JIT::privateCompileGetByIdChain): + (JSC::JIT::privateCompilePutByIdReplace): + +2009-02-10 Adam Roben + + Windows build fix after r40813 + + * JavaScriptCore.vcproj/jsc/jsc.vcproj: Added profiler/ to the include + path so that Profiler.h can be found. + +2009-02-09 Gavin Barraclough + + Reviewed by Oliver Hunt. + + Provide a class type for a generated block of JIT code. + Also changes the return address -> bytecode index map to + track the return addess as an unsigned offset into the code + instead of a ptrdiff_t in terms of void**s - the latter is + equal to the actual offset / sizeof(void*), making it a + potentially lossy representation. + + * JavaScriptCore.xcodeproj/project.pbxproj: + * assembler/AbstractMacroAssembler.h: + (JSC::AbstractMacroAssembler::PatchBuffer::returnAddressOffset): + * assembler/X86Assembler.h: + (JSC::X86Assembler::getCallReturnOffset): + * bytecode/CodeBlock.h: + (JSC::CallReturnOffsetToBytecodeIndex::CallReturnOffsetToBytecodeIndex): + (JSC::getCallReturnOffset): + (JSC::CodeBlock::getBytecodeIndex): + (JSC::CodeBlock::jitCode): + (JSC::CodeBlock::callReturnIndexVector): + * interpreter/Interpreter.cpp: + (JSC::Interpreter::execute): + (JSC::Interpreter::cti_vm_dontLazyLinkCall): + (JSC::Interpreter::cti_vm_lazyLinkCall): + * jit/JIT.cpp: + (JSC::JIT::privateCompile): + * jit/JIT.h: + (JSC::): + * jit/JITCall.cpp: + (JSC::JIT::linkCall): + * jit/JITCode.h: Added. + (JSC::): + (JSC::JITCode::JITCode): + (JSC::JITCode::operator bool): + (JSC::JITCode::addressForCall): + (JSC::JITCode::offsetOf): + (JSC::JITCode::execute): + +2009-02-09 John Grabowski + + Reviewed by Darin Adler. + + https://bugs.webkit.org/show_bug.cgi?id=23856 + Change the definition of "main thread" for Chromium on OSX. + It does not match the DARWIN definition. + + * wtf/ThreadingPthreads.cpp: + (WTF::initializeThreading): + (WTF::isMainThread): + +2009-02-09 Gavin Barraclough + + Reviewed by Oliver Hunt. + + Minor bugfix, incorrect check meant that subtraction causing integer overflow + would be missed on x86-64 JIT. + + * jit/JITArithmetic.cpp: + (JSC::JIT::compileBinaryArithOp): + +2009-02-09 Gavin Barraclough + + Reviewed by Oliver Hunt. + + A more sensible register allocation for x86-64. + + When WREC was ported to x86-64 it stuck with the same register allocation as x86. + This requires registers to be reordered on entry into WREC generated code, since + argument passing is different on x86-64 and x86 (regparm(3)). This patch switches + x86-64 to use a native register allocation, that does not require argument registers + to be reordered. + + * wrec/WRECGenerator.cpp: + (JSC::WREC::Generator::generateEnter): + (JSC::WREC::Generator::generateReturnSuccess): + (JSC::WREC::Generator::generateReturnFailure): + * wrec/WRECGenerator.h: + +2009-02-05 Adam Roben + + Build fix + + Rubberstamped by Sam Weinig. + + * wtf/TypeTraits.h: Include Platform.h, since this header uses macros + defined there. + +2009-02-05 Dimitri Glazkov + + Reviewed by Eric Seidel. + + https://bugs.webkit.org/show_bug.cgi?id=23747 + Add Chromium threading-related files. + + * wtf/MainThread.cpp: Added platform guard to initializeMainThread. + * wtf/chromium/ChromiumThreading.h: Added. + * wtf/chromium/MainThreadChromium.cpp: Added. + (WTF::initializeMainThread): + (WTF::scheduleDispatchFunctionsOnMainThread): + +2009-02-05 David Levin + + Reviewed by Darin Adler. + + Bug 23713: COMPILE_ASSERTS should be moved out of TypeTraits.h and into .cpp file + + + * GNUmakefile.am: + * JavaScriptCore.pri: + * JavaScriptCore.scons: + * JavaScriptCore.vcproj/WTF/WTF.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * JavaScriptCoreSources.bkl: + + * wtf/HashTraits.h: + Remove unnecessary header file that I missed when moving out the type traits form this file. + + * wtf/TypeTraits.cpp: Added. + (WTF::): + * wtf/TypeTraits.h: + Moved the compile asserts into TypeTraits.cpp file. + +2009-02-04 Gavin Barraclough + + Reviewed by Oliver 'the nun' Hunt. + + Add -e switch to jsc to enable evaluation of scripts passed on the command line. + + * jsc.cpp: + (Script::Script): + (runWithScripts): + (printUsageStatement): + (parseArguments): + (jscmain): + +2009-02-04 Gavin Barraclough + + Rubber stamped by Sam 'Big Mac' Weinig. + + * assembler/AbstractMacroAssembler.h: Copied from assembler/MacroAssembler.h. + * assembler/MacroAssemblerX86.h: Copied from assembler/MacroAssembler.h. + * assembler/MacroAssemblerX86Common.h: Copied from assembler/MacroAssembler.h. + * assembler/MacroAssemblerX86_64.h: Copied from assembler/MacroAssembler.h. + +2009-02-04 Gavin Barraclough + + Reviewed by Sam Weinig. + + This patch tidies up the MacroAssembler, cleaning up the code and refactoring out the + platform-specific parts. The MacroAssembler gets split up like a beef burger, with the + platform-agnostic data types being the lower bun (in the form of the class AbstractMacroAssembler), + the plaform-specific code generation forming a big meaty patty of methods like 'add32', + 'branch32', etc (MacroAssemblerX86), and finally topped off with the bun-lid of the + MacroAssembler class itself, providing covenience methods such as the stack peek & poke, + and backwards branch methods, all of which can be described in a platform independent + way using methods from the base class. The AbstractMacroAssembler is templated on the + type of the assembler class that will be used for code generation, and the three layers + are held together with the cocktail stick of inheritance. + + The above description is a slight simplification since the MacroAssemblerX86 is actually + formed from two layers (in effect giving us a kind on bacon double cheeseburger) - with the + bulk of methods that are common between x86 & x86-64 implemented in MacroAssemblerX86Common, + which forms a base class for MacroAssemblerX86 and MacroAssemblerX86_64 (which add the methods + specific to the given platform). + + I'm landing these changes first without splitting the classes across multiple files, + I will follow up with a second patch to split up the file MacroAssembler.h. + + * assembler/MacroAssembler.h: + (JSC::AbstractMacroAssembler::): + (JSC::AbstractMacroAssembler::DataLabelPtr::DataLabelPtr): + (JSC::AbstractMacroAssembler::DataLabelPtr::patch): + (JSC::AbstractMacroAssembler::DataLabel32::DataLabel32): + (JSC::AbstractMacroAssembler::DataLabel32::patch): + (JSC::AbstractMacroAssembler::Label::Label): + (JSC::AbstractMacroAssembler::Jump::Jump): + (JSC::AbstractMacroAssembler::Jump::link): + (JSC::AbstractMacroAssembler::Jump::linkTo): + (JSC::AbstractMacroAssembler::Jump::patch): + (JSC::AbstractMacroAssembler::JumpList::link): + (JSC::AbstractMacroAssembler::JumpList::linkTo): + (JSC::AbstractMacroAssembler::PatchBuffer::link): + (JSC::AbstractMacroAssembler::PatchBuffer::addressOf): + (JSC::AbstractMacroAssembler::PatchBuffer::setPtr): + (JSC::AbstractMacroAssembler::size): + (JSC::AbstractMacroAssembler::copyCode): + (JSC::AbstractMacroAssembler::label): + (JSC::AbstractMacroAssembler::align): + (JSC::AbstractMacroAssembler::differenceBetween): + (JSC::MacroAssemblerX86Common::xor32): + (JSC::MacroAssemblerX86Common::load32WithAddressOffsetPatch): + (JSC::MacroAssemblerX86Common::store32WithAddressOffsetPatch): + (JSC::MacroAssemblerX86Common::move): + (JSC::MacroAssemblerX86Common::swap): + (JSC::MacroAssemblerX86Common::signExtend32ToPtr): + (JSC::MacroAssemblerX86Common::zeroExtend32ToPtr): + (JSC::MacroAssemblerX86Common::branch32): + (JSC::MacroAssemblerX86Common::jump): + (JSC::MacroAssemblerX86_64::add32): + (JSC::MacroAssemblerX86_64::sub32): + (JSC::MacroAssemblerX86_64::load32): + (JSC::MacroAssemblerX86_64::store32): + (JSC::MacroAssemblerX86_64::addPtr): + (JSC::MacroAssemblerX86_64::andPtr): + (JSC::MacroAssemblerX86_64::orPtr): + (JSC::MacroAssemblerX86_64::rshiftPtr): + (JSC::MacroAssemblerX86_64::subPtr): + (JSC::MacroAssemblerX86_64::xorPtr): + (JSC::MacroAssemblerX86_64::loadPtr): + (JSC::MacroAssemblerX86_64::loadPtrWithAddressOffsetPatch): + (JSC::MacroAssemblerX86_64::storePtr): + (JSC::MacroAssemblerX86_64::storePtrWithAddressOffsetPatch): + (JSC::MacroAssemblerX86_64::branchPtr): + (JSC::MacroAssemblerX86_64::branchTestPtr): + (JSC::MacroAssemblerX86_64::branchAddPtr): + (JSC::MacroAssemblerX86_64::branchSubPtr): + (JSC::MacroAssemblerX86_64::branchPtrWithPatch): + (JSC::MacroAssemblerX86_64::storePtrWithPatch): + (JSC::MacroAssemblerX86::add32): + (JSC::MacroAssemblerX86::sub32): + (JSC::MacroAssemblerX86::load32): + (JSC::MacroAssemblerX86::store32): + (JSC::MacroAssemblerX86::branch32): + (JSC::MacroAssemblerX86::branchPtrWithPatch): + (JSC::MacroAssemblerX86::storePtrWithPatch): + (JSC::MacroAssembler::pop): + (JSC::MacroAssembler::peek): + (JSC::MacroAssembler::poke): + (JSC::MacroAssembler::branchPtr): + (JSC::MacroAssembler::branch32): + (JSC::MacroAssembler::branch16): + (JSC::MacroAssembler::branchTestPtr): + (JSC::MacroAssembler::addPtr): + (JSC::MacroAssembler::andPtr): + (JSC::MacroAssembler::orPtr): + (JSC::MacroAssembler::rshiftPtr): + (JSC::MacroAssembler::subPtr): + (JSC::MacroAssembler::xorPtr): + (JSC::MacroAssembler::loadPtr): + (JSC::MacroAssembler::loadPtrWithAddressOffsetPatch): + (JSC::MacroAssembler::storePtr): + (JSC::MacroAssembler::storePtrWithAddressOffsetPatch): + (JSC::MacroAssembler::branchAddPtr): + (JSC::MacroAssembler::branchSubPtr): + * jit/JITArithmetic.cpp: + (JSC::JIT::compileBinaryArithOp): + +2009-02-04 Alexey Proskuryakov + + Reviewed by Sam Weinig. + + https://bugs.webkit.org/show_bug.cgi?id=23681 + Worker tests crash in debug builds if run --singly + + The crash happened because worker threads continued running while debug-only static objects + were already being destroyed on main thread. + + * runtime/Structure.cpp: Create static debug-only sets in heap, so that they don't get + destroyed. + + * wtf/ThreadingPthreads.cpp: Changed assertions to conventional form. + +2009-02-03 Gavin Barraclough + + Reviewed by Geoff Garen. + + https://bugs.webkit.org/show_bug.cgi?id=23715 + + Simplify MacroAssembler interface, by combining comparison methods. + Seprate operations are combined as follows: + jz32/jnz32/jzPtr/jnzPtr -> branchTest32/branchTestPtr, + j*(Add|Mul|Sub)32/j*(Add|Mul|Sub)Ptr -> branch(Add|Mul|Sub)32/branch(Add|Mul|Sub)Ptr + j*32/j*Ptr (all other two op combparisons) -> branch32/brnachPtr + set*32 -> set32 + + Also, represent the Scale of BaseIndex addresses as a plain enum (0,1,2,3), + instead of as multiplicands (1,2,4,8). + + This patch singificantly reduces replication of code, and increases functionality supported + by the MacroAssembler. No performance impact. + + * assembler/MacroAssembler.h: + (JSC::MacroAssembler::): + (JSC::MacroAssembler::branchPtr): + (JSC::MacroAssembler::branchPtrWithPatch): + (JSC::MacroAssembler::branch32): + (JSC::MacroAssembler::branch16): + (JSC::MacroAssembler::branchTestPtr): + (JSC::MacroAssembler::branchTest32): + (JSC::MacroAssembler::branchAddPtr): + (JSC::MacroAssembler::branchAdd32): + (JSC::MacroAssembler::branchMul32): + (JSC::MacroAssembler::branchSubPtr): + (JSC::MacroAssembler::branchSub32): + (JSC::MacroAssembler::set32): + (JSC::MacroAssembler::setTest32): + * assembler/X86Assembler.h: + (JSC::X86Assembler::): + (JSC::X86Assembler::jccRel32): + (JSC::X86Assembler::setccOpcode): + (JSC::X86Assembler::cmpq_mr): + (JSC::X86Assembler::setcc_r): + (JSC::X86Assembler::sete_r): + (JSC::X86Assembler::setne_r): + (JSC::X86Assembler::jne): + (JSC::X86Assembler::je): + (JSC::X86Assembler::jl): + (JSC::X86Assembler::jb): + (JSC::X86Assembler::jle): + (JSC::X86Assembler::jbe): + (JSC::X86Assembler::jge): + (JSC::X86Assembler::jg): + (JSC::X86Assembler::ja): + (JSC::X86Assembler::jae): + (JSC::X86Assembler::jo): + (JSC::X86Assembler::jp): + (JSC::X86Assembler::js): + (JSC::X86Assembler::jcc): + (JSC::X86Assembler::X86InstructionFormatter::putModRmSib): + * jit/JIT.cpp: + (JSC::JIT::compileOpStrictEq): + (JSC::JIT::emitSlowScriptCheck): + (JSC::JIT::privateCompileMainPass): + (JSC::JIT::privateCompileSlowCases): + (JSC::JIT::privateCompile): + (JSC::JIT::privateCompileCTIMachineTrampolines): + * jit/JITArithmetic.cpp: + (JSC::JIT::compileFastArith_op_lshift): + (JSC::JIT::compileFastArith_op_mod): + (JSC::JIT::compileFastArith_op_post_inc): + (JSC::JIT::compileFastArith_op_post_dec): + (JSC::JIT::compileFastArith_op_pre_inc): + (JSC::JIT::compileFastArith_op_pre_dec): + (JSC::JIT::compileBinaryArithOp): + (JSC::JIT::compileFastArith_op_add): + (JSC::JIT::compileFastArith_op_mul): + * jit/JITCall.cpp: + (JSC::JIT::compileOpCall): + (JSC::JIT::compileOpCallSlowCase): + * jit/JITInlineMethods.h: + (JSC::JIT::checkStructure): + (JSC::JIT::emitJumpIfJSCell): + (JSC::JIT::emitJumpIfNotJSCell): + (JSC::JIT::emitJumpIfImmediateNumber): + (JSC::JIT::emitJumpIfNotImmediateNumber): + (JSC::JIT::emitJumpIfImmediateInteger): + (JSC::JIT::emitJumpIfNotImmediateInteger): + (JSC::JIT::emitFastArithDeTagImmediateJumpIfZero): + * jit/JITPropertyAccess.cpp: + (JSC::JIT::compileGetByIdHotPath): + (JSC::JIT::compilePutByIdHotPath): + (JSC::JIT::privateCompilePutByIdTransition): + (JSC::JIT::privateCompilePatchGetArrayLength): + (JSC::JIT::privateCompileGetByIdProto): + (JSC::JIT::privateCompileGetByIdProtoList): + (JSC::JIT::privateCompileGetByIdChainList): + (JSC::JIT::privateCompileGetByIdChain): + * runtime/RegExp.cpp: + (JSC::RegExp::match): + * wrec/WRECGenerator.cpp: + (JSC::WREC::Generator::generateEnter): + (JSC::WREC::Generator::generateIncrementIndex): + (JSC::WREC::Generator::generateLoadCharacter): + (JSC::WREC::Generator::generateJumpIfNotEndOfInput): + (JSC::WREC::Generator::generateBackreferenceQuantifier): + (JSC::WREC::Generator::generateNonGreedyQuantifier): + (JSC::WREC::Generator::generateGreedyQuantifier): + (JSC::WREC::Generator::generatePatternCharacterPair): + (JSC::WREC::Generator::generatePatternCharacter): + (JSC::WREC::Generator::generateCharacterClassInvertedRange): + (JSC::WREC::Generator::generateCharacterClassInverted): + (JSC::WREC::Generator::generateAssertionBOL): + (JSC::WREC::Generator::generateAssertionEOL): + (JSC::WREC::Generator::generateAssertionWordBoundary): + (JSC::WREC::Generator::generateBackreference): + +2009-02-03 David Hyatt + + Fix a bug in Vector's shrinkCapacity method. It did not properly copy elements into the inline buffer + when shrinking down from a size that was greater than the inline capacity. + + Reviewed by Maciej + + * wtf/Vector.h: + (WTF::VectorBuffer::VectorBuffer): + (WTF::VectorBuffer::allocateBuffer): + +2009-02-03 Simon Hausmann + + Reviewed by Tor Arne Vestbø. + + Added accessor for JSByteArray storage. + + * runtime/JSByteArray.h: + (JSC::JSByteArray::storage): + +2009-02-03 Dmitry Titov + + Reviewed by Alexey Proskuryakov. + + https://bugs.webkit.org/show_bug.cgi?id=23560 + Implement SharedTimer on WorkerRunLoop + + * JavaScriptCore.exp: + Forgot to expose ThreadCondition::timedWait() in one of previous patches. + +2009-02-02 Oliver Hunt + + Reviewed by Gavin Barraclough. + + REGRESSION: Regular Expressions and character classes, shorthands and ranges + + + In certain circumstances when WREC::Generator::generateCharacterClassInvertedRange invokes + itself recursively, it will incorrectly emit (and thus consume) the next single character + match in the current character class. As WREC uses a binary search this out of sequence + codegen could result in a character match being missed and so cause the regex to produce + incorrect results. + + * wrec/WRECGenerator.cpp: + (JSC::WREC::Generator::generateCharacterClassInvertedRange): + +2009-02-02 Darin Adler + + Reviewed by Dave Hyatt. + + Bug 23676: Speed up uses of reserveCapacity on new vectors by adding a new reserveInitialCapacity + https://bugs.webkit.org/show_bug.cgi?id=23676 + + * API/JSObjectRef.cpp: + (JSObjectCopyPropertyNames): Use reserveInitialCapacity. + * parser/Lexer.cpp: + (JSC::Lexer::Lexer): Ditto. + (JSC::Lexer::clear): Ditto. + + * wtf/Vector.h: Added reserveInitialCapacity, a more efficient version of + reserveCapacity for use when the vector is brand new (still size 0 with no + capacity other than the inline capacity). + +2009-01-30 Mark Rowe + + Rubber-stamped by Oliver Hunt. + + Enable the JIT on Mac OS X x86_64 as it passes all tests. + + * wtf/Platform.h: + +2009-01-30 Oliver Hunt + + Reviewed by Mark Rowe and Sam Weinig. + + Finally fix load() to propagate exceptions correctly. + + * jsc.cpp: + (functionLoad): + +2009-01-30 David Levin + + Reviewed by Darin Adler. + + https://bugs.webkit.org/show_bug.cgi?id=23618 + Templated worker tasks should be more error proof to use. + Fix Chromium build. + + * wtf/TypeTraits.h: + (WTF::IsConvertibleToInteger::IsConvertibleToDouble): + Avoid "possible loss of data" warning when using Microsoft's C++ compiler + by avoiding an implicit conversion of int types to doubles. + +2009-01-30 Laszlo Gombos + + Reviewed by Simon Hausmann. + + Bug 23580: GNU mode RVCT compilation support + + + * pcre/pcre_exec.cpp: Use COMPILER(GCC) instead of __GNUC__. + * wtf/FastMalloc.cpp: Ditto. + (WTF::TCMallocStats::): + * wtf/Platform.h: Don't define COMPILER(GCC) with RVCT --gnu. + +2009-01-30 David Levin + + Reviewed by Alexey Proskuryakov. + + Bug 23618: Templated worker tasks should be more error proof to use + + + Add the type traits needed for the generic worker tasks + and compile asserts for them. + + Add a summary header to the TypeTraits.h file to explain what is in there. + + Add a note to explain IsPod's deficiencies. + + * wtf/TypeTraits.h: + +2009-01-30 David Levin + + Reviewed by Alexey Proskuryakov. + + Bug 23616: Various "template helpers" should be consolidated from isolated files in JavaScriptCore. + + + * wtf/TypeTraits.h: Moved RemovePointer, IsPod, IsInteger to this file. + + * wtf/OwnPtr.h: Use RemovePointer from TypeTraits.h. + * wtf/RetainPtr.h: Ditto. + + * wtf/HashTraits.h: Use IsInteger from TypeTraits.h. + + * wtf/VectorTraits.h: Use IsPod from TypeTraits.h. + + * GNUmakefile.am: + * JavaScriptCore.vcproj/WTF/WTF.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + Added TypeTraits.h. + +2009-01-29 Stephanie Lewis + + RS by Oliver Hunt. + + Update the order files. + + * JavaScriptCore.order: + +2009-01-29 Cameron Zwarich + + Reviewed by Oliver Hunt. + + Bug 23551: Crash on page load with profiler enabled and running + + + + Interpreter::execute(FunctionBodyNode*, ...) calls Profiler::didExecute() + with a stale CallFrame. If some part of the scope chain has already been + freed, Profiler::didExecute() will crash when attempting to get the lexical + global object. The fix is to make the didExecute() call use the caller's + CallFrame, not the one made for the function call. In this case, the + willExecute() call should also be changed to match. + + Since this occurs in the actual inspector JS, it is difficult to reduce. + I couldn't make a layout test. + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::execute): + +2009-01-28 Sam Weinig + + Reviewed by Gavin Barraclough. + + Fix for + Hang occurs when closing Installer window (iTunes, Aperture) + + * JavaScriptCore.exp: Export JSGlobalData::sharedInstance. + +2009-01-28 Sam Weinig + + Reviewed by Geoff Garen. + + Initial patch by Mark Rowe. + + + REGRESSION (r36006): "out of memory" alert running dromaeo on Windows + + Report the cost of the ArrayStorage vector more accurately/often. + + * runtime/JSArray.cpp: + (JSC::JSArray::JSArray): Report the extra cost even for a filled array + because JSString using the single character optimization and immediates + wont increase the cost themselves. + (JSC::JSArray::putSlowCase): Update the cost when increasing the size of + the array. + (JSC::JSArray::increaseVectorLength): Ditto. + +2009-01-28 Sam Weinig + + Reviewed by Geoff Garen. + + Fix for + REGRESSION (Safari 3-4): Local variable not accessible from Dashcode console or variables view + + Iterating the properties of activation objects accessed through the WebKit debugging + APIs was broken by forced conversion of JSActivation to the global object. To fix this, + we use a proxy activation object that acts more like a normal JSObject. + + * debugger/DebuggerActivation.cpp: Added. + (JSC::DebuggerActivation::DebuggerActivation): + (JSC::DebuggerActivation::mark): + (JSC::DebuggerActivation::className): + (JSC::DebuggerActivation::getOwnPropertySlot): + (JSC::DebuggerActivation::put): + (JSC::DebuggerActivation::putWithAttributes): + (JSC::DebuggerActivation::deleteProperty): + (JSC::DebuggerActivation::getPropertyNames): + (JSC::DebuggerActivation::getPropertyAttributes): + (JSC::DebuggerActivation::defineGetter): + (JSC::DebuggerActivation::defineSetter): + (JSC::DebuggerActivation::lookupGetter): + (JSC::DebuggerActivation::lookupSetter): + * debugger/DebuggerActivation.h: Added. + Proxy JSActivation object for Debugging. + + * runtime/JSActivation.h: + (JSC::JSActivation::isActivationObject): Added. + * runtime/JSObject.h: + (JSC::JSObject::isActivationObject): Added. + +2009-01-28 David Kilzer + + Bug 23490: Remove initialRefCount argument from RefCounted class + + + + Reviewed by Darin Adler. + + RefCountedBase now always starts with a ref count of 1, so there + is no need to pass the initialRefCount into the class anymore. + + * wtf/ByteArray.h: + (WTF::ByteArray::ByteArray): Removed call to RefCounted(1). + * wtf/RefCounted.h: + (WTF::RefCountedBase::RefCountedBase): Changed to start with a + ref count of 1. + (WTF::RefCounted::RefCounted): Removed initialRefCount argument + and removed call to RefCounted(1). + +2009-01-26 Adele Peterson + + Build fix. + + * debugger/Debugger.cpp: + +2009-01-26 Gavin Barraclough + + Reviewed by Darin Adler. + + Fixes for eq null & neq null, on 64-bit JIT. + https://bugs.webkit.org/show_bug.cgi?id=23559 + + This patch degrades 64-bit JIT performance on some benchmarks, + due to the whole not-being-incorrect thing. + + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + +2009-01-26 Cameron Zwarich + + Reviewed by Gavin Barraclough. + + Bug 23552: Dashcode evaluator no longer works after making ExecStates actual call frames + + + + * JavaScriptCore.exp: + * debugger/Debugger.cpp: + (JSC::evaluateInGlobalCallFrame): Added so that WebScriptCallFrame can + evaluate JS starting from a global call frame. + * debugger/Debugger.h: + +2009-01-25 Mark Rowe + + Rubber-stamped by Dan Bernstein. + + Improve the consistency of settings in our .xcconfig files. + + * Configurations/Base.xcconfig: Enable GCC_OBJC_CALL_CXX_CDTORS to match other projects. + +2009-01-25 Darin Adler + + Reviewed by Mark Rowe. + + Bug 23352: Turn on more compiler warnings in the Mac build + https://bugs.webkit.org/show_bug.cgi?id=23352 + + Turn on the following warnings: + + -Wcast-qual + -Wextra-tokens + -Wformat=2 + -Winit-self + -Wmissing-noreturn + -Wpacked + -Wrendundant-decls + + * Configurations/Base.xcconfig: Added the new warnings. Switched to -Wextra instead of + -W for clarity since we don't have to support the older versions of gcc that require the + old -W syntax. Since we now use -Wformat=2, removed -Wformat-security. Also removed + -Wno-format-y2k since we can have that one on now. + +2009-01-25 Judit Jasz + + Reviewed by Darin Adler. + + Compilation problem fixing + http://bugs.webkit.org/show_bug.cgi?id=23497 + + * jit/JITCall.cpp: + (JSC::JIT::compileOpCall): Use JSValuePtr::encode. + +2009-01-25 Darin Adler + + Reviewed by Sam Weinig. + + Bug 23352: Turn on more compiler warnings in the Mac build + https://bugs.webkit.org/show_bug.cgi?id=23352 + + Fourth patch: Deal with the last few stray warnings. + + * parser/Parser.cpp: Only declare jscyyparse if it's not already declared. + This makes both separate compilation and all-in-one compilation work with the + -Wredundant-decls warning. + +2009-01-25 Darin Adler + + Reviewed by Sam Weinig. + + Bug 23352: Turn on more compiler warnings in the Mac build + https://bugs.webkit.org/show_bug.cgi?id=23352 + + Third patch: Use the noreturn attribute on functions that don't + return to prepare for the use of the -Wmissing-noreturn warning. + + * jit/JITCall.cpp: + (JSC::unreachable): Added NO_RETURN. + * jsc.cpp: + (functionQuit): Ditto. + (printUsageStatement): Ditto. + * wtf/AlwaysInline.h: Added definition of NO_RETURN. + +2009-01-24 Oliver Hunt + + Reviewed by Maciej Stachowiak. + + Force inlining of Lexer::matchPunctuator + + 2.2% win when parsing jQuery, Mootools, Prototype, etc + + * parser/Lexer.h: + +2009-01-23 Gavin Barraclough + + Reviewed by Geoff Garen. + + Fix for + Ensure that callbacks out from the JSC interface are only allowed + to return in reverse-chronological order to that in which they were + made. If we allow earlier callbacks to return first, then this may + result in setions of the RegisterFile in use by another thread + being trampled. + + See uber-comment in JSLock.h for details. + + * runtime/JSLock.cpp: + (JSC::JSLock::DropAllLocks::DropAllLocks): + (JSC::JSLock::DropAllLocks::~DropAllLocks): + +2009-01-23 Darin Adler + + Try to fix WX build. + + * runtime/JSGlobalObjectFunctions.h: Include + for the definition of UChar. + +2009-01-23 Anders Carlsson + + * Configurations/Base.xcconfig: + GCC 4.0 build fix. + + * runtime/JSNumberCell.h: + 64-bit build fix. + +2009-01-23 Anders Carlsson + + Reviewed by Sam Weinig. + + Turn on -Wmissing-prototypes and fix the warnings. + + * API/JSClassRef.cpp: + (clearReferenceToPrototype): + * Configurations/Base.xcconfig: + * runtime/Collector.cpp: + (JSC::getPlatformThreadRegisters): + * runtime/ExceptionHelpers.cpp: + (JSC::createError): + * runtime/JSGlobalObjectFunctions.h: + * runtime/JSNumberCell.h: + * runtime/UString.cpp: + (JSC::initializeStaticBaseString): + (JSC::createRep): + * wtf/FastMalloc.cpp: + * wtf/Threading.cpp: + +2009-01-22 Mark Rowe + + Rubber-stamped by Anders Carlsson. + + Disable GCC_WARN_ABOUT_MISSING_PROTOTYPES temporarily. + + Current versions of Xcode only respect it for C and Objective-C files, + and our code doesn't currently compile if it is applied to C++ and + Objective-C++ files. + + * Configurations/Base.xcconfig: + +2009-01-22 Steve Falkenburg + + https://bugs.webkit.org/show_bug.cgi?id=23489 + + Return currentTime() in correct units for the two early return cases. + + Reviewed by Mark Rowe. + + * wtf/CurrentTime.cpp: + (WTF::currentTime): + +2009-01-22 Sam Weinig + + Reviewed by Mark Rowe. + + Fix for + FastMalloc allocating an extra 4MB of meta-data on 64-bit + + Rely on the fact that on all known x86-64 platforms only use 48 bits of + address space to shrink the initial size of the PageMap from ~4MB to 120K. + For 64-bit we still use a 3-level radix tree, but now each level is only 12 + bits wide. + + No performance change. + + * wtf/FastMalloc.cpp: + (WTF::MapSelector): Add specialization for 64 bit that takes into account the + 16 bits of unused address space on x86-64. + +2009-01-22 Beth Dakin + + Reviewed by Sam Weinig. + + Fix for https://bugs.webkit.org/show_bug.cgi?id=23461 LayoutTests/ + fast/js/numeric-conversion.html is broken, and corresponding + + + The basic problem here is that parseInt(Infinity) should be NaN, + but we were returning 0. NaN matches Safari 3.2.1 and Firefox. + + * runtime/JSGlobalObjectFunctions.cpp: + (JSC::globalFuncParseInt): + 2009-01-22 Oliver Hunt - Reviewed by Geoff Garen. + Reviewed by Geoff Garen. + + (r39682-r39736) JSFunFuzz: crash on "(function(){({ x2: x }), })()" + + + Automatic semicolon insertion was resulting in this being accepted in the initial + nodeless parsing, but subsequent reparsing for code generation would fail, leading + to a crash. The solution is to ensure that reparsing a function performs parsing + in the same state as the initial parse. We do this by modifying the saved source + ranges to include rather than exclude the opening and closing braces. + + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::reparseForExceptionInfoIfNecessary): add an assertion for successful recompile + * parser/Lexer.h: + (JSC::Lexer::sourceCode): include rather than exclude braces. + * parser/Nodes.h: + (JSC::FunctionBodyNode::toSourceString): No need to append braces anymore. + +2009-01-22 Dmitry Titov + + Reviewed by Alexey Proskuryakov. + + https://bugs.webkit.org/show_bug.cgi?id=23373 + + Implement ThreadCondition::timedWait(). + Since we borrow the code for condition variables from other sources, + I did the same for timedWait(). See comments in ThreadingWin.cpp for + rationale and more info. + + * wtf/CONTRIBUTORS.pthreads-win32: + Added. A list of Pthreads-win32 contributors mentioned in their license. The license itself + is included into wtf/ThreadingWin32.cpp. + + * wtf/Threading.h: + * wtf/ThreadingWin.cpp: + Additional info and Pthreads-win32 license at the beginning. + (WTF::PlatformCondition::timedWait): new method, derived from Pthreads-win32. + (WTF::PlatformCondition::signal): same + (WTF::ThreadCondition::ThreadCondition): + (WTF::ThreadCondition::~ThreadCondition): + (WTF::ThreadCondition::wait): this now calls PlatformCondition::timedWait. + (WTF::ThreadCondition::timedWait): same + (WTF::ThreadCondition::signal): this now calls PlatformCondition::signal. + (WTF::ThreadCondition::broadcast): same + +2009-01-21 Gavin Barraclough + + Reviewed by Oliver Hunt. + + Fix for https://bugs.webkit.org/show_bug.cgi?id=23469. + + We need to check all numbers in integer switches, not just those + represented as integer JSImmediates. + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): + (JSC::Interpreter::cti_op_switch_imm): + +2009-01-21 Gavin Barraclough + + Reviewed by Geoff Garen. + + Fix for https://bugs.webkit.org/show_bug.cgi?id=23468. + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): + +2009-01-21 Alexey Proskuryakov + + Suggested by Oliver Hunt. Reviewed by Oliver Hunt. + + https://bugs.webkit.org/show_bug.cgi?id=23456 + Function argument names leak + + * parser/Nodes.cpp: (JSC::FunctionBodyNode::~FunctionBodyNode): Destruct parameter names. + +2009-01-20 Oliver Hunt + + Reviewed by NOBODY (Build fix). + + Windows build fix + + * JavaScriptCore.vcproj/WTF/WTF.vcproj: + +2009-01-20 Gavin Barraclough + + Reviewed by Mark Rowe. + + Structure property table deleted offset maps are being leaked. + Probably shouldn't be doing that. + + https://bugs.webkit.org/show_bug.cgi?id=23442 + + * runtime/Structure.cpp: + (JSC::Structure::~Structure): + +2009-01-20 Oliver Hunt + + Reviewed by NOBODY (build fix). + + Attempt to fix gtk build + + * GNUmakefile.am: + +2009-01-20 Darin Adler + + * runtime/StringPrototype.cpp: + (JSC::substituteBackreferences): Add back the initialization to fix the build. + +2009-01-20 Darin Adler + + Reviewed by Mark Rowe. + + Bug 23352: Turn on more compiler warnings in the Mac build + https://bugs.webkit.org/show_bug.cgi?id=23352 + + First patch: Fix some simple cases of various warnings. + + * pcre/pcre_compile.cpp: + (jsRegExpCompile): Use const_cast to change const-ness. + + * runtime/StringPrototype.cpp: + (JSC::substituteBackreferences): Remove unneeded initialization and + use UChar instead of unsigned short for UTF-16 values. + + * wtf/dtoa.cpp: + (WTF::strtod): Use const_cast to change const-ness. + +2009-01-20 Oliver Hunt + + Reviewed by NOBODY (build fix). + + Whoops, remove runtime/ByteArray references from .pri and .scons builds, update .bkl + + * JavaScriptCore.pri: + * JavaScriptCore.scons: + * JavaScriptCoreSources.bkl: + +2009-01-20 Oliver Hunt + + RS=Dan Bernstein. + + Move runtime/ByteArray to wtf/ByteArray + + * GNUmakefile.am: + * JavaScriptCore.exp: + * JavaScriptCore.pri: + * JavaScriptCore.scons: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.vcproj/WTF/WTF.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * runtime/JSByteArray.cpp: + * runtime/JSByteArray.h: + * wtf/ByteArray.cpp: Renamed from JavaScriptCore/runtime/ByteArray.cpp. + (WTF::ByteArray::create): + * wtf/ByteArray.h: Renamed from JavaScriptCore/runtime/ByteArray.h. + (WTF::ByteArray::length): + (WTF::ByteArray::set): + (WTF::ByteArray::get): + (WTF::ByteArray::data): + (WTF::ByteArray::deref): + (WTF::ByteArray::ByteArray): + +2009-01-19 Sam Weinig + + Rubber-stamped by Gavin Barraclough. + + Remove temporary operator-> from JSValuePtr. + + * API/JSCallbackFunction.cpp: + (JSC::JSCallbackFunction::call): + * API/JSCallbackObjectFunctions.h: + (JSC::::call): + (JSC::::toNumber): + (JSC::::toString): + * API/JSObjectRef.cpp: + (JSObjectSetPrototype): + * API/JSValueRef.cpp: + (JSValueGetType): + (JSValueIsUndefined): + (JSValueIsNull): + (JSValueIsBoolean): + (JSValueIsNumber): + (JSValueIsString): + (JSValueIsObject): + (JSValueIsObjectOfClass): + (JSValueToBoolean): + (JSValueToNumber): + (JSValueToStringCopy): + (JSValueToObject): + * bytecode/CodeBlock.cpp: + (JSC::valueToSourceString): + (JSC::CodeBlock::mark): + * bytecode/CodeBlock.h: + (JSC::CodeBlock::isKnownNotImmediate): + * bytecompiler/BytecodeGenerator.cpp: + (JSC::BytecodeGenerator::emitEqualityOp): + (JSC::keyForImmediateSwitch): + * interpreter/Interpreter.cpp: + (JSC::jsLess): + (JSC::jsLessEq): + (JSC::jsAddSlowCase): + (JSC::jsAdd): + (JSC::jsTypeStringForValue): + (JSC::jsIsObjectType): + (JSC::jsIsFunctionType): + (JSC::isNotObject): + (JSC::Interpreter::callEval): + (JSC::Interpreter::throwException): + (JSC::cachePrototypeChain): + (JSC::Interpreter::tryCachePutByID): + (JSC::countPrototypeChainEntriesAndCheckForProxies): + (JSC::Interpreter::tryCacheGetByID): + (JSC::Interpreter::privateExecute): + (JSC::Interpreter::tryCTICachePutByID): + (JSC::Interpreter::tryCTICacheGetByID): + (JSC::Interpreter::cti_op_convert_this): + (JSC::Interpreter::cti_op_add): + (JSC::Interpreter::cti_op_pre_inc): + (JSC::Interpreter::cti_op_put_by_id_generic): + (JSC::Interpreter::cti_op_get_by_id_generic): + (JSC::Interpreter::cti_op_put_by_id): + (JSC::Interpreter::cti_op_put_by_id_second): + (JSC::Interpreter::cti_op_put_by_id_fail): + (JSC::Interpreter::cti_op_get_by_id): + (JSC::Interpreter::cti_op_get_by_id_second): + (JSC::Interpreter::cti_op_get_by_id_self_fail): + (JSC::Interpreter::cti_op_get_by_id_proto_list): + (JSC::Interpreter::cti_op_get_by_id_proto_list_full): + (JSC::Interpreter::cti_op_get_by_id_proto_fail): + (JSC::Interpreter::cti_op_get_by_id_array_fail): + (JSC::Interpreter::cti_op_get_by_id_string_fail): + (JSC::Interpreter::cti_op_instanceof): + (JSC::Interpreter::cti_op_del_by_id): + (JSC::Interpreter::cti_op_mul): + (JSC::Interpreter::cti_op_call_JSFunction): + (JSC::Interpreter::cti_op_call_NotJSFunction): + (JSC::Interpreter::cti_op_construct_JSConstruct): + (JSC::Interpreter::cti_op_construct_NotJSConstruct): + (JSC::Interpreter::cti_op_get_by_val): + (JSC::Interpreter::cti_op_get_by_val_byte_array): + (JSC::Interpreter::cti_op_sub): + (JSC::Interpreter::cti_op_put_by_val): + (JSC::Interpreter::cti_op_put_by_val_array): + (JSC::Interpreter::cti_op_put_by_val_byte_array): + (JSC::Interpreter::cti_op_loop_if_true): + (JSC::Interpreter::cti_op_negate): + (JSC::Interpreter::cti_op_div): + (JSC::Interpreter::cti_op_pre_dec): + (JSC::Interpreter::cti_op_not): + (JSC::Interpreter::cti_op_jtrue): + (JSC::Interpreter::cti_op_post_inc): + (JSC::Interpreter::cti_op_lshift): + (JSC::Interpreter::cti_op_bitand): + (JSC::Interpreter::cti_op_rshift): + (JSC::Interpreter::cti_op_bitnot): + (JSC::Interpreter::cti_op_mod): + (JSC::Interpreter::cti_op_post_dec): + (JSC::Interpreter::cti_op_urshift): + (JSC::Interpreter::cti_op_bitxor): + (JSC::Interpreter::cti_op_bitor): + (JSC::Interpreter::cti_op_push_scope): + (JSC::Interpreter::cti_op_is_undefined): + (JSC::Interpreter::cti_op_is_boolean): + (JSC::Interpreter::cti_op_is_number): + (JSC::Interpreter::cti_op_to_jsnumber): + (JSC::Interpreter::cti_op_in): + (JSC::Interpreter::cti_op_put_by_index): + (JSC::Interpreter::cti_op_switch_imm): + (JSC::Interpreter::cti_op_switch_char): + (JSC::Interpreter::cti_op_switch_string): + (JSC::Interpreter::cti_op_del_by_val): + (JSC::Interpreter::cti_op_put_getter): + (JSC::Interpreter::cti_op_put_setter): + (JSC::Interpreter::cti_op_new_error): + * interpreter/Interpreter.h: + (JSC::Interpreter::isJSArray): + (JSC::Interpreter::isJSString): + (JSC::Interpreter::isJSByteArray): + * interpreter/Register.h: + (JSC::Register::marked): + (JSC::Register::mark): + * jit/JITInlineMethods.h: + (JSC::JIT::getConstantOperandImmediateInt): + (JSC::JIT::isOperandConstantImmediateInt): + * jsc.cpp: + (functionPrint): + (functionDebug): + (functionRun): + (functionLoad): + (runWithScripts): + (runInteractive): + * parser/Nodes.cpp: + (JSC::processClauseList): + * profiler/ProfileGenerator.cpp: + (JSC::ProfileGenerator::addParentForConsoleStart): + * profiler/Profiler.cpp: + (JSC::Profiler::createCallIdentifier): + * runtime/ArrayConstructor.cpp: + (JSC::constructArrayWithSizeQuirk): + * runtime/ArrayPrototype.cpp: + (JSC::arrayProtoFuncToString): + (JSC::arrayProtoFuncToLocaleString): + (JSC::arrayProtoFuncJoin): + (JSC::arrayProtoFuncConcat): + (JSC::arrayProtoFuncPop): + (JSC::arrayProtoFuncPush): + (JSC::arrayProtoFuncReverse): + (JSC::arrayProtoFuncShift): + (JSC::arrayProtoFuncSlice): + (JSC::arrayProtoFuncSort): + (JSC::arrayProtoFuncSplice): + (JSC::arrayProtoFuncUnShift): + (JSC::arrayProtoFuncFilter): + (JSC::arrayProtoFuncMap): + (JSC::arrayProtoFuncEvery): + (JSC::arrayProtoFuncForEach): + (JSC::arrayProtoFuncSome): + (JSC::arrayProtoFuncIndexOf): + (JSC::arrayProtoFuncLastIndexOf): + * runtime/BooleanConstructor.cpp: + (JSC::constructBoolean): + (JSC::callBooleanConstructor): + * runtime/BooleanPrototype.cpp: + (JSC::booleanProtoFuncToString): + (JSC::booleanProtoFuncValueOf): + * runtime/Collector.cpp: + (JSC::Heap::protect): + (JSC::Heap::unprotect): + (JSC::Heap::heap): + (JSC::Heap::collect): + (JSC::typeName): + * runtime/Completion.cpp: + (JSC::evaluate): + * runtime/DateConstructor.cpp: + (JSC::constructDate): + (JSC::dateParse): + (JSC::dateUTC): + * runtime/DateInstance.h: + (JSC::DateInstance::internalNumber): + * runtime/DatePrototype.cpp: + (JSC::formatLocaleDate): + (JSC::fillStructuresUsingTimeArgs): + (JSC::fillStructuresUsingDateArgs): + (JSC::dateProtoFuncToString): + (JSC::dateProtoFuncToUTCString): + (JSC::dateProtoFuncToDateString): + (JSC::dateProtoFuncToTimeString): + (JSC::dateProtoFuncToLocaleString): + (JSC::dateProtoFuncToLocaleDateString): + (JSC::dateProtoFuncToLocaleTimeString): + (JSC::dateProtoFuncGetTime): + (JSC::dateProtoFuncGetFullYear): + (JSC::dateProtoFuncGetUTCFullYear): + (JSC::dateProtoFuncToGMTString): + (JSC::dateProtoFuncGetMonth): + (JSC::dateProtoFuncGetUTCMonth): + (JSC::dateProtoFuncGetDate): + (JSC::dateProtoFuncGetUTCDate): + (JSC::dateProtoFuncGetDay): + (JSC::dateProtoFuncGetUTCDay): + (JSC::dateProtoFuncGetHours): + (JSC::dateProtoFuncGetUTCHours): + (JSC::dateProtoFuncGetMinutes): + (JSC::dateProtoFuncGetUTCMinutes): + (JSC::dateProtoFuncGetSeconds): + (JSC::dateProtoFuncGetUTCSeconds): + (JSC::dateProtoFuncGetMilliSeconds): + (JSC::dateProtoFuncGetUTCMilliseconds): + (JSC::dateProtoFuncGetTimezoneOffset): + (JSC::dateProtoFuncSetTime): + (JSC::setNewValueFromTimeArgs): + (JSC::setNewValueFromDateArgs): + (JSC::dateProtoFuncSetYear): + (JSC::dateProtoFuncGetYear): + * runtime/ErrorConstructor.cpp: + (JSC::constructError): + * runtime/ErrorPrototype.cpp: + (JSC::errorProtoFuncToString): + * runtime/ExceptionHelpers.cpp: + (JSC::createError): + (JSC::createErrorMessage): + * runtime/FunctionConstructor.cpp: + (JSC::constructFunction): + * runtime/FunctionPrototype.cpp: + (JSC::functionProtoFuncToString): + (JSC::functionProtoFuncApply): + (JSC::functionProtoFuncCall): + * runtime/GetterSetter.cpp: + (JSC::GetterSetter::toObject): + * runtime/JSActivation.cpp: + (JSC::JSActivation::getOwnPropertySlot): + * runtime/JSArray.cpp: + (JSC::JSArray::put): + (JSC::JSArray::mark): + (JSC::JSArray::sort): + (JSC::AVLTreeAbstractorForArrayCompare::compare_key_key): + (JSC::JSArray::compactForSorting): + * runtime/JSByteArray.h: + (JSC::JSByteArray::setIndex): + * runtime/JSCell.h: + (JSC::asCell): + * runtime/JSFunction.cpp: + (JSC::JSFunction::call): + (JSC::JSFunction::construct): + * runtime/JSGlobalObject.cpp: + (JSC::markIfNeeded): + (JSC::lastInPrototypeChain): + * runtime/JSGlobalObjectFunctions.cpp: + (JSC::encode): + (JSC::decode): + (JSC::globalFuncEval): + (JSC::globalFuncParseInt): + (JSC::globalFuncParseFloat): + (JSC::globalFuncIsNaN): + (JSC::globalFuncIsFinite): + (JSC::globalFuncEscape): + (JSC::globalFuncUnescape): + (JSC::globalFuncJSCPrint): + * runtime/JSImmediate.cpp: + (JSC::JSImmediate::toThisObject): + (JSC::JSImmediate::toObject): + (JSC::JSImmediate::prototype): + (JSC::JSImmediate::toString): + * runtime/JSImmediate.h: + * runtime/JSObject.cpp: + (JSC::JSObject::mark): + (JSC::JSObject::put): + (JSC::callDefaultValueFunction): + (JSC::JSObject::getPrimitiveNumber): + (JSC::JSObject::defineGetter): + (JSC::JSObject::defineSetter): + (JSC::JSObject::lookupGetter): + (JSC::JSObject::lookupSetter): + (JSC::JSObject::hasInstance): + (JSC::JSObject::toNumber): + (JSC::JSObject::toString): + * runtime/JSObject.h: + (JSC::JSObject::JSObject): + (JSC::JSObject::inlineGetOwnPropertySlot): + (JSC::JSObject::getOwnPropertySlotForWrite): + (JSC::JSObject::getPropertySlot): + (JSC::JSValuePtr::get): + * runtime/JSPropertyNameIterator.h: + (JSC::JSPropertyNameIterator::create): + * runtime/JSString.cpp: + (JSC::JSString::getOwnPropertySlot): + * runtime/JSValue.h: + * runtime/JSWrapperObject.cpp: + (JSC::JSWrapperObject::mark): + * runtime/JSWrapperObject.h: + (JSC::JSWrapperObject::setInternalValue): + * runtime/MathObject.cpp: + (JSC::mathProtoFuncAbs): + (JSC::mathProtoFuncACos): + (JSC::mathProtoFuncASin): + (JSC::mathProtoFuncATan): + (JSC::mathProtoFuncATan2): + (JSC::mathProtoFuncCeil): + (JSC::mathProtoFuncCos): + (JSC::mathProtoFuncExp): + (JSC::mathProtoFuncFloor): + (JSC::mathProtoFuncLog): + (JSC::mathProtoFuncMax): + (JSC::mathProtoFuncMin): + (JSC::mathProtoFuncPow): + (JSC::mathProtoFuncRound): + (JSC::mathProtoFuncSin): + (JSC::mathProtoFuncSqrt): + (JSC::mathProtoFuncTan): + * runtime/NativeErrorConstructor.cpp: + (JSC::NativeErrorConstructor::NativeErrorConstructor): + (JSC::NativeErrorConstructor::construct): + * runtime/NumberConstructor.cpp: + (JSC::constructWithNumberConstructor): + (JSC::callNumberConstructor): + * runtime/NumberPrototype.cpp: + (JSC::numberProtoFuncToString): + (JSC::numberProtoFuncToLocaleString): + (JSC::numberProtoFuncValueOf): + (JSC::numberProtoFuncToFixed): + (JSC::numberProtoFuncToExponential): + (JSC::numberProtoFuncToPrecision): + * runtime/ObjectConstructor.cpp: + (JSC::constructObject): + * runtime/ObjectPrototype.cpp: + (JSC::objectProtoFuncValueOf): + (JSC::objectProtoFuncHasOwnProperty): + (JSC::objectProtoFuncIsPrototypeOf): + (JSC::objectProtoFuncDefineGetter): + (JSC::objectProtoFuncDefineSetter): + (JSC::objectProtoFuncLookupGetter): + (JSC::objectProtoFuncLookupSetter): + (JSC::objectProtoFuncPropertyIsEnumerable): + (JSC::objectProtoFuncToLocaleString): + (JSC::objectProtoFuncToString): + * runtime/Operations.h: + (JSC::JSValuePtr::equalSlowCaseInline): + (JSC::JSValuePtr::strictEqual): + (JSC::JSValuePtr::strictEqualSlowCaseInline): + * runtime/Protect.h: + (JSC::gcProtect): + (JSC::gcUnprotect): + * runtime/RegExpConstructor.cpp: + (JSC::setRegExpConstructorInput): + (JSC::setRegExpConstructorMultiline): + (JSC::constructRegExp): + * runtime/RegExpObject.cpp: + (JSC::setRegExpObjectLastIndex): + (JSC::RegExpObject::match): + * runtime/RegExpPrototype.cpp: + (JSC::regExpProtoFuncTest): + (JSC::regExpProtoFuncExec): + (JSC::regExpProtoFuncCompile): + (JSC::regExpProtoFuncToString): + * runtime/StringConstructor.cpp: + (JSC::stringFromCharCodeSlowCase): + (JSC::stringFromCharCode): + (JSC::constructWithStringConstructor): + (JSC::callStringConstructor): + * runtime/StringPrototype.cpp: + (JSC::stringProtoFuncReplace): + (JSC::stringProtoFuncToString): + (JSC::stringProtoFuncCharAt): + (JSC::stringProtoFuncCharCodeAt): + (JSC::stringProtoFuncConcat): + (JSC::stringProtoFuncIndexOf): + (JSC::stringProtoFuncLastIndexOf): + (JSC::stringProtoFuncMatch): + (JSC::stringProtoFuncSearch): + (JSC::stringProtoFuncSlice): + (JSC::stringProtoFuncSplit): + (JSC::stringProtoFuncSubstr): + (JSC::stringProtoFuncSubstring): + (JSC::stringProtoFuncToLowerCase): + (JSC::stringProtoFuncToUpperCase): + (JSC::stringProtoFuncLocaleCompare): + (JSC::stringProtoFuncBig): + (JSC::stringProtoFuncSmall): + (JSC::stringProtoFuncBlink): + (JSC::stringProtoFuncBold): + (JSC::stringProtoFuncFixed): + (JSC::stringProtoFuncItalics): + (JSC::stringProtoFuncStrike): + (JSC::stringProtoFuncSub): + (JSC::stringProtoFuncSup): + (JSC::stringProtoFuncFontcolor): + (JSC::stringProtoFuncFontsize): + (JSC::stringProtoFuncAnchor): + (JSC::stringProtoFuncLink): + * runtime/Structure.cpp: + (JSC::Structure::Structure): + (JSC::Structure::getEnumerablePropertyNames): + (JSC::Structure::createCachedPrototypeChain): + * runtime/Structure.h: + (JSC::Structure::mark): + * runtime/StructureChain.cpp: + (JSC::StructureChain::StructureChain): + +2009-01-19 Darin Adler + + Reviewed by Sam Weinig. + + Bug 23409: REGRESSION: RegExp 'replace()' function improperly processes '$$' + + + + Test: fast/js/string-replace-3.html + + * runtime/StringPrototype.cpp: + (JSC::substituteBackreferences): Remove code that adds an extra $ -- not sure + how this ever worked. + +2009-01-16 Gavin Barraclough + + Reviewed by Oliver Hunt. + + On x86-64 jit, cache JSImmedate::TagMask & JSImmedate::TagTypeNumber in + registers, save reloading them every time they're used. + + Draws x86-64 jit performance close to that of i386 jit. + + * assembler/MacroAssembler.h: + (JSC::MacroAssembler::subPtr): + (JSC::MacroAssembler::jnzPtr): + (JSC::MacroAssembler::jzPtr): + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + * jit/JIT.h: + * jit/JITArithmetic.cpp: + (JSC::JIT::compileBinaryArithOpSlowCase): + * jit/JITInlineMethods.h: + (JSC::JIT::emitJumpIfJSCell): + (JSC::JIT::emitJumpIfNotJSCell): + (JSC::JIT::emitJumpIfImmediateNumber): + (JSC::JIT::emitJumpIfNotImmediateNumber): + (JSC::JIT::emitJumpIfImmediateInteger): + (JSC::JIT::emitJumpIfNotImmediateInteger): + (JSC::JIT::emitFastArithIntToImmNoCheck): + +2009-01-16 Gavin Barraclough + + Reviewed by Oliver Hunt. + + Add support to x86-64 JIT for inline double precision arithmetic ops. + +5/6% on x86-64, JIT enabled, sunspider. + + * assembler/MacroAssembler.h: + (JSC::MacroAssembler::addPtr): + * assembler/X86Assembler.h: + (JSC::X86Assembler::movq_rr): + * jit/JIT.h: + * jit/JITArithmetic.cpp: + (JSC::JIT::compileFastArith_op_pre_inc): + (JSC::JIT::compileBinaryArithOp): + (JSC::JIT::compileBinaryArithOpSlowCase): + (JSC::JIT::compileFastArith_op_add): + (JSC::JIT::compileFastArithSlow_op_add): + (JSC::JIT::compileFastArith_op_mul): + (JSC::JIT::compileFastArithSlow_op_mul): + (JSC::JIT::compileFastArith_op_sub): + (JSC::JIT::compileFastArithSlow_op_sub): + * parser/ResultType.h: + (JSC::ResultType::isReusable): + (JSC::ResultType::isInt32): + (JSC::ResultType::definitelyIsNumber): + (JSC::ResultType::mightBeNumber): + (JSC::ResultType::isNotNumber): + (JSC::ResultType::unknownType): + +2009-01-16 Gavin Barraclough + + Reviewed by Geoff Garen. + + Fixes for SamplingTool. + + https://bugs.webkit.org/show_bug.cgi?id=23390 + + * assembler/MacroAssembler.h: + (JSC::MacroAssembler::storePtr): + * bytecode/SamplingTool.cpp: + (JSC::SamplingTool::run): + (JSC::SamplingTool::dump): + * bytecode/SamplingTool.h: + (JSC::SamplingTool::encodeSample): + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + (JSC::JIT::privateCompile): + * jit/JIT.h: + (JSC::JIT::samplingToolTrackCodeBlock): + * jit/JITCall.cpp: + (JSC::JIT::compileOpCall): + (JSC::JIT::compileOpCallSlowCase): + * jit/JITInlineMethods.h: + (JSC::JIT::emitCTICall_internal): + +2009-01-16 Geoffrey Garen + + Reviewed by Darin Adler. + + Fixed REGRESSION: Latest WebKit nightlies + turn "c" into "" when stripping \\c_ character + + * wrec/WRECParser.cpp: + (JSC::WREC::Parser::consumeEscape): Mimic a Firefox quirk when parsing + control escapes inside character classes. + +2009-01-16 Adam Roben + + Windows build fix + + * wrec/WRECParser.cpp: + (JSC::WREC::Parser::parseParentheses): Removed unreachable code. + +2009-01-15 Geoffrey Garen + + Reviewed by Cameron Zwarich. + + Fixed REGRESSION (r39164): Discarding quantifier + on assertion gives incorrect result (23075) + + https://bugs.webkit.org/show_bug.cgi?id=23075 + + * pcre/pcre_compile.cpp: + (compileBranch): Throw away an assertion if it's followed by a quantifier + with a 0 minimum, to match SpiderMonkey, v8, and the ECMA spec. + + * wrec/WRECParser.cpp: + (JSC::WREC::Parser::parseParentheses): Fall back on PCRE for the rare + case of an assertion with a quantifier with a 0 minimum, since we + don't handle quantified subexpressions yet, and in this special case, + we can't just throw away the quantifier. + +2009-01-15 Gavin Barraclough + + Reviewed by Oliver Hunt. + + Add support in ResultType to track that the results of bitops + are always of type int32_t. + + * parser/Nodes.cpp: + (JSC::ReadModifyResolveNode::emitBytecode): + (JSC::ReadModifyDotNode::emitBytecode): + (JSC::ReadModifyBracketNode::emitBytecode): + * parser/Nodes.h: + (JSC::ExpressionNode::): + (JSC::BooleanNode::): + (JSC::NumberNode::): + (JSC::StringNode::): + (JSC::PrePostResolveNode::): + (JSC::TypeOfResolveNode::): + (JSC::TypeOfValueNode::): + (JSC::UnaryPlusNode::): + (JSC::NegateNode::): + (JSC::BitwiseNotNode::): + (JSC::LogicalNotNode::): + (JSC::MultNode::): + (JSC::DivNode::): + (JSC::ModNode::): + (JSC::SubNode::): + (JSC::LeftShiftNode::): + (JSC::RightShiftNode::): + (JSC::UnsignedRightShiftNode::): + (JSC::LessNode::): + (JSC::GreaterNode::): + (JSC::LessEqNode::): + (JSC::GreaterEqNode::): + (JSC::InstanceOfNode::): + (JSC::EqualNode::): + (JSC::NotEqualNode::): + (JSC::StrictEqualNode::): + (JSC::NotStrictEqualNode::): + (JSC::BitAndNode::): + (JSC::BitOrNode::): + (JSC::BitXOrNode::): + (JSC::LogicalOpNode::): + * parser/ResultType.h: + (JSC::ResultType::isInt32): + (JSC::ResultType::isNotNumber): + (JSC::ResultType::booleanType): + (JSC::ResultType::numberType): + (JSC::ResultType::numberTypeCanReuse): + (JSC::ResultType::numberTypeCanReuseIsInt32): + (JSC::ResultType::stringOrNumberTypeCanReuse): + (JSC::ResultType::stringType): + (JSC::ResultType::unknownType): + (JSC::ResultType::forAdd): + (JSC::ResultType::forBitOp): + (JSC::OperandTypes::OperandTypes): + +2009-01-15 Gavin Barraclough + + Reviewed by Oliver Hunt. + + Add support for integer addition, subtraction and multiplication + in JIT code on x86-64. + + * assembler/MacroAssembler.h: + (JSC::MacroAssembler::mul32): + (JSC::MacroAssembler::sub32): + (JSC::MacroAssembler::joMul32): + (JSC::MacroAssembler::joSub32): + * jit/JIT.cpp: + (JSC::JIT::privateCompileMainPass): + (JSC::JIT::privateCompileSlowCases): + * jit/JIT.h: + * jit/JITArithmetic.cpp: + (JSC::JIT::compileFastArith_op_add): + (JSC::JIT::compileFastArithSlow_op_add): + (JSC::JIT::compileFastArith_op_mul): + (JSC::JIT::compileFastArithSlow_op_mul): + (JSC::JIT::compileFastArith_op_sub): + (JSC::JIT::compileFastArithSlow_op_sub): + +2009-01-15 Gavin Barraclough + + Reviewed by Geoff Garen. + + On x86-64 allow JSImmediate to encode 64-bit double precision values. + This patch only affects builds that set USE(ALTERNATE_JSIMMEDIATE). + Updates the implementation of JSValuePtr:: and JSImmediate:: methods + that operate on neumeric values to be be aware of the new representation. + When this representation is in use, the class JSNumberCell is redundant + and is compiled out. + + The format of the new immediate representation is documented in JSImmediate.h. + + * JavaScriptCore.exp: + * assembler/MacroAssembler.h: + (JSC::MacroAssembler::subPtr): + * assembler/X86Assembler.h: + (JSC::X86Assembler::): + (JSC::X86Assembler::subq_rr): + (JSC::X86Assembler::movq_rr): + (JSC::X86Assembler::ucomisd_rr): + (JSC::X86Assembler::X86InstructionFormatter::twoByteOp64): + * interpreter/Interpreter.cpp: + (JSC::Interpreter::cti_op_stricteq): + (JSC::Interpreter::cti_op_nstricteq): + * jit/JIT.cpp: + (JSC::JIT::compileOpStrictEq): + (JSC::JIT::privateCompileMainPass): + (JSC::JIT::privateCompileSlowCases): + * jit/JIT.h: + * jit/JITArithmetic.cpp: + (JSC::JIT::compileFastArith_op_lshift): + (JSC::JIT::compileFastArith_op_rshift): + (JSC::JIT::compileFastArith_op_bitand): + (JSC::JIT::compileFastArith_op_mod): + (JSC::JIT::compileFastArith_op_add): + (JSC::JIT::compileFastArith_op_mul): + (JSC::JIT::compileFastArith_op_post_inc): + (JSC::JIT::compileFastArith_op_post_dec): + (JSC::JIT::compileFastArith_op_pre_inc): + (JSC::JIT::compileFastArith_op_pre_dec): + (JSC::JIT::putDoubleResultToJSNumberCellOrJSImmediate): + (JSC::JIT::compileBinaryArithOp): + * jit/JITInlineMethods.h: + (JSC::JIT::emitJumpIfBothJSCells): + (JSC::JIT::emitJumpIfEitherNumber): + (JSC::JIT::emitJumpIfNotEitherNumber): + (JSC::JIT::emitJumpIfImmediateIntegerNumber): + (JSC::JIT::emitJumpIfNotImmediateIntegerNumber): + (JSC::JIT::emitJumpIfNotImmediateIntegerNumbers): + (JSC::JIT::emitJumpSlowCaseIfNotImmediateIntegerNumber): + (JSC::JIT::emitJumpSlowCaseIfNotImmediateIntegerNumbers): + (JSC::JIT::emitFastArithDeTagImmediate): + (JSC::JIT::emitFastArithDeTagImmediateJumpIfZero): + (JSC::JIT::emitFastArithReTagImmediate): + (JSC::JIT::emitFastArithIntToImmNoCheck): + * runtime/JSCell.h: + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): + * runtime/JSImmediate.cpp: + (JSC::JSImmediate::toThisObject): + (JSC::JSImmediate::toObject): + (JSC::JSImmediate::toString): + * runtime/JSImmediate.h: + (JSC::wtf_reinterpret_cast): + (JSC::JSImmediate::isNumber): + (JSC::JSImmediate::isIntegerNumber): + (JSC::JSImmediate::isDoubleNumber): + (JSC::JSImmediate::isPositiveIntegerNumber): + (JSC::JSImmediate::areBothImmediateIntegerNumbers): + (JSC::JSImmediate::makeInt): + (JSC::JSImmediate::makeDouble): + (JSC::JSImmediate::doubleValue): + (JSC::doubleToBoolean): + (JSC::JSImmediate::toBoolean): + (JSC::JSImmediate::getTruncatedUInt32): + (JSC::JSImmediate::makeOutOfIntegerRange): + (JSC::JSImmediate::from): + (JSC::JSImmediate::getTruncatedInt32): + (JSC::JSImmediate::toDouble): + (JSC::JSImmediate::getUInt32): + (JSC::JSValuePtr::isInt32Fast): + (JSC::JSValuePtr::isUInt32Fast): + (JSC::JSValuePtr::areBothInt32Fast): + (JSC::JSFastMath::canDoFastBitwiseOperations): + (JSC::JSFastMath::xorImmediateNumbers): + (JSC::JSFastMath::canDoFastRshift): + (JSC::JSFastMath::canDoFastUrshift): + (JSC::JSFastMath::rightShiftImmediateNumbers): + (JSC::JSFastMath::canDoFastAdditiveOperations): + (JSC::JSFastMath::addImmediateNumbers): + (JSC::JSFastMath::subImmediateNumbers): + * runtime/JSNumberCell.cpp: + (JSC::jsNumberCell): + * runtime/JSNumberCell.h: + (JSC::createNumberStructure): + (JSC::isNumberCell): + (JSC::asNumberCell): + (JSC::jsNumber): + (JSC::JSValuePtr::isDoubleNumber): + (JSC::JSValuePtr::getDoubleNumber): + (JSC::JSValuePtr::isNumber): + (JSC::JSValuePtr::uncheckedGetNumber): + (JSC::jsNaN): + (JSC::JSValuePtr::getNumber): + (JSC::JSValuePtr::numberToInt32): + (JSC::JSValuePtr::numberToUInt32): + * runtime/JSValue.h: + * runtime/NumberConstructor.cpp: + (JSC::numberConstructorNegInfinity): + (JSC::numberConstructorPosInfinity): + (JSC::numberConstructorMaxValue): + (JSC::numberConstructorMinValue): + * runtime/NumberObject.cpp: + (JSC::constructNumber): + * runtime/NumberObject.h: + * runtime/Operations.h: + (JSC::JSValuePtr::equal): + (JSC::JSValuePtr::equalSlowCaseInline): + (JSC::JSValuePtr::strictEqual): + (JSC::JSValuePtr::strictEqualSlowCaseInline): + * wtf/Platform.h: + +2009-01-15 Sam Weinig + + Reviewed by Geoffrey Garen. + + + REGRESSION (r34838): JavaScript objects appear to be leaked after loading google.com + + Subtract the number of JSStrings cached in SmallStrings when calculating the + number of live JSObjects. + + * runtime/Collector.cpp: + (JSC::Heap::objectCount): + * runtime/SmallStrings.cpp: + (JSC::SmallStrings::count): + * runtime/SmallStrings.h: + +2009-01-15 Sam Weinig + + Fix Qt build. + + * runtime/Collector.cpp: + +2009-01-15 Sam Weinig + + Reviewed by Gavin Barraclough. + + Fix crash seen running fast/canvas. + + Make sure to mark the ScopeNode and CodeBlock being created + in the re-parse for exception information. + + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::reparseForExceptionInfoIfNecessary): + * parser/Nodes.h: + (JSC::ScopeNode::mark): + * runtime/Collector.cpp: + (JSC::Heap::collect): + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): + * runtime/JSGlobalData.h: + +2009-01-15 Craig Schlenter + + Reviewed by Darin Adler. + + https://bugs.webkit.org/show_bug.cgi?id=23347 + Compilation of JavaScriptCore/wtf/ThreadingPthreads.cpp fails on Linux + + * wtf/ThreadingPthreads.cpp: included limits.h as INT_MAX is defined there. + +2009-01-15 Oliver Hunt + + Reviewed by Geoff Garen. + + Bug 23225: REGRESSION: Assertion failure in reparseInPlace() (m_sourceElements) at sfgate.com + + + Character position for open and closing brace was incorrectly referencing m_position to + record their position in a source document, however this is unsafe as BOMs may lead to + m_position being an arbitrary position from the real position of the current character. + + * parser/Lexer.cpp: + (JSC::Lexer::matchPunctuator): + +2009-01-14 David Kilzer + + Bug 23153: JSC build always touches JavaScriptCore/docs/bytecode.html + + + + Reviewed by Darin Adler. + + Instead of building bytecode.html into ${SRCROOT}/docs/bytecode.html, build it + into ${BUILT_PRODUCTS_DIR}/DerivedSources/JavaScriptCore/docs/bytecode.html. + + Also fixes make-bytecode-docs.pl to actually generate documentation. + + * DerivedSources.make: Changed bytecode.html to be built into local docs + directory in ${BUILT_PRODUCTS_DIR}/DerivedSources/JavaScriptCore. + * JavaScriptCore.xcodeproj/project.pbxproj: Added "/docs" to the end of the + "mkdir -p" command so that the docs subdirectory is automatically created. + * docs/make-bytecode-docs.pl: Changed BEGIN_OPCODE to DEFINE_OPCODE so that + documentation is actually generated. + +2009-01-14 Adam Treat + + Build fix for Qt from Dmitry Titov. + + * wtf/ThreadingQt.cpp: + (WTF::ThreadCondition::timedWait): + +2009-01-14 Oliver Hunt + + Reviewed by Cameron Zwarich. + + Bug 22903: REGRESSION (r36267): visiting this site reliably crashes WebKit nightly + + EvalCodeBlock's do not reference the functions that are declared inside the eval + code, this means that simply marking the EvalCodeBlock through the global object + is insufficient to mark the declared functions. This patch corrects this by + explicitly marking the CodeBlocks of all the functions declared in the cached + EvalNode. + + * bytecode/CodeBlock.cpp: + (JSC::CodeBlock::mark): + * bytecode/CodeBlock.h: + (JSC::CodeBlock::hasFunctions): + * bytecode/EvalCodeCache.h: + (JSC::EvalCodeCache::mark): + * parser/Nodes.cpp: + (JSC::ScopeNodeData::mark): + (JSC::EvalNode::mark): + * parser/Nodes.h: + +2009-01-14 Dmitry Titov + + Reviewed by Alexey Proskuryakov. + + https://bugs.webkit.org/show_bug.cgi?id=23312 + Implement MessageQueue::waitForMessageTimed() + Also fixed ThreadCondition::timedWait() to take absolute time, as discussed on webkit-dev. + Win32 version of timedWait still has to be implemented. + + * wtf/MessageQueue.h: + (WTF::MessageQueueWaitResult: new enum for the result of MessageQueue::waitForMessageTimed. + (WTF::MessageQueue::waitForMessage): + (WTF::MessageQueue::waitForMessageTimed): New method. + * wtf/Threading.h: + * wtf/ThreadingGtk.cpp: + (WTF::ThreadCondition::timedWait): changed to use absolute time instead of interval. + * wtf/ThreadingNone.cpp: + (WTF::ThreadCondition::timedWait): ditto. + * wtf/ThreadingPthreads.cpp: + (WTF::ThreadCondition::timedWait): ditto. + * wtf/ThreadingQt.cpp: + (WTF::ThreadCondition::timedWait): ditto. + * wtf/ThreadingWin.cpp: + (WTF::ThreadCondition::timedWait): ditto. The actual Win32 code is still to be implemented. + +2009-01-14 Dean McNamee + + Reviewed by Darin Adler and Oliver hunt. + + Correctly match allocation functions by implementing a custom deref(). + + https://bugs.webkit.org/show_bug.cgi?id=23315 + + * runtime/ByteArray.h: + (JSC::ByteArray::deref): + (JSC::ByteArray::ByteArray): + +2009-01-14 Dan Bernstein + + Reviewed by John Sullivan. + + - update copyright + + * Info.plist: + +2009-01-13 Beth Dakin + + Reviewed by Darin Adler and Oliver Hunt. + + REGRESSION: Business widget's front side + fails to render correctly when flipping widget + + The problem here is that parseInt was parsing NaN as 0. This patch + corrects that by parsing NaN as NaN. This matches our old behavior + and Firefox. + + * runtime/JSGlobalObjectFunctions.cpp: + (JSC::globalFuncParseInt): + +2009-01-13 Gavin Barraclough + + Reviewed by Oliver Hunt. + + Fix for: https://bugs.webkit.org/show_bug.cgi?id=23292 + + Implementation of two argument canDoFastAdditiveOperations does not correlate well with reality. + + * runtime/JSImmediate.h: + (JSC::JSFastMath::canDoFastAdditiveOperations): + +2009-01-13 Zalan Bujtas + + Reviewed by Darin Adler. + + https://bugs.webkit.org/show_bug.cgi?id=23290 + Fix JSImmediate::isImmediate(src) to !src->isCell() + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::privateExecute): + +2009-01-13 Dmitry Titov + + Reviewed by Darin Adler. + + https://bugs.webkit.org/show_bug.cgi?id=23281 + Fix the Chromium Win build. + Need to use PLATFORM(WIN_OS) instead of PLATFORM(WIN). + Moved GTK and WX up in #if sequence because they could come with WIN_OS too, + while they have their own implementation even on Windows. + + * wtf/CurrentTime.cpp: + (WTF::currentTime): + +2009-01-12 Gavin Barraclough + + Reviewed by Oliver Hunt. + + Make the JSImmediate interface private. + + All manipulation of JS values should be through the JSValuePtr class, not by using JSImmediate + directly. The key missing methods on JSValuePtr are: + + * isCell() - check for values that are JSCell*s, and as such where asCell() may be used. + * isInt32Fast() getInt32Fast() - fast check/access for integer immediates. + * isUInt32Fast() getUInt32Fast() - ditto for unsigned integer immediates. + + The JIT is allowed full access to JSImmediate, since it needs to be able to directly + manipulate JSValuePtrs. The Interpreter is provided access to perform operations directly + on JSValuePtrs through the new JSFastMath interface. + + No performance impact. + + * API/JSCallbackObjectFunctions.h: + (JSC::::toNumber): + * API/JSValueRef.cpp: + (JSValueIsEqual): + (JSValueIsStrictEqual): + * JavaScriptCore.exp: + * bytecode/CodeBlock.h: + (JSC::CodeBlock::isKnownNotImmediate): + * bytecompiler/BytecodeGenerator.cpp: + (JSC::keyForImmediateSwitch): + * bytecompiler/BytecodeGenerator.h: + (JSC::BytecodeGenerator::JSValueHashTraits::constructDeletedValue): + (JSC::BytecodeGenerator::JSValueHashTraits::isDeletedValue): + * interpreter/Interpreter.cpp: + (JSC::jsLess): + (JSC::jsLessEq): + (JSC::jsAdd): + (JSC::jsIsObjectType): + (JSC::cachePrototypeChain): + (JSC::Interpreter::tryCachePutByID): + (JSC::Interpreter::tryCacheGetByID): + (JSC::Interpreter::privateExecute): + (JSC::Interpreter::tryCTICachePutByID): + (JSC::Interpreter::tryCTICacheGetByID): + (JSC::Interpreter::cti_op_add): + (JSC::Interpreter::cti_op_get_by_id_self_fail): + (JSC::Interpreter::cti_op_get_by_id_proto_list): + (JSC::Interpreter::cti_op_instanceof): + (JSC::Interpreter::cti_op_mul): + (JSC::Interpreter::cti_op_get_by_val): + (JSC::Interpreter::cti_op_get_by_val_byte_array): + (JSC::Interpreter::cti_op_sub): + (JSC::Interpreter::cti_op_put_by_val): + (JSC::Interpreter::cti_op_put_by_val_array): + (JSC::Interpreter::cti_op_put_by_val_byte_array): + (JSC::Interpreter::cti_op_negate): + (JSC::Interpreter::cti_op_div): + (JSC::Interpreter::cti_op_eq): + (JSC::Interpreter::cti_op_lshift): + (JSC::Interpreter::cti_op_bitand): + (JSC::Interpreter::cti_op_rshift): + (JSC::Interpreter::cti_op_bitnot): + (JSC::Interpreter::cti_op_neq): + (JSC::Interpreter::cti_op_urshift): + (JSC::Interpreter::cti_op_call_eval): + (JSC::Interpreter::cti_op_throw): + (JSC::Interpreter::cti_op_is_undefined): + (JSC::Interpreter::cti_op_stricteq): + (JSC::Interpreter::cti_op_nstricteq): + (JSC::Interpreter::cti_op_switch_imm): + (JSC::Interpreter::cti_vm_throw): + * interpreter/Interpreter.h: + (JSC::Interpreter::isJSArray): + (JSC::Interpreter::isJSString): + (JSC::Interpreter::isJSByteArray): + * jit/JIT.cpp: + (JSC::JIT::compileOpStrictEq): + (JSC::JIT::privateCompileMainPass): + * jit/JIT.h: + (JSC::JIT::isStrictEqCaseHandledInJITCode): + * jit/JITArithmetic.cpp: + (JSC::JIT::compileFastArith_op_rshift): + (JSC::JIT::compileFastArith_op_bitand): + (JSC::JIT::compileFastArith_op_mod): + * jit/JITCall.cpp: + (JSC::JIT::unlinkCall): + (JSC::JIT::compileOpCall): + * jit/JITInlineMethods.h: + (JSC::JIT::getConstantOperandImmediateInt): + (JSC::JIT::isOperandConstantImmediateInt): + * parser/Nodes.cpp: + (JSC::processClauseList): + * runtime/ArrayPrototype.cpp: + (JSC::arrayProtoFuncIndexOf): + (JSC::arrayProtoFuncLastIndexOf): + * runtime/BooleanPrototype.cpp: + (JSC::booleanProtoFuncValueOf): + * runtime/Collector.cpp: + (JSC::Heap::protect): + (JSC::Heap::unprotect): + (JSC::Heap::heap): + * runtime/JSByteArray.cpp: + (JSC::JSByteArray::getOwnPropertySlot): + * runtime/JSByteArray.h: + (JSC::JSByteArray::getIndex): + * runtime/JSCell.cpp: + * runtime/JSCell.h: + (JSC::JSValuePtr::isNumberCell): + (JSC::JSValuePtr::asCell): + (JSC::JSValuePtr::isNumber): + * runtime/JSGlobalObjectFunctions.cpp: + (JSC::globalFuncParseInt): + * runtime/JSImmediate.h: + (JSC::js0): + (JSC::jsImpossibleValue): + (JSC::JSValuePtr::toInt32): + (JSC::JSValuePtr::toUInt32): + (JSC::JSValuePtr::isCell): + (JSC::JSValuePtr::isInt32Fast): + (JSC::JSValuePtr::getInt32Fast): + (JSC::JSValuePtr::isUInt32Fast): + (JSC::JSValuePtr::getUInt32Fast): + (JSC::JSValuePtr::makeInt32Fast): + (JSC::JSValuePtr::areBothInt32Fast): + (JSC::JSFastMath::canDoFastBitwiseOperations): + (JSC::JSFastMath::equal): + (JSC::JSFastMath::notEqual): + (JSC::JSFastMath::andImmediateNumbers): + (JSC::JSFastMath::xorImmediateNumbers): + (JSC::JSFastMath::orImmediateNumbers): + (JSC::JSFastMath::canDoFastRshift): + (JSC::JSFastMath::canDoFastUrshift): + (JSC::JSFastMath::rightShiftImmediateNumbers): + (JSC::JSFastMath::canDoFastAdditiveOperations): + (JSC::JSFastMath::addImmediateNumbers): + (JSC::JSFastMath::subImmediateNumbers): + (JSC::JSFastMath::incImmediateNumber): + (JSC::JSFastMath::decImmediateNumber): + * runtime/JSNumberCell.h: + (JSC::JSValuePtr::asNumberCell): + (JSC::jsNumber): + (JSC::JSValuePtr::uncheckedGetNumber): + (JSC::JSNumberCell::toInt32): + (JSC::JSNumberCell::toUInt32): + (JSC::JSValuePtr::toJSNumber): + (JSC::JSValuePtr::getNumber): + (JSC::JSValuePtr::numberToInt32): + (JSC::JSValuePtr::numberToUInt32): + * runtime/JSObject.h: + (JSC::JSValuePtr::isObject): + (JSC::JSValuePtr::get): + (JSC::JSValuePtr::put): + * runtime/JSValue.cpp: + (JSC::JSValuePtr::toInteger): + (JSC::JSValuePtr::toIntegerPreserveNaN): + * runtime/JSValue.h: + * runtime/Operations.cpp: + (JSC::JSValuePtr::equalSlowCase): + (JSC::JSValuePtr::strictEqualSlowCase): + * runtime/Operations.h: + (JSC::JSValuePtr::equal): + (JSC::JSValuePtr::equalSlowCaseInline): + (JSC::JSValuePtr::strictEqual): + (JSC::JSValuePtr::strictEqualSlowCaseInline): + * runtime/Protect.h: + (JSC::gcProtect): + (JSC::gcUnprotect): + * runtime/StringPrototype.cpp: + (JSC::stringProtoFuncCharAt): + (JSC::stringProtoFuncCharCodeAt): + * runtime/Structure.cpp: + (JSC::Structure::createCachedPrototypeChain): + +2009-01-12 Kevin Ollivier - (r39682-r39736) JSFunFuzz: crash on "(function(){({ x2: x }), })()" - + Since date time functions have moved here, now the wx port JSC + needs to depend on wx. - Automatic semicolon insertion was resulting in this being accepted in the initial - nodeless parsing, but subsequent reparsing for code generation would fail, leading - to a crash. The solution is to ensure that reparsing a function performs parsing - in the same state as the initial parse. We do this by modifying the saved source - ranges to include rather than exclude the opening and closing braces. + * jscore.bkl: - * bytecode/CodeBlock.cpp: - (JSC::CodeBlock::reparseForExceptionInfoIfNecessary): add an assertion for successful recompile - * parser/Lexer.h: - (JSC::Lexer::sourceCode): include rather than exclude braces. - * parser/Nodes.h: - (JSC::FunctionBodyNode::toSourceString): No need to append braces anymore. +2009-01-11 David Levin -2009-01-21 Alexey Proskuryakov + Reviewed by Darin Adler. - Suggested by Oliver Hunt. Reviewed by Oliver Hunt. + https://bugs.webkit.org/show_bug.cgi?id=23245 - https://bugs.webkit.org/show_bug.cgi?id=23456 - Function argument names leak + Add initializeThreading to key places in JS API to ensure that + UString is properly initialized. - * parser/Nodes.cpp: (JSC::FunctionBodyNode::~FunctionBodyNode): Destruct parameter names. + * API/JSContextRef.cpp: + (JSContextGroupCreate): + (JSGlobalContextCreate): + * API/JSObjectRef.cpp: + (JSClassCreate): + * API/JSStringRef.cpp: + (JSStringCreateWithCharacters): + (JSStringCreateWithUTF8CString): + * API/JSStringRefCF.cpp: + (JSStringCreateWithCFString): -2009-01-22 Beth Dakin +2009-01-11 David Levin - Reviewed by Sam Weinig. + Reviewed by Darin Adler. - Fix for https://bugs.webkit.org/show_bug.cgi?id=23461 LayoutTests/ - fast/js/numeric-conversion.html is broken, and corresponding - + https://bugs.webkit.org/show_bug.cgi?id=23175 - The basic problem here is that parseInt(Infinity) should be NaN, - but we were returning 0. NaN matches Safari 3.2.1 and Firefox. + Separate out BaseString information from UString::Rep and make all baseString access go through + a member function, so that it may be used for something else (in the future) in the BaseString + case. - * runtime/JSGlobalObjectFunctions.cpp: - (JSC::globalFuncParseInt): + * runtime/SmallStrings.cpp: + (JSC::SmallStringsStorage::rep): + (JSC::SmallStringsStorage::SmallStringsStorage): + (JSC::SmallStrings::SmallStrings): + (JSC::SmallStrings::mark): + Adjust to account for the changes in UString and put the UString in place in + SmallStringsStorage to aid in locality of reference among the UChar[] and UString::Rep's. -2009-01-13 Beth Dakin + * runtime/SmallStrings.h: + * runtime/UString.cpp: + (JSC::initializeStaticBaseString): + (JSC::initializeUString): + (JSC::UString::Rep::create): + (JSC::UString::Rep::destroy): + (JSC::UString::Rep::checkConsistency): + (JSC::expandCapacity): + (JSC::UString::expandPreCapacity): + (JSC::concatenate): + (JSC::UString::append): + (JSC::UString::operator=): + * runtime/UString.h: + (JSC::UString::Rep::baseIsSelf): + (JSC::UString::Rep::setBaseString): + (JSC::UString::Rep::baseString): + (JSC::UString::Rep::): + (JSC::UString::Rep::null): + (JSC::UString::Rep::empty): + (JSC::UString::Rep::data): + (JSC::UString::cost): + Separate out the items out used by base strings from those used in Rep's that only + point to base strings. (This potentially saves 24 bytes per Rep.) + +2009-01-11 Darin Adler - Reviewed by Darin Adler and Oliver Hunt. + Reviewed by Dan Bernstein. - REGRESSION: Business widget's front side - fails to render correctly when flipping widget + Bug 23239: improve handling of unused arguments in JavaScriptCore + https://bugs.webkit.org/show_bug.cgi?id=23239 + + * runtime/DatePrototype.cpp: Moved LocaleDateTimeFormat enum outside #if + so we can use this on all platforms. Changed valueOf to share the same + function with getTime, since the contents of the two are identical. Removed + a FIXME since the idea isn't really specific enough or helpful enough to + need to sit here in the source code. + (JSC::formatLocaleDate): Changed the Mac version of this function to take + the same arguments as the non-Mac version so the caller doesn't have to + special-case the two platforms. Also made the formatString array be const; + before the characters were, but the array was a modifiable global variable. + (JSC::dateProtoFuncToLocaleString): Changed to call the new unified + version of formatLocaleDate and remove the ifdef. + (JSC::dateProtoFuncToLocaleDateString): Ditto. + (JSC::dateProtoFuncToLocaleTimeString): Ditto. - The problem here is that parseInt was parsing NaN as 0. This patch - corrects that by parsing NaN as NaN. This matches our old behavior - and Firefox. + * runtime/JSNotAnObject.cpp: + (JSC::JSNotAnObject::toObject): Use the new ASSERT_UNUSED instead of the + old UNUSED_PARAM. - * runtime/JSGlobalObjectFunctions.cpp: - (JSC::globalFuncParseInt): + * runtime/RegExp.cpp: + (JSC::RegExp::RegExp): Changed to only use UNUSED_PARAM when the parameter + is actually unused. -2009-02-13 Adam Treat + * wtf/TCSystemAlloc.cpp: + (TCMalloc_SystemRelease): Changed to only use UNUSED_PARAM when the parameter + is actually unused. + (TCMalloc_SystemCommit): Changed to omit the argument names instead of using + UNUSED_PARAM. - Reviewed by George Staikos. +2009-01-11 Oliver Hunt - https://bugs.webkit.org/show_bug.cgi?id=23960 - Crash Fix. + Reviewed by NOBODY (Build fix). - Don't depend on 'initializeThreading()' to come before a call to 'isMainThread()' - as QtWebKit only calls 'initializeThreading()' during QWebPage construction. + Fix the build (whoops) - A client app may well make a call to QWebSettings::iconForUrl() for instance - before creating a QWebPage and that call to QWebSettings triggers an - ASSERT(isMainThread()) deep within WebCore. + * interpreter/Interpreter.cpp: + (JSC::Interpreter::cti_op_get_by_val): - * wtf/ThreadingQt.cpp: - (WTF::isMainThread): +2009-01-11 Oliver Hunt -2009-02-12 Simon Hausmann + Reviewed by Darin Adler and Anders Carlsson - Rubber-stamped by Lars. + Bug 23128: get/put_by_val need to respecialise in the face of ByteArray - Re-enable the JIT in the Qt build with -fno-stack-protector on Linux. + Restructure the code slightly, and add comments per Darin's suggestions + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::cti_op_get_by_val): + (JSC::Interpreter::cti_op_get_by_val_byte_array): + (JSC::Interpreter::cti_op_put_by_val): + (JSC::Interpreter::cti_op_put_by_val_byte_array): +2009-01-11 Oliver Hunt + + Reviewed by Anders Carlsson. + + Whoops, I accidentally removed an exception check from fast the + fast path for string indexing when i originally landed the + byte array logic. + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::cti_op_get_by_val): + +2009-01-11 Oliver Hunt + + Reviewed by Anders Carlsson. + + Bug 23128: get/put_by_val need to respecialise in the face of ByteArray + + + Fairly simple patch, add specialised versions of cti_op_get/put_by_val + that assume ByteArray, thus avoiding a few branches in the case of bytearray + manipulation. + + No effect on SunSpider. 15% win on the original testcase. + + * interpreter/Interpreter.cpp: + (JSC::Interpreter::cti_op_get_by_val): + (JSC::Interpreter::cti_op_get_by_val_byte_array): + (JSC::Interpreter::cti_op_put_by_val): + (JSC::Interpreter::cti_op_put_by_val_byte_array): + * interpreter/Interpreter.h: + +2009-01-11 Alexey Proskuryakov + + Try to fix Windows build. + + * wtf/CurrentTime.cpp: Added a definition of msPerSecond (previously, this code was in + DateMath.cpp, with constant definition in DateTime.h) + +2009-01-11 Alexey Proskuryakov + + Try to fix Windows build. + + * wtf/CurrentTime.cpp: Include and , as MSDN says to. + +2009-01-11 Dmitry Titov + + Reviewed by Darin Adler. + + https://bugs.webkit.org/show_bug.cgi?id=23207 + Moved currentTime() to from WebCore to WTF. + + * GNUmakefile.am: + * JavaScriptCore.exp: added export for WTF::currentTime() * JavaScriptCore.pri: + * JavaScriptCore.scons: + * JavaScriptCore.vcproj/WTF/WTF.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * JavaScriptCoreSources.bkl: + * runtime/DateMath.cpp: + (JSC::getCurrentUTCTimeWithMicroseconds): This function had another implementation of currentTime(), essentially. Now uses WTF version. + * wtf/CurrentTime.cpp: Added. + (WTF::currentTime): + (WTF::highResUpTime): + (WTF::lowResUTCTime): + (WTF::qpcAvailable): + * wtf/CurrentTime.h: Added. -2009-02-03 Simon Hausmann +2009-01-09 Gavin Barraclough - Reviewed by Tor Arne Vestbø. + Reviewed by Oliver Hunt. - Added accessor for JSByteArray storage. + Stage two of converting JSValue from a pointer to a class type. + Remove the class JSValue. The functionallity has been transitioned + into the wrapper class type JSValuePtr. - * runtime/JSByteArray.h: - (JSC::JSByteArray::storage): + The last stage will be to rename JSValuePtr to JSValue, remove the + overloaded -> operator, and switch operations on JSValuePtrs from + using '->' to use '.' instead. -2009-01-30 Laszlo Gombos + * API/APICast.h: + * JavaScriptCore.exp: + * runtime/JSCell.h: + (JSC::asCell): + (JSC::JSValuePtr::asCell): + (JSC::JSValuePtr::isNumber): + (JSC::JSValuePtr::isString): + (JSC::JSValuePtr::isGetterSetter): + (JSC::JSValuePtr::isObject): + (JSC::JSValuePtr::getNumber): + (JSC::JSValuePtr::getString): + (JSC::JSValuePtr::getObject): + (JSC::JSValuePtr::getCallData): + (JSC::JSValuePtr::getConstructData): + (JSC::JSValuePtr::getUInt32): + (JSC::JSValuePtr::getTruncatedInt32): + (JSC::JSValuePtr::getTruncatedUInt32): + (JSC::JSValuePtr::mark): + (JSC::JSValuePtr::marked): + (JSC::JSValuePtr::toPrimitive): + (JSC::JSValuePtr::getPrimitiveNumber): + (JSC::JSValuePtr::toBoolean): + (JSC::JSValuePtr::toNumber): + (JSC::JSValuePtr::toString): + (JSC::JSValuePtr::toObject): + (JSC::JSValuePtr::toThisObject): + (JSC::JSValuePtr::needsThisConversion): + (JSC::JSValuePtr::toThisString): + (JSC::JSValuePtr::getJSNumber): + * runtime/JSImmediate.h: + (JSC::JSValuePtr::isUndefined): + (JSC::JSValuePtr::isNull): + (JSC::JSValuePtr::isUndefinedOrNull): + (JSC::JSValuePtr::isBoolean): + (JSC::JSValuePtr::getBoolean): + (JSC::JSValuePtr::toInt32): + (JSC::JSValuePtr::toUInt32): + * runtime/JSNumberCell.h: + (JSC::JSValuePtr::uncheckedGetNumber): + (JSC::JSValuePtr::toJSNumber): + * runtime/JSObject.h: + (JSC::JSValuePtr::isObject): + (JSC::JSValuePtr::get): + (JSC::JSValuePtr::put): + * runtime/JSString.h: + (JSC::JSValuePtr::toThisJSString): + * runtime/JSValue.cpp: + (JSC::JSValuePtr::toInteger): + (JSC::JSValuePtr::toIntegerPreserveNaN): + (JSC::JSValuePtr::toInt32SlowCase): + (JSC::JSValuePtr::toUInt32SlowCase): + * runtime/JSValue.h: + (JSC::JSValuePtr::makeImmediate): + (JSC::JSValuePtr::immediateValue): + (JSC::JSValuePtr::JSValuePtr): + (JSC::JSValuePtr::operator->): + (JSC::JSValuePtr::operator bool): + (JSC::JSValuePtr::operator==): + (JSC::JSValuePtr::operator!=): + (JSC::JSValuePtr::encode): + (JSC::JSValuePtr::decode): + (JSC::JSValuePtr::toFloat): + (JSC::JSValuePtr::asValue): + (JSC::operator==): + (JSC::operator!=): - Reviewed by Simon Hausmann. +2009-01-09 David Levin - Bug 23580: GNU mode RVCT compilation support - + Reviewed by Oliver Hunt. - * pcre/pcre_exec.cpp: Use COMPILER(GCC) instead of __GNUC__. - * wtf/FastMalloc.cpp: Ditto. - (WTF::TCMallocStats::): - * wtf/Platform.h: Don't define COMPILER(GCC) with RVCT --gnu. + https://bugs.webkit.org/show_bug.cgi?id=23175 + + Adjustment to previous patch. Remove call to initilizeThreading from JSGlobalCreate + and fix jsc.cpp instead. + + * jsc.cpp: + (main): + (jscmain): + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::create): -2008-11-28 George Staikos +2009-01-09 Sam Weinig - Reviewed by NOBODY (OOPS!). + Roll r39720 back in with a working interpreted mode. - Implement currentThreadStackBase() on Windows CE. +2009-01-09 David Levin - Coding style fixes by Joerg Bornemann . + Reviewed by Oliver Hunt. - * runtime/Collector.cpp: - (JSC::numberOfWritableBytes): - (JSC::systemPageSize): - (JSC::currentThreadStackBaseWinCE): - (JSC::currentThreadStackBase): + https://bugs.webkit.org/show_bug.cgi?id=23175 + + Added a template to make the pointer and flags combination + in UString more readable and less error prone. + + * GNUmakefile.am: + * JavaScriptCore.exp: + * JavaScriptCore.vcproj/WTF/WTF.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + Added PtrAndFlags.h (and sorted the xcode project file). + + * runtime/Identifier.cpp: + (JSC::Identifier::add): + (JSC::Identifier::addSlowCase): + * runtime/InitializeThreading.cpp: + (JSC::initializeThreadingOnce): + Made the init threading initialize the UString globals. Before + these were initilized using {} but that became harder due to the + addition of this tempalte class. + + * runtime/JSGlobalData.cpp: + (JSC::JSGlobalData::create): + * runtime/PropertyNameArray.cpp: + (JSC::PropertyNameArray::add): + * runtime/UString.cpp: + (JSC::initializeStaticBaseString): + (JSC::initializeUString): + (JSC::UString::Rep::create): + (JSC::UString::Rep::createFromUTF8): + (JSC::createRep): + (JSC::UString::UString): + (JSC::concatenate): + (JSC::UString::operator=): + (JSC::UString::makeNull): + (JSC::UString::nullRep): + * runtime/UString.h: + (JSC::UString::Rep::identifierTable): + (JSC::UString::Rep::setIdentifierTable): + (JSC::UString::Rep::isStatic): + (JSC::UString::Rep::setStatic): + (JSC::UString::Rep::): + (JSC::UString::Rep::null): + (JSC::UString::Rep::empty): + (JSC::UString::isNull): + (JSC::UString::null): + (JSC::UString::UString): + + * wtf/PtrAndFlags.h: Added. + (WTF::PtrAndFlags::PtrAndFlags): + (WTF::PtrAndFlags::isFlagSet): + (WTF::PtrAndFlags::setFlag): + (WTF::PtrAndFlags::clearFlag): + (WTF::PtrAndFlags::get): + (WTF::PtrAndFlags::set): + A simple way to layer together a pointer and 2 flags. It relies on the pointer being 4 byte aligned, + which should happen for all allocators (due to aligning pointers, int's, etc. on 4 byte boundaries). 2009-01-08 Gavin Barraclough - Reviewed by Oliver Hunt. + Reviewed by -O-l-i-v-e-r- -H-u-n-t- Sam Weinig (sorry, Sam!). Encode immediates in the low word of JSValuePtrs, on x86-64. diff --git a/src/3rdparty/webkit/JavaScriptCore/DerivedSources.make b/src/3rdparty/webkit/JavaScriptCore/DerivedSources.make index 865ba7c..4b33682 100644 --- a/src/3rdparty/webkit/JavaScriptCore/DerivedSources.make +++ b/src/3rdparty/webkit/JavaScriptCore/DerivedSources.make @@ -1,4 +1,4 @@ -# Copyright (C) 2006, 2007, 2008 2009 Apple Inc. All rights reserved. +# Copyright (C) 2006, 2007, 2008, 2009 Apple Inc. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -46,7 +46,7 @@ all : \ RegExpConstructor.lut.h \ RegExpObject.lut.h \ StringPrototype.lut.h \ - $(JavaScriptCore)/docs/bytecode.html \ + docs/bytecode.html \ # # lookup tables for classes @@ -71,5 +71,5 @@ Grammar.cpp: Grammar.y chartables.c : dftables $^ $@ -$(JavaScriptCore)/docs/bytecode.html: make-bytecode-docs.pl Interpreter.cpp +docs/bytecode.html: make-bytecode-docs.pl Interpreter.cpp perl $^ $@ diff --git a/src/3rdparty/webkit/JavaScriptCore/Info.plist b/src/3rdparty/webkit/JavaScriptCore/Info.plist index 55537af..17949b0 100644 --- a/src/3rdparty/webkit/JavaScriptCore/Info.plist +++ b/src/3rdparty/webkit/JavaScriptCore/Info.plist @@ -7,7 +7,7 @@ CFBundleExecutable ${PRODUCT_NAME} CFBundleGetInfoString - ${BUNDLE_VERSION}, Copyright 2003-2007 Apple Inc.; Copyright 1999-2001 Harri Porten <porten@kde.org>; Copyright 2001 Peter Kelly <pmk@post.com>; Copyright 1997-2005 University of Cambridge; Copyright 1991, 2000, 2001 by Lucent Technologies. + ${BUNDLE_VERSION}, Copyright 2003-2009 Apple Inc.; Copyright 1999-2001 Harri Porten <porten@kde.org>; Copyright 2001 Peter Kelly <pmk@post.com>; Copyright 1997-2005 University of Cambridge; Copyright 1991, 2000, 2001 by Lucent Technologies. CFBundleIdentifier com.apple.${PRODUCT_NAME} CFBundleInfoDictionaryVersion diff --git a/src/3rdparty/webkit/JavaScriptCore/JavaScriptCore.order b/src/3rdparty/webkit/JavaScriptCore/JavaScriptCore.order index 9f7cb30..bb56e98 100644 --- a/src/3rdparty/webkit/JavaScriptCore/JavaScriptCore.order +++ b/src/3rdparty/webkit/JavaScriptCore/JavaScriptCore.order @@ -1,1526 +1,1965 @@ __ZN3WTF10fastMallocEm +__ZN3WTF10fastMallocILb1EEEPvm __ZN3WTF20TCMalloc_ThreadCache10InitModuleEv -__ZN3WTF15InitSizeClassesEv +__ZN3WTFL15InitSizeClassesEv __Z20TCMalloc_SystemAllocmPmm -__ZN3WTF17TCMalloc_PageHeap4initEv +__ZN3WTFL13MetaDataAllocEm __ZN3WTF20TCMalloc_ThreadCache22CreateCacheIfNecessaryEv __ZN3WTF25TCMalloc_Central_FreeList11RemoveRangeEPPvS2_Pi __ZN3WTF25TCMalloc_Central_FreeList18FetchFromSpansSafeEv __ZN3WTF17TCMalloc_PageHeap10AllocLargeEm __ZN3WTF17TCMalloc_PageHeap8GrowHeapEm -__ZN3WTF13MetaDataAllocEm -__ZN3WTF17TCMalloc_PageHeap19IncrementalScavengeEm +__ZN3WTF19initializeThreadingEv +__ZN3WTF20initializeMainThreadEv +__ZN3WTF5MutexC1Ev +__ZN3WTF28initializeMainThreadPlatformEv +__ZN3WTF36lockAtomicallyInitializedStaticMutexEv __ZN3WTF8fastFreeEPv +__ZN3WTF38unlockAtomicallyInitializedStaticMutexEv +__ZN3JSC19initializeThreadingEv +__ZN3JSCL23initializeThreadingOnceEv +__ZN3JSC17initializeUStringEv +__ZN3JSC12initDateMathEv +__ZN3WTF11currentTimeEv +__ZN3WTF15ThreadConditionC1Ev +__ZN3WTF5Mutex4lockEv +__ZN3WTF5Mutex6unlockEv +__ZN3WTF12createThreadEPFPvS0_ES0_PKc +__ZN3WTF20createThreadInternalEPFPvS0_ES0_PKc +__ZN3WTFL35establishIdentifierForPthreadHandleERP17_opaque_pthread_t +__ZN3WTF9HashTableIjSt4pairIjP17_opaque_pthread_tENS_18PairFirstExtractorIS4_EENS_7IntHashIjEENS_14PairHashTraitsINS_10HashTrai +__ZN3WTFL16threadEntryPointEPv __ZN3WTF16fastZeroedMallocEm +__ZN3WTF21setThreadNameInternalEPKc +__ZN3WTF5MutexD1Ev +__ZN3WTF25TCMalloc_Central_FreeList11InsertRangeEPvS1_i +__ZN3WTF25TCMalloc_Central_FreeList18ReleaseListToSpansEPv +__ZN3WTF12isMainThreadEv __ZN3WTF14FastMallocZone4sizeEP14_malloc_zone_tPKv -__ZN3KJS8Bindings10RootObject19setCreateRootObjectEPFN3WTF10PassRefPtrIS1_EEPvE -__ZN3KJS8Bindings8Instance21setDidExecuteFunctionEPFvPNS_9ExecStateEPNS_8JSObjectEE -_kjs_strtod -__Z15jsRegExpCompilePKti24JSRegExpIgnoreCaseOption23JSRegExpMultilineOptionPjPPKc -__Z30calculateCompiledPatternLengthPKti24JSRegExpIgnoreCaseOptionR11CompileDataR9ErrorCode -__Z11checkEscapePPKtS0_P9ErrorCodeib -__Z13compileBranchiPiPPhPPKtS3_P9ErrorCodeS_S_R11CompileData -__Z15jsRegExpExecutePK8JSRegExpPKtiiPii +__ZN3WTF13currentThreadEv +__ZN3WTF16callOnMainThreadEPFvPvES0_ +__ZN3WTF5DequeINS_19FunctionWithContextEE14expandCapacityEv +__ZN3WTF37scheduleDispatchFunctionsOnMainThreadEv +__ZN3WTF15ThreadCondition4waitERNS_5MutexE +__ZN3JSC8DebuggerC2Ev +__ZN3WTF6strtodEPKcPPc +__ZN3WTF15ThreadCondition6signalEv +__ZN3WTF15ThreadCondition9timedWaitERNS_5MutexEd +__ZN3WTF15ThreadCondition9broadcastEv +-[WTFMainThreadCaller call] +__ZN3WTF31dispatchFunctionsFromMainThreadEv +__ZN3WTF14FastMallocZone9forceLockEP14_malloc_zone_t __ZN3WTF11fastReallocEPvm -__ZN3KJS20createDidLockJSMutexEv -__ZN3KJS9Collector14registerThreadEv -__ZN3KJS29initializeRegisteredThreadKeyEv -__ZN3KJS15SavedPropertiesC1Ev -__ZN3KJS6JSCellnwEm -__ZN3KJS9Collector12heapAllocateILNS0_8HeapTypeE0EEEPvm -__ZN3KJS15GlobalExecStateC1EPNS_14JSGlobalObjectE -__ZN3KJS17CommonIdentifiers6sharedEv -__ZN3KJS17CommonIdentifiersC2Ev -__ZN3KJS10IdentifierC1EPKc -__ZN3KJS10Identifier3addEPKc -__ZN3WTF7HashSetIPN3KJS7UString3RepENS_7StrHashIS4_EENS_10HashTraitsIS4_EEE3addINS1_11UCharBufferENS1_21UCharBufferTranslatorEEESt4pairINS_24HashTableIteratorAdapterINS_9HashTableIS4_S4_NS_17IdentityExtractorIS4_EES6_S8_S8_EES4_EEbERKT_ -__ZN3WTF9HashTableIPN3KJS7UString3RepES4_NS_17IdentityExtractorIS4_EENS_7StrHashIS4_EENS_10HashTraitsIS4_EESA_E6rehashEi -__ZN3KJS14JSGlobalObject4initEv -__ZN3KJS14JSGlobalObject5resetEPNS_7JSValueE -__ZN3KJS11PropertyMap5clearEv -__ZN3KJS17FunctionPrototypeC2EPNS_9ExecStateE -__ZN3KJS11PropertyMap3putERKNS_10IdentifierEPNS_7JSValueEjb -__ZN3KJS17PrototypeFunctionC1EPNS_9ExecStateEPNS_17FunctionPrototypeEiRKNS_10IdentifierEPFPNS_7JSValueES2_PNS_8JSObjectERKNS_4ListEE -__ZN3KJS19InternalFunctionImpC2EPNS_17FunctionPrototypeERKNS_10IdentifierE -__ZN3KJS11PropertyMap11createTableEv -__ZN3KJS15ObjectPrototypeC2EPNS_9ExecStateEPNS_17FunctionPrototypeE -__ZN3KJS11PropertyMap6rehashEj -__ZN3KJS14ArrayPrototypeC1EPNS_9ExecStateEPNS_15ObjectPrototypeE -__ZN3KJS13ArrayInstanceC2EPNS_8JSObjectEj -__ZN3KJS15StringPrototypeC2EPNS_9ExecStateEPNS_15ObjectPrototypeE -__ZN3KJS8jsStringEPKc -__ZN3KJS16BooleanPrototypeC2EPNS_9ExecStateEPNS_15ObjectPrototypeEPNS_17FunctionPrototypeE -__ZN3KJS15NumberPrototypeC2EPNS_9ExecStateEPNS_15ObjectPrototypeEPNS_17FunctionPrototypeE -__ZN3KJS13DatePrototypeC1EPNS_9ExecStateEPNS_15ObjectPrototypeE -__ZN3KJS12jsNumberCellEd -__ZN3KJS9Collector12heapAllocateILNS0_8HeapTypeE1EEEPvm -__ZN3KJS15RegExpPrototypeC2EPNS_9ExecStateEPNS_15ObjectPrototypeEPNS_17FunctionPrototypeE -__ZN3WTF9HashTableIPN3KJS7UString3RepES4_NS_17IdentityExtractorIS4_EENS_7StrHashIS4_EENS_10HashTraitsIS4_EESA_E4findIS4_NS_22IdentityHashTranslatorIS4_S4_S8_EEEENS_17HashTableIteratorIS4_S4_S6_S8_SA_SA_EERKT_ -__ZN3KJS14ErrorPrototypeC2EPNS_9ExecStateEPNS_15ObjectPrototypeEPNS_17FunctionPrototypeE -__ZN3KJS7UStringC1EPKc -__ZN3KJS20NativeErrorPrototypeC1EPNS_9ExecStateEPNS_14ErrorPrototypeERKNS_7UStringES7_ -__ZN3KJS8jsStringERKNS_7UStringE -__ZN3KJS15ObjectObjectImpC2EPNS_9ExecStateEPNS_15ObjectPrototypeEPNS_17FunctionPrototypeE -__ZN3KJS17FunctionObjectImpC2EPNS_9ExecStateEPNS_17FunctionPrototypeE -__ZNK3KJS19InternalFunctionImp9classInfoEv -__ZN3KJS14ArrayObjectImpC2EPNS_9ExecStateEPNS_17FunctionPrototypeEPNS_14ArrayPrototypeE -__ZNK3KJS14ArrayPrototype9classInfoEv -__ZN3KJS15StringObjectImpC2EPNS_9ExecStateEPNS_17FunctionPrototypeEPNS_15StringPrototypeE -__ZNK3KJS15StringPrototype9classInfoEv -__ZN3KJS19StringObjectFuncImpC2EPNS_9ExecStateEPNS_17FunctionPrototypeERKNS_10IdentifierE -__ZN3KJS16BooleanObjectImpC2EPNS_9ExecStateEPNS_17FunctionPrototypeEPNS_16BooleanPrototypeE -__ZNK3KJS15BooleanInstance9classInfoEv -__ZN3KJS15NumberObjectImpC2EPNS_9ExecStateEPNS_17FunctionPrototypeEPNS_15NumberPrototypeE -__ZNK3KJS14NumberInstance9classInfoEv -__ZN3KJS13DateObjectImpC2EPNS_9ExecStateEPNS_17FunctionPrototypeEPNS_13DatePrototypeE -__ZNK3KJS13DatePrototype9classInfoEv -__ZN3KJS15RegExpObjectImpC2EPNS_9ExecStateEPNS_17FunctionPrototypeEPNS_15RegExpPrototypeE -__ZN3KJS14ErrorObjectImpC2EPNS_9ExecStateEPNS_17FunctionPrototypeEPNS_14ErrorPrototypeE -__ZNK3KJS13ErrorInstance9classInfoEv -__ZN3KJS14NativeErrorImpC1EPNS_9ExecStateEPNS_17FunctionPrototypeEPNS_20NativeErrorPrototypeE -__ZNK3KJS11PropertyMap3getERKNS_10IdentifierE -__ZNK3KJS9StringImp4typeEv -__ZN3KJS10Identifier11addSlowCaseEPNS_7UString3RepE -__ZN3WTF9HashTableIPN3KJS7UString3RepES4_NS_17IdentityExtractorIS4_EENS_7StrHashIS4_EENS_10HashTraitsIS4_EESA_E3addIS4_S4_NS_17HashSetTranslatorILb1ES4_SA_SA_S8_EEEESt4pairINS_17HashTableIteratorIS4_S4_S6_S8_SA_SA_EEbERKT_RKT0_ -__ZN3KJS8JSObject9putDirectERKNS_10IdentifierEPNS_7JSValueEi -__ZN3KJS13MathObjectImpC1EPNS_9ExecStateEPNS_15ObjectPrototypeE -__ZN3KJS8JSObject17putDirectFunctionEPNS_19InternalFunctionImpEi -__ZNK3KJS8JSObject4typeEv -__ZN3KJS9Collector23collectOnMainThreadOnlyEPNS_7JSValueE -__ZN3KJS9Collector7protectEPNS_7JSValueE -__ZN3WTF9HashTableIiSt4pairIiiENS_18PairFirstExtractorIS2_EENS_7IntHashIiEENS_14PairHashTraitsINS_10HashTraitsIiEES9_EES9_E3addIPN3KJS8JSObjectEjNS_17HashMapTranslatorILb1ES1_ISF_jENS_18PairBaseHashTraitsINS8_ISF_EENS8_IjEEEESA_NS_7PtrHashISF_EEEEEES1_INS_17HashTableIteratorIiS2_S4_S6_SA_S9_EEbERKT_RKT0_ -__ZN3WTF9HashTableIiSt4pairIiiENS_18PairFirstExtractorIS2_EENS_7IntHashIiEENS_14PairHashTraitsINS_10HashTraitsIiEES9_EES9_E6rehashEi -__ZN3KJS6JSCell9getObjectEv -__ZN3KJS8Bindings10RootObject6createEPKvPNS_14JSGlobalObjectE -__ZN3KJS8Bindings10RootObjectC2EPKvPNS_14JSGlobalObjectE -__ZN3WTF9HashTableIiiNS_17IdentityExtractorIiEENS_7IntHashIiEENS_10HashTraitsIiEES6_E6rehashEi -__ZN3KJS8Bindings10RootObject9gcProtectEPNS_8JSObjectE -__ZNK3KJS14JSGlobalObject12saveBuiltinsERNS_13SavedBuiltinsE -__ZN3KJS21SavedBuiltinsInternalC2Ev -__ZNK3KJS11PropertyMap4saveERNS_15SavedPropertiesE -__ZN3KJS30comparePropertyMapEntryIndicesEPKvS1_ -__ZN3WTF9HashTableIiSt4pairIiiENS_18PairFirstExtractorIS2_EENS_7IntHashIiEENS_14PairHashTraitsINS_10HashTraitsIiEES9_EES9_E4findIiNS_22IdentityHashTranslatorIiS2_S6_EEEENS_17HashTableIteratorIiS2_S4_S6_SA_S9_EERKT_ -__ZNK3KJS16JSVariableObject16saveLocalStorageERNS_15SavedPropertiesE -__ZN3KJS13ActivationImpD0Ev -__ZN3KJS8JSObject12removeDirectERKNS_10IdentifierE -__ZN3KJS11PropertyMap6removeERKNS_10IdentifierE -__ZN3KJS7UString3Rep7destroyEv -__ZN3KJS10Identifier6removeEPNS_7UString3RepE -__ZN3KJS8Bindings10RootObject10invalidateEv -__ZN3KJS9Collector9unprotectEPNS_7JSValueE -__ZN3WTF9HashTableIiiNS_17IdentityExtractorIiEENS_7IntHashIiEENS_10HashTraitsIiEES6_E4findIiNS_22IdentityHashTranslatorIiiS4_EEEENS_17HashTableIteratorIiiS2_S4_S6_S6_EERKT_ -__ZN3KJS8Bindings10RootObjectD1Ev -__ZN3KJS14JSGlobalObject10globalExecEv -__ZN3KJS14JSGlobalObject17startTimeoutCheckEv -__ZN3KJS7UStringC1EPKNS_5UCharEi -__ZN3KJS11Interpreter8evaluateEPNS_9ExecStateERKNS_7UStringEiPKNS_5UCharEiPNS_7JSValueE -__ZN3KJS6ParserC2Ev -__ZN3KJS6Parser5parseINS_11ProgramNodeEEEN3WTF10PassRefPtrIT_EERKNS_7UStringEiPKNS_5UCharEjPiSD_PS7_ -__ZN3KJS6Parser5parseEiPKNS_5UCharEjPiS4_PNS_7UStringE -__ZN3KJS7UStringaSEPKc -__ZN3KJS5LexerC2Ev -__ZN3WTF6VectorIcLm0EE15reserveCapacityEm -__ZN3WTF6VectorIN3KJS5UCharELm0EE15reserveCapacityEm -__ZN3WTF6VectorIPN3KJS7UStringELm0EE15reserveCapacityEm -__ZN3WTF6VectorIPN3KJS10IdentifierELm0EE15reserveCapacityEm -__Z10kjsyyparsev -__Z8kjsyylexv -__ZN3KJS5Lexer3lexEv -__ZN3KJS5Lexer14makeIdentifierERKN3WTF6VectorINS_5UCharELm0EEE -__ZN3KJS10Identifier3addEPKNS_5UCharEi -__ZN3KJS5Lexer15matchPunctuatorEiiii -__ZN3KJS7UStringC2ERKN3WTF6VectorINS_5UCharELm0EEE -__ZN3KJS14ExpressionNodeC2ENS_6JSTypeE -__ZN3KJS16ParserRefCountedC2Ev -__ZN3KJS7UStringC1ERKS0_ -__ZN3KJS4NodeC2Ev -__ZN3KJS10IdentifierC1ERKS0_ -__ZN3WTF6RefPtrIN3KJS14ExpressionNodeEEC1EPS2_ -__ZN3KJS16ParserRefCounted3refEv -__ZN3WTF6RefPtrIN3KJS12PropertyNodeEEC1EPS2_ -__ZN3WTF10ListRefPtrIN3KJS16PropertyListNodeEEC1Ev -__ZN3KJS11ResolveNodeC1ERKNS_10IdentifierE -__ZN3KJS14ExpressionNodeC2Ev -__ZN3WTF10ListRefPtrIN3KJS16ArgumentListNodeEEC1Ev -__Z20makeFunctionCallNodePN3KJS14ExpressionNodeEPNS_13ArgumentsNodeE -__ZNK3KJS15DotAccessorNode10isLocationEv -__ZNK3KJS14ExpressionNode13isResolveNodeEv -__ZNK3KJS14ExpressionNode21isBracketAccessorNodeEv -__Z14makeNumberNoded -__Z14makeNegateNodePN3KJS14ExpressionNodeE -__ZNK3KJS10NumberNode8isNumberEv -__ZN3KJS19ImmediateNumberNode8setValueEd -__ZN3KJS5lexerEv -__ZN3KJS5Lexer10scanRegExpEv -__ZN3KJS6RegExp6createERKNS_7UStringES3_ -__ZNK3KJS7UString4findENS_5UCharEi -__ZN3KJS17ObjectLiteralNodeC1EPNS_16PropertyListNodeE -__Z14compileBracketiPiPPhPPKtS3_P9ErrorCodeiS_S_R11CompileData -__ZN3KJS16FunctionBodyNode6createEPNS_14SourceElementsEPN3WTF6VectorISt4pairINS_10IdentifierEjELm16EEEPNS4_IPNS_12FuncDeclNodeELm16EEE -__ZN3KJS16FunctionBodyNodeC2EPNS_14SourceElementsEPN3WTF6VectorISt4pairINS_10IdentifierEjELm16EEEPNS4_IPNS_12FuncDeclNodeELm16EEE -__ZN3KJS9ScopeNodeC2EPNS_14SourceElementsEPN3WTF6VectorISt4pairINS_10IdentifierEjELm16EEEPNS4_IPNS_12FuncDeclNodeELm16EEE -__ZN3KJS9BlockNodeC1EPNS_14SourceElementsE -__ZN3KJS13StatementNodeC2Ev -__ZN3WTF6RefPtrIN3KJS13ParameterNodeEEC1EPS2_ -__ZN3WTF6RefPtrIN3KJS16FunctionBodyNodeEEC1EPS2_ -__ZN3KJS12FuncExprNode9addParamsEv -__ZN3WTF10ListRefPtrIN3KJS13ParameterNodeEEC1Ev -__ZN3KJS10ReturnNodeC1EPNS_14ExpressionNodeE -__Z23allowAutomaticSemicolonv -__ZN3KJS14SourceElementsC1Ev -__ZN3WTF10PassRefPtrIN3KJS13StatementNodeEEC1EPS2_ -__ZN3KJS14SourceElements6appendEN3WTF10PassRefPtrINS_13StatementNodeEEE -__ZNK3KJS13StatementNode16isEmptyStatementEv -__ZN3WTF6VectorINS_6RefPtrIN3KJS13StatementNodeEEELm0EE14expandCapacityEm -__ZN3WTF6VectorINS_6RefPtrIN3KJS13StatementNodeEEELm0EE15reserveCapacityEm -__ZN3WTF6VectorIN3KJS10IdentifierELm0EE14expandCapacityEmPKS2_ -__ZN3WTF6VectorIN3KJS10IdentifierELm0EE14expandCapacityEm -__ZN3WTF6VectorIN3KJS10IdentifierELm0EE15reserveCapacityEm -__ZN3KJS20ParserRefCountedDataIN3WTF6VectorISt4pairINS_10IdentifierEjELm16EEEEC1Ev -__Z26appendToVarDeclarationListRPN3KJS20ParserRefCountedDataIN3WTF6VectorISt4pairINS_10IdentifierEjELm16EEEEERKS4_j -__Z20makeVarStatementNodePN3KJS14ExpressionNodeE -__Z14makeAssignNodePN3KJS14ExpressionNodeENS_8OperatorES1_ -__ZN3KJS17ExprStatementNodeC1EPNS_14ExpressionNodeE -__ZN3KJS6IfNodeC2EPNS_14ExpressionNodeEPNS_13StatementNodeE -__Z21mergeDeclarationListsIPN3KJS20ParserRefCountedDataIN3WTF6VectorISt4pairINS0_10IdentifierEjELm16EEEEEET_SA_SA_ -__Z21mergeDeclarationListsIPN3KJS20ParserRefCountedDataIN3WTF6VectorIPNS0_12FuncDeclNodeELm16EEEEEET_S9_S9_ -__ZNK3KJS11ResolveNode10isLocationEv -__ZNK3KJS11ResolveNode13isResolveNodeEv -__Z22combineVarInitializersPN3KJS14ExpressionNodeEPNS_17AssignResolveNodeE -__ZN3KJS14ExpressionNode28optimizeForUnnecessaryResultEv -__ZN3WTF6VectorIPN3KJS10IdentifierELm0EE14expandCapacityEmPKS3_ -__ZN3WTF6VectorIPN3KJS10IdentifierELm0EE14expandCapacityEm -__ZN3KJS12FuncDeclNode9addParamsEv -__ZN3WTF6VectorIPN3KJS12FuncDeclNodeELm16EEC1Ev -__ZN3WTF6VectorISt4pairIN3KJS10IdentifierEjELm16EE6appendIS4_EEvPKT_m -__ZN3KJS16ParserRefCounted5derefEv -__ZN3KJS20ParserRefCountedDataIN3WTF6VectorISt4pairINS_10IdentifierEjELm16EEEED1Ev -__Z12makeLessNodePN3KJS14ExpressionNodeES1_ -__Z15makePostfixNodePN3KJS14ExpressionNodeENS_8OperatorE -__ZN3WTF6RefPtrIN3KJS13StatementNodeEEC1EPS2_ -__ZN3KJS18PostIncResolveNode28optimizeForUnnecessaryResultEv -__ZN3WTF6VectorISt4pairIN3KJS10IdentifierEjELm16EEaSERKS5_ -__ZN3WTF6VectorIPN3KJS12FuncDeclNodeELm16EEaSERKS4_ -__ZNK3KJS14ExpressionNode10isLocationEv -__ZNK3KJS19BracketAccessorNode10isLocationEv -__ZNK3KJS19BracketAccessorNode21isBracketAccessorNodeEv -__ZN3KJS9ForInNodeC1ERKNS_10IdentifierEPNS_14ExpressionNodeES5_PNS_13StatementNodeE -__ZN3KJS9ThrowNodeC1EPNS_14ExpressionNodeE -__Z14makeTypeOfNodePN3KJS14ExpressionNodeE -__ZN3WTF6VectorINS_6RefPtrIN3KJS13StatementNodeEEELm0EEC1Ev -__ZN3WTF6RefPtrIN3KJS14CaseClauseNodeEEC1EPS2_ -__ZN3WTF10ListRefPtrIN3KJS14ClauseListNodeEEC1Ev -__ZN3KJS13CaseBlockNodeC2EPNS_14ClauseListNodeEPNS_14CaseClauseNodeES2_ -__Z11makeAddNodePN3KJS14ExpressionNodeES1_ -__ZN3WTF10ListRefPtrIN3KJS11ElementNodeEEC1Ev -__ZN3WTF6RefPtrIN3KJS11ElementNodeEEC1EPS2_ -__ZNK3KJS18EmptyStatementNode16isEmptyStatementEv -__ZN3KJS9BreakNodeC1Ev -__Z32branchFindFirstAssertedCharacterPKhb -__Z20branchNeedsLineStartPKhjj -__ZN3KJS10IdentifierC1ERKNS_7UStringE -__ZN3WTF6RefPtrIN3KJS7UString3RepEED1Ev -__ZN3KJS9CommaNodeC2EPNS_14ExpressionNodeES2_ -__Z14makePrefixNodePN3KJS14ExpressionNodeENS_8OperatorE -__ZN3WTF6RefPtrIN3KJS13ArgumentsNodeEEC1EPS2_ -__ZN3WTF6VectorIPN3KJS7UStringELm0EE14expandCapacityEmPKS3_ -__ZN3WTF6VectorIPN3KJS7UStringELm0EE14expandCapacityEm -__ZN3WTF6VectorIN3KJS5UCharELm0EE14expandCapacityEmPKS2_ -__ZN3WTF6VectorIN3KJS5UCharELm0EE14expandCapacityEm -__ZNK3KJS14ExpressionNode8isNumberEv -__ZN3KJS19PlaceholderTrueNodeC1Ev -__ZN3KJS18EmptyStatementNodeC1Ev -__Z14makeDeleteNodePN3KJS14ExpressionNodeE -__Z15isCountedRepeatPKtS0_ -__ZN3KJS12ContinueNodeC1Ev -__ZN3KJS9ForInNodeC1EPNS_14ExpressionNodeES2_PNS_13StatementNodeE -__ZN3KJS18PostDecResolveNode28optimizeForUnnecessaryResultEv -__Z17bracketIsAnchoredPKh -__ZN3WTF6VectorISt4pairIN3KJS10IdentifierEjELm16EE14expandCapacityEmPKS4_ -__ZN3WTF6VectorISt4pairIN3KJS10IdentifierEjELm16EE14expandCapacityEm -__ZN3WTF6VectorISt4pairIN3KJS10IdentifierEjELm16EE15reserveCapacityEm -__ZN3KJS7UString4fromEd -_kjs_dtoa -_d2b -_Balloc -__ZN3KJS6parserEv -__ZN3KJS6Parser16didFinishParsingEPNS_14SourceElementsEPNS_20ParserRefCountedDataIN3WTF6VectorISt4pairINS_10IdentifierEjELm16EEEEEPNS3_INS5_IPNS_12FuncDeclNodeELm16EEEEEi -__ZN3KJS5Lexer5clearEv -__ZN3WTF25TCMalloc_Central_FreeList11InsertRangeEPvS1_i +__ZN3WTF11fastReallocILb1EEEPvS1_m +__ZN3JSC7UStringC1EPKti +__ZN3JSC7UStringC2EPKti +__ZN3JSC12JSGlobalData12createLeakedEv +__ZN3JSC9Structure18startIgnoringLeaksEv +__ZN3JSC7VPtrSetC2Ev +__ZN3JSC9StructureC1ENS_7JSValueERKNS_8TypeInfoE +__ZN3JSC7JSArrayC1EN3WTF10PassRefPtrINS_9StructureEEE +__ZN3JSC7JSArrayD1Ev +__ZN3JSC7JSArrayD2Ev +__ZN3WTF10RefCountedIN3JSC9StructureEE5derefEv +__ZN3JSC9StructureD1Ev +__ZN3JSC9StructureD2Ev +__ZN3JSC11JSByteArray15createStructureENS_7JSValueE +__ZN3JSC11JSByteArrayD1Ev +__ZN3JSC8JSStringD1Ev +__ZN3JSC10JSFunctionD1Ev +__ZN3JSC10JSFunctionD2Ev +__ZN3JSC8JSObjectD2Ev +__ZN3JSC12JSGlobalDataC2EbRKNS_7VPtrSetE +__ZN3JSC21createIdentifierTableEv +__ZN3JSC17CommonIdentifiersC1EPNS_12JSGlobalDataE +__ZN3JSC17CommonIdentifiersC2EPNS_12JSGlobalDataE +__ZN3JSC10Identifier3addEPNS_12JSGlobalDataEPKc +__ZN3WTF7HashSetIPN3JSC7UString3RepENS_7StrHashIS4_EENS_10HashTraitsIS4_EEE3addIPKcNS1_17CStringTranslatorEEESt4pairINS_24HashT +__ZN3WTF9HashTableIPN3JSC7UString3RepES4_NS_17IdentityExtractorIS4_EENS_7StrHashIS4_EENS_10HashTraitsIS4_EESA_E6rehashEi +__ZN3WTF9HashTableIPKcSt4pairIS2_NS_6RefPtrIN3JSC7UString3RepEEEENS_18PairFirstExtractorIS9_EENS_7PtrHashIS2_EENS_14PairHashTra +__ZN3WTF6RefPtrIN3JSC7UString3RepEED1Ev +__ZN3JSC12SmallStringsC1Ev +__ZN3JSC19ExecutableAllocator17intializePageSizeEv +__ZN3JSC14ExecutablePool11systemAllocEm +__ZN3JSC5LexerC1EPNS_12JSGlobalDataE +__ZN3JSC5LexerC2EPNS_12JSGlobalDataE +__ZN3JSC11InterpreterC1Ev +__ZN3JSC11InterpreterC2Ev +__ZN3JSC11Interpreter14privateExecuteENS0_13ExecutionFlagEPNS_12RegisterFileEPNS_9ExecStateEPNS_7JSValueE +__ZN3WTF7HashMapIPvN3JSC8OpcodeIDENS_7PtrHashIS1_EENS_10HashTraitsIS1_EENS6_IS3_EEE3addERKS1_RKS3_ +__ZN3WTF9HashTableIPvSt4pairIS1_N3JSC8OpcodeIDEENS_18PairFirstExtractorIS5_EENS_7PtrHashIS1_EENS_14PairHashTraitsINS_10HashTrai +__ZN3JSC8JITStubsC1EPNS_12JSGlobalDataE +__ZN3JSC3JITC1EPNS_12JSGlobalDataEPNS_9CodeBlockE +__ZN3JSC3JITC2EPNS_12JSGlobalDataEPNS_9CodeBlockE +__ZN3JSC3JIT35privateCompileCTIMachineTrampolinesEPN3WTF6RefPtrINS_14ExecutablePoolEEEPNS_12JSGlobalDataEPPvS9_S9_S9_S9_S9_ +__ZN3JSC12X86Assembler23X86InstructionFormatter11oneByteOp64ENS0_15OneByteOpcodeIDEiNS_3X8610RegisterIDE +__ZN3JSC12X86Assembler3jCCENS0_9ConditionE +__ZN3JSC23MacroAssemblerX86Common4moveENS_22AbstractMacroAssemblerINS_12X86AssemblerEE6ImmPtrENS_3X8610RegisterIDE +__ZN3JSC12X86Assembler23X86InstructionFormatter11oneByteOp64ENS0_15OneByteOpcodeIDEiNS_3X8610RegisterIDEi +__ZN3JSC12X86Assembler23X86InstructionFormatter9oneByteOpENS0_15OneByteOpcodeIDEiNS_3X8610RegisterIDE +__ZN3JSC15AssemblerBuffer11ensureSpaceEi +__ZN3JSC20MacroAssemblerX86_6413branchTestPtrENS_23MacroAssemblerX86Common9ConditionENS_3X8610RegisterIDENS_22AbstractMacroAsse +__ZN3JSC12X86Assembler23X86InstructionFormatter9oneByteOpENS0_15OneByteOpcodeIDENS_3X8610RegisterIDE +__ZN3JSC20MacroAssemblerX86_644callEv +__ZN3JSC12X86Assembler23X86InstructionFormatter9oneByteOpENS0_15OneByteOpcodeIDEiNS_3X8610RegisterIDEi +__ZN3JSC3JIT32compileOpCallInitializeCallFrameEv +__ZN3JSC12X86Assembler23X86InstructionFormatter11memoryModRMEiNS_3X8610RegisterIDEi +__ZN3JSC20MacroAssemblerX86_6421makeTailRecursiveCallENS_22AbstractMacroAssemblerINS_12X86AssemblerEE4JumpE +__ZN3JSC14TimeoutCheckerC1Ev +__ZN3JSC4HeapC1EPNS_12JSGlobalDataE +__ZN3JSC27startProfilerServerIfNeededEv ++[ProfilerServer sharedProfileServer] +-[ProfilerServer init] +__ZN3JSC9Structure17stopIgnoringLeaksEv +__ZN3JSC4Heap8allocateEm +__ZN3JSCL13allocateBlockILNS_8HeapTypeE0EEEPNS_14CollectorBlockEv +__ZN3JSC4Heap4heapENS_7JSValueE +__ZN3JSC4Heap7protectENS_7JSValueE +__ZN3WTF7HashMapIPN3JSC6JSCellEjNS_7PtrHashIS3_EENS_10HashTraitsIS3_EENS6_IjEEE3addERKS3_RKj +__ZN3WTF9HashTableIPN3JSC6JSCellESt4pairIS3_jENS_18PairFirstExtractorIS5_EENS_7PtrHashIS3_EENS_14PairHashTraitsINS_10HashTraits +__ZN3JSC14JSGlobalObjectnwEmPNS_12JSGlobalDataE +__ZN3JSC14JSGlobalObject4initEPNS_8JSObjectE +__ZN3JSC14JSGlobalObject5resetENS_7JSValueE +__ZN3JSC4Heap12heapAllocateILNS_8HeapTypeE0EEEPvm +__ZN3JSC8jsStringEPNS_12JSGlobalDataERKNS_7UStringE +__ZN3JSC12SmallStrings17createEmptyStringEPNS_12JSGlobalDataE +__ZN3JSC7UStringC1EPKc +__ZN3JSCL9createRepEPKc +__ZN3JSC8JSObject9putDirectERKNS_10IdentifierENS_7JSValueEjbRNS_15PutPropertySlotE +__ZN3JSC9Structure40addPropertyTransitionToExistingStructureEPS0_RKNS_10IdentifierEjRm +__ZN3JSC9Structure3getERKNS_10IdentifierERj +__ZN3JSC9Structure21addPropertyTransitionEPS0_RKNS_10IdentifierEjRm +__ZN3JSC9Structure3putERKNS_10IdentifierEj +__ZN3JSC8JSObject26putDirectWithoutTransitionERKNS_10IdentifierENS_7JSValueEj +__ZN3JSC9Structure28addPropertyWithoutTransitionERKNS_10IdentifierEj +__ZN3JSC17FunctionPrototype21addFunctionPropertiesEPNS_9ExecStateEPNS_9StructureEPPNS_10JSFunctionES7_ +__ZN3JSC10JSFunctionC2EPNS_9ExecStateEN3WTF10PassRefPtrINS_9StructureEEEiRKNS_10IdentifierEPFNS_7JSValueES2_PNS_8JSObjectESA_RK +__ZN3JSC12JSGlobalData17createNativeThunkEv +__ZN3JSC16FunctionBodyNode17createNativeThunkEPNS_12JSGlobalDataE +__ZN3WTF6VectorINS_6RefPtrIN3JSC21ParserArenaRefCountedEEELm0EE15reserveCapacityEm +__ZN3JSC11ParserArena5resetEv +__ZN3JSC8JSObject34putDirectFunctionWithoutTransitionEPNS_9ExecStateEPNS_16InternalFunctionEj +__ZN3JSC15ObjectPrototypeC2EPNS_9ExecStateEN3WTF10PassRefPtrINS_9StructureEEEPS5_ +__ZN3JSC9Structure26rehashPropertyMapHashTableEj +__ZN3JSC15StringPrototypeC2EPNS_9ExecStateEN3WTF10PassRefPtrINS_9StructureEEE +__ZN3JSC16BooleanPrototypeC2EPNS_9ExecStateEN3WTF10PassRefPtrINS_9StructureEEEPS5_ +__ZN3JSC15NumberPrototypeC2EPNS_9ExecStateEN3WTF10PassRefPtrINS_9StructureEEEPS5_ +__ZN3JSC15RegExpPrototypeC2EPNS_9ExecStateEN3WTF10PassRefPtrINS_9StructureEEEPS5_ +__ZN3JSC14ErrorPrototypeC2EPNS_9ExecStateEN3WTF10PassRefPtrINS_9StructureEEEPS5_ +__ZN3JSC20NativeErrorPrototypeC2EPNS_9ExecStateEN3WTF10PassRefPtrINS_9StructureEEERKNS_7UStringES9_ +__ZN3JSC17ObjectConstructorC2EPNS_9ExecStateEN3WTF10PassRefPtrINS_9StructureEEEPNS_15ObjectPrototypeE +__ZN3JSC19FunctionConstructorC2EPNS_9ExecStateEN3WTF10PassRefPtrINS_9StructureEEEPNS_17FunctionPrototypeE +__ZNK3JSC16InternalFunction9classInfoEv +__ZN3JSC16ArrayConstructorC2EPNS_9ExecStateEN3WTF10PassRefPtrINS_9StructureEEEPNS_14ArrayPrototypeE +__ZNK3JSC14ArrayPrototype9classInfoEv +__ZN3JSC17StringConstructorC2EPNS_9ExecStateEN3WTF10PassRefPtrINS_9StructureEEEPS5_PNS_15StringPrototypeE +__ZNK3JSC15StringPrototype9classInfoEv +__ZN3JSC18BooleanConstructorC2EPNS_9ExecStateEN3WTF10PassRefPtrINS_9StructureEEEPNS_16BooleanPrototypeE +__ZNK3JSC13BooleanObject9classInfoEv +__ZN3JSC17NumberConstructorC2EPNS_9ExecStateEN3WTF10PassRefPtrINS_9StructureEEEPNS_15NumberPrototypeE +__ZN3JSC15DateConstructorC2EPNS_9ExecStateEN3WTF10PassRefPtrINS_9StructureEEEPS5_PNS_13DatePrototypeE +__ZNK3JSC13DatePrototype9classInfoEv +__ZN3JSC17RegExpConstructorC2EPNS_9ExecStateEN3WTF10PassRefPtrINS_9StructureEEEPNS_15RegExpPrototypeE +__ZN3JSC16ErrorConstructorC2EPNS_9ExecStateEN3WTF10PassRefPtrINS_9StructureEEEPNS_14ErrorPrototypeE +__ZNK3JSC13ErrorInstance9classInfoEv +__ZN3JSC22NativeErrorConstructorC2EPNS_9ExecStateEN3WTF10PassRefPtrINS_9StructureEEEPNS_20NativeErrorPrototypeE +__ZN3JSC10Identifier11addSlowCaseEPNS_12JSGlobalDataEPNS_7UString3RepE +__ZN3WTF7HashSetIPN3JSC7UString3RepENS_7StrHashIS4_EENS_10HashTraitsIS4_EEE3addERKS4_ +__ZN3JSC10MathObjectC2EPNS_9ExecStateEN3WTF10PassRefPtrINS_9StructureEEE +__ZN3JSC12SmallStrings24singleCharacterStringRepEh +__ZN3WTF7HashMapINS_6RefPtrIN3JSC7UString3RepEEENS2_16SymbolTableEntryENS2_17IdentifierRepHashENS_10HashTraitsIS5_EENS2_26Symbo +__ZN3WTF9HashTableINS_6RefPtrIN3JSC7UString3RepEEESt4pairIS5_NS2_16SymbolTableEntryEENS_18PairFirstExtractorIS8_EENS2_17Identif +__ZN3JSC17PrototypeFunctionC2EPNS_9ExecStateEN3WTF10PassRefPtrINS_9StructureEEEiRKNS_10IdentifierEPFNS_7JSValueES2_PNS_8JSObjec +__ZN3JSC9Structure25changePrototypeTransitionEPS0_NS_7JSValueE +__ZN3JSC9Structure17copyPropertyTableEv +__ZN3JSC14JSGlobalObject10globalExecEv +__ZN3JSC10Identifier3addEPNS_9ExecStateEPKc +__ZN3JSC4Heap9unprotectENS_7JSValueE +__ZN3JSC6JSCellnwEmPNS_9ExecStateE +__ZN3JSC14TimeoutChecker5resetEv +__ZN3JSC8evaluateEPNS_9ExecStateERNS_10ScopeChainERKNS_10SourceCodeENS_7JSValueE +__ZN3JSC6JSLock4lockEb +__ZN3JSC6Parser5parseINS_11ProgramNodeEEEN3WTF10PassRefPtrIT_EEPNS_9ExecStateEPNS_8DebuggerERKNS_10SourceCodeEPiPNS_7UStringE +__ZN3JSC6Parser5parseEPNS_12JSGlobalDataEPiPNS_7UStringE +__ZN3JSC7UStringaSEPKc +__Z10jscyyparsePv +__ZN3JSC5Lexer3lexEPvS1_ +__ZN3JSC10Identifier3addEPNS_12JSGlobalDataEPKti +__ZN3WTF7HashSetIPN3JSC7UString3RepENS_7StrHashIS4_EENS_10HashTraitsIS4_EEE3addINS1_11UCharBufferENS1_21UCharBufferTranslatorEE +__ZN3JSC15SegmentedVectorINS_10IdentifierELm64EE6appendIS1_EEvRKT_ +__ZNK3JSC9HashTable11createTableEPNS_12JSGlobalDataE +__ZN3JSC20ParserArenaDeletablenwEmPNS_12JSGlobalDataE +__ZN3WTF6VectorIPN3JSC20ParserArenaDeletableELm0EE15reserveCapacityEm +__ZN3JSC5Lexer10sourceCodeEiii +__ZN3JSC16FunctionBodyNode13finishParsingERKNS_10SourceCodeEPNS_13ParameterNodeE +__ZN3WTF6VectorIN3JSC10IdentifierELm0EE14expandCapacityEm +__ZN3WTF6VectorIPN3JSC12FuncDeclNodeELm0EE14expandCapacityEm +__ZN3JSC14SourceElements6appendEPNS_13StatementNodeE +__ZNK3JSC13StatementNode16isEmptyStatementEv +__ZN3WTF6VectorIPN3JSC13StatementNodeELm0EE14expandCapacityEm +__ZL20makeFunctionCallNodePvN3JSC8NodeInfoIPNS0_14ExpressionNodeEEENS1_IPNS0_13ArgumentsNodeEEEiii +__ZNK3JSC11ResolveNode10isLocationEv +__ZNK3JSC11ResolveNode13isResolveNodeEv +__ZN3JSC5Lexer7record8Ei +__ZN3JSC5Lexer10scanRegExpEv +__ZN3JSC7UStringC2ERKN3WTF6VectorItLm0EEE +__ZN3JSC7UString3Rep7destroyEv +__ZN3JSC5Lexer5clearEv +__ZN3JSC10Identifier6removeEPNS_7UString3RepE +__ZN3WTF6VectorIN3JSC10IdentifierELm64EE14shrinkCapacityEm +__ZN3JSC9ScopeNodeC2EPNS_12JSGlobalDataERKNS_10SourceCodeEPNS_14SourceElementsEPN3WTF6VectorISt4pairINS_10IdentifierEjELm0EEEPN +__ZN3WTF6VectorIPN3JSC13StatementNodeELm0EE14shrinkCapacityEm +__ZN3JSC11ParserArena10removeLastEv +__ZNK3JSC8JSObject8toObjectEPNS_9ExecStateE +__ZN3JSC11Interpreter7executeEPNS_11ProgramNodeEPNS_9ExecStateEPNS_14ScopeChainNodeEPNS_8JSObjectEPNS_7JSValueE +__ZN3JSC11ProgramNode16generateBytecodeEPNS_14ScopeChainNodeE +__ZN3JSC9CodeBlockC2EPNS_9ScopeNodeENS_8CodeTypeEN3WTF10PassRefPtrINS_14SourceProviderEEEj +__ZN3WTF7HashSetIPN3JSC16ProgramCodeBlockENS_7PtrHashIS3_EENS_10HashTraitsIS3_EEE3addERKS3_ +__ZN3WTF9HashTableIPN3JSC16ProgramCodeBlockES3_NS_17IdentityExtractorIS3_EENS_7PtrHashIS3_EENS_10HashTraitsIS3_EES9_E6rehashEi +__ZN3JSC17BytecodeGeneratorC2EPNS_11ProgramNodeEPKNS_8DebuggerERKNS_10ScopeChainEPN3WTF7HashMapINS9_6RefPtrINS_7UString3RepEEEN +__ZN3WTF6VectorIN3JSC11InstructionELm0EE14expandCapacityEm +__ZN3JSC9Structure22toDictionaryTransitionEPS0_ +__ZN3JSC8JSObject12removeDirectERKNS_10IdentifierE +__ZN3JSC9Structure31removePropertyWithoutTransitionERKNS_10IdentifierE +__ZN3JSC9Structure6removeERKNS_10IdentifierE +__ZN3JSC17BytecodeGenerator12addGlobalVarERKNS_10IdentifierEbRPNS_10RegisterIDE +__ZN3JSC17BytecodeGenerator15emitNewFunctionEPNS_10RegisterIDEPNS_12FuncDeclNodeE +__ZN3JSC9CodeBlock25createRareDataIfNecessaryEv +__ZN3JSC17BytecodeGenerator11newRegisterEv +__ZN3JSC9Structure24fromDictionaryTransitionEPS0_ +__ZN3JSC17BytecodeGenerator8generateEv +__ZN3JSC11ProgramNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZN3JSC17BytecodeGenerator13emitDebugHookENS_11DebugHookIDEii +__ZN3JSC17BytecodeGenerator11addConstantENS_7JSValueE +__ZN3WTF9HashTableIPvSt4pairIS1_jENS_18PairFirstExtractorIS3_EENS_7PtrHashIS1_EENS_14PairHashTraitsIN3JSC17JSValueHashTraitsENS +__ZN3WTF6VectorIN3JSC8RegisterELm0EE14expandCapacityEm +__ZN3JSC17BytecodeGenerator8emitMoveEPNS_10RegisterIDES2_ +__ZN3JSC17BytecodeGenerator8emitNodeEPNS_10RegisterIDEPNS_4NodeE +__ZN3WTF6VectorIN3JSC8LineInfoELm0EE14expandCapacityEm +__ZN3JSC12FuncDeclNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZN3JSC17ExprStatementNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZN3JSC23FunctionCallResolveNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZN3JSC17BytecodeGenerator11registerForERKNS_10IdentifierE +__ZN3JSC17BytecodeGenerator8emitCallENS_8OpcodeIDEPNS_10RegisterIDES3_S3_PNS_13ArgumentsNodeEjjj +__ZN3JSC16ArgumentListNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZN3JSC12FuncExprNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZN3JSC17BytecodeGenerator25emitNewFunctionExpressionEPNS_10RegisterIDEPNS_12FuncExprNodeE +__ZN3WTF6VectorIN3JSC19ExpressionRangeInfoELm0EE14expandCapacityEm +__ZN3WTF6VectorIN3JSC12CallLinkInfoELm0EE14expandCapacityEm +__ZN3JSC11ResolveNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZN3JSC12JSGlobalData22numericCompareFunctionEPNS_9ExecStateE +__ZNK3JSC21UStringSourceProvider6lengthEv +__ZNK3JSC21UStringSourceProvider4dataEv +__ZN3JSC19extractFunctionBodyEPNS_11ProgramNodeE +__ZNK3JSC17ExprStatementNode15isExprStatementEv +__ZNK3JSC12FuncExprNode14isFuncExprNodeEv +__ZN3JSC16FunctionBodyNode16generateBytecodeEPNS_14ScopeChainNodeE +__ZN3JSC6Parser14reparseInPlaceEPNS_12JSGlobalDataEPNS_16FunctionBodyNodeE +__ZL11makeSubNodePvPN3JSC14ExpressionNodeES2_b +__ZN3JSC14ExpressionNode14stripUnaryPlusEv +__ZNK3JSC14ExpressionNode8isNumberEv +__ZN3JSC9CodeBlockC1EPNS_9ScopeNodeENS_8CodeTypeEN3WTF10PassRefPtrINS_14SourceProviderEEEj +__ZN3JSC17BytecodeGeneratorC2EPNS_16FunctionBodyNodeEPKNS_8DebuggerERKNS_10ScopeChainEPN3WTF7HashMapINS9_6RefPtrINS_7UString3Re +__ZN3JSC17BytecodeGenerator12addParameterERKNS_10IdentifierE +__ZN3JSC16FunctionBodyNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZN3JSC9BlockNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZN3JSC10ReturnNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZN3JSC12BinaryOpNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZNK3JSC11ResolveNode6isPureERNS_17BytecodeGeneratorE +__ZN3JSC17BytecodeGenerator12newTemporaryEv +__ZN3JSC17BytecodeGenerator12emitBinaryOpENS_8OpcodeIDEPNS_10RegisterIDES3_S3_NS_12OperandTypesE +__ZN3JSC17BytecodeGenerator10emitReturnEPNS_10RegisterIDE +__ZNK3JSC9BlockNode7isBlockEv +__ZNK3JSC10ReturnNode12isReturnNodeEv +__ZN3JSC9CodeBlock11shrinkToFitEv +__ZN3WTF6VectorIN3JSC11InstructionELm0EE14shrinkCapacityEm +__ZN3WTF6VectorIN3JSC17StructureStubInfoELm0EE14shrinkCapacityEm +__ZN3WTF6VectorIPN3JSC12CallLinkInfoELm0EE14shrinkCapacityEm +__ZN3WTF6VectorIN3JSC10IdentifierELm0EE14shrinkCapacityEm +__ZN3JSC11ParserArenaD1Ev +__ZN3JSC11ResolveNodeD0Ev +__ZN3JSC7SubNodeD0Ev +__ZN3JSC10ReturnNodeD0Ev +__ZN3JSC14SourceElementsD0Ev +__ZN3JSC9BlockNodeD0Ev +__ZN3JSC17BytecodeGeneratorD2Ev +__ZN3WTF6VectorIN3JSC11InstructionELm0EEaSERKS3_ +__ZThn16_N3JSC11ProgramNodeD0Ev +__ZN3JSC11ProgramNodeD0Ev +__ZN3JSC13ParameterNodeD0Ev +__ZN3JSC17ExprStatementNodeD0Ev +__ZThn16_N3JSC12FuncExprNodeD0Ev +__ZN3JSC12FuncExprNodeD0Ev +__ZThn16_N3JSC16FunctionBodyNodeD0Ev +__ZN3JSC16FunctionBodyNodeD0Ev +__ZN3JSC9CodeBlockD1Ev +__ZN3JSC9CodeBlockD2Ev +__ZN3JSC21UStringSourceProviderD0Ev +__ZN3WTF6VectorIN3JSC19ExpressionRangeInfoELm0EE14shrinkCapacityEm +__ZN3WTF6VectorIN3JSC8LineInfoELm0EE14shrinkCapacityEm +__ZN3WTF6VectorINS_6RefPtrIN3JSC12FuncDeclNodeEEELm0EE14shrinkCapacityEm +__ZN3WTF6VectorIN3JSC15SimpleJumpTableELm0EE14shrinkCapacityEm +__ZN3WTF6VectorIN3JSC15StringJumpTableELm0EE14shrinkCapacityEm +__ZN3JSC15ParserArenaDataIN3WTF6VectorIPNS_12FuncDeclNodeELm0EEEED0Ev +__ZN3JSC16ArgumentListNodeD0Ev +__ZN3JSC13ArgumentsNodeD0Ev +__ZN3JSC23FunctionCallResolveNodeD0Ev +__ZN3JSC14JSGlobalObject13copyGlobalsToERNS_12RegisterFileE +__ZN3JSC3JIT14privateCompileEv +__ZN3JSC3JIT22privateCompileMainPassEv +__ZN3JSC3JIT13emit_op_enterEPNS_11InstructionE +__ZN3JSC3JIT16emit_op_new_funcEPNS_11InstructionE +__ZN3JSC20MacroAssemblerX86_648storePtrENS_22AbstractMacroAssemblerINS_12X86AssemblerEE6ImmPtrENS3_15ImplicitAddressE +__ZN3JSC11JITStubCall4callEj +__ZN3WTF6VectorIN3JSC10CallRecordELm0EE14expandCapacityEm +__ZN3JSC3JIT11emit_op_movEPNS_11InstructionE +__ZN3JSC3JIT20emit_op_new_func_expEPNS_11InstructionE +__ZN3JSC3JIT12emit_op_callEPNS_11InstructionE +__ZN3JSC3JIT13compileOpCallENS_8OpcodeIDEPNS_11InstructionEj +__ZN3WTF6VectorIN3JSC13SlowCaseEntryELm0EE14expandCapacityEm +__ZN3JSC3JIT11emit_op_endEPNS_11InstructionE +__ZN3JSC11JITStubCall4callEv +__ZN3WTF6VectorIN3JSC9JumpTableELm0EE14shrinkCapacityEm +__ZN3JSC3JIT23privateCompileSlowCasesEv +__ZN3JSC3JIT16emitSlow_op_callEPNS_11InstructionERPNS_13SlowCaseEntryE +__ZN3JSC3JIT21compileOpCallSlowCaseEPNS_11InstructionERPNS_13SlowCaseEntryEjNS_8OpcodeIDE +__ZN3JSC3JIT22compileOpCallSetupArgsEPNS_11InstructionE +__ZN3JSC9CodeBlock10setJITCodeERNS_10JITCodeRefE +__ZN3JSC17BytecodeGenerator18dumpsGeneratedCodeEv +__ZN3WTF10RefCountedIN3JSC14ExecutablePoolEE5derefEv +_ctiTrampoline +__ZN3JSC8JITStubs15cti_op_new_funcEPPv +__ZN3JSC12FuncDeclNode12makeFunctionEPNS_9ExecStateEPNS_14ScopeChainNodeE +__ZN3JSC8JITStubs19cti_op_new_func_expEPPv +__ZN3JSC12FuncExprNode12makeFunctionEPNS_9ExecStateEPNS_14ScopeChainNodeE +__ZN3JSC8JITStubs22cti_op_call_JSFunctionEPPv +__ZN3JSC16FunctionBodyNode15generateJITCodeEPNS_14ScopeChainNodeE +__ZN3JSC10IfElseNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZN3JSC17BytecodeGenerator8newLabelEv +__ZN3JSC15DotAccessorNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZN3JSC17BytecodeGenerator11emitResolveEPNS_10RegisterIDERKNS_10IdentifierE +__ZN3JSC17BytecodeGenerator18findScopedPropertyERKNS_10IdentifierERiRmbRPNS_8JSObjectE +__ZNK3JSC16JSVariableObject16isVariableObjectEv +__ZN3JSC17BytecodeGenerator16emitGetScopedVarEPNS_10RegisterIDEmiNS_7JSValueE +__ZN3JSC17BytecodeGenerator11emitGetByIdEPNS_10RegisterIDES2_RKNS_10IdentifierE +__ZN3WTF6VectorIN3JSC17StructureStubInfoELm0EE14expandCapacityEm +__ZN3JSC17BytecodeGenerator11addConstantERKNS_10IdentifierE +__ZN3WTF7HashMapINS_6RefPtrIN3JSC7UString3RepEEEiNS2_17IdentifierRepHashENS_10HashTraitsIS5_EENS2_17BytecodeGenerator28Identifi +__ZN3WTF9HashTableINS_6RefPtrIN3JSC7UString3RepEEESt4pairIS5_iENS_18PairFirstExtractorIS7_EENS2_17IdentifierRepHashENS_14PairHa +__ZN3JSC17BytecodeGenerator15emitJumpIfFalseEPNS_10RegisterIDEPNS_5LabelE +__ZNK3JSC14JSGlobalObject14isDynamicScopeEv +__ZN3JSC17BytecodeGenerator19emitResolveFunctionEPNS_10RegisterIDES2_RKNS_10IdentifierE +__ZN3JSC10StringNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZN3JSC17BytecodeGenerator8emitLoadEPNS_10RegisterIDERKNS_10IdentifierE +__ZN3WTF9HashTableIPN3JSC7UString3RepESt4pairIS4_PNS1_8JSStringEENS_18PairFirstExtractorIS8_EENS1_17IdentifierRepHashENS_14Pair +__ZN3JSC11BooleanNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZN3JSC17BytecodeGenerator8emitJumpEPNS_5LabelE +__ZN3JSC17BytecodeGenerator9emitLabelEPNS_5LabelE +__ZN3WTF6VectorIjLm0EE15reserveCapacityEm +__ZN3JSC6IfNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZNK3JSC13StatementNode12isReturnNodeEv +__ZN3JSC15DotAccessorNodeD0Ev +__ZN3JSC10StringNodeD0Ev +__ZN3JSC11BooleanNodeD0Ev +__ZN3JSC6IfNodeD0Ev +__ZN3JSC10IfElseNodeD0Ev +__ZN3JSC3JIT22emit_op_get_global_varEPNS_11InstructionE +__ZN3JSC3JIT29emitGetVariableObjectRegisterENS_3X8610RegisterIDEiS2_ +__ZN3JSC3JIT17emit_op_get_by_idEPNS_11InstructionE +__ZN3JSC3JIT21compileGetByIdHotPathEiiPNS_10IdentifierEj +__ZN3WTF6VectorIN3JSC13SlowCaseEntryELm0EE14expandCapacityEmPKS2_ +__ZN3JSC3JIT14emit_op_jfalseEPNS_11InstructionE +__ZN3JSC20MacroAssemblerX86_649branchPtrENS_23MacroAssemblerX86Common9ConditionENS_3X8610RegisterIDENS_22AbstractMacroAssembler +__ZN3JSC20MacroAssemblerX86_649branchPtrENS_23MacroAssemblerX86Common9ConditionENS_3X8610RegisterIDES4_ +__ZN3WTF6VectorIN3JSC9JumpTableELm0EE14expandCapacityEmPKS2_ +__ZN3WTF6VectorIN3JSC9JumpTableELm0EE14expandCapacityEm +__ZN3JSC3JIT20emit_op_resolve_funcEPNS_11InstructionE +__ZN3JSC3JIT11emit_op_jmpEPNS_11InstructionE +__ZN3JSC3JIT11emit_op_retEPNS_11InstructionE +__ZN3JSC3JIT21emitSlow_op_get_by_idEPNS_11InstructionERPNS_13SlowCaseEntryE +__ZN3JSC3JIT22compileGetByIdSlowCaseEiiPNS_10IdentifierERPNS_13SlowCaseEntryEj +__ZN3JSC3JIT18emitSlow_op_jfalseEPNS_11InstructionERPNS_13SlowCaseEntryE +__ZN3JSC23MacroAssemblerX86Common12branchTest32ENS0_9ConditionENS_3X8610RegisterIDENS_22AbstractMacroAssemblerINS_12X86Assemble +__ZN3JSC8JITStubs23cti_vm_dontLazyLinkCallEPPv +__ZN3JSC31ctiPatchNearCallByReturnAddressENS_22AbstractMacroAssemblerINS_12X86AssemblerEE22ProcessorReturnAddressEPv +__ZN3JSC8JITStubs23cti_register_file_checkEPPv +__ZN3JSC8JITStubs16cti_op_get_by_idEPPv +__ZNK3JSC7JSValue3getEPNS_9ExecStateERKNS_10IdentifierERNS_12PropertySlotE +__ZN3JSC23setUpStaticFunctionSlotEPNS_9ExecStateEPKNS_9HashEntryEPNS_8JSObjectERKNS_10IdentifierERNS_12PropertySlotE +__ZN3JSC27ctiPatchCallByReturnAddressENS_22AbstractMacroAssemblerINS_12X86AssemblerEE22ProcessorReturnAddressEPv +__ZN3JSC8JITStubs12cti_op_jtrueEPPv +__ZNK3JSC8JSObject9toBooleanEPNS_9ExecStateE +__ZN3JSC8JITStubs19cti_op_resolve_funcEPPv +__ZNK3JSC8JSObject12toThisObjectEPNS_9ExecStateE +__ZNK3JSC8JSString8toStringEPNS_9ExecStateE +__ZN3JSC8JITStubs23cti_op_get_by_id_secondEPPv +__ZN3JSC8JITStubs15tryCacheGetByIDEPNS_9ExecStateEPNS_9CodeBlockEPvNS_7JSValueERKNS_10IdentifierERKNS_12PropertySlotE +__ZN3JSC3JIT26privateCompileGetByIdProtoEPNS_17StructureStubInfoEPNS_9StructureES4_mNS_22AbstractMacroAssemblerINS_12X86Assembl +__ZN3JSC3JIT22compileGetDirectOffsetEPNS_8JSObjectENS_3X8610RegisterIDES4_m +__ZN3JSC8JITStubs19cti_vm_lazyLinkCallEPPv +__ZN3JSC3JIT8linkCallEPNS_10JSFunctionEPNS_9CodeBlockENS_7JITCodeEPNS_12CallLinkInfoEi +__ZN3JSC8JITStubs10cti_op_endEPPv +__ZThn16_N3JSC12FuncDeclNodeD0Ev +__ZN3JSC12FuncDeclNodeD0Ev __ZN3WTF25TCMalloc_Central_FreeList11ShrinkCacheEib -__ZN3WTF25TCMalloc_Central_FreeList18ReleaseListToSpansEPv -__ZN3WTF15deleteAllValuesIPN3KJS16ParserRefCountedEKNS_9HashTableIiiNS_17IdentityExtractorIiEENS_7IntHashIiEENS_10HashTraitsIiEESA_EEEEvRT0_ -__ZN3KJS19BracketAccessorNodeD1Ev -__ZN3KJS11ProgramNodeC2EPNS_14SourceElementsEPN3WTF6VectorISt4pairINS_10IdentifierEjELm16EEEPNS4_IPNS_12FuncDeclNodeELm16EEE -__ZNK3KJS8JSObject8toObjectEPNS_9ExecStateE -__ZN3KJS11ProgramNode7executeEPNS_9ExecStateE -__ZN3KJS11ProgramNode21initializeSymbolTableEPNS_9ExecStateE -__ZN3WTF6VectorImLm0EE6resizeEm -__ZN3WTF6VectorImLm0EE14expandCapacityEm -__ZN3WTF6VectorImLm0EE15reserveCapacityEm -__ZN3WTF9HashTableINS_6RefPtrIN3KJS7UString3RepEEESt4pairIS5_mENS_18PairFirstExtractorIS7_EENS2_17IdentifierRepHashENS_14PairHashTraitsINS2_23IdentifierRepHashTraitsENS2_26SymbolTableIndexHashTraitsEEESC_E3addIS5_mNS_17HashMapTranslatorILb1ES7_NS_18PairBaseHashTraitsISC_SD_EESE_SA_EEEES6_INS_17HashTableIteratorIS5_S7_S9_SA_SE_SC_EEbERKT_RKT0_ -__ZN3WTF9HashTableINS_6RefPtrIN3KJS7UString3RepEEESt4pairIS5_mENS_18PairFirstExtractorIS7_EENS2_17IdentifierRepHashENS_14PairHashTraitsINS2_23IdentifierRepHashTraitsENS2_26SymbolTableIndexHashTraitsEEESC_E6rehashEi -__ZN3KJS14JSGlobalObject18getOwnPropertySlotEPNS_9ExecStateERKNS_10IdentifierERNS_12PropertySlotE -__ZNK3WTF7HashMapINS_6RefPtrIN3KJS7UString3RepEEEmNS2_17IdentifierRepHashENS2_23IdentifierRepHashTraitsENS2_26SymbolTableIndexHashTraitsEE3getEPS4_ -__ZN3KJS11PropertyMap11getLocationERKNS_10IdentifierE -__ZN3KJS6Lookup9findEntryEPKNS_9HashTableERKNS_10IdentifierE -__ZNK3KJS7UString14toStrictUInt32EPb -__ZN3KJS8JSObject18getOwnPropertySlotEPNS_9ExecStateERKNS_10IdentifierERNS_12PropertySlotE -__ZN3WTF6VectorIN3KJS17LocalStorageEntryELm32EE15reserveCapacityEm -__ZN3KJS11FunctionImpC2EPNS_9ExecStateERKNS_10IdentifierEPNS_16FunctionBodyNodeERKNS_10ScopeChainE -__ZN3KJS15ObjectObjectImp9constructEPNS_9ExecStateERKNS_4ListE -__ZN3KJS9ScopeNode22optimizeVariableAccessEPNS_9ExecStateE -__ZN3WTF6VectorIPN3KJS4NodeELm16EE14expandCapacityEm -__ZN3WTF6VectorIPN3KJS4NodeELm16EE15reserveCapacityEm -__ZN3KJS16VarStatementNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS17AssignResolveNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS17ObjectLiteralNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS16PropertyListNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS12PropertyNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS4Node22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPS0_Lm16EEE -__ZN3KJS14LogicalNotNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS14LogicalAndNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS15DotAccessorNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS11ResolveNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS11GreaterNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS19FunctionCallDotNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS13ArgumentsNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS16ArgumentListNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS9EqualNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS18NotStrictEqualNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS6IfNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS17ExprStatementNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS13AssignDotNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS13LogicalOrNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS8WithNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS9BlockNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS23FunctionCallResolveNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS21FunctionCallValueNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS9ArrayNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS11ElementNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS10IfElseNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS7AddNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS6InNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS11NewExprNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS16VarStatementNode7executeEPNS_9ExecStateE -__ZN3KJS18AssignLocalVarNode8evaluateEPNS_9ExecStateE -__ZN3KJS17ObjectLiteralNode8evaluateEPNS_9ExecStateE -__ZN3KJS16PropertyListNode8evaluateEPNS_9ExecStateE -__ZN3KJS10StringNode8evaluateEPNS_9ExecStateE -__ZN3KJS13jsOwnedStringERKNS_7UStringE -__ZN3KJS8JSObject3putEPNS_9ExecStateERKNS_10IdentifierEPNS_7JSValueEi -__ZN3KJS14LogicalNotNode8evaluateEPNS_9ExecStateE -__ZN3KJS14LogicalNotNode17evaluateToBooleanEPNS_9ExecStateE -__ZN3KJS14LogicalAndNode17evaluateToBooleanEPNS_9ExecStateE -__ZN3KJS15DotAccessorNode17evaluateToBooleanEPNS_9ExecStateE -__ZN3KJS11ResolveNode8evaluateEPNS_9ExecStateE -__ZN3KJS11GreaterNode8evaluateEPNS_9ExecStateE -__ZN3KJS19FunctionCallDotNode8evaluateEPNS_9ExecStateE -__ZN3KJS15DotAccessorNode8evaluateEPNS_9ExecStateE -__ZNK3KJS9ExecState19lexicalGlobalObjectEv -__ZNK3KJS9StringImp8toObjectEPNS_9ExecStateE -__ZN3KJS14StringInstance18getOwnPropertySlotEPNS_9ExecStateERKNS_10IdentifierERNS_12PropertySlotE -__ZN3KJS15StringPrototype18getOwnPropertySlotEPNS_9ExecStateERKNS_10IdentifierERNS_12PropertySlotE -__ZN3KJS20staticFunctionGetterEPNS_9ExecStateEPNS_8JSObjectERKNS_10IdentifierERKNS_12PropertySlotE -__ZN3KJS17PrototypeFunctionC1EPNS_9ExecStateEiRKNS_10IdentifierEPFPNS_7JSValueES2_PNS_8JSObjectERKNS_4ListEE -__ZNK3KJS19InternalFunctionImp14implementsCallEv -__ZN3KJS16ArgumentListNode12evaluateListEPNS_9ExecStateERNS_4ListE -__ZN3KJS17PrototypeFunction14callAsFunctionEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS22stringProtoFuncIndexOfEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZNK3KJS14StringInstance9classInfoEv -__ZNK3KJS9StringImp8toStringEPNS_9ExecStateE -__ZNK3KJS7JSValue9toIntegerEPNS_9ExecStateE -__ZNK3KJS7UString4findERKS0_i -__ZN3KJS19ImmediateNumberNode8evaluateEPNS_9ExecStateE -__ZN3KJS14LogicalAndNode8evaluateEPNS_9ExecStateE -__ZN3KJS9EqualNode8evaluateEPNS_9ExecStateE -__ZN3KJS5equalEPNS_9ExecStateEPNS_7JSValueES3_ -__ZN3KJS19FunctionCallDotNode17evaluateToBooleanEPNS_9ExecStateE -__ZN3KJS10RegExpNode8evaluateEPNS_9ExecStateE -__ZN3KJS15RegExpObjectImp15createRegExpImpEPNS_9ExecStateEN3WTF10PassRefPtrINS_6RegExpEEE -__ZN3KJS20stringProtoFuncMatchEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZNK3KJS9RegExpImp9classInfoEv -__ZN3KJS15RegExpObjectImp12performMatchEPNS_6RegExpERKNS_7UStringEiRiS6_PPi -__ZN3KJS6RegExp5matchERKNS_7UStringEiPN3WTF11OwnArrayPtrIiEE -__Z5matchPKtPKhiR9MatchData -__ZNK3KJS8JSObject9toBooleanEPNS_9ExecStateE -__ZN3KJS18NotStrictEqualNode8evaluateEPNS_9ExecStateE -__ZNK3KJS7UString8toUInt32EPbb -__ZNK3KJS7UString8toDoubleEbb -__ZN3KJS11strictEqualEPNS_9ExecStateEPNS_7JSValueES3_ -__ZN3KJS12FuncExprNode8evaluateEPNS_9ExecStateE -__ZN3KJS14JSGlobalObject17tearOffActivationEPNS_9ExecStateEb -__ZN3KJS6IfNode7executeEPNS_9ExecStateE -__ZN3KJS18LocalVarAccessNode8evaluateEPNS_9ExecStateE -__ZN3KJS17ExprStatementNode7executeEPNS_9ExecStateE -__ZN3KJS13AssignDotNode8evaluateEPNS_9ExecStateE -__ZN3KJS11FunctionImp14callAsFunctionEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS17FunctionExecStateC1EPNS_14JSGlobalObjectEPNS_8JSObjectEPNS_16FunctionBodyNodeEPNS_9ExecStateEPNS_11FunctionImpERKNS_4ListE -__ZN3KJS14JSGlobalObject14pushActivationEPNS_9ExecStateE -__ZN3KJS13ActivationImp4initEPNS_9ExecStateE -__ZN3KJS16FunctionBodyNode7executeEPNS_9ExecStateE -__ZN3KJS16FunctionBodyNode21initializeSymbolTableEPNS_9ExecStateE -__ZN3KJS9ForInNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS17AssignBracketNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS19BracketAccessorNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS10ReturnNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS9ForInNode7executeEPNS_9ExecStateE -__ZN3KJS8JSObject16getPropertyNamesEPNS_9ExecStateERNS_17PropertyNameArrayE -__ZNK3KJS11PropertyMap26getEnumerablePropertyNamesERNS_17PropertyNameArrayE -__ZNK3KJS8JSObject9classInfoEv -__ZN3KJS13ActivationImp18getOwnPropertySlotEPNS_9ExecStateERKNS_10IdentifierERNS_12PropertySlotE -__ZN3KJS13ActivationImp3putEPNS_9ExecStateERKNS_10IdentifierEPNS_7JSValueEi -__ZN3KJS17AssignBracketNode8evaluateEPNS_9ExecStateE -__ZNK3KJS6JSCell9getUInt32ERj -__ZN3KJS19BracketAccessorNode8evaluateEPNS_9ExecStateE -__ZN3KJS10ReturnNode7executeEPNS_9ExecStateE -__ZN3KJS14JSGlobalObject13popActivationEv -__ZN3KJS11FunctionImp18getOwnPropertySlotEPNS_9ExecStateERKNS_10IdentifierERNS_12PropertySlotE -__ZN3KJS10NumberNode8evaluateEPNS_9ExecStateE -__ZN3KJS9CommaNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS13ActivationImpC1ERKNS0_14ActivationDataEb -__ZN3WTF6VectorIN3KJS17LocalStorageEntryELm32EEC2ERKS3_ -__ZN3KJS13ActivationImp15argumentsGetterEPNS_9ExecStateEPNS_8JSObjectERKNS_10IdentifierERKNS_12PropertySlotE -__ZN3KJS13ActivationImp21createArgumentsObjectEPNS_9ExecStateE -__ZN3KJS9ArgumentsC2EPNS_9ExecStateEPNS_11FunctionImpERKNS_4ListEPNS_13ActivationImpE -__ZN3KJS14IndexToNameMapC2EPNS_11FunctionImpERKNS_4ListE -__ZN3KJS11FunctionImp16getParameterNameEi -__ZN3KJS7UString4fromEj -__ZN3KJS9Arguments18getOwnPropertySlotEPNS_9ExecStateERKNS_10IdentifierERNS_12PropertySlotE -__ZN3KJS9CommaNode8evaluateEPNS_9ExecStateE -__ZN3KJS8ThisNode8evaluateEPNS_9ExecStateE -__ZN3KJS23FunctionCallResolveNode8evaluateEPNS_9ExecStateE -__ZN3KJS9WhileNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS18PostDecResolveNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS18LocalVarAccessNode17evaluateToBooleanEPNS_9ExecStateE -__ZN3KJS13LogicalOrNode8evaluateEPNS_9ExecStateE -__ZN3KJS11NewExprNode8evaluateEPNS_9ExecStateE -__ZNK3KJS14ArrayObjectImp19implementsConstructEv -__ZN3KJS14ArrayObjectImp9constructEPNS_9ExecStateERKNS_4ListE -__ZN3KJS9WhileNode7executeEPNS_9ExecStateE -__ZN3KJS19PostDecLocalVarNode17evaluateToBooleanEPNS_9ExecStateE -__ZN3KJS8JSObject18getOwnPropertySlotEPNS_9ExecStateEjRNS_12PropertySlotE -__ZN3KJS13ArrayInstance3putEPNS_9ExecStateEjPNS_7JSValueEi -__ZN3KJS15RegExpObjectImp18getOwnPropertySlotEPNS_9ExecStateERKNS_10IdentifierERNS_12PropertySlotE -__ZN3KJS15RegExpObjectImp3putEPNS_9ExecStateERKNS_10IdentifierEPNS_7JSValueEi -__ZN3KJS7ForNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS8LessNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS17PreIncResolveNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS8NullNode8evaluateEPNS_9ExecStateE -__ZN3KJS13ArrayInstance18getOwnPropertySlotEPNS_9ExecStateEjRNS_12PropertySlotE -__ZN3KJS17TypeOfResolveNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS18LocalVarTypeOfNode8evaluateEPNS_9ExecStateE -__ZN3KJS18typeStringForValueEPNS_7JSValueE -__ZNK3KJS8JSObject21masqueradeAsUndefinedEv -__ZNK3KJS8JSObject14implementsCallEv -__ZN3KJS12FuncDeclNode7executeEPNS_9ExecStateE -__ZN3KJS11FunctionImp3putEPNS_9ExecStateERKNS_10IdentifierEPNS_7JSValueEi -__ZN3KJS9ArrayNode8evaluateEPNS_9ExecStateE -__ZN3KJS13ArrayInstanceC2EPNS_8JSObjectERKNS_4ListE -__ZN3KJS13ArrayInstance3putEPNS_9ExecStateERKNS_10IdentifierEPNS_7JSValueEi -__ZN3KJS13ArrayInstance9setLengthEj -__ZN3KJS7ForNode7executeEPNS_9ExecStateE -__ZN3KJS8LessNode17evaluateToBooleanEPNS_9ExecStateE -__ZN3KJS13ArrayInstance18getOwnPropertySlotEPNS_9ExecStateERKNS_10IdentifierERNS_12PropertySlotE -__ZN3KJS13ArrayInstance12lengthGetterEPNS_9ExecStateEPNS_8JSObjectERKNS_10IdentifierERKNS_12PropertySlotE -__ZN3KJS14ArrayPrototype18getOwnPropertySlotEPNS_9ExecStateERKNS_10IdentifierERNS_12PropertySlotE -__ZN3KJS18arrayProtoFuncPushEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS8TrueNode8evaluateEPNS_9ExecStateE -__ZN3KJS9BlockNode7executeEPNS_9ExecStateE -__ZN3KJS18PreIncLocalVarNode8evaluateEPNS_9ExecStateE -__ZN3KJS14StringInstance3putEPNS_9ExecStateERKNS_10IdentifierEPNS_7JSValueEi -__ZN3KJS13LogicalOrNode17evaluateToBooleanEPNS_9ExecStateE -__ZN3KJS8WithNode7executeEPNS_9ExecStateE -__ZN3KJS15NumberObjectImp18getOwnPropertySlotEPNS_9ExecStateERKNS_10IdentifierERNS_12PropertySlotE -__ZN3KJS24LocalVarFunctionCallNode8evaluateEPNS_9ExecStateE -__ZN3KJS15ConditionalNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS22stringProtoFuncReplaceEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS7replaceEPNS_9ExecStateEPNS_9StringImpEPNS_7JSValueES5_ -__ZNK3KJS7UString30spliceSubstringsWithSeparatorsEPKNS0_5RangeEiPKS0_i -__ZN3KJS15ConditionalNode8evaluateEPNS_9ExecStateE -__ZNK3KJS9StringImp9toBooleanEPNS_9ExecStateE -__ZN3KJS20stringProtoFuncSplitEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZNK3KJS7UString6substrEii -__ZN3KJS7UString3Rep6createEN3WTF10PassRefPtrIS1_EEii -__ZN3KJS7TryNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS15LessNumbersNode17evaluateToBooleanEPNS_9ExecStateE -__ZN3KJS15DotAccessorNode16evaluateToNumberEPNS_9ExecStateE -__ZN3KJS10NumberNode16evaluateToNumberEPNS_9ExecStateE -__ZN3KJS7TryNode7executeEPNS_9ExecStateE -__ZN3KJS21arrayProtoFuncForEachEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS18PostIncResolveNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS18PostIncResolveNode8evaluateEPNS_9ExecStateE -__ZN3KJS13ActivationImp18isActivationObjectEv -__ZN3KJS13MathObjectImp18getOwnPropertySlotEPNS_9ExecStateERKNS_10IdentifierERNS_12PropertySlotE -__ZN3KJS21FunctionCallValueNode8evaluateEPNS_9ExecStateE -__ZN3KJS12NotEqualNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS9FalseNode8evaluateEPNS_9ExecStateE -__ZN3KJS19arrayProtoFuncShiftEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS13ArrayInstance14deletePropertyEPNS_9ExecStateEj -__ZNK3KJS11FunctionImp19implementsConstructEv -__ZN3KJS11FunctionImp9constructEPNS_9ExecStateERKNS_4ListE -__ZN3KJS9EqualNode17evaluateToBooleanEPNS_9ExecStateE -__ZN3KJS25functionProtoFuncToStringEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZNK3KJS11FunctionImp9classInfoEv -__ZNK3KJS4Node8toStringEv -__ZNK3KJS9ScopeNode8streamToERNS_12SourceStreamE -__ZN3KJS7UString6appendEt -__ZN3KJS7UString6appendERKS0_ -__ZN3KJS7UString6appendEPKc -__ZN3KJS7UString14expandCapacityEi -__ZN3KJS12SourceStreamlsEPKNS_4NodeE -__ZNK3KJS17ExprStatementNode8streamToERNS_12SourceStreamE -__ZNK3KJS4Node21needsParensIfLeftmostEv -__ZNK3KJS23FunctionCallResolveNode8streamToERNS_12SourceStreamE -__ZNK3KJS13ArgumentsNode8streamToERNS_12SourceStreamE -__ZNK3KJS16ArgumentListNode8streamToERNS_12SourceStreamE -__ZNK3KJS11ResolveNode10precedenceEv -__ZNK3KJS11ResolveNode8streamToERNS_12SourceStreamE -__ZNK3KJS13AssignDotNode8streamToERNS_12SourceStreamE -__ZNK3KJS8ThisNode10precedenceEv -__ZNK3KJS8ThisNode8streamToERNS_12SourceStreamE -__ZNK3KJS19FunctionCallDotNode10precedenceEv -__ZNK3KJS19FunctionCallDotNode8streamToERNS_12SourceStreamE -__ZNK3KJS16FunctionBodyNode11paramStringEv -__ZNK3KJS15RegExpObjectImp14arrayOfMatchesEPNS_9ExecStateE -__ZN3KJS9Arguments17mappedIndexGetterEPNS_9ExecStateEPNS_8JSObjectERKNS_10IdentifierERKNS_12PropertySlotE -__ZN3KJS19arrayProtoFuncSliceEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS22functionProtoFuncApplyEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZNK3KJS13ArrayInstance9classInfoEv -__ZN3KJS24substituteBackreferencesERKNS_7UStringES2_PiPNS_6RegExpE -__ZNK3KJS15DotAccessorNode10precedenceEv -__ZNK3KJS15DotAccessorNode8streamToERNS_12SourceStreamE -__ZNK3KJS16VarStatementNode8streamToERNS_12SourceStreamE -__ZNK3KJS17AssignResolveNode8streamToERNS_12SourceStreamE -__ZNK3KJS6IfNode8streamToERNS_12SourceStreamE -__ZNK3KJS14LogicalNotNode8streamToERNS_12SourceStreamE -__ZNK3KJS9ArrayNode10precedenceEv -__ZNK3KJS9ArrayNode8streamToERNS_12SourceStreamE -__ZNK3KJS11ElementNode8streamToERNS_12SourceStreamE -__ZNK3KJS10StringNode10precedenceEv -__ZNK3KJS10StringNode8streamToERNS_12SourceStreamE -__ZN3KJS29escapeStringForPrettyPrintingERKNS_7UStringE -__ZNK3KJS9BlockNode8streamToERNS_12SourceStreamE -__ZNK3KJS17AssignBracketNode8streamToERNS_12SourceStreamE -__ZNK3KJS10IfElseNode8streamToERNS_12SourceStreamE -__ZNK3KJS9EqualNode8streamToERNS_12SourceStreamE -__ZNK3KJS9EqualNode10precedenceEv -__ZN3KJS35streamLeftAssociativeBinaryOperatorERNS_12SourceStreamENS_10PrecedenceEPKcPKNS_4NodeES7_ -__ZNK3KJS17ReadModifyDotNode8streamToERNS_12SourceStreamE -__ZNK3KJS7AddNode10precedenceEv -__ZNK3KJS7AddNode8streamToERNS_12SourceStreamE -__ZNK3KJS15ConditionalNode10precedenceEv -__ZNK3KJS15ConditionalNode8streamToERNS_12SourceStreamE -__ZNK3KJS10RegExpNode10precedenceEv -__ZNK3KJS10RegExpNode8streamToERNS_12SourceStreamE -__ZNK3KJS21ReadModifyResolveNode8streamToERNS_12SourceStreamE -__ZNK3KJS7TryNode8streamToERNS_12SourceStreamE -__ZNK3KJS11NewExprNode10precedenceEv -__ZNK3KJS11NewExprNode8streamToERNS_12SourceStreamE -__ZNK3KJS10NumberNode10precedenceEv -__ZNK3KJS10NumberNode8streamToERNS_12SourceStreamE -__ZN3KJS12SourceStreamlsEd -__ZNK3KJS13LogicalOrNode10precedenceEv -__ZNK3KJS13LogicalOrNode8streamToERNS_12SourceStreamE -__ZNK3KJS8NullNode10precedenceEv -__ZNK3KJS8NullNode8streamToERNS_12SourceStreamE -__ZNK3KJS14LogicalAndNode8streamToERNS_12SourceStreamE -__ZNK3KJS14LogicalAndNode10precedenceEv -__ZNK3KJS14LogicalNotNode10precedenceEv -__ZN3KJS7UString17expandPreCapacityEi -__ZN3KJS19BracketAccessorNode17evaluateToBooleanEPNS_9ExecStateE -__ZNK3KJS11GreaterNode10precedenceEv -__ZNK3KJS11GreaterNode8streamToERNS_12SourceStreamE -__ZNK3KJS17ObjectLiteralNode10precedenceEv -__ZNK3KJS17ObjectLiteralNode8streamToERNS_12SourceStreamE -__ZNK3KJS16PropertyListNode8streamToERNS_12SourceStreamE -__ZNK3KJS12PropertyNode8streamToERNS_12SourceStreamE -__ZNK3KJS8LessNode10precedenceEv -__ZNK3KJS8LessNode8streamToERNS_12SourceStreamE -__ZNK3KJS19BracketAccessorNode10precedenceEv -__ZNK3KJS19BracketAccessorNode8streamToERNS_12SourceStreamE -__ZNK3KJS15TypeOfValueNode10precedenceEv -__ZNK3KJS15TypeOfValueNode8streamToERNS_12SourceStreamE -__ZNK3KJS7ForNode8streamToERNS_12SourceStreamE -__ZNK3KJS9CommaNode8streamToERNS_12SourceStreamE -__ZNK3KJS17AssignResolveNode10precedenceEv -__ZNK3KJS23FunctionCallResolveNode10precedenceEv -__ZNK3KJS12FuncExprNode10precedenceEv -__ZNK3KJS12FuncExprNode8streamToERNS_12SourceStreamE -__ZNK3KJS13ParameterNode8streamToERNS_12SourceStreamE -__ZNK3KJS9ForInNode8streamToERNS_12SourceStreamE -__ZNK3KJS10ReturnNode8streamToERNS_12SourceStreamE -__ZNK3KJS13GreaterEqNode10precedenceEv -__ZNK3KJS13GreaterEqNode8streamToERNS_12SourceStreamE -__ZNK3KJS8TrueNode10precedenceEv -__ZNK3KJS8TrueNode8streamToERNS_12SourceStreamE -__ZNK3KJS21FunctionCallValueNode8streamToERNS_12SourceStreamE -__ZN3KJS11ElementNode8evaluateEPNS_9ExecStateE -__ZNK3KJS8MultNode10precedenceEv -__ZNK3KJS8MultNode8streamToERNS_12SourceStreamE -__ZN3KJS21functionProtoFuncCallEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZNK3KJS4List8getSliceEiRS0_ -__ZN3KJS10IfElseNode7executeEPNS_9ExecStateE -__ZN3KJS6InNode17evaluateToBooleanEPNS_9ExecStateE -__ZNK3KJS12NotEqualNode10precedenceEv -__ZNK3KJS12NotEqualNode8streamToERNS_12SourceStreamE -__ZN3KJS17AssignResolveNode8evaluateEPNS_9ExecStateE -__ZN3KJS13DeleteDotNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS12ContinueNode7executeEPNS_9ExecStateE -__ZN3KJS13DeleteDotNode8evaluateEPNS_9ExecStateE -__ZN3KJS11FunctionImp14deletePropertyEPNS_9ExecStateERKNS_10IdentifierE -__ZN3KJS8JSObject14deletePropertyEPNS_9ExecStateERKNS_10IdentifierE -__ZNK3KJS11PropertyMap3getERKNS_10IdentifierERj -__ZN3KJS11GreaterNode17evaluateToBooleanEPNS_9ExecStateE -__ZN3KJS13PrefixDotNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS13PreIncDotNode8evaluateEPNS_9ExecStateE -__ZN3KJS14JSGlobalObject3putEPNS_9ExecStateERKNS_10IdentifierEPNS_7JSValueEi -__ZNK3KJS8JSObject8toStringEPNS_9ExecStateE -__ZNK3KJS8JSObject11toPrimitiveEPNS_9ExecStateENS_6JSTypeE -__ZNK3KJS8JSObject12defaultValueEPNS_9ExecStateENS_6JSTypeE -__ZN3KJS22arrayProtoFuncToStringEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3WTF9HashTableIiiNS_17IdentityExtractorIiEENS_7IntHashIiEENS_10HashTraitsIiEES6_E3addIPN3KJS16RuntimeObjectImpESB_NS_17HashSetTranslatorILb1ESB_NS5_ISB_EES6_NS_7PtrHashISB_EEEEEESt4pairINS_17HashTableIteratorIiiS2_S4_S6_S6_EEbERKT_RKT0_ -__ZN3KJS11JSImmediate8toStringEPKNS_7JSValueE -__ZN3KJS12NotEqualNode17evaluateToBooleanEPNS_9ExecStateE -__ZN3KJS21arrayProtoFuncIndexOfEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZNK3KJS14ErrorObjectImp19implementsConstructEv -__ZN3KJS14ErrorObjectImp9constructEPNS_9ExecStateERKNS_4ListE -__ZN3KJS9Collector7collectEv -__ZN3KJS9Collector31markCurrentThreadConservativelyEv -__ZN3KJS9Collector30markStackObjectsConservativelyEPvS1_ -__ZN3KJS6JSCell4markEv -__ZN3KJS8JSObject4markEv -__ZNK3KJS11PropertyMap4markEv -__ZN3KJS11FunctionImp4markEv -__ZN3KJS14JSGlobalObject4markEv -__ZN3KJS16JSVariableObject4markEv -__ZN3KJS13ArrayInstance4markEv -__ZN3KJS15JSWrapperObject4markEv -__ZN3KJS13ActivationImp4markEv -__ZN3KJS13ActivationImp12markChildrenEv -__ZN3KJS14NativeErrorImp4markEv -__ZN3KJS9Arguments4markEv -__ZN3KJS9Collector20markProtectedObjectsEv -__ZN3KJS9Collector5sweepILNS0_8HeapTypeE0EEEmb -__ZN3KJS11PropertyMapD1Ev -__ZN3KJS11FunctionImpD0Ev -__ZN3KJS9StringImpD0Ev -__ZN3KJS9RegExpImpD0Ev -__ZN3KJS13ArrayInstanceD0Ev -__ZN3KJS9ArgumentsD0Ev -__ZN3KJS9Collector5sweepILNS0_8HeapTypeE1EEEmb -__ZN3KJS14AddStringsNode8evaluateEPNS_9ExecStateE -__ZN3KJS17AddStringLeftNode8evaluateEPNS_9ExecStateE -__ZNK3KJS9StringImp11toPrimitiveEPNS_9ExecStateENS_6JSTypeE -__ZN3KJS7AddNode8evaluateEPNS_9ExecStateE -__ZN3KJS21stringProtoFuncCharAtEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS26stringProtoFuncToUpperCaseEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS24stringProtoFuncSubstringEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS26stringProtoFuncToLowerCaseEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZNK3KJS7UString8toUInt32EPb -__ZN3KJS22ReadModifyLocalVarNode8evaluateEPNS_9ExecStateE -__ZN3KJS19PostIncLocalVarNode8evaluateEPNS_9ExecStateE -__ZN3KJS17PreDecResolveNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS18PreDecLocalVarNode8evaluateEPNS_9ExecStateE -__ZN3KJS8MultNode16evaluateToNumberEPNS_9ExecStateE -__ZNK3KJS9NumberImp4typeEv -__ZN3KJS20dateProtoFuncSetTimeEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS7SubNode16evaluateToNumberEPNS_9ExecStateE -__ZNK3KJS9StringImp8toNumberEPNS_9ExecStateE -__ZN3KJS18globalFuncParseIntEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZNK3KJS7JSValue15toInt32SlowCaseEPNS_9ExecStateERb -__ZN3KJS24dateProtoFuncToGMTStringEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS10formatTimeERKNS_17GregorianDateTimeEb -__ZNK3KJS15RegExpObjectImp19implementsConstructEv -__ZN3KJS15RegExpObjectImp9constructEPNS_9ExecStateERKNS_4ListE -__ZN3KJS19regExpProtoFuncExecEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS14StringInstance18getOwnPropertySlotEPNS_9ExecStateEjRNS_12PropertySlotE -__ZN3KJS35stringInstanceNumericPropertyGetterEPNS_9ExecStateEPNS_8JSObjectEjRKNS_12PropertySlotE -__ZN3KJS23FunctionCallResolveNode17evaluateToBooleanEPNS_9ExecStateE -__ZN3KJS15globalFuncIsNaNEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS20dateProtoFuncSetYearEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS21gregorianDateTimeToMSERKNS_17GregorianDateTimeEdb -__ZN3KJS15dateToDayInYearEiii -__ZN3KJS21ReadModifyBracketNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZNK3KJS15ObjectObjectImp19implementsConstructEv -__ZN3KJS21ReadModifyBracketNode8evaluateEPNS_9ExecStateE -__ZNK3KJS9ExecState12hadExceptionEv -__ZNK3KJS7JSValue8toObjectEPNS_9ExecStateE -__ZNK3KJS7JSValue8toStringEPNS_9ExecStateE -__ZN3KJS7UStringD1Ev -__ZN3KJS8JSObject15getPropertySlotEPNS_9ExecStateERKNS_10IdentifierERNS_12PropertySlotE -__ZNK3KJS12PropertySlot8getValueEPNS_9ExecStateEPNS_8JSObjectERKNS_10IdentifierE -__ZNK3WTF6RefPtrIN3KJS14ExpressionNodeEE3getEv -__ZN3KJS3addEPNS_9ExecStateEPNS_7JSValueES3_ -__ZN3KJS10IdentifierD1Ev -__ZNK3KJS8JSObject3getEPNS_9ExecStateERKNS_10IdentifierE -__ZN3KJS20arrayProtoFuncConcatEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS14ExpressionNode17evaluateToBooleanEPNS_9ExecStateE -__ZN3KJS9BreakNode7executeEPNS_9ExecStateE -__ZN3KJS18arrayProtoFuncJoinEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS11JSImmediate8toObjectEPKNS_7JSValueEPNS_9ExecStateE -__ZN3KJS10throwErrorEPNS_9ExecStateENS_9ErrorTypeEPKc -__ZN3KJS5Error6createEPNS_9ExecStateENS_9ErrorTypeERKNS_7UStringEiiS6_ -__ZN3KJS14NativeErrorImp9constructEPNS_9ExecStateERKNS_4ListE -__ZNK3KJS6JSCell17getTruncatedInt32ERi -__ZN3KJS15StringObjectImp14callAsFunctionEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS9Collector15recordExtraCostEm -__ZN3KJS22objectProtoFuncValueOfEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS23objectProtoFuncToStringEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZNK3KJS8JSObject9classNameEv -__ZN3KJS14PostDecDotNode8evaluateEPNS_9ExecStateE -__ZN3KJS9CommaNodeD1Ev -__ZN3KJS28globalFuncDecodeURIComponentEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS6decodeEPNS_9ExecStateERKNS_4ListEPKcb -__ZN3KJS19BracketAccessorNode16evaluateToNumberEPNS_9ExecStateE -__ZN3KJS15TypeOfValueNodeD1Ev -__ZN3KJS17PrototypeFunctionD0Ev -__ZN3KJS13ErrorInstanceD0Ev -__ZN3KJS18mathProtoFuncRoundEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS23FunctionCallResolveNode16evaluateToNumberEPNS_9ExecStateE -__ZN3KJS13GreaterEqNodeD1Ev -__ZN3KJS7ModNodeD1Ev -__ZN3KJS24LocalVarFunctionCallNode17evaluateToBooleanEPNS_9ExecStateE -__ZN3KJS4List15expandAndAppendEPNS_7JSValueE -__ZN3WTF6VectorIPN3KJS7JSValueELm8EE15reserveCapacityEm -__ZN3KJS10SwitchNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS13CaseBlockNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS14ClauseListNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS14CaseClauseNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS10SwitchNode7executeEPNS_9ExecStateE -__ZN3KJS13CaseBlockNode12executeBlockEPNS_9ExecStateEPNS_7JSValueE -__ZN3KJS18NotStrictEqualNode17evaluateToBooleanEPNS_9ExecStateE -__Z23_NPN_CreateScriptObjectP4_NPPPN3KJS8JSObjectEN3WTF10PassRefPtrINS1_8Bindings10RootObjectEEE -__NPN_CreateObject -__Z10jsAllocateP4_NPPP7NPClass -__NPN_RetainObject -__NPN_Evaluate -__ZNK3KJS8Bindings10RootObject12globalObjectEv -__ZN3KJS8Bindings22convertNPStringToUTF16EPK9_NPStringPPtPj -__ZN3KJS8Bindings36convertUTF8ToUTF16WithLatin1FallbackEPKciPPtPj -__ZN3WTF7Unicode18convertUTF8ToUTF16EPPKcS2_PPtS4_b -__ZN3KJS11Interpreter8evaluateEPNS_9ExecStateERKNS_7UStringEiS5_PNS_7JSValueE -__ZN3KJS8Bindings23convertValueToNPVariantEPNS_9ExecStateEPNS_7JSValueEP10_NPVariant -__ZN3KJS11JSImmediate4typeEPKNS_7JSValueE -__NPN_GetStringIdentifier -__ZN3KJS8Bindings26identifierFromNPIdentifierEPKc -__NPN_Invoke -__ZN3KJS8Bindings14findRootObjectEPNS_14JSGlobalObjectE -__NPN_ReleaseVariantValue -__ZNK3KJS7UString10UTF8StringEb +__ZN3JSC10JSFunction18getOwnPropertySlotEPNS_9ExecStateERKNS_10IdentifierERNS_12PropertySlotE +__ZN3JSC10JSFunction11getCallDataERNS_8CallDataE +__ZN3JSC4callEPNS_9ExecStateENS_7JSValueENS_8CallTypeERKNS_8CallDataES2_RKNS_7ArgListE +__ZN3JSC11Interpreter7executeEPNS_16FunctionBodyNodeEPNS_9ExecStateEPNS_10JSFunctionEPNS_8JSObjectERKNS_7ArgListEPNS_14ScopeCha +__ZNK3JSC15DotAccessorNode10isLocationEv +__ZNK3JSC14ExpressionNode13isResolveNodeEv +__ZNK3JSC14ExpressionNode21isBracketAccessorNodeEv +__ZN3JSC19FunctionCallDotNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZN3JSC19FunctionCallDotNodeD0Ev +__ZL26appendToVarDeclarationListPvRPN3JSC15ParserArenaDataIN3WTF6VectorISt4pairINS0_10IdentifierEjELm0EEEEERKS5_j +__ZN3WTF6VectorISt4pairIN3JSC10IdentifierEjELm0EE14expandCapacityEm +__ZL14makeAssignNodePvPN3JSC14ExpressionNodeENS0_8OperatorES2_bbiii +__ZL11makeAddNodePvPN3JSC14ExpressionNodeES2_b +__ZN3JSC16VarStatementNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZN3JSC17AssignResolveNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZN3JSC11UnaryOpNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZN3JSC10RegExpNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZN3JSC6RegExp6createEPNS_12JSGlobalDataERKNS_7UStringES5_ +__ZN3JSC4Yarr15jitCompileRegexEPNS_12JSGlobalDataERNS0_14RegexCodeBlockERKNS_7UStringERjRPKcbb +__ZN3JSC4Yarr12compileRegexERKNS_7UStringERNS0_12RegexPatternE +__ZN3JSC4Yarr18PatternDisjunction17addNewAlternativeEv +__ZN3WTF6VectorIPN3JSC4Yarr18PatternAlternativeELm0EE14expandCapacityEm +__ZN3JSC4Yarr6ParserINS0_23RegexPatternConstructorEE11parseTokensEv +__ZN3WTF6VectorIN3JSC4Yarr11PatternTermELm0EE14expandCapacityEmPKS3_ +__ZN3WTF6VectorIN3JSC4Yarr11PatternTermELm0EE14expandCapacityEm +__ZN3JSC4Yarr6ParserINS0_23RegexPatternConstructorEE11parseEscapeILb0ES2_EEbRT0_ +__ZN3JSC4Yarr23RegexPatternConstructor25atomBuiltInCharacterClassENS0_23BuiltInCharacterClassIDEb +__ZN3JSC4Yarr14wordcharCreateEv +__ZN3WTF6VectorItLm0EE14expandCapacityEm +__ZN3WTF6VectorIN3JSC4Yarr14CharacterRangeELm0EE14expandCapacityEmPKS3_ +__ZN3WTF6VectorIN3JSC4Yarr14CharacterRangeELm0EE14expandCapacityEm +__ZN3WTF6VectorIPN3JSC4Yarr14CharacterClassELm0EE14expandCapacityEmPKS4_ +__ZN3WTF6VectorIPN3JSC4Yarr14CharacterClassELm0EE14expandCapacityEm +__ZN3JSC4Yarr14RegexGenerator19generateDisjunctionEPNS0_18PatternDisjunctionE +__ZN3JSC12X86Assembler7addl_irEiNS_3X8610RegisterIDE +__ZN3JSC23MacroAssemblerX86Common8branch32ENS0_9ConditionENS_3X8610RegisterIDES3_ +__ZN3JSC22AbstractMacroAssemblerINS_12X86AssemblerEE8JumpList6appendENS2_4JumpE +__ZN3JSC4Yarr14RegexGenerator12generateTermERNS1_19TermGenerationStateE +__ZN3JSC23MacroAssemblerX86Common8branch32ENS0_9ConditionENS_3X8610RegisterIDENS_22AbstractMacroAssemblerINS_12X86AssemblerEE5I +__ZN3JSC4Yarr14RegexGenerator19TermGenerationState15jumpToBacktrackENS_22AbstractMacroAssemblerINS_12X86AssemblerEE4JumpEPNS_14 +__ZN3JSC4Yarr14RegexGenerator13readCharacterEiNS_3X8610RegisterIDE +__ZN3JSC4Yarr14RegexGenerator19matchCharacterClassENS_3X8610RegisterIDERNS_22AbstractMacroAssemblerINS_12X86AssemblerEE8JumpLis +__ZN3JSC4Yarr14RegexGenerator24matchCharacterClassRangeENS_3X8610RegisterIDERNS_22AbstractMacroAssemblerINS_12X86AssemblerEE8Ju +__ZN3JSC22AbstractMacroAssemblerINS_12X86AssemblerEE8JumpList4linkEPS2_ +__ZN3JSC23MacroAssemblerX86Common4jumpEv +__ZN3WTF6VectorIN3JSC22AbstractMacroAssemblerINS1_12X86AssemblerEE4JumpELm16EED1Ev +__ZN3JSC4Yarr14RegexGenerator28generateCharacterClassGreedyERNS1_19TermGenerationStateE +__ZN3JSC12X86Assembler7subl_irEiNS_3X8610RegisterIDE +__ZN3JSC15AssemblerBuffer4growEv +__ZN3WTF15deleteAllValuesIPN3JSC4Yarr14CharacterClassELm0EEEvRKNS_6VectorIT_XT0_EEE +__ZN3JSC17BytecodeGenerator13emitNewRegExpEPNS_10RegisterIDEPNS_6RegExpE +__ZN3JSC15ConditionalNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZN3JSC9EqualNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZNK3JSC14ExpressionNode6isNullEv +__ZNK3JSC10StringNode6isPureERNS_17BytecodeGeneratorE +__ZN3JSC19BracketAccessorNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZNK3JSC10NumberNode6isPureERNS_17BytecodeGeneratorE +__ZN3JSC10NumberNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZN3JSC17BytecodeGenerator8emitLoadEPNS_10RegisterIDEd +__ZN3JSC17BytecodeGenerator12emitGetByValEPNS_10RegisterIDES2_S2_ +__ZN3JSC17BytecodeGenerator14emitEqualityOpENS_8OpcodeIDEPNS_10RegisterIDES3_S3_ +__ZN3JSC19ReverseBinaryOpNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZNK3JSC14ExpressionNode5isAddEv +__ZN3JSC12SmallStrings27createSingleCharacterStringEPNS_12JSGlobalDataEh +__ZN3JSC13AssignDotNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZN3JSC17BytecodeGenerator11emitPutByIdEPNS_10RegisterIDERKNS_10IdentifierES2_ +__ZN3JSC17AssignResolveNodeD0Ev +__ZN3JSC15ParserArenaDataIN3WTF6VectorISt4pairINS_10IdentifierEjELm0EEEED0Ev +__ZN3JSC16VarStatementNodeD0Ev +__ZN3JSC14LogicalNotNodeD0Ev +__ZN3JSC10RegExpNodeD0Ev +__ZN3JSC10NumberNodeD0Ev +__ZN3JSC19BracketAccessorNodeD0Ev +__ZN3JSC9EqualNodeD0Ev +__ZN3JSC15ConditionalNodeD0Ev +__ZN3JSC7AddNodeD0Ev +__ZN3JSC13GreaterEqNodeD0Ev +__ZN3JSC13AssignDotNodeD0Ev +__ZN3JSC3JIT13emit_op_jtrueEPNS_11InstructionE +__ZN3JSC3JIT18emit_op_new_regexpEPNS_11InstructionE +__ZN3JSC3JIT18emit_op_get_by_valEPNS_11InstructionE +__ZN3JSC3JIT10emit_op_eqEPNS_11InstructionE +__ZN3JSC3JIT11emit_op_addEPNS_11InstructionE +__ZN3JSC11JITStubCall11addArgumentEjNS_3X8610RegisterIDE +__ZN3JSC3JIT16emit_op_jnlesseqEPNS_11InstructionE +__ZN3JSC3JIT17emit_op_put_by_idEPNS_11InstructionE +__ZN3JSC3JIT21compilePutByIdHotPathEiPNS_10IdentifierEij +__ZN3JSC3JIT17emitSlow_op_jtrueEPNS_11InstructionERPNS_13SlowCaseEntryE +__ZN3JSC3JIT22emitSlow_op_get_by_valEPNS_11InstructionERPNS_13SlowCaseEntryE +__ZN3JSC3JIT14emitSlow_op_eqEPNS_11InstructionERPNS_13SlowCaseEntryE +__ZN3JSC3JIT20emitSlow_op_jnlesseqEPNS_11InstructionERPNS_13SlowCaseEntryE +__ZN3JSC20MacroAssemblerX86_6413branchTestPtrENS_23MacroAssemblerX86Common9ConditionENS_3X8610RegisterIDES4_ +__ZN3JSC12X86Assembler23X86InstructionFormatter9twoByteOpENS0_15TwoByteOpcodeIDEiNS_3X8610RegisterIDE +__ZN3JSC23MacroAssemblerX86Common12branchDoubleENS0_15DoubleConditionENS_3X8613XMMRegisterIDES3_ +__ZN3JSC3JIT21emitSlow_op_put_by_idEPNS_11InstructionERPNS_13SlowCaseEntryE +__ZN3JSC3JIT22compilePutByIdSlowCaseEiPNS_10IdentifierEiRPNS_13SlowCaseEntryEj +__ZN3JSC13LogicalOpNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZN3WTF6VectorIN3JSC17GlobalResolveInfoELm0EE14expandCapacityEm +__ZN3JSC17BytecodeGenerator14emitJumpIfTrueEPNS_10RegisterIDEPNS_5LabelE +__ZN3JSC13LogicalOpNodeD0Ev +__ZN3JSC3JIT22emit_op_resolve_globalEPNS_11InstructionE +__ZN3JSC8JITStubs21cti_op_resolve_globalEPPv +__ZNK3JSC8JSString9toBooleanEPNS_9ExecStateE +__ZN3JSC8JSString18getOwnPropertySlotEPNS_9ExecStateERKNS_10IdentifierERNS_12PropertySlotE +__ZN3JSC15StringPrototype18getOwnPropertySlotEPNS_9ExecStateERKNS_10IdentifierERNS_12PropertySlotE +__ZN3JSC12StringObject18getOwnPropertySlotEPNS_9ExecStateERKNS_10IdentifierERNS_12PropertySlotE +__ZN3JSCL20stringProtoFuncMatchEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZNK3JSC8JSString12toThisStringEPNS_9ExecStateE +__ZNK3JSC6JSCell8isObjectEPKNS_9ClassInfoE +__ZNK3JSC6JSCell9classInfoEv +__ZN3JSC4Yarr23RegexPatternConstructor20atomPatternCharacterEt +__ZN3JSC4Yarr25CharacterClassConstructor7putCharEt +__ZN3JSC4Yarr25CharacterClassConstructor9addSortedERN3WTF6VectorItLm0EEEt +__ZN3JSC4Yarr23RegexPatternConstructor21atomCharacterClassEndEv +__ZN3JSC4Yarr23RegexPatternConstructor23setupDisjunctionOffsetsEPNS0_18PatternDisjunctionEjj +__ZN3JSC4Yarr14RegexGenerator25generateParenthesesSingleERNS1_19TermGenerationStateE +__ZN3JSC4Yarr14RegexGenerator30generateParenthesesDisjunctionERNS0_11PatternTermERNS1_19TermGenerationStateEj +__ZN3WTF6VectorIN3JSC4Yarr14RegexGenerator26AlternativeBacktrackRecordELm0EE14expandCapacityEm +__ZN3JSC4Yarr14RegexGenerator19jumpIfCharNotEqualsEti +__ZN3JSC12X86Assembler23X86InstructionFormatter9oneByteOpENS0_15OneByteOpcodeIDEiNS_3X8610RegisterIDES4_ii +__ZN3JSC4Yarr14RegexGenerator19TermGenerationState15jumpToBacktrackERNS_22AbstractMacroAssemblerINS_12X86AssemblerEE8JumpListEP +__ZN3JSC17RegExpConstructor12performMatchEPNS_6RegExpERKNS_7UStringEiRiS6_PPi +__ZN3JSC6RegExp5matchERKNS_7UStringEiPN3WTF11OwnArrayPtrIiEE +__ZN3JSC4Yarr12executeRegexERNS0_14RegexCodeBlockEPKtjjPii +__ZN3JSC8JITStubs17cti_op_new_regexpEPPv +__ZN3JSC12RegExpObjectC1EN3WTF10PassRefPtrINS_9StructureEEENS2_INS_6RegExpEEE +__ZNK3JSC12RegExpObject9classInfoEv +__ZN3JSC18RegExpMatchesArrayC2EPNS_9ExecStateEPNS_24RegExpConstructorPrivateE +__ZN3JSC8JITStubs17cti_op_get_by_valEPPv +__ZN3JSC18RegExpMatchesArray18getOwnPropertySlotEPNS_9ExecStateEjRNS_12PropertySlotE +__ZN3JSC18RegExpMatchesArray17fillArrayInstanceEPNS_9ExecStateE +__ZN3JSC11jsSubstringEPNS_12JSGlobalDataERKNS_7UStringEjj +__ZN3JSC7JSArray3putEPNS_9ExecStateERKNS_10IdentifierENS_7JSValueERNS_15PutPropertySlotE +__ZN3JSC8JSObject3putEPNS_9ExecStateERKNS_10IdentifierENS_7JSValueERNS_15PutPropertySlotE +__ZN3JSC7JSArray18getOwnPropertySlotEPNS_9ExecStateEjRNS_12PropertySlotE +__ZN3JSC8JITStubs9cti_op_eqEPPv +__ZN3JSCeqERKNS_7UStringES2_ +__ZN3JSC8JITStubs10cti_op_addEPPv +__ZN3JSC11concatenateEPNS_7UString3RepES2_ +__ZN3JSCL22stringProtoFuncIndexOfEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZNK3JSC7UString4findERKS0_i +__ZN3JSC8JITStubs16cti_op_put_by_idEPPv +__ZNK3JSC7UString8toUInt32EPbb +__ZNK3JSC7UString8toDoubleEbb +__ZNK3JSC7UString10getCStringERN3WTF6VectorIcLm32EEE +__ZN3WTF14FastMallocZone11forceUnlockEP14_malloc_zone_t +__Z15jsRegExpCompilePKti24JSRegExpIgnoreCaseOption23JSRegExpMultilineOptionPjPPKc +__ZL30calculateCompiledPatternLengthPKti24JSRegExpIgnoreCaseOptionR11CompileDataR9ErrorCode +__ZL11checkEscapePPKtS0_P9ErrorCodeib +__ZL13compileBranchiPiPPhPPKtS3_P9ErrorCodeS_S_R11CompileData +__Z15jsRegExpExecutePK8JSRegExpPKtiiPii +__ZL5matchPKtPKhiR9MatchData +__ZNK3JSC7UString14toStrictUInt32EPb +__ZN3JSC17ObjectLiteralNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZN3JSC16PropertyListNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZN3JSC7TryNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZN3JSC17BytecodeGenerator9emitCatchEPNS_10RegisterIDEPNS_5LabelES4_ +__ZN3WTF6VectorIN3JSC11HandlerInfoELm0EE14expandCapacityEm +__ZN3JSC17BytecodeGenerator16emitPushNewScopeEPNS_10RegisterIDERNS_10IdentifierES2_ +__ZN3WTF6VectorIN3JSC18ControlFlowContextELm0EE14expandCapacityEm +__ZNK3JSC14ExpressionNode6isPureERNS_17BytecodeGeneratorE +__ZN3JSC12PropertyNodeD0Ev +__ZN3JSC16PropertyListNodeD0Ev +__ZN3JSC17ObjectLiteralNodeD0Ev +__ZN3JSC7TryNodeD0Ev +__ZN3JSC3JIT18emit_op_new_objectEPNS_11InstructionE +__ZN3JSC3JIT13emit_op_catchEPNS_11InstructionE +__ZN3JSC3JIT22emit_op_push_new_scopeEPNS_11InstructionE +__ZN3JSC3JIT15emit_op_resolveEPNS_11InstructionE +__ZN3JSC3JIT17emit_op_pop_scopeEPNS_11InstructionE +__ZN3JSC8JITStubs17cti_op_new_objectEPPv +__ZN3JSC20constructEmptyObjectEPNS_9ExecStateE +__ZN3JSC17StructureStubInfo5derefEv +__ZN3WTF9HashTableINS_6RefPtrIN3JSC7UString3RepEEES5_NS_17IdentityExtractorIS5_EENS2_17IdentifierRepHashENS_10HashTraitsIS5_EES +__ZN3JSC8ThisNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZN3JSC21ThrowableBinaryOpNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZN3JSC8ThisNodeD0Ev +__ZN3JSC6InNodeD0Ev +__ZN3JSC3JIT29emit_op_enter_with_activationEPNS_11InstructionE +__ZN3JSC3JIT20emit_op_convert_thisEPNS_11InstructionE +__ZN3JSC3JIT27emit_op_tear_off_activationEPNS_11InstructionE +__ZN3JSC3JIT24emitSlow_op_convert_thisEPNS_11InstructionERPNS_13SlowCaseEntryE +__ZN3JSC8JITStubs22cti_op_push_activationEPPv +__ZN3JSC12JSActivationC1EPNS_9ExecStateEN3WTF10PassRefPtrINS_16FunctionBodyNodeEEE +__ZN3JSC12JSActivationC2EPNS_9ExecStateEN3WTF10PassRefPtrINS_16FunctionBodyNodeEEE +__ZN3JSC4Yarr6ParserINS0_23RegexPatternConstructorEE11parseEscapeILb1ENS3_28CharacterClassParserDelegateEEEbRT0_ +__ZN3JSC4Yarr12digitsCreateEv +__ZN3JSC4Yarr25CharacterClassConstructor6appendEPKNS0_14CharacterClassE +__ZN3JSC4Yarr25CharacterClassConstructor14addSortedRangeERN3WTF6VectorINS0_14CharacterRangeELm0EEEtt +__ZN3JSC4Yarr6ParserINS0_23RegexPatternConstructorEE28CharacterClassParserDelegate20atomPatternCharacterEt +__ZN3JSC11GreaterNodeD0Ev +__ZN3JSCL26stringProtoFuncToLowerCaseEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSC8JSString14toThisJSStringEPNS_9ExecStateE +__ZN3JSC7UStringC2EPtib +__ZN3JSC18globalFuncParseIntEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSC11JSImmediate12nonInlineNaNEv +__ZN3JSC8JITStubs11cti_op_lessEPPv +__ZN3JSC8JITStubs9cti_op_inEPPv +__ZNK3JSC6JSCell9getUInt32ERj +__ZNK3JSC8JSObject11hasPropertyEPNS_9ExecStateERKNS_10IdentifierE +__ZL14makePrefixNodePvPN3JSC14ExpressionNodeENS0_8OperatorEiii +__ZN3JSC7ForNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZN3JSC17BytecodeGenerator13newLabelScopeENS_10LabelScope4TypeEPKNS_10IdentifierE +__ZN3JSC12ContinueNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZN3JSC17BytecodeGenerator14continueTargetERKNS_10IdentifierE +__ZN3JSC17BytecodeGenerator14emitJumpScopesEPNS_5LabelEi +__ZN3JSC17PrefixResolveNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZN3JSC21ReadModifyResolveNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZN3JSC11NewExprNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZN3JSC17BytecodeGenerator13emitConstructEPNS_10RegisterIDES2_PNS_13ArgumentsNodeEjjj +__ZN3WTF6VectorIN3JSC20GetByIdExceptionInfoELm0EE14expandCapacityEm +__ZN3JSC8LessNodeD0Ev +__ZN3JSC17PrefixResolveNodeD0Ev +__ZN3JSC12ContinueNodeD0Ev +__ZN3JSC7ForNodeD0Ev +__ZN3JSC21ReadModifyResolveNodeD0Ev +__ZN3JSC11NewExprNodeD0Ev +__ZN3JSC3JIT11emit_op_notEPNS_11InstructionE +__ZN3JSC3JIT15emit_op_pre_incEPNS_11InstructionE +__ZN3JSC3JIT20emit_op_loop_if_lessEPNS_11InstructionE +__ZN3JSC3JIT16emitTimeoutCheckEv +__ZN3JSC3JIT20compileBinaryArithOpENS_8OpcodeIDEjjjNS_12OperandTypesE +__ZN3JSC3JIT11emit_op_subEPNS_11InstructionE +__ZN3JSC3JIT17emit_op_constructEPNS_11InstructionE +__ZN3JSC3JIT24emit_op_construct_verifyEPNS_11InstructionE +__ZN3JSC3JIT15emitSlow_op_notEPNS_11InstructionERPNS_13SlowCaseEntryE +__ZN3JSC3JIT19emitSlow_op_pre_incEPNS_11InstructionERPNS_13SlowCaseEntryE +__ZN3JSC3JIT24emitSlow_op_loop_if_lessEPNS_11InstructionERPNS_13SlowCaseEntryE +__ZN3JSC3JIT15emitSlow_op_addEPNS_11InstructionERPNS_13SlowCaseEntryE +__ZN3JSC3JIT28compileBinaryArithOpSlowCaseENS_8OpcodeIDERPNS_13SlowCaseEntryEjjjNS_12OperandTypesE +__ZN3JSC15AssemblerBuffer7putByteEi +__ZN3JSC12X86Assembler23X86InstructionFormatter11twoByteOp64ENS0_15TwoByteOpcodeIDEiNS_3X8610RegisterIDE +__ZN3JSC3JIT15emitSlow_op_subEPNS_11InstructionERPNS_13SlowCaseEntryE +__ZN3JSC3JIT21emitSlow_op_constructEPNS_11InstructionERPNS_13SlowCaseEntryE +__ZN3JSC3JIT27compileOpConstructSetupArgsEPNS_11InstructionE +__ZN3JSC3JIT28emitSlow_op_construct_verifyEPNS_11InstructionERPNS_13SlowCaseEntryE +__ZN3JSC7UString4fromEj +__ZN3JSC10Identifier11addSlowCaseEPNS_9ExecStateEPNS_7UString3RepE +__ZN3JSC8JITStubs10cti_op_notEPPv +__ZN3JSC8JITStubs24cti_op_get_by_id_genericEPPv +__ZN3JSC7JSArrayC2EN3WTF10PassRefPtrINS_9StructureEEERKNS_7ArgListE +__ZN3JSC7JSArray18getOwnPropertySlotEPNS_9ExecStateERKNS_10IdentifierERNS_12PropertySlotE +__ZN3JSCL24stringProtoFuncSubstringEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSC8JITStubs31cti_op_construct_NotJSConstructEPPv +__ZN3JSC3JIT33privateCompilePatchGetArrayLengthENS_22AbstractMacroAssemblerINS_12X86AssemblerEE22ProcessorReturnAddressE +__ZN3JSC8JITStubs27cti_op_get_by_id_proto_listEPPv +__ZN3JSC3JIT30privateCompileGetByIdProtoListEPNS_17StructureStubInfoEPNS_30PolymorphicAccessStructureListEiPNS_9StructureES6_mP +__ZN3JSC3JIT16patchGetByIdSelfEPNS_17StructureStubInfoEPNS_9StructureEmNS_22AbstractMacroAssemblerINS_12X86AssemblerEE22Process +__ZN3JSC14StructureChainC1EPNS_9StructureE +__ZN3JSC14StructureChainC2EPNS_9StructureE +__ZN3JSC3JIT26privateCompileGetByIdChainEPNS_17StructureStubInfoEPNS_9StructureEPNS_14StructureChainEmmNS_22AbstractMacroAssemb +__ZN3JSC8JITStubs23cti_op_put_by_id_secondEPPv +__ZN3JSC8JITStubs15tryCachePutByIDEPNS_9ExecStateEPNS_9CodeBlockEPvNS_7JSValueERKNS_15PutPropertySlotE +__ZN3JSC8JITStubs24cti_op_put_by_id_genericEPPv +__ZN3JSC8JITStubs26cti_op_tear_off_activationEPPv +__ZN3JSC8JITStubs21cti_op_ret_scopeChainEPPv +__ZN3JSC17BytecodeGenerator16emitPutScopedVarEmiPNS_10RegisterIDENS_7JSValueE +__ZN3JSC3JIT22emit_op_get_scoped_varEPNS_11InstructionE +__ZN3JSC3JIT22emit_op_put_scoped_varEPNS_11InstructionE +__ZN3JSC3JIT29emitPutVariableObjectRegisterENS_3X8610RegisterIDES2_i +__ZN3JSC12X86Assembler7movq_rrENS_3X8610RegisterIDENS1_13XMMRegisterIDE +__ZN3WTF20TCMalloc_ThreadCache18DestroyThreadCacheEPv +__ZN3WTF20TCMalloc_ThreadCache11DeleteCacheEPS0_ +__ZN3JSC15StrictEqualNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZN3JSC15StrictEqualNodeD0Ev +__ZN3JSC3JIT16emit_op_stricteqEPNS_11InstructionE +__ZN3JSC3JIT17compileOpStrictEqEPNS_11InstructionENS0_21CompileOpStrictEqTypeE +__ZN3JSC3JIT20emitSlow_op_stricteqEPNS_11InstructionERPNS_13SlowCaseEntryE +__ZN3JSC8JITStubs15cti_op_stricteqEPPv +__ZN3WTF12detachThreadEj +__ZN3WTFL26pthreadHandleForIdentifierEj +__ZN3WTFL31clearPthreadHandleForIdentifierEj +__ZN3WTF6VectorIPNS0_IN3JSC10IdentifierELm64EEELm32EE14expandCapacityEmPKS4_ +__ZN3WTF6VectorIPNS0_IN3JSC10IdentifierELm64EEELm32EE15reserveCapacityEm +__ZN3JSC8NullNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZN3JSC8NullNodeD0Ev +__ZN3WTF7HashMapISt4pairINS_6RefPtrIN3JSC7UString3RepEEEjEPNS3_9StructureENS3_28StructureTransitionTableHashENS3_34StructureTra +__ZN3WTF9HashTableISt4pairINS_6RefPtrIN3JSC7UString3RepEEEjES1_IS7_PNS3_9StructureEENS_18PairFirstExtractorISA_EENS3_28Structur +__ZN3JSC9Structure22materializePropertyMapEv +__ZN3JSC15TypeOfValueNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZN3JSC15TypeOfValueNodeD0Ev +__ZN3JSC12NotEqualNodeD0Ev +__ZN3JSC3JIT11emit_op_neqEPNS_11InstructionE +__ZN3JSC3JIT15emitSlow_op_neqEPNS_11InstructionERPNS_13SlowCaseEntryE +__ZN3JSC8JITStubs13cti_op_typeofEPPv +__ZN3JSC20jsTypeStringForValueEPNS_9ExecStateENS_7JSValueE +__ZN3JSC8JITStubs10cti_op_neqEPPv +__ZN3JSC14ExecutablePool13systemReleaseERKNS0_10AllocationE +__ZN3WTF6VectorItLm0EE14expandCapacityEmPKt +__ZNK3JSC10NumberNode8isNumberEv +__ZNK3JSC14ExpressionNode10isLocationEv +__ZN3WTF6VectorIPN3JSC10RegisterIDELm32EE14expandCapacityEm +__ZNK3JSC11BooleanNode6isPureERNS_17BytecodeGeneratorE +__ZN3JSC4Yarr13newlineCreateEv +__ZN3JSC12X86Assembler23X86InstructionFormatter15emitRexIfNeededEiii +__ZN3JSC12X86Assembler23X86InstructionFormatter11memoryModRMEiNS_3X8610RegisterIDES3_ii +__ZN3JSC17TypeOfResolveNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZN3JSC17BytecodeGenerator15emitResolveBaseEPNS_10RegisterIDERKNS_10IdentifierE +__ZN3JSC17BytecodeGenerator20emitLoadGlobalObjectEPNS_10RegisterIDEPNS_8JSObjectE +__ZN3WTF6VectorIN3JSC7JSValueELm0EE14expandCapacityEm +__ZNK3JSC7AddNode5isAddEv +__ZN3JSC12BinaryOpNode10emitStrcatERNS_17BytecodeGeneratorEPNS_10RegisterIDES4_PNS_21ReadModifyResolveNodeE +__ZNK3JSC10StringNode8isStringEv +__ZNK3JSC14ExpressionNode8isStringEv +__ZN3JSC17BytecodeGenerator10emitStrcatEPNS_10RegisterIDES2_i +__ZN3JSC4Yarr12spacesCreateEv +__ZN3JSC4Yarr15nonspacesCreateEv +__ZN3JSC8WithNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZN3JSC17BytecodeGenerator13emitPushScopeEPNS_10RegisterIDE +__ZN3JSC23MacroAssemblerX86Common4moveENS_22AbstractMacroAssemblerINS_12X86AssemblerEE5Imm32ENS_3X8610RegisterIDE +__ZN3JSC14MacroAssembler4peekENS_3X8610RegisterIDEi +__ZN3JSC4Yarr14RegexGenerator12atEndOfInputEv +__ZN3JSC22AbstractMacroAssemblerINS_12X86AssemblerEE8JumpList6linkToENS2_5LabelEPS2_ +__ZN3JSC14MacroAssembler4pokeENS_3X8610RegisterIDEi +__ZN3JSC21FunctionCallValueNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZN3JSC9ArrayNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZN3JSC17BytecodeGenerator12emitNewArrayEPNS_10RegisterIDEPNS_11ElementNodeE +__ZN3JSC23CallFunctionCallDotNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZN3JSC17BytecodeGenerator25emitJumpIfNotFunctionCallEPNS_10RegisterIDEPNS_5LabelE +__ZN3JSC4Yarr14RegexGenerator29generateAssertionWordBoundaryERNS1_19TermGenerationStateE +__ZN3JSC4Yarr14RegexGenerator22matchAssertionWordcharERNS1_19TermGenerationStateERNS_22AbstractMacroAssemblerINS_12X86Assembler +__ZN3WTF6VectorIPN3JSC4Yarr18PatternDisjunctionELm4EE14expandCapacityEm +__ZL14compileBracketiPiPPhPPKtS3_P9ErrorCodeiS_S_R11CompileData +__ZN3JSC9ThrowNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZN3JSC9CommaNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZN3WTF9HashTableIdSt4pairIdN3JSC7JSValueEENS_18PairFirstExtractorIS4_EENS_9FloatHashIdEENS_14PairHashTraitsINS_10HashTraitsId +__ZN3JSC17TypeOfResolveNodeD0Ev +__ZN3JSC18NotStrictEqualNodeD0Ev +__ZN3JSC8WithNodeD0Ev +__ZN3JSC21FunctionCallValueNodeD0Ev +__ZN3JSC9ArrayNodeD0Ev +__ZN3JSC11ElementNodeD0Ev +__ZN3JSC23CallFunctionCallDotNodeD0Ev +__ZN3JSC9ThrowNodeD0Ev +__ZN3JSC9CommaNodeD0Ev +__ZN3JSC3JIT23emit_op_unexpected_loadEPNS_11InstructionE +__ZN3JSC3JIT20emit_op_to_primitiveEPNS_11InstructionE +__ZN3JSC3JIT14emit_op_strcatEPNS_11InstructionE +__ZN3JSC3JIT17emit_op_nstricteqEPNS_11InstructionE +__ZN3JSC3JIT18emit_op_push_scopeEPNS_11InstructionE +__ZN3JSC3JIT17emit_op_new_arrayEPNS_11InstructionE +__ZN3JSC3JIT16emit_op_jneq_ptrEPNS_11InstructionE +__ZN3JSC3JIT13emit_op_throwEPNS_11InstructionE +__ZN3JSC3JIT14emit_op_jnlessEPNS_11InstructionE +__ZN3JSC3JIT24emitSlow_op_to_primitiveEPNS_11InstructionERPNS_13SlowCaseEntryE +__ZN3JSC3JIT21emitSlow_op_nstricteqEPNS_11InstructionERPNS_13SlowCaseEntryE +__ZN3JSC3JIT18emitSlow_op_jnlessEPNS_11InstructionERPNS_13SlowCaseEntryE +__ZL15makePostfixNodePvPN3JSC14ExpressionNodeENS0_8OperatorEiii +__ZN3JSC18PostfixResolveNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZN3JSC18PostfixResolveNodeD0Ev +__ZN3JSC8JITStubs22cti_op_call_arityCheckEPPv +__ZN3JSC19FunctionConstructor16getConstructDataERNS_13ConstructDataE +__ZN3JSCL32constructWithFunctionConstructorEPNS_9ExecStateEPNS_8JSObjectERKNS_7ArgListE +__ZN3JSC17constructFunctionEPNS_9ExecStateERKNS_7ArgListERKNS_10IdentifierERKNS_7UStringEi +__ZN3JSCplERKNS_7UStringES2_ +__ZN3JSC7UString6appendERKS0_ +__ZN3JSC7UString17expandPreCapacityEi +__ZN3WTF11fastReallocILb0EEEPvS1_m +__ZN3JSC14JSGlobalObject3putEPNS_9ExecStateERKNS_10IdentifierENS_7JSValueERNS_15PutPropertySlotE +__ZL11makeDivNodePvPN3JSC14ExpressionNodeES2_b +__ZL12makeMultNodePvPN3JSC14ExpressionNodeES2_b +__ZN3JSC9WhileNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZN3JSC7ModNodeD0Ev +__ZN3JSC7DivNodeD0Ev +__ZN3JSC8MultNodeD0Ev +__ZN3JSC9WhileNodeD0Ev +__ZN3JSC3JIT11emit_op_modEPNS_11InstructionE +__ZN3JSC3JIT11emit_op_mulEPNS_11InstructionE +__ZN3JSC3JIT20emit_op_loop_if_trueEPNS_11InstructionE +__ZN3JSC3JIT15emitSlow_op_modEPNS_11InstructionERPNS_13SlowCaseEntryE +__ZN3JSC3JIT15emitSlow_op_mulEPNS_11InstructionERPNS_13SlowCaseEntryE +__ZN3JSC3JIT24emitSlow_op_loop_if_trueEPNS_11InstructionERPNS_13SlowCaseEntryE +__ZN3JSCL26stringProtoFuncLastIndexOfEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZNK3JSC7JSValue20toIntegerPreserveNaNEPNS_9ExecStateE +__ZN3JSC8JITStubs10cti_op_divEPPv +__ZN3JSC3JIT22emit_op_loop_if_lesseqEPNS_11InstructionE +__ZN3JSC3JIT26emitSlow_op_loop_if_lesseqEPNS_11InstructionERPNS_13SlowCaseEntryE +__ZN3JSC8JITStubs13cti_op_lesseqEPPv +__ZN3JSCL20stringProtoFuncSplitEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSC19constructEmptyArrayEPNS_9ExecStateE +__ZN3JSC7JSArray3putEPNS_9ExecStateEjNS_7JSValueE +__ZN3JSC7JSArray11putSlowCaseEPNS_9ExecStateEjNS_7JSValueE +__ZN3JSC14ArrayPrototype18getOwnPropertySlotEPNS_9ExecStateERKNS_10IdentifierERNS_12PropertySlotE +__ZN3JSCL18arrayProtoFuncJoinEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3WTF7HashSetIPN3JSC8JSObjectENS_7PtrHashIS3_EENS_10HashTraitsIS3_EEE3addERKS3_ +__ZN3WTF9HashTableIPN3JSC8JSObjectES3_NS_17IdentityExtractorIS3_EENS_7PtrHashIS3_EENS_10HashTraitsIS3_EES9_E6rehashEi +__ZN3WTF6VectorItLm256EE6appendItEEvPKT_m +__ZN3WTF6VectorItLm256EE14expandCapacityEm +__ZN3WTF6VectorIPN3JSC12CallLinkInfoELm0EE15reserveCapacityEm +__ZN3JSC4Heap7collectEv +__ZN3JSC4Heap30markStackObjectsConservativelyEv +__ZN3JSC4Heap31markCurrentThreadConservativelyEv +__ZN3JSC4Heap39markCurrentThreadConservativelyInternalEv +__ZN3JSC4Heap18markConservativelyEPvS1_ +__ZN3JSC7JSArray4markEv +__ZN3JSC8JSObject4markEv +__ZN3JSC10JSFunction4markEv +__ZN3JSC6JSCell4markEv +__ZN3JSC14JSGlobalObject4markEv +__ZN3JSC15JSWrapperObject4markEv +__ZN3JSC18GlobalEvalFunction4markEv +__ZN3JSC16FunctionBodyNode4markEv +__ZN3JSC9CodeBlock4markEv +__ZN3JSC4Heap20markProtectedObjectsEv +__ZN3JSC12SmallStrings4markEv +__ZN3JSC4Heap5sweepILNS_8HeapTypeE0EEEmv +__ZN3JSC14JSGlobalObjectD2Ev +__ZN3JSC17FunctionPrototypeD1Ev +__ZN3JSC15ObjectPrototypeD1Ev +__ZN3JSC14ArrayPrototypeD1Ev +__ZN3JSC15StringPrototypeD1Ev +__ZN3JSC16BooleanPrototypeD1Ev +__ZN3JSC15NumberPrototypeD1Ev +__ZN3JSC13DatePrototypeD1Ev +__ZN3JSC12DateInstanceD2Ev +__ZN3JSC15RegExpPrototypeD1Ev +__ZN3JSC14ErrorPrototypeD1Ev +__ZN3JSC20NativeErrorPrototypeD1Ev +__ZN3JSC17ObjectConstructorD1Ev +__ZN3JSC19FunctionConstructorD1Ev +__ZN3JSC16ArrayConstructorD1Ev +__ZN3JSC17StringConstructorD1Ev +__ZN3JSC18BooleanConstructorD1Ev +__ZN3JSC17NumberConstructorD1Ev +__ZN3JSC15DateConstructorD1Ev +__ZN3JSC17RegExpConstructorD1Ev +__ZN3JSC16ErrorConstructorD1Ev +__ZN3JSC22NativeErrorConstructorD1Ev +__ZN3JSC10MathObjectD1Ev +__ZN3JSC18GlobalEvalFunctionD1Ev +__ZN3JSC8JSObjectD1Ev +__ZN3JSC9CodeBlock13unlinkCallersEv +__ZN3WTF6VectorINS_6RefPtrIN3JSC6RegExpEEELm0EE6shrinkEm +__ZN3JSC12JSActivationD1Ev +__ZN3JSC12JSActivationD2Ev +__ZN3JSC12RegExpObjectD1Ev +__ZN3JSC18RegExpMatchesArrayD1Ev +__ZN3JSC4Heap5sweepILNS_8HeapTypeE1EEEmv +__ZN3JSC20globalFuncParseFloatEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3WTF17TCMalloc_PageHeap3NewEm +__ZN3JSC8JITStubs28cti_op_construct_JSConstructEPPv +__ZN3JSC8JSObject17createInheritorIDEv +__ZNK3JSC19BracketAccessorNode10isLocationEv +__ZNK3JSC19BracketAccessorNode21isBracketAccessorNodeEv +__ZN3JSC17AssignBracketNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZN3JSC17BytecodeGenerator12emitPutByValEPNS_10RegisterIDES2_S2_ +__ZN3JSC14PostfixDotNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZN3JSC17ReadModifyDotNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZN3JSC17AssignBracketNodeD0Ev +__ZN3JSC14PostfixDotNodeD0Ev +__ZN3JSC17ReadModifyDotNodeD0Ev +__ZN3JSC3JIT18emit_op_put_by_valEPNS_11InstructionE +__ZN3JSC3JIT22emitSlow_op_put_by_valEPNS_11InstructionERPNS_13SlowCaseEntryE +__ZN3JSC16ArrayConstructor16getConstructDataERNS_13ConstructDataE +__ZN3JSCL29constructWithArrayConstructorEPNS_9ExecStateEPNS_8JSObjectERKNS_7ArgListE +__ZN3JSCL27constructArrayWithSizeQuirkEPNS_9ExecStateERKNS_7ArgListE +__ZN3JSC8JITStubs23cti_op_put_by_val_arrayEPPv +__ZN3JSC8JITStubs13cti_op_strcatEPPv +__ZN3JSC7UString3Rep15reserveCapacityEi +__ZN3JSC7UString13appendNumericEi +__ZN3JSC11concatenateEPNS_7UString3RepEi +__ZN3JSC12JSActivation18getOwnPropertySlotEPNS_9ExecStateERKNS_10IdentifierERNS_12PropertySlotE +__ZN3JSCL18stringFromCharCodeEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSC16globalFuncEscapeEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSCL26stringProtoFuncToUpperCaseEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZNK3JSC12JSActivation14isDynamicScopeEv +__ZN3WTF6VectorINS_6RefPtrIN3JSC10RegisterIDEEELm16EE14expandCapacityEm +__ZN3JSC17ObjectConstructor16getConstructDataERNS_13ConstructDataE +__ZN3JSCL30constructWithObjectConstructorEPNS_9ExecStateEPNS_8JSObjectERKNS_7ArgListE +__ZN3JSC8JITStubs17cti_op_put_by_valEPPv +__ZN3JSC15DateConstructor16getConstructDataERNS_13ConstructDataE +__ZN3JSCL28constructWithDateConstructorEPNS_9ExecStateEPNS_8JSObjectERKNS_7ArgListE +__ZN3JSC13constructDateEPNS_9ExecStateERKNS_7ArgListE +__ZN3JSC8JITStubs18cti_op_is_functionEPPv +__ZN3JSC16jsIsFunctionTypeENS_7JSValueE +__ZN3JSC10Identifier5equalEPKNS_7UString3RepEPKc +__ZN3JSC11JSImmediate8toStringENS_7JSValueE +__ZN3JSC7UString4fromEi +__ZN3JSC7UString3Rep11computeHashEPKti +__ZNK3JSC8NullNode6isNullEv +__ZN3JSC9BreakNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZN3JSC17BytecodeGenerator11breakTargetERKNS_10IdentifierE +__ZN3JSC9BreakNodeD0Ev +__ZN3JSC3JIT15emit_op_eq_nullEPNS_11InstructionE +__ZN3JSC8JITStubs19cti_op_is_undefinedEPPv +__ZN3JSC12JSActivation4markEv +__ZN3JSC12DateInstanceD1Ev +__ZNK3JSC18EmptyStatementNode16isEmptyStatementEv +__ZN3JSC18EmptyStatementNodeD0Ev +__ZN3JSC3JIT15emit_op_pre_decEPNS_11InstructionE +__ZN3JSC3JIT19emitSlow_op_pre_decEPNS_11InstructionERPNS_13SlowCaseEntryE +__ZN3WTF13tryFastMallocEm +__ZN3JSC8JITStubs17cti_timeout_checkEPPv +__ZN3JSC14TimeoutChecker10didTimeOutEPNS_9ExecStateE +__ZN3JSC8JITStubs14cti_op_pre_decEPPv +__ZN3JSC13jsAddSlowCaseEPNS_9ExecStateENS_7JSValueES2_ +__ZNK3JSC8JSString11toPrimitiveEPNS_9ExecStateENS_22PreferredPrimitiveTypeE +__ZNK3JSC8JSObject11toPrimitiveEPNS_9ExecStateENS_22PreferredPrimitiveTypeE +__ZNK3JSC8JSObject12defaultValueEPNS_9ExecStateENS_22PreferredPrimitiveTypeE +__ZN3JSCL22objectProtoFuncValueOfEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSCL25functionProtoFuncToStringEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZNK3JSC10JSFunction9classInfoEv +__ZNK3JSC21UStringSourceProvider8getRangeEii +__ZNK3JSC7UString6substrEii +__ZN3JSC8JITStubs26cti_op_get_by_id_self_failEPPv +__ZN3JSC3JIT29privateCompileGetByIdSelfListEPNS_17StructureStubInfoEPNS_30PolymorphicAccessStructureListEiPNS_9StructureEm +__ZN3JSC8JITStubs16cti_op_nstricteqEPPv +__ZN3JSC9ForInNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZN3JSC17BytecodeGenerator20emitNextPropertyNameEPNS_10RegisterIDES2_PNS_5LabelE +__ZN3JSC9ForInNodeD0Ev +__ZN3JSC3JIT18emit_op_next_pnameEPNS_11InstructionE +__ZN3JSC8JITStubs17cti_op_get_pnamesEPPv +__ZN3JSC8JSObject16getPropertyNamesEPNS_9ExecStateERNS_17PropertyNameArrayE +__ZN3JSC9Structure26getEnumerablePropertyNamesEPNS_9ExecStateERNS_17PropertyNameArrayEPNS_8JSObjectE +__ZN3JSC9Structure35getEnumerableNamesFromPropertyTableERNS_17PropertyNameArrayE +__ZN3JSC8JITStubs17cti_op_next_pnameEPPv +__ZN3JSC13jsOwnedStringEPNS_12JSGlobalDataERKNS_7UStringE +__ZN3JSC22JSPropertyNameIterator10invalidateEv +__ZN3JSC3JIT22emit_op_init_argumentsEPNS_11InstructionE +__ZN3JSC3JIT24emit_op_create_argumentsEPNS_11InstructionE +__ZN3JSC8JITStubs33cti_op_create_arguments_no_paramsEPPv +__ZN3JSC9Arguments18getOwnPropertySlotEPNS_9ExecStateERKNS_10IdentifierERNS_12PropertySlotE +__ZN3JSC3JIT16emit_op_post_decEPNS_11InstructionE +__ZN3JSC3JIT20emitSlow_op_post_decEPNS_11InstructionERPNS_13SlowCaseEntryE +__ZN3JSC8JITStubs15cti_op_post_decEPPv +__ZN3JSC9Arguments18getOwnPropertySlotEPNS_9ExecStateEjRNS_12PropertySlotE +__ZN3JSC17RegExpConstructor18getOwnPropertySlotEPNS_9ExecStateERKNS_10IdentifierERNS_12PropertySlotE +__ZN3JSC17RegExpConstructor3putEPNS_9ExecStateERKNS_10IdentifierENS_7JSValueERNS_15PutPropertySlotE +__ZN3JSC6JSCell11getCallDataERNS_8CallDataE +__ZN3JSC10JSFunction3putEPNS_9ExecStateERKNS_10IdentifierENS_7JSValueERNS_15PutPropertySlotE +__ZN3JSC8JITStubs16cti_op_new_arrayEPPv +__ZN3JSC14constructArrayEPNS_9ExecStateERKNS_7ArgListE +__ZN3JSCL18arrayProtoFuncPushEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSCL30comparePropertyMapEntryIndicesEPKvS1_ +__ZN3WTF6VectorIN3JSC10IdentifierELm20EE15reserveCapacityEm +__ZN3JSC12StringObject3putEPNS_9ExecStateERKNS_10IdentifierENS_7JSValueERNS_15PutPropertySlotE +__ZN3JSC8JITStubs17cti_op_push_scopeEPPv +__ZN3JSC8JITStubs14cti_op_resolveEPPv +__ZN3JSC8JITStubs16cti_op_pop_scopeEPPv +__ZN3JSC3JIT31privateCompilePutByIdTransitionEPNS_17StructureStubInfoEPNS_9StructureES4_mPNS_14StructureChainENS_22AbstractMacr +__ZN3JSC20MacroAssemblerX86_649branchPtrENS_23MacroAssemblerX86Common9ConditionENS_22AbstractMacroAssemblerINS_12X86AssemblerEE +__ZN3JSC3JIT19patchPutByIdReplaceEPNS_17StructureStubInfoEPNS_9StructureEmNS_22AbstractMacroAssemblerINS_12X86AssemblerEE22Proc +__ZN3JSC17NumberConstructor18getOwnPropertySlotEPNS_9ExecStateERKNS_10IdentifierERNS_12PropertySlotE +__ZN3JSC8JITStubs16cti_op_is_stringEPPv +__ZN3JSC8JITStubs19cti_op_convert_thisEPPv +__ZNK3JSC8JSString12toThisObjectEPNS_9ExecStateE +__ZN3JSCL22stringProtoFuncReplaceEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSC12StringObject14toThisJSStringEPNS_9ExecStateE +__ZN3JSCL21arrayProtoFuncForEachEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSC11Interpreter20prepareForRepeatCallEPNS_16FunctionBodyNodeEPNS_9ExecStateEPNS_10JSFunctionEiPNS_14ScopeChainNodeEPNS_7J +__ZN3JSC3JIT16emit_op_post_incEPNS_11InstructionE +__ZN3JSC3JIT20emitSlow_op_post_incEPNS_11InstructionERPNS_13SlowCaseEntryE +__ZN3JSC11Interpreter7executeERNS_16CallFrameClosureEPNS_7JSValueE +__ZN3JSC10MathObject18getOwnPropertySlotEPNS_9ExecStateERKNS_10IdentifierERNS_12PropertySlotE +__ZN3JSC11Interpreter13endRepeatCallERNS_16CallFrameClosureE +__ZN3JSCL21resizePropertyStorageEPNS_8JSObjectEii +__ZN3JSC8JSObject23allocatePropertyStorageEmm +__ZN3JSC14ExecutablePool12poolAllocateEm +__ZN3JSC9Arguments4markEv +__ZN3JSC22JSPropertyNameIterator4markEv +__ZN3JSC3JIT10unlinkCallEPNS_12CallLinkInfoE +__ZN3JSC22JSPropertyNameIteratorD1Ev +__ZN3JSC9ArgumentsD1Ev +__ZN3JSC9ArgumentsD2Ev +__ZN3JSC12StringObjectD1Ev +__ZN3WTF6VectorIPN3JSC9StructureELm8EE14expandCapacityEmPKS3_ +__ZN3WTF6VectorIPN3JSC9StructureELm8EE15reserveCapacityEm +__ZN3JSCL19arrayProtoFuncShiftEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSCL11getPropertyEPNS_9ExecStateEPNS_8JSObjectEj +__ZN3JSC7JSArray14deletePropertyEPNS_9ExecStateEj +__ZN3JSC7JSArray9setLengthEj +__ZN3JSC7UString6appendEPKc +__ZN3JSC8JITStubs23cti_op_create_argumentsEPPv +__ZN3JSCL19arrayProtoFuncSliceEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZNK3JSC7JSValue9toIntegerEPNS_9ExecStateE +__ZN3JSC24ApplyFunctionCallDotNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZNK3JSC14ExpressionNode13isSimpleArrayEv +__ZN3JSC17BytecodeGenerator26emitJumpIfNotFunctionApplyEPNS_10RegisterIDEPNS_5LabelE +__ZN3JSC17BytecodeGenerator15emitCallVarargsEPNS_10RegisterIDES2_S2_S2_jjj +__ZN3JSC24ApplyFunctionCallDotNodeD0Ev +__ZN3JSC3JIT20emit_op_load_varargsEPNS_11InstructionE +__ZN3JSC3JIT20emit_op_call_varargsEPNS_11InstructionE +__ZN3JSC3JIT20compileOpCallVarargsEPNS_11InstructionE +__ZN3JSC3JIT29compileOpCallVarargsSetupArgsEPNS_11InstructionE +__ZN3JSC3JIT24emitSlow_op_call_varargsEPNS_11InstructionERPNS_13SlowCaseEntryE +__ZN3JSC3JIT28compileOpCallVarargsSlowCaseEPNS_11InstructionERPNS_13SlowCaseEntryE +__ZN3JSC8JITStubs19cti_op_load_varargsEPPv +__ZNK3JSC7JSArray9classInfoEv +__ZN3JSC7JSArray15copyToRegistersEPNS_9ExecStateEPNS_8RegisterEj +__ZNK3JSC7UString30spliceSubstringsWithSeparatorsEPKNS0_5RangeEiPKS0_i +__ZN3JSC8JSObject18getOwnPropertySlotEPNS_9ExecStateEjRNS_12PropertySlotE +__ZN3JSC8JSObject18getOwnPropertySlotEPNS_9ExecStateERKNS_10IdentifierERNS_12PropertySlotE +__ZN3JSC7UString4fromEd +__ZN3WTF4dtoaEPcdiPiS1_PS0_ +__ZN3JSC8JITStubs21cti_op_put_by_id_failEPPv +__ZN3JSC13DeleteDotNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZN3JSC17BytecodeGenerator14emitDeleteByIdEPNS_10RegisterIDES2_RKNS_10IdentifierE +__ZN3JSC13DeleteDotNodeD0Ev +__ZN3JSC3JIT17emit_op_del_by_idEPNS_11InstructionE +__ZN3JSC8JITStubs16cti_op_del_by_idEPPv +__ZN3JSC10JSFunction14deletePropertyEPNS_9ExecStateERKNS_10IdentifierE +__ZN3JSC8JSObject14deletePropertyEPNS_9ExecStateERKNS_10IdentifierE +__ZNK3JSC7ArgList8getSliceEiRS0_ +__ZN3JSC3JIT26emit_op_tear_off_argumentsEPNS_11InstructionE +__ZN3JSC8JITStubs25cti_op_tear_off_argumentsEPPv +__ZNK3JSC12StringObject12toThisStringEPNS_9ExecStateE +__ZN3JSC13PrefixDotNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZN3JSC13PrefixDotNodeD0Ev +__ZNK3JSC8JSObject8toStringEPNS_9ExecStateE +__ZN3JSCL22arrayProtoFuncToStringEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSCL21arrayProtoFuncIndexOfEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSC16ErrorConstructor16getConstructDataERNS_13ConstructDataE +__ZN3JSCL29constructWithErrorConstructorEPNS_9ExecStateEPNS_8JSObjectERKNS_7ArgListE +__ZN3JSC14constructErrorEPNS_9ExecStateERKNS_7ArgListE +__ZN3JSCL21stringProtoFuncCharAtEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSC8JITStubs32cti_op_get_by_id_proto_list_fullEPPv +__ZN3JSC14InstanceOfNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZN3JSC17BytecodeGenerator14emitInstanceOfEPNS_10RegisterIDES2_S2_S2_ +__ZN3JSC14InstanceOfNodeD0Ev +__ZN3JSC3JIT18emit_op_instanceofEPNS_11InstructionE +__ZN3JSC3JIT22emitSlow_op_instanceofEPNS_11InstructionERPNS_13SlowCaseEntryE +__ZN3JSC12X86Assembler6orl_irEiNS_3X8610RegisterIDE +__ZN3JSC17RegExpConstructor16getConstructDataERNS_13ConstructDataE +__ZN3JSCL30constructWithRegExpConstructorEPNS_9ExecStateEPNS_8JSObjectERKNS_7ArgListE +__ZN3JSC15constructRegExpEPNS_9ExecStateERKNS_7ArgListE +__ZN3JSC13DatePrototype18getOwnPropertySlotEPNS_9ExecStateERKNS_10IdentifierERNS_12PropertySlotE +__ZN3JSCL20dateProtoFuncGetTimeEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZNK3JSC12DateInstance9classInfoEv +__ZN3JSC12RegExpObject18getOwnPropertySlotEPNS_9ExecStateERKNS_10IdentifierERNS_12PropertySlotE +__ZN3JSCL19regExpProtoFuncTestEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSC12RegExpObject5matchEPNS_9ExecStateERKNS_7ArgListE +__ZN3JSC3JIT18emit_op_jmp_scopesEPNS_11InstructionE +__ZN3JSC3JIT30privateCompileGetByIdChainListEPNS_17StructureStubInfoEPNS_30PolymorphicAccessStructureListEiPNS_9StructureEPNS_1 +__ZN3JSC18globalFuncUnescapeEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSC7UString6appendEt +__ZN3JSC8JSObject3putEPNS_9ExecStateEjNS_7JSValueE +__ZN3JSC17PropertyNameArray3addEPNS_7UString3RepE +__ZN3WTF7HashSetIPN3JSC7UString3RepENS_7PtrHashIS4_EENS_10HashTraitsIS4_EEE3addERKS4_ +__ZN3WTF9HashTableIPN3JSC7UString3RepES4_NS_17IdentityExtractorIS4_EENS_7PtrHashIS4_EENS_10HashTraitsIS4_EESA_E6rehashEi +__ZN3WTF6VectorIN3JSC10IdentifierELm20EE14expandCapacityEm +__ZN3JSCL20arrayProtoFuncConcatEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZNK3JSC9ArrayNode13isSimpleArrayEv +__ZN3JSC8JITStubs10cti_op_mulEPPv +__ZN3JSC8JITStubs16cti_op_is_objectEPPv +__ZN3JSC14jsIsObjectTypeENS_7JSValueE +__ZNK3JSC11Interpreter18retrieveLastCallerEPNS_9ExecStateERiRlRNS_7UStringERNS_7JSValueE +__ZN3JSC9CodeBlock34reparseForExceptionInfoIfNecessaryEPNS_9ExecStateE +__ZNK3JSC10ScopeChain10localDepthEv +__ZNK3JSC12JSActivation9classInfoEv +__ZN3JSC6Parser7reparseINS_16FunctionBodyNodeEEEN3WTF10PassRefPtrIT_EEPNS_12JSGlobalDataEPS5_ +__ZN3JSC16FunctionBodyNode6createEPNS_12JSGlobalDataEPNS_14SourceElementsEPN3WTF6VectorISt4pairINS_10IdentifierEjELm0EEEPNS6_IP +__ZN3JSC13StatementNode6setLocEii +__ZN3JSC16FunctionBodyNode14copyParametersEv +__ZN3JSC16FunctionBodyNode13finishParsingEPNS_10IdentifierEm +__ZN3JSC16FunctionBodyNode31bytecodeForExceptionInfoReparseEPNS_14ScopeChainNodeEPNS_9CodeBlockE +__ZN3JSC9CodeBlock36hasGlobalResolveInfoAtBytecodeOffsetEj +__ZN3JSC9CodeBlock27lineNumberForBytecodeOffsetEPNS_9ExecStateEj +__ZN3WTF6VectorIPvLm0EE14expandCapacityEmPKS1_ +__ZN3WTF6VectorIPvLm0EE15reserveCapacityEm +__ZN3JSC3JIT16emit_op_jeq_nullEPNS_11InstructionE +__ZN3JSC8JITStubs16cti_op_is_numberEPPv +__ZN3JSCL23stringProtoFuncToStringEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZNK3JSC12StringObject9classInfoEv +__ZN3JSC8JITStubs28cti_op_get_by_id_string_failEPPv +__ZN3JSC11JSImmediate9prototypeENS_7JSValueEPNS_9ExecStateE +__ZN3JSCL23numberProtoFuncToStringEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSC3JIT16emit_op_neq_nullEPNS_11InstructionE +__ZN3JSC4Yarr23RegexPatternConstructor8copyTermERNS0_11PatternTermE +__ZL17bracketIsAnchoredPKh +__ZL32branchFindFirstAssertedCharacterPKhb +__ZL20branchNeedsLineStartPKhjj +__ZN3JSC18RegExpMatchesArray18getOwnPropertySlotEPNS_9ExecStateERKNS_10IdentifierERNS_12PropertySlotE +__ZN3JSCL20stringProtoFuncSliceEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSC3JIT17emit_op_jneq_nullEPNS_11InstructionE +__ZN3JSC8JITStubs25cti_op_call_NotJSFunctionEPPv +__ZN3JSC17StringConstructor11getCallDataERNS_8CallDataE +__ZN3JSCL21callStringConstructorEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZNK3JSC12StringObject8toStringEPNS_9ExecStateE +__ZN3JSC23FunctionCallBracketNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZN3JSC20EvalFunctionCallNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZN3JSC17BytecodeGenerator19emitResolveWithBaseEPNS_10RegisterIDES2_RKNS_10IdentifierE +__ZN3JSC23FunctionCallBracketNodeD0Ev +__ZN3JSC20EvalFunctionCallNodeD0Ev +__ZN3JSC3JIT25emit_op_resolve_with_baseEPNS_11InstructionE +__ZN3JSC3JIT17emit_op_call_evalEPNS_11InstructionE +__ZN3JSC3JIT21emitSlow_op_call_evalEPNS_11InstructionERPNS_13SlowCaseEntryE +__ZN3JSC14MacroAssembler4jumpENS_22AbstractMacroAssemblerINS_12X86AssemblerEE5LabelE +__ZN3JSCL19regExpProtoFuncExecEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZNK3JSC7UString12replaceRangeEiiRKS0_ +__ZN3JSC8JITStubs17cti_op_is_booleanEPPv +__ZN3JSC3JIT22emit_op_put_global_varEPNS_11InstructionE +__ZN3JSCL23regExpProtoFuncToStringEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSCL18regExpObjectSourceEPNS_9ExecStateERKNS_10IdentifierERKNS_12PropertySlotE +__ZN3JSCL18regExpObjectGlobalEPNS_9ExecStateERKNS_10IdentifierERKNS_12PropertySlotE +__ZN3JSCL22regExpObjectIgnoreCaseEPNS_9ExecStateERKNS_10IdentifierERKNS_12PropertySlotE +__ZN3JSCL21regExpObjectMultilineEPNS_9ExecStateERKNS_10IdentifierERKNS_12PropertySlotE +__ZN3JSC4Yarr14RegexGenerator30generatePatternCharacterGreedyERNS1_19TermGenerationStateE +__ZN3JSC8JITStubs27cti_op_get_by_id_proto_failEPPv +__ZN3JSC17DeleteResolveNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZN3JSC17DeleteResolveNodeD0Ev +__ZN3JSC3JIT20emit_op_resolve_baseEPNS_11InstructionE +__ZN3JSC8JITStubs19cti_op_resolve_baseEPPv +__ZN3JSC12JSActivation14deletePropertyEPNS_9ExecStateERKNS_10IdentifierE +__ZN3JSC16JSVariableObject14deletePropertyEPNS_9ExecStateERKNS_10IdentifierE +__ZNK3JSC8JSString8toNumberEPNS_9ExecStateE +__ZN3JSC8JITStubs24cti_op_resolve_with_baseEPPv +__ZN3JSC8JITStubs16cti_op_call_evalEPPv +__ZN3JSC11Interpreter8callEvalEPNS_9ExecStateEPNS_12RegisterFileEPNS_8RegisterEiiRNS_7JSValueE +__ZN3JSC13LiteralParser5Lexer3lexERNS1_18LiteralParserTokenE +__ZN3JSC13LiteralParser14parseStatementEv +__ZN3JSC13LiteralParser15parseExpressionEv +__ZN3JSC13LiteralParser10parseArrayEv +__ZN3JSC13LiteralParser11parseObjectEv +__ZN3JSC10Identifier3addEPNS_9ExecStateEPKti +__ZN3JSC7JSArray4pushEPNS_9ExecStateENS_7JSValueE +__ZN3JSCL19mathProtoFuncRandomEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3WTF16weakRandomNumberEv +__ZN3JSCL18mathProtoFuncFloorEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSC4Heap15recordExtraCostEm +__ZN3JSC6Parser5parseINS_8EvalNodeEEEN3WTF10PassRefPtrIT_EEPNS_9ExecStateEPNS_8DebuggerERKNS_10SourceCodeEPiPNS_7UStringE +__ZN3JSC9ExecState9thisValueEv +__ZN3JSC11Interpreter7executeEPNS_8EvalNodeEPNS_9ExecStateEPNS_8JSObjectEiPNS_14ScopeChainNodeEPNS_7JSValueE +__ZN3JSC8EvalNode16generateBytecodeEPNS_14ScopeChainNodeE +__ZN3JSC17BytecodeGeneratorC2EPNS_8EvalNodeEPKNS_8DebuggerERKNS_10ScopeChainEPN3WTF7HashMapINS9_6RefPtrINS_7UString3RepEEENS_16 +__ZN3JSC8EvalNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZThn16_N3JSC8EvalNodeD0Ev +__ZN3JSC8EvalNodeD0Ev +__ZN3JSC23objectProtoFuncToStringEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZNK3JSC8JSObject9classNameEv +__ZN3JSC11JSImmediate12toThisObjectENS_7JSValueEPNS_9ExecStateE +__ZNK3JSC6JSCell17getTruncatedInt32ERi +__ZN3JSC15toInt32SlowCaseEdRb +__ZN3JSCL20dateProtoFuncSetYearEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZNK3JSC12DateInstance21msToGregorianDateTimeEdbRNS_17GregorianDateTimeE +__ZN3JSC21msToGregorianDateTimeEdbRNS_17GregorianDateTimeE +__ZN3JSCL12getDSTOffsetEdd +__ZN3JSC21gregorianDateTimeToMSERKNS_17GregorianDateTimeEdb +__ZN3JSCL15dateToDayInYearEiii +__ZN3JSC8JITStubs19cti_op_to_primitiveEPPv +__ZN3JSCL21dateProtoFuncToStringEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSC10formatTimeERKNS_17GregorianDateTimeEb +__ZN3JSCL24dateProtoFuncToGMTStringEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSC7UString13appendNumericEd +__ZN3JSC11concatenateEPNS_7UString3RepEd +__ZN3JSCL20dateProtoFuncGetYearEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSCL20dateProtoFuncGetDateEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSCL21dateProtoFuncGetMonthEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSCL21dateProtoFuncGetHoursEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSCL23dateProtoFuncGetMinutesEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSCL23dateProtoFuncGetSecondsEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSCL19dateProtoFuncGetDayEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSCL30dateProtoFuncGetTimezoneOffsetEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSC28createUndefinedVariableErrorEPNS_9ExecStateERKNS_10IdentifierEjPNS_9CodeBlockE +__ZN3JSC9CodeBlock32expressionRangeForBytecodeOffsetEPNS_9ExecStateEjRiS3_S3_ +__ZN3JSC5Error6createEPNS_9ExecStateENS_9ErrorTypeERKNS_7UStringEilS6_ +__ZN3JSC22NativeErrorConstructor16getConstructDataERNS_13ConstructDataE +__ZN3JSCL35constructWithNativeErrorConstructorEPNS_9ExecStateEPNS_8JSObjectERKNS_7ArgListE +__ZN3JSC22NativeErrorConstructor9constructEPNS_9ExecStateERKNS_7ArgListE +__ZN3JSC8JSObject17putWithAttributesEPNS_9ExecStateERKNS_10IdentifierENS_7JSValueEj +__ZN3JSCL23returnToThrowTrampolineEPNS_12JSGlobalDataEPvRS2_ +_ctiVMThrowTrampoline +__ZN3JSC8JITStubs12cti_vm_throwEPPv +__ZN3JSC11Interpreter14throwExceptionERPNS_9ExecStateERNS_7JSValueEjb +__ZNK3JSC8JSObject22isNotAnObjectErrorStubEv +__ZNK3JSC8JSObject19isWatchdogExceptionEv +__ZN3JSC9CodeBlock24handlerForBytecodeOffsetEj +__ZN3JSC8JITStubs21cti_op_push_new_scopeEPPv +__ZN3WTF6VectorIN3JSC22AbstractMacroAssemblerINS1_12X86AssemblerEE4JumpELm16EE14expandCapacityEm +__ZN3JSCL20dateProtoFuncSetTimeEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZNK3WTF7HashMapINS_6RefPtrIN3JSC7UString3RepEEENS1_INS2_8EvalNodeEEENS_7StrHashIS5_EENS_10HashTraitsIS5_EENSA_IS7_EEE3getEPS4 +__ZN3WTF7HashMapINS_6RefPtrIN3JSC7UString3RepEEENS1_INS2_8EvalNodeEEENS_7StrHashIS5_EENS_10HashTraitsIS5_EENSA_IS7_EEE3setEPS4_ +__ZN3WTF9HashTableINS_6RefPtrIN3JSC7UString3RepEEESt4pairIS5_NS1_INS2_8EvalNodeEEEENS_18PairFirstExtractorIS9_EENS_7StrHashIS5_ +__ZN3JSC10LessEqNodeD0Ev +__ZN3JSC8JITStubs14cti_op_jlesseqEPPv +__ZN3JSC8JSString18getPrimitiveNumberEPNS_9ExecStateERdRNS_7JSValueE +__ZL18makeRightShiftNodePvPN3JSC14ExpressionNodeES2_b +__ZN3JSC14RightShiftNodeD0Ev +__ZN3JSC3JIT14emit_op_rshiftEPNS_11InstructionE +__ZN3JSC3JIT18emitSlow_op_rshiftEPNS_11InstructionERPNS_13SlowCaseEntryE +__ZN3JSC18PostfixBracketNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZN3JSC18PostfixBracketNodeD0Ev +__ZN3JSC21ReadModifyBracketNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZN3JSC21ReadModifyBracketNodeD0Ev +__ZN3JSC11Interpreter15unwindCallFrameERPNS_9ExecStateENS_7JSValueERjRPNS_9CodeBlockE +__ZN3JSCL22errorProtoFuncToStringEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3WTF23waitForThreadCompletionEjPPv +__ZN3WTF15ThreadConditionD1Ev +__ZN3JSC9Structure24removePropertyTransitionEPS0_RKNS_10IdentifierERm +__ZN3JSC12JSActivation3putEPNS_9ExecStateERKNS_10IdentifierENS_7JSValueERNS_15PutPropertySlotE +__ZN3JSC26createNotAnObjectErrorStubEPNS_9ExecStateEb +__ZN3JSC13JSNotAnObject18getOwnPropertySlotEPNS_9ExecStateERKNS_10IdentifierERNS_12PropertySlotE +__ZNK3JSC22JSNotAnObjectErrorStub22isNotAnObjectErrorStubEv +__ZN3JSC22createNotAnObjectErrorEPNS_9ExecStateEPNS_22JSNotAnObjectErrorStubEjPNS_9CodeBlockE +__ZN3JSC9CodeBlock37getByIdExceptionInfoForBytecodeOffsetEPNS_9ExecStateEjRNS_8OpcodeIDE +__ZN3JSCL18createErrorMessageEPNS_9ExecStateEPNS_9CodeBlockEiiiNS_7JSValueENS_7UStringE +__ZN3JSC13ErrorInstanceD1Ev +__ZN3JSC22JSNotAnObjectErrorStubD1Ev +__ZN3JSC13JSNotAnObjectD1Ev +__ZN3JSC19JSStaticScopeObjectD1Ev +__ZN3JSC19JSStaticScopeObjectD2Ev +__ZN3JSC17DeleteBracketNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZN3JSC17BytecodeGenerator15emitDeleteByValEPNS_10RegisterIDES2_S2_ +__ZN3JSC17DeleteBracketNodeD0Ev +__ZN3JSC8JITStubs17cti_op_del_by_valEPPv +__ZN3JSC8JSObject14deletePropertyEPNS_9ExecStateEj +__ZN3JSC28globalFuncEncodeURIComponentEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSCL6encodeEPNS_9ExecStateERKNS_7ArgListEPKc +__ZNK3JSC7UString10UTF8StringEb __ZN3WTF7Unicode18convertUTF16ToUTF8EPPKtS2_PPcS4_b -__Z35NPN_InitializeVariantWithStringCopyP10_NPVariantPK9_NPString -__ZN3KJS7CStringD1Ev -__NPN_ReleaseObject -__Z12jsDeallocateP8NPObject -__ZN3KJS8Bindings10RootObject11gcUnprotectEPNS_8JSObjectE -_pow5mult -_quorem -_diff -__ZN3WTF6VectorIPN3KJS12FuncDeclNodeELm16EE14expandCapacityEmPKS3_ -__ZN3WTF6VectorIPN3KJS12FuncDeclNodeELm16EE14expandCapacityEm -__ZN3WTF6VectorIPN3KJS12FuncDeclNodeELm16EE15reserveCapacityEm -__ZN3KJS10NumberNode8setValueEd -__ZN3KJS11ResolveNode16evaluateToNumberEPNS_9ExecStateE -__ZN3KJS21dateProtoFuncToStringEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS24dateProtoFuncGetFullYearEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS12NotEqualNode8evaluateEPNS_9ExecStateE -__ZN3KJS14InstanceOfNode17evaluateToBooleanEPNS_9ExecStateE -__ZN3KJS17PreIncResolveNode8evaluateEPNS_9ExecStateE -__ZNK3KJS9NumberImp9toBooleanEPNS_9ExecStateE -__ZN3KJS10LessEqNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS29objectProtoFuncHasOwnPropertyEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS10LessEqNode17evaluateToBooleanEPNS_9ExecStateE -__ZN3KJS13UnaryPlusNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS17DeleteBracketNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS17DeleteBracketNode8evaluateEPNS_9ExecStateE -__ZN3KJS20arrayProtoFuncSpliceEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS17staticValueGetterINS_13MathObjectImpEEEPNS_7JSValueEPNS_9ExecStateEPNS_8JSObjectERKNS_10IdentifierERKNS_12PropertySlotE -__ZNK3KJS13MathObjectImp16getValuePropertyEPNS_9ExecStateEi -__NPN_DeallocateObject -__ZN3KJS14PostIncDotNodeD1Ev -__ZN3KJS22ReadModifyLocalVarNodeD1Ev -__ZN3KJS10LessEqNodeD1Ev -__ZN3KJS18PostDecResolveNodeD1Ev -__ZN3KJS17DeleteBracketNodeD1Ev -__ZN3KJS18PostIncResolveNodeD1Ev -__ZN3KJS14InstanceOfNodeD1Ev -__ZN3KJS10NegateNodeD1Ev -__ZN3KJS17PreDecResolveNodeD1Ev -__ZN3KJS21ReadModifyBracketNodeD1Ev -__ZN3KJS10BitAndNodeD1Ev -__ZN3KJS9BitOrNodeD1Ev -__ZN3KJS14RightShiftNodeD1Ev -__ZN3KJS13LeftShiftNodeD1Ev -__ZN3KJS13UnaryPlusNodeD1Ev -__ZN3KJS13MathObjectImpD0Ev -__ZN3KJS14NativeErrorImpD0Ev -__ZN3KJS14ErrorObjectImpD0Ev -__ZN3KJS15RegExpObjectImpD0Ev -__ZN3KJS17DateObjectFuncImpD0Ev -__ZN3KJS13DateObjectImpD0Ev -__ZN3KJS15NumberObjectImpD0Ev -__ZN3KJS16BooleanObjectImpD0Ev -__ZN3KJS19StringObjectFuncImpD0Ev -__ZN3KJS15StringObjectImpD0Ev -__ZN3KJS14ArrayObjectImpD0Ev -__ZN3KJS17FunctionObjectImpD0Ev -__ZN3KJS15ObjectObjectImpD0Ev -__ZN3KJS20NativeErrorPrototypeD0Ev -__ZN3KJS15RegExpPrototypeD0Ev -__ZN3KJS15NumberPrototypeD0Ev -__ZN3KJS16BooleanPrototypeD0Ev -__ZN3KJS15StringPrototypeD0Ev -__ZN3KJS15ObjectPrototypeD0Ev -__ZN3KJS17FunctionPrototypeD0Ev -__ZN3KJS13PreIncDotNodeD1Ev -__ZN3KJS17staticValueGetterINS_15RegExpObjectImpEEEPNS_7JSValueEPNS_9ExecStateEPNS_8JSObjectERKNS_10IdentifierERKNS_12PropertySlotE -__ZNK3KJS15RegExpObjectImp16getValuePropertyEPNS_9ExecStateEi -__ZNK3KJS15RegExpObjectImp10getBackrefEj -__ZN3KJS16mathProtoFuncMaxEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS17staticValueGetterINS_15NumberObjectImpEEEPNS_7JSValueEPNS_9ExecStateEPNS_8JSObjectERKNS_10IdentifierERKNS_12PropertySlotE -__ZNK3KJS15NumberObjectImp16getValuePropertyEPNS_9ExecStateEi -__ZN3KJS10NegateNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS10NegateNode8evaluateEPNS_9ExecStateE -__ZN3KJS25stringProtoFuncCharCodeAtEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS21arrayProtoFuncUnShiftEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS10LessEqNode8evaluateEPNS_9ExecStateE -__ZN3KJS8JSObject15getPropertySlotEPNS_9ExecStateEjRNS_12PropertySlotE -__ZNK3KJS12PropertySlot8getValueEPNS_9ExecStateEPNS_8JSObjectEj -__ZN3KJS16mathProtoFuncMinEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS10Identifier5equalEPKNS_7UString3RepEPKc -__ZN3KJS11addSlowCaseEPNS_9ExecStateEPNS_7JSValueES3_ -__ZN3KJS8LessNode8evaluateEPNS_9ExecStateE -__ZN3KJS7DivNode16evaluateToNumberEPNS_9ExecStateE -__ZN3KJS10NegateNode16evaluateToNumberEPNS_9ExecStateE -__ZN3KJS7AddNode16evaluateToNumberEPNS_9ExecStateE -__ZN3KJS16mathProtoFuncSinEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS16mathProtoFuncLogEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS16mathProtoFuncAbsEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3WTF6VectorIPN3KJS9ExecStateELm16EE14expandCapacityEm -__ZN3WTF6VectorIPN3KJS9ExecStateELm16EE15reserveCapacityEm -__ZN3KJS17arrayProtoFuncPopEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS21stringProtoFuncSubstrEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS28globalFuncEncodeURIComponentEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS6encodeEPNS_9ExecStateERKNS_4ListEPKc -__ZN3KJS17PrefixBracketNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS17PreIncBracketNode8evaluateEPNS_9ExecStateE -__ZN3KJS16mathProtoFuncExpEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS17mathProtoFuncATanEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS17mathProtoFuncCeilEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS14AddNumbersNode8evaluateEPNS_9ExecStateE -__ZN3KJS18arrayProtoFuncSortEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS13ArrayInstance4sortEPNS_9ExecStateEPNS_8JSObjectE -__ZN3KJS13ArrayInstance17compactForSortingEv -__ZN3KJS34compareWithCompareFunctionForQSortEPKvS1_ -__ZN3KJS13ArrayInstance4sortEPNS_9ExecStateE -__ZN3KJS16mathProtoFuncPowEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS15NumberObjectImp9constructEPNS_9ExecStateERKNS_4ListE -__ZN3KJS23numberProtoFuncToStringEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZNK3KJS9NumberImp8toObjectEPNS_9ExecStateE -__ZN3KJS16mathProtoFuncCosEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS17mathProtoFuncSqrtEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS17mathProtoFuncASinEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS14ExpressionNode16evaluateToNumberEPNS_9ExecStateE -__ZN3KJS11DoWhileNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS21stringProtoFuncSearchEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS13PreDecDotNode8evaluateEPNS_9ExecStateE -__ZN3KJS18PostfixBracketNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS18PostIncBracketNode8evaluateEPNS_9ExecStateE -__ZN3KJS13LeftShiftNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE +__ZN3JSC10NegateNodeD0Ev +__ZN3JSC8JITStubs13cti_op_negateEPPv +__ZN3JSCL17mathProtoFuncSqrtEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSCL16mathProtoFuncAbsEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSCL18mathProtoFuncRoundEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSCL16mathProtoFuncCosEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSCL16mathProtoFuncSinEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSC8JITStubs10cti_op_subEPPv +__ZNK3JSC8JSObject8toNumberEPNS_9ExecStateE +__ZN3JSC16ArrayConstructor11getCallDataERNS_8CallDataE +__ZN3JSCL20callArrayConstructorEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSC8JITStubs10cti_op_modEPPv +__ZN3JSC8JITStubs12cti_op_jlessEPPv +__ZL17makeLeftShiftNodePvPN3JSC14ExpressionNodeES2_b +__ZN3JSC13LeftShiftNodeD0Ev +__ZN3JSC3JIT14emit_op_lshiftEPNS_11InstructionE +__ZN3JSC3JIT18emitSlow_op_lshiftEPNS_11InstructionERPNS_13SlowCaseEntryE +__ZN3JSC11JITStubCall11addArgumentENS_3X8610RegisterIDE +__ZN3JSCL16mathProtoFuncMaxEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSC10BitAndNodeD0Ev +__ZN3JSC3JIT14emit_op_bitandEPNS_11InstructionE +__ZN3JSC3JIT18emitSlow_op_bitandEPNS_11InstructionERPNS_13SlowCaseEntryE +__ZN3JSC8JITStubs13cti_op_bitandEPPv +__ZN3JSC14BitwiseNotNodeD0Ev +__ZN3JSC3JIT14emit_op_bitnotEPNS_11InstructionE +__ZN3JSC3JIT18emitSlow_op_bitnotEPNS_11InstructionERPNS_13SlowCaseEntryE +__ZN3JSC22UnsignedRightShiftNodeD0Ev +__ZN3JSC10BitXOrNodeD0Ev +__ZN3JSC3JIT14emit_op_bitxorEPNS_11InstructionE +__ZN3JSC3JIT18emitSlow_op_bitxorEPNS_11InstructionERPNS_13SlowCaseEntryE +__ZN3JSCL25stringProtoFuncCharCodeAtEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSC8JITStubs14cti_op_urshiftEPPv +__ZN3JSC16toUInt32SlowCaseEdRb +__ZN3JSCL17mathProtoFuncCeilEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZNK3JSC6JSCell18getTruncatedUInt32ERj +__ZN3JSC3JIT13emit_op_bitorEPNS_11InstructionE +__ZN3JSC3JIT17emitSlow_op_bitorEPNS_11InstructionERPNS_13SlowCaseEntryE +__ZN3JSC8JITStubs12cti_op_bitorEPPv +__ZN3JSC9BitOrNodeD0Ev +__ZN3JSC8JITStubs13cti_op_rshiftEPPv +__ZN3JSC8JITStubs13cti_op_bitxorEPPv +__ZN3JSC9parseDateERKNS_7UStringE +__ZN3WTF6VectorIN3JSC10CallRecordELm0EE14expandCapacityEmPKS2_ +__ZNK3JSC12JSActivation12toThisObjectEPNS_9ExecStateE +__ZN3JSC3JIT20emit_op_resolve_skipEPNS_11InstructionE +__ZN3JSC8JITStubs19cti_op_resolve_skipEPPv +__ZN3JSCL24dateProtoFuncGetFullYearEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSC17StringConstructor16getConstructDataERNS_13ConstructDataE +__ZN3JSCL30constructWithStringConstructorEPNS_9ExecStateEPNS_8JSObjectERKNS_7ArgListE +__ZN3JSC5equalEPKNS_7UString3RepES3_ +__ZN3JSC8EvalNode4markEv +__ZN3JSC10SwitchNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZN3JSC13CaseBlockNode20emitBytecodeForBlockERNS_17BytecodeGeneratorEPNS_10RegisterIDES4_ +__ZN3JSC13CaseBlockNode18tryOptimizedSwitchERN3WTF6VectorIPNS_14ExpressionNodeELm8EEERiS7_ +__ZN3JSCL17processClauseListEPNS_14ClauseListNodeERN3WTF6VectorIPNS_14ExpressionNodeELm8EEERNS_10SwitchKindERbRiSB_ +__ZN3WTF6VectorIPN3JSC14ExpressionNodeELm8EE14expandCapacityEm +__ZN3WTF6VectorINS_6RefPtrIN3JSC5LabelEEELm8EE14expandCapacityEm +__ZN3JSC17BytecodeGenerator11beginSwitchEPNS_10RegisterIDENS_10SwitchInfo10SwitchTypeE +__ZN3WTF6VectorIN3JSC10SwitchInfoELm0EE14expandCapacityEm +__ZN3JSC17BytecodeGenerator9endSwitchEjPN3WTF6RefPtrINS_5LabelEEEPPNS_14ExpressionNodeEPS3_ii +__ZN3WTF6VectorIN3JSC15SimpleJumpTableELm0EE14expandCapacityEm +__ZN3WTF6VectorIiLm0EE15reserveCapacityEm +__ZN3JSC14CaseClauseNodeD0Ev +__ZN3JSC14ClauseListNodeD0Ev +__ZN3JSC13CaseBlockNodeD0Ev +__ZN3JSC10SwitchNodeD0Ev +__ZN3JSC3JIT19emit_op_switch_charEPNS_11InstructionE +__ZN3WTF6VectorIN3JSC12SwitchRecordELm0EE14expandCapacityEm +__ZN3WTF6VectorIN3JSC22AbstractMacroAssemblerINS1_12X86AssemblerEE17CodeLocationLabelELm0EE4growEm +__ZN3JSC8JITStubs18cti_op_switch_charEPPv +__ZN3JSCL16mathProtoFuncPowEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3WTF6VectorIcLm0EE14expandCapacityEm +__ZN3WTF6VectorIN3JSC7UString5RangeELm16EE14expandCapacityEm +__ZN3WTF6VectorIN3JSC7UStringELm16EE14expandCapacityEmPKS2_ +__ZN3WTF6VectorIN3JSC7UStringELm16EE15reserveCapacityEm +__ZN3JSC7JSArray16getPropertyNamesEPNS_9ExecStateERNS_17PropertyNameArrayE +__ZN3JSC9ExecState10arrayTableEPS0_ +__ZN3JSC20MarkedArgumentBuffer10slowAppendENS_7JSValueE +__ZN3WTF9HashTableIPN3JSC20MarkedArgumentBufferES3_NS_17IdentityExtractorIS3_EENS_7PtrHashIS3_EENS_10HashTraitsIS3_EES9_E6rehas +__ZN3JSC8JITStubs24cti_op_get_by_val_stringEPPv +__ZN3JSCL16mathProtoFuncLogEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZNK3JSC7UString8toDoubleEv +__ZN3WTF9HashTableIPN3JSC7UString3RepES4_NS_17IdentityExtractorIS4_EENS_7PtrHashIS4_EENS_10HashTraitsIS4_EESA_E4findIS4_NS_22Id +__ZN3JSCL29objectProtoFuncHasOwnPropertyEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSCL18arrayProtoFuncSortEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSC7JSArray4sortEPNS_9ExecStateENS_7JSValueENS_8CallTypeERKNS_8CallDataE +__ZN3WTF7AVLTreeIN3JSC32AVLTreeAbstractorForArrayCompareELj44ENS_18AVLTreeDefaultBSetILj44EEEE6insertEi +__ZN3JSCltERKNS_7UStringES2_ +__ZN3WTF7AVLTreeIN3JSC32AVLTreeAbstractorForArrayCompareELj44ENS_18AVLTreeDefaultBSetILj44EEEE7balanceEi +__Z12jsRegExpFreeP8JSRegExp +__ZN3JSCL21stringProtoFuncConcatEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSC19globalFuncEncodeURIEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSC19globalFuncDecodeURIEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSCL6decodeEPNS_9ExecStateERKNS_7ArgListEPKcb __ZN3WTF7Unicode18UTF8SequenceLengthEc __ZN3WTF7Unicode18decodeUTF8SequenceEPKc -__ZN3KJS9StringImp18getPrimitiveNumberEPNS_9ExecStateERdRPNS_7JSValueE -__ZN3KJSltERKNS_7UStringES2_ -__ZN3KJS15ConditionalNode16evaluateToNumberEPNS_9ExecStateE -__ZN3KJS10BitAndNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS10BitAndNode17evaluateToBooleanEPNS_9ExecStateE -__ZN3KJS15DotAccessorNode15evaluateToInt32EPNS_9ExecStateE -__ZN3KJS19ImmediateNumberNode15evaluateToInt32EPNS_9ExecStateE -__ZN3KJS13ArrayInstance16getPropertyNamesEPNS_9ExecStateERNS_17PropertyNameArrayE -__ZN3KJS18LocalVarAccessNode15evaluateToInt32EPNS_9ExecStateE -__ZN3KJS13LeftShiftNode16evaluateToNumberEPNS_9ExecStateE -__ZN3KJS19BracketAccessorNode16evaluateToUInt32EPNS_9ExecStateE -__ZN3KJS14RightShiftNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS14RightShiftNode8evaluateEPNS_9ExecStateE -__ZN3KJS7AddNode15evaluateToInt32EPNS_9ExecStateE -__ZN3KJS19ImmediateNumberNode16evaluateToUInt32EPNS_9ExecStateE -__ZN3KJS13LeftShiftNode8evaluateEPNS_9ExecStateE -__ZN3KJS18LocalVarAccessNode16evaluateToUInt32EPNS_9ExecStateE -__ZNK3KJS9NumberImp17getTruncatedInt32ERi -__ZN3KJS19BracketAccessorNode15evaluateToInt32EPNS_9ExecStateE -__ZN3KJS16BooleanObjectImp9constructEPNS_9ExecStateERKNS_4ListE -__ZN3KJS24booleanProtoFuncToStringEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS14BitwiseNotNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS9BitOrNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS9BitOrNode8evaluateEPNS_9ExecStateE -__ZN3KJS10BitAndNode8evaluateEPNS_9ExecStateE -__ZN3KJS14BitwiseNotNode8evaluateEPNS_9ExecStateE -__ZN3KJS15NumberObjectImp14callAsFunctionEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS8Bindings8Instance32createBindingForLanguageInstanceENS1_15BindingLanguageEPvN3WTF10PassRefPtrINS0_10RootObjectEEE -__ZN3KJS8Bindings9CInstanceC2EP8NPObjectN3WTF10PassRefPtrINS0_10RootObjectEEE -__ZN3KJS8Bindings8InstanceC2EN3WTF10PassRefPtrINS0_10RootObjectEEE -__ZNK3KJS8Bindings8Instance10rootObjectEv -__ZN3KJS8Bindings8Instance19createRuntimeObjectEPS1_ -__ZN3KJS16RuntimeObjectImpC2EPNS_8Bindings8InstanceE -__ZN3KJS8Bindings10RootObject16addRuntimeObjectEPNS_16RuntimeObjectImpE -__ZN3KJS16RuntimeObjectImp18getOwnPropertySlotEPNS_9ExecStateERKNS_10IdentifierERNS_12PropertySlotE -__ZN3KJS8Bindings9CInstance5beginEv -__ZNK3KJS8Bindings9CInstance8getClassEv -__ZN3KJS8Bindings6CClass11classForIsAEP7NPClass -__ZN3KJS8Bindings6CClassC2EP7NPClass -__ZNK3KJS8Bindings6CClass10fieldNamedERKNS_10IdentifierEPNS0_8InstanceE -__ZNK3KJS7UString5asciiEv -__ZNK3KJS8Bindings6CClass12methodsNamedERKNS_10IdentifierEPNS0_8InstanceE -__NPN_UTF8FromIdentifier -__ZN3KJS8Bindings5Class14fallbackObjectEPNS_9ExecStateEPNS0_8InstanceERKNS_10IdentifierE -__ZN3KJS8Bindings9CInstance3endEv -__ZN3WTF6VectorIPN3KJS8Bindings6MethodELm0EE14expandCapacityEmPKS4_ -__ZN3WTF6VectorIPN3KJS8Bindings6MethodELm0EE14expandCapacityEm -__ZN3WTF6VectorIPN3KJS8Bindings6MethodELm0EE15reserveCapacityEm -__ZN3KJS16RuntimeObjectImp12methodGetterEPNS_9ExecStateEPNS_8JSObjectERKNS_10IdentifierERKNS_12PropertySlotE -__ZN3KJS13RuntimeMethodC2EPNS_9ExecStateERKNS_10IdentifierERN3WTF6VectorIPNS_8Bindings6MethodELm0EEE -__ZN3WTF6VectorIPN3KJS8Bindings6MethodELm0EEC2ERKS5_ -__ZN3KJS13RuntimeMethod14callAsFunctionEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZNK3KJS16RuntimeObjectImp9classInfoEv -__ZN3KJS8Bindings9CInstance12invokeMethodEPNS_9ExecStateERKN3WTF6VectorIPNS0_6MethodELm0EEERKNS_4ListE -__ZNK3KJS8Bindings7CMethod4nameEv -__ZN3KJS8Bindings23convertNPVariantToValueEPNS_9ExecStateEPK10_NPVariantPNS0_10RootObjectE -__ZN3KJS16RuntimeObjectImpD2Ev -__ZN3KJS8Bindings10RootObject19removeRuntimeObjectEPNS_16RuntimeObjectImpE -__ZN3KJS4Node10throwErrorEPNS_9ExecStateENS_9ErrorTypeEPKcPNS_7JSValueEPS0_RKNS_10IdentifierE -__ZN3KJS10substituteERNS_7UStringERKS0_ -__ZN3KJS4Node16rethrowExceptionEPNS_9ExecStateE -__ZN3KJS4Node15handleExceptionEPNS_9ExecStateEPNS_7JSValueE -__ZN3KJS16RuntimeObjectImp10invalidateEv -__ZN3KJS16JSVariableObject14deletePropertyEPNS_9ExecStateERKNS_10IdentifierE -__ZN3KJS14JSGlobalObjectD2Ev -__ZN3KJS15GlobalExecStateD1Ev -__ZN3KJS14BitwiseNotNodeD1Ev -__ZN3KJSplERKNS_7UStringES2_ -__ZN3KJS5Lexer14convertUnicodeEiiii -__ZN3KJS14ArrayObjectImp14callAsFunctionEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS9Arguments3putEPNS_9ExecStateERKNS_10IdentifierEPNS_7JSValueEi -__ZN3WTF9HashTableIjSt4pairIjiENS_18PairFirstExtractorIS2_EENS_7IntHashIjEENS_14PairHashTraitsINS_10HashTraitsIjEENS8_IiEEEES9_E3addIjS2_NS_22IdentityHashTranslatorIjS2_S6_EEEES1_INS_17HashTableIteratorIjS2_S4_S6_SB_S9_EEbERKT_RKT0_ -__ZN3WTF9HashTableIjSt4pairIjiENS_18PairFirstExtractorIS2_EENS_7IntHashIjEENS_14PairHashTraitsINS_10HashTraitsIjEENS8_IiEEEES9_EC2ERKSC_ -__ZN3KJS23stringProtoFuncToStringEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3WTF9HashTableIjSt4pairIjiENS_18PairFirstExtractorIS2_EENS_7IntHashIjEENS_14PairHashTraitsINS_10HashTraitsIjEENS8_IiEEEES9_E4findIjNS_22IdentityHashTranslatorIjS2_S6_EEEENS_17HashTableIteratorIjS2_S4_S6_SB_S9_EERKT_ -__ZN3KJS10BitXOrNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS10BitXOrNode8evaluateEPNS_9ExecStateE -__ZN3KJS14RightShiftNode15evaluateToInt32EPNS_9ExecStateE -__ZN3KJS10BitXOrNodeD1Ev -__ZN3KJS17DateObjectFuncImp14callAsFunctionEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS9parseDateERKNS_7UStringE -__ZN3KJS6RegExp6createERKNS_7UStringE -__ZN3KJS7ModNode16evaluateToNumberEPNS_9ExecStateE -__ZNK3KJS16RuntimeObjectImp14implementsCallEv -__ZNK3KJS8Bindings9CInstance14implementsCallEv -__ZN3KJS11Interpreter21shouldPrintExceptionsEv -__ZN3KJS4Node10throwErrorEPNS_9ExecStateENS_9ErrorTypeEPKcRKNS_10IdentifierE -__ZN3KJS12PropertySlot15undefinedGetterEPNS_9ExecStateEPNS_8JSObjectERKNS_10IdentifierERKS0_ -__ZN3KJS15SavedPropertiesD1Ev -__ZN3KJS8JSObject18isActivationObjectEv -__ZN3KJS19globalFuncDecodeURIEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS14JSGlobalObject15restoreBuiltinsERKNS_13SavedBuiltinsE -__ZN3KJS11PropertyMap7restoreERKNS_15SavedPropertiesE -__ZN3KJS16JSVariableObject19restoreLocalStorageERKNS_15SavedPropertiesE -__ZN3WTF6VectorIN3KJS17LocalStorageEntryELm32EE6resizeEm -__ZNK3KJS23FunctionCallBracketNode8streamToERNS_12SourceStreamE -__ZNK3KJS17TypeOfResolveNode10precedenceEv -__ZNK3KJS17TypeOfResolveNode8streamToERNS_12SourceStreamE -__ZNK3KJS13AssignDotNode10precedenceEv -__ZNK3KJS12ContinueNode8streamToERNS_12SourceStreamE -__ZN3KJS11FunctionImp12callerGetterEPNS_9ExecStateEPNS_8JSObjectERKNS_10IdentifierERKNS_12PropertySlotE -__ZN3KJS9BreakNodeC1ERKNS_10IdentifierE -__ZN3KJS13StatementNode9pushLabelERKNS_10IdentifierE -__ZN3KJS9ThrowNode7executeEPNS_9ExecStateE -__ZNK3KJS15NumberObjectImp19implementsConstructEv -__ZN3KJS22numberProtoFuncValueOfEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS8VoidNodeD1Ev -__ZN3KJS14ErrorObjectImp14callAsFunctionEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS18globalFuncIsFiniteEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS21ReadModifyResolveNode8evaluateEPNS_9ExecStateE -__ZN3KJS15StrictEqualNode8evaluateEPNS_9ExecStateE -__ZN3KJS27compareByStringPairForQSortEPKvS1_ -__ZN3KJS7compareERKNS_7UStringES2_ -__ZN3KJS4Node10throwErrorEPNS_9ExecStateENS_9ErrorTypeEPKcPNS_7JSValueEPS0_S8_ -__ZN3KJS21arrayProtoFuncReverseEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS20stringProtoFuncSliceEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZNK3KJS15StringObjectImp19implementsConstructEv -__ZN3KJS15StringObjectImp9constructEPNS_9ExecStateERKNS_4ListE -__ZN3KJS18PostDecResolveNode8evaluateEPNS_9ExecStateE -__ZN3KJS21dateProtoFuncSetMonthEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS23setNewValueFromDateArgsEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListEib -__ZN3KJS20dateProtoFuncSetDateEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS21dateProtoFuncSetHoursEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS23setNewValueFromTimeArgsEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListEib -__ZN3KJS23dateProtoFuncSetMinutesEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS24dateProtoFuncSetFullYearEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS8JSObject18getPrimitiveNumberEPNS_9ExecStateERdRPNS_7JSValueE -__ZN3KJS20dateProtoFuncValueOfEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS27dateProtoFuncGetUTCFullYearEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS27dateProtoFuncSetUTCFullYearEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS24dateProtoFuncGetUTCMonthEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS24dateProtoFuncSetUTCMonthEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS23dateProtoFuncGetUTCDateEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS23dateProtoFuncSetUTCDateEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS24dateProtoFuncGetUTCHoursEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS24dateProtoFuncSetUTCHoursEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS26dateProtoFuncGetUTCMinutesEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS26dateProtoFuncSetUTCMinutesEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS26dateProtoFuncGetUTCSecondsEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS26dateProtoFuncSetUTCSecondsEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS22numberProtoFuncToFixedEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS18integer_part_noexpEd -__ZN3KJS14AddNumbersNode16evaluateToNumberEPNS_9ExecStateE -__ZNK3KJS14InstanceOfNode10precedenceEv -__ZNK3KJS14InstanceOfNode8streamToERNS_12SourceStreamE -__ZNK3KJS8JSObject8toNumberEPNS_9ExecStateE -__Z15kjs_pcre_xclassiPKh -__ZN3KJS10NumberNode17evaluateToBooleanEPNS_9ExecStateE -__ZN3KJS18PostDecBracketNodeD1Ev -__ZN3KJS17PropertyNameArray3addERKNS_10IdentifierE -__ZN3KJS22errorProtoFuncToStringEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS13LeftShiftNode15evaluateToInt32EPNS_9ExecStateE -__ZNK3KJS9RegExpImp14implementsCallEv -__ZN3KJS22stringProtoFuncValueOfEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS15ConditionalNode17evaluateToBooleanEPNS_9ExecStateE -__ZN3KJS16JSVariableObject16getPropertyNamesEPNS_9ExecStateERNS_17PropertyNameArrayE -__ZN3KJS11DoWhileNode7executeEPNS_9ExecStateE -__ZN3KJS8Bindings23convertObjcValueToValueEPNS_9ExecStateEPvNS0_13ObjcValueTypeEPNS0_10RootObjectE -__ZN3KJS8Bindings17webUndefinedClassEv -__ZN3KJS8Bindings20webScriptObjectClassEv -__ZN3KJS8Bindings8Instance19createRuntimeObjectENS1_15BindingLanguageEPvN3WTF10PassRefPtrINS0_10RootObjectEEE -__ZN3KJS8Bindings12ObjcInstanceC2EP11objc_objectN3WTF10PassRefPtrINS0_10RootObjectEEE -__ZN3KJS8Bindings8Instance18didExecuteFunctionEv -__ZN3KJS8Bindings12ObjcInstance5beginEv -__ZNK3KJS8Bindings12ObjcInstance8getClassEv -__ZN3KJS8Bindings9ObjcClass11classForIsAEP10objc_class -__ZN3KJS8Bindings9ObjcClassC2EP10objc_class -__ZNK3KJS8Bindings9ObjcClass10fieldNamedERKNS_10IdentifierEPNS0_8InstanceE -__ZNK3KJS8Bindings9ObjcClass12methodsNamedERKNS_10IdentifierEPNS0_8InstanceE -__ZN3KJS8Bindings25convertJSMethodNameToObjcEPKcPcm -__ZN3KJS8Bindings10ObjcMethodC2EP10objc_classPKc -__ZN3KJS8Bindings12ObjcInstance3endEv -__ZN3KJS8Bindings12ObjcInstance12invokeMethodEPNS_9ExecStateERKN3WTF6VectorIPNS0_6MethodELm0EEERKNS_4ListE -__ZNK3KJS8Bindings10ObjcMethod18getMethodSignatureEv -__ZNK3KJS8Bindings10ObjcMethod4nameEv -__ZN3KJS8Bindings20objcValueTypeForTypeEPKc -__ZN3KJS8Bindings23convertValueToObjcValueEPNS_9ExecStateEPNS_7JSValueENS0_13ObjcValueTypeE -__ZNK3KJS6JSCell9getStringEv -__ZN3KJS8Bindings23convertNSStringToStringEP8NSString -__ZN3KJS8Bindings12ObjcInstanceD1Ev -__ZN3KJS9LabelNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS9LabelNode7executeEPNS_9ExecStateE -__ZN3KJS12ContinueNodeC1ERKNS_10IdentifierE -__ZN3KJS11FunctionImp12lengthGetterEPNS_9ExecStateEPNS_8JSObjectERKNS_10IdentifierERKNS_12PropertySlotE -__ZN3KJS9BitOrNode15evaluateToInt32EPNS_9ExecStateE -__ZN3KJS18EmptyStatementNode7executeEPNS_9ExecStateE -__ZN3KJS22UnsignedRightShiftNodeD1Ev -__ZN3KJS7ModNode17evaluateToBooleanEPNS_9ExecStateE -__ZN3KJS20arrayProtoFuncFilterEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS6InNode8evaluateEPNS_9ExecStateE -__ZN3KJS17arrayProtoFuncMapEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZNK3KJS10LessEqNode10precedenceEv -__ZNK3KJS10LessEqNode8streamToERNS_12SourceStreamE -__ZNK3KJS18NotStrictEqualNode10precedenceEv -__ZNK3KJS18NotStrictEqualNode8streamToERNS_12SourceStreamE -__ZN3KJS14StringInstance16getPropertyNamesEPNS_9ExecStateERNS_17PropertyNameArrayE -__ZN3KJS7UString4fromEi -__ZN3KJS14StringInstance11indexGetterEPNS_9ExecStateEPNS_8JSObjectERKNS_10IdentifierERKNS_12PropertySlotE -__ZN3KJS21stringProtoFuncConcatEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS22UnsignedRightShiftNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS11ResolveNode15evaluateToInt32EPNS_9ExecStateE -__ZN3KJS19FunctionCallDotNode15evaluateToInt32EPNS_9ExecStateE -__ZN3KJS22UnsignedRightShiftNode15evaluateToInt32EPNS_9ExecStateE -__ZN3KJS11ResolveNode16evaluateToUInt32EPNS_9ExecStateE -__ZNK3KJS9NumberImp18getTruncatedUInt32ERj -__ZN3KJS10NumberNode15evaluateToInt32EPNS_9ExecStateE -__ZN3KJS7SubNode16evaluateToUInt32EPNS_9ExecStateE -__ZN3KJS14BitwiseNotNode15evaluateToInt32EPNS_9ExecStateE -__ZN3KJS10BitAndNode15evaluateToInt32EPNS_9ExecStateE -__ZN3KJS7AddNode16evaluateToUInt32EPNS_9ExecStateE -__ZN3KJS7SubNode15evaluateToInt32EPNS_9ExecStateE -__ZN3KJS8VoidNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS8VoidNode8evaluateEPNS_9ExecStateE -__ZN3KJS17DeleteResolveNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS18LocalVarDeleteNodeD1Ev -__ZN3KJS11FunctionImp15argumentsGetterEPNS_9ExecStateEPNS_8JSObjectERKNS_10IdentifierERKNS_12PropertySlotE -__ZN3KJS18LocalVarDeleteNode8evaluateEPNS_9ExecStateE -__ZN3KJS17DeleteResolveNode8evaluateEPNS_9ExecStateE -__ZNK3KJS16RuntimeObjectImp6canPutEPNS_9ExecStateERKNS_10IdentifierE -__ZN3KJS13UnaryPlusNode8evaluateEPNS_9ExecStateE -__ZN3KJS24dateProtoFuncToUTCStringEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS23booleanProtoFuncValueOfEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS11NewExprNode16evaluateToNumberEPNS_9ExecStateE -__Z22kjs_pcre_ucp_othercasej -__ZN3KJS17PreDecResolveNode8evaluateEPNS_9ExecStateE -__ZNK3KJS7JSValue7toFloatEPNS_9ExecStateE -__ZN3KJS14ExpressionNode15evaluateToInt32EPNS_9ExecStateE -__ZN3KJS4List26markProtectedListsSlowCaseEv -__ZNK3KJS6JSCell9getStringERNS_7UStringE -__ZN3KJS8TrueNode17evaluateToBooleanEPNS_9ExecStateE -__ZN3KJS9RegExpImp3putEPNS_9ExecStateERKNS_10IdentifierEPNS_7JSValueEi -__ZNK3KJS9NumberImp9getUInt32ERj -__ZN3KJS4Node10throwErrorEPNS_9ExecStateENS_9ErrorTypeEPKcPNS_7JSValueEPS0_ -__ZN3KJS23FunctionCallResolveNode15evaluateToInt32EPNS_9ExecStateE -__ZNK3KJS6JSCell18getTruncatedUInt32ERj -__ZNK3KJS9LabelNode8streamToERNS_12SourceStreamE -__ZNK3KJS17ObjectLiteralNode21needsParensIfLeftmostEv -__ZNK3KJS11DoWhileNode8streamToERNS_12SourceStreamE -__ZNK3KJS17PreDecResolveNode8streamToERNS_12SourceStreamE -__ZNK3KJS13PreIncDotNode8streamToERNS_12SourceStreamE -__ZNK3KJS13PreDecDotNode8streamToERNS_12SourceStreamE -__ZNK3KJS17DeleteResolveNode8streamToERNS_12SourceStreamE -__ZN3KJS9FalseNode17evaluateToBooleanEPNS_9ExecStateE -__ZN3KJS23dateProtoFuncSetSecondsEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZNK3KJS14PostIncDotNode8streamToERNS_12SourceStreamE -__ZNK3KJS8Bindings12ObjcInstance14implementsCallEv -__ZN3KJS8Bindings9ObjcClass14fallbackObjectEPNS_9ExecStateEPNS0_8InstanceERKNS_10IdentifierE -__ZN3KJS16BooleanObjectImp14callAsFunctionEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS11jsUndefinedEv -___tcf_2 -___tcf_6 -___tcf_0 -___tcf_5 -___tcf_3 -___tcf_4 -__Z12jsRegExpFreeP8JSRegExp -__ZN3KJS25CollectorHeapIntrospector4sizeEP14_malloc_zone_tPKv -__ZN3WTF9HashTableINS_6RefPtrIN3KJS7UString3RepEEESt4pairIS5_mENS_18PairFirstExtractorIS7_EENS2_17IdentifierRepHashENS_14PairHashTraitsINS2_23IdentifierRepHashTraitsENS2_26SymbolTableIndexHashTraitsEEESC_E4findIS5_NS_22IdentityHashTranslatorIS5_S7_SA_EEEENS_17HashTableIteratorIS5_S7_S9_SA_SE_SC_EERKT_ -__ZN3KJS18AssignLocalVarNodeD1Ev -__ZN3KJS8TrueNodeD1Ev -__ZN3KJS11NewExprNodeD1Ev -__ZN3KJS19ImmediateNumberNodeD1Ev -__ZN3KJS17AssignBracketNodeD1Ev -__ZN3KJS18LocalVarAccessNodeD1Ev -__ZN3KJS16ParserRefCounted8refcountEv -__ZN3KJS14JSGlobalObject16stopTimeoutCheckEv -__ZN3KJS11GreaterNodeD1Ev -__ZN3KJS16ArgumentListNodeD1Ev -__ZN3KJS17FunctionObjectImp9constructEPNS_9ExecStateERKNS_4ListERKNS_10IdentifierERKNS_7UStringEi -__ZN3KJS6Parser5parseINS_16FunctionBodyNodeEEEN3WTF10PassRefPtrIT_EERKNS_7UStringEiPKNS_5UCharEjPiSD_PS7_ -__ZN3KJS8JSObject4callEPNS_9ExecStateEPS0_RKNS_4ListE -__ZN3KJS18AddStringRightNode8evaluateEPNS_9ExecStateE -__ZN3KJS16globalFuncEscapeEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZNK3KJS13DateObjectImp19implementsConstructEv -__ZN3KJS13DateObjectImp9constructEPNS_9ExecStateERKNS_4ListE -__ZN3KJS13DatePrototype18getOwnPropertySlotEPNS_9ExecStateERKNS_10IdentifierERNS_12PropertySlotE -__ZN3KJS20dateProtoFuncGetTimeEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZNK3KJS12DateInstance9classInfoEv -__ZNK3KJS9NumberImp8toNumberEPNS_9ExecStateE -__ZNK3KJS9NumberImp8toStringEPNS_9ExecStateE -__ZN3KJS9BlockNodeD1Ev -__ZN3KJS21dateProtoFuncGetMonthEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS21msToGregorianDateTimeEdbRNS_17GregorianDateTimeE -__ZN3KJS12getUTCOffsetEv -__ZN3KJS12getDSTOffsetEdd -__ZN3KJS15ConditionalNodeD1Ev -__ZN3KJS7DivNodeD1Ev -__ZN3KJS9EqualNodeD1Ev -__ZN3KJS8NullNodeD1Ev -__ZN3KJS9FalseNodeD1Ev -__ZN3KJS12NotEqualNodeD1Ev -__ZN3KJS7SubNodeD1Ev -__ZN3KJS7SubNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS24LocalVarFunctionCallNode16evaluateToNumberEPNS_9ExecStateE -__ZN3KJS21ReadModifyResolveNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS14StringInstance12lengthGetterEPNS_9ExecStateEPNS_8JSObjectERKNS_10IdentifierERKNS_12PropertySlotE -__ZN3KJS18globalFuncUnescapeEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS7DivNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS7DivNode8evaluateEPNS_9ExecStateE -__ZN3KJS18LocalVarAccessNode16evaluateToNumberEPNS_9ExecStateE -__ZN3KJS8MultNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS8MultNode8evaluateEPNS_9ExecStateE -__ZN3KJS19FunctionCallDotNode16evaluateToNumberEPNS_9ExecStateE -__ZN3KJS7SubNode8evaluateEPNS_9ExecStateE -__ZNK3KJS9NumberImp11toPrimitiveEPNS_9ExecStateENS_6JSTypeE -__ZN3KJS18AddStringRightNodeD1Ev -__ZN3KJS7AddNodeD1Ev -__ZN3KJS13LogicalOrNodeD1Ev -__ZN3KJS17PreIncResolveNodeD1Ev -__ZN3KJS8MultNodeD1Ev -__ZN3KJS8LessNodeD1Ev -__ZN3KJS14LogicalAndNodeD1Ev -__ZN3KJS10NumberNodeD1Ev -__ZN3KJS13GreaterEqNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS14LogicalNotNodeD1Ev -__ZN3KJS7ModNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS14JSGlobalObject12checkTimeoutEv -__ZN3KJS7ModNode8evaluateEPNS_9ExecStateE -__ZN3KJS15LessNumbersNode8evaluateEPNS_9ExecStateE -__ZN3KJS20dateProtoFuncGetYearEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS8ThisNodeD1Ev -__ZN3KJS19mathProtoFuncRandomEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS20globalFuncParseFloatEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS13GreaterEqNode8evaluateEPNS_9ExecStateE -__ZN3KJS20dateProtoFuncGetDateEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS18mathProtoFuncFloorEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS23stringProtoFuncFontsizeEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS11ResolveNode17evaluateToBooleanEPNS_9ExecStateE -__ZN3KJS13GreaterEqNode17evaluateToBooleanEPNS_9ExecStateE -__ZN3KJS9NumberImp18getPrimitiveNumberEPNS_9ExecStateERdRPNS_7JSValueE -__ZN3KJS19stringProtoFuncLinkEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS19dateProtoFuncGetDayEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS21dateProtoFuncGetHoursEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS23dateProtoFuncGetMinutesEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS23dateProtoFuncGetSecondsEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS9ArrayNodeD1Ev -__ZN3KJS11ElementNodeD1Ev -__ZN3KJS17ObjectLiteralNodeD1Ev -__ZN3KJS14PostfixDotNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS14PostIncDotNode8evaluateEPNS_9ExecStateE -__ZN3KJS19PlaceholderTrueNodeD1Ev -__ZN3KJS19PostDecLocalVarNode8evaluateEPNS_9ExecStateE -__ZN3KJS17ReadModifyDotNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS17ReadModifyDotNode8evaluateEPNS_9ExecStateE -__ZN3KJS21FunctionCallValueNodeD1Ev -__ZN3KJS10BitAndNode16evaluateToUInt32EPNS_9ExecStateE -__ZN3KJS14AddNumbersNode15evaluateToInt32EPNS_9ExecStateE -__ZN3KJS10BitXOrNode15evaluateToInt32EPNS_9ExecStateE -__ZN3KJS22UnsignedRightShiftNode8evaluateEPNS_9ExecStateE -__ZN3KJS8MultNode16evaluateToUInt32EPNS_9ExecStateE -__ZN3KJS7DivNode16evaluateToUInt32EPNS_9ExecStateE -__ZN3KJS19StringObjectFuncImp14callAsFunctionEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS7ModNode16evaluateToUInt32EPNS_9ExecStateE -__ZN3KJS10BitAndNode16evaluateToNumberEPNS_9ExecStateE -__ZN3KJS14RightShiftNode16evaluateToNumberEPNS_9ExecStateE -__ZN3KJS14AddNumbersNode16evaluateToUInt32EPNS_9ExecStateE -__ZN3KJS14globalFuncEvalEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS6Parser5parseINS_8EvalNodeEEEN3WTF10PassRefPtrIT_EERKNS_7UStringEiPKNS_5UCharEjPiSD_PS7_ -__ZN3KJS13EvalExecStateC1EPNS_14JSGlobalObjectEPNS_8EvalNodeEPNS_9ExecStateE -__ZN3KJS8EvalNode7executeEPNS_9ExecStateE -__ZN3KJS8EvalNodeD1Ev -__ZN3KJS23FunctionCallBracketNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS23FunctionCallBracketNode8evaluateEPNS_9ExecStateE -__ZN3KJS16PropertyListNodeD1Ev -__ZN3KJS12PropertyNodeD1Ev -__ZN3KJS13CaseBlockNodeD1Ev -__ZN3KJS14CaseClauseNodeD1Ev -__ZN3KJS14ClauseListNodeD1Ev -__ZN3KJS9RegExpImp18getOwnPropertySlotEPNS_9ExecStateERKNS_10IdentifierERNS_12PropertySlotE -__ZN3KJS17staticValueGetterINS_9RegExpImpEEEPNS_7JSValueEPNS_9ExecStateEPNS_8JSObjectERKNS_10IdentifierERKNS_12PropertySlotE -__ZNK3KJS9RegExpImp16getValuePropertyEPNS_9ExecStateEi -__ZN3KJS9ThrowNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS15StrictEqualNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS19regExpProtoFuncTestEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS9RegExpImp5matchEPNS_9ExecStateERKNS_4ListE -__ZN3KJS15StrictEqualNode17evaluateToBooleanEPNS_9ExecStateE -__ZN3KJS18NotStrictEqualNodeD1Ev -__ZN3KJS15StrictEqualNodeD1Ev -__ZN3KJS18LocalVarTypeOfNodeD1Ev -__ZN3KJS19globalFuncEncodeURIEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS17TypeOfResolveNode8evaluateEPNS_9ExecStateE -__ZN3KJS26stringProtoFuncLastIndexOfEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZNK3KJS7JSValue20toIntegerPreserveNaNEPNS_9ExecStateE -__ZNK3KJS7UString5rfindERKS0_i -__ZN3KJS15TypeOfValueNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS15TypeOfValueNode8evaluateEPNS_9ExecStateE -__ZNK3KJS17FunctionObjectImp19implementsConstructEv -__ZN3KJS17FunctionObjectImp9constructEPNS_9ExecStateERKNS_4ListE -__ZNK3KJS8JSObject11hasPropertyEPNS_9ExecStateERKNS_10IdentifierE -__ZN3KJS30dateProtoFuncGetTimezoneOffsetEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS8JSObject3putEPNS_9ExecStateEjPNS_7JSValueEi -__ZN3KJS6InNodeD1Ev -__ZNK3KJS9Arguments9classInfoEv -__ZN3KJS10BitXOrNode17evaluateToBooleanEPNS_9ExecStateE -__ZN3KJS19addSlowCaseToNumberEPNS_9ExecStateEPNS_7JSValueES3_ -__ZN3KJS8JSObject14deletePropertyEPNS_9ExecStateEj -__ZNK3KJS9WhileNode8streamToERNS_12SourceStreamE -__ZNK3KJS9FalseNode8streamToERNS_12SourceStreamE -__ZNK3KJS7DivNode8streamToERNS_12SourceStreamE -__ZNK3KJS7DivNode10precedenceEv -__ZNK3KJS15StrictEqualNode8streamToERNS_12SourceStreamE -__ZNK3KJS15StrictEqualNode10precedenceEv -__ZNK3KJS16VarDeclCommaNode10precedenceEv -__ZNK3KJS17PreIncResolveNode8streamToERNS_12SourceStreamE -__ZNK3KJS9FalseNode10precedenceEv -__ZN3KJS14InstanceOfNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZNK3KJS19InternalFunctionImp21implementsHasInstanceEv -__ZN3KJS8JSObject11hasInstanceEPNS_9ExecStateEPNS_7JSValueE -__ZN3WTF14FastMallocZone9forceLockEP14_malloc_zone_t -__ZN3KJS25CollectorHeapIntrospector9forceLockEP14_malloc_zone_t -__ZN3WTF14FastMallocZone11forceUnlockEP14_malloc_zone_t -__ZN3KJS25CollectorHeapIntrospector11forceUnlockEP14_malloc_zone_t -__ZNK3KJS23FunctionCallBracketNode10precedenceEv -__ZN3KJS14InstanceOfNode8evaluateEPNS_9ExecStateE -__ZNK3KJS9ThrowNode8streamToERNS_12SourceStreamE -__ZNK3KJS7SubNode10precedenceEv -__ZNK3KJS7SubNode8streamToERNS_12SourceStreamE -__ZNK3KJS10NegateNode10precedenceEv -__ZNK3KJS10NegateNode8streamToERNS_12SourceStreamE -__ZNK3KJS12FuncDeclNode8streamToERNS_12SourceStreamE -__ZNK3KJS18PostDecResolveNode8streamToERNS_12SourceStreamE -__ZNK3KJS9BreakNode8streamToERNS_12SourceStreamE -__ZNK3KJS6InNode10precedenceEv -__ZNK3KJS6InNode8streamToERNS_12SourceStreamE -__ZN3KJS14StringInstanceC2EPNS_8JSObjectERKNS_7UStringE -__ZN3KJS18PostDecBracketNode8evaluateEPNS_9ExecStateE -__ZN3KJS28dateProtoFuncGetMilliSecondsEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZNK3KJS18PostIncResolveNode8streamToERNS_12SourceStreamE -__ZN3KJS13ArrayInstance14deletePropertyEPNS_9ExecStateERKNS_10IdentifierE -__ZN3KJS14StringInstance14deletePropertyEPNS_9ExecStateERKNS_10IdentifierE -__ZN3KJS15AssignErrorNodeD1Ev -__ZN3WTF6VectorIcLm0EE14expandCapacityEmPKc -__ZN3WTF6VectorIcLm0EE14expandCapacityEm +__ZN3JSCL22numberProtoFuncToFixedEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSCL16integerPartNoExpEd +__ZN3WTF14FastMallocZone10statisticsEP14_malloc_zone_tP19malloc_statistics_t +__ZN3JSC4Heap26protectedGlobalObjectCountEv +__ZN3JSC10JSFunction15argumentsGetterEPNS_9ExecStateERKNS_10IdentifierERKNS_12PropertySlotE +__ZNK3JSC11Interpreter17retrieveArgumentsEPNS_9ExecStateEPNS_10JSFunctionE +__ZN3JSCL21dateProtoFuncSetMonthEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSCL23setNewValueFromDateArgsEPNS_9ExecStateENS_7JSValueERKNS_7ArgListEib +__ZN3JSCL20dateProtoFuncSetDateEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3WTF6VectorIPNS0_IN3JSC10RegisterIDELm32EEELm32EE14expandCapacityEm +__ZN3JSC8JITStubs14cti_op_pre_incEPPv +__ZN3WTF6VectorIPN3JSC14ExpressionNodeELm16EE14expandCapacityEm +__ZN3JSC13UnaryPlusNodeD0Ev +__ZN3JSC3JIT19emit_op_to_jsnumberEPNS_11InstructionE +__ZN3JSC3JIT23emitSlow_op_to_jsnumberEPNS_11InstructionERPNS_13SlowCaseEntryE +__ZN3JSC8JITStubs18cti_op_to_jsnumberEPPv +__ZN3JSC6JSLock12DropAllLocksC1Eb +__ZN3JSCL17createJSLockCountEv +__ZN3JSC6JSLock12DropAllLocksD1Ev +__ZN3JSCL24dateProtoFuncSetFullYearEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3WTF6VectorIN3JSC15StringJumpTableELm0EE15reserveCapacityEm +__ZN3WTF7HashMapINS_6RefPtrIN3JSC7UString3RepEEENS2_14OffsetLocationENS_7StrHashIS5_EENS_10HashTraitsIS5_EENS9_IS6_EEE3addEPS4_ +__ZN3WTF9HashTableINS_6RefPtrIN3JSC7UString3RepEEESt4pairIS5_NS2_14OffsetLocationEENS_18PairFirstExtractorIS8_EENS_7StrHashIS5_ +__ZN3JSC3JIT21emit_op_switch_stringEPNS_11InstructionE +__ZN3JSC8JITStubs20cti_op_switch_stringEPPv +__ZN3WTF6VectorIN3JSC14ExecutablePool10AllocationELm2EE14expandCapacityEm +__ZN3JSC12JSGlobalData6createEb +__ZN3JSCL13allocateBlockILNS_8HeapTypeE1EEEPNS_14CollectorBlockEv +__ZN3JSC7JSValueC1EPNS_9ExecStateEd +__ZN3JSC10JSFunctionC1EPNS_9ExecStateEN3WTF10PassRefPtrINS_9StructureEEEiRKNS_10IdentifierEPFNS_7JSValueES2_PNS_8JSObjectESA_RK +__ZN3JSC8JSObject17putDirectFunctionEPNS_9ExecStateEPNS_16InternalFunctionEj +__ZN3JSC7CStringD1Ev +__ZN3WTF7HashMapIPvjNS_7PtrHashIS1_EEN3JSC17JSValueHashTraitsENS_10HashTraitsIjEEE3addERKS1_RKj +__ZN3WTF6VectorINS_6RefPtrIN3JSC12FuncExprNodeEEELm0EE14shrinkCapacityEm +__ZN3JSC14ExpressionNodeD2Ev +__ZThn12_N3JSC11ProgramNodeD0Ev +__ZThn12_N3JSC12FuncExprNodeD0Ev +__ZThn12_N3JSC16FunctionBodyNodeD0Ev +__ZN3JSC8JITStubs16cti_op_new_arrayEPvz +__ZN3WTF6VectorIN3JSC17StructureStubInfoELm0EE15reserveCapacityEm +__ZN3JSC17BytecodeGenerator10emitOpcodeENS_8OpcodeIDE +__ZN3JSC23MacroAssemblerX86Common4moveENS_3X8610RegisterIDES2_ +__ZN3JSC8JITStubs15cti_op_new_funcEPvz +__ZN3JSC8JITStubs21cti_op_resolve_globalEPvz +__ZN3JSC8JITStubs16cti_op_get_by_idEPvz +__ZN3JSC8JITStubs31cti_op_construct_NotJSConstructEPvz +__ZN3JSC8JITStubs16cti_op_put_by_idEPvz +__ZN3JSC8JITStubs13cti_op_strcatEPvz +__ZN3JSC8JITStubs19cti_op_resolve_funcEPvz +__ZN3JSC8JITStubs23cti_vm_dontLazyLinkCallEPvz +__ZN3JSC8JITStubs22cti_op_call_JSFunctionEPvz +__ZN3JSC8JITStubs23cti_register_file_checkEPvz +__ZN3JSC8JITStubs13cti_op_negateEPvz +__ZN3JSC8JITStubs28cti_op_construct_JSConstructEPvz +__ZN3JSC23MacroAssemblerX86Common12branchTest32ENS0_9ConditionENS_22AbstractMacroAssemblerINS_12X86AssemblerEE7AddressENS4_5Imm +__ZN3JSC8JITStubs23cti_op_put_by_val_arrayEPvz +__ZN3JSC8JITStubs23cti_op_put_by_id_secondEPvz +__ZN3JSC15AssemblerBuffer14executableCopyEPNS_14ExecutablePoolE +__ZN3JSC12X86Assembler8sarl_i8rEiNS_3X8610RegisterIDE +__ZN3JSC12X86Assembler23X86InstructionFormatter9twoByteOpENS0_15TwoByteOpcodeIDEiNS_3X8610RegisterIDEi +__ZN3JSC8JITStubs10cti_op_mulEPvz +__ZN3JSC12jsNumberCellEPNS_12JSGlobalDataEd +__ZN3JSC8JITStubs10cti_op_subEPvz +__ZN3JSC8JITStubs10cti_op_divEPvz +__ZN3JSC8JITStubs23cti_op_get_by_id_secondEPvz +__ZN3JSC8JITStubs19cti_vm_lazyLinkCallEPvz +__ZN3WTF6VectorIPN3JSC12CallLinkInfoELm0EE14expandCapacityEm +__ZN3JSC8JITStubs19cti_op_convert_thisEPvz +__ZN3JSC8JITStubs21cti_op_put_by_id_failEPvz +__ZN3JSC8JITStubs10cti_op_addEPvz +__ZN3JSC8JITStubs17cti_timeout_checkEPvz +__ZN3JSC9jsBooleanEb +__ZN3JSC9CodeBlock19isKnownNotImmediateEi +__ZN3JSC12X86Assembler8movsd_mrEiNS_3X8610RegisterIDENS1_13XMMRegisterIDE +__ZN3JSC8JITStubs25cti_op_call_NotJSFunctionEPvz +__ZNK3JSC12JSNumberCell8toNumberEPNS_9ExecStateE +__ZN3JSC8JITStubs26cti_op_get_by_id_self_failEPvz +__ZN3JSC8JITStubs10cti_op_endEPvz +__ZThn12_N3JSC12FuncDeclNodeD0Ev +__ZN3JSC8JITStubs24cti_op_resolve_with_baseEPvz +__ZN3JSC8JITStubs19cti_op_new_func_expEPvz +__ZN3JSC8JITStubs22cti_op_push_activationEPvz +__ZN3JSC8JITStubs17cti_op_get_by_valEPvz +__ZN3JSC8JITStubs22cti_op_call_arityCheckEPvz +__ZN3JSC8JITStubs11cti_op_lessEPvz +__ZN3JSC12JSNumberCell18getPrimitiveNumberEPNS_9ExecStateERdRNS_7JSValueE +__ZN3JSC12X86Assembler23X86InstructionFormatter9oneByteOpENS0_15OneByteOpcodeIDE +__ZN3JSC8JITStubs27cti_op_get_by_id_proto_listEPvz +__ZN3JSC8JITStubs12cti_op_jtrueEPvz +__ZN3JSC8JITStubs10cti_op_modEPvz +__ZN3JSC8JITStubs10cti_op_neqEPvz +__ZN3JSC8JITStubs12cti_op_jlessEPvz +__ZN3JSC8JITStubs24cti_op_get_by_id_genericEPvz +__ZN3JSC8JITStubs14cti_op_jlesseqEPvz +__ZN3JSC8JITStubs26cti_op_tear_off_activationEPvz +__ZN3JSC8JITStubs21cti_op_ret_scopeChainEPvz +__ZN3JSC8JITStubs19cti_op_to_primitiveEPvz +__ZNK3JSC12JSNumberCell8toStringEPNS_9ExecStateE +__ZN3JSC8JITStubs13cti_op_bitandEPvz +__ZN3JSC8JITStubs13cti_op_lshiftEPvz +__ZN3JSC8JITStubs13cti_op_bitnotEPvz +__ZNK3JSC12JSNumberCell9toBooleanEPNS_9ExecStateE +__ZN3JSC8JITStubs14cti_op_urshiftEPvz +__ZNK3JSC12JSNumberCell18getTruncatedUInt32ERj +__ZN3JSC4Yarr14RegexGenerator28generateCharacterClassSingleERNS1_19TermGenerationStateE +__ZN3WTF15deleteAllValuesIPN3JSC4Yarr18PatternDisjunctionELm4EEEvRKNS_6VectorIT_XT0_EEE +__ZN3JSC8JITStubs17cti_op_new_regexpEPvz +__ZN3JSC8JITStubs12cti_op_bitorEPvz +__ZNK3JSC12JSNumberCell17getTruncatedInt32ERi +__ZN3JSC8JITStubs13cti_op_rshiftEPvz +__ZN3JSC8JITStubs13cti_op_bitxorEPvz +__ZN3WTF7HashSetINS_6RefPtrIN3JSC7UString3RepEEENS2_17IdentifierRepHashENS_10HashTraitsIS5_EEE3addERKS5_ +__ZN3JSC8JITStubs9cti_op_eqEPvz +__ZN3JSC8JITStubs16cti_op_call_evalEPvz +__ZN3JSC8JITStubs19cti_op_resolve_skipEPvz +__ZN3JSC8JITStubs17cti_op_new_objectEPvz +__ZN3JSC8JITStubs14cti_op_resolveEPvz +__ZN3JSC8JITStubs17cti_op_put_by_valEPvz +__ZN3JSC8JITStubs18cti_op_switch_charEPvz +__ZN3JSC8JITStubs28cti_op_get_by_id_string_failEPvz +__ZThn12_N3JSC8EvalNodeD0Ev +__ZN3WTF6VectorIN3JSC7UStringELm16EE14expandCapacityEm +__ZN3JSC8JITStubs17cti_op_get_pnamesEPvz +__ZN3JSC8JITStubs17cti_op_next_pnameEPvz +__ZN3WTF7HashSetIPN3JSC20MarkedArgumentBufferENS_7PtrHashIS3_EENS_10HashTraitsIS3_EEE3addERKS3_ +__ZN3WTF9HashTableIPN3JSC20MarkedArgumentBufferES3_NS_17IdentityExtractorIS3_EENS_7PtrHashIS3_EENS_10HashTraitsIS3_EES9_E4findI +__ZN3JSC8JITStubs24cti_op_get_by_val_stringEPvz +__ZN3JSC4Yarr6ParserINS0_23RegexPatternConstructorEE28CharacterClassParserDelegate25atomBuiltInCharacterClassENS0_23BuiltInChar +__ZN3JSC12jsNumberCellEPNS_9ExecStateEd +__ZN3JSC8JITStubs18cti_op_is_functionEPvz +__ZN3JSC8JITStubs16cti_op_is_objectEPvz +__ZN3JSC8JITStubs16cti_op_nstricteqEPvz +__ZN3JSC8JITStubs13cti_op_lesseqEPvz +__ZNK3JSC12JSNumberCell11toPrimitiveEPNS_9ExecStateENS_22PreferredPrimitiveTypeE +__ZN3JSC4Yarr14RegexGenerator27generateCharacterClassFixedERNS1_19TermGenerationStateE +__ZN3JSC4Heap7destroyEv +__ZN3JSC12JSGlobalDataD1Ev +__ZN3JSC12JSGlobalDataD2Ev +__ZN3JSC12RegisterFileD1Ev +__ZNK3JSC9HashTable11deleteTableEv +__ZN3JSC5LexerD1Ev +__ZN3JSC5LexerD2Ev +__ZN3WTF20deleteAllPairSecondsIP24OpaqueJSClassContextDataKNS_7HashMapIP13OpaqueJSClassS2_NS_7PtrHashIS5_EENS_10HashTraitsIS5_E +__ZN3JSC17CommonIdentifiersD2Ev +__ZN3JSC21deleteIdentifierTableEPNS_15IdentifierTableE +__ZN3JSC4HeapD1Ev +__ZN3JSC12SmallStringsD1Ev +__ZN3JSCL16mathProtoFuncMinEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSCL17arrayProtoFuncPopEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSC7JSArray3popEv +__ZN3JSC11DoWhileNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZN3JSC11DoWhileNodeD0Ev +__ZN3JSC3JIT18emit_op_switch_immEPNS_11InstructionE +__ZN3JSC8JITStubs17cti_op_switch_immEPPv +__ZN3JSC13UnaryPlusNode14stripUnaryPlusEv +__ZN3JSC15globalFuncIsNaNEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSC17NumberConstructor11getCallDataERNS_8CallDataE +__ZN3JSCL21callNumberConstructorEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3WTF6VectorIPNS0_IN3JSC10IdentifierELm64EEELm32EE14expandCapacityEm +__ZN3JSC8JITStubs19cti_op_is_undefinedEPvz +__ZN3JSC8JITStubs13cti_op_typeofEPvz +__ZN3JSC8JITStubs33cti_op_create_arguments_no_paramsEPvz +__ZN3JSC8JITStubs19cti_op_load_varargsEPvz +__ZN3JSC8JITStubs10cti_op_notEPvz +__ZN3JSC8JITStubs16cti_op_is_stringEPvz +__ZN3JSCL24regExpConstructorDollar1EPNS_9ExecStateERKNS_10IdentifierERKNS_12PropertySlotE +__ZN3WTF6VectorIN3JSC15StringJumpTableELm0EE14expandCapacityEm +__ZN3JSC8JITStubs20cti_op_switch_stringEPvz +__ZN3JSC9Arguments3putEPNS_9ExecStateERKNS_10IdentifierENS_7JSValueERNS_15PutPropertySlotE +__ZN3JSC8JITStubs18cti_op_to_jsnumberEPvz +__ZN3JSC8JITStubs19cti_op_loop_if_lessEPvz +__ZN3JSC9LabelNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZN3JSC9LabelNodeD0Ev +__ZNK3JSC7UString5asciiEv +__ZN3JSC8JITStubs27cti_op_get_by_id_array_failEPvz +__ZN3JSC12X86Assembler23X86InstructionFormatter9oneByteOpENS0_15OneByteOpcodeIDEiPv +__ZN3JSC8JITStubs23cti_op_create_argumentsEPvz +__ZN3JSCL21arrayProtoFuncUnShiftEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSC8JITStubs25cti_op_tear_off_argumentsEPvz +__ZN3JSC7JSArray11sortNumericEPNS_9ExecStateENS_7JSValueENS_8CallTypeERKNS_8CallDataE +__ZN3JSC7JSArray17compactForSortingEv +__ZN3JSCL22compareNumbersForQSortEPKvS1_ +__ZN3JSC8JITStubs15cti_op_post_incEPPv +__ZN3JSC8JITStubs24cti_op_put_by_id_genericEPvz +__ZN3JSCL24regExpConstructorDollar2EPNS_9ExecStateERKNS_10IdentifierERKNS_12PropertySlotE +__ZN3JSCL24regExpConstructorDollar3EPNS_9ExecStateERKNS_10IdentifierERKNS_12PropertySlotE +__ZN3JSCL24regExpConstructorDollar4EPNS_9ExecStateERKNS_10IdentifierERKNS_12PropertySlotE +__ZN3JSCL24regExpConstructorDollar5EPNS_9ExecStateERKNS_10IdentifierERKNS_12PropertySlotE +__ZN3JSCL24regExpConstructorDollar6EPNS_9ExecStateERKNS_10IdentifierERKNS_12PropertySlotE +__ZN3JSCL21stringProtoFuncSubstrEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSCL23stringProtoFuncFontsizeEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSCL24dateProtoFuncToUTCStringEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSCL19stringProtoFuncLinkEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSCL9dateParseEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSC8JITStubs21cti_op_loop_if_lesseqEPPv +__ZN3JSCL16mathProtoFuncExpEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSC4Yarr17nonwordcharCreateEv +__ZN3WTF6VectorIPN3JSC4Yarr18PatternDisjunctionELm4EE14expandCapacityEmPKS4_ +__Z15jsc_pcre_xclassiPKh +__ZN3JSC18RegExpMatchesArray3putEPNS_9ExecStateEjNS_7JSValueE +__ZN3JSC28globalFuncDecodeURIComponentEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSC8JITStubs27cti_op_get_by_id_array_failEPPv +__ZNK3JSC9Arguments9classInfoEv +__ZN3JSC9Arguments15copyToRegistersEPNS_9ExecStateEPNS_8RegisterEj +__ZN3JSC19JSStaticScopeObject4markEv +__ZN3JSC8JITStubs19cti_op_loop_if_lessEPPv +__ZN3JSC8JITStubs16cti_op_del_by_idEPvz +__ZN3JSC7JSArray14deletePropertyEPNS_9ExecStateERKNS_10IdentifierE +__ZN3JSC7UString6appendEPKti +__ZN3JSC8JITStubs17cti_op_push_scopeEPvz +__ZN3JSC8JITStubs19cti_op_resolve_baseEPvz +__ZN3JSC8JITStubs16cti_op_pop_scopeEPvz +__ZN3JSC8JITStubs17cti_op_is_booleanEPvz +__ZN3JSCL20arrayProtoFuncSpliceEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSC8JITStubs17cti_op_jmp_scopesEPvz +__ZN3JSC8JITStubs9cti_op_inEPvz +__ZN3JSC8JITStubs15cti_op_stricteqEPvz +__ZN3JSC8JITStubs32cti_op_get_by_id_proto_list_fullEPvz +__ZN3WTF6VectorIiLm8EE14expandCapacityEm +__ZN3JSCL21stringProtoFuncSearchEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSC8JITStubs12cti_vm_throwEPvz +__ZN3JSC8JITStubs21cti_op_push_new_scopeEPvz +__ZN3JSC8JITStubs16cti_op_is_numberEPvz +__ZN3JSC16JSVariableObject16getPropertyNamesEPNS_9ExecStateERNS_17PropertyNameArrayE +__ZNK3JSC8JSString8toObjectEPNS_9ExecStateE +__ZN3JSC12StringObject16getPropertyNamesEPNS_9ExecStateERNS_17PropertyNameArrayE +__ZN3JSC9ExecState11stringTableEPS0_ +__ZN3JSC11JSImmediate8toObjectENS_7JSValueEPNS_9ExecStateE +__ZN3JSC36constructBooleanFromImmediateBooleanEPNS_9ExecStateENS_7JSValueE +__ZN3JSC13BooleanObjectD1Ev +__ZN3JSCL17arrayProtoFuncMapEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSC7JSArrayC2EN3WTF10PassRefPtrINS_9StructureEEEj +__ZN3JSC8JITStubs17cti_op_del_by_valEPvz +__ZN3JSC8JITStubs27cti_op_get_by_id_proto_failEPvz +__ZN3JSC10JSFunction12callerGetterEPNS_9ExecStateERKNS_10IdentifierERKNS_12PropertySlotE +__ZNK3JSC11Interpreter14retrieveCallerEPNS_9ExecStateEPNS_16InternalFunctionE +__ZN3JSC18globalFuncIsFiniteEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSC6JSCell18getOwnPropertySlotEPNS_9ExecStateERKNS_10IdentifierERNS_12PropertySlotE +__ZNK3JSC12JSNumberCell8toObjectEPNS_9ExecStateE +__ZN3JSC15constructNumberEPNS_9ExecStateENS_7JSValueE +__ZN3JSC12NumberObject11getJSNumberEv +__ZN3JSCL7dateNowEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSC12NumberObjectD1Ev +__ZN3JSC8JSObject18getPrimitiveNumberEPNS_9ExecStateERdRNS_7JSValueE +__ZN3JSCL22numberProtoFuncValueOfEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSC13JSNotAnObject18getOwnPropertySlotEPNS_9ExecStateEjRNS_12PropertySlotE +__ZN3JSC19JSStaticScopeObject18getOwnPropertySlotEPNS_9ExecStateERKNS_10IdentifierERNS_12PropertySlotE +__ZN3JSC16InternalFunction4nameEPNS_12JSGlobalDataE +__ZN3JSCL18arrayProtoFuncSomeEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSC8JSString18getOwnPropertySlotEPNS_9ExecStateEjRNS_12PropertySlotE +__ZN3JSC12JSNumberCell11getJSNumberEv +__ZN3JSC23createNotAFunctionErrorEPNS_9ExecStateENS_7JSValueEjPNS_9CodeBlockE +__ZN3JSC17PrefixBracketNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZN3JSC17PrefixBracketNodeD0Ev +__ZN3JSC17RegExpConstructor11getCallDataERNS_8CallDataE +__ZN3JSCL21callRegExpConstructorEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSC7JSArray4sortEPNS_9ExecStateE +__ZN3JSCL27dateProtoFuncSetUTCFullYearEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSCL24dateProtoFuncSetUTCHoursEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSCL23setNewValueFromTimeArgsEPNS_9ExecStateENS_7JSValueERKNS_7ArgListEib +__ZN3JSC8JITStubs17cti_op_switch_immEPvz +__ZN3JSC12RegExpObject3putEPNS_9ExecStateERKNS_10IdentifierENS_7JSValueERNS_15PutPropertySlotE +__ZN3JSCL24setRegExpObjectLastIndexEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueE +__ZN3JSCL28regExpConstructorLeftContextEPNS_9ExecStateERKNS_10IdentifierERKNS_12PropertySlotE +__ZN3JSC18RegExpMatchesArray14deletePropertyEPNS_9ExecStateEj +__ZN3JSC18RegExpMatchesArray3putEPNS_9ExecStateERKNS_10IdentifierENS_7JSValueERNS_15PutPropertySlotE +__ZN3JSC10JSFunction12lengthGetterEPNS_9ExecStateERKNS_10IdentifierERKNS_12PropertySlotE +__ZNK3JSC12NumberObject9classInfoEv +__ZN3JSC8JITStubs12cti_op_throwEPvz +__ZN3JSCL19isNonASCIIIdentPartEi +__ZN3JSCL27dateProtoFuncToLocaleStringEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSCL16formatLocaleDateEPNS_9ExecStateEPNS_12DateInstanceEdNS_20LocaleDateTimeFormatERKNS_7ArgListE +__ZN3JSCL21dateProtoFuncSetHoursEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSCL23dateProtoFuncSetMinutesEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSCL23dateProtoFuncSetSecondsEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSCL28dateProtoFuncSetMilliSecondsEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZNK3JSC12JSNumberCell12toThisObjectEPNS_9ExecStateE +__ZN3JSC16ErrorConstructor11getCallDataERNS_8CallDataE +__ZN3JSCL20callErrorConstructorEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSC17PrototypeFunctionC1EPNS_9ExecStateEiRKNS_10IdentifierEPFNS_7JSValueES2_PNS_8JSObjectES6_RKNS_7ArgListEE +__ZN3JSC17PrototypeFunctionC2EPNS_9ExecStateEiRKNS_10IdentifierEPFNS_7JSValueES2_PNS_8JSObjectES6_RKNS_7ArgListEE +__ZN3JSC17PrototypeFunction11getCallDataERNS_8CallDataE +__ZN3JSC17PrototypeFunctionD1Ev +__ZN3JSCL24booleanProtoFuncToStringEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSC17BytecodeGenerator18emitJumpSubroutineEPNS_10RegisterIDEPNS_5LabelE +__ZN3JSC3JIT11emit_op_jsrEPNS_11InstructionE +__ZN3WTF6VectorIN3JSC3JIT7JSRInfoELm0EE14expandCapacityEm +__ZN3JSC3JIT12emit_op_sretEPNS_11InstructionE +__ZN3JSC6Parser7reparseINS_8EvalNodeEEEN3WTF10PassRefPtrIT_EEPNS_12JSGlobalDataEPS5_ +__ZN3JSC8EvalNode6createEPNS_12JSGlobalDataEPNS_14SourceElementsEPN3WTF6VectorISt4pairINS_10IdentifierEjELm0EEEPNS6_IPNS_12Func +__ZN3JSC8EvalNode31bytecodeForExceptionInfoReparseEPNS_14ScopeChainNodeEPNS_9CodeBlockE +__ZN3JSC20FixedVMPoolAllocator17coalesceFreeSpaceEv +__ZN3WTF6VectorIPN3JSC13FreeListEntryELm0EE15reserveCapacityEm +__ZN3JSCL35reverseSortFreeListEntriesByPointerEPKvS1_ +__ZN3JSC14globalFuncEvalEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSCL21functionProtoFuncCallEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSCL22functionProtoFuncApplyEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSC9Arguments11fillArgListEPNS_9ExecStateERNS_20MarkedArgumentBufferE +__ZNK3JSC7JSValue12toThisObjectEPNS_9ExecStateE +__ZN3JSC8VoidNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZN3JSC8VoidNodeD0Ev +__ZN3JSC16InternalFunctionC2EPNS_12JSGlobalDataEN3WTF10PassRefPtrINS_9StructureEEERKNS_10IdentifierE +__ZN3JSC20MarkedArgumentBuffer9markListsERN3WTF7HashSetIPS0_NS1_7PtrHashIS3_EENS1_10HashTraitsIS3_EEEE +__ZN3JSC7CStringaSERKS0_ +__ZNK3JSC19JSStaticScopeObject14isDynamicScopeEv +__ZN3JSCL33reverseSortCommonSizedAllocationsEPKvS1_ +__ZN3JSCL20arrayProtoFuncFilterEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSC17NumberConstructor16getConstructDataERNS_13ConstructDataE +__ZN3JSCL30constructWithNumberConstructorEPNS_9ExecStateEPNS_8JSObjectERKNS_7ArgListE +__ZN3JSC17BytecodeGenerator18emitUnexpectedLoadEPNS_10RegisterIDEb +__ZN3JSC8JITStubs12cti_op_throwEPPv +__ZN3JSC6JSCell9getObjectEv +__ZN3JSCL21arrayProtoFuncReverseEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZNK3JSC8JSObject16isVariableObjectEv +__ZN3JSC18EmptyStatementNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZN3JSCL27compareByStringPairForQSortEPKvS1_ +__Z22jsc_pcre_ucp_othercasej +__ZN3JSCL35objectProtoFuncPropertyIsEnumerableEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZNK3JSC8JSObject21getPropertyAttributesEPNS_9ExecStateERKNS_10IdentifierERj +__ZN3WTF7HashMapIjN3JSC7JSValueENS_7IntHashIjEENS_10HashTraitsIjEENS5_IS2_EEE3setERKjRKS2_ +__ZN3WTF9HashTableIjSt4pairIjN3JSC7JSValueEENS_18PairFirstExtractorIS4_EENS_7IntHashIjEENS_14PairHashTraitsINS_10HashTraitsIjEE +__ZN3JSC12RegisterFile21releaseExcessCapacityEv +__ZN3JSCL20isNonASCIIIdentStartEi +__ZN3JSC17BytecodeGenerator14emitPutByIndexEPNS_10RegisterIDEjS2_ +__ZN3JSC3JIT20emit_op_put_by_indexEPNS_11InstructionE +__ZN3JSC8JITStubs19cti_op_put_by_indexEPPv +__ZN3JSCL25numberConstructorMaxValueEPNS_9ExecStateERKNS_10IdentifierERKNS_12PropertySlotE +__ZN3JSCL28numberConstructorPosInfinityEPNS_9ExecStateERKNS_10IdentifierERKNS_12PropertySlotE +__ZN3JSCL28numberConstructorNegInfinityEPNS_9ExecStateERKNS_10IdentifierERKNS_12PropertySlotE +__ZN3JSC18BooleanConstructor11getCallDataERNS_8CallDataE +__ZN3JSCL22callBooleanConstructorEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSCL17mathProtoFuncATanEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSC8JITStubs17cti_op_jmp_scopesEPPv +__ZNK3JSC8JSObject11hasPropertyEPNS_9ExecStateEj +__ZN3JSCL17mathProtoFuncASinEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSC11Interpreter7executeEPNS_8EvalNodeEPNS_9ExecStateEPNS_8JSObjectEPNS_14ScopeChainNodeEPNS_7JSValueE _JSContextGetGlobalObject +__ZN3JSC4Heap14registerThreadEv +__ZN3JSC6JSLockC1EPNS_9ExecStateE +_JSStringCreateWithUTF8CString +__ZN3WTF7Unicode18convertUTF8ToUTF16EPPKcS2_PPtS4_b _JSClassCreate __ZN13OpaqueJSClass6createEPK17JSClassDefinition __ZN13OpaqueJSClassC2EPK17JSClassDefinitionPS_ +__ZN3JSC7UString3Rep14createFromUTF8EPKc +__ZN3WTF7HashMapINS_6RefPtrIN3JSC7UString3RepEEEP19StaticFunctionEntryNS_7StrHashIS5_EENS_10HashTraitsIS5_EENSA_IS7_EEE3addERKS +__ZN3WTF9HashTableINS_6RefPtrIN3JSC7UString3RepEEESt4pairIS5_P19StaticFunctionEntryENS_18PairFirstExtractorIS9_EENS_7StrHashIS5 +__ZN3WTF7HashMapINS_6RefPtrIN3JSC7UString3RepEEEP16StaticValueEntryNS_7StrHashIS5_EENS_10HashTraitsIS5_EENSA_IS7_EEE3addERKS5_R _JSClassRetain _JSObjectMake -__ZN13OpaqueJSClass9prototypeEPK15OpaqueJSContext -__ZN3KJS16JSCallbackObjectINS_8JSObjectEE4initEPNS_9ExecStateE -_JSStringCreateWithUTF8CString +__ZN3JSC16JSCallbackObjectINS_8JSObjectEE4initEPNS_9ExecStateE +__ZN13OpaqueJSClass9prototypeEPN3JSC9ExecStateE +__ZN13OpaqueJSClass11contextDataEPN3JSC9ExecStateE +__ZN3WTF9HashTableIP13OpaqueJSClassSt4pairIS2_P24OpaqueJSClassContextDataENS_18PairFirstExtractorIS6_EENS_7PtrHashIS2_EENS_14Pa +__ZN24OpaqueJSClassContextDataC2EP13OpaqueJSClass +__ZN3JSC7UString3Rep13createCopyingEPKti _JSObjectSetProperty +__ZNK14OpaqueJSString10identifierEPN3JSC12JSGlobalDataE +__ZN3JSC14JSGlobalObject17putWithAttributesEPNS_9ExecStateERKNS_10IdentifierENS_7JSValueEj _JSStringRelease -__Z30makeGetterOrSetterPropertyNodeRKN3KJS10IdentifierES2_PNS_13ParameterNodeEPNS_16FunctionBodyNodeE -__ZN3KJS8JSObject12defineGetterEPNS_9ExecStateERKNS_10IdentifierEPS0_ -__ZN3KJS8JSObject12defineSetterEPNS_9ExecStateERKNS_10IdentifierEPS0_ -__ZNK3KJS15GetterSetterImp4typeEv -__ZNK3KJS8JSObject6canPutEPNS_9ExecStateERKNS_10IdentifierE -__ZN3KJS13ConstDeclNodeC1ERKNS_10IdentifierEPNS_14ExpressionNodeE -__Z26appendToVarDeclarationListRPN3KJS20ParserRefCountedDataIN3WTF6VectorISt4pairINS_10IdentifierEjELm16EEEEEPNS_13ConstDeclNodeE -__ZN3KJS18ConstStatementNodeC1EPNS_13ConstDeclNodeE -__ZN3KJS16JSCallbackObjectINS_8JSObjectEE18getOwnPropertySlotEPNS_9ExecStateERKNS_10IdentifierERNS_12PropertySlotE -__ZN3KJS16JSCallbackObjectINS_8JSObjectEE20staticFunctionGetterEPNS_9ExecStateEPS1_RKNS_10IdentifierERKNS_12PropertySlotE -__ZN3KJS18JSCallbackFunctionC1EPNS_9ExecStateEPFPK13OpaqueJSValuePK15OpaqueJSContextPS3_S9_mPKS5_PS5_ERKNS_10IdentifierE -__ZN3KJS18JSCallbackFunction14callAsFunctionEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE +__ZN3JSC16JSCallbackObjectINS_8JSObjectEE18getOwnPropertySlotEPNS_9ExecStateERKNS_10IdentifierERNS_12PropertySlotE +__ZN3JSC16JSCallbackObjectINS_8JSObjectEE20staticFunctionGetterEPNS_9ExecStateERKNS_10IdentifierERKNS_12PropertySlotE +__ZN3JSC18JSCallbackFunctionC1EPNS_9ExecStateEPFPK13OpaqueJSValuePK15OpaqueJSContextPS3_S9_mPKS5_PS5_ERKNS_10IdentifierE +__ZN3JSC18JSCallbackFunction11getCallDataERNS_8CallDataE +__ZN3JSC18JSCallbackFunction4callEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSC6JSLock12DropAllLocksC1EPNS_9ExecStateE _JSObjectGetPrivate -__ZNK3KJS16JSCallbackObjectINS_8JSObjectEE9classInfoEv +__ZNK3JSC16JSCallbackObjectINS_8JSObjectEE9classInfoEv +_JSValueMakeUndefined +__ZN3JSC16JSCallbackObjectINS_8JSObjectEE17staticValueGetterEPNS_9ExecStateERKNS_10IdentifierERKNS_12PropertySlotE +__ZN14OpaqueJSString6createERKN3JSC7UStringE _JSStringCreateWithCharacters _JSValueMakeString -__ZN3KJS12PropertySlot14functionGetterEPNS_9ExecStateEPNS_8JSObjectERKNS_10IdentifierERKS0_ -__ZN3WTF10fastCallocEmm +__ZNK14OpaqueJSString7ustringEv +__ZN3JSC7UStringC1EPtib +__ZN3JSC16JSCallbackObjectINS_8JSObjectEED1Ev +_JSClassRelease +__ZL25clearReferenceToPrototypeP13OpaqueJSValue _JSObjectGetProperty _JSValueToObject -_JSValueProtect -_JSObjectCallAsFunction -_JSValueMakeNumber +__ZN3JSCL22dateProtoFuncGetUTCDayEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSCL24dateProtoFuncGetUTCMonthEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSCL23dateProtoFuncGetUTCDateEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSCL27dateProtoFuncGetUTCFullYearEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZNK3JSC7UString8toUInt32EPb +__ZN3JSCL24dateProtoFuncGetUTCHoursEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSCL26dateProtoFuncGetUTCMinutesEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSCL26dateProtoFuncGetUTCSecondsEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSCL7dateUTCEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSC12RegExpObject11getCallDataERNS_8CallDataE +__ZN3JSC9Arguments14deletePropertyEPNS_9ExecStateEj _JSValueMakeBoolean -_JSObjectCallAsConstructor -__ZN3KJS15GetterSetterImp4markEv -_JSValueMakeUndefined -_JSValueUnprotect -_JSValueIsNumber _JSValueToNumber -__ZN3KJS16JSCallbackObjectINS_8JSObjectEED0Ev -__Z25clearReferenceToPrototypeP13OpaqueJSValue -_JSClassRelease -_JSStringIsEqualToUTF8CString -_JSStringIsEqual -__ZN3KJSeqERKNS_7UStringES2_ -__ZN3KJS16JSCallbackObjectINS_8JSObjectEE14callbackGetterEPNS_9ExecStateEPS1_RKNS_10IdentifierERKNS_12PropertySlotE _JSStringCreateWithCFString -__ZN3KJS7UStringC2EPNS_5UCharEib -__ZN3KJS16JSCallbackObjectINS_8JSObjectEE3putEPNS_9ExecStateERKNS_10IdentifierEPNS_7JSValueEi +__ZN3WTF13tryFastCallocEmm +_JSValueMakeNumber +__ZN3JSC18JSCallbackFunctionD1Ev +_JSValueToStringCopy +_JSStringCopyCFString +__ZN3JSC18ConstStatementNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZN3JSC13ConstDeclNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZN3JSC13ConstDeclNode14emitCodeSingleERNS_17BytecodeGeneratorE +__ZN3JSC13ConstDeclNodeD0Ev +__ZN3JSC18ConstStatementNodeD0Ev +__ZN3JSC18BooleanConstructor16getConstructDataERNS_13ConstructDataE +__ZN3JSCL31constructWithBooleanConstructorEPNS_9ExecStateEPNS_8JSObjectERKNS_7ArgListE +__ZN3JSC16constructBooleanEPNS_9ExecStateERKNS_7ArgListE +__ZN3JSCL31dateProtoFuncGetUTCMillisecondsEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSCL28dateProtoFuncGetMilliSecondsEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSCL31dateProtoFuncToLocaleTimeStringEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSCL21regExpObjectLastIndexEPNS_9ExecStateERKNS_10IdentifierERKNS_12PropertySlotE +__ZN3JSC21DebuggerStatementNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZN3JSC21DebuggerStatementNodeD0Ev +__ZN3JSC4Yarr12RegexPattern21newlineCharacterClassEv +__ZN3JSC17ObjectConstructor11getCallDataERNS_8CallDataE +__ZN3JSCL23dateProtoFuncSetUTCDateEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSCL26stringFromCharCodeSlowCaseEPNS_9ExecStateERKNS_7ArgListE +__ZN3JSCL21callObjectConstructorEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSCL27objectProtoFuncDefineGetterEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSC8JSObject12defineGetterEPNS_9ExecStateERKNS_10IdentifierEPS0_ +__ZN3JSC12GetterSetter4markEv +__ZN3JSC12GetterSetterD1Ev +__ZN3JSCL22regExpProtoFuncCompileEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZNK3JSC17NumberConstructor9classInfoEv +__ZNK3JSC17RegExpConstructor9classInfoEv +__ZN3JSCL31dateProtoFuncToLocaleDateStringEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZNK3JSC8JSObject14isGlobalObjectEv +_JSValueToBoolean +__ZN3JSC8JITStubs13cti_op_lshiftEPPv +__ZN3JSC8JITStubs13cti_op_bitnotEPPv +__ZN3JSC6JSCell3putEPNS_9ExecStateERKNS_10IdentifierENS_7JSValueERNS_15PutPropertySlotE +__ZN3JSC19FunctionConstructor11getCallDataERNS_8CallDataE +__ZN3WTF9ByteArray6createEm +__ZNK3JSC6JSCell9getStringERNS_7UStringE +__ZN3JSC3JIT12emit_op_loopEPNS_11InstructionE +__ZN3JSC10throwErrorEPNS_9ExecStateENS_9ErrorTypeE +__ZN3JSC11JSByteArrayC1EPNS_9ExecStateEN3WTF10PassRefPtrINS_9StructureEEEPNS3_9ByteArrayEPKNS_9ClassInfoE +__ZN3JSC11JSByteArrayC2EPNS_9ExecStateEN3WTF10PassRefPtrINS_9StructureEEEPNS3_9ByteArrayEPKNS_9ClassInfoE +__ZN3JSC11JSByteArray18getOwnPropertySlotEPNS_9ExecStateERKNS_10IdentifierERNS_12PropertySlotE +__ZN3JSC11JSByteArray3putEPNS_9ExecStateEjNS_7JSValueE +__ZN3JSC11JSByteArray3putEPNS_9ExecStateERKNS_10IdentifierENS_7JSValueERNS_15PutPropertySlotE +__ZN3JSC11JSByteArray18getOwnPropertySlotEPNS_9ExecStateEjRNS_12PropertySlotE +__ZN3JSC8JITStubs28cti_op_get_by_val_byte_arrayEPPv +__ZN3JSC8JITStubs28cti_op_put_by_val_byte_arrayEPPv +__ZL30makeGetterOrSetterPropertyNodePvRKN3JSC10IdentifierES3_PNS0_13ParameterNodeEPNS0_16FunctionBodyNodeERKNS0_10SourceCodeE +__ZN3JSC17BytecodeGenerator13emitPutGetterEPNS_10RegisterIDERKNS_10IdentifierES2_ +__ZN3JSC17BytecodeGenerator13emitPutSetterEPNS_10RegisterIDERKNS_10IdentifierES2_ +__ZN3JSC3JIT18emit_op_put_getterEPNS_11InstructionE +__ZN3JSC3JIT18emit_op_put_setterEPNS_11InstructionE +__ZN3JSC8JITStubs17cti_op_put_getterEPPv +__ZN3JSC8JITStubs17cti_op_put_setterEPPv +__ZN3JSC8JSObject12defineSetterEPNS_9ExecStateERKNS_10IdentifierEPS0_ +__ZNK3JSC12GetterSetter14isGetterSetterEv +__ZNK3JSC6JSCell14isGetterSetterEv +__ZN3JSCL29regExpConstructorRightContextEPNS_9ExecStateERKNS_10IdentifierERKNS_12PropertySlotE +__ZN3JSC5Lexer19copyCodeWithoutBOMsEv +__ZN3JSC13JSNotAnObject3putEPNS_9ExecStateERKNS_10IdentifierENS_7JSValueERNS_15PutPropertySlotE +__ZN3JSC6JSCell16getConstructDataERNS_13ConstructDataE +__ZN3JSC26createNotAConstructorErrorEPNS_9ExecStateENS_7JSValueEjPNS_9CodeBlockE +__ZN3JSC15isStrWhiteSpaceEt +__ZN3JSC10throwErrorEPNS_9ExecStateENS_9ErrorTypeEPKc +__ZNK3JSC22NativeErrorConstructor9classInfoEv +__ZNK3JSC16JSCallbackObjectINS_8JSObjectEE9classNameEv +__ZN3JSC4Heap11objectCountEv +__ZNK3JSC12SmallStrings5countEv +__ZN3JSC14JSGlobalObject12defineGetterEPNS_9ExecStateERKNS_10IdentifierEPNS_8JSObjectE +__ZN3JSCL27objectProtoFuncLookupGetterEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSC8JSObject12lookupGetterEPNS_9ExecStateERKNS_10IdentifierE +__ZN3JSCL27objectProtoFuncDefineSetterEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSC14JSGlobalObject12defineSetterEPNS_9ExecStateERKNS_10IdentifierEPNS_8JSObjectE +__ZN3JSC9Structure22getterSetterTransitionEPS0_ +__ZN3JSC8JSObject22fillGetterPropertySlotERNS_12PropertySlotEPNS_7JSValueE +__ZN3JSC12PropertySlot14functionGetterEPNS_9ExecStateERKNS_10IdentifierERKS0_ +__ZN3JSCL28objectProtoFuncIsPrototypeOfEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSC12StringObjectC2EPNS_9ExecStateEN3WTF10PassRefPtrINS_9StructureEEERKNS_7UStringE +__ZNK3JSC7UString6is8BitEv +__ZN3JSC8JSObject15unwrappedObjectEv +__ZN3JSC22NativeErrorConstructor11getCallDataERNS_8CallDataE +__ZN3JSC16JSCallbackObjectINS_8JSObjectEE11getCallDataERNS_8CallDataE +__ZN3JSC17BytecodeGenerator21emitComplexJumpScopesEPNS_5LabelEPNS_18ControlFlowContextES4_ +__ZN3JSC23ThrowableExpressionData14emitThrowErrorERNS_17BytecodeGeneratorENS_9ErrorTypeEPKc +__ZN3JSC17BytecodeGenerator12emitNewErrorEPNS_10RegisterIDENS_9ErrorTypeENS_7JSValueE +__ZN3JSC3JIT17emit_op_new_errorEPNS_11InstructionE +__ZN3JSC23MacroAssemblerX86Common8branch16ENS0_9ConditionENS_22AbstractMacroAssemblerINS_12X86AssemblerEE9BaseIndexENS4_5Imm32E +_JSStringRetain +__ZN3JSCL19arrayProtoFuncEveryEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSCL20arrayProtoFuncReduceEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSCL25arrayProtoFuncReduceRightEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSCL28arrayProtoFuncToLocaleStringEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSCL25arrayProtoFuncLastIndexOfEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSC15AssignErrorNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZN3JSC8JITStubs16cti_op_new_errorEPPv +__ZN3JSC15AssignErrorNodeD0Ev +__ZN3JSC17BytecodeGenerator18emitUnexpectedLoadEPNS_10RegisterIDEd +__ZN3JSC19JSStaticScopeObject3putEPNS_9ExecStateERKNS_10IdentifierENS_7JSValueERNS_15PutPropertySlotE +__ZN3JSC9ExecState9dateTableEPS0_ +__ZNK3JSC15RegExpPrototype9classInfoEv +__ZN3JSC12StringObject14deletePropertyEPNS_9ExecStateERKNS_10IdentifierE +__ZN3JSCL25dateProtoFuncToDateStringEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSCL25dateProtoFuncToTimeStringEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSCL25numberConstructorNaNValueEPNS_9ExecStateERKNS_10IdentifierERKNS_12PropertySlotE +__ZN3JSCL31dateProtoFuncSetUTCMillisecondsEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSCL26dateProtoFuncSetUTCSecondsEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSCL26dateProtoFuncSetUTCMinutesEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSCL24dateProtoFuncSetUTCMonthEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSCL23throwStackOverflowErrorEPNS_9ExecStateEPNS_12JSGlobalDataEPvRS4_ +__ZN3JSC24createStackOverflowErrorEPNS_9ExecStateE +__ZN3JSC15DeleteValueNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZN3JSC15DeleteValueNodeD0Ev +__ZN3JSC16PostfixErrorNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZN3JSC15PrefixErrorNode12emitBytecodeERNS_17BytecodeGeneratorEPNS_10RegisterIDE +__ZN3JSC16PostfixErrorNodeD0Ev +__ZN3JSC15PrefixErrorNodeD0Ev +__ZN3JSC23createInvalidParamErrorEPNS_9ExecStateEPKcNS_7JSValueEjPNS_9CodeBlockE +__ZNK3JSC15DotAccessorNode17isDotAccessorNodeEv +__ZNK3JSC14ExpressionNode17isDotAccessorNodeEv +__ZN3JSC13JSNotAnObject3putEPNS_9ExecStateEjNS_7JSValueE +__ZN3JSC4Heap24setGCProtectNeedsLockingEv +__ZN3JSCL23callFunctionConstructorEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZNK3JSC16JSCallbackObjectINS_8JSObjectEE8toStringEPNS_9ExecStateE +__ZN3JSC8JITStubs17cti_op_instanceofEPPv +__ZN3JSC17BytecodeGenerator35emitThrowExpressionTooDeepExceptionEv +__ZN3JSCL25numberConstructorMinValueEPNS_9ExecStateERKNS_10IdentifierERKNS_12PropertySlotE +__ZN3JSCL17mathProtoFuncACosEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSCL18mathProtoFuncATan2EPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSCL16mathProtoFuncTanEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSCL28numberProtoFuncToExponentialEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSCL26numberProtoFuncToPrecisionEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSCL12charSequenceEci +__ZN3JSCL29objectProtoFuncToLocaleStringEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSC6JSCell14toThisJSStringEPNS_9ExecStateE +__ZNK3JSC6JSCell12toThisStringEPNS_9ExecStateE +__ZN3JSCL27objectProtoFuncLookupSetterEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSC8JSObject12lookupSetterEPNS_9ExecStateERKNS_10IdentifierE +__ZNK3JSC16JSVariableObject21getPropertyAttributesEPNS_9ExecStateERKNS_10IdentifierERj +__ZN3JSC9ExecState22regExpConstructorTableEPS0_ +__ZN3JSCL24regExpConstructorDollar7EPNS_9ExecStateERKNS_10IdentifierERKNS_12PropertySlotE +__ZN3JSCL24regExpConstructorDollar8EPNS_9ExecStateERKNS_10IdentifierERKNS_12PropertySlotE +__ZN3JSCL24regExpConstructorDollar9EPNS_9ExecStateERKNS_10IdentifierERKNS_12PropertySlotE +__ZN3JSCL22regExpConstructorInputEPNS_9ExecStateERKNS_10IdentifierERKNS_12PropertySlotE +__ZN3JSCL25setRegExpConstructorInputEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueE +__ZN3JSCL26regExpConstructorLastMatchEPNS_9ExecStateERKNS_10IdentifierERKNS_12PropertySlotE +__ZN3JSCL26regExpConstructorLastParenEPNS_9ExecStateERKNS_10IdentifierERKNS_12PropertySlotE +__ZN3JSCL26regExpConstructorMultilineEPNS_9ExecStateERKNS_10IdentifierERKNS_12PropertySlotE +__ZN3JSCL29setRegExpConstructorMultilineEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueE +__ZN3JSC4Yarr15nondigitsCreateEv +__ZNK3JSC19JSStaticScopeObject12toThisObjectEPNS_9ExecStateE +__ZN3JSC12JSActivation18getArgumentsGetterEv +__ZN3JSC12JSActivation15argumentsGetterEPNS_9ExecStateERKNS_10IdentifierERKNS_12PropertySlotE +__ZN3JSCL23booleanProtoFuncValueOfEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSCL28stringProtoFuncLocaleCompareEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3WTF8Collator11userDefaultEv +__ZNK3WTF8Collator7collateEPKtmS2_m +__ZNK3WTF8Collator14createCollatorEv +__ZN3WTF8CollatorD1Ev +__ZN3WTF8Collator15releaseCollatorEv +__ZNK3JSC10MathObject9classInfoEv +__ZN3JSC9ExecState9mathTableEPS0_ +__ZN3WTF6VectorIN3JSC20FunctionRegisterInfoELm0EE14expandCapacityEm +__ZN3JSC3JIT25emit_op_profile_will_callEPNS_11InstructionE +__ZN3JSC3JIT24emit_op_profile_did_callEPNS_11InstructionE +__ZN3JSC8Profiler8profilerEv +__ZN3JSC8Profiler14startProfilingEPNS_9ExecStateERKNS_7UStringE +__ZN3JSC16ProfileGenerator6createERKNS_7UStringEPNS_9ExecStateEj +__ZN3JSC16ProfileGeneratorC2ERKNS_7UStringEPNS_9ExecStateEj +__ZN3JSC7Profile6createERKNS_7UStringEj +__ZN3JSC7ProfileC2ERKNS_7UStringEj +__ZN3JSC11ProfileNodeC1ERKNS_14CallIdentifierEPS0_S4_ +__ZN3JSC33getCurrentUTCTimeWithMicrosecondsEv +__ZN3JSC16ProfileGenerator24addParentForConsoleStartEPNS_9ExecStateE +__ZN3JSC8Profiler20createCallIdentifierEPNS_12JSGlobalDataENS_7JSValueERKNS_7UStringEi +__ZN3JSC16InternalFunction21calculatedDisplayNameEPNS_12JSGlobalDataE +__ZN3JSC11ProfileNode10insertNodeEN3WTF10PassRefPtrIS0_EE +__ZN3WTF6VectorINS_6RefPtrIN3JSC11ProfileNodeEEELm0EE14expandCapacityEm +__ZN3WTF6VectorINS_6RefPtrIN3JSC16ProfileGeneratorEEELm0EE14expandCapacityEm +__ZN3JSC8JITStubs23cti_op_profile_did_callEPPv +__ZN3JSC8Profiler10didExecuteEPNS_9ExecStateENS_7JSValueE +__ZN3JSC16ProfileGenerator10didExecuteERKNS_14CallIdentifierE +__ZN3JSC11ProfileNode10didExecuteEv +__ZN3JSC8JITStubs24cti_op_profile_will_callEPPv +__ZN3JSC8Profiler11willExecuteEPNS_9ExecStateENS_7JSValueE +__ZN3JSC16ProfileGenerator11willExecuteERKNS_14CallIdentifierE +__ZN3JSC11ProfileNode11willExecuteERKNS_14CallIdentifierE +__ZN3JSC8Profiler13stopProfilingEPNS_9ExecStateERKNS_7UStringE +__ZN3JSC16ProfileGenerator13stopProfilingEv +__ZN3JSC7Profile7forEachEMNS_11ProfileNodeEFvvE +__ZNK3JSC11ProfileNode25traverseNextNodePostOrderEv +__ZN3JSC11ProfileNode13stopProfilingEv +__ZN3JSCeqERKNS_7UStringEPKc +__ZN3JSC11ProfileNode11removeChildEPS0_ +__ZN3JSC11ProfileNode8addChildEN3WTF10PassRefPtrIS0_EE +_JSValueIsObjectOfClass +_JSObjectCallAsConstructor +__ZN3JSC9constructEPNS_9ExecStateENS_7JSValueENS_13ConstructTypeERKNS_13ConstructDataERKNS_7ArgListE +_JSObjectCallAsFunction +__ZN3JSC4Heap14primaryHeapEndEv +__ZN3JSC4Heap16primaryHeapBeginEv +__ZNK3JSC18JSCallbackFunction9classInfoEv +__ZN3JSC8Profiler11willExecuteEPNS_9ExecStateERKNS_7UStringEi +__ZN3JSC8Profiler10didExecuteEPNS_9ExecStateERKNS_7UStringEi +__ZNK3JSC16ProfileGenerator5titleEv +__ZN3JSC7ProfileD0Ev +__ZN3WTF10RefCountedIN3JSC11ProfileNodeEE5derefEv +__ZN3JSC4Yarr14RegexGenerator33generatePatternCharacterNonGreedyERNS1_19TermGenerationStateE +__ZN3JSC35createInterruptedExecutionExceptionEPNS_12JSGlobalDataE +__ZNK3JSC25InterruptedExecutionError19isWatchdogExceptionEv +__ZN3JSC25InterruptedExecutionErrorD1Ev +__ZN3JSC12JSGlobalData10ClientDataD2Ev +__ZN3JSC18RegExpMatchesArray16getPropertyNamesEPNS_9ExecStateERNS_17PropertyNameArrayE +__ZN3WTF8CollatorC1EPKc +__ZN3WTF8Collator18setOrderLowerFirstEb +__ZN3WTF12randomNumberEv +__ZN3JSC16JSCallbackObjectINS_8JSObjectEE3putEPNS_9ExecStateERKNS_10IdentifierENS_7JSValueERNS_15PutPropertySlotE +__ZNK3JSC6JSCell9getStringEv +__ZNK3JSC12DateInstance7getTimeERdRi +__ZN3JSC10throwErrorEPNS_9ExecStateENS_9ErrorTypeERKNS_7UStringE +_JSGlobalContextCreate +_JSGlobalContextCreateInGroup +__ZN3JSC4Heap29makeUsableFromMultipleThreadsEv +_JSGlobalContextRetain +__ZN3JSC6JSLock6unlockEb +_JSEvaluateScript +__ZNK3JSC14JSGlobalObject17supportsProfilingEv +_JSGlobalContextRelease +__ZN3JSC14JSGlobalObjectD1Ev +__ZN3JSC14JSGlobalObject18JSGlobalObjectDataD0Ev +__ZN3JSC17FunctionPrototype11getCallDataERNS_8CallDataE +__ZN3JSC15DateConstructor11getCallDataERNS_8CallDataE +__ZN3JSCL8callDateEPNS_9ExecStateEPNS_8JSObjectENS_7JSValueERKNS_7ArgListE +__ZN3JSC13JSNotAnObject4markEv +_JSObjectIsFunction +__ZN3JSC4Heap17globalObjectCountEv +__ZN3JSC4Heap20protectedObjectCountEv +__ZN3JSC4Heap25protectedObjectTypeCountsEv +__ZN3WTF9HashTableIPKcSt4pairIS2_jENS_18PairFirstExtractorIS4_EENS_7PtrHashIS2_EENS_14PairHashTraitsINS_10HashTraitsIS2_EENSA_I +__ZN3WTF20fastMallocStatisticsEv +__ZNK3JSC4Heap10statisticsEv +__ZN3WTF27releaseFastMallocFreeMemoryEv +__ZN3JSC10JSFunction16getConstructDataERNS_13ConstructDataE +__ZN3JSC10JSFunction9constructEPNS_9ExecStateERKNS_7ArgListE +__ZN3JSC8Debugger6attachEPNS_14JSGlobalObjectE +__ZN3WTF7HashSetIPN3JSC14JSGlobalObjectENS_7PtrHashIS3_EENS_10HashTraitsIS3_EEE3addERKS3_ +__ZN3WTF9HashTableIPN3JSC14JSGlobalObjectES3_NS_17IdentityExtractorIS3_EENS_7PtrHashIS3_EENS_10HashTraitsIS3_EES9_E6rehashEi +__ZN3JSC3JIT13emit_op_debugEPNS_11InstructionE +__ZN3JSC8JITStubs12cti_op_debugEPPv +__ZN3JSC11Interpreter5debugEPNS_9ExecStateENS_11DebugHookIDEii +__ZN3JSC8Debugger6detachEPNS_14JSGlobalObjectE +__ZN3JSC9CodeBlock33functionRegisterForBytecodeOffsetEjRi +_JSStringIsEqualToUTF8CString +__ZN3JSC16JSCallbackObjectINS_8JSObjectEE14callbackGetterEPNS_9ExecStateERKNS_10IdentifierERKNS_12PropertySlotE _JSObjectSetPrivate -__ZN3KJS15GetterSetterImpD0Ev -__ZN3KJS27objectProtoFuncLookupGetterEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZNK3KJS17PreIncResolveNode10precedenceEv -__ZNK3KJS10SwitchNode8streamToERNS_12SourceStreamE -__ZNK3KJS13CaseBlockNode8streamToERNS_12SourceStreamE -__ZNK3KJS14CaseClauseNode8streamToERNS_12SourceStreamE -__ZN3KJS18ConstStatementNodeD1Ev -__ZN3KJS17PreDecBracketNodeD1Ev -__ZN3KJS11Interpreter24setShouldPrintExceptionsEb -__ZN3KJS9Collector26protectedGlobalObjectCountEv -__ZN3KJS9Collector4sizeEv -__ZN3KJS9Collector17globalObjectCountEv -__ZN3KJS9Collector20protectedObjectCountEv -__ZN3KJS9Collector25protectedObjectTypeCountsEv -__ZNK3KJS15NumberObjectImp9classInfoEv -__ZNK3KJS15RegExpPrototype9classInfoEv -__ZNK3KJS15RegExpObjectImp9classInfoEv -__ZNK3KJS14NativeErrorImp9classInfoEv -__ZNK3KJS13MathObjectImp9classInfoEv -__ZN3WTF6VectorIPN3KJS7JSValueELm8EE14expandCapacityEmPKS3_ -__ZN3WTF6VectorIPN3KJS7JSValueELm8EE14expandCapacityEm -__ZN3KJS15ConditionalNode15evaluateToInt32EPNS_9ExecStateE -__ZN3KJS9Arguments14deletePropertyEPNS_9ExecStateERKNS_10IdentifierE -__ZNK3KJS17DeleteBracketNode8streamToERNS_12SourceStreamE -__ZNK3KJS9BitOrNode10precedenceEv -__ZNK3KJS9BitOrNode8streamToERNS_12SourceStreamE -__ZNK3KJS7ModNode10precedenceEv -__ZNK3KJS7ModNode8streamToERNS_12SourceStreamE -__ZN3KJS31dateProtoFuncToLocaleTimeStringEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS16formatLocaleDateEPNS_9ExecStateEdbbRKNS_4ListE -__ZN3KJS31dateProtoFuncToLocaleDateStringEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS9BitOrNode17evaluateToBooleanEPNS_9ExecStateE -__ZN3KJS7DivNode15evaluateToInt32EPNS_9ExecStateE -__ZN3KJS14BitwiseNotNode16evaluateToUInt32EPNS_9ExecStateE -__ZN3KJS13ActivationImp14deletePropertyEPNS_9ExecStateERKNS_10IdentifierE -__ZN3KJS27objectProtoFuncDefineGetterEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS17PreDecBracketNode8evaluateEPNS_9ExecStateE -__ZNK3KJS16BooleanObjectImp19implementsConstructEv -__ZN3KJS27objectProtoFuncDefineSetterEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS8JSObject22fillGetterPropertySlotERNS_12PropertySlotEPPNS_7JSValueE -__ZN3KJS10StringNode17evaluateToBooleanEPNS_9ExecStateE -__ZN3KJS13UnaryPlusNode16evaluateToNumberEPNS_9ExecStateE -__ZN3KJS31dateProtoFuncGetUTCMillisecondsEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS17FunctionObjectImp14callAsFunctionEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS15DeleteValueNodeD1Ev -__ZN3KJS15RegExpObjectImp14callAsFunctionEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS22dateProtoFuncGetUTCDayEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS8MultNode15evaluateToInt32EPNS_9ExecStateE -__ZN3KJS4Node18setErrorCompletionEPNS_9ExecStateENS_9ErrorTypeEPKc -__ZN3KJS10StringNode16evaluateToNumberEPNS_9ExecStateE -__ZN3KJS27dateProtoFuncToLocaleStringEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS22UnsignedRightShiftNode16evaluateToNumberEPNS_9ExecStateE -__ZNK3KJS18PostIncResolveNode10precedenceEv -__ZNK3KJS21ReadModifyResolveNode10precedenceEv -__ZNK3KJS21FunctionCallValueNode10precedenceEv -__ZN3KJS4Node15handleExceptionEPNS_9ExecStateE -__ZNK3KJS13UnaryPlusNode10precedenceEv -__ZNK3KJS13UnaryPlusNode8streamToERNS_12SourceStreamE -__ZN3KJS4Node10throwErrorEPNS_9ExecStateENS_9ErrorTypeEPKcPNS_7JSValueERKNS_10IdentifierE -__ZNK3KJS15DotAccessorNode17isDotAccessorNodeEv -__ZNK3KJS14PostfixDotNode10precedenceEv -__ZN3KJS23regExpProtoFuncToStringEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZNK3KJS14PostDecDotNode8streamToERNS_12SourceStreamE -__ZNK3KJS9CommaNode10precedenceEv -__ZNK3KJS17ReadModifyDotNode10precedenceEv -__ZNK3KJS13DeleteDotNode8streamToERNS_12SourceStreamE -__ZNK3KJS19PlaceholderTrueNode8streamToERNS_12SourceStreamE -__ZNK3KJS17AssignBracketNode10precedenceEv -__ZNK3KJS8WithNode8streamToERNS_12SourceStreamE -__ZNK3KJS17DeleteBracketNode10precedenceEv -__ZN3KJS15ObjectObjectImp14callAsFunctionEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -_KJS_JSCreateNativeJSObject -__ZN3KJS8Bindings12JavaJSObject6invokeEPNS0_19JSObjectCallContextE -__ZN3KJS8Bindings12JavaJSObject12createNativeEx -__ZN3KJS8Bindings24findProtectingRootObjectEPNS_8JSObjectE -_KJS_JSObject_JSObjectEval -__ZN3KJS8Bindings12JavaJSObjectC1Ex -__ZNK3KJS8Bindings12JavaJSObject4evalEP8_jstring -__ZN3KJS8Bindings9getJNIEnvEv -__ZN3KJS8Bindings9getJavaVMEv -__ZN3KJS8Bindings30getUCharactersFromJStringInEnvEP7JNIEnv_P8_jstring -__ZN3KJS8Bindings33releaseUCharactersForJStringInEnvEP7JNIEnv_P8_jstringPKt -__ZNK3KJS8Bindings12JavaJSObject21convertValueToJObjectEPNS_7JSValueE -__ZN7JNIEnv_9NewObjectEP7_jclassP10_jmethodIDz -_KJS_JSObject_JSFinalize -__ZN3KJS19stringProtoFuncBoldEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZNK3KJS15RegExpObjectImp15getRightContextEv -__ZNK3KJS15RegExpObjectImp14getLeftContextEv -__ZN3KJS13LeftShiftNode16evaluateToUInt32EPNS_9ExecStateE -__ZN3KJS7ModNode15evaluateToInt32EPNS_9ExecStateE -__ZNK3KJS18PostDecResolveNode10precedenceEv -__ZN3KJS28dateProtoFuncSetMilliSecondsEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS32stringProtoFuncToLocaleLowerCaseEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__NPN_SetException -__ZN3KJS18mathProtoFuncATan2EPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS8Bindings12JavaInstanceC2EP8_jobjectN3WTF10PassRefPtrINS0_10RootObjectEEE -__ZN3KJS8Bindings12JavaInstance5beginEv -__ZNK3KJS8Bindings12JavaInstance8getClassEv -__ZN3KJS8Bindings9JavaClassC2EP8_jobject -__ZN3KJS8Bindings19callJNIObjectMethodEP8_jobjectPKcS4_z -__ZN3KJS8Bindings13callJNIMethodE7JNITypeP8_jobjectPKcS5_Pc -__ZN3KJS8Bindings24getCharactersFromJStringEP8_jstring -__ZN3KJS8Bindings27releaseCharactersForJStringEP8_jstringPKc -__ZN3KJS8Bindings9JavaFieldC2EP7JNIEnv_P8_jobject -__ZN3KJS7CStringaSERKS0_ -__ZN3KJS8Bindings20JNITypeFromClassNameEPKc -__ZN3KJS8Bindings14JObjectWrapperC1EP8_jobject -__ZNK3KJS8Bindings9JavaField4nameEv -__ZN3KJS8Bindings10JavaMethodC2EP7JNIEnv_P8_jobject -__ZN3KJS8Bindings16callJNIIntMethodEP8_jobjectPKcS4_z -__ZN3KJS8Bindings26callJNIStaticBooleanMethodEP7_jclassPKcS4_z -__ZN3KJS8Bindings19callJNIStaticMethodE7JNITypeP7_jclassPKcS5_Pc -__ZNK3KJS8Bindings10JavaMethod4nameEv -__ZN3KJS8Bindings13JavaParameterC2EP7JNIEnv_P8_jstring -__ZNK3KJS8Bindings9JavaClass10fieldNamedERKNS_10IdentifierEPNS0_8InstanceE -__ZNK3KJS8Bindings9JavaClass12methodsNamedERKNS_10IdentifierEPNS0_8InstanceE -__ZN3KJS8Bindings12JavaInstance3endEv -__ZN3KJS8Bindings12JavaInstanceD1Ev -__ZN3KJS8Bindings9JavaClassD1Ev -__ZN3WTF20deleteAllPairSecondsIPN3KJS8Bindings5FieldEKNS_7HashMapINS_6RefPtrINS1_7UString3RepEEES4_NS_7PtrHashIS9_EENS_10HashTraitsIS9_EENSC_IS4_EEEEEEvRT0_ -__ZN3KJS8Bindings14JObjectWrapperD1Ev -__ZN3KJS35objectProtoFuncPropertyIsEnumerableEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS31dateProtoFuncSetUTCMillisecondsEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZNK3KJS12FuncExprNode21needsParensIfLeftmostEv -__ZN3KJS13DateObjectImp14callAsFunctionEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS11NewExprNode17evaluateToBooleanEPNS_9ExecStateE -__ZN3KJS29numberProtoFuncToLocaleStringEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS25dateProtoFuncToDateStringEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS9BitOrNode16evaluateToNumberEPNS_9ExecStateE -__ZNK3KJS7JSValue8toUInt32EPNS_9ExecStateE -__ZNK3KJS8JSObject3getEPNS_9ExecStateEj -__ZNK3KJS7JSValue16toUInt32SlowCaseEPNS_9ExecStateERb -__ZN3KJS9Collector29markOtherThreadConservativelyEPNS0_6ThreadE -__ZN3WTF20TCMalloc_ThreadCache18DestroyThreadCacheEPv -__ZN3WTF20TCMalloc_ThreadCache11DeleteCacheEPS0_ -__ZN3KJS23destroyRegisteredThreadEPv -__ZN3KJS28numberProtoFuncToExponentialEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS26numberProtoFuncToPrecisionEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS15RegExpObjectImp16putValuePropertyEPNS_9ExecStateEiPNS_7JSValueEi -__ZNK3KJS15RegExpObjectImp12getLastParenEv -__ZN3KJS10throwErrorEPNS_9ExecStateENS_9ErrorTypeE -__ZN3KJS18arrayProtoFuncSomeEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS9LabelNode9pushLabelERKNS_10IdentifierE -__ZN3KJS9Collector32reportOutOfMemoryToAllExecStatesEv -__ZN3KJS5Error6createEPNS_9ExecStateENS_9ErrorTypeEPKc -__ZNK3KJS17PreDecResolveNode10precedenceEv -__ZN3KJS17mathProtoFuncACosEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS16mathProtoFuncTanEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZNK3KJS16PostfixErrorNode8streamToERNS_12SourceStreamE -__ZNK3KJS15PrefixErrorNode8streamToERNS_12SourceStreamE -__ZNK3KJS15AssignErrorNode8streamToERNS_12SourceStreamE -__ZN3KJS16PostfixErrorNode8evaluateEPNS_9ExecStateE -__ZN3KJS4Node10throwErrorEPNS_9ExecStateENS_9ErrorTypeEPKcS5_ -__ZN3KJS16PostfixErrorNodeD1Ev -__ZNK3KJS13LeftShiftNode8streamToERNS_12SourceStreamE -__ZNK3KJS13LeftShiftNode10precedenceEv -__ZNK3KJS14RightShiftNode8streamToERNS_12SourceStreamE -__ZNK3KJS14RightShiftNode10precedenceEv -__ZNK3KJS22UnsignedRightShiftNode8streamToERNS_12SourceStreamE -__ZNK3KJS22UnsignedRightShiftNode10precedenceEv -__ZNK3KJS10BitAndNode8streamToERNS_12SourceStreamE -__ZNK3KJS10BitAndNode10precedenceEv -__ZNK3KJS10BitXOrNode8streamToERNS_12SourceStreamE -__ZNK3KJS10BitXOrNode10precedenceEv -__ZN3KJS15AssignErrorNode8evaluateEPNS_9ExecStateE -__ZN3KJS4Node10throwErrorEPNS_9ExecStateENS_9ErrorTypeEPKc -__ZN3KJS13char_sequenceEci -__ZN3KJS15LessStringsNode8evaluateEPNS_9ExecStateE -__ZN3KJS15LessStringsNodeD1Ev -__ZN3KJS15DeleteValueNode8evaluateEPNS_9ExecStateE -__ZN3KJS22regExpProtoFuncCompileEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS15PrefixErrorNode8evaluateEPNS_9ExecStateE -__ZN3KJS28objectProtoFuncIsPrototypeOfEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS15PrefixErrorNodeD1Ev -__ZN3KJS19arrayProtoFuncEveryEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS29objectProtoFuncToLocaleStringEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS25arrayProtoFuncLastIndexOfEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3WTF6VectorItLm0EE6resizeEm -__ZN3WTF6VectorItLm0EE14expandCapacityEm -__ZN3WTF6VectorItLm0EE15reserveCapacityEm -__ZN3KJS28arrayProtoFuncToLocaleStringEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS18ConstStatementNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS13ConstDeclNode22optimizeVariableAccessERKN3WTF7HashMapINS1_6RefPtrINS_7UString3RepEEEmNS_17IdentifierRepHashENS_23IdentifierRepHashTraitsENS_26SymbolTableIndexHashTraitsEEERKNS1_6VectorINS_17LocalStorageEntryELm32EEERNSD_IPNS_4NodeELm16EEE -__ZN3KJS18ConstStatementNode7executeEPNS_9ExecStateE -__ZN3KJS13ConstDeclNode8evaluateEPNS_9ExecStateE -__ZN3KJS15AssignConstNode8evaluateEPNS_9ExecStateE -__ZN3KJS16PostIncConstNode8evaluateEPNS_9ExecStateE -__ZN3KJS16PostDecConstNode8evaluateEPNS_9ExecStateE -__ZN3KJS15PreIncConstNode8evaluateEPNS_9ExecStateE -__ZN3KJS15PreDecConstNode8evaluateEPNS_9ExecStateE -__ZN3KJS19ReadModifyConstNode8evaluateEPNS_9ExecStateE -__ZNK3KJS13ActivationImp9classInfoEv -__ZN3KJS16PostIncConstNodeD1Ev -__ZN3KJS15PreIncConstNodeD1Ev -__ZN3KJS15PreDecConstNodeD1Ev -__ZNK3KJS13DeleteDotNode10precedenceEv -__ZN3KJS28stringProtoFuncLocaleCompareEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZN3KJS10NumberNode16evaluateToUInt32EPNS_9ExecStateE -__ZN3KJS19FunctionCallDotNode16evaluateToUInt32EPNS_9ExecStateE -__ZNK3KJS21ReadModifyBracketNode8streamToERNS_12SourceStreamE -__ZN3KJS10BitXOrNode16evaluateToNumberEPNS_9ExecStateE -___tcf_1 -__ZNK3KJS7UString6is8BitEv -__ZN3KJS15DotAccessorNode16evaluateToUInt32EPNS_9ExecStateE -__ZN3KJS24stringProtoFuncFontcolorEPNS_9ExecStateEPNS_8JSObjectERKNS_4ListE -__ZNK3KJS14NativeErrorImp19implementsConstructEv -__ZN3KJS19PostDecLocalVarNode16evaluateToNumberEPNS_9ExecStateE -__ZN3KJS19PostDecLocalVarNode15evaluateToInt32EPNS_9ExecStateE -__ZN3KJS13UnaryPlusNode17evaluateToBooleanEPNS_9ExecStateE +__ZN3JSC7UString3Rep11computeHashEPKci +__ZN3JSC16JSCallbackObjectINS_8JSObjectEE14deletePropertyEPNS_9ExecStateERKNS_10IdentifierE +_JSGarbageCollect +__ZN3JSC4Heap6isBusyEv +__ZN3JSCL18styleFromArgStringERKNS_7UStringEl diff --git a/src/3rdparty/webkit/JavaScriptCore/JavaScriptCore.pri b/src/3rdparty/webkit/JavaScriptCore/JavaScriptCore.pri index dca9355..a7da71c 100644 --- a/src/3rdparty/webkit/JavaScriptCore/JavaScriptCore.pri +++ b/src/3rdparty/webkit/JavaScriptCore/JavaScriptCore.pri @@ -1,30 +1,68 @@ # JavaScriptCore - Qt4 build info VPATH += $$PWD -INCLUDEPATH += tmp -INCLUDEPATH += $$PWD $$PWD/parser $$PWD/bytecompiler $$PWD/debugger $$PWD/runtime $$PWD/wtf $$PWD/wtf/unicode $$PWD/interpreter $$PWD/jit $$PWD/profiler $$PWD/wrec $$PWD/API $$PWD/.. \ - $$PWD/ForwardingHeaders $$PWD/bytecode $$PWD/assembler -DEFINES += BUILDING_QT__ +CONFIG(debug, debug|release) { + isEmpty(GENERATED_SOURCES_DIR):GENERATED_SOURCES_DIR = generated$${QMAKE_DIR_SEP}debug + OBJECTS_DIR = obj/debug +} else { # Release + isEmpty(GENERATED_SOURCES_DIR):GENERATED_SOURCES_DIR = generated$${QMAKE_DIR_SEP}release + OBJECTS_DIR = obj/release +} + +INCLUDEPATH += $$GENERATED_SOURCES_DIR \ + $$PWD \ + $$PWD/parser \ + $$PWD/bytecompiler \ + $$PWD/debugger \ + $$PWD/runtime \ + $$PWD/wtf \ + $$PWD/wtf/unicode \ + $$PWD/interpreter \ + $$PWD/jit \ + $$PWD/profiler \ + $$PWD/wrec \ + $$PWD/yarr \ + $$PWD/API \ + $$PWD/.. \ + $$PWD/ForwardingHeaders \ + $$PWD/bytecode \ + $$PWD/assembler \ -isEmpty(GENERATED_SOURCES_DIR):GENERATED_SOURCES_DIR = tmp -GENERATED_SOURCES_DIR_SLASH = $$GENERATED_SOURCES_DIR/ +DEFINES += BUILDING_QT__ BUILDING_JavaScriptCore BUILDING_WTF + +GENERATED_SOURCES_DIR_SLASH = $${GENERATED_SOURCES_DIR}$${QMAKE_DIR_SEP} win32-* { - GENERATED_SOURCES_DIR_SLASH ~= s|/|\| LIBS += -lwinmm } -# Disable the JIT due to numerous observed miscompilations :( -CONFIG(release):isEqual(QT_ARCH,i386) { - JIT_DEFINES = ENABLE_JIT ENABLE_WREC ENABLE_JIT_OPTIMIZE_CALL ENABLE_JIT_OPTIMIZE_PROPERTY_ACCESS ENABLE_JIT_OPTIMIZE_ARITHMETIC - # Require gcc >= 4.1 - linux-g++*:greaterThan(QT_GCC_MAJOR_VERSION,3):greaterThan(QT_GCC_MINOR_VERSION,0) { - DEFINES += $$JIT_DEFINES WTF_USE_JIT_STUB_ARGUMENT_VA_LIST - QMAKE_CXXFLAGS += -fno-stack-protector - QMAKE_CFLAGS += -fno-stack-protector - } - win32-msvc* { - DEFINES += $$JIT_DEFINES WTF_USE_JIT_STUB_ARGUMENT_REGISTER - } +# Default rules to turn JIT on/off +!contains(DEFINES, ENABLE_JIT=.) { + isEqual(QT_ARCH,i386)|isEqual(QT_ARCH,windows) { + # Require gcc >= 4.1 + CONFIG(release):linux-g++*:greaterThan(QT_GCC_MAJOR_VERSION,3):greaterThan(QT_GCC_MINOR_VERSION,0) { + DEFINES += ENABLE_JIT=1 + } + win32-msvc* { + DEFINES += ENABLE_JIT=1 + } + } +} + +# Rules when JIT enabled +contains(DEFINES, ENABLE_JIT=1) { + !contains(DEFINES, ENABLE_YARR=.): DEFINES += ENABLE_YARR=1 + !contains(DEFINES, ENABLE_YARR_JIT=.): DEFINES += ENABLE_YARR_JIT=1 + !contains(DEFINES, ENABLE_JIT_OPTIMIZE_CALL=.): DEFINES += ENABLE_JIT_OPTIMIZE_CALL=1 + !contains(DEFINES, ENABLE_JIT_OPTIMIZE_PROPERTY_ACCESS=.): DEFINES += ENABLE_JIT_OPTIMIZE_PROPERTY_ACCESS=1 + !contains(DEFINES, ENABLE_JIT_OPTIMIZE_ARITHMETIC=.): DEFINES += ENABLE_JIT_OPTIMIZE_ARITHMETIC=1 + linux-g++* { + !contains(DEFINES, WTF_USE_JIT_STUB_ARGUMENT_VA_LIST=.): DEFINES += WTF_USE_JIT_STUB_ARGUMENT_VA_LIST=1 + QMAKE_CXXFLAGS += -fno-stack-protector + QMAKE_CFLAGS += -fno-stack-protector + } + win32-msvc* { + !contains(DEFINES, WTF_USE_JIT_STUB_ARGUMENT_REGISTER=.): DEFINES += WTF_USE_JIT_STUB_ARGUMENT_REGISTER=1 + } } win32-msvc*: INCLUDEPATH += $$PWD/os-win32 @@ -53,10 +91,12 @@ JSCBISON += \ SOURCES += \ wtf/Assertions.cpp \ + wtf/ByteArray.cpp \ wtf/HashTable.cpp \ wtf/MainThread.cpp \ wtf/RandomNumber.cpp \ wtf/RefCountedLeakCounter.cpp \ + wtf/TypeTraits.cpp \ wtf/unicode/CollatorDefault.cpp \ wtf/unicode/icu/CollatorICU.cpp \ wtf/unicode/UTF8.cpp \ @@ -77,26 +117,27 @@ SOURCES += \ runtime/JSVariableObject.cpp \ runtime/JSActivation.cpp \ runtime/JSNotAnObject.cpp \ + runtime/LiteralParser.cpp \ + runtime/TimeoutChecker.cpp \ bytecode/CodeBlock.cpp \ bytecode/StructureStubInfo.cpp \ bytecode/JumpTable.cpp \ jit/JIT.cpp \ jit/JITCall.cpp \ jit/JITArithmetic.cpp \ + jit/JITOpcodes.cpp \ jit/JITPropertyAccess.cpp \ jit/ExecutableAllocator.cpp \ + jit/JITStubs.cpp \ bytecompiler/BytecodeGenerator.cpp \ runtime/ExceptionHelpers.cpp \ runtime/JSPropertyNameIterator.cpp \ interpreter/Interpreter.cpp \ bytecode/Opcode.cpp \ bytecode/SamplingTool.cpp \ - wrec/CharacterClass.cpp \ - wrec/CharacterClassConstructor.cpp \ - wrec/WREC.cpp \ - wrec/WRECFunctors.cpp \ - wrec/WRECGenerator.cpp \ - wrec/WRECParser.cpp \ + yarr/RegexCompiler.cpp \ + yarr/RegexInterpreter.cpp \ + yarr/RegexJIT.cpp \ interpreter/RegisterFile.cpp win32-*: SOURCES += jit/ExecutableAllocatorWin.cpp @@ -112,17 +153,18 @@ SOURCES += \ runtime/BooleanConstructor.cpp \ runtime/BooleanObject.cpp \ runtime/BooleanPrototype.cpp \ - runtime/ByteArray.cpp \ runtime/CallData.cpp \ runtime/Collector.cpp \ runtime/CommonIdentifiers.cpp \ runtime/ConstructData.cpp \ + wtf/CurrentTime.cpp \ runtime/DateConstructor.cpp \ runtime/DateInstance.cpp \ runtime/DateMath.cpp \ runtime/DatePrototype.cpp \ debugger/Debugger.cpp \ debugger/DebuggerCallFrame.cpp \ + debugger/DebuggerActivation.cpp \ wtf/dtoa.cpp \ runtime/Error.cpp \ runtime/ErrorConstructor.cpp \ @@ -161,6 +203,7 @@ SOURCES += \ runtime/ObjectPrototype.cpp \ runtime/Operations.cpp \ parser/Parser.cpp \ + parser/ParserArena.cpp \ runtime/PropertyNameArray.cpp \ runtime/PropertySlot.cpp \ runtime/PrototypeFunction.cpp \ @@ -184,11 +227,17 @@ SOURCES += \ profiler/TreeProfile.cpp \ wtf/FastMalloc.cpp \ wtf/Threading.cpp \ - wtf/ThreadingQt.cpp \ wtf/qt/MainThreadQt.cpp +!contains(DEFINES, ENABLE_SINGLE_THREADED=1) { + SOURCES += wtf/qt/ThreadingQt.cpp +} else { + DEFINES += ENABLE_JSC_MULTIPLE_THREADS=0 + SOURCES += wtf/ThreadingNone.cpp +} + # GENERATOR 1-A: LUT creator -lut.output = $$GENERATED_SOURCES_DIR/${QMAKE_FILE_BASE}.lut.h +lut.output = $${GENERATED_SOURCES_DIR}$${QMAKE_DIR_SEP}${QMAKE_FILE_BASE}.lut.h lut.commands = perl $$PWD/create_hash_table ${QMAKE_FILE_NAME} -i > ${QMAKE_FILE_OUT} lut.depend = ${QMAKE_FILE_NAME} lut.input = LUT_FILES @@ -196,7 +245,7 @@ lut.CONFIG += no_link addExtraCompiler(lut) # GENERATOR 1-B: particular LUT creator (for 1 file only) -keywordlut.output = $$GENERATED_SOURCES_DIR/Lexer.lut.h +keywordlut.output = $${GENERATED_SOURCES_DIR}$${QMAKE_DIR_SEP}Lexer.lut.h keywordlut.commands = perl $$PWD/create_hash_table ${QMAKE_FILE_NAME} -i > ${QMAKE_FILE_OUT} keywordlut.depend = ${QMAKE_FILE_NAME} keywordlut.input = KEYWORDLUT_FILES @@ -204,8 +253,8 @@ keywordlut.CONFIG += no_link addExtraCompiler(keywordlut) # GENERATOR 2: bison grammar -jscbison.output = $$GENERATED_SOURCES_DIR/${QMAKE_FILE_BASE}.cpp -jscbison.commands = bison -d -p jscyy ${QMAKE_FILE_NAME} -o ${QMAKE_FILE_BASE}.tab.c && $(MOVE) ${QMAKE_FILE_BASE}.tab.c ${QMAKE_FILE_OUT} && $(MOVE) ${QMAKE_FILE_BASE}.tab.h $$GENERATED_SOURCES_DIR/${QMAKE_FILE_BASE}.h +jscbison.output = $${GENERATED_SOURCES_DIR}$${QMAKE_DIR_SEP}${QMAKE_FILE_BASE}.cpp +jscbison.commands = bison -d -p jscyy ${QMAKE_FILE_NAME} -o $${GENERATED_SOURCES_DIR}$${QMAKE_DIR_SEP}${QMAKE_FILE_BASE}.tab.c && $(MOVE) $${GENERATED_SOURCES_DIR}$${QMAKE_DIR_SEP}${QMAKE_FILE_BASE}.tab.c ${QMAKE_FILE_OUT} && $(MOVE) $${GENERATED_SOURCES_DIR}$${QMAKE_DIR_SEP}${QMAKE_FILE_BASE}.tab.h $${GENERATED_SOURCES_DIR}$${QMAKE_DIR_SEP}${QMAKE_FILE_BASE}.h jscbison.depend = ${QMAKE_FILE_NAME} jscbison.input = JSCBISON jscbison.variable_out = GENERATED_SOURCES diff --git a/src/3rdparty/webkit/JavaScriptCore/JavaScriptCore.pro b/src/3rdparty/webkit/JavaScriptCore/JavaScriptCore.pro index 56dae05..28f0e6b 100644 --- a/src/3rdparty/webkit/JavaScriptCore/JavaScriptCore.pro +++ b/src/3rdparty/webkit/JavaScriptCore/JavaScriptCore.pro @@ -21,13 +21,16 @@ CONFIG(QTDIR_build) { } isEmpty(GENERATED_SOURCES_DIR):GENERATED_SOURCES_DIR = tmp -GENERATED_SOURCES_DIR_SLASH = $$GENERATED_SOURCES_DIR/ -win32-*: GENERATED_SOURCES_DIR_SLASH ~= s|/|\| +GENERATED_SOURCES_DIR_SLASH = $${GENERATED_SOURCES_DIR}$${QMAKE_DIR_SEP} INCLUDEPATH += $$GENERATED_SOURCES_DIR !CONFIG(QTDIR_build) { - OBJECTS_DIR = tmp + CONFIG(debug, debug|release) { + OBJECTS_DIR = obj/debug + } else { # Release + OBJECTS_DIR = obj/release + } } include($$OUTPUT_DIR/config.pri) @@ -64,7 +67,7 @@ include(JavaScriptCore.pri) QMAKE_EXTRA_TARGETS += generated_files -qt-port: lessThan(QT_MINOR_VERSION, 4) { +lessThan(QT_MINOR_VERSION, 4) { DEFINES += QT_BEGIN_NAMESPACE="" QT_END_NAMESPACE="" } diff --git a/src/3rdparty/webkit/JavaScriptCore/JavaScriptCorePrefix.h b/src/3rdparty/webkit/JavaScriptCore/JavaScriptCorePrefix.h index e71c8a8..13b21bb 100644 --- a/src/3rdparty/webkit/JavaScriptCore/JavaScriptCorePrefix.h +++ b/src/3rdparty/webkit/JavaScriptCore/JavaScriptCorePrefix.h @@ -25,15 +25,6 @@ #endif -#if defined(__APPLE__) -#import -#if MAC_OS_X_VERSION_MAX_ALLOWED <= MAC_OS_X_VERSION_10_4 -#define BUILDING_ON_TIGER 1 -#elif MAC_OS_X_VERSION_MAX_ALLOWED <= MAC_OS_X_VERSION_10_5 -#define BUILDING_ON_LEOPARD 1 -#endif -#endif - #ifdef __cplusplus #define new ("if you use new/delete make sure to include config.h at the top of the file"()) #define delete ("if you use new/delete make sure to include config.h at the top of the file"()) diff --git a/src/3rdparty/webkit/JavaScriptCore/assembler/AbstractMacroAssembler.h b/src/3rdparty/webkit/JavaScriptCore/assembler/AbstractMacroAssembler.h new file mode 100644 index 0000000..5def60f --- /dev/null +++ b/src/3rdparty/webkit/JavaScriptCore/assembler/AbstractMacroAssembler.h @@ -0,0 +1,999 @@ +/* + * Copyright (C) 2008 Apple Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef AbstractMacroAssembler_h +#define AbstractMacroAssembler_h + +#include + +#include +#include +#include + +#if ENABLE(ASSEMBLER) + +// FIXME: keep transitioning this out into MacroAssemblerX86_64. +#if PLATFORM(X86_64) +#define REPTACH_OFFSET_CALL_R11 3 +#endif + +namespace JSC { + +template +class AbstractMacroAssembler { +public: + typedef MacroAssemblerCodePtr CodePtr; + typedef MacroAssemblerCodeRef CodeRef; + + class Jump; + class PatchBuffer; + class CodeLocationInstruction; + class CodeLocationLabel; + class CodeLocationJump; + class CodeLocationCall; + class CodeLocationNearCall; + class CodeLocationDataLabel32; + class CodeLocationDataLabelPtr; + class ProcessorReturnAddress; + + typedef typename AssemblerType::RegisterID RegisterID; + typedef typename AssemblerType::FPRegisterID FPRegisterID; + typedef typename AssemblerType::JmpSrc JmpSrc; + typedef typename AssemblerType::JmpDst JmpDst; + + + // Section 1: MacroAssembler operand types + // + // The following types are used as operands to MacroAssembler operations, + // describing immediate and memory operands to the instructions to be planted. + + + enum Scale { + TimesOne, + TimesTwo, + TimesFour, + TimesEight, + }; + + // Address: + // + // Describes a simple base-offset address. + struct Address { + explicit Address(RegisterID base, int32_t offset = 0) + : base(base) + , offset(offset) + { + } + + RegisterID base; + int32_t offset; + }; + + // ImplicitAddress: + // + // This class is used for explicit 'load' and 'store' operations + // (as opposed to situations in which a memory operand is provided + // to a generic operation, such as an integer arithmetic instruction). + // + // In the case of a load (or store) operation we want to permit + // addresses to be implicitly constructed, e.g. the two calls: + // + // load32(Address(addrReg), destReg); + // load32(addrReg, destReg); + // + // Are equivalent, and the explicit wrapping of the Address in the former + // is unnecessary. + struct ImplicitAddress { + ImplicitAddress(RegisterID base) + : base(base) + , offset(0) + { + } + + ImplicitAddress(Address address) + : base(address.base) + , offset(address.offset) + { + } + + RegisterID base; + int32_t offset; + }; + + // BaseIndex: + // + // Describes a complex addressing mode. + struct BaseIndex { + BaseIndex(RegisterID base, RegisterID index, Scale scale, int32_t offset = 0) + : base(base) + , index(index) + , scale(scale) + , offset(offset) + { + } + + RegisterID base; + RegisterID index; + Scale scale; + int32_t offset; + }; + + // AbsoluteAddress: + // + // Describes an memory operand given by a pointer. For regular load & store + // operations an unwrapped void* will be used, rather than using this. + struct AbsoluteAddress { + explicit AbsoluteAddress(void* ptr) + : m_ptr(ptr) + { + } + + void* m_ptr; + }; + + // ImmPtr: + // + // A pointer sized immediate operand to an instruction - this is wrapped + // in a class requiring explicit construction in order to differentiate + // from pointers used as absolute addresses to memory operations + struct ImmPtr { + explicit ImmPtr(void* value) + : m_value(value) + { + } + + intptr_t asIntptr() + { + return reinterpret_cast(m_value); + } + + void* m_value; + }; + + // Imm32: + // + // A 32bit immediate operand to an instruction - this is wrapped in a + // class requiring explicit construction in order to prevent RegisterIDs + // (which are implemented as an enum) from accidentally being passed as + // immediate values. + struct Imm32 { + explicit Imm32(int32_t value) + : m_value(value) + { + } + +#if !PLATFORM(X86_64) + explicit Imm32(ImmPtr ptr) + : m_value(ptr.asIntptr()) + { + } +#endif + + int32_t m_value; + }; + + + // Section 2: MacroAssembler code buffer handles + // + // The following types are used to reference items in the code buffer + // during JIT code generation. For example, the type Jump is used to + // track the location of a jump instruction so that it may later be + // linked to a label marking its destination. + + + // Label: + // + // A Label records a point in the generated instruction stream, typically such that + // it may be used as a destination for a jump. + class Label { + template + friend class AbstractMacroAssembler; + friend class Jump; + friend class MacroAssemblerCodeRef; + friend class PatchBuffer; + + public: + Label() + { + } + + Label(AbstractMacroAssembler* masm) + : m_label(masm->m_assembler.label()) + { + } + + bool isUsed() const { return m_label.isUsed(); } + void used() { m_label.used(); } + private: + JmpDst m_label; + }; + + // DataLabelPtr: + // + // A DataLabelPtr is used to refer to a location in the code containing a pointer to be + // patched after the code has been generated. + class DataLabelPtr { + template + friend class AbstractMacroAssembler; + friend class PatchBuffer; + public: + DataLabelPtr() + { + } + + DataLabelPtr(AbstractMacroAssembler* masm) + : m_label(masm->m_assembler.label()) + { + } + + private: + JmpDst m_label; + }; + + // DataLabel32: + // + // A DataLabelPtr is used to refer to a location in the code containing a pointer to be + // patched after the code has been generated. + class DataLabel32 { + template + friend class AbstractMacroAssembler; + friend class PatchBuffer; + public: + DataLabel32() + { + } + + DataLabel32(AbstractMacroAssembler* masm) + : m_label(masm->m_assembler.label()) + { + } + + private: + JmpDst m_label; + }; + + // Call: + // + // A Call object is a reference to a call instruction that has been planted + // into the code buffer - it is typically used to link the call, setting the + // relative offset such that when executed it will call to the desired + // destination. + class Call { + template + friend class AbstractMacroAssembler; + friend class PatchBuffer; + public: + enum Flags { + None = 0x0, + Linkable = 0x1, + Near = 0x2, + LinkableNear = 0x3, + }; + + Call() + : m_flags(None) + { + } + + Call(JmpSrc jmp, Flags flags) + : m_jmp(jmp) + , m_flags(flags) + { + } + + bool isFlagSet(Flags flag) + { + return m_flags & flag; + } + + static Call fromTailJump(Jump jump) + { + return Call(jump.m_jmp, Linkable); + } + + private: + JmpSrc m_jmp; + Flags m_flags; + }; + + // Jump: + // + // A jump object is a reference to a jump instruction that has been planted + // into the code buffer - it is typically used to link the jump, setting the + // relative offset such that when executed it will jump to the desired + // destination. + class Jump { + template + friend class AbstractMacroAssembler; + friend class Call; + friend class PatchBuffer; + public: + Jump() + { + } + + Jump(JmpSrc jmp) + : m_jmp(jmp) + { + } + + void link(AbstractMacroAssembler* masm) + { + masm->m_assembler.linkJump(m_jmp, masm->m_assembler.label()); + } + + void linkTo(Label label, AbstractMacroAssembler* masm) + { + masm->m_assembler.linkJump(m_jmp, label.m_label); + } + + private: + JmpSrc m_jmp; + }; + + // JumpList: + // + // A JumpList is a set of Jump objects. + // All jumps in the set will be linked to the same destination. + class JumpList { + friend class PatchBuffer; + + public: + void link(AbstractMacroAssembler* masm) + { + size_t size = m_jumps.size(); + for (size_t i = 0; i < size; ++i) + m_jumps[i].link(masm); + m_jumps.clear(); + } + + void linkTo(Label label, AbstractMacroAssembler* masm) + { + size_t size = m_jumps.size(); + for (size_t i = 0; i < size; ++i) + m_jumps[i].linkTo(label, masm); + m_jumps.clear(); + } + + void append(Jump jump) + { + m_jumps.append(jump); + } + + void append(JumpList& other) + { + m_jumps.append(other.m_jumps.begin(), other.m_jumps.size()); + } + + bool empty() + { + return !m_jumps.size(); + } + + private: + Vector m_jumps; + }; + + + // Section 3: MacroAssembler JIT instruction stream handles. + // + // The MacroAssembler supported facilities to modify a JIT generated + // instruction stream after it has been generated (relinking calls and + // jumps, and repatching data values). The following types are used + // to store handles into the underlying instruction stream, the type + // providing semantic information as to what it is that is in the + // instruction stream at this point, and thus what operations may be + // performed on it. + + + // CodeLocationCommon: + // + // Base type for other CodeLocation* types. A postion in the JIT genertaed + // instruction stream, without any semantic information. + class CodeLocationCommon { + public: + CodeLocationCommon() + { + } + + // In order to avoid the need to store multiple handles into the + // instructions stream, where the code generation is deterministic + // and the labels will always be a fixed distance apart, these + // methods may be used to recover a handle that has nopw been + // retained, based on a known fixed relative offset from one that has. + CodeLocationInstruction instructionAtOffset(int offset); + CodeLocationLabel labelAtOffset(int offset); + CodeLocationJump jumpAtOffset(int offset); + CodeLocationCall callAtOffset(int offset); + CodeLocationNearCall nearCallAtOffset(int offset); + CodeLocationDataLabelPtr dataLabelPtrAtOffset(int offset); + CodeLocationDataLabel32 dataLabel32AtOffset(int offset); + + protected: + explicit CodeLocationCommon(CodePtr location) + : m_location(location) + { + } + + void* dataLocation() { return m_location.dataLocation(); } + void* executableAddress() { return m_location.executableAddress(); } + + void reset() + { + m_location = CodePtr(); + } + + private: + CodePtr m_location; + }; + + // CodeLocationInstruction: + // + // An arbitrary instruction in the JIT code. + class CodeLocationInstruction : public CodeLocationCommon { + friend class CodeLocationCommon; + public: + CodeLocationInstruction() + { + } + + void repatchLoadPtrToLEA() + { + AssemblerType::repatchLoadPtrToLEA(this->dataLocation()); + } + + private: + explicit CodeLocationInstruction(void* location) + : CodeLocationCommon(CodePtr(location)) + { + } + }; + + // CodeLocationLabel: + // + // A point in the JIT code maked with a label. + class CodeLocationLabel : public CodeLocationCommon { + friend class CodeLocationCommon; + friend class CodeLocationJump; + friend class CodeLocationCall; + friend class CodeLocationNearCall; + friend class PatchBuffer; + friend class ProcessorReturnAddress; + + public: + CodeLocationLabel() + { + } + + void* addressForSwitch() { return this->executableAddress(); } + void* addressForExceptionHandler() { return this->executableAddress(); } + void* addressForJSR() { return this->executableAddress(); } + + bool operator!() + { + return !this->executableAddress(); + } + + void reset() + { + CodeLocationCommon::reset(); + } + + private: + explicit CodeLocationLabel(CodePtr location) + : CodeLocationCommon(location) + { + } + + explicit CodeLocationLabel(void* location) + : CodeLocationCommon(CodePtr(location)) + { + } + + void* getJumpDestination() { return this->executableAddress(); } + }; + + // CodeLocationJump: + // + // A point in the JIT code at which there is a jump instruction. + class CodeLocationJump : public CodeLocationCommon { + friend class CodeLocationCommon; + friend class PatchBuffer; + public: + CodeLocationJump() + { + } + + void relink(CodeLocationLabel destination) + { + AssemblerType::relinkJump(this->dataLocation(), destination.executableAddress()); + } + + private: + explicit CodeLocationJump(void* location) + : CodeLocationCommon(CodePtr(location)) + { + } + }; + + // CodeLocationCall: + // + // A point in the JIT code at which there is a call instruction. + class CodeLocationCall : public CodeLocationCommon { + friend class CodeLocationCommon; + friend class PatchBuffer; + friend class ProcessorReturnAddress; + public: + CodeLocationCall() + { + } + + void relink(CodeLocationLabel destination) + { +#if PLATFORM(X86_64) + CodeLocationCommon::dataLabelPtrAtOffset(-REPTACH_OFFSET_CALL_R11).repatch(destination.executableAddress()); +#else + AssemblerType::relinkCall(this->dataLocation(), destination.executableAddress()); +#endif + } + + void relink(FunctionPtr destination) + { +#if PLATFORM(X86_64) + CodeLocationCommon::dataLabelPtrAtOffset(-REPTACH_OFFSET_CALL_R11).repatch(destination.executableAddress()); +#else + AssemblerType::relinkCall(this->dataLocation(), destination.executableAddress()); +#endif + } + + // This methods returns the value that will be set as the return address + // within a function that has been called from this call instruction. + void* calleeReturnAddressValue() + { + return this->executableAddress(); + } + + private: + explicit CodeLocationCall(CodePtr location) + : CodeLocationCommon(location) + { + } + + explicit CodeLocationCall(void* location) + : CodeLocationCommon(CodePtr(location)) + { + } + }; + + // CodeLocationNearCall: + // + // A point in the JIT code at which there is a call instruction with near linkage. + class CodeLocationNearCall : public CodeLocationCommon { + friend class CodeLocationCommon; + friend class PatchBuffer; + friend class ProcessorReturnAddress; + public: + CodeLocationNearCall() + { + } + + void relink(CodePtr destination) + { + AssemblerType::relinkCall(this->dataLocation(), destination.executableAddress()); + } + + void relink(CodeLocationLabel destination) + { + AssemblerType::relinkCall(this->dataLocation(), destination.executableAddress()); + } + + void relink(FunctionPtr destination) + { + AssemblerType::relinkCall(this->dataLocation(), destination.executableAddress()); + } + + // This methods returns the value that will be set as the return address + // within a function that has been called from this call instruction. + void* calleeReturnAddressValue() + { + return this->executableAddress(); + } + + private: + explicit CodeLocationNearCall(CodePtr location) + : CodeLocationCommon(location) + { + } + + explicit CodeLocationNearCall(void* location) + : CodeLocationCommon(CodePtr(location)) + { + } + }; + + // CodeLocationDataLabel32: + // + // A point in the JIT code at which there is an int32_t immediate that may be repatched. + class CodeLocationDataLabel32 : public CodeLocationCommon { + friend class CodeLocationCommon; + friend class PatchBuffer; + public: + CodeLocationDataLabel32() + { + } + + void repatch(int32_t value) + { + AssemblerType::repatchInt32(this->dataLocation(), value); + } + + private: + explicit CodeLocationDataLabel32(void* location) + : CodeLocationCommon(CodePtr(location)) + { + } + }; + + // CodeLocationDataLabelPtr: + // + // A point in the JIT code at which there is a void* immediate that may be repatched. + class CodeLocationDataLabelPtr : public CodeLocationCommon { + friend class CodeLocationCommon; + friend class PatchBuffer; + public: + CodeLocationDataLabelPtr() + { + } + + void repatch(void* value) + { + AssemblerType::repatchPointer(this->dataLocation(), value); + } + + private: + explicit CodeLocationDataLabelPtr(void* location) + : CodeLocationCommon(CodePtr(location)) + { + } + }; + + // ProcessorReturnAddress: + // + // This class can be used to relink a call identified by its return address. + class ProcessorReturnAddress { + friend class CodeLocationCall; + friend class CodeLocationNearCall; + public: + ProcessorReturnAddress(void* location) + : m_location(location) + { + } + + void relinkCallerToTrampoline(CodeLocationLabel label) + { + CodeLocationCall(CodePtr(m_location)).relink(label); + } + + void relinkCallerToTrampoline(CodePtr newCalleeFunction) + { + relinkCallerToTrampoline(CodeLocationLabel(newCalleeFunction)); + } + + void relinkCallerToFunction(FunctionPtr function) + { + CodeLocationCall(CodePtr(m_location)).relink(function); + } + + void relinkNearCallerToTrampoline(CodeLocationLabel label) + { + CodeLocationNearCall(CodePtr(m_location)).relink(label); + } + + void relinkNearCallerToTrampoline(CodePtr newCalleeFunction) + { + relinkNearCallerToTrampoline(CodeLocationLabel(newCalleeFunction)); + } + + void* addressForLookup() + { + return m_location.value(); + } + + private: + ReturnAddressPtr m_location; + }; + + + // Section 4: PatchBuffer - utility to finalize code generation. + + static CodePtr trampolineAt(CodeRef ref, Label label) + { + return CodePtr(AssemblerType::getRelocatedAddress(ref.m_code.dataLocation(), label.m_label)); + } + + // PatchBuffer: + // + // This class assists in linking code generated by the macro assembler, once code generation + // has been completed, and the code has been copied to is final location in memory. At this + // time pointers to labels within the code may be resolved, and relative offsets to external + // addresses may be fixed. + // + // Specifically: + // * Jump objects may be linked to external targets, + // * The address of Jump objects may taken, such that it can later be relinked. + // * The return address of a Jump object representing a call may be acquired. + // * The address of a Label pointing into the code may be resolved. + // * The value referenced by a DataLabel may be fixed. + // + // FIXME: distinguish between Calls & Jumps (make a specific call to obtain the return + // address of calls, as opposed to a point that can be used to later relink a Jump - + // possibly wrap the later up in an object that can do just that). + class PatchBuffer : public Noncopyable { + public: + // Note: Initialization sequence is significant, since executablePool is a PassRefPtr. + // First, executablePool is copied into m_executablePool, then the initialization of + // m_code uses m_executablePool, *not* executablePool, since this is no longer valid. + PatchBuffer(AbstractMacroAssembler* masm, PassRefPtr executablePool) + : m_executablePool(executablePool) + , m_code(masm->m_assembler.executableCopy(m_executablePool.get())) + , m_size(masm->m_assembler.size()) +#ifndef NDEBUG + , m_completed(false) +#endif + { + } + + ~PatchBuffer() + { + ASSERT(m_completed); + } + + // These methods are used to link or set values at code generation time. + + void link(Call call, FunctionPtr function) + { + ASSERT(call.isFlagSet(Call::Linkable)); +#if PLATFORM(X86_64) + if (!call.isFlagSet(Call::Near)) { + char* callLocation = reinterpret_cast(AssemblerType::getRelocatedAddress(code(), call.m_jmp)) - REPTACH_OFFSET_CALL_R11; + AssemblerType::patchPointerForCall(callLocation, function.value()); + } else +#endif + AssemblerType::linkCall(code(), call.m_jmp, function.value()); + } + + void link(Jump jump, CodeLocationLabel label) + { + AssemblerType::linkJump(code(), jump.m_jmp, label.executableAddress()); + } + + void link(JumpList list, CodeLocationLabel label) + { + for (unsigned i = 0; i < list.m_jumps.size(); ++i) + AssemblerType::linkJump(code(), list.m_jumps[i].m_jmp, label.executableAddress()); + } + + void patch(DataLabelPtr label, void* value) + { + AssemblerType::patchPointer(code(), label.m_label, value); + } + + void patch(DataLabelPtr label, CodeLocationLabel value) + { + AssemblerType::patchPointer(code(), label.m_label, value.getJumpDestination()); + } + + // These methods are used to obtain handles to allow the code to be relinked / repatched later. + + CodeLocationCall locationOf(Call call) + { + ASSERT(call.isFlagSet(Call::Linkable)); + ASSERT(!call.isFlagSet(Call::Near)); + return CodeLocationCall(AssemblerType::getRelocatedAddress(code(), call.m_jmp)); + } + + CodeLocationNearCall locationOfNearCall(Call call) + { + ASSERT(call.isFlagSet(Call::Linkable)); + ASSERT(call.isFlagSet(Call::Near)); + return CodeLocationNearCall(AssemblerType::getRelocatedAddress(code(), call.m_jmp)); + } + + CodeLocationLabel locationOf(Label label) + { + return CodeLocationLabel(AssemblerType::getRelocatedAddress(code(), label.m_label)); + } + + CodeLocationDataLabelPtr locationOf(DataLabelPtr label) + { + return CodeLocationDataLabelPtr(AssemblerType::getRelocatedAddress(code(), label.m_label)); + } + + CodeLocationDataLabel32 locationOf(DataLabel32 label) + { + return CodeLocationDataLabel32(AssemblerType::getRelocatedAddress(code(), label.m_label)); + } + + // This method obtains the return address of the call, given as an offset from + // the start of the code. + unsigned returnAddressOffset(Call call) + { + return AssemblerType::getCallReturnOffset(call.m_jmp); + } + + // Upon completion of all patching either 'finalizeCode()' or 'finalizeCodeAddendum()' should be called + // once to complete generation of the code. 'finalizeCode()' is suited to situations + // where the executable pool must also be retained, the lighter-weight 'finalizeCodeAddendum()' is + // suited to adding to an existing allocation. + CodeRef finalizeCode() + { + performFinalization(); + + return CodeRef(m_code, m_executablePool, m_size); + } + CodeLocationLabel finalizeCodeAddendum() + { + performFinalization(); + + return CodeLocationLabel(code()); + } + + private: + // Keep this private! - the underlying code should only be obtained externally via + // finalizeCode() or finalizeCodeAddendum(). + void* code() + { + return m_code; + } + + void performFinalization() + { +#ifndef NDEBUG + ASSERT(!m_completed); + m_completed = true; +#endif + + ExecutableAllocator::makeExecutable(code(), m_size); + } + + RefPtr m_executablePool; + void* m_code; + size_t m_size; +#ifndef NDEBUG + bool m_completed; +#endif + }; + + + // Section 5: Misc admin methods + + size_t size() + { + return m_assembler.size(); + } + + Label label() + { + return Label(this); + } + + Label align() + { + m_assembler.align(16); + return Label(this); + } + + ptrdiff_t differenceBetween(Label from, Jump to) + { + return AssemblerType::getDifferenceBetweenLabels(from.m_label, to.m_jmp); + } + + ptrdiff_t differenceBetween(Label from, Call to) + { + return AssemblerType::getDifferenceBetweenLabels(from.m_label, to.m_jmp); + } + + ptrdiff_t differenceBetween(Label from, Label to) + { + return AssemblerType::getDifferenceBetweenLabels(from.m_label, to.m_label); + } + + ptrdiff_t differenceBetween(Label from, DataLabelPtr to) + { + return AssemblerType::getDifferenceBetweenLabels(from.m_label, to.m_label); + } + + ptrdiff_t differenceBetween(Label from, DataLabel32 to) + { + return AssemblerType::getDifferenceBetweenLabels(from.m_label, to.m_label); + } + + ptrdiff_t differenceBetween(DataLabelPtr from, Jump to) + { + return AssemblerType::getDifferenceBetweenLabels(from.m_label, to.m_jmp); + } + + ptrdiff_t differenceBetween(DataLabelPtr from, DataLabelPtr to) + { + return AssemblerType::getDifferenceBetweenLabels(from.m_label, to.m_label); + } + + ptrdiff_t differenceBetween(DataLabelPtr from, Call to) + { + return AssemblerType::getDifferenceBetweenLabels(from.m_label, to.m_jmp); + } + +protected: + AssemblerType m_assembler; +}; + + +template +typename AbstractMacroAssembler::CodeLocationInstruction AbstractMacroAssembler::CodeLocationCommon::instructionAtOffset(int offset) +{ + return typename AbstractMacroAssembler::CodeLocationInstruction(reinterpret_cast(dataLocation()) + offset); +} + +template +typename AbstractMacroAssembler::CodeLocationLabel AbstractMacroAssembler::CodeLocationCommon::labelAtOffset(int offset) +{ + return typename AbstractMacroAssembler::CodeLocationLabel(reinterpret_cast(dataLocation()) + offset); +} + +template +typename AbstractMacroAssembler::CodeLocationJump AbstractMacroAssembler::CodeLocationCommon::jumpAtOffset(int offset) +{ + return typename AbstractMacroAssembler::CodeLocationJump(reinterpret_cast(dataLocation()) + offset); +} + +template +typename AbstractMacroAssembler::CodeLocationCall AbstractMacroAssembler::CodeLocationCommon::callAtOffset(int offset) +{ + return typename AbstractMacroAssembler::CodeLocationCall(reinterpret_cast(dataLocation()) + offset); +} + +template +typename AbstractMacroAssembler::CodeLocationNearCall AbstractMacroAssembler::CodeLocationCommon::nearCallAtOffset(int offset) +{ + return typename AbstractMacroAssembler::CodeLocationNearCall(reinterpret_cast(dataLocation()) + offset); +} + +template +typename AbstractMacroAssembler::CodeLocationDataLabelPtr AbstractMacroAssembler::CodeLocationCommon::dataLabelPtrAtOffset(int offset) +{ + return typename AbstractMacroAssembler::CodeLocationDataLabelPtr(reinterpret_cast(dataLocation()) + offset); +} + +template +typename AbstractMacroAssembler::CodeLocationDataLabel32 AbstractMacroAssembler::CodeLocationCommon::dataLabel32AtOffset(int offset) +{ + return typename AbstractMacroAssembler::CodeLocationDataLabel32(reinterpret_cast(dataLocation()) + offset); +} + +} // namespace JSC + +#endif // ENABLE(ASSEMBLER) + +#endif // AbstractMacroAssembler_h diff --git a/src/3rdparty/webkit/JavaScriptCore/assembler/AssemblerBuffer.h b/src/3rdparty/webkit/JavaScriptCore/assembler/AssemblerBuffer.h index e1f53d8..7a5a8d3 100644 --- a/src/3rdparty/webkit/JavaScriptCore/assembler/AssemblerBuffer.h +++ b/src/3rdparty/webkit/JavaScriptCore/assembler/AssemblerBuffer.h @@ -132,6 +132,8 @@ namespace JSC { if (!result) return 0; + ExecutableAllocator::makeWritable(result, m_size); + return memcpy(result, m_buffer, m_size); } diff --git a/src/3rdparty/webkit/JavaScriptCore/assembler/MacroAssembler.h b/src/3rdparty/webkit/JavaScriptCore/assembler/MacroAssembler.h index 9f8d474..f341267 100644 --- a/src/3rdparty/webkit/JavaScriptCore/assembler/MacroAssembler.h +++ b/src/3rdparty/webkit/JavaScriptCore/assembler/MacroAssembler.h @@ -30,1896 +30,306 @@ #if ENABLE(ASSEMBLER) -#include "X86Assembler.h" - -namespace JSC { +#if PLATFORM(X86) +#include "MacroAssemblerX86.h" +namespace JSC { typedef MacroAssemblerX86 MacroAssemblerBase; }; -class MacroAssembler { -protected: - X86Assembler m_assembler; +#elif PLATFORM(X86_64) +#include "MacroAssemblerX86_64.h" +namespace JSC { typedef MacroAssemblerX86_64 MacroAssemblerBase; }; -#if PLATFORM(X86_64) - static const X86::RegisterID scratchRegister = X86::r11; +#else +#error "The MacroAssembler is not supported on this platform." #endif + +namespace JSC { + +class MacroAssembler : public MacroAssemblerBase { public: - typedef X86::RegisterID RegisterID; - - // Note: do not rely on values in this enum, these will change (to 0..3). - enum Scale { - TimesOne = 1, - TimesTwo = 2, - TimesFour = 4, - TimesEight = 8, -#if PLATFORM(X86) - ScalePtr = TimesFour -#endif + + using MacroAssemblerBase::pop; + using MacroAssemblerBase::jump; + using MacroAssemblerBase::branch32; + using MacroAssemblerBase::branch16; #if PLATFORM(X86_64) - ScalePtr = TimesEight + using MacroAssemblerBase::branchPtr; + using MacroAssemblerBase::branchTestPtr; #endif - }; - MacroAssembler() + + // Platform agnostic onvenience functions, + // described in terms of other macro assembly methods. + void pop() { + addPtr(Imm32(sizeof(void*)), stackPointerRegister); } - size_t size() { return m_assembler.size(); } - void* copyCode(ExecutablePool* allocator) + void peek(RegisterID dest, int index = 0) { - return m_assembler.executableCopy(allocator); + loadPtr(Address(stackPointerRegister, (index * sizeof(void*))), dest); } - - // Address: - // - // Describes a simple base-offset address. - struct Address { - explicit Address(RegisterID base, int32_t offset = 0) - : base(base) - , offset(offset) - { - } - - RegisterID base; - int32_t offset; - }; - - // ImplicitAddress: - // - // This class is used for explicit 'load' and 'store' operations - // (as opposed to situations in which a memory operand is provided - // to a generic operation, such as an integer arithmetic instruction). - // - // In the case of a load (or store) operation we want to permit - // addresses to be implicitly constructed, e.g. the two calls: - // - // load32(Address(addrReg), destReg); - // load32(addrReg, destReg); - // - // Are equivalent, and the explicit wrapping of the Address in the former - // is unnecessary. - struct ImplicitAddress { - ImplicitAddress(RegisterID base) - : base(base) - , offset(0) - { - } - - ImplicitAddress(Address address) - : base(address.base) - , offset(address.offset) - { - } - - RegisterID base; - int32_t offset; - }; - - // BaseIndex: - // - // Describes a complex addressing mode. - struct BaseIndex { - BaseIndex(RegisterID base, RegisterID index, Scale scale, int32_t offset = 0) - : base(base) - , index(index) - , scale(scale) - , offset(offset) - { - } - - RegisterID base; - RegisterID index; - Scale scale; - int32_t offset; - }; - - // AbsoluteAddress: - // - // Describes an memory operand given by a pointer. For regular load & store - // operations an unwrapped void* will be used, rather than using this. - struct AbsoluteAddress { - explicit AbsoluteAddress(void* ptr) - : m_ptr(ptr) - { - } - - void* m_ptr; - }; - - - class Jump; - class PatchBuffer; - - // DataLabelPtr: - // - // A DataLabelPtr is used to refer to a location in the code containing a pointer to be - // patched after the code has been generated. - class DataLabelPtr { - friend class MacroAssembler; - friend class PatchBuffer; - - public: - DataLabelPtr() - { - } - - DataLabelPtr(MacroAssembler* masm) - : m_label(masm->m_assembler.label()) - { - } - - static void patch(void* address, void* value) - { - X86Assembler::patchPointer(reinterpret_cast(address), reinterpret_cast(value)); - } - - private: - X86Assembler::JmpDst m_label; - }; - - // DataLabel32: - // - // A DataLabelPtr is used to refer to a location in the code containing a pointer to be - // patched after the code has been generated. - class DataLabel32 { - friend class MacroAssembler; - friend class PatchBuffer; - - public: - DataLabel32() - { - } - - DataLabel32(MacroAssembler* masm) - : m_label(masm->m_assembler.label()) - { - } - - static void patch(void* address, int32_t value) - { - X86Assembler::patchImmediate(reinterpret_cast(address), value); - } - - private: - X86Assembler::JmpDst m_label; - }; - - // Label: - // - // A Label records a point in the generated instruction stream, typically such that - // it may be used as a destination for a jump. - class Label { - friend class Jump; - friend class MacroAssembler; - friend class PatchBuffer; - - public: - Label() - { - } - - Label(MacroAssembler* masm) - : m_label(masm->m_assembler.label()) - { - } - - // FIXME: transitionary method, while we replace JmpSrces with Jumps. - operator X86Assembler::JmpDst() - { - return m_label; - } - - private: - X86Assembler::JmpDst m_label; - }; - - - // Jump: - // - // A jump object is a reference to a jump instruction that has been planted - // into the code buffer - it is typically used to link the jump, setting the - // relative offset such that when executed it will jump to the desired - // destination. - // - // Jump objects retain a pointer to the assembler for syntactic purposes - - // to allow the jump object to be able to link itself, e.g.: - // - // Jump forwardsBranch = jne32(Imm32(0), reg1); - // // ... - // forwardsBranch.link(); - // - // Jumps may also be linked to a Label. - class Jump { - friend class PatchBuffer; - friend class MacroAssembler; - - public: - Jump() - { - } - - // FIXME: transitionary method, while we replace JmpSrces with Jumps. - Jump(X86Assembler::JmpSrc jmp) - : m_jmp(jmp) - { - } - - void link(MacroAssembler* masm) - { - masm->m_assembler.link(m_jmp, masm->m_assembler.label()); - } - - void linkTo(Label label, MacroAssembler* masm) - { - masm->m_assembler.link(m_jmp, label.m_label); - } - - // FIXME: transitionary method, while we replace JmpSrces with Jumps. - operator X86Assembler::JmpSrc() - { - return m_jmp; - } - - static void patch(void* address, void* destination) - { - X86Assembler::patchBranchOffset(reinterpret_cast(address), destination); - } - - private: - X86Assembler::JmpSrc m_jmp; - }; - - // JumpList: - // - // A JumpList is a set of Jump objects. - // All jumps in the set will be linked to the same destination. - class JumpList { - friend class PatchBuffer; - - public: - void link(MacroAssembler* masm) - { - size_t size = m_jumps.size(); - for (size_t i = 0; i < size; ++i) - m_jumps[i].link(masm); - m_jumps.clear(); - } - - void linkTo(Label label, MacroAssembler* masm) - { - size_t size = m_jumps.size(); - for (size_t i = 0; i < size; ++i) - m_jumps[i].linkTo(label, masm); - m_jumps.clear(); - } - - void append(Jump jump) - { - m_jumps.append(jump); - } - - void append(JumpList& other) - { - m_jumps.append(other.m_jumps.begin(), other.m_jumps.size()); - } - - bool empty() - { - return !m_jumps.size(); - } - - private: - Vector m_jumps; - }; - - - // PatchBuffer: - // - // This class assists in linking code generated by the macro assembler, once code generation - // has been completed, and the code has been copied to is final location in memory. At this - // time pointers to labels within the code may be resolved, and relative offsets to external - // addresses may be fixed. - // - // Specifically: - // * Jump objects may be linked to external targets, - // * The address of Jump objects may taken, such that it can later be relinked. - // * The return address of a Jump object representing a call may be acquired. - // * The address of a Label pointing into the code may be resolved. - // * The value referenced by a DataLabel may be fixed. - // - // FIXME: distinguish between Calls & Jumps (make a specific call to obtain the return - // address of calls, as opposed to a point that can be used to later relink a Jump - - // possibly wrap the later up in an object that can do just that). - class PatchBuffer { - public: - PatchBuffer(void* code) - : m_code(code) - { - } - - void link(Jump jump, void* target) - { - X86Assembler::link(m_code, jump.m_jmp, target); - } - - void link(JumpList list, void* target) - { - for (unsigned i = 0; i < list.m_jumps.size(); ++i) - X86Assembler::link(m_code, list.m_jumps[i], target); - } - - void* addressOf(Jump jump) - { - return X86Assembler::getRelocatedAddress(m_code, jump.m_jmp); - } - - void* addressOf(Label label) - { - return X86Assembler::getRelocatedAddress(m_code, label.m_label); - } - - void* addressOf(DataLabelPtr label) - { - return X86Assembler::getRelocatedAddress(m_code, label.m_label); - } - - void* addressOf(DataLabel32 label) - { - return X86Assembler::getRelocatedAddress(m_code, label.m_label); - } - - void setPtr(DataLabelPtr label, void* value) - { - X86Assembler::patchAddress(m_code, label.m_label, value); - } - - private: - void* m_code; - }; - - - // ImmPtr: - // - // A pointer sized immediate operand to an instruction - this is wrapped - // in a class requiring explicit construction in order to differentiate - // from pointers used as absolute addresses to memory operations - struct ImmPtr { - explicit ImmPtr(void* value) - : m_value(value) - { - } - - intptr_t asIntptr() - { - return reinterpret_cast(m_value); - } - - void* m_value; - }; - - - // Imm32: - // - // A 32bit immediate operand to an instruction - this is wrapped in a - // class requiring explicit construction in order to prevent RegisterIDs - // (which are implemented as an enum) from accidentally being passed as - // immediate values. - struct Imm32 { - explicit Imm32(int32_t value) - : m_value(value) - { - } - -#if PLATFORM(X86) - explicit Imm32(ImmPtr ptr) - : m_value(ptr.asIntptr()) - { - } -#endif - - int32_t m_value; - }; - - // Integer arithmetic operations: - // - // Operations are typically two operand - operation(source, srcDst) - // For many operations the source may be an Imm32, the srcDst operand - // may often be a memory location (explictly described using an Address - // object). - - void addPtr(RegisterID src, RegisterID dest) + void poke(RegisterID src, int index = 0) { -#if PLATFORM(X86_64) - m_assembler.addq_rr(src, dest); -#else - add32(src, dest); -#endif + storePtr(src, Address(stackPointerRegister, (index * sizeof(void*)))); } - void addPtr(Imm32 imm, RegisterID srcDest) + void poke(Imm32 value, int index = 0) { -#if PLATFORM(X86_64) - m_assembler.addq_ir(imm.m_value, srcDest); -#else - add32(imm, srcDest); -#endif + store32(value, Address(stackPointerRegister, (index * sizeof(void*)))); } - void addPtr(Imm32 imm, RegisterID src, RegisterID dest) + void poke(ImmPtr imm, int index = 0) { - m_assembler.leal_mr(imm.m_value, src, dest); + storePtr(imm, Address(stackPointerRegister, (index * sizeof(void*)))); } - void add32(RegisterID src, RegisterID dest) + + // Backwards banches, these are currently all implemented using existing forwards branch mechanisms. + void branchPtr(Condition cond, RegisterID op1, ImmPtr imm, Label target) { - m_assembler.addl_rr(src, dest); + branchPtr(cond, op1, imm).linkTo(target, this); } - void add32(Imm32 imm, Address address) + void branch32(Condition cond, RegisterID op1, RegisterID op2, Label target) { - m_assembler.addl_im(imm.m_value, address.offset, address.base); + branch32(cond, op1, op2).linkTo(target, this); } - void add32(Imm32 imm, RegisterID dest) + void branch32(Condition cond, RegisterID op1, Imm32 imm, Label target) { - m_assembler.addl_ir(imm.m_value, dest); + branch32(cond, op1, imm).linkTo(target, this); } - - void add32(Imm32 imm, AbsoluteAddress address) + + void branch32(Condition cond, RegisterID left, Address right, Label target) { -#if PLATFORM(X86_64) - move(ImmPtr(address.m_ptr), scratchRegister); - add32(imm, Address(scratchRegister)); -#else - m_assembler.addl_im(imm.m_value, address.m_ptr); -#endif + branch32(cond, left, right).linkTo(target, this); } - - void add32(Address src, RegisterID dest) + + void branch16(Condition cond, BaseIndex left, RegisterID right, Label target) { - m_assembler.addl_mr(src.offset, src.base, dest); + branch16(cond, left, right).linkTo(target, this); } - void andPtr(RegisterID src, RegisterID dest) + void branchTestPtr(Condition cond, RegisterID reg, Label target) { -#if PLATFORM(X86_64) - m_assembler.andq_rr(src, dest); -#else - and32(src, dest); -#endif + branchTestPtr(cond, reg).linkTo(target, this); } - void andPtr(Imm32 imm, RegisterID srcDest) + void jump(Label target) { -#if PLATFORM(X86_64) - m_assembler.andq_ir(imm.m_value, srcDest); -#else - and32(imm, srcDest); -#endif + jump().linkTo(target, this); } - void and32(RegisterID src, RegisterID dest) - { - m_assembler.andl_rr(src, dest); - } - void and32(Imm32 imm, RegisterID dest) + // Ptr methods + // On 32-bit platforms (i.e. x86), these methods directly map onto their 32-bit equivalents. +#if !PLATFORM(X86_64) + void addPtr(RegisterID src, RegisterID dest) { - m_assembler.andl_ir(imm.m_value, dest); + add32(src, dest); } - void lshift32(Imm32 imm, RegisterID dest) + void addPtr(Imm32 imm, RegisterID srcDest) { - m_assembler.shll_i8r(imm.m_value, dest); + add32(imm, srcDest); } - - void lshift32(RegisterID shift_amount, RegisterID dest) + + void addPtr(ImmPtr imm, RegisterID dest) { - // On x86 we can only shift by ecx; if asked to shift by another register we'll - // need rejig the shift amount into ecx first, and restore the registers afterwards. - if (shift_amount != X86::ecx) { - swap(shift_amount, X86::ecx); - - // E.g. transform "shll %eax, %eax" -> "xchgl %eax, %ecx; shll %ecx, %ecx; xchgl %eax, %ecx" - if (dest == shift_amount) - m_assembler.shll_CLr(X86::ecx); - // E.g. transform "shll %eax, %ecx" -> "xchgl %eax, %ecx; shll %ecx, %eax; xchgl %eax, %ecx" - else if (dest == X86::ecx) - m_assembler.shll_CLr(shift_amount); - // E.g. transform "shll %eax, %ebx" -> "xchgl %eax, %ecx; shll %ecx, %ebx; xchgl %eax, %ecx" - else - m_assembler.shll_CLr(dest); - - swap(shift_amount, X86::ecx); - } else - m_assembler.shll_CLr(dest); + add32(Imm32(imm), dest); } - - // Take the value from dividend, divide it by divisor, and put the remainder in remainder. - // For now, this operation has specific register requirements, and the three register must - // be unique. It is unfortunate to expose this in the MacroAssembler interface, however - // given the complexity to fix, the fact that it is not uncommmon for processors to have - // specific register requirements on this operation (e.g. Mips result in 'hi'), or to not - // support a hardware divide at all, it may not be - void mod32(RegisterID divisor, RegisterID dividend, RegisterID remainder) - { -#ifdef NDEBUG -#pragma unused(dividend,remainder) -#else - ASSERT((dividend == X86::eax) && (remainder == X86::edx)); - ASSERT((dividend != divisor) && (remainder != divisor)); -#endif - m_assembler.cdq(); - m_assembler.idivl_r(divisor); + void addPtr(Imm32 imm, RegisterID src, RegisterID dest) + { + add32(imm, src, dest); } - void mul32(Imm32 imm, RegisterID src, RegisterID dest) + void andPtr(RegisterID src, RegisterID dest) { - m_assembler.imull_i32r(src, imm.m_value, dest); + and32(src, dest); } - - void not32(RegisterID srcDest) + + void andPtr(Imm32 imm, RegisterID srcDest) { - m_assembler.notl_r(srcDest); + and32(imm, srcDest); } - + void orPtr(RegisterID src, RegisterID dest) { -#if PLATFORM(X86_64) - m_assembler.orq_rr(src, dest); -#else or32(src, dest); -#endif } void orPtr(ImmPtr imm, RegisterID dest) { -#if PLATFORM(X86_64) - move(imm, scratchRegister); - m_assembler.orq_rr(scratchRegister, dest); -#else or32(Imm32(imm), dest); -#endif } void orPtr(Imm32 imm, RegisterID dest) { -#if PLATFORM(X86_64) - m_assembler.orq_ir(imm.m_value, dest); -#else or32(imm, dest); -#endif - } - - void or32(RegisterID src, RegisterID dest) - { - m_assembler.orl_rr(src, dest); - } - - void or32(Imm32 imm, RegisterID dest) - { - m_assembler.orl_ir(imm.m_value, dest); } void rshiftPtr(RegisterID shift_amount, RegisterID dest) { -#if PLATFORM(X86_64) - // On x86 we can only shift by ecx; if asked to shift by another register we'll - // need rejig the shift amount into ecx first, and restore the registers afterwards. - if (shift_amount != X86::ecx) { - swap(shift_amount, X86::ecx); - - // E.g. transform "shll %eax, %eax" -> "xchgl %eax, %ecx; shll %ecx, %ecx; xchgl %eax, %ecx" - if (dest == shift_amount) - m_assembler.sarq_CLr(X86::ecx); - // E.g. transform "shll %eax, %ecx" -> "xchgl %eax, %ecx; shll %ecx, %eax; xchgl %eax, %ecx" - else if (dest == X86::ecx) - m_assembler.sarq_CLr(shift_amount); - // E.g. transform "shll %eax, %ebx" -> "xchgl %eax, %ecx; shll %ecx, %ebx; xchgl %eax, %ecx" - else - m_assembler.sarq_CLr(dest); - - swap(shift_amount, X86::ecx); - } else - m_assembler.sarq_CLr(dest); -#else rshift32(shift_amount, dest); -#endif } void rshiftPtr(Imm32 imm, RegisterID dest) { -#if PLATFORM(X86_64) - m_assembler.sarq_i8r(imm.m_value, dest); -#else rshift32(imm, dest); -#endif - } - - void rshift32(RegisterID shift_amount, RegisterID dest) - { - // On x86 we can only shift by ecx; if asked to shift by another register we'll - // need rejig the shift amount into ecx first, and restore the registers afterwards. - if (shift_amount != X86::ecx) { - swap(shift_amount, X86::ecx); - - // E.g. transform "shll %eax, %eax" -> "xchgl %eax, %ecx; shll %ecx, %ecx; xchgl %eax, %ecx" - if (dest == shift_amount) - m_assembler.sarl_CLr(X86::ecx); - // E.g. transform "shll %eax, %ecx" -> "xchgl %eax, %ecx; shll %ecx, %eax; xchgl %eax, %ecx" - else if (dest == X86::ecx) - m_assembler.sarl_CLr(shift_amount); - // E.g. transform "shll %eax, %ebx" -> "xchgl %eax, %ecx; shll %ecx, %ebx; xchgl %eax, %ecx" - else - m_assembler.sarl_CLr(dest); - - swap(shift_amount, X86::ecx); - } else - m_assembler.sarl_CLr(dest); } - void rshift32(Imm32 imm, RegisterID dest) + void subPtr(RegisterID src, RegisterID dest) { - m_assembler.sarl_i8r(imm.m_value, dest); + sub32(src, dest); } - + void subPtr(Imm32 imm, RegisterID dest) { -#if PLATFORM(X86_64) - m_assembler.subq_ir(imm.m_value, dest); -#else sub32(imm, dest); -#endif - } - - void sub32(Imm32 imm, RegisterID dest) - { - m_assembler.subl_ir(imm.m_value, dest); } - void sub32(Imm32 imm, Address address) - { - m_assembler.subl_im(imm.m_value, address.offset, address.base); - } - - void sub32(Imm32 imm, AbsoluteAddress address) + void subPtr(ImmPtr imm, RegisterID dest) { -#if PLATFORM(X86_64) - move(ImmPtr(address.m_ptr), scratchRegister); - sub32(imm, Address(scratchRegister)); -#else - m_assembler.subl_im(imm.m_value, address.m_ptr); -#endif - } - - void sub32(Address src, RegisterID dest) - { - m_assembler.subl_mr(src.offset, src.base, dest); + sub32(Imm32(imm), dest); } void xorPtr(RegisterID src, RegisterID dest) { -#if PLATFORM(X86_64) - m_assembler.xorq_rr(src, dest); -#else xor32(src, dest); -#endif } void xorPtr(Imm32 imm, RegisterID srcDest) { -#if PLATFORM(X86_64) - m_assembler.xorq_ir(imm.m_value, srcDest); -#else xor32(imm, srcDest); -#endif - } - - void xor32(RegisterID src, RegisterID dest) - { - m_assembler.xorl_rr(src, dest); - } - - void xor32(Imm32 imm, RegisterID srcDest) - { - m_assembler.xorl_ir(imm.m_value, srcDest); } - - // Memory access operations: - // - // Loads are of the form load(address, destination) and stores of the form - // store(source, address). The source for a store may be an Imm32. Address - // operand objects to loads and store will be implicitly constructed if a - // register is passed. void loadPtr(ImplicitAddress address, RegisterID dest) { -#if PLATFORM(X86_64) - m_assembler.movq_mr(address.offset, address.base, dest); -#else load32(address, dest); -#endif - } - - DataLabel32 loadPtrWithAddressOffsetPatch(Address address, RegisterID dest) - { -#if PLATFORM(X86_64) - m_assembler.movq_mr_disp32(address.offset, address.base, dest); - return DataLabel32(this); -#else - m_assembler.movl_mr_disp32(address.offset, address.base, dest); - return DataLabel32(this); -#endif } void loadPtr(BaseIndex address, RegisterID dest) { -#if PLATFORM(X86_64) - m_assembler.movq_mr(address.offset, address.base, address.index, address.scale, dest); -#else load32(address, dest); -#endif } void loadPtr(void* address, RegisterID dest) { -#if PLATFORM(X86_64) - if (dest == X86::eax) - m_assembler.movq_mEAX(address); - else { - move(X86::eax, dest); - m_assembler.movq_mEAX(address); - swap(X86::eax, dest); - } -#else load32(address, dest); -#endif - } - - void load32(ImplicitAddress address, RegisterID dest) - { - m_assembler.movl_mr(address.offset, address.base, dest); - } - - void load32(BaseIndex address, RegisterID dest) - { - m_assembler.movl_mr(address.offset, address.base, address.index, address.scale, dest); } - void load32(void* address, RegisterID dest) + DataLabel32 loadPtrWithAddressOffsetPatch(Address address, RegisterID dest) { -#if PLATFORM(X86_64) - if (dest == X86::eax) - m_assembler.movl_mEAX(address); - else { - move(X86::eax, dest); - m_assembler.movl_mEAX(address); - swap(X86::eax, dest); - } -#else - m_assembler.movl_mr(address, dest); -#endif + return load32WithAddressOffsetPatch(address, dest); } - void load16(BaseIndex address, RegisterID dest) + void setPtr(Condition cond, RegisterID left, Imm32 right, RegisterID dest) { - m_assembler.movzwl_mr(address.offset, address.base, address.index, address.scale, dest); + set32(cond, left, right, dest); } void storePtr(RegisterID src, ImplicitAddress address) { -#if PLATFORM(X86_64) - m_assembler.movq_rm(src, address.offset, address.base); -#else store32(src, address); -#endif - } - - DataLabel32 storePtrWithAddressOffsetPatch(RegisterID src, Address address) - { -#if PLATFORM(X86_64) - m_assembler.movq_rm_disp32(src, address.offset, address.base); - return DataLabel32(this); -#else - m_assembler.movl_rm_disp32(src, address.offset, address.base); - return DataLabel32(this); -#endif } void storePtr(RegisterID src, BaseIndex address) { -#if PLATFORM(X86_64) - m_assembler.movq_rm(src, address.offset, address.base, address.index, address.scale); -#else store32(src, address); -#endif - } - - void storePtr(ImmPtr imm, ImplicitAddress address) - { -#if PLATFORM(X86_64) - move(imm, scratchRegister); - storePtr(scratchRegister, address); -#else - m_assembler.movl_i32m(imm.asIntptr(), address.offset, address.base); -#endif - } - - DataLabelPtr storePtrWithPatch(Address address) - { -#if PLATFORM(X86_64) - m_assembler.movq_i64r(0, scratchRegister); - DataLabelPtr label(this); - storePtr(scratchRegister, address); - return label; -#else - m_assembler.movl_i32m(0, address.offset, address.base); - return DataLabelPtr(this); -#endif - } - - void store32(RegisterID src, ImplicitAddress address) - { - m_assembler.movl_rm(src, address.offset, address.base); - } - - void store32(RegisterID src, BaseIndex address) - { - m_assembler.movl_rm(src, address.offset, address.base, address.index, address.scale); - } - - void store32(Imm32 imm, ImplicitAddress address) - { - m_assembler.movl_i32m(imm.m_value, address.offset, address.base); - } - - void store32(Imm32 imm, void* address) - { -#if PLATFORM(X86_64) - move(X86::eax, scratchRegister); - move(imm, X86::eax); - m_assembler.movl_EAXm(address); - move(scratchRegister, X86::eax); -#else - m_assembler.movl_i32m(imm.m_value, address); -#endif - } - - - // Stack manipulation operations: - // - // The ABI is assumed to provide a stack abstraction to memory, - // containing machine word sized units of data. Push and pop - // operations add and remove a single register sized unit of data - // to or from the stack. Peek and poke operations read or write - // values on the stack, without moving the current stack position. - - void pop(RegisterID dest) - { - m_assembler.pop_r(dest); - } - - void push(RegisterID src) - { - m_assembler.push_r(src); - } - - void push(Address address) - { - m_assembler.push_m(address.offset, address.base); - } - - void push(Imm32 imm) - { - m_assembler.push_i32(imm.m_value); - } - - void pop() - { - addPtr(Imm32(sizeof(void*)), X86::esp); - } - - void peek(RegisterID dest, int index = 0) - { - loadPtr(Address(X86::esp, (index * sizeof(void *))), dest); - } - - void poke(RegisterID src, int index = 0) - { - storePtr(src, Address(X86::esp, (index * sizeof(void *)))); } - void poke(Imm32 value, int index = 0) + void storePtr(RegisterID src, void* address) { - store32(value, Address(X86::esp, (index * sizeof(void *)))); + store32(src, address); } - void poke(ImmPtr imm, int index = 0) + void storePtr(ImmPtr imm, ImplicitAddress address) { - storePtr(imm, Address(X86::esp, (index * sizeof(void *)))); + store32(Imm32(imm), address); } - // Register move operations: - // - // Move values in registers. - - void move(Imm32 imm, RegisterID dest) + void storePtr(ImmPtr imm, void* address) { - // Note: on 64-bit the Imm32 value is zero extended into the register, it - // may be useful to have a separate version that sign extends the value? - if (!imm.m_value) - m_assembler.xorl_rr(dest, dest); - else - m_assembler.movl_i32r(imm.m_value, dest); + store32(Imm32(imm), address); } - void move(RegisterID src, RegisterID dest) + DataLabel32 storePtrWithAddressOffsetPatch(RegisterID src, Address address) { - // Note: on 64-bit this is is a full register move; perhaps it would be - // useful to have separate move32 & movePtr, with move32 zero extending? -#if PLATFORM(X86_64) - m_assembler.movq_rr(src, dest); -#else - m_assembler.movl_rr(src, dest); -#endif + return store32WithAddressOffsetPatch(src, address); } - void move(ImmPtr imm, RegisterID dest) - { -#if PLATFORM(X86_64) - if (CAN_SIGN_EXTEND_U32_64(imm.asIntptr())) - m_assembler.movl_i32r(static_cast(imm.asIntptr()), dest); - else - m_assembler.movq_i64r(imm.asIntptr(), dest); -#else - m_assembler.movl_i32r(imm.asIntptr(), dest); -#endif - } - void swap(RegisterID reg1, RegisterID reg2) + Jump branchPtr(Condition cond, RegisterID left, RegisterID right) { -#if PLATFORM(X86_64) - m_assembler.xchgq_rr(reg1, reg2); -#else - m_assembler.xchgl_rr(reg1, reg2); -#endif + return branch32(cond, left, right); } - void signExtend32ToPtr(RegisterID src, RegisterID dest) + Jump branchPtr(Condition cond, RegisterID left, ImmPtr right) { -#if PLATFORM(X86_64) - m_assembler.movsxd_rr(src, dest); -#else - if (src != dest) - move(src, dest); -#endif + return branch32(cond, left, Imm32(right)); } - void zeroExtend32ToPtr(RegisterID src, RegisterID dest) + Jump branchPtr(Condition cond, RegisterID left, Address right) { -#if PLATFORM(X86_64) - m_assembler.movl_rr(src, dest); -#else - if (src != dest) - move(src, dest); -#endif + return branch32(cond, left, right); } - - // Forwards / external control flow operations: - // - // This set of jump and conditional branch operations return a Jump - // object which may linked at a later point, allow forwards jump, - // or jumps that will require external linkage (after the code has been - // relocated). - // - // For branches, signed <, >, <= and >= are denoted as l, g, le, and ge - // respecitvely, for unsigned comparisons the names b, a, be, and ae are - // used (representing the names 'below' and 'above'). - // - // Operands to the comparision are provided in the expected order, e.g. - // jle32(reg1, Imm32(5)) will branch if the value held in reg1, when - // treated as a signed 32bit value, is less than or equal to 5. - // - // jz and jnz test whether the first operand is equal to zero, and take - // an optional second operand of a mask under which to perform the test. - -private: - void compareImm32ForBranch(RegisterID left, int32_t right) + Jump branchPtr(Condition cond, Address left, RegisterID right) { - m_assembler.cmpl_ir(right, left); + return branch32(cond, left, right); } - void compareImm32ForBranchEquality(RegisterID reg, int32_t imm) + Jump branchPtr(Condition cond, AbsoluteAddress left, RegisterID right) { - if (!imm) - m_assembler.testl_rr(reg, reg); - else - m_assembler.cmpl_ir(imm, reg); + return branch32(cond, left, right); } - void compareImm32ForBranchEquality(Address address, int32_t imm) + Jump branchPtr(Condition cond, Address left, ImmPtr right) { - m_assembler.cmpl_im(imm, address.offset, address.base); + return branch32(cond, left, Imm32(right)); } - void testImm32(RegisterID reg, Imm32 mask) + Jump branchPtr(Condition cond, AbsoluteAddress left, ImmPtr right) { - // if we are only interested in the low seven bits, this can be tested with a testb - if (mask.m_value == -1) - m_assembler.testl_rr(reg, reg); - else if ((mask.m_value & ~0x7f) == 0) - m_assembler.testb_i8r(mask.m_value, reg); - else - m_assembler.testl_i32r(mask.m_value, reg); + return branch32(cond, left, Imm32(right)); } - void testImm32(Address address, Imm32 mask) + Jump branchTestPtr(Condition cond, RegisterID reg, RegisterID mask) { - if (mask.m_value == -1) - m_assembler.cmpl_im(0, address.offset, address.base); - else - m_assembler.testl_i32m(mask.m_value, address.offset, address.base); + return branchTest32(cond, reg, mask); } - void testImm32(BaseIndex address, Imm32 mask) + Jump branchTestPtr(Condition cond, RegisterID reg, Imm32 mask = Imm32(-1)) { - if (mask.m_value == -1) - m_assembler.cmpl_im(0, address.offset, address.base, address.index, address.scale); - else - m_assembler.testl_i32m(mask.m_value, address.offset, address.base, address.index, address.scale); + return branchTest32(cond, reg, mask); } -#if PLATFORM(X86_64) - void compareImm64ForBranch(RegisterID left, int32_t right) + Jump branchTestPtr(Condition cond, Address address, Imm32 mask = Imm32(-1)) { - m_assembler.cmpq_ir(right, left); + return branchTest32(cond, address, mask); } - void compareImm64ForBranchEquality(RegisterID reg, int32_t imm) + Jump branchTestPtr(Condition cond, BaseIndex address, Imm32 mask = Imm32(-1)) { - if (!imm) - m_assembler.testq_rr(reg, reg); - else - m_assembler.cmpq_ir(imm, reg); + return branchTest32(cond, address, mask); } - void testImm64(RegisterID reg, Imm32 mask) - { - // if we are only interested in the low seven bits, this can be tested with a testb - if (mask.m_value == -1) - m_assembler.testq_rr(reg, reg); - else if ((mask.m_value & ~0x7f) == 0) - m_assembler.testb_i8r(mask.m_value, reg); - else - m_assembler.testq_i32r(mask.m_value, reg); - } - void testImm64(Address address, Imm32 mask) + Jump branchAddPtr(Condition cond, RegisterID src, RegisterID dest) { - if (mask.m_value == -1) - m_assembler.cmpq_im(0, address.offset, address.base); - else - m_assembler.testq_i32m(mask.m_value, address.offset, address.base); + return branchAdd32(cond, src, dest); } - void testImm64(BaseIndex address, Imm32 mask) + Jump branchSubPtr(Condition cond, Imm32 imm, RegisterID dest) { - if (mask.m_value == -1) - m_assembler.cmpq_im(0, address.offset, address.base, address.index, address.scale); - else - m_assembler.testq_i32m(mask.m_value, address.offset, address.base, address.index, address.scale); + return branchSub32(cond, imm, dest); } #endif -public: - Jump ja32(RegisterID left, Imm32 right) - { - compareImm32ForBranch(left, right.m_value); - return Jump(m_assembler.ja()); - } - - Jump jaePtr(RegisterID left, RegisterID right) - { -#if PLATFORM(X86_64) - m_assembler.cmpq_rr(right, left); - return Jump(m_assembler.jae()); -#else - return jae32(left, right); -#endif - } - - Jump jaePtr(RegisterID reg, ImmPtr ptr) - { -#if PLATFORM(X86_64) - intptr_t imm = ptr.asIntptr(); - if (CAN_SIGN_EXTEND_32_64(imm)) { - compareImm64ForBranch(reg, imm); - return Jump(m_assembler.jae()); - } else { - move(ptr, scratchRegister); - return jaePtr(reg, scratchRegister); - } -#else - return jae32(reg, Imm32(ptr)); -#endif - } - - Jump jae32(RegisterID left, RegisterID right) - { - m_assembler.cmpl_rr(right, left); - return Jump(m_assembler.jae()); - } - - Jump jae32(RegisterID left, Imm32 right) - { - compareImm32ForBranch(left, right.m_value); - return Jump(m_assembler.jae()); - } - - Jump jae32(RegisterID left, Address right) - { - m_assembler.cmpl_mr(right.offset, right.base, left); - return Jump(m_assembler.jae()); - } - - Jump jae32(Address left, RegisterID right) - { - m_assembler.cmpl_rm(right, left.offset, left.base); - return Jump(m_assembler.jae()); - } - - Jump jbPtr(RegisterID left, RegisterID right) - { -#if PLATFORM(X86_64) - m_assembler.cmpq_rr(right, left); - return Jump(m_assembler.jb()); -#else - return jb32(left, right); -#endif - } - - Jump jbPtr(RegisterID reg, ImmPtr ptr) - { -#if PLATFORM(X86_64) - intptr_t imm = ptr.asIntptr(); - if (CAN_SIGN_EXTEND_32_64(imm)) { - compareImm64ForBranch(reg, imm); - return Jump(m_assembler.jb()); - } else { - move(ptr, scratchRegister); - return jbPtr(reg, scratchRegister); - } -#else - return jb32(reg, Imm32(ptr)); -#endif - } - - Jump jb32(RegisterID left, RegisterID right) - { - m_assembler.cmpl_rr(right, left); - return Jump(m_assembler.jb()); - } - - Jump jb32(RegisterID left, Imm32 right) - { - compareImm32ForBranch(left, right.m_value); - return Jump(m_assembler.jb()); - } - - Jump jb32(RegisterID left, Address right) - { - m_assembler.cmpl_mr(right.offset, right.base, left); - return Jump(m_assembler.jb()); - } - - Jump jePtr(RegisterID op1, RegisterID op2) - { -#if PLATFORM(X86_64) - m_assembler.cmpq_rr(op1, op2); - return Jump(m_assembler.je()); -#else - return je32(op1, op2); -#endif - } - - Jump jePtr(RegisterID reg, Address address) - { -#if PLATFORM(X86_64) - m_assembler.cmpq_rm(reg, address.offset, address.base); -#else - m_assembler.cmpl_rm(reg, address.offset, address.base); -#endif - return Jump(m_assembler.je()); - } - - Jump jePtr(RegisterID reg, ImmPtr ptr) - { -#if PLATFORM(X86_64) - intptr_t imm = ptr.asIntptr(); - if (CAN_SIGN_EXTEND_32_64(imm)) { - compareImm64ForBranchEquality(reg, imm); - return Jump(m_assembler.je()); - } else { - move(ptr, scratchRegister); - return jePtr(scratchRegister, reg); - } -#else - return je32(reg, Imm32(ptr)); -#endif - } - - Jump jePtr(Address address, ImmPtr imm) - { -#if PLATFORM(X86_64) - move(imm, scratchRegister); - return jePtr(scratchRegister, address); -#else - return je32(address, Imm32(imm)); -#endif - } - - Jump je32(RegisterID op1, RegisterID op2) - { - m_assembler.cmpl_rr(op1, op2); - return Jump(m_assembler.je()); - } - - Jump je32(Address op1, RegisterID op2) - { - m_assembler.cmpl_mr(op1.offset, op1.base, op2); - return Jump(m_assembler.je()); - } - - Jump je32(RegisterID reg, Imm32 imm) - { - compareImm32ForBranchEquality(reg, imm.m_value); - return Jump(m_assembler.je()); - } - - Jump je32(Address address, Imm32 imm) - { - compareImm32ForBranchEquality(address, imm.m_value); - return Jump(m_assembler.je()); - } - - Jump je16(RegisterID op1, BaseIndex op2) - { - m_assembler.cmpw_rm(op1, op2.offset, op2.base, op2.index, op2.scale); - return Jump(m_assembler.je()); - } - - Jump jg32(RegisterID left, RegisterID right) - { - m_assembler.cmpl_rr(right, left); - return Jump(m_assembler.jg()); - } - - Jump jg32(RegisterID reg, Address address) - { - m_assembler.cmpl_mr(address.offset, address.base, reg); - return Jump(m_assembler.jg()); - } - - Jump jgePtr(RegisterID left, RegisterID right) - { -#if PLATFORM(X86_64) - m_assembler.cmpq_rr(right, left); - return Jump(m_assembler.jge()); -#else - return jge32(left, right); -#endif - } - - Jump jgePtr(RegisterID reg, ImmPtr ptr) - { -#if PLATFORM(X86_64) - intptr_t imm = ptr.asIntptr(); - if (CAN_SIGN_EXTEND_32_64(imm)) { - compareImm64ForBranch(reg, imm); - return Jump(m_assembler.jge()); - } else { - move(ptr, scratchRegister); - return jgePtr(reg, scratchRegister); - } -#else - return jge32(reg, Imm32(ptr)); -#endif - } - - Jump jge32(RegisterID left, RegisterID right) - { - m_assembler.cmpl_rr(right, left); - return Jump(m_assembler.jge()); - } - - Jump jge32(RegisterID left, Imm32 right) - { - compareImm32ForBranch(left, right.m_value); - return Jump(m_assembler.jge()); - } - - Jump jlPtr(RegisterID left, RegisterID right) - { -#if PLATFORM(X86_64) - m_assembler.cmpq_rr(right, left); - return Jump(m_assembler.jl()); -#else - return jl32(left, right); -#endif - } - - Jump jlPtr(RegisterID reg, ImmPtr ptr) - { -#if PLATFORM(X86_64) - intptr_t imm = ptr.asIntptr(); - if (CAN_SIGN_EXTEND_32_64(imm)) { - compareImm64ForBranch(reg, imm); - return Jump(m_assembler.jl()); - } else { - move(ptr, scratchRegister); - return jlPtr(reg, scratchRegister); - } -#else - return jl32(reg, Imm32(ptr)); -#endif - } - - Jump jl32(RegisterID left, RegisterID right) - { - m_assembler.cmpl_rr(right, left); - return Jump(m_assembler.jl()); - } - - Jump jl32(RegisterID left, Imm32 right) - { - compareImm32ForBranch(left, right.m_value); - return Jump(m_assembler.jl()); - } - - Jump jlePtr(RegisterID left, RegisterID right) - { -#if PLATFORM(X86_64) - m_assembler.cmpq_rr(right, left); - return Jump(m_assembler.jle()); -#else - return jle32(left, right); -#endif - } - - Jump jlePtr(RegisterID reg, ImmPtr ptr) - { -#if PLATFORM(X86_64) - intptr_t imm = ptr.asIntptr(); - if (CAN_SIGN_EXTEND_32_64(imm)) { - compareImm64ForBranch(reg, imm); - return Jump(m_assembler.jle()); - } else { - move(ptr, scratchRegister); - return jlePtr(reg, scratchRegister); - } -#else - return jle32(reg, Imm32(ptr)); -#endif - } - - Jump jle32(RegisterID left, RegisterID right) - { - m_assembler.cmpl_rr(right, left); - return Jump(m_assembler.jle()); - } - - Jump jle32(RegisterID left, Imm32 right) - { - compareImm32ForBranch(left, right.m_value); - return Jump(m_assembler.jle()); - } - - Jump jnePtr(RegisterID op1, RegisterID op2) - { -#if PLATFORM(X86_64) - m_assembler.cmpq_rr(op1, op2); - return Jump(m_assembler.jne()); -#else - return jne32(op1, op2); -#endif - } - - Jump jnePtr(RegisterID reg, Address address) - { -#if PLATFORM(X86_64) - m_assembler.cmpq_rm(reg, address.offset, address.base); -#else - m_assembler.cmpl_rm(reg, address.offset, address.base); -#endif - return Jump(m_assembler.jne()); - } - - Jump jnePtr(RegisterID reg, AbsoluteAddress address) - { -#if PLATFORM(X86_64) - move(ImmPtr(address.m_ptr), scratchRegister); - return jnePtr(reg, Address(scratchRegister)); -#else - m_assembler.cmpl_rm(reg, address.m_ptr); - return Jump(m_assembler.jne()); -#endif - } - - Jump jnePtr(RegisterID reg, ImmPtr ptr) - { -#if PLATFORM(X86_64) - intptr_t imm = ptr.asIntptr(); - if (CAN_SIGN_EXTEND_32_64(imm)) { - compareImm64ForBranchEquality(reg, imm); - return Jump(m_assembler.jne()); - } else { - move(ptr, scratchRegister); - return jnePtr(scratchRegister, reg); - } -#else - return jne32(reg, Imm32(ptr)); -#endif - } - - Jump jnePtr(Address address, ImmPtr imm) - { -#if PLATFORM(X86_64) - move(imm, scratchRegister); - return jnePtr(scratchRegister, address); -#else - return jne32(address, Imm32(imm)); -#endif - } - -#if !PLATFORM(X86_64) - Jump jnePtr(AbsoluteAddress address, ImmPtr imm) - { - m_assembler.cmpl_im(imm.asIntptr(), address.m_ptr); - return Jump(m_assembler.jne()); - } -#endif - - Jump jnePtrWithPatch(RegisterID reg, DataLabelPtr& dataLabel, ImmPtr initialValue = ImmPtr(0)) - { -#if PLATFORM(X86_64) - m_assembler.movq_i64r(initialValue.asIntptr(), scratchRegister); - dataLabel = DataLabelPtr(this); - return jnePtr(scratchRegister, reg); -#else - m_assembler.cmpl_ir_force32(initialValue.asIntptr(), reg); - dataLabel = DataLabelPtr(this); - return Jump(m_assembler.jne()); -#endif - } - - Jump jnePtrWithPatch(Address address, DataLabelPtr& dataLabel, ImmPtr initialValue = ImmPtr(0)) - { -#if PLATFORM(X86_64) - m_assembler.movq_i64r(initialValue.asIntptr(), scratchRegister); - dataLabel = DataLabelPtr(this); - return jnePtr(scratchRegister, address); -#else - m_assembler.cmpl_im_force32(initialValue.asIntptr(), address.offset, address.base); - dataLabel = DataLabelPtr(this); - return Jump(m_assembler.jne()); -#endif - } - - Jump jne32(RegisterID op1, RegisterID op2) - { - m_assembler.cmpl_rr(op1, op2); - return Jump(m_assembler.jne()); - } - - Jump jne32(RegisterID reg, Imm32 imm) - { - compareImm32ForBranchEquality(reg, imm.m_value); - return Jump(m_assembler.jne()); - } - - Jump jne32(Address address, Imm32 imm) - { - compareImm32ForBranchEquality(address, imm.m_value); - return Jump(m_assembler.jne()); - } - - Jump jne32(Address address, RegisterID reg) - { - m_assembler.cmpl_rm(reg, address.offset, address.base); - return Jump(m_assembler.jne()); - } - - Jump jnzPtr(RegisterID reg, Imm32 mask = Imm32(-1)) - { -#if PLATFORM(X86_64) - testImm64(reg, mask); - return Jump(m_assembler.jne()); -#else - return jnz32(reg, mask); -#endif - } - - Jump jnzPtr(RegisterID reg, ImmPtr mask) - { -#if PLATFORM(X86_64) - move(mask, scratchRegister); - m_assembler.testq_rr(scratchRegister, reg); - return Jump(m_assembler.jne()); -#else - return jnz32(reg, Imm32(mask)); -#endif - } - - Jump jnzPtr(Address address, Imm32 mask = Imm32(-1)) - { -#if PLATFORM(X86_64) - testImm64(address, mask); - return Jump(m_assembler.jne()); -#else - return jnz32(address, mask); -#endif - } - - Jump jnz32(RegisterID reg, Imm32 mask = Imm32(-1)) - { - testImm32(reg, mask); - return Jump(m_assembler.jne()); - } - - Jump jnz32(Address address, Imm32 mask = Imm32(-1)) - { - testImm32(address, mask); - return Jump(m_assembler.jne()); - } - - Jump jzPtr(RegisterID reg, Imm32 mask = Imm32(-1)) - { -#if PLATFORM(X86_64) - testImm64(reg, mask); - return Jump(m_assembler.je()); -#else - return jz32(reg, mask); -#endif - } - - Jump jzPtr(RegisterID reg, ImmPtr mask) - { -#if PLATFORM(X86_64) - move(mask, scratchRegister); - m_assembler.testq_rr(scratchRegister, reg); - return Jump(m_assembler.je()); -#else - return jz32(reg, Imm32(mask)); -#endif - } - - Jump jzPtr(Address address, Imm32 mask = Imm32(-1)) - { -#if PLATFORM(X86_64) - testImm64(address, mask); - return Jump(m_assembler.je()); -#else - return jz32(address, mask); -#endif - } - - Jump jzPtr(BaseIndex address, Imm32 mask = Imm32(-1)) - { -#if PLATFORM(X86_64) - testImm64(address, mask); - return Jump(m_assembler.je()); -#else - return jz32(address, mask); -#endif - } - - Jump jz32(RegisterID reg, Imm32 mask = Imm32(-1)) - { - testImm32(reg, mask); - return Jump(m_assembler.je()); - } - - Jump jz32(Address address, Imm32 mask = Imm32(-1)) - { - testImm32(address, mask); - return Jump(m_assembler.je()); - } - - Jump jz32(BaseIndex address, Imm32 mask = Imm32(-1)) - { - testImm32(address, mask); - return Jump(m_assembler.je()); - } - - Jump jump() - { - return Jump(m_assembler.jmp()); - } - - - // Backwards, local control flow operations: - // - // These operations provide a shorter notation for local - // backwards branches, which may be both more convenient - // for the user, and for the programmer, and for the - // assembler (allowing shorter values to be used in - // relative offsets). - // - // The code sequence: - // - // Label topOfLoop(this); - // // ... - // jne32(reg1, reg2, topOfLoop); - // - // Is equivalent to the longer, potentially less efficient form: - // - // Label topOfLoop(this); - // // ... - // jne32(reg1, reg2).linkTo(topOfLoop); - - void jae32(RegisterID left, Address right, Label target) - { - jae32(left, right).linkTo(target, this); - } - - void je32(RegisterID op1, Imm32 imm, Label target) - { - je32(op1, imm).linkTo(target, this); - } - - void je16(RegisterID op1, BaseIndex op2, Label target) - { - je16(op1, op2).linkTo(target, this); - } - - void jl32(RegisterID left, Imm32 right, Label target) - { - jl32(left, right).linkTo(target, this); - } - - void jle32(RegisterID left, RegisterID right, Label target) - { - jle32(left, right).linkTo(target, this); - } - - void jnePtr(RegisterID op1, ImmPtr imm, Label target) - { - jnePtr(op1, imm).linkTo(target, this); - } - - void jne32(RegisterID op1, RegisterID op2, Label target) - { - jne32(op1, op2).linkTo(target, this); - } - - void jne32(RegisterID op1, Imm32 imm, Label target) - { - jne32(op1, imm).linkTo(target, this); - } - - void jzPtr(RegisterID reg, Label target) - { - jzPtr(reg).linkTo(target, this); - } - - void jump(Label target) - { - m_assembler.link(m_assembler.jmp(), target.m_label); - } - - void jump(RegisterID target) - { - m_assembler.jmp_r(target); - } - - // Address is a memory location containing the address to jump to - void jump(Address address) - { - m_assembler.jmp_m(address.offset, address.base); - } - - - // Arithmetic control flow operations: - // - // This set of conditional branch operations branch based - // on the result of an arithmetic operation. The operation - // is performed as normal, storing the result. - // - // * jz operations branch if the result is zero. - // * jo operations branch if the (signed) arithmetic - // operation caused an overflow to occur. - - Jump jnzSubPtr(Imm32 imm, RegisterID dest) - { - subPtr(imm, dest); - return Jump(m_assembler.jne()); - } - - Jump jnzSub32(Imm32 imm, RegisterID dest) - { - sub32(imm, dest); - return Jump(m_assembler.jne()); - } - - Jump joAddPtr(RegisterID src, RegisterID dest) - { - addPtr(src, dest); - return Jump(m_assembler.jo()); - } - - Jump joAdd32(RegisterID src, RegisterID dest) - { - add32(src, dest); - return Jump(m_assembler.jo()); - } - - Jump joAdd32(Imm32 imm, RegisterID dest) - { - add32(imm, dest); - return Jump(m_assembler.jo()); - } - - Jump joMul32(Imm32 imm, RegisterID src, RegisterID dest) - { - mul32(imm, src, dest); - return Jump(m_assembler.jo()); - } - - Jump joSub32(Imm32 imm, RegisterID dest) - { - sub32(imm, dest); - return Jump(m_assembler.jo()); - } - - Jump jzSubPtr(Imm32 imm, RegisterID dest) - { - subPtr(imm, dest); - return Jump(m_assembler.je()); - } - - Jump jzSub32(Imm32 imm, RegisterID dest) - { - sub32(imm, dest); - return Jump(m_assembler.je()); - } - - - // Miscellaneous operations: - - void breakpoint() - { - m_assembler.int3(); - } - - Jump call() - { - return Jump(m_assembler.call()); - } - - // FIXME: why does this return a Jump object? - it can't be linked. - // This may be to get a reference to the return address of the call. - // - // This should probably be handled by a separate label type to a regular - // jump. Todo: add a CallLabel type, for the regular call - can be linked - // like a jump (possibly a subclass of jump?, or possibly casts to a Jump). - // Also add a CallReturnLabel type for this to return (just a more JmpDsty - // form of label, can get the void* after the code has been linked, but can't - // try to link it like a Jump object), and let the CallLabel be cast into a - // CallReturnLabel. - Jump call(RegisterID target) - { - return Jump(m_assembler.call(target)); - } - - Label label() - { - return Label(this); - } - - Label align() - { - m_assembler.align(16); - return Label(this); - } - - ptrdiff_t differenceBetween(Label from, Jump to) - { - return X86Assembler::getDifferenceBetweenLabels(from.m_label, to.m_jmp); - } - - ptrdiff_t differenceBetween(Label from, Label to) - { - return X86Assembler::getDifferenceBetweenLabels(from.m_label, to.m_label); - } - - ptrdiff_t differenceBetween(Label from, DataLabelPtr to) - { - return X86Assembler::getDifferenceBetweenLabels(from.m_label, to.m_label); - } - - ptrdiff_t differenceBetween(Label from, DataLabel32 to) - { - return X86Assembler::getDifferenceBetweenLabels(from.m_label, to.m_label); - } - - ptrdiff_t differenceBetween(DataLabelPtr from, Jump to) - { - return X86Assembler::getDifferenceBetweenLabels(from.m_label, to.m_jmp); - } - - void ret() - { - m_assembler.ret(); - } - - void sete32(RegisterID src, RegisterID srcDest) - { - m_assembler.cmpl_rr(srcDest, src); - m_assembler.sete_r(srcDest); - m_assembler.movzbl_rr(srcDest, srcDest); - } - - void sete32(Imm32 imm, RegisterID srcDest) - { - compareImm32ForBranchEquality(srcDest, imm.m_value); - m_assembler.sete_r(srcDest); - m_assembler.movzbl_rr(srcDest, srcDest); - } - - void setne32(RegisterID src, RegisterID srcDest) - { - m_assembler.cmpl_rr(srcDest, src); - m_assembler.setne_r(srcDest); - m_assembler.movzbl_rr(srcDest, srcDest); - } - - void setne32(Imm32 imm, RegisterID srcDest) - { - compareImm32ForBranchEquality(srcDest, imm.m_value); - m_assembler.setne_r(srcDest); - m_assembler.movzbl_rr(srcDest, srcDest); - } - - // FIXME: - // The mask should be optional... paerhaps the argument order should be - // dest-src, operations always have a dest? ... possibly not true, considering - // asm ops like test, or pseudo ops like pop(). - void setnz32(Address address, Imm32 mask, RegisterID dest) - { - testImm32(address, mask); - m_assembler.setnz_r(dest); - m_assembler.movzbl_rr(dest, dest); - } - - void setz32(Address address, Imm32 mask, RegisterID dest) - { - testImm32(address, mask); - m_assembler.setz_r(dest); - m_assembler.movzbl_rr(dest, dest); - } }; } // namespace JSC diff --git a/src/3rdparty/webkit/JavaScriptCore/assembler/MacroAssemblerCodeRef.h b/src/3rdparty/webkit/JavaScriptCore/assembler/MacroAssemblerCodeRef.h new file mode 100644 index 0000000..0603060 --- /dev/null +++ b/src/3rdparty/webkit/JavaScriptCore/assembler/MacroAssemblerCodeRef.h @@ -0,0 +1,156 @@ +/* + * Copyright (C) 2009 Apple Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef MacroAssemblerCodeRef_h +#define MacroAssemblerCodeRef_h + +#include + +#include "ExecutableAllocator.h" +#include "PassRefPtr.h" +#include "RefPtr.h" +#include "UnusedParam.h" + +#if ENABLE(ASSEMBLER) + +namespace JSC { + +// FunctionPtr: +// +// FunctionPtr should be used to wrap pointers to C/C++ functions in JSC +// (particularly, the stub functions). +class FunctionPtr { +public: + FunctionPtr() + : m_value(0) + { + } + + template + explicit FunctionPtr(FunctionType* value) + : m_value(reinterpret_cast(value)) + { + ASSERT(m_value); + } + + void* value() const { return m_value; } + void* executableAddress() const { return m_value; } + + +private: + void* m_value; +}; + +// ReturnAddressPtr: +// +// ReturnAddressPtr should be used to wrap return addresses generated by processor +// 'call' instructions exectued in JIT code. We use return addresses to look up +// exception and optimization information, and to repatch the call instruction +// that is the source of the return address. +class ReturnAddressPtr { +public: + ReturnAddressPtr() + : m_value(0) + { + } + + explicit ReturnAddressPtr(void* value) + : m_value(value) + { + ASSERT(m_value); + } + + void* value() const { return m_value; } + +private: + void* m_value; +}; + +// MacroAssemblerCodePtr: +// +// MacroAssemblerCodePtr should be used to wrap pointers to JIT generated code. +class MacroAssemblerCodePtr { +public: + MacroAssemblerCodePtr() + : m_value(0) + { + } + + explicit MacroAssemblerCodePtr(void* value) + : m_value(value) + { + ASSERT(m_value); + } + + explicit MacroAssemblerCodePtr(ReturnAddressPtr ra) + : m_value(ra.value()) + { + ASSERT(m_value); + } + + void* executableAddress() const { return m_value; } + void* dataLocation() const { ASSERT(m_value); return m_value; } + +private: + void* m_value; +}; + +// MacroAssemblerCodeRef: +// +// A reference to a section of JIT generated code. A CodeRef consists of a +// pointer to the code, and a ref pointer to the pool from within which it +// was allocated. +class MacroAssemblerCodeRef { +public: + MacroAssemblerCodeRef() +#ifndef NDEBUG + : m_size(0) +#endif + { + } + + MacroAssemblerCodeRef(void* code, PassRefPtr executablePool, size_t size) + : m_code(code) + , m_executablePool(executablePool) + { +#ifndef NDEBUG + m_size = size; +#else + UNUSED_PARAM(size); +#endif + } + + MacroAssemblerCodePtr m_code; + RefPtr m_executablePool; +#ifndef NDEBUG + size_t m_size; +#endif +}; + +} // namespace JSC + +#endif // ENABLE(ASSEMBLER) + +#endif // MacroAssemblerCodeRef_h diff --git a/src/3rdparty/webkit/JavaScriptCore/assembler/MacroAssemblerX86.h b/src/3rdparty/webkit/JavaScriptCore/assembler/MacroAssemblerX86.h new file mode 100644 index 0000000..801bf61 --- /dev/null +++ b/src/3rdparty/webkit/JavaScriptCore/assembler/MacroAssemblerX86.h @@ -0,0 +1,164 @@ +/* + * Copyright (C) 2008 Apple Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef MacroAssemblerX86_h +#define MacroAssemblerX86_h + +#include + +#if ENABLE(ASSEMBLER) && PLATFORM(X86) + +#include "MacroAssemblerX86Common.h" + +namespace JSC { + +class MacroAssemblerX86 : public MacroAssemblerX86Common { +public: + MacroAssemblerX86() + : m_isSSE2Present(isSSE2Present()) + { + } + + static const Scale ScalePtr = TimesFour; + + using MacroAssemblerX86Common::add32; + using MacroAssemblerX86Common::and32; + using MacroAssemblerX86Common::sub32; + using MacroAssemblerX86Common::or32; + using MacroAssemblerX86Common::load32; + using MacroAssemblerX86Common::store32; + using MacroAssemblerX86Common::branch32; + using MacroAssemblerX86Common::call; + + void add32(Imm32 imm, RegisterID src, RegisterID dest) + { + m_assembler.leal_mr(imm.m_value, src, dest); + } + + void add32(Imm32 imm, AbsoluteAddress address) + { + m_assembler.addl_im(imm.m_value, address.m_ptr); + } + + void addWithCarry32(Imm32 imm, AbsoluteAddress address) + { + m_assembler.adcl_im(imm.m_value, address.m_ptr); + } + + void and32(Imm32 imm, AbsoluteAddress address) + { + m_assembler.andl_im(imm.m_value, address.m_ptr); + } + + void or32(Imm32 imm, AbsoluteAddress address) + { + m_assembler.orl_im(imm.m_value, address.m_ptr); + } + + void sub32(Imm32 imm, AbsoluteAddress address) + { + m_assembler.subl_im(imm.m_value, address.m_ptr); + } + + void load32(void* address, RegisterID dest) + { + m_assembler.movl_mr(address, dest); + } + + void store32(Imm32 imm, void* address) + { + m_assembler.movl_i32m(imm.m_value, address); + } + + void store32(RegisterID src, void* address) + { + m_assembler.movl_rm(src, address); + } + + Jump branch32(Condition cond, AbsoluteAddress left, RegisterID right) + { + m_assembler.cmpl_rm(right, left.m_ptr); + return Jump(m_assembler.jCC(x86Condition(cond))); + } + + Jump branch32(Condition cond, AbsoluteAddress left, Imm32 right) + { + m_assembler.cmpl_im(right.m_value, left.m_ptr); + return Jump(m_assembler.jCC(x86Condition(cond))); + } + + Call call() + { + return Call(m_assembler.call(), Call::Linkable); + } + + Call tailRecursiveCall() + { + return Call::fromTailJump(jump()); + } + + Call makeTailRecursiveCall(Jump oldJump) + { + return Call::fromTailJump(oldJump); + } + + + DataLabelPtr moveWithPatch(ImmPtr initialValue, RegisterID dest) + { + m_assembler.movl_i32r(initialValue.asIntptr(), dest); + return DataLabelPtr(this); + } + + Jump branchPtrWithPatch(Condition cond, RegisterID left, DataLabelPtr& dataLabel, ImmPtr initialRightValue = ImmPtr(0)) + { + m_assembler.cmpl_ir_force32(initialRightValue.asIntptr(), left); + dataLabel = DataLabelPtr(this); + return Jump(m_assembler.jCC(x86Condition(cond))); + } + + Jump branchPtrWithPatch(Condition cond, Address left, DataLabelPtr& dataLabel, ImmPtr initialRightValue = ImmPtr(0)) + { + m_assembler.cmpl_im_force32(initialRightValue.asIntptr(), left.offset, left.base); + dataLabel = DataLabelPtr(this); + return Jump(m_assembler.jCC(x86Condition(cond))); + } + + DataLabelPtr storePtrWithPatch(ImmPtr initialValue, ImplicitAddress address) + { + m_assembler.movl_i32m(initialValue.asIntptr(), address.offset, address.base); + return DataLabelPtr(this); + } + + bool supportsFloatingPoint() const { return m_isSSE2Present; } + +private: + const bool m_isSSE2Present; +}; + +} // namespace JSC + +#endif // ENABLE(ASSEMBLER) + +#endif // MacroAssemblerX86_h diff --git a/src/3rdparty/webkit/JavaScriptCore/assembler/MacroAssemblerX86Common.h b/src/3rdparty/webkit/JavaScriptCore/assembler/MacroAssemblerX86Common.h new file mode 100644 index 0000000..cea691e --- /dev/null +++ b/src/3rdparty/webkit/JavaScriptCore/assembler/MacroAssemblerX86Common.h @@ -0,0 +1,780 @@ +/* + * Copyright (C) 2008 Apple Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef MacroAssemblerX86Common_h +#define MacroAssemblerX86Common_h + +#include + +#if ENABLE(ASSEMBLER) + +#include "X86Assembler.h" +#include "AbstractMacroAssembler.h" + +namespace JSC { + +class MacroAssemblerX86Common : public AbstractMacroAssembler { +public: + + enum Condition { + Equal = X86Assembler::ConditionE, + NotEqual = X86Assembler::ConditionNE, + Above = X86Assembler::ConditionA, + AboveOrEqual = X86Assembler::ConditionAE, + Below = X86Assembler::ConditionB, + BelowOrEqual = X86Assembler::ConditionBE, + GreaterThan = X86Assembler::ConditionG, + GreaterThanOrEqual = X86Assembler::ConditionGE, + LessThan = X86Assembler::ConditionL, + LessThanOrEqual = X86Assembler::ConditionLE, + Overflow = X86Assembler::ConditionO, + Signed = X86Assembler::ConditionS, + Zero = X86Assembler::ConditionE, + NonZero = X86Assembler::ConditionNE + }; + + enum DoubleCondition { + DoubleEqual = X86Assembler::ConditionE, + DoubleGreaterThan = X86Assembler::ConditionA, + DoubleGreaterThanOrEqual = X86Assembler::ConditionAE, + DoubleLessThan = X86Assembler::ConditionB, + DoubleLessThanOrEqual = X86Assembler::ConditionBE, + }; + + static const RegisterID stackPointerRegister = X86::esp; + + // Integer arithmetic operations: + // + // Operations are typically two operand - operation(source, srcDst) + // For many operations the source may be an Imm32, the srcDst operand + // may often be a memory location (explictly described using an Address + // object). + + void add32(RegisterID src, RegisterID dest) + { + m_assembler.addl_rr(src, dest); + } + + void add32(Imm32 imm, Address address) + { + m_assembler.addl_im(imm.m_value, address.offset, address.base); + } + + void add32(Imm32 imm, RegisterID dest) + { + m_assembler.addl_ir(imm.m_value, dest); + } + + void add32(Address src, RegisterID dest) + { + m_assembler.addl_mr(src.offset, src.base, dest); + } + + void and32(RegisterID src, RegisterID dest) + { + m_assembler.andl_rr(src, dest); + } + + void and32(Imm32 imm, RegisterID dest) + { + m_assembler.andl_ir(imm.m_value, dest); + } + + void and32(Imm32 imm, Address address) + { + m_assembler.andl_im(imm.m_value, address.offset, address.base); + } + + void lshift32(Imm32 imm, RegisterID dest) + { + m_assembler.shll_i8r(imm.m_value, dest); + } + + void lshift32(RegisterID shift_amount, RegisterID dest) + { + // On x86 we can only shift by ecx; if asked to shift by another register we'll + // need rejig the shift amount into ecx first, and restore the registers afterwards. + if (shift_amount != X86::ecx) { + swap(shift_amount, X86::ecx); + + // E.g. transform "shll %eax, %eax" -> "xchgl %eax, %ecx; shll %ecx, %ecx; xchgl %eax, %ecx" + if (dest == shift_amount) + m_assembler.shll_CLr(X86::ecx); + // E.g. transform "shll %eax, %ecx" -> "xchgl %eax, %ecx; shll %ecx, %eax; xchgl %eax, %ecx" + else if (dest == X86::ecx) + m_assembler.shll_CLr(shift_amount); + // E.g. transform "shll %eax, %ebx" -> "xchgl %eax, %ecx; shll %ecx, %ebx; xchgl %eax, %ecx" + else + m_assembler.shll_CLr(dest); + + swap(shift_amount, X86::ecx); + } else + m_assembler.shll_CLr(dest); + } + + void mul32(RegisterID src, RegisterID dest) + { + m_assembler.imull_rr(src, dest); + } + + void mul32(Imm32 imm, RegisterID src, RegisterID dest) + { + m_assembler.imull_i32r(src, imm.m_value, dest); + } + + void not32(RegisterID srcDest) + { + m_assembler.notl_r(srcDest); + } + + void or32(RegisterID src, RegisterID dest) + { + m_assembler.orl_rr(src, dest); + } + + void or32(Imm32 imm, RegisterID dest) + { + m_assembler.orl_ir(imm.m_value, dest); + } + + void or32(Imm32 imm, Address address) + { + m_assembler.orl_im(imm.m_value, address.offset, address.base); + } + + void rshift32(RegisterID shift_amount, RegisterID dest) + { + // On x86 we can only shift by ecx; if asked to shift by another register we'll + // need rejig the shift amount into ecx first, and restore the registers afterwards. + if (shift_amount != X86::ecx) { + swap(shift_amount, X86::ecx); + + // E.g. transform "shll %eax, %eax" -> "xchgl %eax, %ecx; shll %ecx, %ecx; xchgl %eax, %ecx" + if (dest == shift_amount) + m_assembler.sarl_CLr(X86::ecx); + // E.g. transform "shll %eax, %ecx" -> "xchgl %eax, %ecx; shll %ecx, %eax; xchgl %eax, %ecx" + else if (dest == X86::ecx) + m_assembler.sarl_CLr(shift_amount); + // E.g. transform "shll %eax, %ebx" -> "xchgl %eax, %ecx; shll %ecx, %ebx; xchgl %eax, %ecx" + else + m_assembler.sarl_CLr(dest); + + swap(shift_amount, X86::ecx); + } else + m_assembler.sarl_CLr(dest); + } + + void rshift32(Imm32 imm, RegisterID dest) + { + m_assembler.sarl_i8r(imm.m_value, dest); + } + + void sub32(RegisterID src, RegisterID dest) + { + m_assembler.subl_rr(src, dest); + } + + void sub32(Imm32 imm, RegisterID dest) + { + m_assembler.subl_ir(imm.m_value, dest); + } + + void sub32(Imm32 imm, Address address) + { + m_assembler.subl_im(imm.m_value, address.offset, address.base); + } + + void sub32(Address src, RegisterID dest) + { + m_assembler.subl_mr(src.offset, src.base, dest); + } + + void xor32(RegisterID src, RegisterID dest) + { + m_assembler.xorl_rr(src, dest); + } + + void xor32(Imm32 imm, RegisterID srcDest) + { + m_assembler.xorl_ir(imm.m_value, srcDest); + } + + + // Memory access operations: + // + // Loads are of the form load(address, destination) and stores of the form + // store(source, address). The source for a store may be an Imm32. Address + // operand objects to loads and store will be implicitly constructed if a + // register is passed. + + void load32(ImplicitAddress address, RegisterID dest) + { + m_assembler.movl_mr(address.offset, address.base, dest); + } + + void load32(BaseIndex address, RegisterID dest) + { + m_assembler.movl_mr(address.offset, address.base, address.index, address.scale, dest); + } + + DataLabel32 load32WithAddressOffsetPatch(Address address, RegisterID dest) + { + m_assembler.movl_mr_disp32(address.offset, address.base, dest); + return DataLabel32(this); + } + + void load16(BaseIndex address, RegisterID dest) + { + m_assembler.movzwl_mr(address.offset, address.base, address.index, address.scale, dest); + } + + DataLabel32 store32WithAddressOffsetPatch(RegisterID src, Address address) + { + m_assembler.movl_rm_disp32(src, address.offset, address.base); + return DataLabel32(this); + } + + void store32(RegisterID src, ImplicitAddress address) + { + m_assembler.movl_rm(src, address.offset, address.base); + } + + void store32(RegisterID src, BaseIndex address) + { + m_assembler.movl_rm(src, address.offset, address.base, address.index, address.scale); + } + + void store32(Imm32 imm, ImplicitAddress address) + { + m_assembler.movl_i32m(imm.m_value, address.offset, address.base); + } + + + // Floating-point operation: + // + // Presently only supports SSE, not x87 floating point. + + void loadDouble(ImplicitAddress address, FPRegisterID dest) + { + ASSERT(isSSE2Present()); + m_assembler.movsd_mr(address.offset, address.base, dest); + } + + void storeDouble(FPRegisterID src, ImplicitAddress address) + { + ASSERT(isSSE2Present()); + m_assembler.movsd_rm(src, address.offset, address.base); + } + + void addDouble(FPRegisterID src, FPRegisterID dest) + { + ASSERT(isSSE2Present()); + m_assembler.addsd_rr(src, dest); + } + + void addDouble(Address src, FPRegisterID dest) + { + ASSERT(isSSE2Present()); + m_assembler.addsd_mr(src.offset, src.base, dest); + } + + void subDouble(FPRegisterID src, FPRegisterID dest) + { + ASSERT(isSSE2Present()); + m_assembler.subsd_rr(src, dest); + } + + void subDouble(Address src, FPRegisterID dest) + { + ASSERT(isSSE2Present()); + m_assembler.subsd_mr(src.offset, src.base, dest); + } + + void mulDouble(FPRegisterID src, FPRegisterID dest) + { + ASSERT(isSSE2Present()); + m_assembler.mulsd_rr(src, dest); + } + + void mulDouble(Address src, FPRegisterID dest) + { + ASSERT(isSSE2Present()); + m_assembler.mulsd_mr(src.offset, src.base, dest); + } + + void convertInt32ToDouble(RegisterID src, FPRegisterID dest) + { + ASSERT(isSSE2Present()); + m_assembler.cvtsi2sd_rr(src, dest); + } + + Jump branchDouble(DoubleCondition cond, FPRegisterID left, FPRegisterID right) + { + ASSERT(isSSE2Present()); + m_assembler.ucomisd_rr(right, left); + return Jump(m_assembler.jCC(x86Condition(cond))); + } + + // Truncates 'src' to an integer, and places the resulting 'dest'. + // If the result is not representable as a 32 bit value, branch. + // May also branch for some values that are representable in 32 bits + // (specifically, in this case, INT_MIN). + Jump branchTruncateDoubleToInt32(FPRegisterID src, RegisterID dest) + { + ASSERT(isSSE2Present()); + m_assembler.cvttsd2si_rr(src, dest); + return branch32(Equal, dest, Imm32(0x80000000)); + } + + + // Stack manipulation operations: + // + // The ABI is assumed to provide a stack abstraction to memory, + // containing machine word sized units of data. Push and pop + // operations add and remove a single register sized unit of data + // to or from the stack. Peek and poke operations read or write + // values on the stack, without moving the current stack position. + + void pop(RegisterID dest) + { + m_assembler.pop_r(dest); + } + + void push(RegisterID src) + { + m_assembler.push_r(src); + } + + void push(Address address) + { + m_assembler.push_m(address.offset, address.base); + } + + void push(Imm32 imm) + { + m_assembler.push_i32(imm.m_value); + } + + + // Register move operations: + // + // Move values in registers. + + void move(Imm32 imm, RegisterID dest) + { + // Note: on 64-bit the Imm32 value is zero extended into the register, it + // may be useful to have a separate version that sign extends the value? + if (!imm.m_value) + m_assembler.xorl_rr(dest, dest); + else + m_assembler.movl_i32r(imm.m_value, dest); + } + +#if PLATFORM(X86_64) + void move(RegisterID src, RegisterID dest) + { + // Note: on 64-bit this is is a full register move; perhaps it would be + // useful to have separate move32 & movePtr, with move32 zero extending? + m_assembler.movq_rr(src, dest); + } + + void move(ImmPtr imm, RegisterID dest) + { + if (CAN_SIGN_EXTEND_U32_64(imm.asIntptr())) + m_assembler.movl_i32r(static_cast(imm.asIntptr()), dest); + else + m_assembler.movq_i64r(imm.asIntptr(), dest); + } + + void swap(RegisterID reg1, RegisterID reg2) + { + m_assembler.xchgq_rr(reg1, reg2); + } + + void signExtend32ToPtr(RegisterID src, RegisterID dest) + { + m_assembler.movsxd_rr(src, dest); + } + + void zeroExtend32ToPtr(RegisterID src, RegisterID dest) + { + m_assembler.movl_rr(src, dest); + } +#else + void move(RegisterID src, RegisterID dest) + { + if (src != dest) + m_assembler.movl_rr(src, dest); + } + + void move(ImmPtr imm, RegisterID dest) + { + m_assembler.movl_i32r(imm.asIntptr(), dest); + } + + void swap(RegisterID reg1, RegisterID reg2) + { + if (reg1 != reg2) + m_assembler.xchgl_rr(reg1, reg2); + } + + void signExtend32ToPtr(RegisterID src, RegisterID dest) + { + move(src, dest); + } + + void zeroExtend32ToPtr(RegisterID src, RegisterID dest) + { + move(src, dest); + } +#endif + + + // Forwards / external control flow operations: + // + // This set of jump and conditional branch operations return a Jump + // object which may linked at a later point, allow forwards jump, + // or jumps that will require external linkage (after the code has been + // relocated). + // + // For branches, signed <, >, <= and >= are denoted as l, g, le, and ge + // respecitvely, for unsigned comparisons the names b, a, be, and ae are + // used (representing the names 'below' and 'above'). + // + // Operands to the comparision are provided in the expected order, e.g. + // jle32(reg1, Imm32(5)) will branch if the value held in reg1, when + // treated as a signed 32bit value, is less than or equal to 5. + // + // jz and jnz test whether the first operand is equal to zero, and take + // an optional second operand of a mask under which to perform the test. + +public: + Jump branch32(Condition cond, RegisterID left, RegisterID right) + { + m_assembler.cmpl_rr(right, left); + return Jump(m_assembler.jCC(x86Condition(cond))); + } + + Jump branch32(Condition cond, RegisterID left, Imm32 right) + { + if (((cond == Equal) || (cond == NotEqual)) && !right.m_value) + m_assembler.testl_rr(left, left); + else + m_assembler.cmpl_ir(right.m_value, left); + return Jump(m_assembler.jCC(x86Condition(cond))); + } + + Jump branch32(Condition cond, RegisterID left, Address right) + { + m_assembler.cmpl_mr(right.offset, right.base, left); + return Jump(m_assembler.jCC(x86Condition(cond))); + } + + Jump branch32(Condition cond, Address left, RegisterID right) + { + m_assembler.cmpl_rm(right, left.offset, left.base); + return Jump(m_assembler.jCC(x86Condition(cond))); + } + + Jump branch32(Condition cond, Address left, Imm32 right) + { + m_assembler.cmpl_im(right.m_value, left.offset, left.base); + return Jump(m_assembler.jCC(x86Condition(cond))); + } + + Jump branch32(Condition cond, BaseIndex left, Imm32 right) + { + m_assembler.cmpl_im(right.m_value, left.offset, left.base, left.index, left.scale); + return Jump(m_assembler.jCC(x86Condition(cond))); + } + + Jump branch16(Condition cond, BaseIndex left, RegisterID right) + { + m_assembler.cmpw_rm(right, left.offset, left.base, left.index, left.scale); + return Jump(m_assembler.jCC(x86Condition(cond))); + } + + Jump branch16(Condition cond, BaseIndex left, Imm32 right) + { + ASSERT(!(right.m_value & 0xFFFF0000)); + + m_assembler.cmpw_im(right.m_value, left.offset, left.base, left.index, left.scale); + return Jump(m_assembler.jCC(x86Condition(cond))); + } + + Jump branchTest32(Condition cond, RegisterID reg, RegisterID mask) + { + ASSERT((cond == Zero) || (cond == NonZero)); + m_assembler.testl_rr(reg, mask); + return Jump(m_assembler.jCC(x86Condition(cond))); + } + + Jump branchTest32(Condition cond, RegisterID reg, Imm32 mask = Imm32(-1)) + { + ASSERT((cond == Zero) || (cond == NonZero)); + // if we are only interested in the low seven bits, this can be tested with a testb + if (mask.m_value == -1) + m_assembler.testl_rr(reg, reg); + else if ((mask.m_value & ~0x7f) == 0) + m_assembler.testb_i8r(mask.m_value, reg); + else + m_assembler.testl_i32r(mask.m_value, reg); + return Jump(m_assembler.jCC(x86Condition(cond))); + } + + Jump branchTest32(Condition cond, Address address, Imm32 mask = Imm32(-1)) + { + ASSERT((cond == Zero) || (cond == NonZero)); + if (mask.m_value == -1) + m_assembler.cmpl_im(0, address.offset, address.base); + else + m_assembler.testl_i32m(mask.m_value, address.offset, address.base); + return Jump(m_assembler.jCC(x86Condition(cond))); + } + + Jump branchTest32(Condition cond, BaseIndex address, Imm32 mask = Imm32(-1)) + { + ASSERT((cond == Zero) || (cond == NonZero)); + if (mask.m_value == -1) + m_assembler.cmpl_im(0, address.offset, address.base, address.index, address.scale); + else + m_assembler.testl_i32m(mask.m_value, address.offset, address.base, address.index, address.scale); + return Jump(m_assembler.jCC(x86Condition(cond))); + } + + Jump jump() + { + return Jump(m_assembler.jmp()); + } + + void jump(RegisterID target) + { + m_assembler.jmp_r(target); + } + + // Address is a memory location containing the address to jump to + void jump(Address address) + { + m_assembler.jmp_m(address.offset, address.base); + } + + + // Arithmetic control flow operations: + // + // This set of conditional branch operations branch based + // on the result of an arithmetic operation. The operation + // is performed as normal, storing the result. + // + // * jz operations branch if the result is zero. + // * jo operations branch if the (signed) arithmetic + // operation caused an overflow to occur. + + Jump branchAdd32(Condition cond, RegisterID src, RegisterID dest) + { + ASSERT((cond == Overflow) || (cond == Signed) || (cond == Zero) || (cond == NonZero)); + add32(src, dest); + return Jump(m_assembler.jCC(x86Condition(cond))); + } + + Jump branchAdd32(Condition cond, Imm32 imm, RegisterID dest) + { + ASSERT((cond == Overflow) || (cond == Signed) || (cond == Zero) || (cond == NonZero)); + add32(imm, dest); + return Jump(m_assembler.jCC(x86Condition(cond))); + } + + Jump branchMul32(Condition cond, RegisterID src, RegisterID dest) + { + ASSERT(cond == Overflow); + mul32(src, dest); + return Jump(m_assembler.jCC(x86Condition(cond))); + } + + Jump branchMul32(Condition cond, Imm32 imm, RegisterID src, RegisterID dest) + { + ASSERT(cond == Overflow); + mul32(imm, src, dest); + return Jump(m_assembler.jCC(x86Condition(cond))); + } + + Jump branchSub32(Condition cond, RegisterID src, RegisterID dest) + { + ASSERT((cond == Overflow) || (cond == Signed) || (cond == Zero) || (cond == NonZero)); + sub32(src, dest); + return Jump(m_assembler.jCC(x86Condition(cond))); + } + + Jump branchSub32(Condition cond, Imm32 imm, RegisterID dest) + { + ASSERT((cond == Overflow) || (cond == Signed) || (cond == Zero) || (cond == NonZero)); + sub32(imm, dest); + return Jump(m_assembler.jCC(x86Condition(cond))); + } + + + // Miscellaneous operations: + + void breakpoint() + { + m_assembler.int3(); + } + + Call nearCall() + { + return Call(m_assembler.call(), Call::LinkableNear); + } + + Call call(RegisterID target) + { + return Call(m_assembler.call(target), Call::None); + } + + void call(Address address) + { + m_assembler.call_m(address.offset, address.base); + } + + void ret() + { + m_assembler.ret(); + } + + void set32(Condition cond, RegisterID left, RegisterID right, RegisterID dest) + { + m_assembler.cmpl_rr(right, left); + m_assembler.setCC_r(x86Condition(cond), dest); + m_assembler.movzbl_rr(dest, dest); + } + + void set32(Condition cond, RegisterID left, Imm32 right, RegisterID dest) + { + if (((cond == Equal) || (cond == NotEqual)) && !right.m_value) + m_assembler.testl_rr(left, left); + else + m_assembler.cmpl_ir(right.m_value, left); + m_assembler.setCC_r(x86Condition(cond), dest); + m_assembler.movzbl_rr(dest, dest); + } + + // FIXME: + // The mask should be optional... paerhaps the argument order should be + // dest-src, operations always have a dest? ... possibly not true, considering + // asm ops like test, or pseudo ops like pop(). + void setTest32(Condition cond, Address address, Imm32 mask, RegisterID dest) + { + if (mask.m_value == -1) + m_assembler.cmpl_im(0, address.offset, address.base); + else + m_assembler.testl_i32m(mask.m_value, address.offset, address.base); + m_assembler.setCC_r(x86Condition(cond), dest); + m_assembler.movzbl_rr(dest, dest); + } + +protected: + X86Assembler::Condition x86Condition(Condition cond) + { + return static_cast(cond); + } + + X86Assembler::Condition x86Condition(DoubleCondition cond) + { + return static_cast(cond); + } + +private: + // Only MacroAssemblerX86 should be using the following method; SSE2 is always available on + // x86_64, and clients & subclasses of MacroAssembler should be using 'supportsFloatingPoint()'. + friend class MacroAssemblerX86; + +#if PLATFORM(X86) +#if PLATFORM(MAC) + + // All X86 Macs are guaranteed to support at least SSE2, + static bool isSSE2Present() + { + return true; + } + +#else // PLATFORM(MAC) + + enum SSE2CheckState { + NotCheckedSSE2, + HasSSE2, + NoSSE2 + }; + + static bool isSSE2Present() + { + if (s_sse2CheckState == NotCheckedSSE2) { + // Default the flags value to zero; if the compiler is + // not MSVC or GCC we will read this as SSE2 not present. + int flags = 0; +#if COMPILER(MSVC) + _asm { + mov eax, 1 // cpuid function 1 gives us the standard feature set + cpuid; + mov flags, edx; + } +#elif COMPILER(GCC) + asm ( + "movl $0x1, %%eax;" + "pushl %%ebx;" + "cpuid;" + "popl %%ebx;" + "movl %%edx, %0;" + : "=g" (flags) + : + : "%eax", "%ecx", "%edx" + ); +#endif + static const int SSE2FeatureBit = 1 << 26; + s_sse2CheckState = (flags & SSE2FeatureBit) ? HasSSE2 : NoSSE2; + } + // Only check once. + ASSERT(s_sse2CheckState != NotCheckedSSE2); + + return s_sse2CheckState == HasSSE2; + } + + static SSE2CheckState s_sse2CheckState; + +#endif // PLATFORM(MAC) +#elif !defined(NDEBUG) // PLATFORM(X86) + + // On x86-64 we should never be checking for SSE2 in a non-debug build, + // but non debug add this method to keep the asserts above happy. + static bool isSSE2Present() + { + return true; + } + +#endif +}; + +} // namespace JSC + +#endif // ENABLE(ASSEMBLER) + +#endif // MacroAssemblerX86Common_h diff --git a/src/3rdparty/webkit/JavaScriptCore/assembler/MacroAssemblerX86_64.h b/src/3rdparty/webkit/JavaScriptCore/assembler/MacroAssemblerX86_64.h new file mode 100644 index 0000000..4da7fe6 --- /dev/null +++ b/src/3rdparty/webkit/JavaScriptCore/assembler/MacroAssemblerX86_64.h @@ -0,0 +1,446 @@ +/* + * Copyright (C) 2008 Apple Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef MacroAssemblerX86_64_h +#define MacroAssemblerX86_64_h + +#include + +#if ENABLE(ASSEMBLER) && PLATFORM(X86_64) + +#include "MacroAssemblerX86Common.h" + +namespace JSC { + +class MacroAssemblerX86_64 : public MacroAssemblerX86Common { +protected: + static const X86::RegisterID scratchRegister = X86::r11; + +public: + static const Scale ScalePtr = TimesEight; + + using MacroAssemblerX86Common::add32; + using MacroAssemblerX86Common::and32; + using MacroAssemblerX86Common::or32; + using MacroAssemblerX86Common::sub32; + using MacroAssemblerX86Common::load32; + using MacroAssemblerX86Common::store32; + using MacroAssemblerX86Common::call; + + void add32(Imm32 imm, AbsoluteAddress address) + { + move(ImmPtr(address.m_ptr), scratchRegister); + add32(imm, Address(scratchRegister)); + } + + void and32(Imm32 imm, AbsoluteAddress address) + { + move(ImmPtr(address.m_ptr), scratchRegister); + and32(imm, Address(scratchRegister)); + } + + void or32(Imm32 imm, AbsoluteAddress address) + { + move(ImmPtr(address.m_ptr), scratchRegister); + or32(imm, Address(scratchRegister)); + } + + void sub32(Imm32 imm, AbsoluteAddress address) + { + move(ImmPtr(address.m_ptr), scratchRegister); + sub32(imm, Address(scratchRegister)); + } + + void load32(void* address, RegisterID dest) + { + if (dest == X86::eax) + m_assembler.movl_mEAX(address); + else { + move(X86::eax, dest); + m_assembler.movl_mEAX(address); + swap(X86::eax, dest); + } + } + + void store32(Imm32 imm, void* address) + { + move(X86::eax, scratchRegister); + move(imm, X86::eax); + m_assembler.movl_EAXm(address); + move(scratchRegister, X86::eax); + } + + Call call() + { + DataLabelPtr label = moveWithPatch(ImmPtr(0), scratchRegister); + Call result = Call(m_assembler.call(scratchRegister), Call::Linkable); + ASSERT(differenceBetween(label, result) == REPTACH_OFFSET_CALL_R11); + return result; + } + + Call tailRecursiveCall() + { + DataLabelPtr label = moveWithPatch(ImmPtr(0), scratchRegister); + Jump newJump = Jump(m_assembler.jmp_r(scratchRegister)); + ASSERT(differenceBetween(label, newJump) == REPTACH_OFFSET_CALL_R11); + return Call::fromTailJump(newJump); + } + + Call makeTailRecursiveCall(Jump oldJump) + { + oldJump.link(this); + DataLabelPtr label = moveWithPatch(ImmPtr(0), scratchRegister); + Jump newJump = Jump(m_assembler.jmp_r(scratchRegister)); + ASSERT(differenceBetween(label, newJump) == REPTACH_OFFSET_CALL_R11); + return Call::fromTailJump(newJump); + } + + + void addPtr(RegisterID src, RegisterID dest) + { + m_assembler.addq_rr(src, dest); + } + + void addPtr(Imm32 imm, RegisterID srcDest) + { + m_assembler.addq_ir(imm.m_value, srcDest); + } + + void addPtr(ImmPtr imm, RegisterID dest) + { + move(imm, scratchRegister); + m_assembler.addq_rr(scratchRegister, dest); + } + + void addPtr(Imm32 imm, RegisterID src, RegisterID dest) + { + m_assembler.leaq_mr(imm.m_value, src, dest); + } + + void addPtr(Imm32 imm, Address address) + { + m_assembler.addq_im(imm.m_value, address.offset, address.base); + } + + void addPtr(Imm32 imm, AbsoluteAddress address) + { + move(ImmPtr(address.m_ptr), scratchRegister); + addPtr(imm, Address(scratchRegister)); + } + + void andPtr(RegisterID src, RegisterID dest) + { + m_assembler.andq_rr(src, dest); + } + + void andPtr(Imm32 imm, RegisterID srcDest) + { + m_assembler.andq_ir(imm.m_value, srcDest); + } + + void orPtr(RegisterID src, RegisterID dest) + { + m_assembler.orq_rr(src, dest); + } + + void orPtr(ImmPtr imm, RegisterID dest) + { + move(imm, scratchRegister); + m_assembler.orq_rr(scratchRegister, dest); + } + + void orPtr(Imm32 imm, RegisterID dest) + { + m_assembler.orq_ir(imm.m_value, dest); + } + + void rshiftPtr(RegisterID shift_amount, RegisterID dest) + { + // On x86 we can only shift by ecx; if asked to shift by another register we'll + // need rejig the shift amount into ecx first, and restore the registers afterwards. + if (shift_amount != X86::ecx) { + swap(shift_amount, X86::ecx); + + // E.g. transform "shll %eax, %eax" -> "xchgl %eax, %ecx; shll %ecx, %ecx; xchgl %eax, %ecx" + if (dest == shift_amount) + m_assembler.sarq_CLr(X86::ecx); + // E.g. transform "shll %eax, %ecx" -> "xchgl %eax, %ecx; shll %ecx, %eax; xchgl %eax, %ecx" + else if (dest == X86::ecx) + m_assembler.sarq_CLr(shift_amount); + // E.g. transform "shll %eax, %ebx" -> "xchgl %eax, %ecx; shll %ecx, %ebx; xchgl %eax, %ecx" + else + m_assembler.sarq_CLr(dest); + + swap(shift_amount, X86::ecx); + } else + m_assembler.sarq_CLr(dest); + } + + void rshiftPtr(Imm32 imm, RegisterID dest) + { + m_assembler.sarq_i8r(imm.m_value, dest); + } + + void subPtr(RegisterID src, RegisterID dest) + { + m_assembler.subq_rr(src, dest); + } + + void subPtr(Imm32 imm, RegisterID dest) + { + m_assembler.subq_ir(imm.m_value, dest); + } + + void subPtr(ImmPtr imm, RegisterID dest) + { + move(imm, scratchRegister); + m_assembler.subq_rr(scratchRegister, dest); + } + + void xorPtr(RegisterID src, RegisterID dest) + { + m_assembler.xorq_rr(src, dest); + } + + void xorPtr(Imm32 imm, RegisterID srcDest) + { + m_assembler.xorq_ir(imm.m_value, srcDest); + } + + + void loadPtr(ImplicitAddress address, RegisterID dest) + { + m_assembler.movq_mr(address.offset, address.base, dest); + } + + void loadPtr(BaseIndex address, RegisterID dest) + { + m_assembler.movq_mr(address.offset, address.base, address.index, address.scale, dest); + } + + void loadPtr(void* address, RegisterID dest) + { + if (dest == X86::eax) + m_assembler.movq_mEAX(address); + else { + move(X86::eax, dest); + m_assembler.movq_mEAX(address); + swap(X86::eax, dest); + } + } + + DataLabel32 loadPtrWithAddressOffsetPatch(Address address, RegisterID dest) + { + m_assembler.movq_mr_disp32(address.offset, address.base, dest); + return DataLabel32(this); + } + + void storePtr(RegisterID src, ImplicitAddress address) + { + m_assembler.movq_rm(src, address.offset, address.base); + } + + void storePtr(RegisterID src, BaseIndex address) + { + m_assembler.movq_rm(src, address.offset, address.base, address.index, address.scale); + } + + void storePtr(RegisterID src, void* address) + { + if (src == X86::eax) + m_assembler.movq_EAXm(address); + else { + swap(X86::eax, src); + m_assembler.movq_EAXm(address); + swap(X86::eax, src); + } + } + + void storePtr(ImmPtr imm, ImplicitAddress address) + { + intptr_t ptr = imm.asIntptr(); + if (CAN_SIGN_EXTEND_32_64(ptr)) + m_assembler.movq_i32m(static_cast(ptr), address.offset, address.base); + else { + move(imm, scratchRegister); + storePtr(scratchRegister, address); + } + } + + DataLabel32 storePtrWithAddressOffsetPatch(RegisterID src, Address address) + { + m_assembler.movq_rm_disp32(src, address.offset, address.base); + return DataLabel32(this); + } + + void movePtrToDouble(RegisterID src, FPRegisterID dest) + { + m_assembler.movq_rr(src, dest); + } + + void moveDoubleToPtr(FPRegisterID src, RegisterID dest) + { + m_assembler.movq_rr(src, dest); + } + + void setPtr(Condition cond, RegisterID left, Imm32 right, RegisterID dest) + { + if (((cond == Equal) || (cond == NotEqual)) && !right.m_value) + m_assembler.testq_rr(left, left); + else + m_assembler.cmpq_ir(right.m_value, left); + m_assembler.setCC_r(x86Condition(cond), dest); + m_assembler.movzbl_rr(dest, dest); + } + + Jump branchPtr(Condition cond, RegisterID left, RegisterID right) + { + m_assembler.cmpq_rr(right, left); + return Jump(m_assembler.jCC(x86Condition(cond))); + } + + Jump branchPtr(Condition cond, RegisterID left, ImmPtr right) + { + intptr_t imm = right.asIntptr(); + if (CAN_SIGN_EXTEND_32_64(imm)) { + if (!imm) + m_assembler.testq_rr(left, left); + else + m_assembler.cmpq_ir(imm, left); + return Jump(m_assembler.jCC(x86Condition(cond))); + } else { + move(right, scratchRegister); + return branchPtr(cond, left, scratchRegister); + } + } + + Jump branchPtr(Condition cond, RegisterID left, Address right) + { + m_assembler.cmpq_mr(right.offset, right.base, left); + return Jump(m_assembler.jCC(x86Condition(cond))); + } + + Jump branchPtr(Condition cond, AbsoluteAddress left, RegisterID right) + { + move(ImmPtr(left.m_ptr), scratchRegister); + return branchPtr(cond, Address(scratchRegister), right); + } + + Jump branchPtr(Condition cond, Address left, RegisterID right) + { + m_assembler.cmpq_rm(right, left.offset, left.base); + return Jump(m_assembler.jCC(x86Condition(cond))); + } + + Jump branchPtr(Condition cond, Address left, ImmPtr right) + { + move(right, scratchRegister); + return branchPtr(cond, left, scratchRegister); + } + + Jump branchTestPtr(Condition cond, RegisterID reg, RegisterID mask) + { + m_assembler.testq_rr(reg, mask); + return Jump(m_assembler.jCC(x86Condition(cond))); + } + + Jump branchTestPtr(Condition cond, RegisterID reg, Imm32 mask = Imm32(-1)) + { + // if we are only interested in the low seven bits, this can be tested with a testb + if (mask.m_value == -1) + m_assembler.testq_rr(reg, reg); + else if ((mask.m_value & ~0x7f) == 0) + m_assembler.testb_i8r(mask.m_value, reg); + else + m_assembler.testq_i32r(mask.m_value, reg); + return Jump(m_assembler.jCC(x86Condition(cond))); + } + + Jump branchTestPtr(Condition cond, Address address, Imm32 mask = Imm32(-1)) + { + if (mask.m_value == -1) + m_assembler.cmpq_im(0, address.offset, address.base); + else + m_assembler.testq_i32m(mask.m_value, address.offset, address.base); + return Jump(m_assembler.jCC(x86Condition(cond))); + } + + Jump branchTestPtr(Condition cond, BaseIndex address, Imm32 mask = Imm32(-1)) + { + if (mask.m_value == -1) + m_assembler.cmpq_im(0, address.offset, address.base, address.index, address.scale); + else + m_assembler.testq_i32m(mask.m_value, address.offset, address.base, address.index, address.scale); + return Jump(m_assembler.jCC(x86Condition(cond))); + } + + + Jump branchAddPtr(Condition cond, RegisterID src, RegisterID dest) + { + ASSERT((cond == Overflow) || (cond == Zero) || (cond == NonZero)); + addPtr(src, dest); + return Jump(m_assembler.jCC(x86Condition(cond))); + } + + Jump branchSubPtr(Condition cond, Imm32 imm, RegisterID dest) + { + ASSERT((cond == Overflow) || (cond == Zero) || (cond == NonZero)); + subPtr(imm, dest); + return Jump(m_assembler.jCC(x86Condition(cond))); + } + + DataLabelPtr moveWithPatch(ImmPtr initialValue, RegisterID dest) + { + m_assembler.movq_i64r(initialValue.asIntptr(), dest); + return DataLabelPtr(this); + } + + Jump branchPtrWithPatch(Condition cond, RegisterID left, DataLabelPtr& dataLabel, ImmPtr initialRightValue = ImmPtr(0)) + { + dataLabel = moveWithPatch(initialRightValue, scratchRegister); + return branchPtr(cond, left, scratchRegister); + } + + Jump branchPtrWithPatch(Condition cond, Address left, DataLabelPtr& dataLabel, ImmPtr initialRightValue = ImmPtr(0)) + { + dataLabel = moveWithPatch(initialRightValue, scratchRegister); + return branchPtr(cond, left, scratchRegister); + } + + DataLabelPtr storePtrWithPatch(ImmPtr initialValue, ImplicitAddress address) + { + DataLabelPtr label = moveWithPatch(initialValue, scratchRegister); + storePtr(scratchRegister, address); + return label; + } + + bool supportsFloatingPoint() const { return true; } +}; + +} // namespace JSC + +#endif // ENABLE(ASSEMBLER) + +#endif // MacroAssemblerX86_64_h diff --git a/src/3rdparty/webkit/JavaScriptCore/assembler/X86Assembler.h b/src/3rdparty/webkit/JavaScriptCore/assembler/X86Assembler.h index 3b0ce65..7a8b58d 100644 --- a/src/3rdparty/webkit/JavaScriptCore/assembler/X86Assembler.h +++ b/src/3rdparty/webkit/JavaScriptCore/assembler/X86Assembler.h @@ -82,8 +82,32 @@ class X86Assembler { public: typedef X86::RegisterID RegisterID; typedef X86::XMMRegisterID XMMRegisterID; + typedef XMMRegisterID FPRegisterID; typedef enum { + ConditionO, + ConditionNO, + ConditionB, + ConditionAE, + ConditionE, + ConditionNE, + ConditionBE, + ConditionA, + ConditionS, + ConditionNS, + ConditionP, + ConditionNP, + ConditionL, + ConditionGE, + ConditionLE, + ConditionG, + + ConditionC = ConditionB, + ConditionNC = ConditionAE, + } Condition; + +private: + typedef enum { OP_ADD_EvGv = 0x01, OP_ADD_GvEv = 0x03, OP_OR_EvGv = 0x09, @@ -145,31 +169,30 @@ public: OP2_ADDSD_VsdWsd = 0x58, OP2_MULSD_VsdWsd = 0x59, OP2_SUBSD_VsdWsd = 0x5C, + OP2_MOVD_VdEd = 0x6E, OP2_MOVD_EdVd = 0x7E, - OP2_JO_rel32 = 0x80, - OP2_JB_rel32 = 0x82, - OP2_JAE_rel32 = 0x83, - OP2_JE_rel32 = 0x84, - OP2_JNE_rel32 = 0x85, - OP2_JBE_rel32 = 0x86, - OP2_JA_rel32 = 0x87, - OP2_JS_rel32 = 0x88, - OP2_JP_rel32 = 0x8A, - OP2_JL_rel32 = 0x8C, - OP2_JGE_rel32 = 0x8D, - OP2_JLE_rel32 = 0x8E, - OP2_JG_rel32 = 0x8F, - OP_SETE = 0x94, - OP_SETNE = 0x95, + OP2_JCC_rel32 = 0x80, + OP_SETCC = 0x90, OP2_IMUL_GvEv = 0xAF, OP2_MOVZX_GvEb = 0xB6, OP2_MOVZX_GvEw = 0xB7, OP2_PEXTRW_GdUdIb = 0xC5, } TwoByteOpcodeID; + TwoByteOpcodeID jccRel32(Condition cond) + { + return (TwoByteOpcodeID)(OP2_JCC_rel32 + cond); + } + + TwoByteOpcodeID setccOpcode(Condition cond) + { + return (TwoByteOpcodeID)(OP_SETCC + cond); + } + typedef enum { GROUP1_OP_ADD = 0, GROUP1_OP_OR = 1, + GROUP1_OP_ADC = 2, GROUP1_OP_AND = 4, GROUP1_OP_SUB = 5, GROUP1_OP_XOR = 6, @@ -191,9 +214,6 @@ public: GROUP11_MOV = 0, } GroupOpcodeID; - // Opaque label types - -private: class X86InstructionFormatter; public: @@ -221,16 +241,22 @@ public: public: JmpDst() : m_offset(-1) + , m_used(false) { } + bool isUsed() const { return m_used; } + void used() { m_used = true; } private: JmpDst(int offset) : m_offset(offset) + , m_used(false) { + ASSERT(m_offset == offset); } - int m_offset; + int m_offset : 31; + bool m_used : 1; }; X86Assembler() @@ -269,6 +295,19 @@ public: // Arithmetic operations: +#if !PLATFORM(X86_64) + void adcl_im(int imm, void* addr) + { + if (CAN_SIGN_EXTEND_8_32(imm)) { + m_formatter.oneByteOp(OP_GROUP1_EvIb, GROUP1_OP_ADC, addr); + m_formatter.immediate8(imm); + } else { + m_formatter.oneByteOp(OP_GROUP1_EvIz, GROUP1_OP_ADC, addr); + m_formatter.immediate32(imm); + } + } +#endif + void addl_rr(RegisterID src, RegisterID dst) { m_formatter.oneByteOp(OP_ADD_EvGv, src, dst); @@ -317,6 +356,17 @@ public: m_formatter.immediate32(imm); } } + + void addq_im(int imm, int offset, RegisterID base) + { + if (CAN_SIGN_EXTEND_8_32(imm)) { + m_formatter.oneByteOp64(OP_GROUP1_EvIb, GROUP1_OP_ADD, base, offset); + m_formatter.immediate8(imm); + } else { + m_formatter.oneByteOp64(OP_GROUP1_EvIz, GROUP1_OP_ADD, base, offset); + m_formatter.immediate32(imm); + } + } #else void addl_im(int imm, void* addr) { @@ -346,6 +396,17 @@ public: } } + void andl_im(int imm, int offset, RegisterID base) + { + if (CAN_SIGN_EXTEND_8_32(imm)) { + m_formatter.oneByteOp(OP_GROUP1_EvIb, GROUP1_OP_AND, base, offset); + m_formatter.immediate8(imm); + } else { + m_formatter.oneByteOp(OP_GROUP1_EvIz, GROUP1_OP_AND, base, offset); + m_formatter.immediate32(imm); + } + } + #if PLATFORM(X86_64) void andq_rr(RegisterID src, RegisterID dst) { @@ -362,6 +423,17 @@ public: m_formatter.immediate32(imm); } } +#else + void andl_im(int imm, void* addr) + { + if (CAN_SIGN_EXTEND_8_32(imm)) { + m_formatter.oneByteOp(OP_GROUP1_EvIb, GROUP1_OP_AND, addr); + m_formatter.immediate8(imm); + } else { + m_formatter.oneByteOp(OP_GROUP1_EvIz, GROUP1_OP_AND, addr); + m_formatter.immediate32(imm); + } + } #endif void notl_r(RegisterID dst) @@ -390,6 +462,17 @@ public: } } + void orl_im(int imm, int offset, RegisterID base) + { + if (CAN_SIGN_EXTEND_8_32(imm)) { + m_formatter.oneByteOp(OP_GROUP1_EvIb, GROUP1_OP_OR, base, offset); + m_formatter.immediate8(imm); + } else { + m_formatter.oneByteOp(OP_GROUP1_EvIz, GROUP1_OP_OR, base, offset); + m_formatter.immediate32(imm); + } + } + #if PLATFORM(X86_64) void orq_rr(RegisterID src, RegisterID dst) { @@ -406,6 +489,17 @@ public: m_formatter.immediate32(imm); } } +#else + void orl_im(int imm, void* addr) + { + if (CAN_SIGN_EXTEND_8_32(imm)) { + m_formatter.oneByteOp(OP_GROUP1_EvIb, GROUP1_OP_OR, addr); + m_formatter.immediate8(imm); + } else { + m_formatter.oneByteOp(OP_GROUP1_EvIz, GROUP1_OP_OR, addr); + m_formatter.immediate32(imm); + } + } #endif void subl_rr(RegisterID src, RegisterID dst) @@ -441,6 +535,11 @@ public: } #if PLATFORM(X86_64) + void subq_rr(RegisterID src, RegisterID dst) + { + m_formatter.oneByteOp64(OP_SUB_EvGv, src, dst); + } + void subq_ir(int imm, RegisterID dst) { if (CAN_SIGN_EXTEND_8_32(imm)) { @@ -634,6 +733,11 @@ public: m_formatter.oneByteOp64(OP_CMP_EvGv, src, base, offset); } + void cmpq_mr(int offset, RegisterID base, RegisterID src) + { + m_formatter.oneByteOp64(OP_CMP_GvEv, src, base, offset); + } + void cmpq_ir(int imm, RegisterID dst) { if (CAN_SIGN_EXTEND_8_32(imm)) { @@ -690,6 +794,19 @@ public: m_formatter.oneByteOp(OP_CMP_EvGv, src, base, index, scale, offset); } + void cmpw_im(int imm, int offset, RegisterID base, RegisterID index, int scale) + { + if (CAN_SIGN_EXTEND_8_32(imm)) { + m_formatter.prefix(PRE_OPERAND_SIZE); + m_formatter.oneByteOp(OP_GROUP1_EvIb, GROUP1_OP_CMP, base, index, scale, offset); + m_formatter.immediate8(imm); + } else { + m_formatter.prefix(PRE_OPERAND_SIZE); + m_formatter.oneByteOp(OP_GROUP1_EvIz, GROUP1_OP_CMP, base, index, scale, offset); + m_formatter.immediate16(imm); + } + } + void testl_rr(RegisterID src, RegisterID dst) { m_formatter.oneByteOp(OP_TEST_EvGv, src, dst); @@ -738,15 +855,26 @@ public: } #endif + void testw_rr(RegisterID src, RegisterID dst) + { + m_formatter.prefix(PRE_OPERAND_SIZE); + m_formatter.oneByteOp(OP_TEST_EvGv, src, dst); + } + void testb_i8r(int imm, RegisterID dst) { m_formatter.oneByteOp8(OP_GROUP3_EbIb, GROUP3_OP_TEST, dst); m_formatter.immediate8(imm); } + void setCC_r(Condition cond, RegisterID dst) + { + m_formatter.twoByteOp8(setccOpcode(cond), (GroupOpcodeID)0, dst); + } + void sete_r(RegisterID dst) { - m_formatter.twoByteOp8(OP_SETE, (GroupOpcodeID)0, dst); + m_formatter.twoByteOp8(setccOpcode(ConditionE), (GroupOpcodeID)0, dst); } void setz_r(RegisterID dst) @@ -756,7 +884,7 @@ public: void setne_r(RegisterID dst) { - m_formatter.twoByteOp8(OP_SETNE, (GroupOpcodeID)0, dst); + m_formatter.twoByteOp8(setccOpcode(ConditionNE), (GroupOpcodeID)0, dst); } void setnz_r(RegisterID dst) @@ -877,6 +1005,12 @@ public: m_formatter.immediate64(reinterpret_cast(addr)); } + void movq_EAXm(void* addr) + { + m_formatter.oneByteOp64(OP_MOV_OvEAX); + m_formatter.immediate64(reinterpret_cast(addr)); + } + void movq_mr(int offset, RegisterID base, RegisterID dst) { m_formatter.oneByteOp64(OP_MOV_GvEv, dst, base, offset); @@ -892,6 +1026,12 @@ public: m_formatter.oneByteOp64(OP_MOV_GvEv, dst, base, index, scale, offset); } + void movq_i32m(int imm, int offset, RegisterID base) + { + m_formatter.oneByteOp64(OP_GROUP11_EvIz, GROUP11_MOV, base, offset); + m_formatter.immediate32(imm); + } + void movq_i64r(int64_t imm, RegisterID dst) { m_formatter.oneByteOp64(OP_MOV_EAXIv, dst); @@ -905,6 +1045,14 @@ public: #else + void movl_rm(RegisterID src, void* addr) + { + if (src == X86::eax) + movl_EAXm(addr); + else + m_formatter.oneByteOp(OP_MOV_EvGv, src, addr); + } + void movl_mr(void* addr, RegisterID dst) { if (dst == X86::eax) @@ -942,6 +1090,12 @@ public: { m_formatter.oneByteOp(OP_LEA, dst, base, offset); } +#if PLATFORM(X86_64) + void leaq_mr(int offset, RegisterID base, RegisterID dst) + { + m_formatter.oneByteOp64(OP_LEA, dst, base, offset); + } +#endif // Flow control: @@ -956,6 +1110,11 @@ public: m_formatter.oneByteOp(OP_GROUP5_Ev, GROUP5_OP_CALLN, dst); return JmpSrc(m_formatter.size()); } + + void call_m(int offset, RegisterID base) + { + m_formatter.oneByteOp(OP_GROUP5_Ev, GROUP5_OP_CALLN, base, offset); + } JmpSrc jmp() { @@ -963,9 +1122,13 @@ public: return m_formatter.immediateRel32(); } - void jmp_r(RegisterID dst) + // Return a JmpSrc so we have a label to the jump, so we can use this + // To make a tail recursive call on x86-64. The MacroAssembler + // really shouldn't wrap this as a Jump, since it can't be linked. :-/ + JmpSrc jmp_r(RegisterID dst) { m_formatter.oneByteOp(OP_GROUP5_Ev, GROUP5_OP_JMPN, dst); + return JmpSrc(m_formatter.size()); } void jmp_m(int offset, RegisterID base) @@ -975,7 +1138,7 @@ public: JmpSrc jne() { - m_formatter.twoByteOp(OP2_JNE_rel32); + m_formatter.twoByteOp(jccRel32(ConditionNE)); return m_formatter.immediateRel32(); } @@ -986,73 +1149,79 @@ public: JmpSrc je() { - m_formatter.twoByteOp(OP2_JE_rel32); + m_formatter.twoByteOp(jccRel32(ConditionE)); return m_formatter.immediateRel32(); } JmpSrc jl() { - m_formatter.twoByteOp(OP2_JL_rel32); + m_formatter.twoByteOp(jccRel32(ConditionL)); return m_formatter.immediateRel32(); } JmpSrc jb() { - m_formatter.twoByteOp(OP2_JB_rel32); + m_formatter.twoByteOp(jccRel32(ConditionB)); return m_formatter.immediateRel32(); } JmpSrc jle() { - m_formatter.twoByteOp(OP2_JLE_rel32); + m_formatter.twoByteOp(jccRel32(ConditionLE)); return m_formatter.immediateRel32(); } JmpSrc jbe() { - m_formatter.twoByteOp(OP2_JBE_rel32); + m_formatter.twoByteOp(jccRel32(ConditionBE)); return m_formatter.immediateRel32(); } JmpSrc jge() { - m_formatter.twoByteOp(OP2_JGE_rel32); + m_formatter.twoByteOp(jccRel32(ConditionGE)); return m_formatter.immediateRel32(); } JmpSrc jg() { - m_formatter.twoByteOp(OP2_JG_rel32); + m_formatter.twoByteOp(jccRel32(ConditionG)); return m_formatter.immediateRel32(); } JmpSrc ja() { - m_formatter.twoByteOp(OP2_JA_rel32); + m_formatter.twoByteOp(jccRel32(ConditionA)); return m_formatter.immediateRel32(); } JmpSrc jae() { - m_formatter.twoByteOp(OP2_JAE_rel32); + m_formatter.twoByteOp(jccRel32(ConditionAE)); return m_formatter.immediateRel32(); } JmpSrc jo() { - m_formatter.twoByteOp(OP2_JO_rel32); + m_formatter.twoByteOp(jccRel32(ConditionO)); return m_formatter.immediateRel32(); } JmpSrc jp() { - m_formatter.twoByteOp(OP2_JP_rel32); + m_formatter.twoByteOp(jccRel32(ConditionP)); return m_formatter.immediateRel32(); } JmpSrc js() { - m_formatter.twoByteOp(OP2_JS_rel32); + m_formatter.twoByteOp(jccRel32(ConditionS)); + return m_formatter.immediateRel32(); + } + + JmpSrc jCC(Condition cond) + { + m_formatter.twoByteOp(jccRel32(cond)); return m_formatter.immediateRel32(); } @@ -1088,6 +1257,20 @@ public: m_formatter.twoByteOp(OP2_MOVD_EdVd, (RegisterID)src, dst); } +#if PLATFORM(X86_64) + void movq_rr(XMMRegisterID src, RegisterID dst) + { + m_formatter.prefix(PRE_SSE_66); + m_formatter.twoByteOp64(OP2_MOVD_EdVd, (RegisterID)src, dst); + } + + void movq_rr(RegisterID src, XMMRegisterID dst) + { + m_formatter.prefix(PRE_SSE_66); + m_formatter.twoByteOp64(OP2_MOVD_VdEd, (RegisterID)dst, src); + } +#endif + void movsd_rm(XMMRegisterID src, int offset, RegisterID base) { m_formatter.prefix(PRE_SSE_F2); @@ -1131,7 +1314,7 @@ public: m_formatter.twoByteOp(OP2_SUBSD_VsdWsd, (RegisterID)dst, base, offset); } - void ucomis_rr(XMMRegisterID src, XMMRegisterID dst) + void ucomisd_rr(XMMRegisterID src, XMMRegisterID dst) { m_formatter.prefix(PRE_SSE_66); m_formatter.twoByteOp(OP2_UCOMISD_VsdWsd, (RegisterID)dst, (RegisterID)src); @@ -1170,31 +1353,95 @@ public: } // Linking & patching: + // + // 'link' and 'patch' methods are for use on unprotected code - such as the code + // within the AssemblerBuffer, and code being patched by the patch buffer. Once + // code has been finalized it is (platform support permitting) within a non- + // writable region of memory; to modify the code in an execute-only execuable + // pool the 'repatch' and 'relink' methods should be used. - void link(JmpSrc from, JmpDst to) + void linkJump(JmpSrc from, JmpDst to) { - ASSERT(to.m_offset != -1); ASSERT(from.m_offset != -1); - - reinterpret_cast(reinterpret_cast(m_formatter.data()) + from.m_offset)[-1] = to.m_offset - from.m_offset; + ASSERT(to.m_offset != -1); + + char* code = reinterpret_cast(m_formatter.data()); + patchRel32(code + from.m_offset, code + to.m_offset); } - static void patchAddress(void* code, JmpDst position, void* value) + static void linkJump(void* code, JmpSrc from, void* to) { - ASSERT(position.m_offset != -1); - - reinterpret_cast(reinterpret_cast(code) + position.m_offset)[-1] = value; + ASSERT(from.m_offset != -1); + + patchRel32(reinterpret_cast(code) + from.m_offset, to); } - - static void link(void* code, JmpSrc from, void* to) + + static void linkCall(void* code, JmpSrc from, void* to) { ASSERT(from.m_offset != -1); - - reinterpret_cast(reinterpret_cast(code) + from.m_offset)[-1] = reinterpret_cast(to) - (reinterpret_cast(code) + from.m_offset); + + patchRel32(reinterpret_cast(code) + from.m_offset, to); + } + +#if PLATFORM(X86_64) + static void patchPointerForCall(void* where, void* value) + { + reinterpret_cast(where)[-1] = value; + } +#endif + + static void patchPointer(void* code, JmpDst where, void* value) + { + ASSERT(where.m_offset != -1); + + patchPointer(reinterpret_cast(code) + where.m_offset, value); + } + + static void relinkJump(void* from, void* to) + { + ExecutableAllocator::MakeWritable unprotect(reinterpret_cast(from) - sizeof(int32_t), sizeof(int32_t)); + patchRel32(from, to); } + static void relinkCall(void* from, void* to) + { + ExecutableAllocator::MakeWritable unprotect(reinterpret_cast(from) - sizeof(int32_t), sizeof(int32_t)); + patchRel32(from, to); + } + + static void repatchInt32(void* where, int32_t value) + { + ExecutableAllocator::MakeWritable unprotect(reinterpret_cast(where) - sizeof(int32_t), sizeof(int32_t)); + patchInt32(where, value); + } + + static void repatchPointer(void* where, void* value) + { + ExecutableAllocator::MakeWritable unprotect(reinterpret_cast(where) - sizeof(void*), sizeof(void*)); + patchPointer(where, value); + } + + static void repatchLoadPtrToLEA(void* where) + { +#if PLATFORM(X86_64) + // On x86-64 pointer memory accesses require a 64-bit operand, and as such a REX prefix. + // Skip over the prefix byte. + where = reinterpret_cast(where) + 1; +#endif + ExecutableAllocator::MakeWritable unprotect(where, 1); + *reinterpret_cast(where) = static_cast(OP_LEA); + } + + static unsigned getCallReturnOffset(JmpSrc call) + { + ASSERT(call.m_offset >= 0); + return call.m_offset; + } + static void* getRelocatedAddress(void* code, JmpSrc jump) { + ASSERT(jump.m_offset != -1); + return reinterpret_cast(reinterpret_cast(code) + jump.m_offset); } @@ -1220,23 +1467,6 @@ public: return dst.m_offset - src.m_offset; } - static void patchImmediate(intptr_t where, int32_t value) - { - reinterpret_cast(where)[-1] = value; - } - - static void patchPointer(intptr_t where, intptr_t value) - { - reinterpret_cast(where)[-1] = value; - } - - static void patchBranchOffset(intptr_t where, void* destination) - { - intptr_t offset = reinterpret_cast(destination) - where; - ASSERT(offset == static_cast(offset)); - reinterpret_cast(where)[-1] = static_cast(offset); - } - void* executableCopy(ExecutablePool* allocator) { void* copy = m_formatter.executableCopy(allocator); @@ -1246,6 +1476,24 @@ public: private: + static void patchPointer(void* where, void* value) + { + reinterpret_cast(where)[-1] = value; + } + + static void patchInt32(void* where, int32_t value) + { + reinterpret_cast(where)[-1] = value; + } + + static void patchRel32(void* from, void* to) + { + intptr_t offset = reinterpret_cast(to) - reinterpret_cast(from); + ASSERT(offset == static_cast(offset)); + + patchInt32(from, offset); + } + class X86InstructionFormatter { static const int maxInstructionSize = 16; @@ -1415,6 +1663,15 @@ private: m_buffer.putByteUnchecked(opcode); memoryModRM(reg, base, index, scale, offset); } + + void twoByteOp64(TwoByteOpcodeID opcode, int reg, RegisterID rm) + { + m_buffer.ensureSpace(maxInstructionSize); + emitRexW(reg, 0, rm); + m_buffer.putByteUnchecked(OP_2BYTE_ESCAPE); + m_buffer.putByteUnchecked(opcode); + registerModRM(reg, rm); + } #endif // Byte-operands: @@ -1478,6 +1735,11 @@ private: m_buffer.putByteUnchecked(imm); } + void immediate16(int imm) + { + m_buffer.putShortUnchecked(imm); + } + void immediate32(int imm) { m_buffer.putIntUnchecked(imm); @@ -1572,13 +1834,8 @@ private: { ASSERT(mode != ModRmRegister); - // Encode sacle of (1,2,4,8) -> (0,1,2,3) - int shift = 0; - while (scale >>= 1) - shift++; - putModRm(mode, reg, hasSib); - m_buffer.putByteUnchecked((shift << 6) | ((index & 7) << 3) | (base & 7)); + m_buffer.putByteUnchecked((scale << 6) | ((index & 7) << 3) | (base & 7)); } void registerModRM(int reg, RegisterID rm) diff --git a/src/3rdparty/webkit/JavaScriptCore/bytecode/CodeBlock.cpp b/src/3rdparty/webkit/JavaScriptCore/bytecode/CodeBlock.cpp index 9207c8a..d2b122a 100644 --- a/src/3rdparty/webkit/JavaScriptCore/bytecode/CodeBlock.cpp +++ b/src/3rdparty/webkit/JavaScriptCore/bytecode/CodeBlock.cpp @@ -55,15 +55,15 @@ static UString escapeQuotes(const UString& str) return result; } -static UString valueToSourceString(ExecState* exec, JSValuePtr val) +static UString valueToSourceString(ExecState* exec, JSValue val) { - if (val->isString()) { + if (val.isString()) { UString result("\""); - result += escapeQuotes(val->toString(exec)) + "\""; + result += escapeQuotes(val.toString(exec)) + "\""; return result; } - return val->toString(exec); + return val.toString(exec); } static CString registerName(int r) @@ -74,7 +74,7 @@ static CString registerName(int r) return (UString("r") + UString::from(r)).UTF8String(); } -static CString constantName(ExecState* exec, int k, JSValuePtr value) +static CString constantName(ExecState* exec, int k, JSValue value) { return (valueToSourceString(exec, value) + "(@k" + UString::from(k) + ")").UTF8String(); } @@ -357,7 +357,7 @@ void CodeBlock::dump(ExecState* exec) const unsigned registerIndex = m_numVars; size_t i = 0; do { - printf(" r%u = %s\n", registerIndex, valueToSourceString(exec, m_constantRegisters[i].jsValue(exec)).ascii()); + printf(" r%u = %s\n", registerIndex, valueToSourceString(exec, m_constantRegisters[i].jsValue()).ascii()); ++i; ++registerIndex; } while (i < m_constantRegisters.size()); @@ -497,6 +497,10 @@ void CodeBlock::dump(ExecState* exec, const Vector::const_iterator& printf("[%4d] create_arguments\n", location); break; } + case op_init_arguments: { + printf("[%4d] init_arguments\n", location); + break; + } case op_convert_this: { int r0 = (++it)->u.operand; printf("[%4d] convert_this %s\n", location, registerName(r0).c_str()); @@ -703,7 +707,7 @@ void CodeBlock::dump(ExecState* exec, const Vector::const_iterator& } case op_resolve_global: { int r0 = (++it)->u.operand; - JSValuePtr scope = JSValuePtr((++it)->u.jsCell); + JSValue scope = JSValue((++it)->u.jsCell); int id0 = (++it)->u.operand; printf("[%4d] resolve_global\t %s, %s, %s\n", location, registerName(r0).c_str(), valueToSourceString(exec, scope).ascii(), idName(id0, m_identifiers[id0]).c_str()); it += 2; @@ -724,15 +728,14 @@ void CodeBlock::dump(ExecState* exec, const Vector::const_iterator& break; } case op_get_global_var: { - int r0 = it[1].u.operand; - JSValuePtr scope = JSValuePtr(it[2].u.jsCell); - int index = it[3].u.operand; + int r0 = (++it)->u.operand; + JSValue scope = JSValue((++it)->u.jsCell); + int index = (++it)->u.operand; printf("[%4d] get_global_var\t %s, %s, %d\n", location, registerName(r0).c_str(), valueToSourceString(exec, scope).ascii(), index); - it += OPCODE_LENGTH(op_get_global_var); break; } case op_put_global_var: { - JSValuePtr scope = JSValuePtr((++it)->u.jsCell); + JSValue scope = JSValue((++it)->u.jsCell); int index = (++it)->u.operand; int r0 = (++it)->u.operand; printf("[%4d] put_global_var\t %s, %d, %s\n", location, valueToSourceString(exec, scope).ascii(), index, registerName(r0).c_str()); @@ -824,6 +827,10 @@ void CodeBlock::dump(ExecState* exec, const Vector::const_iterator& printf("[%4d] put_setter\t %s, %s, %s\n", location, registerName(r0).c_str(), idName(id0, m_identifiers[id0]).c_str(), registerName(r1).c_str()); break; } + case op_method_check: { + printf("[%4d] op_method_check\n", location); + break; + } case op_del_by_id: { int r0 = (++it)->u.operand; int r1 = (++it)->u.operand; @@ -889,6 +896,13 @@ void CodeBlock::dump(ExecState* exec, const Vector::const_iterator& printConditionalJump(begin, it, location, "jneq_null"); break; } + case op_jneq_ptr: { + int r0 = (++it)->u.operand; + int r1 = (++it)->u.operand; + int offset = (++it)->u.operand; + printf("[%4d] jneq_ptr\t\t %s, %s, %d(->%d)\n", location, registerName(r0).c_str(), registerName(r1).c_str(), offset, locationForOffset(begin, it, offset)); + break; + } case op_jnless: { int r0 = (++it)->u.operand; int r1 = (++it)->u.operand; @@ -896,6 +910,13 @@ void CodeBlock::dump(ExecState* exec, const Vector::const_iterator& printf("[%4d] jnless\t\t %s, %s, %d(->%d)\n", location, registerName(r0).c_str(), registerName(r1).c_str(), offset, locationForOffset(begin, it, offset)); break; } + case op_jnlesseq: { + int r0 = (++it)->u.operand; + int r1 = (++it)->u.operand; + int offset = (++it)->u.operand; + printf("[%4d] jnlesseq\t\t %s, %s, %d(->%d)\n", location, registerName(r0).c_str(), registerName(r1).c_str(), offset, locationForOffset(begin, it, offset)); + break; + } case op_loop_if_less: { int r0 = (++it)->u.operand; int r1 = (++it)->u.operand; @@ -959,6 +980,18 @@ void CodeBlock::dump(ExecState* exec, const Vector::const_iterator& printf("[%4d] call_eval\t %s, %s, %d, %d\n", location, registerName(dst).c_str(), registerName(func).c_str(), argCount, registerOffset); break; } + case op_call_varargs: { + int dst = (++it)->u.operand; + int func = (++it)->u.operand; + int argCount = (++it)->u.operand; + int registerOffset = (++it)->u.operand; + printf("[%4d] call_varargs\t %s, %s, %s, %d\n", location, registerName(dst).c_str(), registerName(func).c_str(), registerName(argCount).c_str(), registerOffset); + break; + } + case op_load_varargs: { + printUnaryOp(location, it, "load_varargs"); + break; + } case op_tear_off_activation: { int r0 = (++it)->u.operand; printf("[%4d] tear_off_activation\t %s\n", location, registerName(r0).c_str()); @@ -989,6 +1022,19 @@ void CodeBlock::dump(ExecState* exec, const Vector::const_iterator& printf("[%4d] construct_verify\t %s, %s\n", location, registerName(r0).c_str(), registerName(r1).c_str()); break; } + case op_strcat: { + int r0 = (++it)->u.operand; + int r1 = (++it)->u.operand; + int count = (++it)->u.operand; + printf("[%4d] op_strcat\t %s, %s, %d\n", location, registerName(r0).c_str(), registerName(r1).c_str(), count); + break; + } + case op_to_primitive: { + int r0 = (++it)->u.operand; + int r1 = (++it)->u.operand; + printf("[%4d] op_to_primitive\t %s, %s\n", location, registerName(r0).c_str(), registerName(r1).c_str()); + break; + } case op_get_pnames: { int r0 = (++it)->u.operand; int r1 = (++it)->u.operand; @@ -1091,8 +1137,7 @@ static HashSet liveCodeBlockSet; macro(linkedCallerList) \ macro(identifiers) \ macro(functionExpressions) \ - macro(constantRegisters) \ - macro(pcVector) + macro(constantRegisters) #define FOR_EACH_MEMBER_VECTOR_RARE_DATA(macro) \ macro(regexps) \ @@ -1107,7 +1152,8 @@ static HashSet liveCodeBlockSet; #define FOR_EACH_MEMBER_VECTOR_EXCEPTION_INFO(macro) \ macro(expressionInfo) \ macro(lineInfo) \ - macro(getByIdExceptionInfo) + macro(getByIdExceptionInfo) \ + macro(pcVector) template static size_t sizeInBytes(const Vector& vector) @@ -1232,6 +1278,7 @@ CodeBlock::CodeBlock(ScopeNode* ownerNode, CodeType codeType, PassRefPtrneedsActivation()) , m_usesEval(ownerNode->usesEval()) + , m_isNumericCompareFunction(false) , m_codeType(codeType) , m_source(sourceProvider) , m_sourceOffset(sourceOffset) @@ -1267,6 +1314,11 @@ CodeBlock::~CodeBlock() callLinkInfo->callee->removeCaller(callLinkInfo); } + for (size_t size = m_methodCallLinkInfos.size(), i = 0; i < size; ++i) { + if (Structure* structure = m_methodCallLinkInfos[i].cachedStructure) + structure->deref(); + } + unlinkCallers(); #endif @@ -1380,9 +1432,10 @@ void CodeBlock::mark() m_rareData->m_functions[i]->body()->mark(); for (size_t i = 0; i < m_rareData->m_unexpectedConstants.size(); ++i) { - if (!m_rareData->m_unexpectedConstants[i]->marked()) - m_rareData->m_unexpectedConstants[i]->mark(); + if (!m_rareData->m_unexpectedConstants[i].marked()) + m_rareData->m_unexpectedConstants[i].mark(); } + m_rareData->m_evalCodeCache.mark(); } } @@ -1392,6 +1445,17 @@ void CodeBlock::reparseForExceptionInfoIfNecessary(CallFrame* callFrame) return; ScopeChainNode* scopeChain = callFrame->scopeChain(); + if (m_needsFullScopeChain) { + ScopeChain sc(scopeChain); + int scopeDelta = sc.localDepth(); + if (m_codeType == EvalCode) + scopeDelta -= static_cast(this)->baseScopeDepth(); + else if (m_codeType == FunctionCode) + scopeDelta++; // Compilation of function code assumes activation is not on the scope chain yet. + ASSERT(scopeDelta >= 0); + while (scopeDelta--) + scopeChain = scopeChain->next; + } switch (m_codeType) { case FunctionCode: { @@ -1399,19 +1463,43 @@ void CodeBlock::reparseForExceptionInfoIfNecessary(CallFrame* callFrame) RefPtr newFunctionBody = m_globalData->parser->reparse(m_globalData, ownerFunctionBodyNode); ASSERT(newFunctionBody); newFunctionBody->finishParsing(ownerFunctionBodyNode->copyParameters(), ownerFunctionBodyNode->parameterCount()); - CodeBlock& newCodeBlock = newFunctionBody->bytecodeForExceptionInfoReparse(scopeChain); + + m_globalData->scopeNodeBeingReparsed = newFunctionBody.get(); + + CodeBlock& newCodeBlock = newFunctionBody->bytecodeForExceptionInfoReparse(scopeChain, this); ASSERT(newCodeBlock.m_exceptionInfo); ASSERT(newCodeBlock.m_instructionCount == m_instructionCount); + +#if ENABLE(JIT) + JIT::compile(m_globalData, &newCodeBlock); + ASSERT(newFunctionBody->generatedJITCode().size() == ownerNode()->generatedJITCode().size()); +#endif + m_exceptionInfo.set(newCodeBlock.m_exceptionInfo.release()); + + m_globalData->scopeNodeBeingReparsed = 0; + break; } case EvalCode: { EvalNode* ownerEvalNode = static_cast(m_ownerNode); RefPtr newEvalBody = m_globalData->parser->reparse(m_globalData, ownerEvalNode); - EvalCodeBlock& newCodeBlock = newEvalBody->bytecodeForExceptionInfoReparse(scopeChain); + + m_globalData->scopeNodeBeingReparsed = newEvalBody.get(); + + EvalCodeBlock& newCodeBlock = newEvalBody->bytecodeForExceptionInfoReparse(scopeChain, this); ASSERT(newCodeBlock.m_exceptionInfo); ASSERT(newCodeBlock.m_instructionCount == m_instructionCount); + +#if ENABLE(JIT) + JIT::compile(m_globalData, &newCodeBlock); + ASSERT(newEvalBody->generatedJITCode().size() == ownerNode()->generatedJITCode().size()); +#endif + m_exceptionInfo.set(newCodeBlock.m_exceptionInfo.release()); + + m_globalData->scopeNodeBeingReparsed = 0; + break; } default: @@ -1554,10 +1642,54 @@ bool CodeBlock::functionRegisterForBytecodeOffset(unsigned bytecodeOffset, int& functionRegisterIndex = m_rareData->m_functionRegisterInfos[low - 1].functionRegisterIndex; return true; } +#endif + +#if !ENABLE(JIT) +bool CodeBlock::hasGlobalResolveInstructionAtBytecodeOffset(unsigned bytecodeOffset) +{ + if (m_globalResolveInstructions.isEmpty()) + return false; + + int low = 0; + int high = m_globalResolveInstructions.size(); + while (low < high) { + int mid = low + (high - low) / 2; + if (m_globalResolveInstructions[mid] <= bytecodeOffset) + low = mid + 1; + else + high = mid; + } -void CodeBlock::setJITCode(JITCodeRef& jitCode) + if (!low || m_globalResolveInstructions[low - 1] != bytecodeOffset) + return false; + return true; +} +#else +bool CodeBlock::hasGlobalResolveInfoAtBytecodeOffset(unsigned bytecodeOffset) +{ + if (m_globalResolveInfos.isEmpty()) + return false; + + int low = 0; + int high = m_globalResolveInfos.size(); + while (low < high) { + int mid = low + (high - low) / 2; + if (m_globalResolveInfos[mid].bytecodeOffset <= bytecodeOffset) + low = mid + 1; + else + high = mid; + } + + if (!low || m_globalResolveInfos[low - 1].bytecodeOffset != bytecodeOffset) + return false; + return true; +} +#endif + +#if ENABLE(JIT) +void CodeBlock::setJITCode(JITCode jitCode) { - m_jitCode = jitCode; + ownerNode()->setJITCode(jitCode); #if !ENABLE(OPCODE_SAMPLING) if (!BytecodeGenerator::dumpsGeneratedCode()) m_instructions.clear(); diff --git a/src/3rdparty/webkit/JavaScriptCore/bytecode/CodeBlock.h b/src/3rdparty/webkit/JavaScriptCore/bytecode/CodeBlock.h index 517bd27..ac29c6c 100644 --- a/src/3rdparty/webkit/JavaScriptCore/bytecode/CodeBlock.h +++ b/src/3rdparty/webkit/JavaScriptCore/bytecode/CodeBlock.h @@ -32,6 +32,7 @@ #include "EvalCodeCache.h" #include "Instruction.h" +#include "JITCode.h" #include "JSGlobalObject.h" #include "JumpTable.h" #include "Nodes.h" @@ -58,29 +59,10 @@ namespace JSC { uint32_t target; uint32_t scopeDepth; #if ENABLE(JIT) - void* nativeCode; + MacroAssembler::CodeLocationLabel nativeCode; #endif }; -#if ENABLE(JIT) - // The code, and the associated pool from which it was allocated. - struct JITCodeRef { - void* code; - RefPtr executablePool; - - JITCodeRef() - : code(0) - { - } - - JITCodeRef(void* code, PassRefPtr executablePool) - : code(code) - , executablePool(executablePool) - { - } - }; -#endif - struct ExpressionRangeInfo { enum { MaxOffset = (1 << 7) - 1, @@ -108,19 +90,15 @@ namespace JSC { #if ENABLE(JIT) struct CallLinkInfo { CallLinkInfo() - : callReturnLocation(0) - , hotPathBegin(0) - , hotPathOther(0) - , coldPathOther(0) - , callee(0) + : callee(0) { } unsigned bytecodeIndex; - void* callReturnLocation; - void* hotPathBegin; - void* hotPathOther; - void* coldPathOther; + MacroAssembler::CodeLocationNearCall callReturnLocation; + MacroAssembler::CodeLocationDataLabelPtr hotPathBegin; + MacroAssembler::CodeLocationNearCall hotPathOther; + MacroAssembler::CodeLocationLabel coldPathOther; CodeBlock* callee; unsigned position; @@ -128,6 +106,17 @@ namespace JSC { bool isLinked() { return callee; } }; + struct MethodCallLinkInfo { + MethodCallLinkInfo() + : cachedStructure(0) + { + } + + MacroAssembler::CodeLocationCall callReturnLocation; + MacroAssembler::CodeLocationDataLabelPtr structureLabel; + Structure* cachedStructure; + }; + struct FunctionRegisterInfo { FunctionRegisterInfo(unsigned bytecodeOffset, int functionRegisterIndex) : bytecodeOffset(bytecodeOffset) @@ -140,24 +129,30 @@ namespace JSC { }; struct GlobalResolveInfo { - GlobalResolveInfo() + GlobalResolveInfo(unsigned bytecodeOffset) : structure(0) , offset(0) + , bytecodeOffset(bytecodeOffset) { } Structure* structure; unsigned offset; + unsigned bytecodeOffset; }; - struct PC { - PC(ptrdiff_t nativePCOffset, unsigned bytecodeIndex) - : nativePCOffset(nativePCOffset) + // This structure is used to map from a call return location + // (given as an offset in bytes into the JIT code) back to + // the bytecode index of the corresponding bytecode operation. + // This is then used to look up the corresponding handler. + struct CallReturnOffsetToBytecodeIndex { + CallReturnOffsetToBytecodeIndex(unsigned callReturnOffset, unsigned bytecodeIndex) + : callReturnOffset(callReturnOffset) , bytecodeIndex(bytecodeIndex) { } - ptrdiff_t nativePCOffset; + unsigned callReturnOffset; unsigned bytecodeIndex; }; @@ -165,17 +160,22 @@ namespace JSC { inline void* getStructureStubInfoReturnLocation(StructureStubInfo* structureStubInfo) { - return structureStubInfo->callReturnLocation; + return structureStubInfo->callReturnLocation.calleeReturnAddressValue(); } inline void* getCallLinkInfoReturnLocation(CallLinkInfo* callLinkInfo) { - return callLinkInfo->callReturnLocation; + return callLinkInfo->callReturnLocation.calleeReturnAddressValue(); + } + + inline void* getMethodCallLinkInfoReturnLocation(MethodCallLinkInfo* methodCallLinkInfo) + { + return methodCallLinkInfo->callReturnLocation.calleeReturnAddressValue(); } - inline ptrdiff_t getNativePCOffset(PC* pc) + inline unsigned getCallReturnOffset(CallReturnOffsetToBytecodeIndex* pc) { - return pc->nativePCOffset; + return pc->callReturnOffset; } // Binary chop algorithm, calls valueAtPosition on pre-sorted elements in array, @@ -242,7 +242,7 @@ namespace JSC { return true; if (isConstantRegisterIndex(index)) - return !JSImmediate::isImmediate(getConstant(index)); + return getConstant(index).isCell(); return false; } @@ -252,9 +252,9 @@ namespace JSC { return index >= m_numVars && index < m_numVars + m_numConstants; } - ALWAYS_INLINE JSValuePtr getConstant(int index) + ALWAYS_INLINE JSValue getConstant(int index) { - return m_constantRegisters[index - m_numVars].getJSValue(); + return m_constantRegisters[index - m_numVars].jsValue(); } ALWAYS_INLINE bool isTemporaryRegisterIndex(int index) @@ -297,24 +297,31 @@ namespace JSC { return *(binaryChop(m_callLinkInfos.begin(), m_callLinkInfos.size(), returnAddress)); } - unsigned getBytecodeIndex(void* nativePC) + MethodCallLinkInfo& getMethodCallLinkInfo(void* returnAddress) { - ptrdiff_t nativePCOffset = reinterpret_cast(nativePC) - reinterpret_cast(m_jitCode.code); - return binaryChop(m_pcVector.begin(), m_pcVector.size(), nativePCOffset)->bytecodeIndex; + return *(binaryChop(m_methodCallLinkInfos.begin(), m_methodCallLinkInfos.size(), returnAddress)); } + unsigned getBytecodeIndex(CallFrame* callFrame, void* nativePC) + { + reparseForExceptionInfoIfNecessary(callFrame); + return binaryChop(m_exceptionInfo->m_callReturnIndexVector.begin(), m_exceptionInfo->m_callReturnIndexVector.size(), ownerNode()->generatedJITCode().offsetOf(nativePC))->bytecodeIndex; + } + bool functionRegisterForBytecodeOffset(unsigned bytecodeOffset, int& functionRegisterIndex); #endif + void setIsNumericCompareFunction(bool isNumericCompareFunction) { m_isNumericCompareFunction = isNumericCompareFunction; } + bool isNumericCompareFunction() { return m_isNumericCompareFunction; } + Vector& instructions() { return m_instructions; } #ifndef NDEBUG void setInstructionCount(unsigned instructionCount) { m_instructionCount = instructionCount; } #endif #if ENABLE(JIT) - void setJITCode(JITCodeRef& jitCode); - void* jitCode() { return m_jitCode.code; } - ExecutablePool* executablePool() { return m_jitCode.executablePool.get(); } + void setJITCode(JITCode); + ExecutablePool* executablePool() { return ownerNode()->getExecutablePool(); } #endif ScopeNode* ownerNode() const { return m_ownerNode; } @@ -343,22 +350,25 @@ namespace JSC { #if !ENABLE(JIT) void addPropertyAccessInstruction(unsigned propertyAccessInstruction) { m_propertyAccessInstructions.append(propertyAccessInstruction); } - void addGlobalResolveInstruction(unsigned globalResolveInstructions) { m_globalResolveInstructions.append(globalResolveInstructions); } + void addGlobalResolveInstruction(unsigned globalResolveInstruction) { m_globalResolveInstructions.append(globalResolveInstruction); } + bool hasGlobalResolveInstructionAtBytecodeOffset(unsigned bytecodeOffset); #else size_t numberOfStructureStubInfos() const { return m_structureStubInfos.size(); } void addStructureStubInfo(const StructureStubInfo& stubInfo) { m_structureStubInfos.append(stubInfo); } StructureStubInfo& structureStubInfo(int index) { return m_structureStubInfos[index]; } - void addGlobalResolveInfo() { m_globalResolveInfos.append(GlobalResolveInfo()); } + void addGlobalResolveInfo(unsigned globalResolveInstruction) { m_globalResolveInfos.append(GlobalResolveInfo(globalResolveInstruction)); } GlobalResolveInfo& globalResolveInfo(int index) { return m_globalResolveInfos[index]; } + bool hasGlobalResolveInfoAtBytecodeOffset(unsigned bytecodeOffset); size_t numberOfCallLinkInfos() const { return m_callLinkInfos.size(); } void addCallLinkInfo() { m_callLinkInfos.append(CallLinkInfo()); } CallLinkInfo& callLinkInfo(int index) { return m_callLinkInfos[index]; } - void addFunctionRegisterInfo(unsigned bytecodeOffset, int functionIndex) { createRareDataIfNecessary(); m_rareData->m_functionRegisterInfos.append(FunctionRegisterInfo(bytecodeOffset, functionIndex)); } + void addMethodCallLinkInfos(unsigned n) { m_methodCallLinkInfos.grow(n); } + MethodCallLinkInfo& methodCallLinkInfo(int index) { return m_methodCallLinkInfos[index]; } - Vector& pcVector() { return m_pcVector; } + void addFunctionRegisterInfo(unsigned bytecodeOffset, int functionIndex) { createRareDataIfNecessary(); m_rareData->m_functionRegisterInfos.append(FunctionRegisterInfo(bytecodeOffset, functionIndex)); } #endif // Exception handling support @@ -367,6 +377,7 @@ namespace JSC { void addExceptionHandler(const HandlerInfo& hanler) { createRareDataIfNecessary(); return m_rareData->m_exceptionHandlers.append(hanler); } HandlerInfo& exceptionHandler(int index) { ASSERT(m_rareData); return m_rareData->m_exceptionHandlers[index]; } + bool hasExceptionInfo() const { return m_exceptionInfo; } void clearExceptionInfo() { m_exceptionInfo.clear(); } void addExpressionInfo(const ExpressionRangeInfo& expressionInfo) { ASSERT(m_exceptionInfo); m_exceptionInfo->m_expressionInfo.append(expressionInfo); } @@ -376,6 +387,10 @@ namespace JSC { void addLineInfo(const LineInfo& lineInfo) { ASSERT(m_exceptionInfo); m_exceptionInfo->m_lineInfo.append(lineInfo); } LineInfo& lastLineInfo() { ASSERT(m_exceptionInfo); return m_exceptionInfo->m_lineInfo.last(); } +#if ENABLE(JIT) + Vector& callReturnIndexVector() { ASSERT(m_exceptionInfo); return m_exceptionInfo->m_callReturnIndexVector; } +#endif + // Constant Pool size_t numberOfIdentifiers() const { return m_identifiers.size(); } @@ -392,8 +407,10 @@ namespace JSC { unsigned addFunction(FuncDeclNode* n) { createRareDataIfNecessary(); unsigned size = m_rareData->m_functions.size(); m_rareData->m_functions.append(n); return size; } FuncDeclNode* function(int index) const { ASSERT(m_rareData); return m_rareData->m_functions[index].get(); } - unsigned addUnexpectedConstant(JSValuePtr v) { createRareDataIfNecessary(); unsigned size = m_rareData->m_unexpectedConstants.size(); m_rareData->m_unexpectedConstants.append(v); return size; } - JSValuePtr unexpectedConstant(int index) const { ASSERT(m_rareData); return m_rareData->m_unexpectedConstants[index]; } + bool hasFunctions() const { return m_functionExpressions.size() || (m_rareData && m_rareData->m_functions.size()); } + + unsigned addUnexpectedConstant(JSValue v) { createRareDataIfNecessary(); unsigned size = m_rareData->m_unexpectedConstants.size(); m_rareData->m_unexpectedConstants.append(v); return size; } + JSValue unexpectedConstant(int index) const { ASSERT(m_rareData); return m_rareData->m_unexpectedConstants[index]; } unsigned addRegExp(RegExp* r) { createRareDataIfNecessary(); unsigned size = m_rareData->m_regexps.size(); m_rareData->m_regexps.append(r); return size; } RegExp* regexp(int index) const { ASSERT(m_rareData); return m_rareData->m_regexps[index].get(); } @@ -451,15 +468,13 @@ namespace JSC { #ifndef NDEBUG unsigned m_instructionCount; #endif -#if ENABLE(JIT) - JITCodeRef m_jitCode; -#endif int m_thisRegister; bool m_needsFullScopeChain; bool m_usesEval; bool m_usesArguments; + bool m_isNumericCompareFunction; CodeType m_codeType; @@ -473,9 +488,8 @@ namespace JSC { Vector m_structureStubInfos; Vector m_globalResolveInfos; Vector m_callLinkInfos; + Vector m_methodCallLinkInfos; Vector m_linkedCallerList; - - Vector m_pcVector; #endif Vector m_jumpTargets; @@ -491,6 +505,10 @@ namespace JSC { Vector m_expressionInfo; Vector m_lineInfo; Vector m_getByIdExceptionInfo; + +#if ENABLE(JIT) + Vector m_callReturnIndexVector; +#endif }; OwnPtr m_exceptionInfo; @@ -499,7 +517,7 @@ namespace JSC { // Rare Constants Vector > m_functions; - Vector m_unexpectedConstants; + Vector m_unexpectedConstants; Vector > m_regexps; // Jump Tables @@ -542,10 +560,16 @@ namespace JSC { class EvalCodeBlock : public ProgramCodeBlock { public: - EvalCodeBlock(ScopeNode* ownerNode, JSGlobalObject* globalObject, PassRefPtr sourceProvider) + EvalCodeBlock(ScopeNode* ownerNode, JSGlobalObject* globalObject, PassRefPtr sourceProvider, int baseScopeDepth) : ProgramCodeBlock(ownerNode, EvalCode, globalObject, sourceProvider) + , m_baseScopeDepth(baseScopeDepth) { } + + int baseScopeDepth() const { return m_baseScopeDepth; } + + private: + int m_baseScopeDepth; }; } // namespace JSC diff --git a/src/3rdparty/webkit/JavaScriptCore/bytecode/EvalCodeCache.h b/src/3rdparty/webkit/JavaScriptCore/bytecode/EvalCodeCache.h index 29be295..f0ce73e 100644 --- a/src/3rdparty/webkit/JavaScriptCore/bytecode/EvalCodeCache.h +++ b/src/3rdparty/webkit/JavaScriptCore/bytecode/EvalCodeCache.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008 Apple Inc. All rights reserved. + * Copyright (C) 2008, 2009 Apple Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -41,7 +41,7 @@ namespace JSC { class EvalCodeCache { public: - PassRefPtr get(ExecState* exec, const UString& evalSource, ScopeChainNode* scopeChain, JSValuePtr& exceptionValue) + PassRefPtr get(ExecState* exec, const UString& evalSource, ScopeChainNode* scopeChain, JSValue& exceptionValue) { RefPtr evalNode; @@ -68,11 +68,18 @@ namespace JSC { bool isEmpty() const { return m_cacheMap.isEmpty(); } + void mark() + { + EvalCacheMap::iterator end = m_cacheMap.end(); + for (EvalCacheMap::iterator ptr = m_cacheMap.begin(); ptr != end; ++ptr) + ptr->second->mark(); + } private: static const int maxCacheableSourceLength = 256; static const int maxCacheEntries = 64; - HashMap, RefPtr > m_cacheMap; + typedef HashMap, RefPtr > EvalCacheMap; + EvalCacheMap m_cacheMap; }; } // namespace JSC diff --git a/src/3rdparty/webkit/JavaScriptCore/bytecode/Instruction.h b/src/3rdparty/webkit/JavaScriptCore/bytecode/Instruction.h index 81a7fa0..24ba490 100644 --- a/src/3rdparty/webkit/JavaScriptCore/bytecode/Instruction.h +++ b/src/3rdparty/webkit/JavaScriptCore/bytecode/Instruction.h @@ -29,14 +29,25 @@ #ifndef Instruction_h #define Instruction_h +#include "MacroAssembler.h" #include "Opcode.h" #include "Structure.h" #include -#define POLYMORPHIC_LIST_CACHE_SIZE 4 +#define POLYMORPHIC_LIST_CACHE_SIZE 8 namespace JSC { + // *Sigh*, If the JIT is enabled we need to track the stubRountine (of type MacroAssembler::CodeLocationLabel), + // If the JIT is not in use we don't actually need the variable (that said, if the JIT is not in use we don't + // curently actually use PolymorphicAccessStructureLists, which we should). Anyway, this seems like the best + // solution for now - will need to something smarter if/when we actually want mixed-mode operation. +#if ENABLE(JIT) + typedef MacroAssembler::CodeLocationLabel PolymorphicAccessStructureListStubRoutineType; +#else + typedef void* PolymorphicAccessStructureListStubRoutineType; +#endif + class JSCell; class Structure; class StructureChain; @@ -45,14 +56,14 @@ namespace JSC { struct PolymorphicAccessStructureList { struct PolymorphicStubInfo { bool isChain; - void* stubRoutine; + PolymorphicAccessStructureListStubRoutineType stubRoutine; Structure* base; union { Structure* proto; StructureChain* chain; } u; - void set(void* _stubRoutine, Structure* _base) + void set(PolymorphicAccessStructureListStubRoutineType _stubRoutine, Structure* _base) { stubRoutine = _stubRoutine; base = _base; @@ -60,7 +71,7 @@ namespace JSC { isChain = false; } - void set(void* _stubRoutine, Structure* _base, Structure* _proto) + void set(PolymorphicAccessStructureListStubRoutineType _stubRoutine, Structure* _base, Structure* _proto) { stubRoutine = _stubRoutine; base = _base; @@ -68,7 +79,7 @@ namespace JSC { isChain = false; } - void set(void* _stubRoutine, Structure* _base, StructureChain* _chain) + void set(PolymorphicAccessStructureListStubRoutineType _stubRoutine, Structure* _base, StructureChain* _chain) { stubRoutine = _stubRoutine; base = _base; @@ -77,17 +88,17 @@ namespace JSC { } } list[POLYMORPHIC_LIST_CACHE_SIZE]; - PolymorphicAccessStructureList(void* stubRoutine, Structure* firstBase) + PolymorphicAccessStructureList(PolymorphicAccessStructureListStubRoutineType stubRoutine, Structure* firstBase) { list[0].set(stubRoutine, firstBase); } - PolymorphicAccessStructureList(void* stubRoutine, Structure* firstBase, Structure* firstProto) + PolymorphicAccessStructureList(PolymorphicAccessStructureListStubRoutineType stubRoutine, Structure* firstBase, Structure* firstProto) { list[0].set(stubRoutine, firstBase, firstProto); } - PolymorphicAccessStructureList(void* stubRoutine, Structure* firstBase, StructureChain* firstChain) + PolymorphicAccessStructureList(PolymorphicAccessStructureListStubRoutineType stubRoutine, Structure* firstBase, StructureChain* firstChain) { list[0].set(stubRoutine, firstBase, firstChain); } @@ -111,11 +122,20 @@ namespace JSC { }; struct Instruction { - Instruction(Opcode opcode) { u.opcode = opcode; } + Instruction(Opcode opcode) + { +#if !HAVE(COMPUTED_GOTO) + // We have to initialize one of the pointer members to ensure that + // the entire struct is initialized, when opcode is not a pointer. + u.jsCell = 0; +#endif + u.opcode = opcode; + } + Instruction(int operand) { // We have to initialize one of the pointer members to ensure that - // the entire struct is initialised in 64-bit. + // the entire struct is initialized in 64-bit. u.jsCell = 0; u.operand = operand; } diff --git a/src/3rdparty/webkit/JavaScriptCore/bytecode/JumpTable.h b/src/3rdparty/webkit/JavaScriptCore/bytecode/JumpTable.h index 44e224d..eee773c 100644 --- a/src/3rdparty/webkit/JavaScriptCore/bytecode/JumpTable.h +++ b/src/3rdparty/webkit/JavaScriptCore/bytecode/JumpTable.h @@ -30,6 +30,7 @@ #ifndef JumpTable_h #define JumpTable_h +#include "MacroAssembler.h" #include "UString.h" #include #include @@ -39,7 +40,7 @@ namespace JSC { struct OffsetLocation { int32_t branchOffset; #if ENABLE(JIT) - void* ctiOffset; + MacroAssembler::CodeLocationLabel ctiOffset; #endif }; @@ -47,7 +48,7 @@ namespace JSC { typedef HashMap, OffsetLocation> StringOffsetTable; StringOffsetTable offsetTable; #if ENABLE(JIT) - void* ctiDefault; // FIXME: it should not be necessary to store this. + MacroAssembler::CodeLocationLabel ctiDefault; // FIXME: it should not be necessary to store this. #endif inline int32_t offsetForValue(UString::Rep* value, int32_t defaultOffset) @@ -60,7 +61,7 @@ namespace JSC { } #if ENABLE(JIT) - inline void* ctiForValue(UString::Rep* value) + inline MacroAssembler::CodeLocationLabel ctiForValue(UString::Rep* value) { StringOffsetTable::const_iterator end = offsetTable.end(); StringOffsetTable::const_iterator loc = offsetTable.find(value); @@ -76,8 +77,8 @@ namespace JSC { Vector branchOffsets; int32_t min; #if ENABLE(JIT) - Vector ctiOffsets; - void* ctiDefault; + Vector ctiOffsets; + MacroAssembler::CodeLocationLabel ctiDefault; #endif int32_t offsetForValue(int32_t value, int32_t defaultOffset); @@ -88,7 +89,7 @@ namespace JSC { } #if ENABLE(JIT) - inline void* ctiForValue(int32_t value) + inline MacroAssembler::CodeLocationLabel ctiForValue(int32_t value) { if (value >= min && static_cast(value - min) < ctiOffsets.size()) return ctiOffsets[value - min]; diff --git a/src/3rdparty/webkit/JavaScriptCore/bytecode/Opcode.h b/src/3rdparty/webkit/JavaScriptCore/bytecode/Opcode.h index e9c8f78..f4421df 100644 --- a/src/3rdparty/webkit/JavaScriptCore/bytecode/Opcode.h +++ b/src/3rdparty/webkit/JavaScriptCore/bytecode/Opcode.h @@ -40,6 +40,7 @@ namespace JSC { #define FOR_EACH_OPCODE_ID(macro) \ macro(op_enter, 1) \ macro(op_enter_with_activation, 2) \ + macro(op_init_arguments, 1) \ macro(op_create_arguments, 1) \ macro(op_convert_this, 2) \ \ @@ -94,7 +95,7 @@ namespace JSC { macro(op_resolve_global, 6) \ macro(op_get_scoped_var, 4) \ macro(op_put_scoped_var, 4) \ - macro(op_get_global_var, 6) \ + macro(op_get_global_var, 4) \ macro(op_put_global_var, 4) \ macro(op_resolve_base, 3) \ macro(op_resolve_with_base, 4) \ @@ -125,7 +126,9 @@ namespace JSC { macro(op_jfalse, 3) \ macro(op_jeq_null, 3) \ macro(op_jneq_null, 3) \ + macro(op_jneq_ptr, 4) \ macro(op_jnless, 4) \ + macro(op_jnlesseq, 4) \ macro(op_jmp_scopes, 3) \ macro(op_loop, 2) \ macro(op_loop_if_true, 3) \ @@ -139,12 +142,17 @@ namespace JSC { macro(op_new_func_exp, 3) \ macro(op_call, 5) \ macro(op_call_eval, 5) \ + macro(op_call_varargs, 5) \ + macro(op_load_varargs, 3) \ macro(op_tear_off_activation, 2) \ macro(op_tear_off_arguments, 1) \ macro(op_ret, 2) \ + macro(op_method_check, 1) \ \ macro(op_construct, 7) \ macro(op_construct_verify, 3) \ + macro(op_strcat, 4) \ + macro(op_to_primitive, 3) \ \ macro(op_get_pnames, 3) \ macro(op_next_pname, 4) \ diff --git a/src/3rdparty/webkit/JavaScriptCore/bytecode/SamplingTool.cpp b/src/3rdparty/webkit/JavaScriptCore/bytecode/SamplingTool.cpp index ffb9132..8651723 100644 --- a/src/3rdparty/webkit/JavaScriptCore/bytecode/SamplingTool.cpp +++ b/src/3rdparty/webkit/JavaScriptCore/bytecode/SamplingTool.cpp @@ -39,24 +39,57 @@ namespace JSC { -void ScopeSampleRecord::sample(CodeBlock* codeBlock, Instruction* vPC) +#if ENABLE(SAMPLING_FLAGS) + +void SamplingFlags::sample() { - if (!m_samples) { - m_size = codeBlock->instructions().size(); - m_samples = static_cast(calloc(m_size, sizeof(int))); - m_codeBlock = codeBlock; + uint32_t mask = 1 << 31; + unsigned index; + + for (index = 0; index < 32; ++index) { + if (mask & s_flags) + break; + mask >>= 1; } - ++m_sampleCount; + s_flagCounts[32 - index]++; +} - unsigned offest = vPC - codeBlock->instructions().begin(); - // Since we don't read and write codeBlock and vPC atomically, this check - // can fail if we sample mid op_call / op_ret. - if (offest < m_size) { - m_samples[offest]++; - m_opcodeSampleCount++; - } +void SamplingFlags::start() +{ + for (unsigned i = 0; i <= 32; ++i) + s_flagCounts[i] = 0; } +void SamplingFlags::stop() +{ + uint64_t total = 0; + for (unsigned i = 0; i <= 32; ++i) + total += s_flagCounts[i]; + + if (total) { + printf("\nSamplingFlags: sample counts with flags set: (%lld total)\n", total); + for (unsigned i = 0; i <= 32; ++i) { + if (s_flagCounts[i]) + printf(" [ %02d ] : %lld\t\t(%03.2f%%)\n", i, s_flagCounts[i], (100.0 * s_flagCounts[i]) / total); + } + printf("\n"); + } else + printf("\nSamplingFlags: no samples.\n\n"); +} +uint64_t SamplingFlags::s_flagCounts[33]; + +#else +void SamplingFlags::start() {} +void SamplingFlags::stop() {} +#endif + +/* + Start with flag 16 set. + By doing this the monitoring of lower valued flags will be masked out + until flag 16 is explictly cleared. +*/ +uint32_t SamplingFlags::s_flags = 1 << 15; + #if PLATFORM(WIN_OS) @@ -82,62 +115,113 @@ static inline unsigned hertz2us(unsigned hertz) return 1000000 / hertz; } -void SamplingTool::run() + +SamplingTool* SamplingTool::s_samplingTool = 0; + + +bool SamplingThread::s_running = false; +unsigned SamplingThread::s_hertz = 10000; +ThreadIdentifier SamplingThread::s_samplingThread; + +void* SamplingThread::threadStartFunc(void*) { - while (m_running) { - sleepForMicroseconds(hertz2us(m_hertz)); + while (s_running) { + sleepForMicroseconds(hertz2us(s_hertz)); - Sample sample(m_sample, m_codeBlock); - ++m_sampleCount; +#if ENABLE(SAMPLING_FLAGS) + SamplingFlags::sample(); +#endif +#if ENABLE(OPCODE_SAMPLING) + SamplingTool::sample(); +#endif + } - if (sample.isNull()) - continue; + return 0; +} - if (!sample.inHostFunction()) { - unsigned opcodeID = m_interpreter->getOpcodeID(sample.vPC()[0].u.opcode); - ++m_opcodeSampleCount; - ++m_opcodeSamples[opcodeID]; +void SamplingThread::start(unsigned hertz) +{ + ASSERT(!s_running); + s_running = true; + s_hertz = hertz; - if (sample.inCTIFunction()) - m_opcodeSamplesInCTIFunctions[opcodeID]++; - } + s_samplingThread = createThread(threadStartFunc, 0, "JavaScriptCore::Sampler"); +} + +void SamplingThread::stop() +{ + ASSERT(s_running); + s_running = false; + waitForThreadCompletion(s_samplingThread, 0); +} + + +void ScopeSampleRecord::sample(CodeBlock* codeBlock, Instruction* vPC) +{ + if (!m_samples) { + m_size = codeBlock->instructions().size(); + m_samples = static_cast(calloc(m_size, sizeof(int))); + m_codeBlock = codeBlock; + } + + ++m_sampleCount; + + unsigned offest = vPC - codeBlock->instructions().begin(); + // Since we don't read and write codeBlock and vPC atomically, this check + // can fail if we sample mid op_call / op_ret. + if (offest < m_size) { + m_samples[offest]++; + m_opcodeSampleCount++; + } +} + +void SamplingTool::doRun() +{ + Sample sample(m_sample, m_codeBlock); + ++m_sampleCount; + + if (sample.isNull()) + return; + + if (!sample.inHostFunction()) { + unsigned opcodeID = m_interpreter->getOpcodeID(sample.vPC()[0].u.opcode); + + ++m_opcodeSampleCount; + ++m_opcodeSamples[opcodeID]; + + if (sample.inCTIFunction()) + m_opcodeSamplesInCTIFunctions[opcodeID]++; + } #if ENABLE(CODEBLOCK_SAMPLING) + if (CodeBlock* codeBlock = sample.codeBlock()) { MutexLocker locker(m_scopeSampleMapMutex); - ScopeSampleRecord* record = m_scopeSampleMap->get(sample.codeBlock()->ownerNode); + ScopeSampleRecord* record = m_scopeSampleMap->get(codeBlock->ownerNode()); ASSERT(record); - record->sample(sample.codeBlock(), sample.vPC()); -#endif + record->sample(codeBlock, sample.vPC()); } +#endif } -void* SamplingTool::threadStartFunc(void* samplingTool) +void SamplingTool::sample() { - reinterpret_cast(samplingTool)->run(); - return 0; + s_samplingTool->doRun(); } void SamplingTool::notifyOfScope(ScopeNode* scope) { +#if ENABLE(CODEBLOCK_SAMPLING) MutexLocker locker(m_scopeSampleMapMutex); m_scopeSampleMap->set(scope, new ScopeSampleRecord(scope)); +#else + UNUSED_PARAM(scope); +#endif } -void SamplingTool::start(unsigned hertz) -{ - ASSERT(!m_running); - m_running = true; - m_hertz = hertz; - - m_samplingThread = createThread(threadStartFunc, this, "JavaScriptCore::Sampler"); -} - -void SamplingTool::stop() +void SamplingTool::setup() { - ASSERT(m_running); - m_running = false; - waitForThreadCompletion(m_samplingThread, 0); + s_samplingTool = this; } #if ENABLE(OPCODE_SAMPLING) @@ -153,14 +237,6 @@ struct LineCountInfo { unsigned count; }; -static int compareLineCountInfoSampling(const void* left, const void* right) -{ - const LineCountInfo* leftLineCount = reinterpret_cast(left); - const LineCountInfo* rightLineCount = reinterpret_cast(right); - - return (leftLineCount->line > rightLineCount->line) ? 1 : (leftLineCount->line < rightLineCount->line) ? -1 : 0; -} - static int compareOpcodeIndicesSampling(const void* left, const void* right) { const OpcodeSampleInfo* leftSampleInfo = reinterpret_cast(left); @@ -169,6 +245,15 @@ static int compareOpcodeIndicesSampling(const void* left, const void* right) return (leftSampleInfo->count < rightSampleInfo->count) ? 1 : (leftSampleInfo->count > rightSampleInfo->count) ? -1 : 0; } +#if ENABLE(CODEBLOCK_SAMPLING) +static int compareLineCountInfoSampling(const void* left, const void* right) +{ + const LineCountInfo* leftLineCount = reinterpret_cast(left); + const LineCountInfo* rightLineCount = reinterpret_cast(right); + + return (leftLineCount->line > rightLineCount->line) ? 1 : (leftLineCount->line < rightLineCount->line) ? -1 : 0; +} + static int compareScopeSampleRecords(const void* left, const void* right) { const ScopeSampleRecord* const leftValue = *static_cast(left); @@ -176,6 +261,7 @@ static int compareScopeSampleRecords(const void* left, const void* right) return (leftValue->m_sampleCount < rightValue->m_sampleCount) ? 1 : (leftValue->m_sampleCount > rightValue->m_sampleCount) ? -1 : 0; } +#endif void SamplingTool::dump(ExecState* exec) { @@ -227,6 +313,8 @@ void SamplingTool::dump(ExecState* exec) printf("\tcti count:\tsamples inside a CTI function called by this opcode\n"); printf("\tcti %% of self:\tcti count / sample count\n"); +#if ENABLE(CODEBLOCK_SAMPLING) + // (3) Build and sort 'codeBlockSamples' array. int scopeCount = m_scopeSampleMap->size(); @@ -248,8 +336,8 @@ void SamplingTool::dump(ExecState* exec) double blockPercent = (record->m_sampleCount * 100.0) / m_sampleCount; if (blockPercent >= 1) { - Instruction* code = codeBlock->instructions().begin(); - printf("#%d: %s:%d: %d / %lld (%.3f%%)\n", i + 1, record->m_scope->sourceURL().UTF8String().c_str(), codeBlock->lineNumberForBytecodeOffset(0), record->m_sampleCount, m_sampleCount, blockPercent); + //Instruction* code = codeBlock->instructions().begin(); + printf("#%d: %s:%d: %d / %lld (%.3f%%)\n", i + 1, record->m_scope->sourceURL().UTF8String().c_str(), codeBlock->lineNumberForBytecodeOffset(exec, 0), record->m_sampleCount, m_sampleCount, blockPercent); if (i < 10) { HashMap lineCounts; codeBlock->dump(exec); @@ -259,9 +347,7 @@ void SamplingTool::dump(ExecState* exec) int count = record->m_samples[op]; if (count) { printf(" [% 4d] has sample count: % 4d\n", op, count); - // It is okay to pass 0 as the CallFrame for lineNumberForBytecodeOffset since - // we ensure exception information when Sampling is enabled. - unsigned line = codeBlock->lineNumberForBytecodeOffset(0, op); + unsigned line = codeBlock->lineNumberForBytecodeOffset(exec, op); lineCounts.set(line, (lineCounts.contains(line) ? lineCounts.get(line) : 0) + count); } } @@ -287,6 +373,9 @@ void SamplingTool::dump(ExecState* exec) } } } +#else + UNUSED_PARAM(exec); +#endif } #else @@ -297,4 +386,21 @@ void SamplingTool::dump(ExecState*) #endif +void AbstractSamplingCounter::dump() +{ +#if ENABLE(SAMPLING_COUNTERS) + if (s_abstractSamplingCounterChain != &s_abstractSamplingCounterChainEnd) { + printf("\nSampling Counter Values:\n"); + for (AbstractSamplingCounter* currCounter = s_abstractSamplingCounterChain; (currCounter != &s_abstractSamplingCounterChainEnd); currCounter = currCounter->m_next) + printf("\t%s\t: %lld\n", currCounter->m_name, currCounter->m_counter); + printf("\n\n"); + } + s_completed = true; +#endif +} + +AbstractSamplingCounter AbstractSamplingCounter::s_abstractSamplingCounterChainEnd; +AbstractSamplingCounter* AbstractSamplingCounter::s_abstractSamplingCounterChain = &s_abstractSamplingCounterChainEnd; +bool AbstractSamplingCounter::s_completed = false; + } // namespace JSC diff --git a/src/3rdparty/webkit/JavaScriptCore/bytecode/SamplingTool.h b/src/3rdparty/webkit/JavaScriptCore/bytecode/SamplingTool.h index daf99d2..7d7dc9c 100644 --- a/src/3rdparty/webkit/JavaScriptCore/bytecode/SamplingTool.h +++ b/src/3rdparty/webkit/JavaScriptCore/bytecode/SamplingTool.h @@ -38,6 +38,54 @@ namespace JSC { + class SamplingFlags { + friend class JIT; + public: + static void start(); + static void stop(); + +#if ENABLE(SAMPLING_FLAGS) + static void setFlag(unsigned flag) + { + ASSERT(flag >= 1); + ASSERT(flag <= 32); + s_flags |= 1u << (flag - 1); + } + + static void clearFlag(unsigned flag) + { + ASSERT(flag >= 1); + ASSERT(flag <= 32); + s_flags &= ~(1u << (flag - 1)); + } + + static void sample(); + + class ScopedFlag { + public: + ScopedFlag(int flag) + : m_flag(flag) + { + setFlag(flag); + } + + ~ScopedFlag() + { + clearFlag(m_flag); + } + + private: + int m_flag; + }; + +#endif + private: + static uint32_t s_flags; +#if ENABLE(SAMPLING_FLAGS) + static uint64_t s_flagCounts[33]; +#endif + }; + class CodeBlock; class ExecState; class Interpreter; @@ -73,6 +121,19 @@ namespace JSC { typedef WTF::HashMap ScopeSampleRecordMap; + class SamplingThread { + public: + // Sampling thread state. + static bool s_running; + static unsigned s_hertz; + static ThreadIdentifier s_samplingThread; + + static void start(unsigned hertz=10000); + static void stop(); + + static void* threadStartFunc(void*); + }; + class SamplingTool { public: friend class CallRecord; @@ -127,12 +188,13 @@ namespace JSC { SamplingTool(Interpreter* interpreter) : m_interpreter(interpreter) - , m_running(false) , m_codeBlock(0) , m_sample(0) , m_sampleCount(0) , m_opcodeSampleCount(0) +#if ENABLE(CODEBLOCK_SAMPLING) , m_scopeSampleMap(new ScopeSampleRecordMap()) +#endif { memset(m_opcodeSamples, 0, sizeof(m_opcodeSamples)); memset(m_opcodeSamplesInCTIFunctions, 0, sizeof(m_opcodeSamplesInCTIFunctions)); @@ -140,11 +202,12 @@ namespace JSC { ~SamplingTool() { +#if ENABLE(CODEBLOCK_SAMPLING) deleteAllValues(*m_scopeSampleMap); +#endif } - void start(unsigned hertz=10000); - void stop(); + void setup(); void dump(ExecState*); void notifyOfScope(ScopeNode* scope); @@ -159,12 +222,14 @@ namespace JSC { CodeBlock** codeBlockSlot() { return &m_codeBlock; } intptr_t* sampleSlot() { return &m_sample; } - unsigned encodeSample(Instruction* vPC, bool inCTIFunction = false, bool inHostFunction = false) + void* encodeSample(Instruction* vPC, bool inCTIFunction = false, bool inHostFunction = false) { ASSERT(!(reinterpret_cast(vPC) & 0x3)); - return reinterpret_cast(vPC) | (static_cast(inCTIFunction) << 1) | static_cast(inHostFunction); + return reinterpret_cast(reinterpret_cast(vPC) | (static_cast(inCTIFunction) << 1) | static_cast(inHostFunction)); } + static void sample(); + private: class Sample { public: @@ -174,7 +239,7 @@ namespace JSC { { } - bool isNull() { return !m_sample || !m_codeBlock; } + bool isNull() { return !m_sample; } CodeBlock* codeBlock() { return m_codeBlock; } Instruction* vPC() { return reinterpret_cast(m_sample & ~0x3); } bool inHostFunction() { return m_sample & 0x1; } @@ -184,17 +249,12 @@ namespace JSC { intptr_t m_sample; CodeBlock* m_codeBlock; }; - - static void* threadStartFunc(void*); - void run(); + + void doRun(); + static SamplingTool* s_samplingTool; Interpreter* m_interpreter; - // Sampling thread state. - bool m_running; - unsigned m_hertz; - ThreadIdentifier m_samplingThread; - // State tracked by the main thread, used by the sampling thread. CodeBlock* m_codeBlock; intptr_t m_sample; @@ -205,9 +265,147 @@ namespace JSC { unsigned m_opcodeSamples[numOpcodeIDs]; unsigned m_opcodeSamplesInCTIFunctions[numOpcodeIDs]; +#if ENABLE(CODEBLOCK_SAMPLING) Mutex m_scopeSampleMapMutex; OwnPtr m_scopeSampleMap; +#endif + }; + + // AbstractSamplingCounter: + // + // Implements a named set of counters, printed on exit if ENABLE(SAMPLING_COUNTERS). + // See subclasses below, SamplingCounter, GlobalSamplingCounter and DeletableSamplingCounter. + class AbstractSamplingCounter { + friend class JIT; + friend class DeletableSamplingCounter; + public: + void count(uint32_t count = 1) + { + m_counter += count; + } + + static void dump(); + + protected: + // Effectively the contructor, however called lazily in the case of GlobalSamplingCounter. + void init(const char* name) + { + m_counter = 0; + m_name = name; + + // Set m_next to point to the head of the chain, and inform whatever is + // currently at the head that this node will now hold the pointer to it. + m_next = s_abstractSamplingCounterChain; + s_abstractSamplingCounterChain->m_referer = &m_next; + // Add this node to the head of the list. + s_abstractSamplingCounterChain = this; + m_referer = &s_abstractSamplingCounterChain; + } + + int64_t m_counter; + const char* m_name; + AbstractSamplingCounter* m_next; + // This is a pointer to the pointer to this node in the chain; used to + // allow fast linked list deletion. + AbstractSamplingCounter** m_referer; + // Null object used to detect end of static chain. + static AbstractSamplingCounter s_abstractSamplingCounterChainEnd; + static AbstractSamplingCounter* s_abstractSamplingCounterChain; + static bool s_completed; + }; + +#if ENABLE(SAMPLING_COUNTERS) + // SamplingCounter: + // + // This class is suitable and (hopefully!) convenient for cases where a counter is + // required within the scope of a single function. It can be instantiated as a + // static variable since it contains a constructor but not a destructor (static + // variables in WebKit cannot have destructors). + // + // For example: + // + // void someFunction() + // { + // static SamplingCounter countMe("This is my counter. There are many like it, but this one is mine."); + // countMe.count(); + // // ... + // } + // + class SamplingCounter : public AbstractSamplingCounter { + public: + SamplingCounter(const char* name) { init(name); } + }; + + // GlobalSamplingCounter: + // + // This class is suitable for use where a counter is to be declared globally, + // since it contains neither a constructor nor destructor. Instead, ensure + // that 'name()' is called to provide the counter with a name (and also to + // allow it to be printed out on exit). + // + // GlobalSamplingCounter globalCounter; + // + // void firstFunction() + // { + // // Put this within a function that is definitely called! + // // (Or alternatively alongside all calls to 'count()'). + // globalCounter.name("I Name You Destroyer."); + // globalCounter.count(); + // // ... + // } + // + // void secondFunction() + // { + // globalCounter.count(); + // // ... + // } + // + class GlobalSamplingCounter : public AbstractSamplingCounter { + public: + void name(const char* name) + { + // Global objects should be mapped in zero filled memory, so this should + // be a safe (albeit not necessarily threadsafe) check for 'first call'. + if (!m_next) + init(name); + } + }; + + // DeletableSamplingCounter: + // + // The above classes (SamplingCounter, GlobalSamplingCounter), are intended for + // use within a global or static scope, and as such cannot have a destructor. + // This means there is no convenient way for them to remove themselves from the + // static list of counters, and should an instance of either class be freed + // before 'dump()' has walked over the list it will potentially walk over an + // invalid pointer. + // + // This class is intended for use where the counter may possibly be deleted before + // the program exits. Should this occur, the counter will print it's value to + // stderr, and remove itself from the static list. Example: + // + // DeletableSamplingCounter* counter = new DeletableSamplingCounter("The Counter With No Name"); + // counter->count(); + // delete counter; + // + class DeletableSamplingCounter : public AbstractSamplingCounter { + public: + DeletableSamplingCounter(const char* name) { init(name); } + + ~DeletableSamplingCounter() + { + if (!s_completed) + fprintf(stderr, "DeletableSamplingCounter \"%s\" deleted early (with count %lld)\n", m_name, m_counter); + // Our m_referer pointer should know where the pointer to this node is, + // and m_next should know that this node is the previous node in the list. + ASSERT(*m_referer == this); + ASSERT(m_next->m_referer == &m_next); + // Remove this node from the list, and inform m_next that we have done so. + m_next->m_referer = m_referer; + *m_referer = m_next; + } }; +#endif } // namespace JSC diff --git a/src/3rdparty/webkit/JavaScriptCore/bytecode/StructureStubInfo.h b/src/3rdparty/webkit/JavaScriptCore/bytecode/StructureStubInfo.h index a9e0678..24fcb7d 100644 --- a/src/3rdparty/webkit/JavaScriptCore/bytecode/StructureStubInfo.h +++ b/src/3rdparty/webkit/JavaScriptCore/bytecode/StructureStubInfo.h @@ -26,19 +26,18 @@ #ifndef StructureStubInfo_h #define StructureStubInfo_h +#if ENABLE(JIT) + #include "Instruction.h" +#include "MacroAssembler.h" #include "Opcode.h" #include "Structure.h" namespace JSC { -#if ENABLE(JIT) struct StructureStubInfo { StructureStubInfo(OpcodeID opcodeID) : opcodeID(opcodeID) - , stubRoutine(0) - , callReturnLocation(0) - , hotPathBegin(0) { } @@ -145,12 +144,13 @@ namespace JSC { } putByIdReplace; } u; - void* stubRoutine; - void* callReturnLocation; - void* hotPathBegin; + MacroAssembler::CodeLocationLabel stubRoutine; + MacroAssembler::CodeLocationCall callReturnLocation; + MacroAssembler::CodeLocationLabel hotPathBegin; }; -#endif } // namespace JSC +#endif + #endif // StructureStubInfo_h diff --git a/src/3rdparty/webkit/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp b/src/3rdparty/webkit/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp index 91279b8..21a3016 100644 --- a/src/3rdparty/webkit/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp +++ b/src/3rdparty/webkit/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp @@ -31,6 +31,7 @@ #include "BytecodeGenerator.h" #include "BatchedTransitionOptimizer.h" +#include "PrototypeFunction.h" #include "JSFunction.h" #include "Interpreter.h" #include "UString.h" @@ -115,7 +116,7 @@ namespace JSC { */ #ifndef NDEBUG -bool BytecodeGenerator::s_dumpsGeneratedCode = false; +static bool s_dumpsGeneratedCode = false; #endif void BytecodeGenerator::setDumpsGeneratedCode(bool dumpsGeneratedCode) @@ -145,14 +146,14 @@ void BytecodeGenerator::generate() #ifndef NDEBUG m_codeBlock->setInstructionCount(m_codeBlock->instructions().size()); - if (s_dumpsGeneratedCode) { - JSGlobalObject* globalObject = m_scopeChain->globalObject(); - m_codeBlock->dump(globalObject->globalExec()); - } + if (s_dumpsGeneratedCode) + m_codeBlock->dump(m_scopeChain->globalObject()->globalExec()); #endif if ((m_codeType == FunctionCode && !m_codeBlock->needsFullScopeChain() && !m_codeBlock->usesArguments()) || m_codeType == EvalCode) symbolTable().clear(); + + m_codeBlock->setIsNumericCompareFunction(instructions() == m_globalData->numericCompareFunction(m_scopeChain->globalObject()->globalExec())); #if !ENABLE(OPCODE_SAMPLING) if (!m_regeneratingForExceptionInfo && (m_codeType == FunctionCode || m_codeType == EvalCode)) @@ -211,7 +212,6 @@ void BytecodeGenerator::allocateConstants(size_t count) BytecodeGenerator::BytecodeGenerator(ProgramNode* programNode, const Debugger* debugger, const ScopeChain& scopeChain, SymbolTable* symbolTable, ProgramCodeBlock* codeBlock) : m_shouldEmitDebugHooks(!!debugger) , m_shouldEmitProfileHooks(scopeChain.globalObject()->supportsProfiling()) - , m_regeneratingForExceptionInfo(false) , m_scopeChain(&scopeChain) , m_symbolTable(symbolTable) , m_scopeNode(programNode) @@ -222,9 +222,12 @@ BytecodeGenerator::BytecodeGenerator(ProgramNode* programNode, const Debugger* d , m_baseScopeDepth(0) , m_codeType(GlobalCode) , m_nextGlobalIndex(-1) + , m_globalConstantIndex(0) , m_globalData(&scopeChain.globalObject()->globalExec()->globalData()) , m_lastOpcodeID(op_end) , m_emitNodeDepth(0) + , m_regeneratingForExceptionInfo(false) + , m_codeBlockBeingRegeneratedFrom(0) { if (m_shouldEmitDebugHooks) m_codeBlock->setNeedsFullScopeChain(true); @@ -259,7 +262,7 @@ BytecodeGenerator::BytecodeGenerator(ProgramNode* programNode, const Debugger* d m_nextGlobalIndex -= symbolTable->size(); for (size_t i = 0; i < functionStack.size(); ++i) { - FuncDeclNode* funcDecl = functionStack[i].get(); + FuncDeclNode* funcDecl = functionStack[i]; globalObject->removeDirect(funcDecl->m_ident); // Make sure our new function is not shadowed by an old property. emitNewFunction(addGlobalVar(funcDecl->m_ident, false), funcDecl); } @@ -275,7 +278,7 @@ BytecodeGenerator::BytecodeGenerator(ProgramNode* programNode, const Debugger* d emitLoad(newVars[i], jsUndefined()); } else { for (size_t i = 0; i < functionStack.size(); ++i) { - FuncDeclNode* funcDecl = functionStack[i].get(); + FuncDeclNode* funcDecl = functionStack[i]; globalObject->putWithAttributes(exec, funcDecl->m_ident, funcDecl->makeFunction(exec, scopeChain.node()), DontDelete); } for (size_t i = 0; i < varStack.size(); ++i) { @@ -294,7 +297,6 @@ BytecodeGenerator::BytecodeGenerator(ProgramNode* programNode, const Debugger* d BytecodeGenerator::BytecodeGenerator(FunctionBodyNode* functionBody, const Debugger* debugger, const ScopeChain& scopeChain, SymbolTable* symbolTable, CodeBlock* codeBlock) : m_shouldEmitDebugHooks(!!debugger) , m_shouldEmitProfileHooks(scopeChain.globalObject()->supportsProfiling()) - , m_regeneratingForExceptionInfo(false) , m_scopeChain(&scopeChain) , m_symbolTable(symbolTable) , m_scopeNode(functionBody) @@ -303,9 +305,12 @@ BytecodeGenerator::BytecodeGenerator(FunctionBodyNode* functionBody, const Debug , m_dynamicScopeDepth(0) , m_baseScopeDepth(0) , m_codeType(FunctionCode) + , m_globalConstantIndex(0) , m_globalData(&scopeChain.globalObject()->globalExec()->globalData()) , m_lastOpcodeID(op_end) , m_emitNodeDepth(0) + , m_regeneratingForExceptionInfo(false) + , m_codeBlockBeingRegeneratedFrom(0) { if (m_shouldEmitDebugHooks) m_codeBlock->setNeedsFullScopeChain(true); @@ -327,12 +332,19 @@ BytecodeGenerator::BytecodeGenerator(FunctionBodyNode* functionBody, const Debug } else emitOpcode(op_enter); - if (usesArguments) - emitOpcode(op_create_arguments); + if (usesArguments) { + emitOpcode(op_init_arguments); + + // The debugger currently retrieves the arguments object from an activation rather than pulling + // it from a call frame. In the long-term it should stop doing that (), + // but for now we force eager creation of the arguments object when debugging. + if (m_shouldEmitDebugHooks) + emitOpcode(op_create_arguments); + } const DeclarationStacks::FunctionStack& functionStack = functionBody->functionStack(); for (size_t i = 0; i < functionStack.size(); ++i) { - FuncDeclNode* funcDecl = functionStack[i].get(); + FuncDeclNode* funcDecl = functionStack[i]; const Identifier& ident = funcDecl->m_ident; m_functions.add(ident.ustring().rep()); emitNewFunction(addVar(ident, false), funcDecl); @@ -366,7 +378,6 @@ BytecodeGenerator::BytecodeGenerator(FunctionBodyNode* functionBody, const Debug BytecodeGenerator::BytecodeGenerator(EvalNode* evalNode, const Debugger* debugger, const ScopeChain& scopeChain, SymbolTable* symbolTable, EvalCodeBlock* codeBlock) : m_shouldEmitDebugHooks(!!debugger) , m_shouldEmitProfileHooks(scopeChain.globalObject()->supportsProfiling()) - , m_regeneratingForExceptionInfo(false) , m_scopeChain(&scopeChain) , m_symbolTable(symbolTable) , m_scopeNode(evalNode) @@ -374,11 +385,14 @@ BytecodeGenerator::BytecodeGenerator(EvalNode* evalNode, const Debugger* debugge , m_thisRegister(RegisterFile::ProgramCodeThisRegister) , m_finallyDepth(0) , m_dynamicScopeDepth(0) - , m_baseScopeDepth(scopeChain.localDepth()) + , m_baseScopeDepth(codeBlock->baseScopeDepth()) , m_codeType(EvalCode) + , m_globalConstantIndex(0) , m_globalData(&scopeChain.globalObject()->globalExec()->globalData()) , m_lastOpcodeID(op_end) , m_emitNodeDepth(0) + , m_regeneratingForExceptionInfo(false) + , m_codeBlockBeingRegeneratedFrom(0) { if (m_shouldEmitDebugHooks || m_baseScopeDepth) m_codeBlock->setNeedsFullScopeChain(true); @@ -421,6 +435,36 @@ RegisterID* BytecodeGenerator::registerFor(const Identifier& ident) if (entry.isNull()) return 0; + if (ident == propertyNames().arguments) + createArgumentsIfNecessary(); + + return ®isterFor(entry.getIndex()); +} + +bool BytecodeGenerator::willResolveToArguments(const Identifier& ident) +{ + if (ident != propertyNames().arguments) + return false; + + if (!shouldOptimizeLocals()) + return false; + + SymbolTableEntry entry = symbolTable().get(ident.ustring().rep()); + if (entry.isNull()) + return false; + + if (m_codeBlock->usesArguments() && m_codeType == FunctionCode) + return true; + + return false; +} + +RegisterID* BytecodeGenerator::uncheckedRegisterForArguments() +{ + ASSERT(willResolveToArguments(propertyNames().arguments)); + + SymbolTableEntry entry = symbolTable().get(propertyNames().arguments.ustring().rep()); + ASSERT(!entry.isNull()); return ®isterFor(entry.getIndex()); } @@ -645,6 +689,21 @@ PassRefPtr