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