17f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch// Copyright 2010 the V8 project authors. All rights reserved.
27f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch// Redistribution and use in source and binary forms, with or without
37f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch// modification, are permitted provided that the following conditions are
47f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch// met:
57f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch//
67f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch//     * Redistributions of source code must retain the above copyright
77f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch//       notice, this list of conditions and the following disclaimer.
87f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch//     * Redistributions in binary form must reproduce the above
97f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch//       copyright notice, this list of conditions and the following
107f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch//       disclaimer in the documentation and/or other materials provided
117f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch//       with the distribution.
127f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch//     * Neither the name of Google Inc. nor the names of its
137f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch//       contributors may be used to endorse or promote products derived
147f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch//       from this software without specific prior written permission.
157f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch//
167f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
177f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
187f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
197f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
207f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
217f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
227f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
237f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
247f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
257f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
267f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
277f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch
287f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch// A test for keyed call ICs.
297f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch
307f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdochvar toStringName = 'toString';
317f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdochvar global = this;
327f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch
337f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdochfunction globalFunction1() {
347f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch  return 'function1';
357f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch}
367f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch
377f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdochfunction globalFunction2() {
387f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch  return 'function2';
397f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch}
407f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch
417f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen MurdochassertEquals("[object global]", this[toStringName]());
427f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen MurdochassertEquals("[object global]", global[toStringName]());
437f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch
447f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdochfunction testGlobals() {
457f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch  assertEquals("[object global]", this[toStringName]());
467f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch  assertEquals("[object global]", global[toStringName]());
477f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch}
487f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch
497f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen MurdochtestGlobals();
507f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch
517f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch
527f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdochfunction F() {}
537f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch
547f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen MurdochF.prototype.one = function() {return 'one'; }
557f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen MurdochF.prototype.two = function() {return 'two'; }
567f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen MurdochF.prototype.three = function() {return 'three'; }
577f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch
587f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdochvar keys =
597f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch    ['one', 'one', 'one',  'one', 'two', 'two', 'one', 'three', 'one', 'two'];
607f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch
617f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdochfunction testKeyTransitions() {
627f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch  var i, key, result, message;
637f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch
647f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch  var f = new F();
657f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch
667f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch  // Custom call generators
677f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch  var array = [];
687f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch  for (i = 0; i != 10; i++) {
697f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch    key = (i < 8) ? 'push' : 'pop';
707f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch    array[key](i);
717f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch  }
727f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch
737f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch  assertEquals(6, array.length);
747f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch  for (i = 0; i != array.length; i++) {
757f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch    assertEquals(i, array[i]);
767f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch  }
777f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch
787f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch  for (i = 0; i != 10; i++) {
797f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch    key = (i < 3) ? 'pop' : 'push';
807f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch    array[key](i);
817f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch  }
827f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch
837f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch  assertEquals(10, array.length);
847f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch  for (i = 0; i != array.length; i++) {
857f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch    assertEquals(i, array[i]);
867f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch  }
877f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch
887f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch  var string = 'ABCDEFGHIJ';
897f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch  for (i = 0; i != 10; i++) {
907f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch    key = ((i < 5) ? 'charAt' : 'charCodeAt');
917f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch    result = string[key](i);
927f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch    message = '\'' + string + '\'[\'' + key + '\'](' + i + ')';
937f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch    if (i < 5) {
947f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch      assertEquals(string.charAt(i), result, message);
957f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch    } else {
967f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch      assertEquals(string.charCodeAt(i), result, message);
977f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch    }
987f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch  }
997f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch
1007f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch  for (i = 0; i != 10; i++) {
1017f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch    key = ((i < 5) ? 'charCodeAt' : 'charAt');
1027f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch    result = string[key](i);
1037f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch    message = '\'' + string + '\'[\'' + key + '\'](' + i + ')';
1047f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch    if (i < 5) {
1057f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch      assertEquals(string.charCodeAt(i), result, message);
1067f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch    } else {
1077f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch      assertEquals(string.charAt(i), result, message);
1087f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch    }
1097f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch  }
1107f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch
1117f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch  // Function is a constant property
1127f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch  key = 'one';
1137f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch  for (i = 0; i != 10; i++) {
1147f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch    assertEquals(key, f[key]());
1157f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch    if (i == 5) {
1167f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch      key = 'two';  // the name change should case a miss
1177f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch    }
1187f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch  }
1197f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch
1207f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch  // Function is a fast property
1217f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch  f.field = function() { return 'field'; }
1227f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch  key = 'field';
1237f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch  for (i = 0; i != 10; i++) {
1247f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch    assertEquals(key, f[key]());
1257f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch    if (i == 5) {
1267f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch      key = 'two';  // the name change should case a miss
1277f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch    }
1287f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch  }
1297f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch
1307f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch  // Calling on slow case object
1317f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch  f.prop = 0;
1327f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch  delete f.prop; // force the object to the slow case
1337f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch  f.four = function() { return 'four'; }
1347f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch  f.five = function() { return 'five'; }
1357f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch
1367f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch  key = 'four';
1377f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch  for (i = 0; i != 10; i++) {
1387f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch    assertEquals(key, f[key]());
1397f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch    if (i == 5) {
1407f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch      key = 'five';
1417f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch    }
1427f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch  }
1437f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch
1447f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch  // Calling on global object
1457f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch  key = 'globalFunction1';
1467f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch  var expect = 'function1';
1477f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch  for (i = 0; i != 10; i++) {
1487f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch    assertEquals(expect, global[key]());
1497f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch    if (i == 5) {
1507f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch      key = 'globalFunction2';
1517f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch      expect = 'function2';
1527f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch    }
1537f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch  }
1547f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch}
1557f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch
1567f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen MurdochtestKeyTransitions();
1577f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch
1587f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdochfunction testTypeTransitions() {
1597f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch  var f = new F();
1607f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch  var s = '';
1617f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch  var m = 'one';
1627f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch  var i;
1637f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch
1647f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch  s = '';
1657f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch  for (i = 0; i != 10; i++) {
1667f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch    if (i == 5)  { F.prototype.one = function() { return '1'; } }
1677f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch    s += f[m]();
1687f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch  }
1697f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch  assertEquals("oneoneoneoneone11111", s);
1707f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch
1717f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch  s = '';
1727f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch  for (i = 0; i != 10; i++) {
1737f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch    if (i == 5)  { f.__proto__ = { one: function() { return 'I'; } } }
1747f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch    s += f[m]();
1757f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch  }
1767f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch  assertEquals("11111IIIII", s);
1777f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch
1787f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch  s = '';
1797f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch  for (i = 0; i != 10; i++) {
1807f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch    if (i == 5)  { f.one = function() { return 'ONE'; } }
1817f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch    s += f[m]();
1827f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch  }
1837f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch  assertEquals("IIIIIONEONEONEONEONE", s);
1847f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch
1857f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch  m = 'toString';
1867f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch
1877f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch  s = '';
1887f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch  var obj = { toString: function() { return '2'; } };
1897f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch  for (i = 0; i != 10; i++) {
1907f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch    if (i == 5)  { obj = "TWO"; }
1917f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch    s += obj[m]();
1927f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch  }
1937f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch  assertEquals("22222TWOTWOTWOTWOTWO", s);
1947f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch
1957f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch  s = '';
1967f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch  obj = { toString: function() { return 'ONE'; } };
1977f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch  m = 'toString';
1987f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch  for (i = 0; i != 10; i++) {
1997f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch    if (i == 5)  { obj = 1; }
2007f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch    s += obj[m]();
2017f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch  }
2027f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch  assertEquals("ONEONEONEONEONE11111", s);
2037f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch}
2047f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen Murdoch
2057f4d5bd8c03935e2c0cd412e561b8fc5a6a880aeBen MurdochtestTypeTransitions();
206