1425bb815Sopenharmony_ci// Copyright JS Foundation and other contributors, http://js.foundation 2425bb815Sopenharmony_ci// 3425bb815Sopenharmony_ci// Licensed under the Apache License, Version 2.0 (the "License"); 4425bb815Sopenharmony_ci// you may not use this file except in compliance with the License. 5425bb815Sopenharmony_ci// You may obtain a copy of the License at 6425bb815Sopenharmony_ci// 7425bb815Sopenharmony_ci// http://www.apache.org/licenses/LICENSE-2.0 8425bb815Sopenharmony_ci// 9425bb815Sopenharmony_ci// Unless required by applicable law or agreed to in writing, software 10425bb815Sopenharmony_ci// distributed under the License is distributed on an "AS IS" BASIS 11425bb815Sopenharmony_ci// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12425bb815Sopenharmony_ci// See the License for the specific language governing permissions and 13425bb815Sopenharmony_ci// limitations under the License. 14425bb815Sopenharmony_ci 15425bb815Sopenharmony_civar a = 1; 16425bb815Sopenharmony_civar b = 2; 17425bb815Sopenharmony_ci 18425bb815Sopenharmony_cifunction f(x = eval("eval('var a = 3; function b() { return 4 } () => a')"), y = b) { 19425bb815Sopenharmony_ci eval("eval('var a = 5; function b() { return 6 }')"); 20425bb815Sopenharmony_ci 21425bb815Sopenharmony_ci assert(a === 5); 22425bb815Sopenharmony_ci assert(b() === 6); 23425bb815Sopenharmony_ci 24425bb815Sopenharmony_ci assert(x() === 3); 25425bb815Sopenharmony_ci assert(y() === 4); 26425bb815Sopenharmony_ci 27425bb815Sopenharmony_ci delete a; 28425bb815Sopenharmony_ci delete b; 29425bb815Sopenharmony_ci 30425bb815Sopenharmony_ci assert(a === 3); 31425bb815Sopenharmony_ci assert(b() === 4); 32425bb815Sopenharmony_ci 33425bb815Sopenharmony_ci assert(x() === 3); 34425bb815Sopenharmony_ci assert(y() === 4); 35425bb815Sopenharmony_ci 36425bb815Sopenharmony_ci delete a; 37425bb815Sopenharmony_ci delete b; 38425bb815Sopenharmony_ci 39425bb815Sopenharmony_ci assert(a === 1); 40425bb815Sopenharmony_ci assert(b === 2); 41425bb815Sopenharmony_ci 42425bb815Sopenharmony_ci assert(x() === 1); 43425bb815Sopenharmony_ci assert(y() === 4); 44425bb815Sopenharmony_ci} 45425bb815Sopenharmony_cif() 46425bb815Sopenharmony_ci 47425bb815Sopenharmony_cifunction g() { 48425bb815Sopenharmony_ci 'use strict' 49425bb815Sopenharmony_ci 50425bb815Sopenharmony_ci function h(x, y = function() { return x }) { 51425bb815Sopenharmony_ci var x = 2; 52425bb815Sopenharmony_ci 53425bb815Sopenharmony_ci /* This should not overwrite y. */ 54425bb815Sopenharmony_ci eval("var y = 3; assert (y === 3)"); 55425bb815Sopenharmony_ci 56425bb815Sopenharmony_ci assert(x === 2); 57425bb815Sopenharmony_ci assert(typeof y === "function"); 58425bb815Sopenharmony_ci assert(y() === 1); 59425bb815Sopenharmony_ci } 60425bb815Sopenharmony_ci h(1); 61425bb815Sopenharmony_ci} 62425bb815Sopenharmony_cig(); 63425bb815Sopenharmony_ci 64425bb815Sopenharmony_cifunction h(a, get = () => a, set = (v) => a = v) { 65425bb815Sopenharmony_ci assert(a === 1); 66425bb815Sopenharmony_ci 67425bb815Sopenharmony_ci var a = 2; 68425bb815Sopenharmony_ci 69425bb815Sopenharmony_ci assert(a === 2); 70425bb815Sopenharmony_ci assert(get() === 1); 71425bb815Sopenharmony_ci 72425bb815Sopenharmony_ci set(3) 73425bb815Sopenharmony_ci a = 4; 74425bb815Sopenharmony_ci 75425bb815Sopenharmony_ci assert(a === 4); 76425bb815Sopenharmony_ci assert(get() === 3); 77425bb815Sopenharmony_ci} 78425bb815Sopenharmony_cih(1); 79425bb815Sopenharmony_ci 80425bb815Sopenharmony_cifunction i([a], get = () => a, set = (v) => a = v) { 81425bb815Sopenharmony_ci assert(a === 1); 82425bb815Sopenharmony_ci 83425bb815Sopenharmony_ci var a; 84425bb815Sopenharmony_ci assert(a === 1); 85425bb815Sopenharmony_ci 86425bb815Sopenharmony_ci a = 2; 87425bb815Sopenharmony_ci 88425bb815Sopenharmony_ci assert(a === 2); 89425bb815Sopenharmony_ci assert(get() === 1); 90425bb815Sopenharmony_ci 91425bb815Sopenharmony_ci set(3) 92425bb815Sopenharmony_ci a = 4; 93425bb815Sopenharmony_ci 94425bb815Sopenharmony_ci assert(a === 4); 95425bb815Sopenharmony_ci assert(get() === 3); 96425bb815Sopenharmony_ci} 97425bb815Sopenharmony_cii([1]); 98425bb815Sopenharmony_ci 99425bb815Sopenharmony_cifunction j(a = eval()) { 100425bb815Sopenharmony_ci var a = 3.14; 101425bb815Sopenharmony_ci 102425bb815Sopenharmony_ci try { 103425bb815Sopenharmony_ci eval("throw 1; function a() { return 8; }") 104425bb815Sopenharmony_ci assert(false) 105425bb815Sopenharmony_ci } catch (e) { 106425bb815Sopenharmony_ci assert(e === 1) 107425bb815Sopenharmony_ci } 108425bb815Sopenharmony_ci 109425bb815Sopenharmony_ci assert(a() === 8) 110425bb815Sopenharmony_ci} 111425bb815Sopenharmony_cij() 112