aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/jsruntime
Commit message (Collapse)AuthorAgeFilesLines
...
| * | | doc: Fix qdoc warnings for templates and staticsMartin Smith2018-02-091-3/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Several \fn commands needed template parameters added, and several static functions that were not accessible were documented but should not have been documented. The template texts were added and the qdoc comments of the static functions were changed to non-qdoc comments. Change-Id: Icc44e243fbec2023865f47b7c73dc15d241d5b4d Reviewed-by: Topi Reiniö <topi.reinio@qt.io>
| * | | Fix crashes on WinRT when allocation of executable memory is disabledSimon Hausmann2018-02-094-6/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This regressed in commit b56f7d6f79b0de73c405b1503bfeb71ef5caf58f. We need to choose the YARR JIT (as well as the regular JIT) only if we can allocate executable memory. Change-Id: I150238fda7b3699cb1d7ffedeeed3c6f3f54132b Reviewed-by: Oliver Wolff <oliver.wolff@qt.io> Reviewed-by: Lars Knoll <lars.knoll@qt.io>
| * | | Merge "Merge remote-tracking branch 'origin/5.10' into dev" into ↵Shawn Rutledge2018-02-069-13/+27
| |\ \ \ | | | | | | | | | | | | | | | refs/staging/dev
| | * | | Merge remote-tracking branch 'origin/5.10' into devLiang Qi2018-02-029-13/+27
| | |\| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: src/plugins/qmltooling/qmldbg_profiler/qqmlprofilerservice.cpp src/qml/compiler/qqmlirbuilder.cpp src/qml/compiler/qqmlirbuilder_p.h src/qml/compiler/qqmltypecompiler.cpp src/qml/compiler/qv4codegen.cpp src/qml/compiler/qv4codegen_p.h src/qml/compiler/qv4compileddata_p.h src/qml/compiler/qv4compiler.cpp src/qml/compiler/qv4compilercontext_p.h src/qml/compiler/qv4isel_moth.cpp src/qml/compiler/qv4jsir.cpp src/qml/compiler/qv4jsir_p.h src/qml/jit/qv4isel_masm.cpp src/qml/jsruntime/qv4engine.cpp src/qml/jsruntime/qv4functionobject.cpp src/qml/jsruntime/qv4runtimecodegen.cpp src/qml/jsruntime/qv4script.cpp src/qml/jsruntime/qv4script_p.h src/qml/qml/qqmltypeloader.cpp src/quick/items/qquickanimatedimage.cpp src/quick/items/qquickanimatedimage_p_p.h src/quick/scenegraph/compressedtexture/qsgpkmhandler.cpp tests/auto/qml/qmlplugindump/qmlplugindump.pro tests/auto/qml/qmlplugindump/tst_qmlplugindump.cpp tools/qmlcachegen/qmlcachegen.cpp tools/qmljs/qmljs.cpp Done-with: Shawn Rutledge <shawn.rutledge@qt.io> Done-with: Lars Knoll <lars.knoll@qt.io> Done-with: Ulf Hermann <ulf.hermann@qt.io> Change-Id: I010e6525440a85f3b9a10bb9083f8e4352751b1d
| | | * | Merge remote-tracking branch 'origin/5.9' into 5.10Liang Qi2018-01-249-13/+30
| | | |\| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: .qmake.conf src/qml/compiler/qv4codegen.cpp src/qml/compiler/qv4compileddata_p.h src/qml/debugger/qqmlprofiler_p.h src/qml/jsruntime/qv4engine.cpp src/qml/memory/qv4mm.cpp src/qml/qml/qqmlcomponent.cpp src/qml/qml/qqmlobjectcreator.cpp src/qml/qml/qqmlobjectcreator_p.h src/qml/types/qqmldelegatemodel.cpp src/quick/items/qquickitem_p.h src/quick/items/qquickwindow.cpp tests/auto/quick/touchmouse/BLACKLIST tests/benchmarks/qml/holistic/tst_holistic.cpp Change-Id: I520f349ab4b048dd337d9647113564fc257865c2
| | | | * Speed up V4 QML context creationSimon Hausmann2018-01-163-0/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | After commit cae7975a036352ca4bbcf1381a445362f8e01367 the vtable became part of the internal class, which meant that for allocating the V4::QmlContext and the QV4::QmlContextWrapper we had one additional IC transition upon allocation. We can avoid that by providing a default IC for both types. Task-number: QTBUG-65708 Change-Id: I22815a24a8389b59103309806f6ac4ca382405f0 Reviewed-by: Lars Knoll <lars.knoll@qt.io>
| | | | * Fix crash when accessing a deleted objectMitch Curtis2018-01-111-0/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In QObjectWrapper::query(), return QV4::Attr_Invalid if the object was deleted. Task-number: QTBUG-44153 Change-Id: I53e8be6196489c323b190dbfa20d2dda2a54315e Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
| | | | * Enable JIT on QNX7 for ARM64Samuli Piippo2018-01-111-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Remove abs(long) definition, since the #ifdef check no longer works with QNX7 and QNX < 6.6 is no longer supported. [ChangeLog][Qml] Enabled ARM64 JIT for QNX7 Change-Id: Ife02f3edb508eddaf15da65954496265366e232d Reviewed-by: Simon Hausmann <simon.hausmann@qt.io> Reviewed-by: Lars Knoll <lars.knoll@qt.io>
| | | | * Enable JIT on QNX for X86_64Adam Treat2018-01-111-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | [ChangeLog][Qml] Enabled x86-64 JIT for QNX Change-Id: I41eeff4c3ff687e096098982614a739af8d697f9 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io> Reviewed-by: Lars Knoll <lars.knoll@qt.io>
| | | | * Use potentially intercepted URL as ID for compilation unitsUlf Hermann2017-12-215-10/+17
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We generally have to pass a URL and a file name everywhere because the logical URL might be something else than the actual file being loaded. For example a QQmlFileSelector might modify the URL to be loaded for a specific file. This resulting URL, however, should not be used to resolve further URLs defined in the file loaded that way. As we need to access QQmlTypeLoader::m_url as string more often now, cache it and avoid frequent translations between QUrl and QString. Furthermore, QQmlDataBlob's URLs are changed to follow the same semantics. The finalUrl is the one that should be used to resolve further URLs, the url is the one used to load the content, and subject to any redirects or interceptions. This changes the semantics of URL redirects. Previously a redirected URL was used as the base URL for furher URL resolution. This doesn't work because redirection occurs after interception and interception should not influence the resolution of further URLs. We now use the original URL as base URL for resolution of further URLs and rely on the server to redirect those, too. Task-number: QTBUG-61209 Change-Id: I93822f820bed2515995de3cb118099218b510ca4 Reviewed-by: Michael Brasser <michael.brasser@live.com>
| | | | * Fix stack use after scope when calling overloaded constructorsSimon Hausmann2017-12-141-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is a regression of commit 0d7dd44d781a73c4bd065c0660d4a2f824a86f05 that ended up moving the stack-local storage into a scope that's too close. Pointers into the storage are stored in methodArgTypes and used throughput the surrounding while loop. Covered by tst_QJSEngine::newQMetaObject when run with ASAN. Change-Id: I44928d67ebdb0b5bdcf99ddd8193f692c2a94539 Reviewed-by: Lars Knoll <lars.knoll@qt.io>
| * | | | Remove double indirection between QJSEngine and QV4::ExecutionEngineUlf Hermann2018-02-022-0/+7
| |/ / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | As QJSEngine's handle() method is internal, we can redefine it to return a pointer to an ExecutionEngine. That makes many things easier. Change-Id: Ie3df99e0bad5f00ad4fe73182896cd135fa82994 Reviewed-by: Lars Knoll <lars.knoll@qt.io>
| * | | Get rid of internal QQmlPrivate::CachedQmlUnit interface part 1Simon Hausmann2018-01-281-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Within QtQml we don't need to use this data structure anymore, we can use its one member directly Change-Id: Id850e12918257c7af3c97bfef41d1e93578842d2 Reviewed-by: Lars Knoll <lars.knoll@qt.io>
| * | | Remove private API dependency of qmlcachegen generated codeSimon Hausmann2018-01-281-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Since the compilation unit does not have a backend anymore, we can create it in QtQml itself instead of in generated stub code. That removes the last dependency to private headers in the generated code. Change-Id: I186fc5bd679476b1a4714e4e3ba0ac00b55676cf Reviewed-by: Lars Knoll <lars.knoll@qt.io>
| * | | Fix a couple of places where we'd free used objectsLars Knoll2018-01-262-5/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Make sure all our JS objects are referenced from the JS stack before calling into the memory manager. Change-Id: I88d622d37b9d6cfc19db4045ebd3fadc5bb4cabe Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
| * | | Fix compilation unit memory leak when using qml caching from resourcesSimon Hausmann2018-01-261-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The unit created via the factory function has a refcount of 1, so we need to adopt it. Change-Id: Ia7aadf02c9fc133919f97ea07fc3f3546a7e2680 Reviewed-by: Lars Knoll <lars.knoll@qt.io>
| * | | Remove some duplicated codeSimon Hausmann2018-01-253-15/+22
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We can centralize the code that initializes a V4::Script instance used in worker scripts as well as in the Qt.include() function. Change-Id: I9a83f990c694eb4d793ec5ac3b1c917d8c068d06 Reviewed-by: Lars Knoll <lars.knoll@qt.io>
| * | | Fix crash in tst_controls in QQC2Simon Hausmann2018-01-222-4/+24
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Handle startsWithUpper() for complex sub-strings Change-Id: Ia7494a880612761ee3caf9113c2ac5faa4edd182 Reviewed-by: Lars Knoll <lars.knoll@qt.io>
| * | | Remove unused methodLars Knoll2018-01-192-7/+0
| | | | | | | | | | | | | | | | | | | | Change-Id: If4748db470e053d0980700cedc33676359abb067 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
| * | | Disentangle include dependencies around the write barrierLars Knoll2018-01-194-5/+94
| | | | | | | | | | | | | | | | | | | | | | | | | | | | The write barrier header should have minimal dependencies. Change-Id: I071718c2fafe5020d1093ca3b363844f7a9b7b35 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
| * | | Introduce a SubString String typeLars Knoll2018-01-194-12/+50
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Use it in regexp matching. There's probably other places where we should use this as well. Change-Id: Ie2774acff0a5ec7b1c26c564fa40e65fecea29d4 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
| * | | Split up String type into a regular and a ComplexStringLars Knoll2018-01-194-61/+73
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Saves some memory for many cases, and will allow re-using the String itself as an identifier Change-Id: I462d63bc6f113dff1dce0de28ee4eea3949a4b95 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
| * | | V4 JIT: Fix JIT thresholdErik Verbruggen2018-01-171-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Because increments for the interpreter call counts are done after checking the threshold, the check has to be greater or equal. Otherwise this will be an off-by-one. Change-Id: Iebe6c5770512e58ff5af8170dd33ec850b054966 Reviewed-by: Lars Knoll <lars.knoll@qt.io>
| * | | Fix build without QML debuggingUlf Hermann2018-01-162-2/+6
| | | | | | | | | | | | | | | | | | | | Change-Id: Ie1b18dd00705b1913572b87c6968a63438e7a90c Reviewed-by: Lars Knoll <lars.knoll@qt.io>
| * | | Move the freeList from Heap::ArrayData to SparseArrayLars Knoll2018-01-155-20/+18
| | | | | | | | | | | | | | | | | | | | | | | | | | | | It's only used for sparse arrays, so the data should live there. Change-Id: I9ca04c73dd2dbebf459ee64c164a69681623a351 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
| * | | Get rid of BuiltinFunctionLars Knoll2018-01-159-113/+17
| | | | | | | | | | | | | | | | | | | | | | | | | | | | It's now unused. Change-Id: Id2941c212d488c9b0933fa06aac9922b9db13a05 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
| * | | Convert more builtin functions to use the new calling conventionLars Knoll2018-01-1212-78/+77
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Convert most of the methods used QML objects to the new calling convention. Converted IndexedBuiltinFunction to do the same. Change-Id: I41b26042c2f56f24988485b06e8ccd214e2573c0 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
| * | | Drop the qml-interpreter featureUlf Hermann2018-01-102-11/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | We cannot build QML without interpreter anymore. Change-Id: Ibc51240caa956132eef8753fa6c75939026930d5 Reviewed-by: Lars Knoll <lars.knoll@qt.io>
| * | | Fix calculation of String hash values for char *Lars Knoll2018-01-101-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If char is signed on the platform and the char * array contained non ascii values, this would actually miscompute the hash value Change-Id: Id26891482831bcc23c5ce61e8094a85b53d00a1c Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
| * | | Cleanup IdentifierHashLars Knoll2018-01-103-81/+41
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This class is only used in one place, so there's no point in it being a template. Change-Id: Ibbbed8d5be1d02015339c9b39cd1b167f36b8885 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
| * | | Merge remote-tracking branch 'origin/5.10' into devLiang Qi2018-01-092-7/+16
| |\| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: .qmake.conf src/qml/memory/qv4mm.cpp src/qml/qml/qqmlbinding.cpp Change-Id: I98e51ef5af12691196da5772a07d3d53d213efcc
| | * | Merge remote-tracking branch 'origin/5.9' into 5.10Liang Qi2018-01-042-7/+16
| | |\| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: src/qml/memory/qv4mm.cpp src/qml/memory/qv4mmdefs_p.h src/quick/items/qquickwindow.cpp src/quick/items/qquickwindow_p.h tests/auto/qml/debugger/qqmlprofilerservice/qqmlprofilerservice.pro tests/auto/qml/debugger/qqmlprofilerservice/tst_qqmlprofilerservice.cpp Change-Id: I7021fa1edf076627a67048f41f7b201220262b09
| | | * Re-enable QML memory profilingUlf Hermann2017-11-232-7/+16
| | | | | | | | | | | | | | | | | | | | | | | | Task-number: QTBUG-64674 Change-Id: I48ed1a51f66ef8d55cc026f140d270baaca04fbf Reviewed-by: Lars Knoll <lars.knoll@qt.io>
| | * | Update to new QRandomGenerator APIThiago Macieira2017-11-031-1/+1
| | | | | | | | | | | | | | | | | | | | Change-Id: I69f37f9304f24709a823fffd14e676c097712329 Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
| * | | V4 Profiler: Re-add memory profiling macrosUlf Hermann2018-01-091-0/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | This is a partial revert of 6a91dcba2e4fa85dc345c2d403c757ab7676e28c Change-Id: I3a501c6a8f17cea8192dca1dba493a8351e429da Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
| * | | Fix ASAN stack-use-after-scope error in CmpInstanceOf instructionSimon Hausmann2018-01-071-3/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is triggered by tst_qqmlecmascript::sequenceConversionThreads(). The call to fromReturnedValue(acc) creates a temporary value and the as() cast call returns a pointer to the temp. That becomes a dangling pointer when the temp goes out of scope. Duplicating the fromReturnedValue() avoids this and at least gcc is clever enough to collapse the isObject() code for both uses. Change-Id: I741206b0c10d16fcc4ffdf68532a721f74c1b0dc Reviewed-by: Lars Knoll <lars.knoll@qt.io>
| * | | Raise minimum supported MSVC version to 2015Friedemann Kleint2018-01-0611-16/+13
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Remove code for older versions and streamline #ifdefs. Remove the helpers macros Q_STATIC_ASSERT_FOR_SANE_COMPILERS and V4_ASSERT_IS_TRIVIAL. Task-number: QTBUG-40658 Task-number: QTBUG-51673 Change-Id: Ifa4fab653b10ce7858739adef08364cddc6507cf Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
| * | | Fix failed assertions coming from the QML list modelLars Knoll2017-12-291-0/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | QAbstractItemModel has become more strict in sanity checking the arguments of beginInsertRows and friends with change 00c09e752ff7e482e1308e0e34721dc979204595 in qtbase. Unfortunately, the QML list model was feeding it out of bound rows in some cases, leading to failed assertions. Fix this properly, by calculating the inserted/removed and changed rows on the fly when syncing the list model from the worker thread. Adjust the code in the XML list model as well, so it does call things in the proper order. Fix two tests, one for a minimal change in behavior (more correct now), the other to remove an assertion that is not valid anymore in debug builds (where assertions in QtCore will call rowCount()). Change-Id: Ied85269f78d41b64e06388590be3ed227ac88fdb Reviewed-by: J-P Nurmi <jpnurmi@qt.io>
| * | | V4: Only start JITting after a minimum of 3 callsErik Verbruggen2017-12-144-14/+27
| | | | | | | | | | | | | | | | | | | | | | | | Change-Id: I748e06041f3085980ce48391ba2d829a9d86a727 Reviewed-by: Lars Knoll <lars.knoll@qt.io> Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
| * | | Update to new QRandomGenerator APIThiago Macieira2017-12-051-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | To get latest qtbase dev integrated in qt5 dev again without qtdeclarative 5.10->dev merge. Change-Id: I6905649aca2b06302df8cee2f660f1f92398d36a Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io> (cherry picked from commit ee00fa01dc41deaaedfa0d1d5cc6cd750bfe75f4) Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* | | | wasm: various loading fixesLorn Potter2018-01-171-1/+4
| | | | | | | | | | | | | | | | | | | | Change-Id: I1d3827fa205dbe5bbfdb2569da3b9073c2adb37e Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
* | | | wasm: bitfield packing fixLorn Potter2018-01-172-0/+16
|/ / / | | | | | | | | | | | | | | | | | | | | | emscripten seems to have issues with them, acting as if they are const, and cannot be changed. Change-Id: I1b86580ca80dab08a0efbd25fbf5167625a704f9 Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
* | | fix uninitialized variable warningsShawn Rutledge2017-11-291-3/+3
| | | | | | | | | | | | | | | | | | Task-number: QTBUG-64792 Change-Id: I890f2ed57393ea3fc1c5640c56ac04e284a4ce32 Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* | | Cleanup now unused code paths in qv4lookupLars Knoll2017-11-272-81/+0
| | | | | | | | | | | | | | | Change-Id: Ifd3fbc128f0ff30458912c65429bcf6f577204a0 Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
* | | Convert setters to use the id in InternalClassLars Knoll2017-11-274-133/+102
| | | | | | | | | | | | | | | Change-Id: I7f3acf96e998a41d60d33f98b243089b9ee40ff0 Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
* | | Convert global getters to use the id in internalclassLars Knoll2017-11-272-127/+33
| | | | | | | | | | | | | | | Change-Id: Id443245ee9f02af48abbf5ba4811ac69ad409059 Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
* | | Convert primitive lookups to use the new ID in internal classLars Knoll2017-11-272-139/+69
| | | | | | | | | | | | | | | Change-Id: I1c2c3242f2a48e4e75b66b187127fcd362cd61c6 Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
* | | Refactor getter lookupsLars Knoll2017-11-274-226/+162
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Use the new id of InternalClass to simplify out lookup code for getters. Now all lookups in the prototype chain can be done at the same speed independent of the depth within the prototype chain with only two checks. Change-Id: I7d8451cc54c0ac50c1bcb4ae3bf386fd5f2a84aa Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
* | | Add a unique id to InternalClass that describes it's total stateLars Knoll2017-11-275-3/+82
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | So far the InternalClass only did describe the state of the class itself, but it wouldn't change if some of the underlying objects in the prototype chain changed. This now fixes that and introduces a unique ID that completely describes the state of the object including all it's prototypes. This opens up for optimizing lookups down to one branch and a load, independent of the depth of the value inside the prototype chain. Change-Id: I0787e0e4710f2f6703b1d5e35996124b3db2d2da Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
* | | V4: Change CallValue to have the value on the stackErik Verbruggen2017-11-231-2/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We used to store the value-to-be-called in the accumulator. So the generated bytecode looked like: LoadReg r1 CallValue() The first thing done in CallValue is to store the accumulator. So by not loading the accumulator, we can actually remove the subsequent store, which results in less interpreter instructions and one less store in CallValue. Change-Id: Icc7c8a5449bf369b9226d66bc6055cb705ef660e Reviewed-by: Lars Knoll <lars.knoll@qt.io>