9a572e1d5f
Formal parameters of an arrow function are parsed even if the function itself is preparsed. It is because we don't know if it is an arrow function parameter list or just comma separated expression list. When we parse: (a, b = (function c() { return a; })()) call to function c may be just part of an assignment in an expression list, but if it's followed by: => { return b; } It is an arrow function and the call to c is a default parameter. Before we see the arrow we might have already created a parse task to parse function c. BUG=v8:6093 Change-Id: I59a59acfdbbfd808dab1518060748be2addcd54a Reviewed-on: https://chromium-review.googlesource.com/493347 Commit-Queue: Wiktor Garbacz <wiktorg@google.com> Reviewed-by: Marja Hölttä <marja@chromium.org> Reviewed-by: Daniel Vogelheim <vogelheim@chromium.org> Cr-Commit-Position: refs/heads/master@{#45132}
56 lines
1.1 KiB
JavaScript
56 lines
1.1 KiB
JavaScript
// Copyright 2017 the V8 project authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
// Flags: --compiler-dispatcher --use-parse-tasks --use-external-strings
|
|
|
|
(function(a) {
|
|
assertEquals(a, "IIFE");
|
|
})("IIFE");
|
|
|
|
(function(a, ...rest) {
|
|
assertEquals(a, 1);
|
|
assertEquals(rest.length, 2);
|
|
assertEquals(rest[0], 2);
|
|
assertEquals(rest[1], 3);
|
|
})(1,2,3);
|
|
|
|
var outer_var = 42;
|
|
|
|
function lazy_outer() {
|
|
return 42;
|
|
}
|
|
|
|
var eager_outer = (function() { return 42; });
|
|
|
|
(function() {
|
|
assertEquals(outer_var, 42);
|
|
assertEquals(lazy_outer(), 42);
|
|
assertEquals(eager_outer(), 42);
|
|
})();
|
|
|
|
var gen = (function*() {
|
|
yield 1;
|
|
yield 2;
|
|
})();
|
|
|
|
assertEquals(gen.next().value, 1);
|
|
assertEquals(gen.next().value, 2);
|
|
|
|
var result = (function recursive(a=0) {
|
|
if (a == 1) {
|
|
return 42;
|
|
}
|
|
return recursive(1);
|
|
})();
|
|
|
|
assertEquals(result, 42);
|
|
|
|
var a = 42;
|
|
var b;
|
|
var c = (a, b = (function z(){ return a+1; })());
|
|
assertEquals(b, 43);
|
|
assertEquals(c, 43);
|
|
var c = (a, b = (function z(){ return a+1; })()) => { return b; };
|
|
assertEquals(c(314), 315);
|