aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/compiler/qv4codegen.cpp
Commit message (Collapse)AuthorAgeFilesLines
...
* | Make sure we call Codegen::defineFunction with proper argumentsLars Knoll2018-05-021-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | So far, when instantiating QML bindings, the node parameter could be the same or a child of the body. This will break badly when we introduce lexical scopeing as that node could be an AST::Block that opens it's own context. Changing this requires some smaller adjustments to our autotests, as error locations will now be slightly different (pointing to the beginning of the binding, not the beginning of the RHS of the binding). Change-Id: I2c536a4fe6d8b549a138cc7967ef034eb2523f3b Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* | Split out the generation of indices for locals and registersLars Knoll2018-05-021-5/+7
| | | | | | | | | | Change-Id: I0e98ccba9ae3026cd8bfdc4cae100f280b5aa22c Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* | Refactor variable resolvingLars Knoll2018-05-021-143/+30
| | | | | | | | | | | | | | | | | | | | Move variable resolving into the context, and avoid creating ExecutionContext's whereever we can. This prepares things for block scoping, where this becomes rather important to be able to achieve decent performance. Change-Id: Idf3d3c12cf348a2c3da01989c26c8529ceb36c12 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* | Rename the CompilationMode enum to ContextTypeLars Knoll2018-05-021-11/+11
| | | | | | | | | | | | | | | | | | And make it an enum class. The new name fits better, as it's mainly used to determine the type of the context when parsing. Also already added the 'Block' value that will be needed. Change-Id: I70d963b6a0b22db1a3c607cce6bdd2054b29e000 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* | Properly set names of most anonymous functionsLars Knoll2018-05-021-3/+13
| | | | | | | | | | | | | | | | In ES6, anonymous functions assigned to a variable/property with a known name, inherit the name of that variable/property. Change-Id: I79479b9358b24d610e3e696eb19fe0ec4aee15d1 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* | Fix crashes when parsing functions with no parametersSimon Hausmann2018-05-021-1/+1
| | | | | | | | | | | | | | | | | | | | Commit da5fffbd34d8be68f8ee4c649881dbb673c9c0a5 introduced deferencing of the formals parameter list that can be a null pointer if the declared function has no parameters. Change-Id: Id7dce0f78b16266e672f0ae430ee4f979de5734d Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io> Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* | Support destructuring assignmentsLars Knoll2018-04-271-13/+32
| | | | | | | | | | | | | | | | Not everything works yet, but basic destructuring assignments do. Change-Id: I5f74691fd6458092ecfde9d1a8a802f99fc57b9e Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* | Add support for destructuring variable declarationsLars Knoll2018-04-271-21/+20
| | | | | | | | | | Change-Id: Ia7f894fb61cfa760e253963ab4815d98103cfd9b Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* | Use a PatternElement for VariableDeclarationsLars Knoll2018-04-271-12/+6
| | | | | | | | | | | | | | Required to get proper destructuring working. Change-Id: I99fc20a9f1bace1fe3981d88ce5466f9c8d98245 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* | Rework the AST for Literals and destructuring expressionsLars Knoll2018-04-271-44/+57
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Array/ObjectLiterals and destructuring expressions are syntactically very similar. In some cases (when using a destructuring expression as the lhs of an assigment), the parser needs to convert the literal into a destructuring expression. To support these, use the same data structures for both in the AST. Those Patterns can be converted with little additional work from a Literal to an AssignmentPattern and be used in all places where we need destructuring in addition to literals. Change-Id: I177599b46eab0f6e8cb2a40c3b3b11ed00a07d6a Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* | Rename Array/ObjectLiteral to Array/ObjectPattern in the ASTLars Knoll2018-04-271-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | To get a consistent representation in the AST, we need to unify the AST that is generated by theObjectLiterals, ObjectBindingPattern and ObjectAssignmentPattern rules in the grammar. Like this we can avoid having to reparse part of the source code, and instead replace this with consistency checks once we know which of the three grammars are supposed to apply. Change-Id: Ib90f521f9595db6bcad446e40de9b912bab3da7c Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* | Add support for 'class' to the ASTLars Knoll2018-04-271-0/+6
| | | | | | | | | | Change-Id: I2a9e8fb847dfa45ca77ee43e14f39f2b2def5792 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* | Added support for generator functions and yield expressions to the ASTLars Knoll2018-04-271-0/+10
| | | | | | | | | | | | | | | | | | Some smaller changes to the codegen are included as well to ensure that we catch all uses of generators and properly throw an unimplemented error on them for now. Change-Id: Ib915a0e862e128644ff00dfe989507783c912c66 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* | Add support for '...' in arguments lists to the ASTLars Knoll2018-04-271-1/+6
| | | | | | | | | | | | | | No support in the codegen yet. Change-Id: I9998d7abae086660fc0457c65b6d9050933a428f Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* | Add support for ... in ArrayLiterals to the ASTLars Knoll2018-04-271-0/+4
| | | | | | | | | | | | | | The codegen still throws a syntax error for now. Change-Id: I8134b27d6153f6d6df81a9bafc7ae9d573085b73 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* | Implement support for the ** and **= operatorsLars Knoll2018-04-261-0/+11
| | | | | | | | | | Change-Id: I58a21e70fdd040175b52465d6ba52e7fceaf6398 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* | Add support for 'super' and 'new.target' to the ASTLars Knoll2018-04-261-0/+20
| | | | | | | | | | | | | | Codegen will still throw a Syntax error on it though. Change-Id: I292dd166ad8cb4a62f2bcfa9637bdc76cf95bb51 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* | Add partial support for computed property namesLars Knoll2018-04-261-4/+27
| | | | | | | | | | | | | | | | Computed property names currently work in object literals and destructuring arguments. Change-Id: I9dc5bc61b45139ef1836072695ea2fe1ce4994ae Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* | Don't error on duplicate property names in object literalsLars Knoll2018-04-261-15/+3
| | | | | | | | | | | | | | | | | | | | | | | | This has been relaxed from ES5. In ES8 this is actually allowed even in strict mode. According to the spec we are to evaluate all rhs expressions, but assign the last one used in the object literal. The spec probably required this relaxation to be able to handle computed property names. Change-Id: Ia1b02010b7541946029951b36e5457a07fdee818 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* | Fix length property of Function objectsLars Knoll2018-04-261-0/+3
| | | | | | | | | | | | | | | | | | | | | | According to ES6, the length property is the number of required arguments, ie. the number of arguments until the first arg that has adefault parameter. Also fix a crash when parsing a parameterlist with a trailing comma. Change-Id: I4f6b2be4feae7b513388be66b43b160bb3cc77f1 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* | Fix some bugs in binding destructuringLars Knoll2018-04-261-3/+9
| | | | | | | | | | Change-Id: I4b18a88e443f3b263cbb1e2b5ca1ebbd353afa98 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* | Fix an assertion in the codegenLars Knoll2018-04-251-1/+1
| | | | | | | | | | | | | | | | If there is no name for the binding, we need to store it's value as a temp on the stack for further destructuring. Change-Id: Ibf8651e5aed4f45f2ca5f2d2d3ddeb8fc60b5f9f Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* | Bring JS grammar in line with ES7 specLars Knoll2018-04-251-83/+14
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This basically updates all grammar rules in the qqmljs.g file to be in line with the ES7 specification. Some special handling for the lookahead rules appearing in the spec was needed and is implemented through empty lookahead rules in the grammar, that might push an additional token into the token stream. Renamed some classes in the AST to be in line with the names used in ES7, and removed some other ones (SourceElements) that are no longer used. The ES7 grammar rules contain lots of variations of the base rules (with In/Return/Yield/Default suffixes). With the exception of the In and Default rules, these are implemented through state tracking in the parser and lexer. Change-Id: I4017d97cd050ed816c1dad11833e882cba30801a Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* | Don't do a forced lookup by nameLars Knoll2018-04-251-1/+1
| | | | | | | | | | | | | | | | | | | | Use referenceForName() consistently to do the lookup of a symbol. Otherwise we might get errors if the name refers to a local name that we do not export from the current scope Change-Id: I09e5816260cec8107411a8562e7f7b76f36912bf Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* | Support for destructuring arraysLars Knoll2018-04-251-12/+25
| | | | | | | | | | | | | | | | add support for destructuring of arrays when passing arguments to functions. Change-Id: I19feb39aa3ae520ec7591d49d1b14ceaa78783c6 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* | Partially support binding patternsLars Knoll2018-04-251-11/+57
| | | | | | | | | | | | | | | | Destructuring objects works, but arrays are not yet supported. Change-Id: I61e917e1964e3c719f71b8f11d194e09dfe288c2 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* | Some renamingLars Knoll2018-04-251-2/+2
| | | | | | | | | | | | | | | | Rename defaultExpression to initializer, and the fix the spelling of Initialiser to Initializer. Change-Id: I049039a742bdb77cb5f6beab9a28ff3b6f47a605 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* | Correctly check for duplicate parameter namesLars Knoll2018-04-251-11/+4
| | | | | | | | | | | | | | | | Those are not allowed as soon as we have default values for parameters or rest arguments. Change-Id: I7dec826c37e6045e4dd1f6b0adb90301efe33daf Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* | Add support for ES6 rest parametersLars Knoll2018-04-251-2/+8
| | | | | | | | | | | | | | function foo(a, b, ...c) {...} now works correctly. Change-Id: Ie442a0e7cc5e9dc4156e56b348bba305cced8531 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* | ES6: add support for default arguments for function parametersLars Knoll2018-04-251-3/+28
| | | | | | | | | | | | | | | | | | The parser can also handle rest parameters correctly, this will however require some additional work in the runtime to support it correctly. Change-Id: Ib6f4d27683774966b2d2aac075494d2f5066d2a2 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* | Implement support for tagged templatesLars Knoll2018-04-251-1/+110
| | | | | | | | | | | | | | Get Foo`...` to work as intended by the spec. Change-Id: If6ccdd7486d3c983c177a3e126e3a661e210a8ae Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* | Add support for ES6 template stringsLars Knoll2018-04-251-0/+43
|/ | | | | | | | | | | | | This requires a bit of bookeeping in the lexer, as we can have arbitrary expressions inside the ${...}. To make this work, keep a stack of template states, in which we count the unclosed braces to match up with the correct closing brace. Implements support for `...`. Expressions of the type Foo`...` and Foo()`...` will come in follow-up commits. Change-Id: Ia332796cfb77895583d0093732e6f56c8b0662c9 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* Fix crashes when parsing destructuring expressionsLars Knoll2018-04-161-1/+2
| | | | | | | | | | x = [y] = z would crash because [y] is a literal and not a valid lvalue in ES5, something our parser didn't catch correctly. Change-Id: I0d7abd9b3f812f1de61c77dccfab5d1778dac793 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* Handle function expressions as signal handlersErik Verbruggen2018-03-201-0/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | There are two ways to use function expressions on the right-hand side of bindings: property var somethingPressed somethingPressed: function() { /* ..press something else.. */ } signal buttonPressed onButtonPressed: function() { /* ..handle buttonPress.. */ } In the former case, it declares a property that holds a function. So on initialization, the right-hand side of the binding returns a closure that gets assigned to the property 'somethingPressed'. In the latter case, the signal handler is explicitly marked as a function for clarity. So, the handler should not be returning the closure, but the handler should *be* the closure. In general, it is not possible to detect if the left-hand side is a property or a signal handler when generating QML cache files ahead of time. So for this case, we mark the function as only returning a closure. Then when instantiating the object, we check if it is a signal handler, and if the handler is marked as only returning a closure. If so, we set that closure to be the signal handler. Task-number: QTBUG-57043 Task-number: QTBUG-50328 Change-Id: I3008ddd847e30b7d0adef07344a326f84d85f1ba Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* use the override keyword consistently and correctly (clang-tidy)Shawn Rutledge2018-02-271-7/+7
| | | | | Change-Id: If9e28d143f8cba3df3c757476b4f2265e2eb8b2a Reviewed-by: Johan Helsing <johan.helsing@qt.io>
* use nullptr consistently (clang-tidy)Shawn Rutledge2018-02-261-10/+10
| | | | | | | | | | | | | From now on we prefer nullptr instead of 0 to clarify cases where we are assigning or testing a pointer rather than a numeric zero. Also, replaced cases where 0 was passed as Qt::KeyboardModifiers with Qt::NoModifier (clang-tidy replaced them with nullptr, which waas wrong, so it was just as well to make the tests more readable rather than to revert those lines). Change-Id: I4735d35e4d9f42db5216862ce091429eadc6e65d Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* Correctly set this object when calling scope/context functionsErik Verbruggen2018-02-201-1/+17
| | | | | | | | | | | | | When a function is called that is in a QML scope or a QML context, set the 'this' object to the QML scope. This is done by introducing two new interpreter instructions, which get the context passed in. Note: this patch is 5.11 specific. 5.9 had a similair issue, but the implementation is quite different, so that was fixed separately. Task-number: QTBUG-66432 Change-Id: Ie43150cdd26360025895df28d31264985abf1c15 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* Fix "Expression depends on non-NOTIFYable properties" regressionMitch Curtis2018-02-171-6/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | CONSTANT properties are by nature non-NOTIFYable. The issue behind the regression is caused by the fact that we were capturing a property regardless of whether or not it was const. There were two states that captureRequired was expressing: true: We're reading the property of a QObject, and we're not quite sure where the QObject comes from or what it is. So, when reading that property at run-time, make sure that we capture where we read that property so that if it changes we can re-evaluate the entire expression. false: We're reading the property of a QObject, and we know that it's the scope object or context object, which we know very well. Instead of registering a property capture every time, we can do that ahead of time and then register all those captures in one shot in registerQmlDependencies(). There is a third state that is only relevant when captureRequired is false: We're reading a property from the scope or context object, but it's a CONSTANT property, so we don't need to register a dependency at all. This patch adds replaces captureRequired with the PropertyCapturePolicy enum, which accounts for the third state and, as a bonus, makes the code easier to understand. Task-number: QTBUG-66361 Change-Id: I6cef1deb76538fbdacf1324b4467403dd40dd7de Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* Add missing Q_FALLTRHOUGH()Thiago Macieira2018-02-161-0/+2
| | | | | Change-Id: I940917d6763842499b18fffd1513b8c1308ce873 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* Merge remote-tracking branch 'origin/5.10' into devLiang Qi2018-02-021-0/+3
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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-241-0/+4
| |\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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
| | * Use potentially intercepted URL as ID for compilation unitsUlf Hermann2017-12-211-0/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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 iterator assignment for for-in loopsErik Verbruggen2017-12-131-12/+21
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When iterating over an object using an for-in loop, the value for the next iteration should be assigned in the body of the loop. This means that after the loop, the value of the last iteration is still assigned to that variable, not null (which marks the end of the iterable values). Task-number: QTBUG-65104 Change-Id: Icbddbc67723719005120587bcdc63dcdfa52b67f Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* | | V4: Change CallValue to have the value on the stackErik Verbruggen2017-11-231-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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>
* | | V4: Collapse LoadRegExp+StoreReg into MoveRegExpErik Verbruggen2017-11-231-2/+3
| | | | | | | | | | | | | | | | | | | | | | | | LoadRegExp is nearly always followed by a store of the accumulator, so change LoadRegExp to be MoveRegExp. This saves an instruction. Change-Id: I5d47c5bf6ffd7f28247c328410872c3b229ca23c Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* | | Don't create a CallContext if arguments are being used in strict modeLars Knoll2017-11-151-2/+3
| | | | | | | | | | | | | | | | | | | | | The strict arguments object doesn't need a callcontext. Change-Id: I1d6419c456b28741167f76937906faffd2d5d3b4 Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
* | | V4: Get rid of Reference::This and treat it as a stack slotErik Verbruggen2017-11-141-11/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This actually generates better code, for example for 'this.x'. Previously: LoadReg (this) GetLookupA acc(0) Now: GetLookup (this)(0) Change-Id: I7e4125d3dff707e9af9691f8b00c5c398087e395 Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* | | Set Jump locations for loopsUlf Hermann2017-11-081-0/+27
| | | | | | | | | | | | | | | | | | | | | | | | We don't need them for if/else anymore as there are not block terminators anymore. Change-Id: I1ac384e7176cc35faf28028cd274c63dfaa96146 Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* | | Refactor Call/Construct instructionsLars Knoll2017-11-071-25/+30
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Give them a pointer to argc and argv instead of a pointer to a full callData. Like this we can construct the callData at the end of the JS stack and avoid the need to create an additional copy in VME::exec(). This also opens up the option of completely avoiding all copies for calls into runtime methods. Also make sure that the calldata we pass into other functions is always at the top of the JS stack. Change-Id: I3d0eb49f7bfd7adb9ddabb213422087c66e5a520 Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
* | | Codegen: Set source location for return instructionUlf Hermann2017-11-061-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | We need that in order to be able to break on the closing brace of a function. Change-Id: I4049f0553b01442025bda32c34fac6ce3d77246d Reviewed-by: Lars Knoll <lars.knoll@qt.io>