michael@0: /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ michael@0: /* This Source Code Form is subject to the terms of the Mozilla Public michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this michael@0: * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ michael@0: michael@0: //----------------------------------------------------------------------------- michael@0: var BUGNUMBER = 452498; michael@0: var summary = 'TM: upvar2 regression tests'; michael@0: var actual = ''; michael@0: var expect = ''; michael@0: michael@0: michael@0: //----------------------------------------------------------------------------- michael@0: test(); michael@0: //----------------------------------------------------------------------------- michael@0: michael@0: function test() michael@0: { michael@0: enterFunc ('test'); michael@0: printBugNumber(BUGNUMBER); michael@0: printStatus (summary); michael@0: michael@0: // ------- Comment #117 From Gary Kwong [:nth10sd] michael@0: michael@0: // The following all do not require -j. michael@0: michael@0: // ===== michael@0: michael@0: try michael@0: { michael@0: eval('x; function x(){}; const x;'); michael@0: } michael@0: catch(ex) michael@0: { michael@0: } michael@0: michael@0: // Assertion failure: !pn->isPlaceholder(), at ../jsparse.cpp:4876 michael@0: // ===== michael@0: (function(){ var x; eval("var x; x = null"); })(); michael@0: michael@0: // Assertion failure: !(pnu->pn_dflags & PND_BOUND), at ../jsemit.cpp:1818 michael@0: // ===== michael@0: (function(){const x = 0, y = delete x;})() michael@0: michael@0: // Assertion failure: JOF_OPTYPE(op) == JOF_ATOM, at ../jsemit.cpp:1710 michael@0: // ===== michael@0: try michael@0: { michael@0: (function(){(yield []) (function(){with({}){x} }); const x;})(); michael@0: } michael@0: catch(ex) michael@0: { michael@0: } michael@0: michael@0: // Assertion failure: cg->upvars.lookup(atom), at ../jsemit.cpp:2022 michael@0: // ===== michael@0: try michael@0: { michael@0: (function(){([]) ((function(q) { return q; })for (each in [1,2]))})(); michael@0: } michael@0: catch(ex) michael@0: { michael@0: } michael@0: // Assertion failure: lexdep->frameLevel() <= funbox->level, at ../jsparse.cpp:1782 michael@0: // Opt crash [@ JSCompiler::setFunctionKinds] near null michael@0: // ===== michael@0: michael@0: try michael@0: { michael@0: eval("((x1) > [(x)(function() { x;}) for each (x in x)])()"); michael@0: } michael@0: catch(ex) michael@0: { michael@0: } michael@0: michael@0: // Assertion failure: pnu->pn_lexdef == dn, at ../jsemit.cpp:1817 michael@0: // ===== michael@0: uneval(function(){for(var [arguments] = ({ get y(){} }) in y ) (x);}); michael@0: michael@0: // Assertion failure: n != 0, at ../jsfun.cpp:2689 michael@0: // ===== michael@0: try michael@0: { michael@0: eval('(function(){{for(c in (function (){ for(x in (x1))window} )()) {const x;} }})();'); michael@0: } michael@0: catch(ex) michael@0: { michael@0: } michael@0: michael@0: // Assertion failure: op == JSOP_GETLOCAL, at ../jsemit.cpp:4557 michael@0: // ===== michael@0: try michael@0: { michael@0: (eval("(function(){let x , x = (x for (x in null))});"))(); michael@0: } michael@0: catch(ex) michael@0: { michael@0: } michael@0: michael@0: // Assertion failure: (fun->u.i.script)->upvarsOffset != 0, at ../jsfun.cpp:1537 michael@0: // Opt crash [@ js_NewFlatClosure] near null michael@0: // ===== michael@0: "" + function(){for(var [x] in x1) ([]); function x(){}} michael@0: michael@0: // Assertion failure: cg->stackDepth == stackDepth, at ../jsemit.cpp:3664 michael@0: // Opt crash [@ JS_ArenaRealloc] near null michael@0: // ===== michael@0: try michael@0: { michael@0: eval( michael@0: "for (a in (function(){" + michael@0: " for each (let x in ['']) { return new function x1 (\u3056) { yield x } ();" + michael@0: " }})())" + michael@0: " function(){}" michael@0: ); michael@0: } michael@0: catch(ex) michael@0: { michael@0: } michael@0: // Crash [@ js_Interpret] near null michael@0: // ===== michael@0: michael@0: reportCompare(expect, actual, summary); michael@0: michael@0: exitFunc ('test'); michael@0: }