1// Copyright 2015 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 6(function TestSloppyEvalScoping() { 7 var x = 1; 8 9 function f41({[eval("var x = 2; 'a'")]: w}, z = x) { return z; } 10 assertEquals(1, f41({})); 11 assertEquals(1, f41({a: 0})); 12 function f42({[eval("var x = 2; 'a'")]: w}, z = eval("x")) { return z; } 13 assertEquals(1, f42({})); 14 assertEquals(1, f42({a: 0})); 15 function f43({a: w = eval("var x = 2")}, z = x) { return z; } 16 assertEquals(1, f43({})); 17 assertEquals(1, f43({a: 0})); 18 function f44({a: w = eval("var x = 2")}, z = eval("x")) { return z; } 19 assertEquals(1, f44({})); 20 assertEquals(1, f44({a: 0})); 21 22 function f5({a = eval("var x = 2"), b = x}) { return b; } 23 assertEquals(2, f5({})); 24 assertEquals(1, f5({a: 0})); 25 function f6({a = eval("var x = 2"), b = eval("x")}) { return b; } 26 assertEquals(2, f6({})); 27 assertEquals(1, f6({a: 0})); 28 function f71({[eval("var x = 2; 'a'")]: w, b = x}) { return b; } 29 assertEquals(2, f71({})); 30 assertEquals(2, f71({a: 0})); 31 function f72({[eval("var x = 2; 'a'")]: w, b = eval("x")}) { return b; } 32 assertEquals(2, f72({})); 33 assertEquals(2, f72({a: 0})); 34 function f73({a: w = eval("var x = 2"), b = x}) { return b; } 35 assertEquals(2, f73({})); 36 assertEquals(1, f73({a: 0})); 37 function f74({a: w = eval("var x = 2"), b = eval("x")}) { return b; } 38 assertEquals(2, f74({})); 39 assertEquals(1, f74({a: 0})); 40 41 var g41 = ({[eval("var x = 2; 'a'")]: w}, z = x) => { return z; }; 42 assertEquals(1, g41({})); 43 assertEquals(1, g41({a: 0})); 44 var g42 = ({[eval("var x = 2; 'a'")]: w}, z = eval("x")) => { return z; }; 45 assertEquals(1, g42({})); 46 assertEquals(1, g42({a: 0})); 47 var g43 = ({a: w = eval("var x = 2")}, z = x) => { return z; }; 48 assertEquals(1, g43({})); 49 assertEquals(1, g43({a: 0})); 50 var g44 = ({a: w = eval("var x = 2")}, z = eval("x")) => { return z; }; 51 assertEquals(1, g44({})); 52 assertEquals(1, g44({a: 0})); 53 54 var g5 = ({a = eval("var x = 2"), b = x}) => { return b; }; 55 assertEquals(2, g5({})); 56 assertEquals(1, g5({a: 0})); 57 var g6 = ({a = eval("var x = 2"), b = eval("x")}) => { return b; }; 58 assertEquals(2, g6({})); 59 assertEquals(1, g6({a: 0})); 60 var g71 = ({[eval("var x = 2; 'a'")]: w, b = x}) => { return b; }; 61 assertEquals(2, g71({})); 62 assertEquals(2, g71({a: 0})); 63 var g72 = ({[eval("var x = 2; 'a'")]: w, b = eval("x")}) => { return b; }; 64 assertEquals(2, g72({})); 65 assertEquals(2, g72({a: 0})); 66 var g73 = ({a: w = eval("var x = 2"), b = x}) => { return b; }; 67 assertEquals(2, g73({})); 68 assertEquals(1, g73({a: 0})); 69 var g74 = ({a: w = eval("var x = 2"), b = eval("x")}) => { return b; }; 70 assertEquals(2, g74({})); 71 assertEquals(1, g74({a: 0})); 72})(); 73 74 75(function TestStrictEvalScoping() { 76 'use strict'; 77 var x = 1; 78 79 function f41({[eval("var x = 2; 'a'")]: w}, z = x) { return z; } 80 assertEquals(1, f41({})); 81 assertEquals(1, f41({a: 0})); 82 function f42({[eval("var x = 2; 'a'")]: w}, z = eval("x")) { return z; } 83 assertEquals(1, f42({})); 84 assertEquals(1, f42({a: 0})); 85 function f43({a: w = eval("var x = 2")}, z = x) { return z; } 86 assertEquals(1, f43({})); 87 assertEquals(1, f43({a: 0})); 88 function f44({a: w = eval("var x = 2")}, z = eval("x")) { return z; } 89 assertEquals(1, f44({})); 90 assertEquals(1, f44({a: 0})); 91 92 function f5({a = eval("var x = 2"), b = x}) { return b; } 93 assertEquals(1, f5({})); 94 assertEquals(1, f5({a: 0})); 95 function f6({a = eval("var x = 2"), b = eval("x")}) { return b; } 96 assertEquals(1, f6({})); 97 assertEquals(1, f6({a: 0})); 98 function f71({[eval("var x = 2; 'a'")]: w, b = x}) { return b; } 99 assertEquals(1, f71({})); 100 assertEquals(1, f71({a: 0})); 101 function f72({[eval("var x = 2; 'a'")]: w, b = eval("x")}) { return b; } 102 assertEquals(1, f72({})); 103 assertEquals(1, f72({a: 0})); 104 function f73({a: w = eval("var x = 2"), b = x}) { return b; } 105 assertEquals(1, f73({})); 106 assertEquals(1, f73({a: 0})); 107 function f74({a: w = eval("var x = 2"), b = eval("x")}) { return b; } 108 assertEquals(1, f74({})); 109 assertEquals(1, f74({a: 0})); 110})(); 111