blob: 1fde47507e1cbdebee0d4256dbc009aaa228eb0d [file] [log] [blame]
Ben Murdoch61f157c2016-09-16 13:49:30 +01001// Copyright 2016 the V8 project authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5// Flags: --no-harmony-restrictive-generators
6
7// In legacy mode, generators get sloppy-mode block-scoped function hoisting
8
9// Hoisting to the global scope
10
11{
12 function* foo() {}
13 assertEquals('function', typeof foo);
14}
15//assertEquals('function', typeof foo);
16
17// Hoisting within a function scope
18(function() {
19 { function* bar() {} }
20 assertEquals('function', typeof bar);
21})();
22
23// Lexical shadowing allowed; hoisting happens
24(function() {
25 function* x() { yield 1; }
26 { function* x() { yield 2 } }
27 assertEquals(2, x().next().value);
28})();
29
30// Duplicates allowed
31(function() {
32 function* y() { yield 1; }
33 function* y() { yield 2 }
34 assertEquals(2, y().next().value);
35})();
36
37// Functions and generators may duplicate each other
38(function() {
39 function* z() { yield 1; }
40 function z() { return 2 }
41 assertEquals(2, z());
42
43 function a() { return 1; }
44 function* a() { yield 2 }
45 assertEquals(2, a().next().value);
46})();
47
48// In strict mode, none of this happens
49
50(function() {
51 'use strict';
52
53 { function* bar() {} }
54 assertEquals('undefined', typeof bar);
55
56 // Lexical shadowing allowed; hoisting happens
57 function* x() { yield 1; }
58 { function* x() { yield 2 } }
59 assertEquals(1, x().next().value);
60})();