Imported Upstream version 1.0.0
[platform/upstream/js.git] / js / src / tests / js1_7 / extensions / regress-346642-06.js
1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* ***** BEGIN LICENSE BLOCK *****
3  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
4  *
5  * The contents of this file are subject to the Mozilla Public License Version
6  * 1.1 (the "License"); you may not use this file except in compliance with
7  * the License. You may obtain a copy of the License at
8  * http://www.mozilla.org/MPL/
9  *
10  * Software distributed under the License is distributed on an "AS IS" basis,
11  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
12  * for the specific language governing rights and limitations under the
13  * License.
14  *
15  * The Original Code is JavaScript Engine testing utilities.
16  *
17  * The Initial Developer of the Original Code is
18  * Mozilla Foundation.
19  * Portions created by the Initial Developer are Copyright (C) 2006
20  * the Initial Developer. All Rights Reserved.
21  *
22  * Contributor(s): Jesse Ruderman
23  *                 Brendan Eich
24  *
25  * Alternatively, the contents of this file may be used under the terms of
26  * either the GNU General Public License Version 2 or later (the "GPL"), or
27  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
28  * in which case the provisions of the GPL or the LGPL are applicable instead
29  * of those above. If you wish to allow use of your version of this file only
30  * under the terms of either the GPL or the LGPL, and not to allow others to
31  * use your version of this file under the terms of the MPL, indicate your
32  * decision by deleting the provisions above and replace them with the notice
33  * and other provisions required by the GPL or the LGPL. If you do not delete
34  * the provisions above, a recipient may use your version of this file under    let (x=3) ((++x)())
35
36  * the terms of any one of the MPL, the GPL or the LGPL.
37  *
38  * ***** END LICENSE BLOCK ***** */
39
40 //-----------------------------------------------------------------------------
41 var BUGNUMBER = 346642;
42 var summary = 'decompilation of destructuring assignment';
43 var actual = '';
44 var expect = '';
45
46
47 //-----------------------------------------------------------------------------
48 test();
49 //-----------------------------------------------------------------------------
50
51 function test()
52 {
53   enterFunc ('test');
54   printBugNumber(BUGNUMBER);
55   printStatus (summary);
56
57   expect = 3;
58   actual = '';
59   "" + function() { [] = 3 }; actual = 3;
60   actual = 3;
61   reportCompare(expect, actual, summary + ': 1');
62
63   try
64   {
65     var z = 6;
66     var f = eval('(function (){for(let [] = []; false;) let z; return z})');
67     expect =  f();
68     actual = eval("("+f+")")()
69       reportCompare(expect, actual, summary + ': 2');
70   }
71   catch(ex)
72   {
73     // See https://bugzilla.mozilla.org/show_bug.cgi?id=408957
74     var summarytrunk = 'let declaration must be direct child of block or top-level implicit block';
75     expect = 'SyntaxError';
76     actual = ex.name;
77     reportCompare(expect, actual, summarytrunk);
78   }
79
80   expect = 3;
81   actual = '';
82   "" + function () { for(;; [[a]] = [5]) { } }; actual = 3;
83   reportCompare(expect, actual, summary + ': 3');
84
85   expect = 3;
86   actual = '';
87   f = function () { return { set x([a]) { yield; } } }
88   var obj = f();
89   uneval(obj); actual = 3;
90   reportCompare(expect, actual, summary + ': 4');
91
92   expect = 3;
93   actual = '';
94   "" + function () { [y([a]=b)] = z }; actual = 3;
95   reportCompare(expect, actual, summary + ': 5');
96
97   expect = 3;
98   actual = '';
99   "" + function () { for(;; ([[,]] = p)) { } }; actual = 3;
100   reportCompare(expect, actual, summary + ': 6');
101
102   expect = 3;
103   actual = '';
104   actual = 1; try {for(x in (function ([y]) { })() ) { }}catch(ex){} actual = 3;
105   reportCompare(expect, actual, summary + ': 7');
106
107   exitFunc ('test');
108 }