18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* The contents of this file are subject to the Netscape Public 38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* License Version 1.1 (the "License"); you may not use this file 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* except in compliance with the License. You may obtain a copy of 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* the License at http://www.mozilla.org/NPL/ 68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* 78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* Software distributed under the License is distributed on an "AS 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* implied. See the License for the specific language governing 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* rights and limitations under the License. 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* The Original Code is mozilla.org code. 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* The Initial Developer of the Original Code is Netscape 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* Communications Corporation. Portions created by Netscape are 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* Copyright (C) 1998 Netscape Communications Corporation. 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* All Rights Reserved. 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* Contributor(s): igor@icesoft.no, pschwartau@netscape.com 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* Date: 24 September 2001 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* SUMMARY: Try assigning arr.length = new Number(n) 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* From correspondence with Igor Bukanov <igor@icesoft.no> 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* See http://bugzilla.mozilla.org/show_bug.cgi?id=101488 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* 268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* Without the "new" keyword, assigning arr.length = Number(n) worked. 278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* But with it, Rhino was giving an error "Inappropriate array length" 288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* and SpiderMonkey was exiting without giving any error or return value - 298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* 308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* Comments on the Rhino code by igor@icesoft.no: 318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* 328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* jsSet_length requires that the new length value should be an instance 338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* of Number. But according to Ecma 15.4.5.1, item 12-13, an error should 348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* be thrown only if ToUint32(length_value) != ToNumber(length_value) 358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/ 368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project//----------------------------------------------------------------------------- 378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar UBound = 0; 388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar bug = 101488; 398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar summary = 'Try assigning arr.length = new Number(n)'; 408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar status = ''; 418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar statusitems = []; 428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar actual = ''; 438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar actualvalues = []; 448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar expect= ''; 458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar expectedvalues = []; 468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar arr = []; 478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatus = inSection(1); 508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectarr = Array(); 518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjecttryThis('arr.length = new Number(1);'); 528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectactual = arr.length; 538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectexpect = 1; 548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectaddThis(); 558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatus = inSection(2); 578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectarr = Array(5); 588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjecttryThis('arr.length = new Number(1);'); 598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectactual = arr.length; 608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectexpect = 1; 618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectaddThis(); 628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatus = inSection(3); 648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectarr = Array(); 658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjecttryThis('arr.length = new Number(17);'); 668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectactual = arr.length; 678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectexpect = 17; 688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectaddThis(); 698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatus = inSection(4); 718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectarr = Array(5); 728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjecttryThis('arr.length = new Number(17);'); 738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectactual = arr.length; 748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectexpect = 17; 758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectaddThis(); 768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Also try the above with the "new" keyword before Array(). 808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Array() and new Array() should be equivalent, by ECMA 15.4.1.1 818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatus = inSection(5); 838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectarr = new Array(); 848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjecttryThis('arr.length = new Number(1);'); 858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectactual = arr.length; 868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectexpect = 1; 878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectaddThis(); 888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatus = inSection(6); 908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectarr = new Array(5); 918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjecttryThis('arr.length = new Number(1);'); 928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectactual = arr.length; 938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectexpect = 1; 948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectaddThis(); 958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectarr = new Array(); 978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjecttryThis('arr.length = new Number(17);'); 988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectactual = arr.length; 998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectexpect = 17; 1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectaddThis(); 1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatus = inSection(7); 1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectarr = new Array(5); 1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjecttryThis('arr.length = new Number(17);'); 1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectactual = arr.length; 1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectexpect = 17; 1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectaddThis(); 1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project//----------------------------------------------------------------------------- 1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttest(); 1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project//----------------------------------------------------------------------------- 1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction tryThis(s) 1188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project try 1208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 1218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project eval(s); 1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project catch(e) 1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // keep going 1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction addThis() 1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project statusitems[UBound] = status; 1338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project actualvalues[UBound] = actual; 1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project expectedvalues[UBound] = expect; 1358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project UBound++; 1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction test() 1408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project enterFunc ('test'); 1428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project printBugNumber (bug); 1438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project printStatus (summary); 1448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (var i=0; i<UBound; i++) 1468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 1478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); 1488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project exitFunc ('test'); 1518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 152