- 12 Oct, 2017 1 commit
-
-
Marja Hölttä authored
Parser creates a FunctionState for default ctors, which affects the next_function_is_likely_called logic. PreParser needs to match that logic, so that Parser and PreParser agree about which functions are skippable. BUG=v8:5515, chromium:773576 Change-Id: I96cb6f5aa68e74389a863355f70a34693a2d1329 Reviewed-on: https://chromium-review.googlesource.com/712579 Commit-Queue: Marja Hölttä <marja@chromium.org> Reviewed-by: Adam Klein <adamk@chromium.org> Cr-Commit-Position: refs/heads/master@{#48511}
-
- 05 Oct, 2017 1 commit
-
-
Marja Hölttä authored
The catch variable is a special VAR-mode variable which is not in a declaration scope. Normally creating such a variable is not possible with DeclareVariable, but Parser bypasses it by calling DeclareLocal directly (which doesn't have the hoisting check). PreParser used to cut corners and declare the catch variable as a LET-mode variable to prevent hoisting. But since LET and VAR variables behave differently when deciding whether they block sloppy block function hoisting, that approach doesn't fly. BUG=v8:5516,chromium:771474 Change-Id: Ic6f5f4996416c9fa59132725c8b0b6b570c72f48 Reviewed-on: https://chromium-review.googlesource.com/700634 Commit-Queue: Marja Hölttä <marja@chromium.org> Reviewed-by: Adam Klein <adamk@chromium.org> Cr-Commit-Position: refs/heads/master@{#48308}
-
- 25 Sep, 2017 1 commit
-
-
Marja Hölttä authored
Track whether the async arrow func parameter list was simple or not; the information is already there, we just didn't pipe it through correctly. It's needed by PreParser so that it can create the correct Scope structure. Implementation notes: - I could've used async_classifier for transmitting the "is_simple" bit, but I made it explicit (it would be unnecessary to use ExpressionClassifier for this, as we're not classifying any expressions) instead. - I'm also moving work (setting parameter_list.is_simple) from Parser to ParserBase, and adding a DCHECK in Parser to assert that the work was indeed already done. BUG=v8:5516,chromium:765532 Change-Id: Iacf91b150d1b57996544b5e64baa7d91ac134445 Reviewed-on: https://chromium-review.googlesource.com/674695 Commit-Queue: Marja Hölttä <marja@chromium.org> Reviewed-by: Adam Klein <adamk@chromium.org> Cr-Commit-Position: refs/heads/master@{#48132}
-
- 31 Aug, 2017 1 commit
-
-
Marja Hölttä authored
PreParser and Parser didn't agree whether a generator in a sloppy block is a sloppy block function or not, and thus the data generated by PreParser was inconsistent with what the Parser wanted to restore. BUG=v8:5516, chromium:760116 Change-Id: I0fd3c267691b8afd63a1336774769caf551c143e Reviewed-on: https://chromium-review.googlesource.com/642886Reviewed-by: Adam Klein <adamk@chromium.org> Commit-Queue: Marja Hölttä <marja@chromium.org> Cr-Commit-Position: refs/heads/master@{#47727}
-
- 22 Aug, 2017 1 commit
-
-
Marja Hölttä authored
This stopped working because of r47337 ( https://chromium-review.googlesource.com/c/v8/v8/+/605949/8/src/compiler.cc#418 ). Also enhanced the test so that it would've caught this. BUG=v8:5516 Change-Id: I933a8b5d787c3eb8b2cc230e2b35df1f25b500e7 Reviewed-on: https://chromium-review.googlesource.com/625618Reviewed-by: Ross McIlroy <rmcilroy@chromium.org> Reviewed-by: Camillo Bruni <cbruni@chromium.org> Commit-Queue: Marja Hölttä <marja@chromium.org> Cr-Commit-Position: refs/heads/master@{#47498}
-
- 16 Aug, 2017 1 commit
-
-
Marja Hölttä authored
Makes ClusterFuzz start fuzzing with the flag on. BUG=v8:5516 Change-Id: Ia80f7d22f12fe25efb226102a896e8b0e3537947 Reviewed-on: https://chromium-review.googlesource.com/610000 Commit-Queue: Marja Hölttä <marja@chromium.org> Reviewed-by: Adam Klein <adamk@chromium.org> Cr-Commit-Position: refs/heads/master@{#47366}
-
- 12 Aug, 2017 1 commit
-
-
Marja Hölttä authored
These now pass because of https://chromium-review.googlesource.com/603787. BUG=v8:5516 Change-Id: Ifcb576056c3cba523e56c5c9c563724efe096012 Reviewed-on: https://chromium-review.googlesource.com/608972Reviewed-by: Adam Klein <adamk@chromium.org> Commit-Queue: Marja Hölttä <marja@chromium.org> Cr-Commit-Position: refs/heads/master@{#47325}
-
- 04 Aug, 2017 1 commit
-
-
Marja Hölttä authored
In some cases, PreParser cannot replicate the Scope structure created by Parser. It happens esp. with arrow function parameters, since the relevant information is already lost by the time we figure out it's an arrow function. In these cases, PreParser should bail out of trying to create data for skipping inner functions. Implementation notes: - The arrow function case is more fundamental; the non-arrow case could be hacked together somehow if we implemented tracking is_simple for each param separately; but now that it's possible to bail out consistently from both cases, I don't think the is_simple complication is worth it. - The added mjsunit test cases are based on the test262 test cases which exposed the problem. - cctest/preparser/PreParserScopeAnalysis was exercising similar cases, but the problem didn't show up because the function parameters didn't contain skippable functions. Those test cases have been repurposed for testing the bailout. - Extra precaution: the bailout tests are in a separate file, to guard from the bug that a bailout case results in bailing out of *all* data creation, which would make all skipping tests in the same file useless. BUG=v8:5516 Change-Id: I4324749a5ec602fa5d7dc27647ade0284a6842fe Reviewed-on: https://chromium-review.googlesource.com/599849Reviewed-by: Adam Klein <adamk@chromium.org> Commit-Queue: Marja Hölttä <marja@chromium.org> Cr-Commit-Position: refs/heads/master@{#47170}
-
- 30 Jun, 2017 1 commit
-
-
Marja Hölttä authored
This way, each lazy function needs to handle only the data relevant to itself. This reduced data handling overheads. Other changes: 1) Don't deserialize the data; once it's on the heap, it can stay there. Lazy function compilation is only done in the main thread. 2) Separate ProducedPreParsedScopeData and ConsumedPreParsedScopeData. It's clearer, because: - The data looks fundamentally different when we're producing it and when we're consuming it. - Cleanly separates the operations we can do in the "producing phase" and in the "consuming phase". Bug: v8:5516 Change-Id: I6985a6621f71b348a55155724765624b5d5f7c33 Reviewed-on: https://chromium-review.googlesource.com/528094 Commit-Queue: Marja Hölttä <marja@chromium.org> Reviewed-by: Michael Starzinger <mstarzinger@chromium.org> Reviewed-by: Adam Klein <adamk@chromium.org> Cr-Commit-Position: refs/heads/master@{#46347}
-
- 23 Jun, 2017 1 commit
-
-
Marja Hölttä authored
Should've been part of https://chromium-review.googlesource.com/544300 BUG=v8:5516 Change-Id: I315b37d313b64c738174a6cd7461e5c46e362734 Reviewed-on: https://chromium-review.googlesource.com/544939Reviewed-by: Daniel Vogelheim <vogelheim@chromium.org> Commit-Queue: Marja Hölttä <marja@chromium.org> Cr-Commit-Position: refs/heads/master@{#46156}
-
- 22 Jun, 2017 2 commits
-
-
Marja Hölttä authored
In the failing case (see test), the loop variable (which should be context allocated) is in a hidden scope, so we need to save and restore data for hidden scopes too. The !is_hidden() check was overly limiting - NeedsScopeData already handles the "hidden leaf scope" case which is the one we want to avoid. (Btw, this also means that the previous assumption "variables in hidden scopes are not context allocated" was wrong.) BUG=v8:5516 Change-Id: I1c6116654b19ef0cfd64e8a743b46af683a9fcd5 Reviewed-on: https://chromium-review.googlesource.com/544938 Commit-Queue: Marja Hölttä <marja@chromium.org> Reviewed-by: Daniel Vogelheim <vogelheim@chromium.org> Cr-Commit-Position: refs/heads/master@{#46136}
-
Marja Hölttä authored
let f = function g() { ... } declares "g" inside the function. This CL makes the preparser declare it too, and saves + restores the scope data for it. BUG=v8:5516 Change-Id: Id4c64f446d30f5252038cfb0f0f473b85ba24a9b Reviewed-on: https://chromium-review.googlesource.com/544816 Commit-Queue: Marja Hölttä <marja@chromium.org> Reviewed-by: Daniel Vogelheim <vogelheim@chromium.org> Cr-Commit-Position: refs/heads/master@{#46133}
-
- 31 May, 2017 1 commit
-
-
Marja Hölttä authored
- Enable aggressive lazy inner funcs (make non-declaration funcs lazy, ie let f = function() { ... } when --experimental-preparser-scope-analysis is on. - Turn on variable tracking for lazy top level functions: this makes their inner functions skippable. - Test fix for an testing bug uncovered by this work: when restoring the data for the relevant scope, don't assume it's the outermost scope for which we have data. - Fix: if we abort lazy parsing a function, we shouldn't produce any data for it. BUG=v8:5516 Change-Id: I0606fbabb5886dc57dbb53ab5f3fb894ff5d032e Reviewed-on: https://chromium-review.googlesource.com/518165Reviewed-by: Daniel Vogelheim <vogelheim@chromium.org> Commit-Queue: Marja Hölttä <marja@chromium.org> Cr-Commit-Position: refs/heads/master@{#45615}
-
- 18 Apr, 2017 1 commit
-
-
Marja Hölttä authored
The feature is not quite ready for getting ClusterFuzzed. BUG=v8:5516 Change-Id: I90a42f950727c8ecf46cb2987c9a459b2ba1f5a7 Reviewed-on: https://chromium-review.googlesource.com/480400 Commit-Queue: Marja Hölttä <marja@chromium.org> Reviewed-by: Daniel Vogelheim <vogelheim@chromium.org> Cr-Commit-Position: refs/heads/master@{#44693}
-
- 12 Apr, 2017 1 commit
-
-
Marja Hölttä authored
Unfortunately, this test cannot test that a function was really skipped (i.e., not parsed). BUG=v8:5516 Change-Id: I8db5027d2216a95cc012ceae8e17554095cc1d4f Reviewed-on: https://chromium-review.googlesource.com/457037Reviewed-by: Daniel Vogelheim <vogelheim@chromium.org> Commit-Queue: Marja Hölttä <marja@chromium.org> Cr-Commit-Position: refs/heads/master@{#44615}
-