Index: test/mjsunit/regress/regress-520029.js |
diff --git a/test/mjsunit/regress/regress-520029.js b/test/mjsunit/regress/regress-520029.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..141ea40b724649565bda35211ef6ce57ff03368d |
--- /dev/null |
+++ b/test/mjsunit/regress/regress-520029.js |
@@ -0,0 +1,45 @@ |
+// Copyright 2015 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: --harmony-sloppy-let --harmony-sloppy |
+ |
+// Test that hoisting a function out of a lexical scope does not |
+// lead to a parsing error |
+ |
+function f(one) { class x { } { class x { } function g() { one; x; } g() } } f() |
+ |
+function g() { var x = 1; { let x = 2; function g() { x; } g(); } } |
+assertEquals(undefined, g()); |
+ |
+function __f_4(one) { |
+ var __v_10 = one + 1; |
+ { |
+ let __v_10 = one + 3; |
+ function __f_6() { |
+ one; |
+ __v_10; |
+ } |
+ __f_6(); |
+ } |
+} |
+__f_4(); |
+ |
+try { |
adamk
2015/08/21 21:39:04
Is this try/catch doing anything?
Dan Ehrenberg
2015/08/21 23:04:31
Yes, it's defining a function __f_14() which refer
|
+} catch (__v_14) { |
+ function __f_14() { return __v_14; } |
+} |
+ |
+assertThrows(() => { |
+ function __f_21() { } |
adamk
2015/08/21 21:39:04
Is this function doing anything?
Dan Ehrenberg
2015/08/21 23:04:31
Not sure, it does something to the scopes but I ac
|
+ try { |
+ throw 2; |
+ } catch(b) { |
+ n = __f_22; |
+ function __f_22() { |
+ return b + c; |
+ } |
+ let c = 3; |
+ } |
+ n(); |
+}, ReferenceError); |
adamk
2015/08/21 21:39:04
Sorry, I'm missing something; why does this cause
Dan Ehrenberg
2015/08/21 23:04:31
You're right, this doesn't actually make sense. An
|