1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/js/src/tests/js1_7/extensions/regress-351070-02.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,69 @@ 1.4 +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 1.5 +/* This Source Code Form is subject to the terms of the Mozilla Public 1.6 + * License, v. 2.0. If a copy of the MPL was not distributed with this 1.7 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 1.8 + 1.9 +//----------------------------------------------------------------------------- 1.10 +var BUGNUMBER = 351070; 1.11 +var summary = 'decompilation of let declaration should not change scope'; 1.12 +var actual = ''; 1.13 +var expect = ''; 1.14 + 1.15 + 1.16 +//----------------------------------------------------------------------------- 1.17 +test(); 1.18 +//----------------------------------------------------------------------------- 1.19 + 1.20 +function test() 1.21 +{ 1.22 + enterFunc ('test'); 1.23 + printBugNumber(BUGNUMBER); 1.24 + printStatus (summary); 1.25 + 1.26 + try 1.27 + { 1.28 + var pfx = "(function f() { var n = 2, a = 2; ", 1.29 + decl = " let a = 3;", 1.30 + end = " return a; })"; 1.31 + 1.32 + var table = [ 1.33 + ["if (!!true)", ""], 1.34 + ["if (!!true)", " else foopy();"], 1.35 + ["if (!true); else", ""], 1.36 + ["do ", " while (false);"], 1.37 + ["while (--n)", ""], 1.38 + ["for (--n;n;--n)", ""], 1.39 + ["for (a in this)", ""], 1.40 + ["with (this)", ""], 1.41 + ]; 1.42 + 1.43 + expect = 3; 1.44 + 1.45 + for (i = 0; i < table.length; i++) { 1.46 + var src = pfx + table[i][0] + decl + table[i][1] + end; 1.47 + print('src: ' + src); 1.48 + var fun = eval(src); 1.49 + var testval = fun(); 1.50 + reportCompare(expect, testval, summary + ': ' + src); 1.51 + if (testval != expect) { 1.52 + break; 1.53 + } 1.54 + print('uneval: ' + uneval(fun)); 1.55 + var declsrc = '(' + 1.56 + src.slice(1, -1).replace('function f', 'function f' + i) + ')'; 1.57 + print('declsrc: ' + declsrc); 1.58 + this['f' + i] = eval(declsrc); 1.59 + print('f' + i + ': ' + this['f' + i]); 1.60 + } 1.61 + } 1.62 + catch(ex) 1.63 + { 1.64 + // See https://bugzilla.mozilla.org/show_bug.cgi?id=408957 1.65 + summary = 'let declaration must be direct child of block or top-level implicit block'; 1.66 + expect = 'SyntaxError'; 1.67 + actual = ex.name; 1.68 + reportCompare(expect, actual, summary); 1.69 + } 1.70 + 1.71 + exitFunc ('test'); 1.72 +}