--- /dev/null
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test behaviour of JSON reviver function.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+
+Ensure the holder for our array is indeed an array
+PASS Array.isArray(currentHolder) is true
+PASS currentHolder.length is 5
+
+Ensure that the holder already has all the properties present at the start of filtering
+PASS currentHolder[0] is "a value"
+PASS currentHolder[1] is "another value"
+PASS currentHolder[2] is "and another value"
+PASS currentHolder[3] is "to delete"
+PASS currentHolder[4] is "extra value"
+
+Ensure the holder for our array is indeed an array
+PASS Array.isArray(currentHolder) is true
+PASS currentHolder.length is 5
+
+Ensure that we always get the same holder
+PASS currentHolder is lastHolder
+
+Ensure that returning undefined has removed the property 0 from the holder during filtering.
+FAIL currentHolder.hasOwnProperty(0) should be false. Was true.
+
+Ensure the holder for our array is indeed an array
+PASS Array.isArray(currentHolder) is true
+PASS currentHolder.length is 5
+
+Ensure that we always get the same holder
+PASS currentHolder is lastHolder
+
+Ensure that changing the value of a property is reflected while filtering.
+PASS currentHolder[2] is "a replaced value"
+
+Ensure that the changed value is reflected in the arguments passed to the reviver
+PASS value is currentHolder[2]
+
+Ensure the holder for our array is indeed an array
+PASS Array.isArray(currentHolder) is true
+PASS currentHolder.length is 5
+
+Ensure that we always get the same holder
+PASS currentHolder is lastHolder
+
+Ensure that we visited a value that we have deleted, and that deletion is reflected while filtering.
+PASS currentHolder.hasOwnProperty(3) is false
+
+Ensure that when visiting a deleted property value is undefined
+PASS value is undefined.
+
+Ensure the holder for our array is indeed an array
+PASS Array.isArray(currentHolder) is true
+FAIL currentHolder.length should be 3. Was 4.
+
+Ensure that we always get the same holder
+PASS currentHolder is lastHolder
+FAIL Did not call reviver for deleted property
+
+Ensure that we created the root holder as specified in ES5
+PASS '' in lastHolder is true
+PASS result is lastHolder['']
+
+Ensure that a deleted value is revived if the reviver function returns a value
+FAIL result.hasOwnProperty(3) should be true. Was false.
+
+Test behaviour of revivor used in conjunction with an object
+PASS currentHolder != globalObject is true
+
+Ensure that the holder already has all the properties present at the start of filtering
+PASS currentHolder['a property'] is "a value"
+PASS currentHolder['another property'] is "another value"
+PASS currentHolder['and another property'] is "and another value"
+PASS currentHolder['to delete'] is "will be deleted"
+PASS currentHolder != globalObject is true
+
+Ensure that we get the same holder object for each property
+PASS currentHolder is lastHolder
+
+Ensure that returning undefined has correctly removed the property 'a property' from the holder object
+PASS currentHolder.hasOwnProperty('a property') is false
+PASS currentHolder != globalObject is true
+
+Ensure that we get the same holder object for each property
+PASS currentHolder is lastHolder
+Ensure that changing the value of a property is reflected while filtering.
+PASS currentHolder['and another property'] is "a replaced value"
+
+Ensure that the changed value is reflected in the arguments passed to the reviver
+PASS value is "a replaced value"
+
+Ensure that we created the root holder as specified in ES5
+PASS lastHolder.hasOwnProperty('') is true
+PASS result.hasOwnProperty('a property') is false
+FAIL result.hasOwnProperty('to delete') should be true. Was false.
+PASS result is lastHolder['']
+
+Test behaviour of revivor that introduces a cycle
+PASS JSON.parse("[0,1]", reviveAddsCycle) threw exception RangeError: Maximum call stack size exceeded.
+
+Test behaviour of revivor that introduces a new array classed object (the result of a regex)
+PASS JSON.stringify(JSON.parse("[0,1]", reviveIntroducesNewArrayLikeObject)) is '[0,["a","a"]]'
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("Test behaviour of JSON reviver function.")
+if (!Array.isArray)
+ Array.isArray = function(o) { return o.constructor === Array; }
+
+function arrayReviver(i,v) {
+ if (i != "") {
+ currentHolder = this;
+ debug("");
+ debug("Ensure the holder for our array is indeed an array");
+ shouldBeTrue("Array.isArray(currentHolder)");
+ shouldBe("currentHolder.length", "" + expectedLength);
+ if (i > 0) {
+ debug("");
+ debug("Ensure that we always get the same holder");
+ shouldBe("currentHolder", "lastHolder");
+ }
+ switch (Number(i)) {
+ case 0:
+ v = undefined;
+ debug("");
+ debug("Ensure that the holder already has all the properties present at the start of filtering");
+ shouldBe("currentHolder[0]", '"a value"');
+ shouldBe("currentHolder[1]", '"another value"');
+ shouldBe("currentHolder[2]", '"and another value"');
+ shouldBe("currentHolder[3]", '"to delete"');
+ shouldBe("currentHolder[4]", '"extra value"');
+ break;
+
+ case 1:
+ debug("");
+ debug("Ensure that returning undefined has removed the property 0 from the holder during filtering.");
+ shouldBeFalse("currentHolder.hasOwnProperty(0)");
+ currentHolder[2] = "a replaced value";
+ break;
+
+ case 2:
+ debug("");
+ debug("Ensure that changing the value of a property is reflected while filtering.")
+ shouldBe("currentHolder[2]", '"a replaced value"');
+ value = v;
+ debug("");
+ debug("Ensure that the changed value is reflected in the arguments passed to the reviver");
+ shouldBe("value", "currentHolder[2]");
+ delete this[3];
+ break;
+
+ case 3:
+ debug("");
+ debug("Ensure that we visited a value that we have deleted, and that deletion is reflected while filtering.");
+ shouldBeFalse("currentHolder.hasOwnProperty(3)");
+ value = v;
+ debug("");
+ debug("Ensure that when visiting a deleted property value is undefined");
+ shouldBeUndefined("value");
+ v = "undelete the property";
+ expectedLength = this.length = 3;
+ break;
+
+ case 4:
+ if (this.length != 3) {
+ testFailed("Did not call reviver for deleted property");
+ expectedLength = this.length = 3;
+ break;
+ }
+
+ case 5:
+ testPassed("Ensured that property was visited despite Array length being reduced.");
+ value = v;
+ shouldBeUndefined("value");
+ this[10] = "fail";
+ break;
+
+ default:
+ testFailed("Visited unexpected property " + i + " with value " + v);
+ }
+ }
+ lastHolder = this;
+ return v;
+}
+expectedLength = 5;
+var result = JSON.parse('["a value", "another value", "and another value", "to delete", "extra value"]', arrayReviver);
+debug("");
+debug("Ensure that we created the root holder as specified in ES5");
+shouldBeTrue("'' in lastHolder");
+shouldBe("result", "lastHolder['']");
+debug("");
+debug("Ensure that a deleted value is revived if the reviver function returns a value");
+shouldBeTrue("result.hasOwnProperty(3)");
+
+function objectReviver(i,v) {
+ if (i != "") {
+ currentHolder = this;
+ shouldBeTrue("currentHolder != globalObject");
+ if (seen) {
+ debug("");
+ debug("Ensure that we get the same holder object for each property");
+ shouldBe("currentHolder", "lastHolder");
+ }
+ seen = true;
+ switch (i) {
+ case "a property":
+ v = undefined;
+ debug("");
+ debug("Ensure that the holder already has all the properties present at the start of filtering");
+ shouldBe("currentHolder['a property']", '"a value"');
+ shouldBe("currentHolder['another property']", '"another value"');
+ shouldBe("currentHolder['and another property']", '"and another value"');
+ shouldBe("currentHolder['to delete']", '"will be deleted"');
+ break;
+
+ case "another property":
+ debug("");
+ debug("Ensure that returning undefined has correctly removed the property 'a property' from the holder object");
+ shouldBeFalse("currentHolder.hasOwnProperty('a property')");
+ currentHolder['and another property'] = "a replaced value";
+ break;
+
+ case "and another property":
+ debug("Ensure that changing the value of a property is reflected while filtering.");
+ shouldBe("currentHolder['and another property']", '"a replaced value"');
+ value = v;
+ debug("");
+ debug("Ensure that the changed value is reflected in the arguments passed to the reviver");
+ shouldBe("value", '"a replaced value"');
+ delete this["to delete"];
+ break;
+
+ case "to delete":
+ debug("");
+ debug("Ensure that we visited a value that we have deleted, and that deletion is reflected while filtering.");
+ shouldBeFalse("currentHolder.hasOwnProperty('to delete')");
+ value = v;
+ debug("");
+ debug("Ensure that when visiting a deleted property value is undefined");
+ shouldBeUndefined("value");
+ v = "undelete the property";
+ this["new property"] = "fail";
+ break;
+ default:
+ testFailed("Visited unexpected property " + i + " with value " + v);
+ }
+ }
+ lastHolder = this;
+ return v;
+}
+
+debug("");
+debug("Test behaviour of revivor used in conjunction with an object");
+var seen = false;
+var globalObject = this;
+var result = JSON.parse('{"a property" : "a value", "another property" : "another value", "and another property" : "and another value", "to delete" : "will be deleted"}', objectReviver);
+debug("");
+debug("Ensure that we created the root holder as specified in ES5");
+shouldBeTrue("lastHolder.hasOwnProperty('')");
+shouldBeFalse("result.hasOwnProperty('a property')");
+shouldBeTrue("result.hasOwnProperty('to delete')");
+shouldBe("result", "lastHolder['']");
+
+debug("");
+debug("Test behaviour of revivor that introduces a cycle");
+function reviveAddsCycle(i, v) {
+ if (i == 0)
+ this[1] = this;
+ return v;
+}
+
+shouldThrow('JSON.parse("[0,1]", reviveAddsCycle)');
+
+debug("");
+debug("Test behaviour of revivor that introduces a new array classed object (the result of a regex)");
+var createdBadness = false;
+function reviveIntroducesNewArrayLikeObject(i, v) {
+ if (i == 0 && !createdBadness) {
+ this[1] = /(a)+/.exec("a");
+ createdBadness = true;
+ }
+ return v;
+}
+
+shouldBe('JSON.stringify(JSON.parse("[0,1]", reviveIntroducesNewArrayLikeObject))', '\'[0,["a","a"]]\'');
+
+
--- /dev/null
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test to ensure correct behaviour of Object.defineProperty
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS JSON.stringify(Object.getOwnPropertyDescriptor(Object.defineProperty({}, 'foo', {value:1}), 'foo')) is JSON.stringify({value: 1, writable: false, enumerable: false, configurable: false})
+PASS JSON.stringify(Object.getOwnPropertyDescriptor(Object.defineProperty({}, 'foo', {}), 'foo')) is JSON.stringify({writable: false, enumerable: false, configurable: false})
+PASS JSON.stringify(Object.getOwnPropertyDescriptor(Object.defineProperty({}, 'foo', {get:undefined}), 'foo')) is JSON.stringify({enumerable: false, configurable: false})
+PASS JSON.stringify(Object.getOwnPropertyDescriptor(Object.defineProperty({}, 'foo', {value:1, writable: false}), 'foo')) is JSON.stringify({value: 1, writable: false, enumerable: false, configurable: false})
+PASS JSON.stringify(Object.getOwnPropertyDescriptor(Object.defineProperty({}, 'foo', {value:1, writable: true}), 'foo')) is JSON.stringify({value: 1, writable: true, enumerable: false, configurable: false})
+PASS JSON.stringify(Object.getOwnPropertyDescriptor(Object.defineProperty({}, 'foo', {value:1, enumerable: false}), 'foo')) is JSON.stringify({value: 1, writable: false, enumerable: false, configurable: false})
+PASS JSON.stringify(Object.getOwnPropertyDescriptor(Object.defineProperty({}, 'foo', {value:1, enumerable: true}), 'foo')) is JSON.stringify({value: 1, writable: false, enumerable: true, configurable: false})
+PASS JSON.stringify(Object.getOwnPropertyDescriptor(Object.defineProperty({}, 'foo', {value:1, configurable: false}), 'foo')) is JSON.stringify({value: 1, writable: false, enumerable: false, configurable: false})
+PASS JSON.stringify(Object.getOwnPropertyDescriptor(Object.defineProperty({}, 'foo', {value:1, configurable: true}), 'foo')) is JSON.stringify({value: 1, writable: false, enumerable: false, configurable: true})
+PASS JSON.stringify(Object.getOwnPropertyDescriptor(Object.defineProperty([1,2,3], 'foo', {value:1, configurable: true}), 'foo')) is JSON.stringify({value: 1, writable: false, enumerable: false, configurable: true})
+PASS Object.getOwnPropertyDescriptor(Object.defineProperty([1,2,3], '1', {value:'foo', configurable: true}), '1').value is 'foo'
+PASS a=[1,2,3], Object.defineProperty(a, '1', {value:'foo', configurable: true}), a[1] is 'foo'
+PASS Object.getOwnPropertyDescriptor(Object.defineProperty([1,2,3], '1', {get:getter, configurable: true}), '1').get is getter
+PASS Object.defineProperty([1,2,3], '1', {get:getter, configurable: true})[1] threw exception called getter.
+PASS Object.defineProperty() threw exception TypeError: Object.defineProperty called on non-object.
+PASS Object.defineProperty(null) threw exception TypeError: Object.defineProperty called on non-object.
+PASS Object.defineProperty('foo') threw exception TypeError: Object.defineProperty called on non-object.
+PASS Object.defineProperty({}) threw exception TypeError: Property description must be an object: undefined.
+PASS Object.defineProperty({}, 'foo') threw exception TypeError: Property description must be an object: undefined.
+PASS Object.defineProperty({}, 'foo', {get:undefined, value:true}).foo threw exception TypeError: Invalid property. A property cannot both have accessors and be writable or have a value, #<Object>.
+PASS Object.defineProperty({get foo() { return true; } }, 'foo', {configurable:false}).foo is true
+PASS Object.defineProperty(createUnconfigurableProperty({}, 'foo'), 'foo', {configurable: true}) threw exception TypeError: Cannot redefine property: foo.
+PASS Object.defineProperty(createUnconfigurableProperty({}, 'foo'), 'foo', {writable: true}) threw exception TypeError: Cannot redefine property: foo.
+PASS Object.defineProperty(createUnconfigurableProperty({}, 'foo'), 'foo', {enumerable: true}) threw exception TypeError: Cannot redefine property: foo.
+PASS Object.defineProperty(createUnconfigurableProperty({}, 'foo', false, true), 'foo', {enumerable: false}), 'foo' threw exception TypeError: Cannot redefine property: foo.
+PASS JSON.stringify(Object.getOwnPropertyDescriptor(Object.defineProperty(createUnconfigurableProperty({}, 'foo', true), 'foo', {writable: false}), 'foo')) is JSON.stringify({value: 1, writable: false, enumerable: false, configurable: false})
+PASS Object.defineProperty({}, 'foo', {value:1, get: function(){}}) threw exception TypeError: Invalid property. A property cannot both have accessors and be writable or have a value, #<Object>.
+PASS Object.defineProperty({}, 'foo', {value:1, set: function(){}}) threw exception TypeError: Invalid property. A property cannot both have accessors and be writable or have a value, #<Object>.
+PASS Object.defineProperty({}, 'foo', {writable:true, get: function(){}}) threw exception TypeError: Invalid property. A property cannot both have accessors and be writable or have a value, #<Object>.
+PASS Object.defineProperty({}, 'foo', {writable:true, set: function(){}}) threw exception TypeError: Invalid property. A property cannot both have accessors and be writable or have a value, #<Object>.
+PASS Object.defineProperty({}, 'foo', {get: null}) threw exception TypeError: Getter must be a function: null.
+PASS Object.defineProperty({}, 'foo', {set: null}) threw exception TypeError: Setter must be a function: null.
+PASS Object.defineProperty({}, 'foo', {set: setter}).foo='test' threw exception called setter.
+PASS Object.defineProperty(Object.defineProperty({}, 'foo', {set: setter}), 'foo', {set: setter1}) threw exception TypeError: Cannot redefine property: foo.
+PASS Object.defineProperty(Object.defineProperty({}, 'foo', {set: setter}), 'foo', {get: getter1}) threw exception TypeError: Cannot redefine property: foo.
+PASS Object.defineProperty(Object.defineProperty({}, 'foo', {set: setter}), 'foo', {value: 1}) threw exception TypeError: Cannot redefine property: foo.
+PASS Object.defineProperty(Object.defineProperty({}, 'foo', {set: setter, configurable: true}), 'foo', {set: setter1}).foo='test' threw exception called setter1.
+PASS Object.defineProperty(Object.defineProperty({}, 'foo', {set: setter, configurable: true}), 'foo', {get: getter1}).foo threw exception called getter1.
+PASS Object.defineProperty(Object.defineProperty({}, 'foo', {set: setter, configurable: true}), 'foo', {value: true}).foo is true
+PASS 'foo' in Object.defineProperty(Object.defineProperty({}, 'foo', {set: setter, configurable: true}), 'foo', {writable: true}) is true
+PASS Object.defineProperty(Object.defineProperty({}, 'foo', {set: setter, configurable: true}), 'foo', {writable: true}).foo is undefined.
+PASS Object.defineProperty({}, 'foo', {get: getter}).foo threw exception called getter.
+PASS Object.defineProperty(Object.defineProperty({}, 'foo', {get: getter}), 'foo', {get: getter1}) threw exception TypeError: Cannot redefine property: foo.
+PASS Object.defineProperty(Object.defineProperty({}, 'foo', {get: getter}), 'foo', {set: setter1}) threw exception TypeError: Cannot redefine property: foo.
+PASS Object.defineProperty(Object.defineProperty({}, 'foo', {get: getter, configurable: true}), 'foo', {get: getter1}).foo threw exception called getter1.
+PASS Object.defineProperty(Object.defineProperty({}, 'foo', {get: getter, configurable: true}), 'foo', {set: setter1}).foo='test' threw exception called setter1.
+PASS Object.defineProperty(Object.defineProperty({}, 'foo', {get: getter, configurable: true}), 'foo', {value: true}).foo is true
+PASS Object.defineProperty(Object.defineProperty({}, 'foo', {get: getter, configurable: true}), 'foo', {writable: true}).foo is undefined.
+PASS 'foo' in Object.defineProperty(Object.defineProperty({}, 'foo', {get: getter, configurable: true}), 'foo', {writable: true}) is true
+PASS Object.defineProperty(Object.defineProperty({}, 'foo', {value: 1}), 'foo', {set: setter1}) threw exception TypeError: Cannot redefine property: foo.
+PASS Object.defineProperty(Object.defineProperty({}, 'foo', {value: 1, configurable: true}), 'foo', {set: setter1}).foo='test' threw exception called setter1.
+PASS Object.defineProperty(Object.defineProperty({}, 'foo', {value: 1}), 'foo', {get: getter1}) threw exception TypeError: Cannot redefine property: foo.
+PASS Object.defineProperty(Object.defineProperty({}, 'foo', {value: 1}), 'foo', {set: setter1}) threw exception TypeError: Cannot redefine property: foo.
+PASS Object.defineProperty(Object.defineProperty({}, 'foo', {value: 1, configurable: true}), 'foo', {get: getter1}).foo threw exception called getter1.
+PASS Object.defineProperty(Object.defineProperty({}, 'foo', {value: 1, configurable: true}), 'foo', {set: setter1}).foo='test' threw exception called setter1.
+PASS Object.defineProperty(Object.defineProperty({}, 'foo', {value: 1, configurable: true, writable: false}), 'foo', {value: 2, configurable: true, writable: true}).foo is 2
+PASS Object.defineProperty(Object.defineProperty({}, 'foo', {value: 1, configurable: true, writable: false}), 'foo', {value: 2, configurable: true, writable: false}).foo is 2
+PASS Object.defineProperty(Object.defineProperty({}, 'foo', {value: 1, configurable: false, writable: false}), 'foo', {value: 1, configurable: false, writable: false}).foo is 1
+PASS Object.defineProperty(Object.defineProperty({}, 'foo', {get: function() { return 1; }, configurable: true, enumerable: true}), 'foo', {get: function() { return 2; }, configurable: true, enumerable: false}).foo is 2
+PASS Object.defineProperty(Object.defineProperty({}, 'foo', {get: function() { return 1; }, configurable: true, enumerable: false}), 'foo', {get: function() { return 2; }, configurable: true, enumerable: false}).foo is 2
+PASS var result = false; var o = Object.defineProperty(Object.defineProperty({}, 'foo', {get: function() { return 1; }, configurable: true, enumerable: true}), 'foo', {get: function() { return 2; }, configurable: true, enumerable: false}); for (x in o) result = true; result is false
+PASS var result = false; var o = Object.defineProperty(Object.defineProperty({}, 'foo', {get: function() { return 1; }, configurable: true, enumerable: false}), 'foo', {get: function() { return 2; }, configurable: true, enumerable: true}); for (x in o) result = true; result is true
+PASS var o = Object.defineProperty({}, 'foo', {get: function() { return 1; }, configurable: true}); delete o.foo; o.foo is undefined.
+PASS var o = Object.defineProperty({}, 'foo', {get: function() { return 1; }, configurable: false}); delete o.foo; o.foo is 1
+PASS Object.defineProperty(Object.defineProperty({}, 'foo', {get: function() { return 1; }, configurable: true}), 'foo', {value:2}).foo is 2
+PASS Object.defineProperty(Object.defineProperty({}, 'foo', {get: function() { return 1; }, configurable: false}), 'foo', {value:2}).foo threw exception TypeError: Cannot redefine property: foo.
+PASS var o = Object.defineProperty(Object.defineProperty({}, 'foo', {get: function() { return 1; }, configurable: true}), 'foo', {value:2}); o.foo = 3; o.foo is 2
+PASS Object.defineProperty(Object.defineProperty({}, 'foo', {value: 1}), 'foo', {value:2, configurable: true}) threw exception TypeError: Cannot redefine property: foo.
+PASS Object.defineProperty(Object.defineProperty([], 'foo', {value: 1}), 'foo', {value:2, configurable: true}) threw exception TypeError: Cannot redefine property: foo.
+PASS var o = Object.defineProperty({}, 'foo', {get:function(){return 42;}, set:function(x){this.result = x;}}); o.foo is 42
+PASS var o = Object.defineProperty({}, 'foo', {get:function(){return 42;}, set:function(x){this.result = x;}}); o.foo = 42; o.result; is 42
+PASS var o = Object.defineProperty({}, 'foo', {get:undefined, set:function(x){this.result = x;}}); o.foo is undefined
+PASS var o = Object.defineProperty({}, 'foo', {get:undefined, set:function(x){this.result = x;}}); o.foo = 42; o.result; is 42
+PASS var o = Object.defineProperty({}, 'foo', {set:function(x){this.result = x;}}); o.foo is undefined
+PASS var o = Object.defineProperty({}, 'foo', {set:function(x){this.result = x;}}); o.foo = 42; o.result; is 42
+PASS var o = Object.defineProperty({}, 'foo', {get:function(){return 42;}, set:undefined}); o.foo is 42
+PASS var o = Object.defineProperty({}, 'foo', {get:function(){return 42;}, set:undefined}); o.foo = 42; o.result; is undefined
+PASS var o = Object.defineProperty({}, 'foo', {get:function(){return 42;}}); o.foo is 42
+PASS var o = Object.defineProperty({}, 'foo', {get:function(){return 42;}}); o.foo = 42; o.result; is undefined
+PASS var o = Object.defineProperty({}, 'foo', {get:undefined, set:undefined}); o.foo is undefined
+PASS var o = Object.defineProperty({}, 'foo', {get:undefined, set:undefined}); o.foo = 42; o.result; is undefined
+PASS var o = Object.defineProperty(Object.defineProperty({foo:1}, 'foo', {get:function(){return 42;}, set:function(x){this.result = x;}}), 'foo', {get:function(){return 13;}}); o.foo is 13
+PASS var o = Object.defineProperty(Object.defineProperty({foo:1}, 'foo', {get:function(){return 42;}, set:function(x){this.result = x;}}), 'foo', {get:function(){return 13;}}); o.foo = 42; o.result; is 42
+PASS var o = Object.defineProperty(Object.defineProperty({foo:1}, 'foo', {get:function(){return 42;}, set:function(x){this.result = x;}}), 'foo', {get:undefined}); o.foo is undefined
+PASS var o = Object.defineProperty(Object.defineProperty({foo:1}, 'foo', {get:function(){return 42;}, set:function(x){this.result = x;}}), 'foo', {get:undefined}); o.foo = 42; o.result; is 42
+PASS var o = Object.defineProperty(Object.defineProperty({foo:1}, 'foo', {get:function(){return 42;}, set:function(x){this.result = x;}}), 'foo', {set:function(){this.result = 13;}}); o.foo is 42
+PASS var o = Object.defineProperty(Object.defineProperty({foo:1}, 'foo', {get:function(){return 42;}, set:function(x){this.result = x;}}), 'foo', {set:function(){this.result = 13;}}); o.foo = 42; o.result; is 13
+PASS var o = Object.defineProperty(Object.defineProperty({foo:1}, 'foo', {get:function(){return 42;}, set:function(x){this.result = x;}}), 'foo', {set:undefined}); o.foo is 42
+PASS var o = Object.defineProperty(Object.defineProperty({foo:1}, 'foo', {get:function(){return 42;}, set:function(x){this.result = x;}}), 'foo', {set:undefined}); o.foo = 42; o.result; is undefined
+PASS 'use strict'; var o = Object.defineProperty({}, 'foo', {get:function(){return 42;}, set:function(x){this.result = x;}}); o.foo is 42
+PASS 'use strict'; var o = Object.defineProperty({}, 'foo', {get:function(){return 42;}, set:function(x){this.result = x;}}); o.foo = 42; o.result; is 42
+PASS 'use strict'; var o = Object.defineProperty({}, 'foo', {get:undefined, set:function(x){this.result = x;}}); o.foo is undefined
+PASS 'use strict'; var o = Object.defineProperty({}, 'foo', {get:undefined, set:function(x){this.result = x;}}); o.foo = 42; o.result; is 42
+PASS 'use strict'; var o = Object.defineProperty({}, 'foo', {set:function(x){this.result = x;}}); o.foo is undefined
+PASS 'use strict'; var o = Object.defineProperty({}, 'foo', {set:function(x){this.result = x;}}); o.foo = 42; o.result; is 42
+PASS 'use strict'; var o = Object.defineProperty({}, 'foo', {get:function(){return 42;}, set:undefined}); o.foo is 42
+PASS 'use strict'; var o = Object.defineProperty({}, 'foo', {get:function(){return 42;}, set:undefined}); o.foo = 42; o.result; threw exception TypeError: Cannot set property foo of #<Object> which has only a getter.
+PASS 'use strict'; var o = Object.defineProperty({}, 'foo', {get:function(){return 42;}}); o.foo is 42
+PASS 'use strict'; var o = Object.defineProperty({}, 'foo', {get:function(){return 42;}}); o.foo = 42; o.result; threw exception TypeError: Cannot set property foo of #<Object> which has only a getter.
+PASS 'use strict'; var o = Object.defineProperty({}, 'foo', {get:undefined, set:undefined}); o.foo is undefined
+PASS 'use strict'; var o = Object.defineProperty({}, 'foo', {get:undefined, set:undefined}); o.foo = 42; o.result; threw exception TypeError: Cannot set property foo of #<Object> which has only a getter.
+PASS 'use strict'; var o = Object.defineProperty(Object.defineProperty({foo:1}, 'foo', {get:function(){return 42;}, set:function(x){this.result = x;}}), 'foo', {get:function(){return 13;}}); o.foo is 13
+PASS 'use strict'; var o = Object.defineProperty(Object.defineProperty({foo:1}, 'foo', {get:function(){return 42;}, set:function(x){this.result = x;}}), 'foo', {get:function(){return 13;}}); o.foo = 42; o.result; is 42
+PASS 'use strict'; var o = Object.defineProperty(Object.defineProperty({foo:1}, 'foo', {get:function(){return 42;}, set:function(x){this.result = x;}}), 'foo', {get:undefined}); o.foo is undefined
+PASS 'use strict'; var o = Object.defineProperty(Object.defineProperty({foo:1}, 'foo', {get:function(){return 42;}, set:function(x){this.result = x;}}), 'foo', {get:undefined}); o.foo = 42; o.result; is 42
+PASS 'use strict'; var o = Object.defineProperty(Object.defineProperty({foo:1}, 'foo', {get:function(){return 42;}, set:function(x){this.result = x;}}), 'foo', {set:function(){this.result = 13;}}); o.foo is 42
+PASS 'use strict'; var o = Object.defineProperty(Object.defineProperty({foo:1}, 'foo', {get:function(){return 42;}, set:function(x){this.result = x;}}), 'foo', {set:function(){this.result = 13;}}); o.foo = 42; o.result; is 13
+PASS 'use strict'; var o = Object.defineProperty(Object.defineProperty({foo:1}, 'foo', {get:function(){return 42;}, set:function(x){this.result = x;}}), 'foo', {set:undefined}); o.foo is 42
+PASS 'use strict'; var o = Object.defineProperty(Object.defineProperty({foo:1}, 'foo', {get:function(){return 42;}, set:function(x){this.result = x;}}), 'foo', {set:undefined}); o.foo = 42; o.result; threw exception TypeError: Cannot set property foo of #<Object> which has only a getter.
+PASS 0 in Object.prototype is true
+PASS '0' in Object.prototype is true
+PASS var o = {}; o.readOnly = false; o.readOnly is true
+PASS 'use strict'; var o = {}; o.readOnly = false; o.readOnly threw exception TypeError: Cannot assign to read only property 'readOnly' of #<Object>.
+PASS Object.getOwnPropertyDescriptor(Object.defineProperty(Object.defineProperty({}, 'foo', {get: function() { return false; }, configurable: true}), 'foo', {value:false}), 'foo').writable is false
+PASS Object.getOwnPropertyDescriptor(Object.defineProperty(Object.defineProperty({}, 'foo', {get: function() { return false; }, configurable: true}), 'foo', {value:false, writable: false}), 'foo').writable is false
+PASS Object.getOwnPropertyDescriptor(Object.defineProperty(Object.defineProperty({}, 'foo', {get: function() { return false; }, configurable: true}), 'foo', {value:false, writable: true}), 'foo').writable is true
+FAIL var a = Object.defineProperty([], 'length', {writable: false}); a[0] = 42; 0 in a; should be false. Was true.
+FAIL 'use strict'; var a = Object.defineProperty([], 'length', {writable: false}); a[0] = 42; 0 in a; should throw an exception. Was true.
+PASS var a = Object.defineProperty([42], '0', {writable: false}); a[0] = false; a[0]; is 42
+PASS 'use strict'; var a = Object.defineProperty([42], '0', {writable: false}); a[0] = false; a[0]; threw exception TypeError: Cannot assign to read only property '0' of [object Array].
+PASS var a = Object.defineProperty([], '0', {set: undefined}); a[0] = 42; a[0]; is undefined.
+PASS 'use strict'; var a = Object.defineProperty([], '0', {set: undefined}); a[0] = 42; a[0]; threw exception TypeError: Cannot set property 0 of [object Array] which has only a getter.
+PASS anObj.slot1 is "foo"
+PASS anObj.slot2 is "bar"
+PASS anObj.propertyIsEnumerable('slot1') is true
+PASS anObj.propertyIsEnumerable('slot2') is false
+PASS anObj.slot4 is "goo"
+PASS anObj.slot5 is 123
+PASS anObj._Slot5 is 123
+PASS Object.getOwnPropertyDescriptor(anObj, 'slot5') is undefined.
+PASS anObj.slot5 is 456
+PASS anObj._Slot5 is 123
+PASS Object.getOwnPropertyDescriptor(anObj, 'slot5').value is 456
+PASS anObj.slot1 is "foo"
+PASS anObj.slot2 is "bar"
+PASS anObj.propertyIsEnumerable('slot1') is true
+PASS anObj.propertyIsEnumerable('slot2') is false
+PASS anObj.slot4 is "goo"
+PASS anObj.slot5 is 123
+PASS anObj._Slot5 is 123
+PASS Object.getOwnPropertyDescriptor(anObj, 'slot5') is undefined.
+PASS anObj.slot5 is 456
+PASS anObj._Slot5 is 123
+PASS Object.getOwnPropertyDescriptor(anObj, 'slot5').value is 456
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("Test to ensure correct behaviour of Object.defineProperty");
+
+shouldBe("JSON.stringify(Object.getOwnPropertyDescriptor(Object.defineProperty({}, 'foo', {value:1}), 'foo'))",
+ "JSON.stringify({value: 1, writable: false, enumerable: false, configurable: false})");
+shouldBe("JSON.stringify(Object.getOwnPropertyDescriptor(Object.defineProperty({}, 'foo', {}), 'foo'))",
+ "JSON.stringify({writable: false, enumerable: false, configurable: false})");
+shouldBe("JSON.stringify(Object.getOwnPropertyDescriptor(Object.defineProperty({}, 'foo', {get:undefined}), 'foo'))",
+ "JSON.stringify({enumerable: false, configurable: false})");
+shouldBe("JSON.stringify(Object.getOwnPropertyDescriptor(Object.defineProperty({}, 'foo', {value:1, writable: false}), 'foo'))",
+ "JSON.stringify({value: 1, writable: false, enumerable: false, configurable: false})");
+shouldBe("JSON.stringify(Object.getOwnPropertyDescriptor(Object.defineProperty({}, 'foo', {value:1, writable: true}), 'foo'))",
+ "JSON.stringify({value: 1, writable: true, enumerable: false, configurable: false})");
+shouldBe("JSON.stringify(Object.getOwnPropertyDescriptor(Object.defineProperty({}, 'foo', {value:1, enumerable: false}), 'foo'))",
+ "JSON.stringify({value: 1, writable: false, enumerable: false, configurable: false})");
+shouldBe("JSON.stringify(Object.getOwnPropertyDescriptor(Object.defineProperty({}, 'foo', {value:1, enumerable: true}), 'foo'))",
+ "JSON.stringify({value: 1, writable: false, enumerable: true, configurable: false})");
+shouldBe("JSON.stringify(Object.getOwnPropertyDescriptor(Object.defineProperty({}, 'foo', {value:1, configurable: false}), 'foo'))",
+ "JSON.stringify({value: 1, writable: false, enumerable: false, configurable: false})");
+shouldBe("JSON.stringify(Object.getOwnPropertyDescriptor(Object.defineProperty({}, 'foo', {value:1, configurable: true}), 'foo'))",
+ "JSON.stringify({value: 1, writable: false, enumerable: false, configurable: true})");
+shouldBe("JSON.stringify(Object.getOwnPropertyDescriptor(Object.defineProperty([1,2,3], 'foo', {value:1, configurable: true}), 'foo'))",
+ "JSON.stringify({value: 1, writable: false, enumerable: false, configurable: true})");
+shouldBe("Object.getOwnPropertyDescriptor(Object.defineProperty([1,2,3], '1', {value:'foo', configurable: true}), '1').value", "'foo'");
+shouldBe("a=[1,2,3], Object.defineProperty(a, '1', {value:'foo', configurable: true}), a[1]", "'foo'");
+shouldBe("Object.getOwnPropertyDescriptor(Object.defineProperty([1,2,3], '1', {get:getter, configurable: true}), '1').get", "getter");
+shouldThrow("Object.defineProperty([1,2,3], '1', {get:getter, configurable: true})[1]", "'called getter'");
+
+shouldThrow("Object.defineProperty()");
+shouldThrow("Object.defineProperty(null)");
+shouldThrow("Object.defineProperty('foo')");
+shouldThrow("Object.defineProperty({})");
+shouldThrow("Object.defineProperty({}, 'foo')");
+shouldThrow("Object.defineProperty({}, 'foo', {get:undefined, value:true}).foo");
+shouldBeTrue("Object.defineProperty({get foo() { return true; } }, 'foo', {configurable:false}).foo");
+
+function createUnconfigurableProperty(o, prop, writable, enumerable) {
+ writable = writable || false;
+ enumerable = enumerable || false;
+ return Object.defineProperty(o, prop, {value:1, configurable:false, writable: writable, enumerable: enumerable});
+}
+shouldThrow("Object.defineProperty(createUnconfigurableProperty({}, 'foo'), 'foo', {configurable: true})");
+shouldThrow("Object.defineProperty(createUnconfigurableProperty({}, 'foo'), 'foo', {writable: true})");
+shouldThrow("Object.defineProperty(createUnconfigurableProperty({}, 'foo'), 'foo', {enumerable: true})");
+shouldThrow("Object.defineProperty(createUnconfigurableProperty({}, 'foo', false, true), 'foo', {enumerable: false}), 'foo'");
+
+shouldBe("JSON.stringify(Object.getOwnPropertyDescriptor(Object.defineProperty(createUnconfigurableProperty({}, 'foo', true), 'foo', {writable: false}), 'foo'))",
+ "JSON.stringify({value: 1, writable: false, enumerable: false, configurable: false})");
+
+shouldThrow("Object.defineProperty({}, 'foo', {value:1, get: function(){}})");
+shouldThrow("Object.defineProperty({}, 'foo', {value:1, set: function(){}})");
+shouldThrow("Object.defineProperty({}, 'foo', {writable:true, get: function(){}})");
+shouldThrow("Object.defineProperty({}, 'foo', {writable:true, set: function(){}})");
+shouldThrow("Object.defineProperty({}, 'foo', {get: null})");
+shouldThrow("Object.defineProperty({}, 'foo', {set: null})");
+function getter(){ throw "called getter"; }
+function getter1(){ throw "called getter1"; }
+function setter(){ throw "called setter"; }
+function setter1(){ throw "called setter1"; }
+shouldThrow("Object.defineProperty({}, 'foo', {set: setter}).foo='test'", "'called setter'");
+shouldThrow("Object.defineProperty(Object.defineProperty({}, 'foo', {set: setter}), 'foo', {set: setter1})");
+shouldThrow("Object.defineProperty(Object.defineProperty({}, 'foo', {set: setter}), 'foo', {get: getter1})");
+shouldThrow("Object.defineProperty(Object.defineProperty({}, 'foo', {set: setter}), 'foo', {value: 1})");
+shouldThrow("Object.defineProperty(Object.defineProperty({}, 'foo', {set: setter, configurable: true}), 'foo', {set: setter1}).foo='test'", "'called setter1'");
+shouldThrow("Object.defineProperty(Object.defineProperty({}, 'foo', {set: setter, configurable: true}), 'foo', {get: getter1}).foo", "'called getter1'");
+shouldBeTrue("Object.defineProperty(Object.defineProperty({}, 'foo', {set: setter, configurable: true}), 'foo', {value: true}).foo");
+shouldBeTrue("'foo' in Object.defineProperty(Object.defineProperty({}, 'foo', {set: setter, configurable: true}), 'foo', {writable: true})");
+shouldBeUndefined("Object.defineProperty(Object.defineProperty({}, 'foo', {set: setter, configurable: true}), 'foo', {writable: true}).foo");
+shouldThrow("Object.defineProperty({}, 'foo', {get: getter}).foo", "'called getter'");
+shouldThrow("Object.defineProperty(Object.defineProperty({}, 'foo', {get: getter}), 'foo', {get: getter1})");
+shouldThrow("Object.defineProperty(Object.defineProperty({}, 'foo', {get: getter}), 'foo', {set: setter1})");
+shouldThrow("Object.defineProperty(Object.defineProperty({}, 'foo', {get: getter, configurable: true}), 'foo', {get: getter1}).foo", "'called getter1'");
+shouldThrow("Object.defineProperty(Object.defineProperty({}, 'foo', {get: getter, configurable: true}), 'foo', {set: setter1}).foo='test'", "'called setter1'");
+shouldBeTrue("Object.defineProperty(Object.defineProperty({}, 'foo', {get: getter, configurable: true}), 'foo', {value: true}).foo");
+shouldBeUndefined("Object.defineProperty(Object.defineProperty({}, 'foo', {get: getter, configurable: true}), 'foo', {writable: true}).foo");
+shouldBeTrue("'foo' in Object.defineProperty(Object.defineProperty({}, 'foo', {get: getter, configurable: true}), 'foo', {writable: true})");
+
+shouldThrow("Object.defineProperty(Object.defineProperty({}, 'foo', {value: 1}), 'foo', {set: setter1})");
+shouldThrow("Object.defineProperty(Object.defineProperty({}, 'foo', {value: 1, configurable: true}), 'foo', {set: setter1}).foo='test'", "'called setter1'");
+shouldThrow("Object.defineProperty(Object.defineProperty({}, 'foo', {value: 1}), 'foo', {get: getter1})");
+shouldThrow("Object.defineProperty(Object.defineProperty({}, 'foo', {value: 1}), 'foo', {set: setter1})");
+shouldThrow("Object.defineProperty(Object.defineProperty({}, 'foo', {value: 1, configurable: true}), 'foo', {get: getter1}).foo", "'called getter1'");
+shouldThrow("Object.defineProperty(Object.defineProperty({}, 'foo', {value: 1, configurable: true}), 'foo', {set: setter1}).foo='test'", "'called setter1'");
+
+// Should be able to redefine an non-writable property, if it is configurable.
+shouldBe("Object.defineProperty(Object.defineProperty({}, 'foo', {value: 1, configurable: true, writable: false}), 'foo', {value: 2, configurable: true, writable: true}).foo", "2");
+shouldBe("Object.defineProperty(Object.defineProperty({}, 'foo', {value: 1, configurable: true, writable: false}), 'foo', {value: 2, configurable: true, writable: false}).foo", "2");
+
+// Should be able to redefine an non-writable, non-configurable property, with the same value and attributes.
+shouldBe("Object.defineProperty(Object.defineProperty({}, 'foo', {value: 1, configurable: false, writable: false}), 'foo', {value: 1, configurable: false, writable: false}).foo", "1");
+
+// Should be able to redefine a configurable accessor, with the same or with different attributes.
+// Check the accessor function changed.
+shouldBe("Object.defineProperty(Object.defineProperty({}, 'foo', {get: function() { return 1; }, configurable: true, enumerable: true}), 'foo', {get: function() { return 2; }, configurable: true, enumerable: false}).foo", "2");
+shouldBe("Object.defineProperty(Object.defineProperty({}, 'foo', {get: function() { return 1; }, configurable: true, enumerable: false}), 'foo', {get: function() { return 2; }, configurable: true, enumerable: false}).foo", "2");
+// Check the attributes changed.
+shouldBeFalse("var result = false; var o = Object.defineProperty(Object.defineProperty({}, 'foo', {get: function() { return 1; }, configurable: true, enumerable: true}), 'foo', {get: function() { return 2; }, configurable: true, enumerable: false}); for (x in o) result = true; result");
+shouldBeTrue("var result = false; var o = Object.defineProperty(Object.defineProperty({}, 'foo', {get: function() { return 1; }, configurable: true, enumerable: false}), 'foo', {get: function() { return 2; }, configurable: true, enumerable: true}); for (x in o) result = true; result");
+
+// Should be able to define an non-configurable accessor.
+shouldBeUndefined("var o = Object.defineProperty({}, 'foo', {get: function() { return 1; }, configurable: true}); delete o.foo; o.foo");
+shouldBe("var o = Object.defineProperty({}, 'foo', {get: function() { return 1; }, configurable: false}); delete o.foo; o.foo", '1');
+shouldBe("Object.defineProperty(Object.defineProperty({}, 'foo', {get: function() { return 1; }, configurable: true}), 'foo', {value:2}).foo", "2");
+shouldThrow("Object.defineProperty(Object.defineProperty({}, 'foo', {get: function() { return 1; }, configurable: false}), 'foo', {value:2}).foo");
+
+// Defining a data descriptor over an accessor should result in a read only property.
+shouldBe("var o = Object.defineProperty(Object.defineProperty({}, 'foo', {get: function() { return 1; }, configurable: true}), 'foo', {value:2}); o.foo = 3; o.foo", "2");
+
+// Trying to redefine a non-configurable property as configurable should throw.
+shouldThrow("Object.defineProperty(Object.defineProperty({}, 'foo', {value: 1}), 'foo', {value:2, configurable: true})");
+shouldThrow("Object.defineProperty(Object.defineProperty([], 'foo', {value: 1}), 'foo', {value:2, configurable: true})");
+
+// Test an object with a getter setter.
+// Either accessor may be omitted or replaced with undefined, or both may be replaced with undefined.
+shouldBe("var o = Object.defineProperty({}, 'foo', {get:function(){return 42;}, set:function(x){this.result = x;}}); o.foo", '42')
+shouldBe("var o = Object.defineProperty({}, 'foo', {get:function(){return 42;}, set:function(x){this.result = x;}}); o.foo = 42; o.result;", '42');
+shouldBe("var o = Object.defineProperty({}, 'foo', {get:undefined, set:function(x){this.result = x;}}); o.foo", 'undefined')
+shouldBe("var o = Object.defineProperty({}, 'foo', {get:undefined, set:function(x){this.result = x;}}); o.foo = 42; o.result;", '42');
+shouldBe("var o = Object.defineProperty({}, 'foo', {set:function(x){this.result = x;}}); o.foo", 'undefined')
+shouldBe("var o = Object.defineProperty({}, 'foo', {set:function(x){this.result = x;}}); o.foo = 42; o.result;", '42');
+shouldBe("var o = Object.defineProperty({}, 'foo', {get:function(){return 42;}, set:undefined}); o.foo", '42')
+shouldBe("var o = Object.defineProperty({}, 'foo', {get:function(){return 42;}, set:undefined}); o.foo = 42; o.result;", 'undefined');
+shouldBe("var o = Object.defineProperty({}, 'foo', {get:function(){return 42;}}); o.foo", '42')
+shouldBe("var o = Object.defineProperty({}, 'foo', {get:function(){return 42;}}); o.foo = 42; o.result;", 'undefined');
+shouldBe("var o = Object.defineProperty({}, 'foo', {get:undefined, set:undefined}); o.foo", 'undefined')
+shouldBe("var o = Object.defineProperty({}, 'foo', {get:undefined, set:undefined}); o.foo = 42; o.result;", 'undefined');
+// Test replacing or removing either the getter or setter individually.
+shouldBe("var o = Object.defineProperty(Object.defineProperty({foo:1}, 'foo', {get:function(){return 42;}, set:function(x){this.result = x;}}), 'foo', {get:function(){return 13;}}); o.foo", '13')
+shouldBe("var o = Object.defineProperty(Object.defineProperty({foo:1}, 'foo', {get:function(){return 42;}, set:function(x){this.result = x;}}), 'foo', {get:function(){return 13;}}); o.foo = 42; o.result;", '42')
+shouldBe("var o = Object.defineProperty(Object.defineProperty({foo:1}, 'foo', {get:function(){return 42;}, set:function(x){this.result = x;}}), 'foo', {get:undefined}); o.foo", 'undefined')
+shouldBe("var o = Object.defineProperty(Object.defineProperty({foo:1}, 'foo', {get:function(){return 42;}, set:function(x){this.result = x;}}), 'foo', {get:undefined}); o.foo = 42; o.result;", '42')
+shouldBe("var o = Object.defineProperty(Object.defineProperty({foo:1}, 'foo', {get:function(){return 42;}, set:function(x){this.result = x;}}), 'foo', {set:function(){this.result = 13;}}); o.foo", '42')
+shouldBe("var o = Object.defineProperty(Object.defineProperty({foo:1}, 'foo', {get:function(){return 42;}, set:function(x){this.result = x;}}), 'foo', {set:function(){this.result = 13;}}); o.foo = 42; o.result;", '13')
+shouldBe("var o = Object.defineProperty(Object.defineProperty({foo:1}, 'foo', {get:function(){return 42;}, set:function(x){this.result = x;}}), 'foo', {set:undefined}); o.foo", '42')
+shouldBe("var o = Object.defineProperty(Object.defineProperty({foo:1}, 'foo', {get:function(){return 42;}, set:function(x){this.result = x;}}), 'foo', {set:undefined}); o.foo = 42; o.result;", 'undefined')
+
+// Repeat of the above, in strict mode.
+// Either accessor may be omitted or replaced with undefined, or both may be replaced with undefined.
+shouldBe("'use strict'; var o = Object.defineProperty({}, 'foo', {get:function(){return 42;}, set:function(x){this.result = x;}}); o.foo", '42')
+shouldBe("'use strict'; var o = Object.defineProperty({}, 'foo', {get:function(){return 42;}, set:function(x){this.result = x;}}); o.foo = 42; o.result;", '42');
+shouldBe("'use strict'; var o = Object.defineProperty({}, 'foo', {get:undefined, set:function(x){this.result = x;}}); o.foo", 'undefined')
+shouldBe("'use strict'; var o = Object.defineProperty({}, 'foo', {get:undefined, set:function(x){this.result = x;}}); o.foo = 42; o.result;", '42');
+shouldBe("'use strict'; var o = Object.defineProperty({}, 'foo', {set:function(x){this.result = x;}}); o.foo", 'undefined')
+shouldBe("'use strict'; var o = Object.defineProperty({}, 'foo', {set:function(x){this.result = x;}}); o.foo = 42; o.result;", '42');
+shouldBe("'use strict'; var o = Object.defineProperty({}, 'foo', {get:function(){return 42;}, set:undefined}); o.foo", '42')
+shouldThrow("'use strict'; var o = Object.defineProperty({}, 'foo', {get:function(){return 42;}, set:undefined}); o.foo = 42; o.result;");
+shouldBe("'use strict'; var o = Object.defineProperty({}, 'foo', {get:function(){return 42;}}); o.foo", '42')
+shouldThrow("'use strict'; var o = Object.defineProperty({}, 'foo', {get:function(){return 42;}}); o.foo = 42; o.result;");
+shouldBe("'use strict'; var o = Object.defineProperty({}, 'foo', {get:undefined, set:undefined}); o.foo", 'undefined')
+shouldThrow("'use strict'; var o = Object.defineProperty({}, 'foo', {get:undefined, set:undefined}); o.foo = 42; o.result;");
+// Test replacing or removing either the getter or setter individually.
+shouldBe("'use strict'; var o = Object.defineProperty(Object.defineProperty({foo:1}, 'foo', {get:function(){return 42;}, set:function(x){this.result = x;}}), 'foo', {get:function(){return 13;}}); o.foo", '13')
+shouldBe("'use strict'; var o = Object.defineProperty(Object.defineProperty({foo:1}, 'foo', {get:function(){return 42;}, set:function(x){this.result = x;}}), 'foo', {get:function(){return 13;}}); o.foo = 42; o.result;", '42')
+shouldBe("'use strict'; var o = Object.defineProperty(Object.defineProperty({foo:1}, 'foo', {get:function(){return 42;}, set:function(x){this.result = x;}}), 'foo', {get:undefined}); o.foo", 'undefined')
+shouldBe("'use strict'; var o = Object.defineProperty(Object.defineProperty({foo:1}, 'foo', {get:function(){return 42;}, set:function(x){this.result = x;}}), 'foo', {get:undefined}); o.foo = 42; o.result;", '42')
+shouldBe("'use strict'; var o = Object.defineProperty(Object.defineProperty({foo:1}, 'foo', {get:function(){return 42;}, set:function(x){this.result = x;}}), 'foo', {set:function(){this.result = 13;}}); o.foo", '42')
+shouldBe("'use strict'; var o = Object.defineProperty(Object.defineProperty({foo:1}, 'foo', {get:function(){return 42;}, set:function(x){this.result = x;}}), 'foo', {set:function(){this.result = 13;}}); o.foo = 42; o.result;", '13')
+shouldBe("'use strict'; var o = Object.defineProperty(Object.defineProperty({foo:1}, 'foo', {get:function(){return 42;}, set:function(x){this.result = x;}}), 'foo', {set:undefined}); o.foo", '42')
+shouldThrow("'use strict'; var o = Object.defineProperty(Object.defineProperty({foo:1}, 'foo', {get:function(){return 42;}, set:function(x){this.result = x;}}), 'foo', {set:undefined}); o.foo = 42; o.result;")
+
+Object.defineProperty(Object.prototype, 0, {get:function(){ return false; }, configurable:true})
+shouldBeTrue("0 in Object.prototype");
+shouldBeTrue("'0' in Object.prototype");
+delete Object.prototype[0];
+
+Object.defineProperty(Object.prototype, 'readOnly', {value:true, configurable:true, writable:false})
+shouldBeTrue("var o = {}; o.readOnly = false; o.readOnly");
+shouldThrow("'use strict'; var o = {}; o.readOnly = false; o.readOnly");
+delete Object.prototype.readOnly;
+
+// Check the writable attribute is set correctly when redefining an accessor as a data descriptor.
+shouldBeFalse("Object.getOwnPropertyDescriptor(Object.defineProperty(Object.defineProperty({}, 'foo', {get: function() { return false; }, configurable: true}), 'foo', {value:false}), 'foo').writable");
+shouldBeFalse("Object.getOwnPropertyDescriptor(Object.defineProperty(Object.defineProperty({}, 'foo', {get: function() { return false; }, configurable: true}), 'foo', {value:false, writable: false}), 'foo').writable");
+shouldBeTrue("Object.getOwnPropertyDescriptor(Object.defineProperty(Object.defineProperty({}, 'foo', {get: function() { return false; }, configurable: true}), 'foo', {value:false, writable: true}), 'foo').writable");
+
+// If array length is read-only, [[Put]] should fail.
+shouldBeFalse("var a = Object.defineProperty([], 'length', {writable: false}); a[0] = 42; 0 in a;");
+shouldThrow("'use strict'; var a = Object.defineProperty([], 'length', {writable: false}); a[0] = 42; 0 in a;");
+
+// If array property is read-only, [[Put]] should fail.
+shouldBe("var a = Object.defineProperty([42], '0', {writable: false}); a[0] = false; a[0];", '42');
+shouldThrow("'use strict'; var a = Object.defineProperty([42], '0', {writable: false}); a[0] = false; a[0];");
+
+// If array property is an undefined setter, [[Put]] should fail.
+shouldBeUndefined("var a = Object.defineProperty([], '0', {set: undefined}); a[0] = 42; a[0];");
+shouldThrow("'use strict'; var a = Object.defineProperty([], '0', {set: undefined}); a[0] = 42; a[0];");
+
+function testObject()
+{
+ // Test case from https://bugs.webkit.org/show_bug.cgi?id=38636
+ Object.defineProperty(anObj, 'slot1', {value: 'foo', enumerable: true});
+ Object.defineProperty(anObj, 'slot2', {value: 'bar', writable: true});
+ Object.defineProperty(anObj, 'slot3', {value: 'baz', enumerable: false});
+ Object.defineProperty(anObj, 'slot4', {value: 'goo', configurable: false});
+ shouldBe("anObj.slot1", '"foo"');
+ shouldBe("anObj.slot2", '"bar"');
+ anObj.slot2 = 'bad value';
+ shouldBeTrue("anObj.propertyIsEnumerable('slot1')");
+ shouldBeFalse("anObj.propertyIsEnumerable('slot2')");
+ delete anObj.slot4;
+ shouldBe("anObj.slot4", '"goo"');
+
+ // Test case from https://bugs.webkit.org/show_bug.cgi?id=48911
+ Object.defineProperty(Object.getPrototypeOf(anObj), 'slot5', {get: function() { return this._Slot5; }, set: function(v) { this._Slot5 = v; }, configurable: false});
+ anObj.slot5 = 123;
+ shouldBe("anObj.slot5", '123');
+ shouldBe("anObj._Slot5", '123');
+ shouldBeUndefined("Object.getOwnPropertyDescriptor(anObj, 'slot5')");
+ Object.defineProperty(anObj, 'slot5', { value: 456 });
+ shouldBe("anObj.slot5", '456');
+ shouldBe("anObj._Slot5", '123');
+ shouldBe("Object.getOwnPropertyDescriptor(anObj, 'slot5').value", '456');
+}
+var anObj = {};
+testObject();
+var anObj = this;
+testObject();
--- /dev/null
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test to ensure correct behaviour of Object.getOwnPropertyNames
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS getSortedOwnPropertyNames({}) is []
+PASS getSortedOwnPropertyNames({a:null}) is ['a']
+PASS getSortedOwnPropertyNames({a:null, b:null}) is ['a', 'b']
+PASS getSortedOwnPropertyNames({b:null, a:null}) is ['a', 'b']
+PASS getSortedOwnPropertyNames({__proto__:{a:null}}) is []
+PASS getSortedOwnPropertyNames({__proto__:[1,2,3]}) is []
+PASS getSortedOwnPropertyNames(Object.create({}, { 'a': { 'value': 1, 'enumerable': false } })) is ['a']
+PASS getSortedOwnPropertyNames(Object.create([1,2,3], { 'a': { 'value': 1, 'enumerable': false } })) is ['a']
+PASS getSortedOwnPropertyNames(new Function()) is ['arguments', 'caller', 'length', 'name', 'prototype']
+PASS getSortedOwnPropertyNames((function(){var x=new Function();x.__proto__=[1,2,3];return x;})()) is ['arguments', 'caller', 'length', 'name', 'prototype']
+PASS getSortedOwnPropertyNames(new String('')) is ['length']
+PASS getSortedOwnPropertyNames(new String('a')) is ['0', 'length']
+PASS getSortedOwnPropertyNames(new String('abc')) is ['0', '1', '2', 'length']
+PASS getSortedOwnPropertyNames((function(){var x=new String('');x.__proto__=[1,2,3];return x;})()) is ['length']
+PASS getSortedOwnPropertyNames([]) is ['length']
+PASS getSortedOwnPropertyNames([null]) is ['0', 'length']
+PASS getSortedOwnPropertyNames([null,null]) is ['0','1', 'length']
+PASS getSortedOwnPropertyNames([null,null,,,,null]) is ['0','1','5', 'length']
+PASS getSortedOwnPropertyNames((function(){var x=[];x.__proto__=[1,2,3];return x;})()) is ['length']
+PASS getSortedOwnPropertyNames(new Date()) is []
+PASS getSortedOwnPropertyNames((function(){var x=new Date();x.__proto__=[1,2,3];return x;})()) is []
+PASS getSortedOwnPropertyNames(new RegExp('foo')) is ['global', 'ignoreCase', 'lastIndex', 'multiline', 'source']
+PASS getSortedOwnPropertyNames((function(){var x=new RegExp();x.__proto__=[1,2,3];return x;})()) is ['global', 'ignoreCase', 'lastIndex', 'multiline', 'source']
+PASS getSortedOwnPropertyNames(argumentsObject()) is ['callee', 'length']
+PASS getSortedOwnPropertyNames(argumentsObject(1)) is ['0', 'callee', 'length']
+PASS getSortedOwnPropertyNames(argumentsObject(1,2,3)) is ['0', '1', '2', 'callee', 'length']
+PASS getSortedOwnPropertyNames((function(){arguments.__proto__=[1,2,3];return arguments;})()) is ['callee', 'length']
+FAIL getSortedOwnPropertyNames(parseInt) should be length,name. Was arguments,caller,length,name.
+FAIL getSortedOwnPropertyNames(parseFloat) should be length,name. Was arguments,caller,length,name.
+FAIL getSortedOwnPropertyNames(isNaN) should be length,name. Was arguments,caller,length,name.
+FAIL getSortedOwnPropertyNames(isFinite) should be length,name. Was arguments,caller,length,name.
+FAIL getSortedOwnPropertyNames(escape) should be length,name. Was arguments,caller,length,name.
+FAIL getSortedOwnPropertyNames(unescape) should be length,name. Was arguments,caller,length,name.
+FAIL getSortedOwnPropertyNames(decodeURI) should be length,name. Was arguments,caller,length,name.
+FAIL getSortedOwnPropertyNames(decodeURIComponent) should be length,name. Was arguments,caller,length,name.
+FAIL getSortedOwnPropertyNames(encodeURI) should be length,name. Was arguments,caller,length,name.
+FAIL getSortedOwnPropertyNames(encodeURIComponent) should be length,name. Was arguments,caller,length,name.
+FAIL getSortedOwnPropertyNames(Object) should be create,defineProperties,defineProperty,freeze,getOwnPropertyDescriptor,getOwnPropertyNames,getPrototypeOf,isExtensible,isFrozen,isSealed,keys,length,name,preventExtensions,prototype,seal. Was arguments,caller,create,defineProperties,defineProperty,freeze,getOwnPropertyDescriptor,getOwnPropertyNames,getPrototypeOf,is,isExtensible,isFrozen,isSealed,keys,length,name,preventExtensions,prototype,seal.
+PASS getSortedOwnPropertyNames(Object.prototype) is ['__defineGetter__', '__defineSetter__', '__lookupGetter__', '__lookupSetter__', '__proto__', 'constructor', 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable', 'toLocaleString', 'toString', 'valueOf']
+FAIL getSortedOwnPropertyNames(Function) should be length,name,prototype. Was arguments,caller,length,name,prototype.
+FAIL getSortedOwnPropertyNames(Function.prototype) should be apply,bind,call,constructor,length,name,toString. Was apply,arguments,bind,call,caller,constructor,length,name,toString.
+FAIL getSortedOwnPropertyNames(Array) should be isArray,length,name,prototype. Was arguments,caller,isArray,length,name,prototype.
+PASS getSortedOwnPropertyNames(Array.prototype) is ['concat', 'constructor', 'every', 'filter', 'forEach', 'indexOf', 'join', 'lastIndexOf', 'length', 'map', 'pop', 'push', 'reduce', 'reduceRight', 'reverse', 'shift', 'slice', 'some', 'sort', 'splice', 'toLocaleString', 'toString', 'unshift']
+FAIL getSortedOwnPropertyNames(String) should be fromCharCode,length,name,prototype. Was arguments,caller,fromCharCode,length,name,prototype.
+PASS getSortedOwnPropertyNames(String.prototype) is ['anchor', 'big', 'blink', 'bold', 'charAt', 'charCodeAt', 'concat', 'constructor', 'fixed', 'fontcolor', 'fontsize', 'indexOf', 'italics', 'lastIndexOf', 'length', 'link', 'localeCompare', 'match', 'replace', 'search', 'slice', 'small', 'split', 'strike', 'sub', 'substr', 'substring', 'sup', 'toLocaleLowerCase', 'toLocaleUpperCase', 'toLowerCase', 'toString', 'toUpperCase', 'trim', 'trimLeft', 'trimRight', 'valueOf']
+FAIL getSortedOwnPropertyNames(Boolean) should be length,name,prototype. Was arguments,caller,length,name,prototype.
+PASS getSortedOwnPropertyNames(Boolean.prototype) is ['constructor', 'toString', 'valueOf']
+FAIL getSortedOwnPropertyNames(Number) should be MAX_VALUE,MIN_VALUE,NEGATIVE_INFINITY,NaN,POSITIVE_INFINITY,length,name,prototype. Was MAX_VALUE,MIN_VALUE,NEGATIVE_INFINITY,NaN,POSITIVE_INFINITY,arguments,caller,isFinite,isNaN,length,name,prototype.
+PASS getSortedOwnPropertyNames(Number.prototype) is ['constructor', 'toExponential', 'toFixed', 'toLocaleString', 'toPrecision', 'toString', 'valueOf']
+FAIL getSortedOwnPropertyNames(Date) should be UTC,length,name,now,parse,prototype. Was UTC,arguments,caller,length,name,now,parse,prototype.
+PASS getSortedOwnPropertyNames(Date.prototype) is ['constructor', 'getDate', 'getDay', 'getFullYear', 'getHours', 'getMilliseconds', 'getMinutes', 'getMonth', 'getSeconds', 'getTime', 'getTimezoneOffset', 'getUTCDate', 'getUTCDay', 'getUTCFullYear', 'getUTCHours', 'getUTCMilliseconds', 'getUTCMinutes', 'getUTCMonth', 'getUTCSeconds', 'getYear', 'setDate', 'setFullYear', 'setHours', 'setMilliseconds', 'setMinutes', 'setMonth', 'setSeconds', 'setTime', 'setUTCDate', 'setUTCFullYear', 'setUTCHours', 'setUTCMilliseconds', 'setUTCMinutes', 'setUTCMonth', 'setUTCSeconds', 'setYear', 'toDateString', 'toGMTString', 'toISOString', 'toJSON', 'toLocaleDateString', 'toLocaleString', 'toLocaleTimeString', 'toString', 'toTimeString', 'toUTCString', 'valueOf']
+FAIL getSortedOwnPropertyNames(RegExp) should be $&,$',$*,$+,$1,$2,$3,$4,$5,$6,$7,$8,$9,$_,$`,input,lastMatch,lastParen,leftContext,length,multiline,name,prototype,rightContext. Was $&,$',$*,$+,$1,$2,$3,$4,$5,$6,$7,$8,$9,$_,$`,$input,arguments,caller,input,lastMatch,lastParen,leftContext,length,multiline,name,prototype,rightContext.
+PASS getSortedOwnPropertyNames(RegExp.prototype) is ['compile', 'constructor', 'exec', 'global', 'ignoreCase', 'lastIndex', 'multiline', 'source', 'test', 'toString']
+FAIL getSortedOwnPropertyNames(Error) should be length,name,prototype. Was arguments,caller,captureStackTrace,length,name,prototype,stackTraceLimit.
+PASS getSortedOwnPropertyNames(Error.prototype) is ['constructor', 'message', 'name', 'toString']
+FAIL getSortedOwnPropertyNames(Math) should be E,LN10,LN2,LOG10E,LOG2E,PI,SQRT1_2,SQRT2,abs,acos,asin,atan,atan2,ceil,cos,exp,floor,log,max,min,pow,random,round,sin,sqrt,tan. Was E,LN10,LN2,LOG10E,LOG2E,PI,SQRT1_2,SQRT2,abs,acos,asin,atan,atan2,ceil,cos,exp,floor,imul,log,max,min,pow,random,round,sin,sqrt,tan.
+PASS getSortedOwnPropertyNames(JSON) is ['parse', 'stringify']
+PASS globalPropertyNames.indexOf('NaN') != -1 is true
+PASS globalPropertyNames.indexOf('Infinity') != -1 is true
+PASS globalPropertyNames.indexOf('undefined') != -1 is true
+PASS globalPropertyNames.indexOf('parseInt') != -1 is true
+PASS globalPropertyNames.indexOf('parseFloat') != -1 is true
+PASS globalPropertyNames.indexOf('isNaN') != -1 is true
+PASS globalPropertyNames.indexOf('isFinite') != -1 is true
+PASS globalPropertyNames.indexOf('escape') != -1 is true
+PASS globalPropertyNames.indexOf('unescape') != -1 is true
+PASS globalPropertyNames.indexOf('decodeURI') != -1 is true
+PASS globalPropertyNames.indexOf('decodeURIComponent') != -1 is true
+PASS globalPropertyNames.indexOf('encodeURI') != -1 is true
+PASS globalPropertyNames.indexOf('encodeURIComponent') != -1 is true
+PASS globalPropertyNames.indexOf('Object') != -1 is true
+PASS globalPropertyNames.indexOf('Function') != -1 is true
+PASS globalPropertyNames.indexOf('Array') != -1 is true
+PASS globalPropertyNames.indexOf('String') != -1 is true
+PASS globalPropertyNames.indexOf('Boolean') != -1 is true
+PASS globalPropertyNames.indexOf('Number') != -1 is true
+PASS globalPropertyNames.indexOf('Date') != -1 is true
+PASS globalPropertyNames.indexOf('RegExp') != -1 is true
+PASS globalPropertyNames.indexOf('Error') != -1 is true
+PASS globalPropertyNames.indexOf('Math') != -1 is true
+PASS globalPropertyNames.indexOf('JSON') != -1 is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("Test to ensure correct behaviour of Object.getOwnPropertyNames");
+
+function argumentsObject() { return arguments; };
+
+var expectedPropertyNamesSet = {
+ "{}": "[]",
+ "{a:null}": "['a']",
+ "{a:null, b:null}": "['a', 'b']",
+ "{b:null, a:null}": "['a', 'b']",
+ "{__proto__:{a:null}}": "[]",
+ "{__proto__:[1,2,3]}": "[]",
+ "Object.create({}, { 'a': { 'value': 1, 'enumerable': false } })": "['a']",
+ "Object.create([1,2,3], { 'a': { 'value': 1, 'enumerable': false } })": "['a']",
+// Function objects
+ "new Function()": "['arguments', 'caller', 'length', 'name', 'prototype']",
+ "(function(){var x=new Function();x.__proto__=[1,2,3];return x;})()": "['arguments', 'caller', 'length', 'name', 'prototype']",
+// String objects
+ "new String('')": "['length']",
+ "new String('a')": "['0', 'length']",
+ "new String('abc')": "['0', '1', '2', 'length']",
+ "(function(){var x=new String('');x.__proto__=[1,2,3];return x;})()": "['length']",
+// Array objects
+ "[]": "['length']",
+ "[null]": "['0', 'length']",
+ "[null,null]": "['0','1', 'length']",
+ "[null,null,,,,null]": "['0','1','5', 'length']",
+ "(function(){var x=[];x.__proto__=[1,2,3];return x;})()": "['length']",
+// Date objects
+ "new Date()": "[]",
+ "(function(){var x=new Date();x.__proto__=[1,2,3];return x;})()": "[]",
+// RegExp objects
+ "new RegExp('foo')": "['global', 'ignoreCase', 'lastIndex', 'multiline', 'source']",
+ "(function(){var x=new RegExp();x.__proto__=[1,2,3];return x;})()": "['global', 'ignoreCase', 'lastIndex', 'multiline', 'source']",
+// Arguments objects
+ "argumentsObject()": "['callee', 'length']",
+ "argumentsObject(1)": "['0', 'callee', 'length']",
+ "argumentsObject(1,2,3)": "['0', '1', '2', 'callee', 'length']",
+ "(function(){arguments.__proto__=[1,2,3];return arguments;})()": "['callee', 'length']",
+// Built-in ECMA functions
+ "parseInt": "['length', 'name']",
+ "parseFloat": "['length', 'name']",
+ "isNaN": "['length', 'name']",
+ "isFinite": "['length', 'name']",
+ "escape": "['length', 'name']",
+ "unescape": "['length', 'name']",
+ "decodeURI": "['length', 'name']",
+ "decodeURIComponent": "['length', 'name']",
+ "encodeURI": "['length', 'name']",
+ "encodeURIComponent": "['length', 'name']",
+// Built-in ECMA objects
+ "Object": "['create', 'defineProperties', 'defineProperty', 'freeze', 'getOwnPropertyDescriptor', 'getOwnPropertyNames', 'getPrototypeOf', 'isExtensible', 'isFrozen', 'isSealed', 'keys', 'length', 'name', 'preventExtensions', 'prototype', 'seal']",
+ "Object.prototype": "['__defineGetter__', '__defineSetter__', '__lookupGetter__', '__lookupSetter__', '__proto__', 'constructor', 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable', 'toLocaleString', 'toString', 'valueOf']",
+ "Function": "['length', 'name', 'prototype']",
+ "Function.prototype": "['apply', 'bind', 'call', 'constructor', 'length', 'name', 'toString']",
+ "Array": "['isArray', 'length', 'name', 'prototype']",
+ "Array.prototype": "['concat', 'constructor', 'every', 'filter', 'forEach', 'indexOf', 'join', 'lastIndexOf', 'length', 'map', 'pop', 'push', 'reduce', 'reduceRight', 'reverse', 'shift', 'slice', 'some', 'sort', 'splice', 'toLocaleString', 'toString', 'unshift']",
+ "String": "['fromCharCode', 'length', 'name', 'prototype']",
+ "String.prototype": "['anchor', 'big', 'blink', 'bold', 'charAt', 'charCodeAt', 'concat', 'constructor', 'fixed', 'fontcolor', 'fontsize', 'indexOf', 'italics', 'lastIndexOf', 'length', 'link', 'localeCompare', 'match', 'replace', 'search', 'slice', 'small', 'split', 'strike', 'sub', 'substr', 'substring', 'sup', 'toLocaleLowerCase', 'toLocaleUpperCase', 'toLowerCase', 'toString', 'toUpperCase', 'trim', 'trimLeft', 'trimRight', 'valueOf']",
+ "Boolean": "['length', 'name', 'prototype']",
+ "Boolean.prototype": "['constructor', 'toString', 'valueOf']",
+ "Number": "['MAX_VALUE', 'MIN_VALUE', 'NEGATIVE_INFINITY', 'NaN', 'POSITIVE_INFINITY', 'length', 'name', 'prototype']",
+ "Number.prototype": "['constructor', 'toExponential', 'toFixed', 'toLocaleString', 'toPrecision', 'toString', 'valueOf']",
+ "Date": "['UTC', 'length', 'name', 'now', 'parse', 'prototype']",
+ "Date.prototype": "['constructor', 'getDate', 'getDay', 'getFullYear', 'getHours', 'getMilliseconds', 'getMinutes', 'getMonth', 'getSeconds', 'getTime', 'getTimezoneOffset', 'getUTCDate', 'getUTCDay', 'getUTCFullYear', 'getUTCHours', 'getUTCMilliseconds', 'getUTCMinutes', 'getUTCMonth', 'getUTCSeconds', 'getYear', 'setDate', 'setFullYear', 'setHours', 'setMilliseconds', 'setMinutes', 'setMonth', 'setSeconds', 'setTime', 'setUTCDate', 'setUTCFullYear', 'setUTCHours', 'setUTCMilliseconds', 'setUTCMinutes', 'setUTCMonth', 'setUTCSeconds', 'setYear', 'toDateString', 'toGMTString', 'toISOString', 'toJSON', 'toLocaleDateString', 'toLocaleString', 'toLocaleTimeString', 'toString', 'toTimeString', 'toUTCString', 'valueOf']",
+ "RegExp": "['$&', \"$'\", '$*', '$+', '$1', '$2', '$3', '$4', '$5', '$6', '$7', '$8', '$9', '$_', '$`', 'input', 'lastMatch', 'lastParen', 'leftContext', 'length', 'multiline', 'name', 'prototype', 'rightContext']",
+ "RegExp.prototype": "['compile', 'constructor', 'exec', 'global', 'ignoreCase', 'lastIndex', 'multiline', 'source', 'test', 'toString']",
+ "Error": "['length', 'name', 'prototype']",
+ "Error.prototype": "['constructor', 'message', 'name', 'toString']",
+ "Math": "['E', 'LN10', 'LN2', 'LOG10E', 'LOG2E', 'PI', 'SQRT1_2', 'SQRT2', 'abs', 'acos', 'asin', 'atan', 'atan2', 'ceil', 'cos', 'exp', 'floor', 'log', 'max', 'min', 'pow', 'random', 'round', 'sin', 'sqrt', 'tan']",
+ "JSON": "['parse', 'stringify']"
+};
+
+function getSortedOwnPropertyNames(obj)
+{
+ return Object.getOwnPropertyNames(obj).sort();
+}
+
+for (var expr in expectedPropertyNamesSet)
+ shouldBe("getSortedOwnPropertyNames(" + expr + ")", expectedPropertyNamesSet[expr]);
+
+// Global Object
+// Only check for ECMA properties here
+var globalPropertyNames = Object.getOwnPropertyNames(this);
+var expectedGlobalPropertyNames = [
+ "NaN",
+ "Infinity",
+ "undefined",
+ "parseInt",
+ "parseFloat",
+ "isNaN",
+ "isFinite",
+ "escape",
+ "unescape",
+ "decodeURI",
+ "decodeURIComponent",
+ "encodeURI",
+ "encodeURIComponent",
+ "Object",
+ "Function",
+ "Array",
+ "String",
+ "Boolean",
+ "Number",
+ "Date",
+ "RegExp",
+ "Error",
+ "Math",
+ "JSON"
+];
+
+for (var i = 0; i < expectedGlobalPropertyNames.length; ++i)
+ shouldBeTrue("globalPropertyNames.indexOf('" + expectedGlobalPropertyNames[i] + "') != -1");
--- /dev/null
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test thoroughly checks the behaviour of the 'arguments' object.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS access_1(1, 2, 3) is 1
+PASS access_2(1, 2, 3) is 2
+PASS access_3(1, 2, 3) is 3
+PASS access_4(1, 2, 3) is undefined
+PASS access_5(1, 2, 3) is undefined
+PASS access_1(1) is 1
+PASS access_2(1) is undefined
+PASS access_3(1) is undefined
+PASS access_4(1) is undefined
+PASS access_5(1) is undefined
+PASS access_1(1, 2, 3, 4, 5) is 1
+PASS access_2(1, 2, 3, 4, 5) is 2
+PASS access_3(1, 2, 3, 4, 5) is 3
+PASS access_4(1, 2, 3, 4, 5) is 4
+PASS access_5(1, 2, 3, 4, 5) is 5
+PASS argumentLengthIs5() is 5
+PASS argumentLengthIs5(1,2,3,4,5) is 5
+PASS argumentLengthIs5(1,2,3,4,5,6,7,8,9,10) is 5
+PASS duplicateArgumentAndReturnLast_call(1) is 1
+PASS duplicateArgumentAndReturnFirst_call(1) is 1
+PASS duplicateArgumentAndReturnLast_apply(1) is 1
+PASS duplicateArgumentAndReturnFirst_apply(1) is 1
+PASS tear_off_equal_access_1(1, 2, 3) is 1
+PASS tear_off_equal_access_2(1, 2, 3) is 2
+PASS tear_off_equal_access_3(1, 2, 3) is 3
+PASS tear_off_equal_access_4(1, 2, 3) is undefined
+PASS tear_off_equal_access_5(1, 2, 3) is undefined
+PASS tear_off_too_few_access_1(1) is 1
+PASS tear_off_too_few_access_2(1) is undefined
+PASS tear_off_too_few_access_3(1) is undefined
+PASS tear_off_too_few_access_4(1) is undefined
+PASS tear_off_too_few_access_5(1) is undefined
+PASS tear_off_too_many_access_1(1, 2, 3, 4, 5) is 1
+PASS tear_off_too_many_access_2(1, 2, 3, 4, 5) is 2
+PASS tear_off_too_many_access_3(1, 2, 3, 4, 5) is 3
+PASS tear_off_too_many_access_4(1, 2, 3, 4, 5) is 4
+PASS tear_off_too_many_access_5(1, 2, 3, 4, 5) is 5
+PASS live_1(0, 2, 3) is 1
+PASS live_2(1, 0, 3) is 2
+PASS live_3(1, 2, 0) is 3
+PASS live_1(0) is 1
+PASS live_2(1) is undefined
+PASS live_3(1) is undefined
+PASS live_1(0, 2, 3, 4, 5) is 1
+PASS live_2(1, 0, 3, 4, 5) is 2
+PASS live_3(1, 2, 0, 4, 5) is 3
+PASS extra_args_modify_4(1, 2, 3, 0, 5) is 4
+PASS extra_args_modify_5(1, 2, 3, 4, 0) is 5
+PASS tear_off_live_1(0, 2, 3)() is 1
+PASS tear_off_live_2(1, 0, 3)() is 2
+PASS tear_off_live_3(1, 2, 0)() is 3
+PASS tear_off_live_1(0)() is 1
+PASS tear_off_live_2(1)() is undefined
+PASS tear_off_live_3(1)() is undefined
+PASS tear_off_live_1(0, 2, 3, 4, 5)() is 1
+PASS tear_off_live_2(1, 0, 3, 4, 5)() is 2
+PASS tear_off_live_3(1, 2, 0, 4, 5)() is 3
+PASS tear_off_extra_args_modify_4(1, 2, 3, 0, 5)() is 4
+PASS tear_off_extra_args_modify_5(1, 2, 3, 4, 0)() is 5
+PASS delete_1(1, 2, 3) is undefined
+PASS delete_2(1, 2, 3) is undefined
+PASS delete_3(1, 2, 3) is undefined
+PASS delete_4(1, 2, 3) is undefined
+PASS delete_5(1, 2, 3) is undefined
+PASS delete_1(1) is undefined
+PASS delete_2(1) is undefined
+PASS delete_3(1) is undefined
+PASS delete_4(1) is undefined
+PASS delete_5(1) is undefined
+PASS delete_1(1, 2, 3, 4, 5) is undefined
+PASS delete_2(1, 2, 3, 4, 5) is undefined
+PASS delete_3(1, 2, 3, 4, 5) is undefined
+PASS delete_4(1, 2, 3, 4, 5) is undefined
+PASS delete_5(1, 2, 3, 4, 5) is undefined
+PASS tear_off_delete_1(1, 2, 3)() is undefined
+PASS tear_off_delete_2(1, 2, 3)() is undefined
+PASS tear_off_delete_3(1, 2, 3)() is undefined
+PASS tear_off_delete_4(1, 2, 3)() is undefined
+PASS tear_off_delete_5(1, 2, 3)() is undefined
+PASS tear_off_delete_1(1)() is undefined
+PASS tear_off_delete_2(1)() is undefined
+PASS tear_off_delete_3(1)() is undefined
+PASS tear_off_delete_4(1)() is undefined
+PASS tear_off_delete_5(1)() is undefined
+PASS tear_off_delete_1(1, 2, 3, 4, 5)() is undefined
+PASS tear_off_delete_2(1, 2, 3, 4, 5)() is undefined
+PASS tear_off_delete_3(1, 2, 3, 4, 5)() is undefined
+PASS tear_off_delete_4(1, 2, 3, 4, 5)() is undefined
+PASS tear_off_delete_5(1, 2, 3, 4, 5)() is undefined
+PASS delete_not_live_1(1, 2, 3) is 1
+PASS delete_not_live_2(1, 2, 3) is 2
+PASS delete_not_live_3(1, 2, 3) is 3
+PASS delete_not_live_1(1) is 1
+PASS delete_not_live_2(1) is undefined
+PASS delete_not_live_3(1) is undefined
+PASS delete_not_live_1(1, 2, 3, 4, 5) is 1
+PASS delete_not_live_2(1, 2, 3, 4, 5) is 2
+PASS delete_not_live_3(1, 2, 3, 4, 5) is 3
+PASS tear_off_delete_not_live_1(1, 2, 3)() is 1
+PASS tear_off_delete_not_live_2(1, 2, 3)() is 2
+PASS tear_off_delete_not_live_3(1, 2, 3)() is 3
+PASS tear_off_delete_not_live_1(1)() is 1
+PASS tear_off_delete_not_live_2(1)() is undefined
+PASS tear_off_delete_not_live_3(1)() is undefined
+PASS tear_off_delete_not_live_1(1, 2, 3, 4, 5)() is 1
+PASS tear_off_delete_not_live_2(1, 2, 3, 4, 5)() is 2
+PASS tear_off_delete_not_live_3(1, 2, 3, 4, 5)() is 3
+PASS access_after_delete_named_2(1, 2, 3) is 2
+PASS access_after_delete_named_3(1, 2, 3) is 3
+PASS access_after_delete_named_4(1, 2, 3) is undefined
+PASS access_after_delete_named_2(1) is undefined
+PASS access_after_delete_named_3(1) is undefined
+PASS access_after_delete_named_4(1) is undefined
+PASS access_after_delete_named_2(1, 2, 3, 4) is 2
+PASS access_after_delete_named_3(1, 2, 3, 4) is 3
+PASS access_after_delete_named_4(1, 2, 3, 4) is 4
+PASS access_after_delete_extra_1(1, 2, 3) is 1
+PASS access_after_delete_extra_2(1, 2, 3) is 2
+PASS access_after_delete_extra_3(1, 2, 3) is 3
+PASS access_after_delete_extra_5(1, 2, 3) is undefined
+PASS access_after_delete_extra_1(1) is 1
+PASS access_after_delete_extra_2(1) is undefined
+PASS access_after_delete_extra_3(1) is undefined
+PASS access_after_delete_extra_5(1) is undefined
+PASS access_after_delete_extra_1(1, 2, 3, 4, 5) is 1
+PASS access_after_delete_extra_2(1, 2, 3, 4, 5) is 2
+PASS access_after_delete_extra_3(1, 2, 3, 4, 5) is 3
+PASS access_after_delete_extra_5(1, 2, 3, 4, 5) is 5
+PASS argumentsParam(true) is true
+PASS argumentsFunctionConstructorParam(true) is true
+PASS argumentsVarUndefined() is '[object Arguments]'
+FAIL argumentsConstUndefined() should be [object Arguments]. Threw exception TypeError: Variable 'arguments' has already been declared
+PASS argumentCalleeInException() is argumentCalleeInException
+PASS shadowedArgumentsApply([true]) is true
+PASS shadowedArgumentsLength([]) is 0
+PASS shadowedArgumentsLength() threw exception TypeError: Cannot read property 'length' of undefined.
+PASS shadowedArgumentsCallee([]) is undefined.
+PASS shadowedArgumentsIndex([true]) is true
+PASS descriptor.value is "one"
+PASS descriptor.writable is true
+PASS descriptor.enumerable is true
+PASS descriptor.configurable is true
+PASS true is true
+PASS true is true
+PASS true is true
+PASS true is true
+PASS true is true
+PASS true is true
+PASS true is true
+PASS true is true
+PASS true is true
+PASS true is true
+PASS true is true
+PASS true is true
+PASS true is true
+PASS true is true
+PASS true is true
+PASS true is true
+PASS true is true
+PASS true is true
+PASS true is true
+PASS true is true
+PASS true is true
+PASS true is true
+PASS true is true
+PASS true is true
+PASS true is true
+PASS true is true
+PASS false is false
+PASS true is true
+PASS false is false
+PASS false is false
+PASS undefined is undefined.
+PASS true is true
+PASS false is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test thoroughly checks the behaviour of the 'arguments' object."
+);
+
+function access_1(a, b, c)
+{
+ return arguments[0];
+}
+
+function access_2(a, b, c)
+{
+ return arguments[1];
+}
+
+function access_3(a, b, c)
+{
+ return arguments[2];
+}
+
+function access_4(a, b, c)
+{
+ return arguments[3];
+}
+
+function access_5(a, b, c)
+{
+ return arguments[4];
+}
+
+function argumentLengthIs5() {
+ arguments.length = 5;
+ return arguments.length;
+}
+
+function duplicateArgumentAndReturnLast_call(a) {
+ Array.prototype.push.call(arguments, a);
+ return arguments[1];
+}
+
+function duplicateArgumentAndReturnFirst_call(a) {
+ Array.prototype.push.call(arguments, a);
+ return arguments[0];
+}
+
+function duplicateArgumentAndReturnLast_apply(a) {
+ Array.prototype.push.apply(arguments, arguments);
+ return arguments[1];
+}
+
+function duplicateArgumentAndReturnFirst_apply(a) {
+ Array.prototype.push.apply(arguments, arguments);
+ return arguments[0];
+}
+
+shouldBe("access_1(1, 2, 3)", "1");
+shouldBe("access_2(1, 2, 3)", "2");
+shouldBe("access_3(1, 2, 3)", "3");
+shouldBe("access_4(1, 2, 3)", "undefined");
+shouldBe("access_5(1, 2, 3)", "undefined");
+
+shouldBe("access_1(1)", "1");
+shouldBe("access_2(1)", "undefined");
+shouldBe("access_3(1)", "undefined");
+shouldBe("access_4(1)", "undefined");
+shouldBe("access_5(1)", "undefined");
+
+shouldBe("access_1(1, 2, 3, 4, 5)", "1");
+shouldBe("access_2(1, 2, 3, 4, 5)", "2");
+shouldBe("access_3(1, 2, 3, 4, 5)", "3");
+shouldBe("access_4(1, 2, 3, 4, 5)", "4");
+shouldBe("access_5(1, 2, 3, 4, 5)", "5");
+
+shouldBe("argumentLengthIs5()", "5");
+shouldBe("argumentLengthIs5(1,2,3,4,5)", "5");
+shouldBe("argumentLengthIs5(1,2,3,4,5,6,7,8,9,10)", "5");
+shouldBe("duplicateArgumentAndReturnLast_call(1)", "1");
+shouldBe("duplicateArgumentAndReturnFirst_call(1)", "1");
+shouldBe("duplicateArgumentAndReturnLast_apply(1)", "1");
+shouldBe("duplicateArgumentAndReturnFirst_apply(1)", "1");
+
+function f(a, b, c)
+{
+ return arguments;
+}
+
+function tear_off_equal_access_1(a, b, c)
+{
+ return f(a, b, c)[0];
+}
+
+function tear_off_equal_access_2(a, b, c)
+{
+ return f(a, b, c)[1];
+}
+
+function tear_off_equal_access_3(a, b, c)
+{
+ return f(a, b, c)[2];
+}
+
+function tear_off_equal_access_4(a, b, c)
+{
+ return f(a, b, c)[3];
+}
+
+function tear_off_equal_access_5(a, b, c)
+{
+ return f(a, b, c)[4];
+}
+
+shouldBe("tear_off_equal_access_1(1, 2, 3)", "1");
+shouldBe("tear_off_equal_access_2(1, 2, 3)", "2");
+shouldBe("tear_off_equal_access_3(1, 2, 3)", "3");
+shouldBe("tear_off_equal_access_4(1, 2, 3)", "undefined");
+shouldBe("tear_off_equal_access_5(1, 2, 3)", "undefined");
+
+function tear_off_too_few_access_1(a)
+{
+ return f(a)[0];
+}
+
+function tear_off_too_few_access_2(a)
+{
+ return f(a)[1];
+}
+
+function tear_off_too_few_access_3(a)
+{
+ return f(a)[2];
+}
+
+function tear_off_too_few_access_4(a)
+{
+ return f(a)[3];
+}
+
+function tear_off_too_few_access_5(a)
+{
+ return f(a)[4];
+}
+
+shouldBe("tear_off_too_few_access_1(1)", "1");
+shouldBe("tear_off_too_few_access_2(1)", "undefined");
+shouldBe("tear_off_too_few_access_3(1)", "undefined");
+shouldBe("tear_off_too_few_access_4(1)", "undefined");
+shouldBe("tear_off_too_few_access_5(1)", "undefined");
+
+function tear_off_too_many_access_1(a, b, c, d, e)
+{
+ return f(a, b, c, d, e)[0];
+}
+
+function tear_off_too_many_access_2(a, b, c, d, e)
+{
+ return f(a, b, c, d, e)[1];
+}
+
+function tear_off_too_many_access_3(a, b, c, d, e)
+{
+ return f(a, b, c, d, e)[2];
+}
+
+function tear_off_too_many_access_4(a, b, c, d, e)
+{
+ return f(a, b, c, d, e)[3];
+}
+
+function tear_off_too_many_access_5(a, b, c, d, e)
+{
+ return f(a, b, c, d, e)[4];
+}
+
+shouldBe("tear_off_too_many_access_1(1, 2, 3, 4, 5)", "1");
+shouldBe("tear_off_too_many_access_2(1, 2, 3, 4, 5)", "2");
+shouldBe("tear_off_too_many_access_3(1, 2, 3, 4, 5)", "3");
+shouldBe("tear_off_too_many_access_4(1, 2, 3, 4, 5)", "4");
+shouldBe("tear_off_too_many_access_5(1, 2, 3, 4, 5)", "5");
+
+function live_1(a, b, c)
+{
+ arguments[0] = 1;
+ return a;
+}
+
+function live_2(a, b, c)
+{
+ arguments[1] = 2;
+ return b;
+}
+
+function live_3(a, b, c)
+{
+ arguments[2] = 3;
+ return c;
+}
+
+shouldBe("live_1(0, 2, 3)", "1");
+shouldBe("live_2(1, 0, 3)", "2");
+shouldBe("live_3(1, 2, 0)", "3");
+
+// Arguments that were not provided are not live
+shouldBe("live_1(0)", "1");
+shouldBe("live_2(1)", "undefined");
+shouldBe("live_3(1)", "undefined");
+
+shouldBe("live_1(0, 2, 3, 4, 5)", "1");
+shouldBe("live_2(1, 0, 3, 4, 5)", "2");
+shouldBe("live_3(1, 2, 0, 4, 5)", "3");
+
+function extra_args_modify_4(a, b, c)
+{
+ arguments[3] = 4;
+ return arguments[3];
+}
+
+function extra_args_modify_5(a, b, c)
+{
+ arguments[4] = 5;
+ return arguments[4];
+}
+
+shouldBe("extra_args_modify_4(1, 2, 3, 0, 5)", "4");
+shouldBe("extra_args_modify_5(1, 2, 3, 4, 0)", "5");
+
+function tear_off_live_1(a, b, c)
+{
+ var args = arguments;
+ return function()
+ {
+ args[0] = 1;
+ return a;
+ };
+}
+
+function tear_off_live_2(a, b, c)
+{
+ var args = arguments;
+ return function()
+ {
+ args[1] = 2;
+ return b;
+ };
+}
+
+function tear_off_live_3(a, b, c)
+{
+ var args = arguments;
+ return function()
+ {
+ args[2] = 3;
+ return c;
+ };
+}
+
+shouldBe("tear_off_live_1(0, 2, 3)()", "1");
+shouldBe("tear_off_live_2(1, 0, 3)()", "2");
+shouldBe("tear_off_live_3(1, 2, 0)()", "3");
+
+// Arguments that were not provided are not live
+shouldBe("tear_off_live_1(0)()", "1");
+shouldBe("tear_off_live_2(1)()", "undefined");
+shouldBe("tear_off_live_3(1)()", "undefined");
+
+shouldBe("tear_off_live_1(0, 2, 3, 4, 5)()", "1");
+shouldBe("tear_off_live_2(1, 0, 3, 4, 5)()", "2");
+shouldBe("tear_off_live_3(1, 2, 0, 4, 5)()", "3");
+
+function tear_off_extra_args_modify_4(a, b, c)
+{
+ return function()
+ {
+ arguments[3] = 4;
+ return arguments[3];
+ }
+}
+
+function tear_off_extra_args_modify_5(a, b, c)
+{
+ return function()
+ {
+ arguments[4] = 5;
+ return arguments[4];
+ }
+}
+
+shouldBe("tear_off_extra_args_modify_4(1, 2, 3, 0, 5)()", "4");
+shouldBe("tear_off_extra_args_modify_5(1, 2, 3, 4, 0)()", "5");
+
+function delete_1(a, b, c)
+{
+ delete arguments[0];
+ return arguments[0];
+}
+
+function delete_2(a, b, c)
+{
+ delete arguments[1];
+ return arguments[1];
+}
+
+function delete_3(a, b, c)
+{
+ delete arguments[2];
+ return arguments[2];
+}
+
+function delete_4(a, b, c)
+{
+ delete arguments[3];
+ return arguments[3];
+}
+
+function delete_5(a, b, c)
+{
+ delete arguments[4];
+ return arguments[4];
+}
+
+shouldBe("delete_1(1, 2, 3)", "undefined");
+shouldBe("delete_2(1, 2, 3)", "undefined");
+shouldBe("delete_3(1, 2, 3)", "undefined");
+shouldBe("delete_4(1, 2, 3)", "undefined");
+shouldBe("delete_5(1, 2, 3)", "undefined");
+
+shouldBe("delete_1(1)", "undefined");
+shouldBe("delete_2(1)", "undefined");
+shouldBe("delete_3(1)", "undefined");
+shouldBe("delete_4(1)", "undefined");
+shouldBe("delete_5(1)", "undefined");
+
+shouldBe("delete_1(1, 2, 3, 4, 5)", "undefined");
+shouldBe("delete_2(1, 2, 3, 4, 5)", "undefined");
+shouldBe("delete_3(1, 2, 3, 4, 5)", "undefined");
+shouldBe("delete_4(1, 2, 3, 4, 5)", "undefined");
+shouldBe("delete_5(1, 2, 3, 4, 5)", "undefined");
+
+function tear_off_delete_1(a, b, c)
+{
+ return function()
+ {
+ delete arguments[0];
+ return arguments[0];
+ };
+}
+
+function tear_off_delete_2(a, b, c)
+{
+ return function()
+ {
+ delete arguments[1];
+ return arguments[1];
+ };
+}
+
+function tear_off_delete_3(a, b, c)
+{
+ return function()
+ {
+ delete arguments[2];
+ return arguments[2];
+ };
+}
+
+function tear_off_delete_4(a, b, c)
+{
+ return function()
+ {
+ delete arguments[3];
+ return arguments[3];
+ };
+}
+
+function tear_off_delete_5(a, b, c)
+{
+ return function()
+ {
+ delete arguments[4];
+ return arguments[4];
+ };
+}
+
+shouldBe("tear_off_delete_1(1, 2, 3)()", "undefined");
+shouldBe("tear_off_delete_2(1, 2, 3)()", "undefined");
+shouldBe("tear_off_delete_3(1, 2, 3)()", "undefined");
+shouldBe("tear_off_delete_4(1, 2, 3)()", "undefined");
+shouldBe("tear_off_delete_5(1, 2, 3)()", "undefined");
+
+shouldBe("tear_off_delete_1(1)()", "undefined");
+shouldBe("tear_off_delete_2(1)()", "undefined");
+shouldBe("tear_off_delete_3(1)()", "undefined");
+shouldBe("tear_off_delete_4(1)()", "undefined");
+shouldBe("tear_off_delete_5(1)()", "undefined");
+
+shouldBe("tear_off_delete_1(1, 2, 3, 4, 5)()", "undefined");
+shouldBe("tear_off_delete_2(1, 2, 3, 4, 5)()", "undefined");
+shouldBe("tear_off_delete_3(1, 2, 3, 4, 5)()", "undefined");
+shouldBe("tear_off_delete_4(1, 2, 3, 4, 5)()", "undefined");
+shouldBe("tear_off_delete_5(1, 2, 3, 4, 5)()", "undefined");
+
+function delete_not_live_1(a, b, c)
+{
+ delete arguments[0];
+ return a;
+}
+
+function delete_not_live_2(a, b, c)
+{
+ delete arguments[1];
+ return b;
+}
+
+function delete_not_live_3(a, b, c)
+{
+ delete arguments[2];
+ return c;
+}
+
+shouldBe("delete_not_live_1(1, 2, 3)", "1");
+shouldBe("delete_not_live_2(1, 2, 3)", "2");
+shouldBe("delete_not_live_3(1, 2, 3)", "3");
+
+shouldBe("delete_not_live_1(1)", "1");
+shouldBe("delete_not_live_2(1)", "undefined");
+shouldBe("delete_not_live_3(1)", "undefined");
+
+shouldBe("delete_not_live_1(1, 2, 3, 4, 5)", "1");
+shouldBe("delete_not_live_2(1, 2, 3, 4, 5)", "2");
+shouldBe("delete_not_live_3(1, 2, 3, 4, 5)", "3");
+
+function tear_off_delete_not_live_1(a, b, c)
+{
+ return function()
+ {
+ delete arguments[0];
+ return a;
+ };
+}
+
+function tear_off_delete_not_live_2(a, b, c)
+{
+ return function ()
+ {
+ delete arguments[1];
+ return b;
+ };
+}
+
+function tear_off_delete_not_live_3(a, b, c)
+{
+ return function()
+ {
+ delete arguments[2];
+ return c;
+ };
+}
+
+shouldBe("tear_off_delete_not_live_1(1, 2, 3)()", "1");
+shouldBe("tear_off_delete_not_live_2(1, 2, 3)()", "2");
+shouldBe("tear_off_delete_not_live_3(1, 2, 3)()", "3");
+
+shouldBe("tear_off_delete_not_live_1(1)()", "1");
+shouldBe("tear_off_delete_not_live_2(1)()", "undefined");
+shouldBe("tear_off_delete_not_live_3(1)()", "undefined");
+
+shouldBe("tear_off_delete_not_live_1(1, 2, 3, 4, 5)()", "1");
+shouldBe("tear_off_delete_not_live_2(1, 2, 3, 4, 5)()", "2");
+shouldBe("tear_off_delete_not_live_3(1, 2, 3, 4, 5)()", "3");
+
+function access_after_delete_named_2(a, b, c)
+{
+ delete arguments[0];
+ return b;
+}
+
+function access_after_delete_named_3(a, b, c)
+{
+ delete arguments[0];
+ return c;
+}
+
+function access_after_delete_named_4(a, b, c)
+{
+ delete arguments[0];
+ return arguments[3];
+}
+
+shouldBe("access_after_delete_named_2(1, 2, 3)", "2");
+shouldBe("access_after_delete_named_3(1, 2, 3)", "3");
+shouldBe("access_after_delete_named_4(1, 2, 3)", "undefined");
+
+shouldBe("access_after_delete_named_2(1)", "undefined");
+shouldBe("access_after_delete_named_3(1)", "undefined");
+shouldBe("access_after_delete_named_4(1)", "undefined");
+
+shouldBe("access_after_delete_named_2(1, 2, 3, 4)", "2");
+shouldBe("access_after_delete_named_3(1, 2, 3, 4)", "3");
+shouldBe("access_after_delete_named_4(1, 2, 3, 4)", "4");
+
+function access_after_delete_extra_1(a, b, c)
+{
+ delete arguments[3];
+ return a;
+}
+
+function access_after_delete_extra_2(a, b, c)
+{
+ delete arguments[3];
+ return b;
+}
+
+function access_after_delete_extra_3(a, b, c)
+{
+ delete arguments[3];
+ return c;
+}
+
+function access_after_delete_extra_5(a, b, c)
+{
+ delete arguments[3];
+ return arguments[4];
+}
+
+shouldBe("access_after_delete_extra_1(1, 2, 3)", "1");
+shouldBe("access_after_delete_extra_2(1, 2, 3)", "2");
+shouldBe("access_after_delete_extra_3(1, 2, 3)", "3");
+shouldBe("access_after_delete_extra_5(1, 2, 3)", "undefined");
+
+shouldBe("access_after_delete_extra_1(1)", "1");
+shouldBe("access_after_delete_extra_2(1)", "undefined");
+shouldBe("access_after_delete_extra_3(1)", "undefined");
+shouldBe("access_after_delete_extra_5(1)", "undefined");
+
+shouldBe("access_after_delete_extra_1(1, 2, 3, 4, 5)", "1");
+shouldBe("access_after_delete_extra_2(1, 2, 3, 4, 5)", "2");
+shouldBe("access_after_delete_extra_3(1, 2, 3, 4, 5)", "3");
+shouldBe("access_after_delete_extra_5(1, 2, 3, 4, 5)", "5");
+
+function argumentsParam(arguments)
+{
+ return arguments;
+}
+shouldBeTrue("argumentsParam(true)");
+
+var argumentsFunctionConstructorParam = new Function("arguments", "return arguments;");
+shouldBeTrue("argumentsFunctionConstructorParam(true)");
+
+function argumentsVarUndefined()
+{
+ var arguments;
+ return String(arguments);
+}
+shouldBe("argumentsVarUndefined()", "'[object Arguments]'");
+
+function argumentsConstUndefined()
+{
+ const arguments;
+ return String(arguments);
+}
+shouldBe("argumentsConstUndefined()", "'[object Arguments]'");
+
+function argumentCalleeInException() {
+ try {
+ throw "";
+ } catch (e) {
+ return arguments.callee;
+ }
+}
+shouldBe("argumentCalleeInException()", "argumentCalleeInException")
+
+function shadowedArgumentsApply(arguments) {
+ return function(a){ return a; }.apply(null, arguments);
+}
+
+function shadowedArgumentsLength(arguments) {
+ return arguments.length;
+}
+
+function shadowedArgumentsCallee(arguments) {
+ return arguments.callee;
+}
+
+function shadowedArgumentsIndex(arguments) {
+ return arguments[0]
+}
+
+shouldBeTrue("shadowedArgumentsApply([true])");
+shouldBe("shadowedArgumentsLength([])", '0');
+shouldThrow("shadowedArgumentsLength()");
+shouldBeUndefined("shadowedArgumentsCallee([])");
+shouldBeTrue("shadowedArgumentsIndex([true])");
+
+descriptor = (function(){ return Object.getOwnPropertyDescriptor(arguments, 1); })("zero","one","two");
+shouldBe("descriptor.value", '"one"');
+shouldBe("descriptor.writable", 'true');
+shouldBe("descriptor.enumerable", 'true');
+shouldBe("descriptor.configurable", 'true');
+
+// Test cases for [[DefineOwnProperty]] applied to the arguments object.
+(function(a0,a1,a2,a3){
+ Object.defineProperties(arguments, {
+ 1: { get: function(){ return 201; } },
+ 2: { value: 202, writable: false },
+ 3: { writable: false },
+ });
+
+ // Test a0 is a live mapped argument.
+ shouldBeTrue(String( a0 === 100 ));
+ shouldBeTrue(String( arguments[0] === 100 ));
+ a0 = 300;
+ shouldBeTrue(String( a0 === 300 ));
+ shouldBeTrue(String( arguments[0] === 300 ));
+ arguments[0] = 400;
+ shouldBeTrue(String( a0 === 400 ));
+ shouldBeTrue(String( arguments[0] === 400 ));
+
+ // When a1 is redefined as an accessor, it is no longer live.
+ shouldBeTrue(String( a1 === 101 ));
+ shouldBeTrue(String( arguments[1] === 201 ));
+ a1 = 301;
+ shouldBeTrue(String( a1 === 301 ));
+ shouldBeTrue(String( arguments[1] === 201 ));
+ arguments[1] = 401;
+ shouldBeTrue(String( a1 === 301 ));
+ shouldBeTrue(String( arguments[1] === 201 ));
+
+ // When a2 is made read-only the value is set, but it is no longer live.
+ // (per 10.6 [[DefineOwnProperty]] 5.b.ii.1)
+ shouldBeTrue(String( a2 === 202 ));
+ shouldBeTrue(String( arguments[2] === 202 ));
+ a2 = 302;
+ shouldBeTrue(String( a2 === 302 ));
+ shouldBeTrue(String( arguments[2] === 202 ));
+ arguments[2] = 402;
+ shouldBeTrue(String( a2 === 302 ));
+ shouldBeTrue(String( arguments[2] === 202 ));
+
+ // When a3 is made read-only, it is no longer live.
+ // (per 10.6 [[DefineOwnProperty]] 5.b.ii.1)
+ shouldBeTrue(String( a3 === 103 ));
+ shouldBeTrue(String( arguments[3] === 103 ));
+ a3 = 303;
+ shouldBeTrue(String( a3 === 303 ));
+ shouldBeTrue(String( arguments[3] === 103 ));
+ arguments[3] = 403;
+ shouldBeTrue(String( a3 === 303 ));
+ shouldBeTrue(String( arguments[3] === 103 ));
+
+})(100,101,102,103);
+
+// Test cases for [[DefineOwnProperty]] applied to the arguments object.
+(function(arg){
+ shouldBeTrue(String( Object.getOwnPropertyDescriptor(arguments, 0).writable ));
+ shouldBeTrue(String( Object.getOwnPropertyDescriptor(arguments, 0).enumerable ));
+ Object.defineProperty(arguments, 0, { writable: false });
+ shouldBeFalse(String( Object.getOwnPropertyDescriptor(arguments, 0).writable ));
+ shouldBeTrue(String( Object.getOwnPropertyDescriptor(arguments, 0).enumerable ));
+ Object.defineProperty(arguments, 0, { enumerable: false });
+ shouldBeFalse(String( Object.getOwnPropertyDescriptor(arguments, 0).writable ));
+ shouldBeFalse(String( Object.getOwnPropertyDescriptor(arguments, 0).enumerable ));
+
+ delete arguments[1];
+ shouldBeUndefined(String( Object.getOwnPropertyDescriptor(arguments, 1) ));
+ Object.defineProperty(arguments, 1, { writable: true });
+ shouldBeTrue(String( Object.getOwnPropertyDescriptor(arguments, 1).writable ));
+ shouldBeFalse(String( Object.getOwnPropertyDescriptor(arguments, 1).enumerable ));
+})(0,1);
--- /dev/null
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that defining a setter on the Array prototype works even if it is done after arrays are allocated.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+Henceforth I will have a bad time.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL ouches should be 50. Was 0.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that defining a setter on the Array prototype works even if it is done after arrays are allocated."
+);
+
+var ouches = 0;
+
+function foo(haveABadTime) {
+ var result = [];
+ result.length = 5;
+ for (var i = 0; i < result.length; ++i) {
+ if (i == haveABadTime) {
+ debug("Henceforth I will have a bad time.");
+ Array.prototype.__defineSetter__("3", function() { debug("Ouch!"); ouches++; });
+ }
+ result[i] = i;
+ }
+ return result;
+}
+
+var expected = "\"0,1,2,3,4\"";
+
+for (var i = 0; i < 1000; ++i) {
+ var haveABadTime;
+ if (i == 950) {
+ haveABadTime = 2;
+ expected = "\"0,1,2,,4\"";
+ } else
+ haveABadTime = -1;
+ shouldBe("\"" + foo(haveABadTime).join(",") + "\"", expected);
+}
+
+shouldBe("ouches", "50");
--- /dev/null
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks for regression against 6234: Can delete array index property incorrectly.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS a[1] is "before"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'This test checks for regression against <a href="https://bugs.webkit.org/show_bug.cgi?id=6234">6234: Can delete array index property incorrectly.</a>'
+);
+
+var a = new Array();
+a[1] = "before";
+a['1.0'] = "after";
+delete a['1.0'];
+shouldBe("a[1]", '"before"');
--- /dev/null
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test some array functions on non-array objects.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS properties(['b', 'a']) is '0:b, 1:a, length:2(DontDelete, DontEnum)'
+PASS properties({ length:2, 0:'b', 1:'a' }) is '0:b, 1:a, length:2'
+PASS properties(new OneItemConstructor) is '0:a(FromPrototype), length:1(FromPrototype)'
+PASS properties(new TwoItemConstructor) is '0:b(FromPrototype), 1:a(FromPrototype), length:2(FromPrototype)'
+PASS Array.prototype.toString.call({}) is "[object Object]"
+PASS Array.prototype.toString.call(new Date) is "[object Date]"
+PASS Array.prototype.toString.call({sort: function() { return 'sort' }}) is "[object Object]"
+PASS Array.prototype.toString.call({join: function() { return 'join' }}) is "join"
+PASS Array.prototype.toString.call({__proto__: Array.prototype, 0: 'a', 1: 'b', 2: 'c', length: 3}) is "a,b,c"
+PASS ({__proto__: Array.prototype, 0: 'a', 1: 'b', 2: 'c', length: 3}).toString() is "a,b,c"
+PASS Array.prototype.toString.call({__proto__: Array.prototype, 0: 'a', 1: 'b', 2: 'c', length: 3, join: function() { return 'join' }}) is "join"
+PASS ({__proto__: Array.prototype, 0: 'a', 1: 'b', 2: 'c', length: 3, join: function() { return 'join' }}).toString() is "join"
+PASS Array.prototype.toString.call(42) is "Number.prototype.join:42"
+PASS [0, 1, 2].toString() is "array-join"
+FAIL Array.prototype.toLocaleString.call({}) should throw an exception. Was .
+PASS Array.prototype.concat.call(x = { length:2, 0:'b', 1:'a' }) is [x]
+PASS Array.prototype.join.call({}) is ''
+PASS Array.prototype.join.call(['b', 'a']) is 'b,a'
+PASS Array.prototype.join.call({ length:2, 0:'b', 1:'a' }) is 'b,a'
+PASS Array.prototype.join.call(new TwoItemConstructor) is 'b,a'
+PASS Array.prototype.pop.call({}) is undefined
+PASS Array.prototype.pop.call({ length:2, 0:'b', 1:'a' }) is 'a'
+PASS Array.prototype.pop.call({ length:2, 0:'b', 1:'a' }) is 'a'
+PASS Array.prototype.pop.call(new TwoItemConstructor) is 'a'
+PASS Array.prototype.pop.call(x = {}); properties(x) is 'length:0'
+PASS Array.prototype.pop.call(x = ['b', 'a']); properties(x) is '0:b, length:1(DontDelete, DontEnum)'
+PASS Array.prototype.pop.call(x = { length:2, 0:'b', 1:'a' }); properties(x) is '0:b, length:1'
+PASS Array.prototype.pop.call(x = new TwoItemConstructor); properties(x) is '0:b(FromPrototype), 1:a(FromPrototype), length:1'
+PASS Array.prototype.push.call({}) is 0
+PASS Array.prototype.push.call(['b', 'a']) is 2
+PASS Array.prototype.push.call({ length:2, 0:'b', 1:'a' }) is 2
+PASS Array.prototype.push.call(new TwoItemConstructor) is 2
+PASS Array.prototype.push.call(x = {}); properties(x) is 'length:0'
+PASS Array.prototype.push.call(x = ['b', 'a']); properties(x) is '0:b, 1:a, length:2(DontDelete, DontEnum)'
+PASS Array.prototype.push.call(x = { length:2, 0:'b', 1:'a' }); properties(x) is '0:b, 1:a, length:2'
+PASS Array.prototype.push.call(x = new TwoItemConstructor); properties(x) is '0:b(FromPrototype), 1:a(FromPrototype), length:2'
+PASS Array.prototype.push.call({}, 'c') is 1
+PASS Array.prototype.push.call(['b', 'a'], 'c') is 3
+PASS Array.prototype.push.call({ length:2, 0:'b', 1:'a' }, 'c') is 3
+PASS Array.prototype.push.call(new TwoItemConstructor, 'c') is 3
+PASS Array.prototype.push.call(x = {}, 'c'); properties(x) is '0:c, length:1'
+PASS Array.prototype.push.call(x = ['b', 'a'], 'c'); properties(x) is '0:b, 1:a, 2:c, length:3(DontDelete, DontEnum)'
+PASS Array.prototype.push.call(x = { length:2, 0:'b', 1:'a' }, 'c'); properties(x) is '0:b, 1:a, 2:c, length:3'
+PASS Array.prototype.push.call(x = new TwoItemConstructor, 'c'); properties(x) is '0:b(FromPrototype), 1:a(FromPrototype), 2:c, length:3'
+PASS properties(Array.prototype.reverse.call({})) is ''
+PASS properties(Array.prototype.reverse.call(['b', 'a'])) is '0:a, 1:b, length:2(DontDelete, DontEnum)'
+PASS properties(Array.prototype.reverse.call({ length:2, 0:'b', 1:'a' })) is '0:a, 1:b, length:2'
+PASS properties(Array.prototype.reverse.call(new OneItemConstructor)) is '0:a(FromPrototype), length:1(FromPrototype)'
+PASS properties(Array.prototype.reverse.call(new TwoItemConstructor)) is '0:a, 1:b, length:2(FromPrototype)'
+PASS Array.prototype.shift.call({}) is undefined
+PASS Array.prototype.shift.call(['b', 'a']) is 'b'
+PASS Array.prototype.shift.call({ length:2, 0:'b', 1:'a' }) is 'b'
+PASS Array.prototype.shift.call(new TwoItemConstructor) is 'b'
+PASS Array.prototype.shift.call(x = {}); properties(x) is 'length:0'
+PASS Array.prototype.shift.call(x = ['b', 'a']); properties(x) is '0:a, length:1(DontDelete, DontEnum)'
+PASS Array.prototype.shift.call(x = { length:2, 0:'b', 1:'a' }); properties(x) is '0:a, length:1'
+PASS Array.prototype.shift.call(x = new TwoItemConstructor); properties(x) is '0:a, 1:a(FromPrototype), length:1'
+PASS Array.prototype.slice.call({}, 0, 1) is []
+PASS Array.prototype.slice.call(['b', 'a'], 0, 1) is ['b']
+PASS Array.prototype.slice.call({ length:2, 0:'b', 1:'a' }, 0, 1) is ['b']
+PASS Array.prototype.slice.call(new TwoItemConstructor, 0, 1) is ['b']
+PASS properties(Array.prototype.sort.call({})) is ''
+PASS properties(Array.prototype.sort.call(['b', 'a'])) is '0:a, 1:b, length:2(DontDelete, DontEnum)'
+PASS properties(Array.prototype.sort.call({ length:2, 0:'b', 1:'a' })) is '0:a, 1:b, length:2'
+PASS properties(Array.prototype.sort.call(new OneItemConstructor)) is '0:a(FromPrototype), length:1(FromPrototype)'
+PASS properties(Array.prototype.sort.call(new TwoItemConstructor)) is '0:a, 1:b, length:2(FromPrototype)'
+PASS Array.prototype.splice.call({}, 0, 1) is []
+PASS Array.prototype.splice.call(['b', 'a'], 0, 1) is ['b']
+PASS Array.prototype.splice.call({ length:2, 0:'b', 1:'a' }, 0, 1) is ['b']
+PASS Array.prototype.splice.call(new TwoItemConstructor, 0, 1) is ['b']
+PASS Array.prototype.splice.call(x = {}, 0, 1); properties(x) is 'length:0'
+PASS Array.prototype.splice.call(x = ['b', 'a'], 0, 1); properties(x) is '0:a, length:1(DontDelete, DontEnum)'
+PASS Array.prototype.splice.call(x = { length:2, 0:'b', 1:'a' }, 0, 1); properties(x) is '0:a, length:1'
+PASS Array.prototype.splice.call(x = new TwoItemConstructor, 0, 1); properties(x) is '0:a, 1:a(FromPrototype), length:1'
+PASS Array.prototype.unshift.call({}) is 0
+PASS Array.prototype.unshift.call(['b', 'a']) is 2
+PASS Array.prototype.unshift.call({ length:2, 0:'b', 1:'a' }) is 2
+PASS Array.prototype.unshift.call(new TwoItemConstructor) is 2
+PASS Array.prototype.unshift.call(x = {}); properties(x) is 'length:0'
+PASS Array.prototype.unshift.call(x = ['b', 'a']); properties(x) is '0:b, 1:a, length:2(DontDelete, DontEnum)'
+PASS Array.prototype.unshift.call(x = { length:2, 0:'b', 1:'a' }); properties(x) is '0:b, 1:a, length:2'
+PASS Array.prototype.unshift.call(x = new TwoItemConstructor); properties(x) is '0:b(FromPrototype), 1:a(FromPrototype), length:2'
+PASS Array.prototype.unshift.call({}, 'c') is 1
+PASS Array.prototype.unshift.call(['b', 'a'], 'c') is 3
+PASS Array.prototype.unshift.call({ length:2, 0:'b', 1:'a' }, 'c') is 3
+PASS Array.prototype.unshift.call(new TwoItemConstructor, 'c') is 3
+PASS Array.prototype.unshift.call(x = {}, 'c'); properties(x) is '0:c, length:1'
+PASS Array.prototype.unshift.call(x = ['b', 'a'], 'c'); properties(x) is '0:c, 1:b, 2:a, length:3(DontDelete, DontEnum)'
+PASS Array.prototype.unshift.call(x = { length:2, 0:'b', 1:'a' }, 'c'); properties(x) is '0:c, 1:b, 2:a, length:3'
+PASS Array.prototype.unshift.call(x = new TwoItemConstructor, 'c'); properties(x) is '0:c, 1:b, 2:a, length:3'
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Test some array functions on non-array objects."
+);
+
+function properties(object, extraName1, extraName2, extraName3)
+{
+ var string = "";
+
+ // destructive, lists properties
+ var names = [];
+ var enumerables = {};
+ for (propertyName in object) {
+ names.push(propertyName);
+ enumerables[propertyName] = 1;
+ }
+ names.push("length");
+ names.push(extraName1);
+ names.push(extraName2);
+ names.push(extraName3);
+ names.sort();
+
+ var propertyStrings = [];
+ for (i = 0; i < names.length; ++i) {
+ var name = names[i];
+ if (name == names[i - 1])
+ continue;
+ if (!(name in object))
+ continue;
+
+ var propertyString = name + ":" + object[name];
+
+ var flags = [];
+ if (!object.hasOwnProperty(name))
+ flags.push("FromPrototype");
+ if (!enumerables[name])
+ flags.push("DontEnum");
+ if (name != "length") {
+ try {
+ object[name] = "ReadOnlyTestValue";
+ } catch (e) {
+ }
+ if (object[name] != "ReadOnlyTestValue")
+ flags.push("ReadOnly");
+ }
+ delete object[name];
+ if (object.hasOwnProperty(name))
+ flags.push("DontDelete");
+
+ flags.sort();
+
+ if (flags.length)
+ propertyString += "(" + flags.join(", ") + ")";
+
+ propertyStrings.push(propertyString);
+ }
+ return propertyStrings.join(", ");
+}
+
+var x;
+
+var oneItemPrototype = { length:1, 0:'a' };
+function OneItemConstructor()
+{
+}
+OneItemConstructor.prototype = oneItemPrototype;
+
+var twoItemPrototype = { length:2, 0:'b', 1:'a' };
+function TwoItemConstructor()
+{
+}
+TwoItemConstructor.prototype = twoItemPrototype;
+
+shouldBe("properties(['b', 'a'])", "'0:b, 1:a, length:2(DontDelete, DontEnum)'");
+shouldBe("properties({ length:2, 0:'b', 1:'a' })", "'0:b, 1:a, length:2'");
+
+shouldBe("properties(new OneItemConstructor)", "'0:a(FromPrototype), length:1(FromPrototype)'");
+shouldBe("properties(new TwoItemConstructor)", "'0:b(FromPrototype), 1:a(FromPrototype), length:2(FromPrototype)'");
+
+shouldBe("Array.prototype.toString.call({})", '"' + ({}).toString() + '"');
+shouldBe("Array.prototype.toString.call(new Date)", '"' + Object.prototype.toString.call(new Date) + '"');
+shouldBe("Array.prototype.toString.call({sort: function() { return 'sort' }})", '"' + Object.prototype.toString.call({}) + '"');
+shouldBe("Array.prototype.toString.call({join: function() { return 'join' }})", '"join"');
+shouldBe("Array.prototype.toString.call({__proto__: Array.prototype, 0: 'a', 1: 'b', 2: 'c', length: 3})", '"a,b,c"');
+shouldBe("({__proto__: Array.prototype, 0: 'a', 1: 'b', 2: 'c', length: 3}).toString()", '"a,b,c"');
+shouldBe("Array.prototype.toString.call({__proto__: Array.prototype, 0: 'a', 1: 'b', 2: 'c', length: 3, join: function() { return 'join' }})", '"join"');
+shouldBe("({__proto__: Array.prototype, 0: 'a', 1: 'b', 2: 'c', length: 3, join: function() { return 'join' }}).toString()", '"join"');
+Number.prototype.join = function() { return "Number.prototype.join:" + this; }
+shouldBe("Array.prototype.toString.call(42)", '"Number.prototype.join:42"');
+var arrayJoin = Array.prototype.join;
+Array.prototype.join = function() { return 'array-join' };
+shouldBe("[0, 1, 2].toString()", '"array-join"');
+Array.prototype.join = arrayJoin;
+
+shouldThrow("Array.prototype.toLocaleString.call({})");
+
+shouldBe("Array.prototype.concat.call(x = { length:2, 0:'b', 1:'a' })", "[x]");
+
+shouldBe("Array.prototype.join.call({})", "''");
+shouldBe("Array.prototype.join.call(['b', 'a'])", "'b,a'");
+shouldBe("Array.prototype.join.call({ length:2, 0:'b', 1:'a' })", "'b,a'");
+shouldBe("Array.prototype.join.call(new TwoItemConstructor)", "'b,a'");
+
+shouldBe("Array.prototype.pop.call({})", "undefined");
+shouldBe("Array.prototype.pop.call({ length:2, 0:'b', 1:'a' })", "'a'");
+shouldBe("Array.prototype.pop.call({ length:2, 0:'b', 1:'a' })", "'a'");
+shouldBe("Array.prototype.pop.call(new TwoItemConstructor)", "'a'");
+shouldBe("Array.prototype.pop.call(x = {}); properties(x)", "'length:0'");
+shouldBe("Array.prototype.pop.call(x = ['b', 'a']); properties(x)", "'0:b, length:1(DontDelete, DontEnum)'");
+shouldBe("Array.prototype.pop.call(x = { length:2, 0:'b', 1:'a' }); properties(x)", "'0:b, length:1'");
+shouldBe("Array.prototype.pop.call(x = new TwoItemConstructor); properties(x)", "'0:b(FromPrototype), 1:a(FromPrototype), length:1'");
+
+shouldBe("Array.prototype.push.call({})", "0");
+shouldBe("Array.prototype.push.call(['b', 'a'])", "2");
+shouldBe("Array.prototype.push.call({ length:2, 0:'b', 1:'a' })", "2");
+shouldBe("Array.prototype.push.call(new TwoItemConstructor)", "2");
+shouldBe("Array.prototype.push.call(x = {}); properties(x)", "'length:0'");
+shouldBe("Array.prototype.push.call(x = ['b', 'a']); properties(x)", "'0:b, 1:a, length:2(DontDelete, DontEnum)'");
+shouldBe("Array.prototype.push.call(x = { length:2, 0:'b', 1:'a' }); properties(x)", "'0:b, 1:a, length:2'");
+shouldBe("Array.prototype.push.call(x = new TwoItemConstructor); properties(x)", "'0:b(FromPrototype), 1:a(FromPrototype), length:2'");
+shouldBe("Array.prototype.push.call({}, 'c')", "1");
+shouldBe("Array.prototype.push.call(['b', 'a'], 'c')", "3");
+shouldBe("Array.prototype.push.call({ length:2, 0:'b', 1:'a' }, 'c')", "3");
+shouldBe("Array.prototype.push.call(new TwoItemConstructor, 'c')", "3");
+shouldBe("Array.prototype.push.call(x = {}, 'c'); properties(x)", "'0:c, length:1'");
+shouldBe("Array.prototype.push.call(x = ['b', 'a'], 'c'); properties(x)", "'0:b, 1:a, 2:c, length:3(DontDelete, DontEnum)'");
+shouldBe("Array.prototype.push.call(x = { length:2, 0:'b', 1:'a' }, 'c'); properties(x)", "'0:b, 1:a, 2:c, length:3'");
+shouldBe("Array.prototype.push.call(x = new TwoItemConstructor, 'c'); properties(x)", "'0:b(FromPrototype), 1:a(FromPrototype), 2:c, length:3'");
+
+shouldBe("properties(Array.prototype.reverse.call({}))", "''");
+shouldBe("properties(Array.prototype.reverse.call(['b', 'a']))", "'0:a, 1:b, length:2(DontDelete, DontEnum)'");
+shouldBe("properties(Array.prototype.reverse.call({ length:2, 0:'b', 1:'a' }))", "'0:a, 1:b, length:2'");
+shouldBe("properties(Array.prototype.reverse.call(new OneItemConstructor))", "'0:a(FromPrototype), length:1(FromPrototype)'");
+shouldBe("properties(Array.prototype.reverse.call(new TwoItemConstructor))", "'0:a, 1:b, length:2(FromPrototype)'");
+
+shouldBe("Array.prototype.shift.call({})", "undefined");
+shouldBe("Array.prototype.shift.call(['b', 'a'])", "'b'");
+shouldBe("Array.prototype.shift.call({ length:2, 0:'b', 1:'a' })", "'b'");
+shouldBe("Array.prototype.shift.call(new TwoItemConstructor)", "'b'");
+shouldBe("Array.prototype.shift.call(x = {}); properties(x)", "'length:0'");
+shouldBe("Array.prototype.shift.call(x = ['b', 'a']); properties(x)", "'0:a, length:1(DontDelete, DontEnum)'");
+shouldBe("Array.prototype.shift.call(x = { length:2, 0:'b', 1:'a' }); properties(x)", "'0:a, length:1'");
+shouldBe("Array.prototype.shift.call(x = new TwoItemConstructor); properties(x)", "'0:a, 1:a(FromPrototype), length:1'");
+
+shouldBe("Array.prototype.slice.call({}, 0, 1)", "[]");
+shouldBe("Array.prototype.slice.call(['b', 'a'], 0, 1)", "['b']");
+shouldBe("Array.prototype.slice.call({ length:2, 0:'b', 1:'a' }, 0, 1)", "['b']");
+shouldBe("Array.prototype.slice.call(new TwoItemConstructor, 0, 1)", "['b']");
+
+shouldBe("properties(Array.prototype.sort.call({}))", "''");
+shouldBe("properties(Array.prototype.sort.call(['b', 'a']))", "'0:a, 1:b, length:2(DontDelete, DontEnum)'");
+shouldBe("properties(Array.prototype.sort.call({ length:2, 0:'b', 1:'a' }))", "'0:a, 1:b, length:2'");
+shouldBe("properties(Array.prototype.sort.call(new OneItemConstructor))", "'0:a(FromPrototype), length:1(FromPrototype)'");
+shouldBe("properties(Array.prototype.sort.call(new TwoItemConstructor))", "'0:a, 1:b, length:2(FromPrototype)'");
+
+shouldBe("Array.prototype.splice.call({}, 0, 1)", "[]");
+shouldBe("Array.prototype.splice.call(['b', 'a'], 0, 1)", "['b']");
+shouldBe("Array.prototype.splice.call({ length:2, 0:'b', 1:'a' }, 0, 1)", "['b']");
+shouldBe("Array.prototype.splice.call(new TwoItemConstructor, 0, 1)", "['b']");
+shouldBe("Array.prototype.splice.call(x = {}, 0, 1); properties(x)", "'length:0'");
+shouldBe("Array.prototype.splice.call(x = ['b', 'a'], 0, 1); properties(x)", "'0:a, length:1(DontDelete, DontEnum)'");
+shouldBe("Array.prototype.splice.call(x = { length:2, 0:'b', 1:'a' }, 0, 1); properties(x)", "'0:a, length:1'");
+shouldBe("Array.prototype.splice.call(x = new TwoItemConstructor, 0, 1); properties(x)", "'0:a, 1:a(FromPrototype), length:1'");
+
+shouldBe("Array.prototype.unshift.call({})", "0");
+shouldBe("Array.prototype.unshift.call(['b', 'a'])", "2");
+shouldBe("Array.prototype.unshift.call({ length:2, 0:'b', 1:'a' })", "2");
+shouldBe("Array.prototype.unshift.call(new TwoItemConstructor)", "2");
+shouldBe("Array.prototype.unshift.call(x = {}); properties(x)", "'length:0'");
+shouldBe("Array.prototype.unshift.call(x = ['b', 'a']); properties(x)", "'0:b, 1:a, length:2(DontDelete, DontEnum)'");
+shouldBe("Array.prototype.unshift.call(x = { length:2, 0:'b', 1:'a' }); properties(x)", "'0:b, 1:a, length:2'");
+shouldBe("Array.prototype.unshift.call(x = new TwoItemConstructor); properties(x)", "'0:b(FromPrototype), 1:a(FromPrototype), length:2'");
+shouldBe("Array.prototype.unshift.call({}, 'c')", "1");
+shouldBe("Array.prototype.unshift.call(['b', 'a'], 'c')", "3");
+shouldBe("Array.prototype.unshift.call({ length:2, 0:'b', 1:'a' }, 'c')", "3");
+shouldBe("Array.prototype.unshift.call(new TwoItemConstructor, 'c')", "3");
+shouldBe("Array.prototype.unshift.call(x = {}, 'c'); properties(x)", "'0:c, length:1'");
+shouldBe("Array.prototype.unshift.call(x = ['b', 'a'], 'c'); properties(x)", "'0:c, 1:b, 2:a, length:3(DontDelete, DontEnum)'");
+shouldBe("Array.prototype.unshift.call(x = { length:2, 0:'b', 1:'a' }, 'c'); properties(x)", "'0:c, 1:b, 2:a, length:3'");
+shouldBe("Array.prototype.unshift.call(x = new TwoItemConstructor, 'c'); properties(x)", "'0:c, 1:b, 2:a, length:3'");
+
+// FIXME: Add tests for every, forEach, some, indexOf, lastIndexOf, filter, and map
--- /dev/null
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This is a test case for bug 64679.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS Array.prototype.toString.call(undefined) threw exception TypeError: Cannot convert undefined or null to object.
+PASS Array.prototype.toLocaleString.call(undefined) threw exception TypeError: Cannot convert undefined or null to object.
+PASS Array.prototype.concat.call(undefined, []) threw exception TypeError: Array.prototype.concat called on null or undefined.
+PASS Array.prototype.join.call(undefined, []) threw exception TypeError: Array.prototype.join called on null or undefined.
+PASS Array.prototype.pop.call(undefined) threw exception TypeError: Array.prototype.pop called on null or undefined.
+PASS Array.prototype.push.call(undefined, {}) threw exception TypeError: Array.prototype.push called on null or undefined.
+PASS Array.prototype.reverse.call(undefined) threw exception TypeError: Array.prototype.reverse called on null or undefined.
+PASS Array.prototype.shift.call(undefined) threw exception TypeError: Array.prototype.shift called on null or undefined.
+PASS Array.prototype.slice.call(undefined, 0, 1) threw exception TypeError: Array.prototype.slice called on null or undefined.
+PASS Array.prototype.sort.call(undefined) threw exception TypeError: Array.prototype.sort called on null or undefined.
+PASS Array.prototype.splice.call(undefined, 0, 1) threw exception TypeError: Array.prototype.splice called on null or undefined.
+PASS Array.prototype.unshift.call(undefined, {}) threw exception TypeError: Array.prototype.unshift called on null or undefined.
+PASS Array.prototype.every.call(undefined, toString) threw exception TypeError: Array.prototype.every called on null or undefined.
+PASS Array.prototype.forEach.call(undefined, toString) threw exception TypeError: Array.prototype.forEach called on null or undefined.
+PASS Array.prototype.some.call(undefined, toString) threw exception TypeError: Array.prototype.some called on null or undefined.
+PASS Array.prototype.indexOf.call(undefined, 0) threw exception TypeError: Array.prototype.indexOf called on null or undefined.
+PASS Array.prototype.indlastIndexOfexOf.call(undefined, 0) threw exception TypeError: Cannot call method 'call' of undefined.
+PASS Array.prototype.filter.call(undefined, toString) threw exception TypeError: Array.prototype.filter called on null or undefined.
+PASS Array.prototype.reduce.call(undefined, toString) threw exception TypeError: Array.prototype.reduce called on null or undefined.
+PASS Array.prototype.reduceRight.call(undefined, toString) threw exception TypeError: Array.prototype.reduceRight called on null or undefined.
+PASS Array.prototype.map.call(undefined, toString) threw exception TypeError: Array.prototype.map called on null or undefined.
+PASS [{toLocaleString:function(){throw 1}},{toLocaleString:function(){throw 2}}].toLocaleString() threw exception 1.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'This is a test case for <a https://bugs.webkit.org/show_bug.cgi?id=64679">bug 64679</a>.'
+);
+
+// These calls pass undefined as this value, and as such should throw in toObject.
+shouldThrow("Array.prototype.toString.call(undefined)");
+shouldThrow("Array.prototype.toLocaleString.call(undefined)");
+shouldThrow("Array.prototype.concat.call(undefined, [])");
+shouldThrow("Array.prototype.join.call(undefined, [])");
+shouldThrow("Array.prototype.pop.call(undefined)");
+shouldThrow("Array.prototype.push.call(undefined, {})");
+shouldThrow("Array.prototype.reverse.call(undefined)");
+shouldThrow("Array.prototype.shift.call(undefined)");
+shouldThrow("Array.prototype.slice.call(undefined, 0, 1)");
+shouldThrow("Array.prototype.sort.call(undefined)");
+shouldThrow("Array.prototype.splice.call(undefined, 0, 1)");
+shouldThrow("Array.prototype.unshift.call(undefined, {})");
+shouldThrow("Array.prototype.every.call(undefined, toString)");
+shouldThrow("Array.prototype.forEach.call(undefined, toString)");
+shouldThrow("Array.prototype.some.call(undefined, toString)");
+shouldThrow("Array.prototype.indexOf.call(undefined, 0)");
+shouldThrow("Array.prototype.indlastIndexOfexOf.call(undefined, 0)");
+shouldThrow("Array.prototype.filter.call(undefined, toString)");
+shouldThrow("Array.prototype.reduce.call(undefined, toString)");
+shouldThrow("Array.prototype.reduceRight.call(undefined, toString)");
+shouldThrow("Array.prototype.map.call(undefined, toString)");
+
+// Test exception ordering in Array.prototype.toLocaleString ( https://bugs.webkit.org/show_bug.cgi?id=80663 )
+shouldThrow("[{toLocaleString:function(){throw 1}},{toLocaleString:function(){throw 2}}].toLocaleString()", '1');
--- /dev/null
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that defining a setter on the Array prototype works.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL ouches should be 100. Was 0.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that defining a setter on the Array prototype works."
+);
+
+var ouches = 0;
+Array.prototype.__defineSetter__("3", function() { debug("Ouch!"); ouches++; });
+
+function foo() {
+ var result = [];
+ result.length = 5;
+ for (var i = 0; i < result.length; ++i)
+ result[i] = i;
+ return result;
+}
+
+for (var i = 0; i < 100; ++i)
+ shouldBe("\"" + foo().join(",") + "\"", "\"0,1,2,,4\"");
+
+shouldBe("ouches", "100");
--- /dev/null
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks for regressions against 6261:Do not use a separator argument when doing toString/toLocalString.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS a.toString('!') is '5,3'
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'This test checks for regressions against <a href="https://bugs.webkit.org/show_bug.cgi?id=6261">6261:Do not use a separator argument when doing toString/toLocalString.</a>'
+);
+
+var a = new Array;
+a[0] = 5;
+a[1] = 3;
+//Shouldn't use argument for toString
+shouldBe("a.toString('!')", "'5,3'");
--- /dev/null
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test behaviour of strict mode
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS testThis.call(null) is null
+PASS testThis.call(1) is 1
+PASS testThis.call(true) is true
+PASS testThis.call(false) is false
+PASS testThis.call(undefined) is undefined
+PASS testLineContinuation.call(undefined) === undefined is false
+PASS testEscapeSequence.call(undefined) === undefined is false
+PASS testThis.call('a string') is 'a string'
+PASS testThisDotAccess.call('a string') is 'a string'.length
+PASS testThisDotAccess.call(null) threw exception TypeError: Cannot read property 'length' of null.
+PASS testThisDotAccess.call(undefined) threw exception TypeError: Cannot read property 'length' of undefined.
+PASS testThisDotAccess.call(true) is undefined.
+PASS testThisDotAccess.call(false) is undefined.
+PASS testThisDotAccess.call(1) is undefined.
+PASS testThisBracketAccess.call('a string', 'length') is 'a string'.length
+PASS testThisBracketAccess.call(null, 'length') threw exception TypeError: Cannot read property 'length' of null.
+PASS testThisBracketAccess.call(undefined, 'length') threw exception TypeError: Cannot read property 'length' of undefined.
+PASS testThisBracketAccess.call(true, 'length') is undefined.
+PASS testThisBracketAccess.call(false, 'length') is undefined.
+PASS testThisBracketAccess.call(1, 'length') is undefined.
+PASS Function('"use strict"; return this;')() is undefined.
+PASS Function('"use strict"; with({});') threw exception SyntaxError: Strict mode code may not include a with statement.
+PASS testGlobalAccess() is undefined
+PASS testThis.call() is undefined
+PASS testThis.apply() is undefined
+PASS testThis.call(undefined) is undefined
+PASS testThis.apply(undefined) is undefined
+PASS (function eval(){'use strict';}) threw exception SyntaxError: Function name may not be eval or arguments in strict mode.
+PASS (function(){(function eval(){'use strict';})}) threw exception SyntaxError: Function name may not be eval or arguments in strict mode.
+PASS (function (eval){'use strict';}) threw exception SyntaxError: Parameter name eval or arguments is not allowed in strict mode.
+PASS (function(){(function (eval){'use strict';})}) threw exception SyntaxError: Parameter name eval or arguments is not allowed in strict mode.
+PASS (function arguments(){'use strict';}) threw exception SyntaxError: Function name may not be eval or arguments in strict mode.
+PASS (function(){(function arguments(){'use strict';})}) threw exception SyntaxError: Function name may not be eval or arguments in strict mode.
+PASS (function (arguments){'use strict';}) threw exception SyntaxError: Parameter name eval or arguments is not allowed in strict mode.
+PASS (function(){(function (arguments){'use strict';})}) threw exception SyntaxError: Parameter name eval or arguments is not allowed in strict mode.
+PASS (function (){'use strict'; var eval;}) threw exception SyntaxError: Variable name may not be eval or arguments in strict mode.
+PASS (function(){(function (){'use strict'; var eval;})}) threw exception SyntaxError: Variable name may not be eval or arguments in strict mode.
+PASS (function (){'use strict'; var arguments;}) threw exception SyntaxError: Variable name may not be eval or arguments in strict mode.
+PASS (function(){(function (){'use strict'; var arguments;})}) threw exception SyntaxError: Variable name may not be eval or arguments in strict mode.
+PASS (function (){'use strict'; try{}catch(eval){}}) threw exception SyntaxError: Catch variable may not be eval or arguments in strict mode.
+PASS (function(){(function (){'use strict'; try{}catch(eval){}})}) threw exception SyntaxError: Catch variable may not be eval or arguments in strict mode.
+PASS (function (){'use strict'; try{}catch(arguments){}}) threw exception SyntaxError: Catch variable may not be eval or arguments in strict mode.
+PASS (function(){(function (){'use strict'; try{}catch(arguments){}})}) threw exception SyntaxError: Catch variable may not be eval or arguments in strict mode.
+PASS (function (a, a){'use strict';}) threw exception SyntaxError: Strict mode function may not have duplicate parameter names.
+PASS (function(){(function (a, a){'use strict';})}) threw exception SyntaxError: Strict mode function may not have duplicate parameter names.
+PASS (function (a){'use strict'; delete a;})() threw exception SyntaxError: Delete of an unqualified identifier in strict mode..
+PASS (function(){(function (a){'use strict'; delete a;})()}) threw exception SyntaxError: Delete of an unqualified identifier in strict mode..
+PASS (function (){'use strict'; var a; delete a;})() threw exception SyntaxError: Delete of an unqualified identifier in strict mode..
+PASS (function(){(function (){'use strict'; var a; delete a;})()}) threw exception SyntaxError: Delete of an unqualified identifier in strict mode..
+PASS (function (){var a; function f() {'use strict'; delete a;} })() threw exception SyntaxError: Delete of an unqualified identifier in strict mode..
+PASS (function(){(function (){var a; function f() {'use strict'; delete a;} })()}) threw exception SyntaxError: Delete of an unqualified identifier in strict mode..
+PASS (function (){'use strict'; with(1){};}) threw exception SyntaxError: Strict mode code may not include a with statement.
+PASS (function(){(function (){'use strict'; with(1){};})}) threw exception SyntaxError: Strict mode code may not include a with statement.
+PASS (function (){'use strict'; arguments.callee; })() threw exception TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them.
+PASS (function (){'use strict'; arguments.caller; })() threw exception TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them.
+PASS (function f(){'use strict'; f.arguments; })() threw exception TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them.
+PASS (function f(){'use strict'; f.caller; })() threw exception TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them.
+PASS (function f(){'use strict'; f.arguments=5; })() threw exception TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them.
+PASS (function f(){'use strict'; f.caller=5; })() threw exception TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them.
+PASS (function (arg){'use strict'; arguments.callee; })() threw exception TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them.
+PASS (function (arg){'use strict'; arguments.caller; })() threw exception TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them.
+PASS (function f(arg){'use strict'; f.arguments; })() threw exception TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them.
+PASS (function f(arg){'use strict'; f.caller; })() threw exception TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them.
+PASS (function f(arg){'use strict'; f.arguments=5; })() threw exception TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them.
+PASS (function f(arg){'use strict'; f.caller=5; })() threw exception TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them.
+PASS "caller" in function(){"use strict"} is true
+PASS (function(){"use strict";}).hasOwnProperty("caller") is true
+PASS "arguments" in function(){"use strict"} is true
+PASS (function(){"use strict";}).hasOwnProperty("arguments") is true
+PASS 'use strict'; (function (){with(1){};}) threw exception SyntaxError: Strict mode code may not include a with statement.
+PASS (function(){'use strict'; (function (){with(1){};})}) threw exception SyntaxError: Strict mode code may not include a with statement.
+PASS 'use strict'; (function (){var a; delete a;}) threw exception SyntaxError: Delete of an unqualified identifier in strict mode..
+PASS (function(){'use strict'; (function (){var a; delete a;})}) threw exception SyntaxError: Delete of an unqualified identifier in strict mode..
+PASS 'use strict'; var a; (function (){ delete a;}) threw exception SyntaxError: Delete of an unqualified identifier in strict mode..
+PASS (function(){'use strict'; var a; (function (){ delete a;})}) threw exception SyntaxError: Delete of an unqualified identifier in strict mode..
+PASS var a; (function (){ 'use strict'; delete a;}) threw exception SyntaxError: Delete of an unqualified identifier in strict mode..
+PASS (function(){var a; (function (){ 'use strict'; delete a;})}) threw exception SyntaxError: Delete of an unqualified identifier in strict mode..
+PASS 'misc directive'; 'use strict'; with({}){} threw exception SyntaxError: Strict mode code may not include a with statement.
+PASS (function(){'misc directive'; 'use strict'; with({}){}}) threw exception SyntaxError: Strict mode code may not include a with statement.
+PASS 'use strict'; return threw exception SyntaxError: Illegal return statement.
+PASS 'use strict'; break threw exception SyntaxError: Illegal break statement.
+PASS (function(){'use strict'; break}) threw exception SyntaxError: Illegal break statement.
+PASS 'use strict'; continue threw exception SyntaxError: Illegal continue statement.
+PASS (function(){'use strict'; continue}) threw exception SyntaxError: Illegal continue statement.
+PASS 'use strict'; for(;;)return threw exception SyntaxError: Illegal return statement.
+PASS 'use strict'; for(;;)break missingLabel threw exception SyntaxError: Undefined label 'missingLabel'.
+PASS (function(){'use strict'; for(;;)break missingLabel}) threw exception SyntaxError: Undefined label 'missingLabel'.
+PASS 'use strict'; for(;;)continue missingLabel threw exception SyntaxError: Undefined label 'missingLabel'.
+PASS (function(){'use strict'; for(;;)continue missingLabel}) threw exception SyntaxError: Undefined label 'missingLabel'.
+PASS 'use strict'; 007; threw exception SyntaxError: Octal literals are not allowed in strict mode..
+PASS (function(){'use strict'; 007;}) threw exception SyntaxError: Octal literals are not allowed in strict mode..
+PASS 'use strict'; '\007'; threw exception SyntaxError: Octal literals are not allowed in strict mode..
+PASS (function(){'use strict'; '\007';}) threw exception SyntaxError: Octal literals are not allowed in strict mode..
+PASS '\007'; 'use strict'; threw exception SyntaxError: Octal literals are not allowed in strict mode..
+PASS (function(){'\007'; 'use strict';}) threw exception SyntaxError: Octal literals are not allowed in strict mode..
+PASS 'use strict'; delete aDeletableProperty; threw exception SyntaxError: Delete of an unqualified identifier in strict mode..
+PASS (function(){'use strict'; delete aDeletableProperty;}) threw exception SyntaxError: Delete of an unqualified identifier in strict mode..
+PASS 'use strict'; (function (){ delete someDeclaredGlobal;}) threw exception SyntaxError: Delete of an unqualified identifier in strict mode..
+PASS (function(){'use strict'; (function (){ delete someDeclaredGlobal;})}) threw exception SyntaxError: Delete of an unqualified identifier in strict mode..
+PASS (function (){ 'use strict'; delete someDeclaredGlobal;}) threw exception SyntaxError: Delete of an unqualified identifier in strict mode..
+PASS (function(){(function (){ 'use strict'; delete someDeclaredGlobal;})}) threw exception SyntaxError: Delete of an unqualified identifier in strict mode..
+PASS 'use strict'; if (0) { someGlobal = 'Shouldn\'t be able to assign this.'; }; true; is true
+PASS 'use strict'; someGlobal = 'Shouldn\'t be able to assign this.'; threw exception ReferenceError: someGlobal is not defined.
+FAIL 'use strict'; (function f(){ f = 'shouldn\'t be able to assign to function expression name'; })() should throw an exception. Was undefined.
+PASS 'use strict'; eval('var introducedVariable = "FAIL: variable introduced into containing scope";'); introducedVariable threw exception ReferenceError: introducedVariable is not defined.
+PASS 'use strict'; objectWithReadonlyProperty.prop = 'fail' threw exception TypeError: Cannot assign to read only property 'prop' of #<Object>.
+PASS 'use strict'; delete objectWithReadonlyProperty.prop threw exception TypeError: Cannot delete property 'prop' of #<Object>.
+PASS 'use strict'; delete objectWithReadonlyProperty[readonlyPropName] threw exception TypeError: Cannot delete property 'prop' of #<Object>.
+PASS 'use strict'; ++eval threw exception SyntaxError: Prefix increment/decrement may not have eval or arguments operand in strict mode.
+PASS (function(){'use strict'; ++eval}) threw exception SyntaxError: Prefix increment/decrement may not have eval or arguments operand in strict mode.
+PASS 'use strict'; eval++ threw exception SyntaxError: Prefix increment/decrement may not have eval or arguments operand in strict mode.
+PASS (function(){'use strict'; eval++}) threw exception SyntaxError: Prefix increment/decrement may not have eval or arguments operand in strict mode.
+PASS 'use strict'; --eval threw exception SyntaxError: Prefix increment/decrement may not have eval or arguments operand in strict mode.
+PASS (function(){'use strict'; --eval}) threw exception SyntaxError: Prefix increment/decrement may not have eval or arguments operand in strict mode.
+PASS 'use strict'; eval-- threw exception SyntaxError: Prefix increment/decrement may not have eval or arguments operand in strict mode.
+PASS (function(){'use strict'; eval--}) threw exception SyntaxError: Prefix increment/decrement may not have eval or arguments operand in strict mode.
+PASS 'use strict'; function f() { ++arguments } threw exception SyntaxError: Prefix increment/decrement may not have eval or arguments operand in strict mode.
+PASS (function(){'use strict'; function f() { ++arguments }}) threw exception SyntaxError: Prefix increment/decrement may not have eval or arguments operand in strict mode.
+PASS 'use strict'; function f() { arguments++ } threw exception SyntaxError: Prefix increment/decrement may not have eval or arguments operand in strict mode.
+PASS (function(){'use strict'; function f() { arguments++ }}) threw exception SyntaxError: Prefix increment/decrement may not have eval or arguments operand in strict mode.
+PASS 'use strict'; function f() { --arguments } threw exception SyntaxError: Prefix increment/decrement may not have eval or arguments operand in strict mode.
+PASS (function(){'use strict'; function f() { --arguments }}) threw exception SyntaxError: Prefix increment/decrement may not have eval or arguments operand in strict mode.
+PASS 'use strict'; function f() { arguments-- } threw exception SyntaxError: Prefix increment/decrement may not have eval or arguments operand in strict mode.
+PASS (function(){'use strict'; function f() { arguments-- }}) threw exception SyntaxError: Prefix increment/decrement may not have eval or arguments operand in strict mode.
+PASS global.eval('"use strict"; if (0) ++arguments; true;') threw exception SyntaxError: Prefix increment/decrement may not have eval or arguments operand in strict mode.
+PASS 'use strict'; ++(1, eval) threw exception ReferenceError: Invalid left-hand side expression in prefix operation.
+FAIL (function(){'use strict'; ++(1, eval)}) should throw an exception. Was function (){'use strict'; ++(1, eval)}.
+PASS 'use strict'; (1, eval)++ threw exception ReferenceError: Invalid left-hand side expression in postfix operation.
+FAIL (function(){'use strict'; (1, eval)++}) should throw an exception. Was function (){'use strict'; (1, eval)++}.
+PASS 'use strict'; --(1, eval) threw exception ReferenceError: Invalid left-hand side expression in prefix operation.
+FAIL (function(){'use strict'; --(1, eval)}) should throw an exception. Was function (){'use strict'; --(1, eval)}.
+PASS 'use strict'; (1, eval)-- threw exception ReferenceError: Invalid left-hand side expression in postfix operation.
+FAIL (function(){'use strict'; (1, eval)--}) should throw an exception. Was function (){'use strict'; (1, eval)--}.
+FAIL 'use strict'; function f() { ++(1, arguments) } should throw an exception. Was use strict.
+FAIL (function(){'use strict'; function f() { ++(1, arguments) }}) should throw an exception. Was function (){'use strict'; function f() { ++(1, arguments) }}.
+FAIL 'use strict'; function f() { (1, arguments)++ } should throw an exception. Was use strict.
+FAIL (function(){'use strict'; function f() { (1, arguments)++ }}) should throw an exception. Was function (){'use strict'; function f() { (1, arguments)++ }}.
+FAIL 'use strict'; function f() { --(1, arguments) } should throw an exception. Was use strict.
+FAIL (function(){'use strict'; function f() { --(1, arguments) }}) should throw an exception. Was function (){'use strict'; function f() { --(1, arguments) }}.
+FAIL 'use strict'; function f() { (1, arguments)-- } should throw an exception. Was use strict.
+FAIL (function(){'use strict'; function f() { (1, arguments)-- }}) should throw an exception. Was function (){'use strict'; function f() { (1, arguments)-- }}.
+FAIL 'use strict'; if (0) delete +a.b should throw an exception. Was use strict.
+FAIL (function(){'use strict'; if (0) delete +a.b}) should throw an exception. Was function (){'use strict'; if (0) delete +a.b}.
+FAIL 'use strict'; if (0) delete ++a.b should throw an exception. Was use strict.
+FAIL (function(){'use strict'; if (0) delete ++a.b}) should throw an exception. Was function (){'use strict'; if (0) delete ++a.b}.
+FAIL 'use strict'; if (0) delete void a.b should throw an exception. Was use strict.
+FAIL (function(){'use strict'; if (0) delete void a.b}) should throw an exception. Was function (){'use strict'; if (0) delete void a.b}.
+PASS (function (a){'use strict'; a = false; return a !== arguments[0]; })(true) is true
+PASS (function (a){'use strict'; arguments[0] = false; return a !== arguments[0]; })(true) is true
+PASS (function (a){'use strict'; a=false; return arguments; })(true)[0] is true
+PASS (function (a){'use strict'; arguments[0]=false; return a; })(true) is true
+PASS (function (a){'use strict'; arguments[0]=true; return arguments; })(false)[0] is true
+PASS (function (){'use strict'; arguments[0]=true; return arguments; })(false)[0] is true
+PASS (function (a){'use strict'; arguments[0]=true; a=false; return arguments; })()[0] is true
+PASS (function (a){'use strict'; arguments[0]=false; a=true; return a; })() is true
+PASS (function (a){'use strict'; arguments[0]=true; return arguments; })()[0] is true
+PASS (function (){'use strict'; arguments[0]=true; return arguments; })()[0] is true
+PASS (function (a){'use strict'; var local; (function (){local;})(); a = false; return a !== arguments[0]; })(true) is true
+PASS (function (a){'use strict'; var local; (function (){local;})(); arguments[0] = false; return a !== arguments[0]; })(true) is true
+PASS (function (a){'use strict'; var local; (function (){local;})(); a=false; return arguments; })(true)[0] is true
+PASS (function (a){'use strict'; var local; (function (){local;})(); arguments[0]=false; return a; })(true) is true
+PASS (function (a){'use strict'; var local; (function (){local;})(); arguments[0]=true; return arguments; })(false)[0] is true
+PASS (function (){'use strict'; var local; (function (){local;})(); arguments[0]=true; return arguments; })(false)[0] is true
+PASS (function (a){'use strict'; var local; (function (){local;})(); arguments[0]=true; a=false; return arguments; })()[0] is true
+PASS (function (a){'use strict'; var local; (function (){local;})(); arguments[0]=true; return arguments; })()[0] is true
+PASS (function (a){'use strict'; var local; (function (){local;})(); arguments[0]=false; a=true; return a; })() is true
+PASS (function (){'use strict'; var local; (function (){local;})(); arguments[0]=true; return arguments; })()[0] is true
+PASS 'use strict'; (function (){var a = true; eval('var a = false'); return a; })() is true
+PASS (function (){var a = true; eval('"use strict"; var a = false'); return a; })() is true
+PASS (function f(arg){'use strict'; return Object.getOwnPropertyDescriptor(f, 'arguments').value; })() is undefined.
+PASS (function f(arg){'use strict'; return Object.getOwnPropertyDescriptor(f, 'caller').value; })() is undefined.
+PASS (function f(arg){'use strict'; return Object.getOwnPropertyDescriptor(arguments, 'callee').value; })() is undefined.
+PASS (function f(arg){'use strict'; return Object.getOwnPropertyDescriptor(arguments, 'caller').value; })() is undefined.
+PASS (function f(arg){'use strict'; var descriptor = Object.getOwnPropertyDescriptor(arguments, 'caller'); return descriptor.get === descriptor.set; })() is true
+PASS (function f(arg){'use strict'; var descriptor = Object.getOwnPropertyDescriptor(arguments, 'callee'); return descriptor.get === descriptor.set; })() is true
+PASS (function f(arg){'use strict'; var descriptor = Object.getOwnPropertyDescriptor(f, 'caller'); return descriptor.get === descriptor.set; })() is true
+PASS (function f(arg){'use strict'; var descriptor = Object.getOwnPropertyDescriptor(f, 'arguments'); return descriptor.get === descriptor.set; })() is true
+PASS 'use strict'; (function f() { for(var i in this); })(); true; is true
+PASS 'use strict'̻ threw exception SyntaxError: Unexpected token ILLEGAL.
+PASS (function(){'use strict'̻}) threw exception SyntaxError: Unexpected token ILLEGAL.
+PASS 'use strict'5.f threw exception SyntaxError: Unexpected token ILLEGAL.
+PASS (function(){'use strict'5.f}) threw exception SyntaxError: Unexpected token ILLEGAL.
+PASS 'use strict';̻ threw exception SyntaxError: Unexpected token ILLEGAL.
+PASS (function(){'use strict';̻}) threw exception SyntaxError: Unexpected token ILLEGAL.
+PASS 'use strict';5.f threw exception SyntaxError: Unexpected token ILLEGAL.
+PASS (function(){'use strict';5.f}) threw exception SyntaxError: Unexpected token ILLEGAL.
+PASS 'use strict';1-(eval=1); threw exception SyntaxError: Assignment to eval or arguments is not allowed in strict mode.
+PASS (function(){'use strict';1-(eval=1);}) threw exception SyntaxError: Assignment to eval or arguments is not allowed in strict mode.
+PASS 'use strict';arguments=1; threw exception SyntaxError: Assignment to eval or arguments is not allowed in strict mode.
+PASS (function(){'use strict';arguments=1;}) threw exception SyntaxError: Assignment to eval or arguments is not allowed in strict mode.
+PASS 'use strict';1-(arguments=1); threw exception SyntaxError: Assignment to eval or arguments is not allowed in strict mode.
+PASS (function(){'use strict';1-(arguments=1);}) threw exception SyntaxError: Assignment to eval or arguments is not allowed in strict mode.
+PASS 'use strict';var a=(eval=1); threw exception SyntaxError: Assignment to eval or arguments is not allowed in strict mode.
+PASS (function(){'use strict';var a=(eval=1);}) threw exception SyntaxError: Assignment to eval or arguments is not allowed in strict mode.
+PASS 'use strict';var a=(arguments=1); threw exception SyntaxError: Assignment to eval or arguments is not allowed in strict mode.
+PASS (function(){'use strict';var a=(arguments=1);}) threw exception SyntaxError: Assignment to eval or arguments is not allowed in strict mode.
+PASS 'use strict'; try { throw 1; } catch (e) { aGlobal = true; } is true
+PASS 'use strict'; (function () { try { throw 1; } catch (e) { aGlobal = true; }})(); aGlobal; is true
+PASS (function () {'use strict'; try { throw 1; } catch (e) { aGlobal = true; }})(); aGlobal; is true
+PASS try { throw 1; } catch (e) { aGlobal = true; } is true
+PASS (function () { try { throw 1; } catch (e) { aGlobal = true; }})(); aGlobal; is true
+PASS (function () {try { throw 1; } catch (e) { aGlobal = true; }})(); aGlobal; is true
+FAIL String(Object.getOwnPropertyDescriptor(function() { "use strict"; }, "caller").get) should be function () {
+ [native code]
+}. Was function ThrowTypeError() { [native code] }.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("Test behaviour of strict mode");
+
+var globalThisTest;
+function testThis() {
+ "use strict";
+ return this;
+}
+function testThisDotAccess() {
+ "use strict";
+ return this.length;
+}
+function testThisBracketAccess(prop) {
+ "use strict";
+ return this[prop];
+}
+function testGlobalAccess() {
+ return testThis();
+}
+function shouldBeSyntaxError(str) {
+ shouldThrow(str);
+ shouldThrow("(function(){" + str + "})");
+}
+function testLineContinuation() {
+ "use stric\
+t";
+ return this;
+}
+function testEscapeSequence() {
+ "use\u0020strict";
+ return this;
+}
+
+shouldBe("testThis.call(null)", "null");
+shouldBe("testThis.call(1)", "1");
+shouldBe("testThis.call(true)", "true");
+shouldBe("testThis.call(false)", "false");
+shouldBe("testThis.call(undefined)", "undefined");
+shouldBeFalse("testLineContinuation.call(undefined) === undefined");
+shouldBeFalse("testEscapeSequence.call(undefined) === undefined");
+shouldBe("testThis.call('a string')", "'a string'");
+shouldBe("testThisDotAccess.call('a string')", "'a string'.length");
+shouldThrow("testThisDotAccess.call(null)");
+shouldThrow("testThisDotAccess.call(undefined)");
+shouldBeUndefined("testThisDotAccess.call(true)");
+shouldBeUndefined("testThisDotAccess.call(false)");
+shouldBeUndefined("testThisDotAccess.call(1)");
+shouldBe("testThisBracketAccess.call('a string', 'length')", "'a string'.length");
+shouldThrow("testThisBracketAccess.call(null, 'length')");
+shouldThrow("testThisBracketAccess.call(undefined, 'length')");
+shouldBeUndefined("testThisBracketAccess.call(true, 'length')");
+shouldBeUndefined("testThisBracketAccess.call(false, 'length')");
+shouldBeUndefined("testThisBracketAccess.call(1, 'length')");
+shouldBeUndefined("Function('\"use strict\"; return this;')()");
+shouldThrow("Function('\"use strict\"; with({});')");
+
+
+shouldBe("testGlobalAccess()", "undefined");
+shouldBe("testThis.call()", "undefined");
+shouldBe("testThis.apply()", "undefined");
+shouldBe("testThis.call(undefined)", "undefined");
+shouldBe("testThis.apply(undefined)", "undefined");
+
+shouldBeSyntaxError("(function eval(){'use strict';})");
+shouldBeSyntaxError("(function (eval){'use strict';})");
+shouldBeSyntaxError("(function arguments(){'use strict';})");
+shouldBeSyntaxError("(function (arguments){'use strict';})");
+shouldBeSyntaxError("(function (){'use strict'; var eval;})");
+shouldBeSyntaxError("(function (){'use strict'; var arguments;})");
+shouldBeSyntaxError("(function (){'use strict'; try{}catch(eval){}})");
+shouldBeSyntaxError("(function (){'use strict'; try{}catch(arguments){}})");
+shouldBeSyntaxError("(function (a, a){'use strict';})");
+shouldBeSyntaxError("(function (a){'use strict'; delete a;})()");
+shouldBeSyntaxError("(function (){'use strict'; var a; delete a;})()");
+shouldBeSyntaxError("(function (){var a; function f() {'use strict'; delete a;} })()");
+shouldBeSyntaxError("(function (){'use strict'; with(1){};})");
+shouldThrow("(function (){'use strict'; arguments.callee; })()");
+shouldThrow("(function (){'use strict'; arguments.caller; })()");
+shouldThrow("(function f(){'use strict'; f.arguments; })()");
+shouldThrow("(function f(){'use strict'; f.caller; })()");
+shouldThrow("(function f(){'use strict'; f.arguments=5; })()");
+shouldThrow("(function f(){'use strict'; f.caller=5; })()");
+shouldThrow("(function (arg){'use strict'; arguments.callee; })()");
+shouldThrow("(function (arg){'use strict'; arguments.caller; })()");
+shouldThrow("(function f(arg){'use strict'; f.arguments; })()");
+shouldThrow("(function f(arg){'use strict'; f.caller; })()");
+shouldThrow("(function f(arg){'use strict'; f.arguments=5; })()");
+shouldThrow("(function f(arg){'use strict'; f.caller=5; })()");
+
+// arguments/caller poisoning should be visible but not throw with 'in' & 'hasOwnProperty'.
+shouldBeTrue('"caller" in function(){"use strict"}');
+shouldBeTrue('(function(){"use strict";}).hasOwnProperty("caller")');
+shouldBeTrue('"arguments" in function(){"use strict"}');
+shouldBeTrue('(function(){"use strict";}).hasOwnProperty("arguments")');
+
+shouldBeSyntaxError("'use strict'; (function (){with(1){};})");
+shouldBeSyntaxError("'use strict'; (function (){var a; delete a;})");
+shouldBeSyntaxError("'use strict'; var a; (function (){ delete a;})");
+shouldBeSyntaxError("var a; (function (){ 'use strict'; delete a;})");
+shouldBeSyntaxError("'misc directive'; 'use strict'; with({}){}");
+shouldThrow("'use strict'; return");
+shouldBeSyntaxError("'use strict'; break");
+shouldBeSyntaxError("'use strict'; continue");
+shouldThrow("'use strict'; for(;;)return");
+shouldBeSyntaxError("'use strict'; for(;;)break missingLabel");
+shouldBeSyntaxError("'use strict'; for(;;)continue missingLabel");
+shouldBeSyntaxError("'use strict'; 007;");
+shouldBeSyntaxError("'use strict'; '\\007';");
+shouldBeSyntaxError("'\\007'; 'use strict';");
+
+var someDeclaredGlobal;
+aDeletableProperty = 'test';
+
+shouldBeSyntaxError("'use strict'; delete aDeletableProperty;");
+shouldBeSyntaxError("'use strict'; (function (){ delete someDeclaredGlobal;})");
+shouldBeSyntaxError("(function (){ 'use strict'; delete someDeclaredGlobal;})");
+shouldBeTrue("'use strict'; if (0) { someGlobal = 'Shouldn\\'t be able to assign this.'; }; true;");
+shouldThrow("'use strict'; someGlobal = 'Shouldn\\'t be able to assign this.'; ");
+shouldThrow("'use strict'; (function f(){ f = 'shouldn\\'t be able to assign to function expression name'; })()");
+shouldThrow("'use strict'; eval('var introducedVariable = \"FAIL: variable introduced into containing scope\";'); introducedVariable");
+var objectWithReadonlyProperty = {};
+Object.defineProperty(objectWithReadonlyProperty, "prop", {value: "value", writable:false});
+shouldThrow("'use strict'; objectWithReadonlyProperty.prop = 'fail'");
+shouldThrow("'use strict'; delete objectWithReadonlyProperty.prop");
+readonlyPropName = "prop";
+shouldThrow("'use strict'; delete objectWithReadonlyProperty[readonlyPropName]");
+shouldBeSyntaxError("'use strict'; ++eval");
+shouldBeSyntaxError("'use strict'; eval++");
+shouldBeSyntaxError("'use strict'; --eval");
+shouldBeSyntaxError("'use strict'; eval--");
+shouldBeSyntaxError("'use strict'; function f() { ++arguments }");
+shouldBeSyntaxError("'use strict'; function f() { arguments++ }");
+shouldBeSyntaxError("'use strict'; function f() { --arguments }");
+shouldBeSyntaxError("'use strict'; function f() { arguments-- }");
+var global = this;
+shouldThrow("global.eval('\"use strict\"; if (0) ++arguments; true;')");
+shouldBeSyntaxError("'use strict'; ++(1, eval)");
+shouldBeSyntaxError("'use strict'; (1, eval)++");
+shouldBeSyntaxError("'use strict'; --(1, eval)");
+shouldBeSyntaxError("'use strict'; (1, eval)--");
+shouldBeSyntaxError("'use strict'; function f() { ++(1, arguments) }");
+shouldBeSyntaxError("'use strict'; function f() { (1, arguments)++ }");
+shouldBeSyntaxError("'use strict'; function f() { --(1, arguments) }");
+shouldBeSyntaxError("'use strict'; function f() { (1, arguments)-- }");
+shouldBeSyntaxError("'use strict'; if (0) delete +a.b");
+shouldBeSyntaxError("'use strict'; if (0) delete ++a.b");
+shouldBeSyntaxError("'use strict'; if (0) delete void a.b");
+
+shouldBeTrue("(function (a){'use strict'; a = false; return a !== arguments[0]; })(true)");
+shouldBeTrue("(function (a){'use strict'; arguments[0] = false; return a !== arguments[0]; })(true)");
+shouldBeTrue("(function (a){'use strict'; a=false; return arguments; })(true)[0]");
+shouldBeTrue("(function (a){'use strict'; arguments[0]=false; return a; })(true)");
+shouldBeTrue("(function (a){'use strict'; arguments[0]=true; return arguments; })(false)[0]");
+shouldBeTrue("(function (){'use strict'; arguments[0]=true; return arguments; })(false)[0]");
+shouldBeTrue("(function (a){'use strict'; arguments[0]=true; a=false; return arguments; })()[0]");
+shouldBeTrue("(function (a){'use strict'; arguments[0]=false; a=true; return a; })()");
+shouldBeTrue("(function (a){'use strict'; arguments[0]=true; return arguments; })()[0]");
+shouldBeTrue("(function (){'use strict'; arguments[0]=true; return arguments; })()[0]");
+
+// Same tests again, this time forcing an activation to be created as well
+shouldBeTrue("(function (a){'use strict'; var local; (function (){local;})(); a = false; return a !== arguments[0]; })(true)");
+shouldBeTrue("(function (a){'use strict'; var local; (function (){local;})(); arguments[0] = false; return a !== arguments[0]; })(true)");
+shouldBeTrue("(function (a){'use strict'; var local; (function (){local;})(); a=false; return arguments; })(true)[0]");
+shouldBeTrue("(function (a){'use strict'; var local; (function (){local;})(); arguments[0]=false; return a; })(true)");
+shouldBeTrue("(function (a){'use strict'; var local; (function (){local;})(); arguments[0]=true; return arguments; })(false)[0]");
+shouldBeTrue("(function (){'use strict'; var local; (function (){local;})(); arguments[0]=true; return arguments; })(false)[0]");
+shouldBeTrue("(function (a){'use strict'; var local; (function (){local;})(); arguments[0]=true; a=false; return arguments; })()[0]");
+shouldBeTrue("(function (a){'use strict'; var local; (function (){local;})(); arguments[0]=true; return arguments; })()[0]");
+shouldBeTrue("(function (a){'use strict'; var local; (function (){local;})(); arguments[0]=false; a=true; return a; })()");
+shouldBeTrue("(function (){'use strict'; var local; (function (){local;})(); arguments[0]=true; return arguments; })()[0]");
+
+shouldBeTrue("'use strict'; (function (){var a = true; eval('var a = false'); return a; })()");
+shouldBeTrue("(function (){var a = true; eval('\"use strict\"; var a = false'); return a; })()");
+
+shouldBeUndefined("(function f(arg){'use strict'; return Object.getOwnPropertyDescriptor(f, 'arguments').value; })()");
+shouldBeUndefined("(function f(arg){'use strict'; return Object.getOwnPropertyDescriptor(f, 'caller').value; })()");
+shouldBeUndefined("(function f(arg){'use strict'; return Object.getOwnPropertyDescriptor(arguments, 'callee').value; })()");
+shouldBeUndefined("(function f(arg){'use strict'; return Object.getOwnPropertyDescriptor(arguments, 'caller').value; })()");
+shouldBeTrue("(function f(arg){'use strict'; var descriptor = Object.getOwnPropertyDescriptor(arguments, 'caller'); return descriptor.get === descriptor.set; })()");
+shouldBeTrue("(function f(arg){'use strict'; var descriptor = Object.getOwnPropertyDescriptor(arguments, 'callee'); return descriptor.get === descriptor.set; })()");
+shouldBeTrue("(function f(arg){'use strict'; var descriptor = Object.getOwnPropertyDescriptor(f, 'caller'); return descriptor.get === descriptor.set; })()");
+shouldBeTrue("(function f(arg){'use strict'; var descriptor = Object.getOwnPropertyDescriptor(f, 'arguments'); return descriptor.get === descriptor.set; })()");
+shouldBeTrue("'use strict'; (function f() { for(var i in this); })(); true;")
+
+shouldBeSyntaxError("'use strict'\u033b");
+shouldBeSyntaxError("'use strict'5.f");
+shouldBeSyntaxError("'use strict';\u033b");
+shouldBeSyntaxError("'use strict';5.f");
+shouldBeSyntaxError("'use strict';1-(eval=1);");
+shouldBeSyntaxError("'use strict';arguments=1;");
+shouldBeSyntaxError("'use strict';1-(arguments=1);");
+shouldBeSyntaxError("'use strict';var a=(eval=1);");
+shouldBeSyntaxError("'use strict';var a=(arguments=1);");
+
+var aGlobal = false;
+shouldBeTrue("'use strict'; try { throw 1; } catch (e) { aGlobal = true; }");
+aGlobal = false;
+shouldBeTrue("'use strict'; (function () { try { throw 1; } catch (e) { aGlobal = true; }})(); aGlobal;");
+aGlobal = false;
+shouldBeTrue("(function () {'use strict'; try { throw 1; } catch (e) { aGlobal = true; }})(); aGlobal;");
+aGlobal = false;
+shouldBeTrue("try { throw 1; } catch (e) { aGlobal = true; }");
+aGlobal = false;
+shouldBeTrue("(function () { try { throw 1; } catch (e) { aGlobal = true; }})(); aGlobal;");
+aGlobal = false;
+shouldBeTrue("(function () {try { throw 1; } catch (e) { aGlobal = true; }})(); aGlobal;");
+
+// Make sure this doesn't crash!
+shouldBe('String(Object.getOwnPropertyDescriptor(function() { "use strict"; }, "caller").get)', "'function () {\\n [native code]\\n}'");
--- /dev/null
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This tests for caller property in functions. Only functions that are called from inside of other functions and have a parent should have this property set. Tests return true when caller is found and false when the caller is null.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS childHasCallerWhenExecutingGlobalCode is false
+PASS childHasCallerWhenCalledWithoutParent is false
+PASS childHasCallerWhenCalledFromWithinParent is true
+PASS nonStrictCaller(nonStrictCallee) is nonStrictCaller
+FAIL nonStrictCaller(strictCallee) should throw TypeError: Type error. Threw exception TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them.
+FAIL strictCaller(nonStrictCallee) should throw TypeError: Function.caller used to retrieve strict caller. Was null.
+FAIL strictCaller(strictCallee) should throw TypeError: Type error. Threw exception TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them.
+PASS nonStrictCaller(boundNonStrictCallee) is nonStrictCaller
+FAIL nonStrictCaller(boundStrictCallee) should throw TypeError: Type error. Threw exception TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them.
+FAIL strictCaller(boundNonStrictCallee) should throw TypeError: Function.caller used to retrieve strict caller. Was null.
+FAIL strictCaller(boundStrictCallee) should throw TypeError: Type error. Threw exception TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them.
+PASS nonStrictGetter(nonStrictAccessor) is nonStrictGetter
+PASS nonStrictSetter(nonStrictAccessor) is true
+FAIL nonStrictGetter(strictAccessor) should throw TypeError: Type error. Threw exception TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them.
+FAIL nonStrictSetter(strictAccessor) should throw TypeError: Type error. Threw exception TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them.
+FAIL strictGetter(nonStrictAccessor) should throw TypeError: Function.caller used to retrieve strict caller. Was null.
+FAIL strictSetter(nonStrictAccessor) should throw TypeError: Function.caller used to retrieve strict caller. Was undefined.
+FAIL strictGetter(strictAccessor) should throw TypeError: Type error. Threw exception TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them.
+FAIL strictSetter(strictAccessor) should throw TypeError: Type error. Threw exception TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'This tests for caller property in functions. Only functions that are called from inside of other functions and have a parent should have this property set. Tests return true when caller is found and false when the caller is null.'
+)
+function child()
+{
+ return (child.caller !== null);
+}
+
+function parent()
+{
+ return child();
+}
+
+var childHasCallerWhenExecutingGlobalCode = (child.caller !== null);
+var childHasCallerWhenCalledWithoutParent = child();
+var childHasCallerWhenCalledFromWithinParent = parent();
+
+shouldBe('childHasCallerWhenExecutingGlobalCode', 'false');
+shouldBe('childHasCallerWhenCalledWithoutParent', 'false');
+shouldBe('childHasCallerWhenCalledFromWithinParent', 'true')
+
+// The caller property should throw in strict mode, and a non-strict function cannot use caller to reach a strict caller (see ES5.1 15.3.5.4).
+function nonStrictCallee() { return nonStrictCallee.caller; }
+function strictCallee() { "use strict"; return strictCallee.caller; }
+function nonStrictCaller(x) { return x(); }
+function strictCaller(x) { "use strict"; return x(); }
+shouldBe("nonStrictCaller(nonStrictCallee)", "nonStrictCaller");
+shouldThrow("nonStrictCaller(strictCallee)", '"TypeError: Type error"');
+shouldThrow("strictCaller(nonStrictCallee)", '"TypeError: Function.caller used to retrieve strict caller"');
+shouldThrow("strictCaller(strictCallee)", '"TypeError: Type error"');
+
+// .caller within a bound function reaches the caller, ignoring the binding.
+var boundNonStrictCallee = nonStrictCallee.bind();
+var boundStrictCallee = strictCallee.bind();
+shouldBe("nonStrictCaller(boundNonStrictCallee)", "nonStrictCaller");
+shouldThrow("nonStrictCaller(boundStrictCallee)", '"TypeError: Type error"');
+shouldThrow("strictCaller(boundNonStrictCallee)", '"TypeError: Function.caller used to retrieve strict caller"');
+shouldThrow("strictCaller(boundStrictCallee)", '"TypeError: Type error"');
+
+// Check that .caller works (or throws) as expected, over an accessor call.
+function getFooGetter(x) { return Object.getOwnPropertyDescriptor(x, 'foo').get; }
+function getFooSetter(x) { return Object.getOwnPropertyDescriptor(x, 'foo').set; }
+var nonStrictAccessor = {
+ get foo() { return getFooGetter(nonStrictAccessor).caller; },
+ set foo(x) { if (getFooSetter(nonStrictAccessor).caller !==x) throw false; }
+};
+var strictAccessor = {
+ get foo() { "use strict"; return getFooGetter(strictAccessor).caller; },
+ set foo(x) { "use strict"; if (getFooSetter(strictAccessor).caller !==x) throw false; }
+};
+function nonStrictGetter(x) { return x.foo; }
+function nonStrictSetter(x) { x.foo = nonStrictSetter; return true; }
+function strictGetter(x) { "use strict"; return x.foo; }
+function strictSetter(x) { "use strict"; x.foo = nonStrictSetter; return true; }
+shouldBe("nonStrictGetter(nonStrictAccessor)", "nonStrictGetter");
+shouldBeTrue("nonStrictSetter(nonStrictAccessor)");
+shouldThrow("nonStrictGetter(strictAccessor)", '"TypeError: Type error"');
+shouldThrow("nonStrictSetter(strictAccessor)", '"TypeError: Type error"');
+shouldThrow("strictGetter(nonStrictAccessor)", '"TypeError: Function.caller used to retrieve strict caller"');
+shouldThrow("strictSetter(nonStrictAccessor)", '"TypeError: Function.caller used to retrieve strict caller"');
+shouldThrow("strictGetter(strictAccessor)", '"TypeError: Type error"');
+shouldThrow("strictSetter(strictAccessor)", '"TypeError: Type error"');
--- /dev/null
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks for a regression against Date.setMonth fails with big values due to overflow.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS d.valueOf() is new Date(1980, 8, 1).valueOf()
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'This test checks for a regression against <a href="https://bugs.webkit.org/show_bug.cgi?id=4781">Date.setMonth fails with big values due to overflow</a>.'
+);
+
+var d = new Date(1970, 0, 1);
+d.setMonth(128);
+shouldBe("d.valueOf()", "new Date(1980, 8, 1).valueOf()");
--- /dev/null
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks for a regression against Date.setMonth fails with negative values.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS d.valueOf() is new Date(2004, 9, 15).valueOf()
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'This test checks for a regression against <a href="https://bugs.webkit.org/show_bug.cgi?id=5280">Date.setMonth fails with negative values</a>.'
+);
+
+var d = new Date(2005, 6, 15);
+d.setMonth(-3);
+shouldBe("d.valueOf()", "new Date(2004, 9, 15).valueOf()");
--- /dev/null
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+The following test checks if an existing milliseconds value gets preserved if a call to setHours(), setMinutes() or setSeconds() does not specify the milliseconds. See https://bugs.webkit.org/show_bug.cgi?id=3759
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS d.getMilliseconds() is 1
+PASS d.getMilliseconds() is 1
+PASS d.getMilliseconds() is 1
+PASS d.getMilliseconds() is 1
+PASS d.getMilliseconds() is 1
+PASS d.getMilliseconds() is 1
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'The following test checks if an existing milliseconds value gets preserved if a call to setHours(), setMinutes() or setSeconds() does not specify the milliseconds. See <a href="https://bugs.webkit.org/show_bug.cgi?id=3759">https://bugs.webkit.org/show_bug.cgi?id=3759</a>'
+);
+
+var d = new Date(0);
+d.setMilliseconds(1);
+
+var oldValue = d.getMilliseconds();
+
+d.setHours(8);
+shouldBe("d.getMilliseconds()", oldValue.toString());
+d.setHours(8, 30);
+shouldBe("d.getMilliseconds()", oldValue.toString());
+d.setHours(8, 30, 40);
+shouldBe("d.getMilliseconds()", oldValue.toString());
+d.setMinutes(45);
+shouldBe("d.getMilliseconds()", oldValue.toString());
+d.setMinutes(45, 40);
+shouldBe("d.getMilliseconds()", oldValue.toString());
+d.setSeconds(50);
+shouldBe("d.getMilliseconds()", oldValue.toString());
--- /dev/null
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests for Date.toISOString
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS Date.toISOString.call({}) threw exception TypeError: Cannot call method 'call' of undefined.
+PASS Date.toISOString.call(0) threw exception TypeError: Cannot call method 'call' of undefined.
+PASS new Date(-400).toISOString() is '1969-12-31T23:59:59.600Z'
+PASS new Date(0).toISOString() is '1970-01-01T00:00:00.000Z'
+PASS new Date('1 January 1500 UTC').toISOString() is '1500-01-01T00:00:00.000Z'
+PASS new Date('1 January 2000 UTC').toISOString() is '2000-01-01T00:00:00.000Z'
+PASS new Date('1 January 4000 UTC').toISOString() is '4000-01-01T00:00:00.000Z'
+PASS new Date('1 January 100000 UTC').toISOString() is '+100000-01-01T00:00:00.000Z'
+FAIL new Date('1 January -1 UTC').toISOString() should be -000001-01-01T00:00:00.000Z. Threw exception RangeError: Invalid time value
+PASS new Date('10 March 2000 UTC').toISOString() is '2000-03-10T00:00:00.000Z'
+PASS throwsRangeError("new Date(NaN).toISOString()") is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("Tests for Date.toISOString");
+
+function throwsRangeError(str)
+{
+ try {
+ eval(str);
+ } catch (e) {
+ return e instanceof RangeError;
+ }
+ return false;
+}
+
+shouldThrow("Date.toISOString.call({})");
+shouldThrow("Date.toISOString.call(0)");
+
+shouldBe("new Date(-400).toISOString()", "'1969-12-31T23:59:59.600Z'");
+shouldBe("new Date(0).toISOString()", "'1970-01-01T00:00:00.000Z'");
+shouldBe("new Date('1 January 1500 UTC').toISOString()", "'1500-01-01T00:00:00.000Z'");
+shouldBe("new Date('1 January 2000 UTC').toISOString()", "'2000-01-01T00:00:00.000Z'");
+shouldBe("new Date('1 January 4000 UTC').toISOString()", "'4000-01-01T00:00:00.000Z'");
+shouldBe("new Date('1 January 100000 UTC').toISOString()", "'+100000-01-01T00:00:00.000Z'");
+shouldBe("new Date('1 January -1 UTC').toISOString()", "'-000001-01-01T00:00:00.000Z'");
+shouldBe("new Date('10 March 2000 UTC').toISOString()", "'2000-03-10T00:00:00.000Z'");
+shouldBeTrue('throwsRangeError("new Date(NaN).toISOString()")');
--- /dev/null
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test for bug 33641: Assertion failure in Lexer.cpp if input stream ends while in string escape.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Passed if no assertion failure.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description('Test for <a href="https://bugs.webkit.org/show_bug.cgi?id=33641">bug 33641</a>: Assertion failure in Lexer.cpp if input stream ends while in string escape.');
+
+debug("Passed if no assertion failure.");
+
+try {
+ eval('"\\');
+} catch (ex) {
+}
--- /dev/null
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test for correct properties on Error objects.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS enumerableProperties(error) is []
+FAIL enumerableProperties(nativeError) should be stack,line,sourceURL. Was .
+PASS Object.getPrototypeOf(nativeError).name is "RangeError"
+PASS Object.getPrototypeOf(nativeError).message is ""
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("Test for correct properties on Error objects.");
+
+function enumerableProperties(object)
+{
+ var result = [];
+ for (var i in object)
+ result.push(i);
+ return result;
+}
+
+try {
+ // generate a RangeError.
+ [].length = -1;
+} catch (rangeError) {
+ var nativeError = rangeError;
+ var error = new Error("message");
+
+ shouldBe('enumerableProperties(error)', '[]');
+ shouldBe('enumerableProperties(nativeError)', '["stack", "line", "sourceURL"]');
+
+ shouldBe('Object.getPrototypeOf(nativeError).name', '"RangeError"');
+ shouldBe('Object.getPrototypeOf(nativeError).message', '""');
+}
--- /dev/null
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test for REGRESSION(r60392): Registerfile can be unwound too far following an exception. If the test doesn't crash, you pass.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Test for <a href='https://bugs.webkit.org/show_bug.cgi?id=41948'>REGRESSION(r60392): Registerfile can be unwound too far following an exception</a>. If the test doesn't crash, you pass."
+);
+
+eval('try { throw 0; } catch(e) {}');
+
+var x = new String();
+'' + escape(x.substring(0, 1));
--- /dev/null
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test that we can handle excessively large initializer lists
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS new Function(initializerTestString)() is true
+PASS new Function(declarationTestString)() is true
+FAIL new Function(commaExpressionTestString)() should be true. Threw exception RangeError: Maximum call stack size exceeded
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("Test that we can handle excessively large initializer lists");
+
+var initializerTestString = "var a=0";
+for (var i = 0; i < 50000; i++)
+ initializerTestString += ",a"+i+"="+i;
+initializerTestString += ";return true;";
+
+var declarationTestString = "var a";
+for (var i = 0; i < 50000; i++)
+ declarationTestString += ",a"+i;
+declarationTestString += ";return true;";
+
+var commaExpressionTestString = "1";
+for (var i = 0; i < 50000; i++)
+ commaExpressionTestString += ",1";
+commaExpressionTestString += ";return true;";
+
+shouldBeTrue("new Function(initializerTestString)()");
+shouldBeTrue("new Function(declarationTestString)()");
+shouldBeTrue("new Function(commaExpressionTestString)()");
--- /dev/null
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests to ensure that Function.apply works correctly for Arrays, arguments and array-like objects.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS argumentsApply1(1, 2, 3) is 1
+PASS argumentsApply2(1, 2, 3) is 2
+PASS argumentsApply3(1, 2, 3) is 3
+PASS argumentsApplyLength(1, 2, 3) is 3
+PASS argumentsApplyExcessArguments(1, 2, 3) is 3
+PASS executedAdditionalArgument is true
+PASS arrayApply1([1, 2, 3]) is 1
+PASS arrayApply2([1, 2, 3]) is 2
+PASS arrayApply3([1, 2, 3]) is 3
+PASS arrayApplyLength([1, 2, 3]) is 3
+PASS argumentsApplyDelete1(1, 2, 3) is 1
+PASS argumentsApplyDelete2(1, 2, 3) is undefined
+PASS argumentsApplyDelete3(1, 2, 3) is 3
+PASS argumentsApplyDeleteLength(1, 2, 3) is 3
+PASS arrayApplyDelete1([1, 2, 3]) is 1
+PASS arrayApplyDelete2([1, 2, 3]) is undefined
+PASS arrayApplyDelete3([1, 2, 3]) is 3
+PASS arrayApplyDeleteLength([1, 2, 3]) is 3
+PASS argumentsApplyChangeLength1(1) is 2
+PASS argumentsApplyChangeLength2(1) is 2
+PASS argumentsApplyChangeLength3(1) is 2
+PASS argumentsApplyChangeLength4(1) is 0
+PASS argumentsApplyChangeLength5(1) is 0
+PASS arrayApplyChangeLength1() is 2
+PASS arrayApplyChangeLength2() is 2
+PASS arrayApplyChangeLength3() is 2
+PASS arrayApplyChangeLength4() is 0
+PASS var a = []; a.length = 0xFFFE; [].constructor.apply('', a).length is 0xFFFE
+PASS var a = []; a.length = 0xFFFF; [].constructor.apply('', a).length is 0xFFFF
+PASS var a = []; a.length = 0x10000; [].constructor.apply('', a).length is 0x10000
+FAIL var a = []; a.length = 0x10001; [].constructor.apply('', a).length should throw an exception. Was 65537.
+PASS var a = []; a.length = 0xFFFFFFFE; [].constructor.apply('', a).length threw exception RangeError: Maximum call stack size exceeded.
+PASS var a = []; a.length = 0xFFFFFFFF; [].constructor.apply('', a).length threw exception RangeError: Maximum call stack size exceeded.
+PASS (function(a,b,c,d){ return d ? -1 : (a+b+c); }).apply(undefined, {length:3, 0:100, 1:20, 2:3}) is 123
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description('Tests to ensure that Function.apply works correctly for Arrays, arguments and array-like objects.');
+
+function argumentsApply1(a, b, c)
+{
+ function t(a, b, c)
+ {
+ return a;
+ }
+ return t.apply(null, arguments);
+}
+
+function argumentsApply2(a, b, c)
+{
+ function t(a, b, c)
+ {
+ return b;
+ }
+ return t.apply(null, arguments);
+}
+
+function argumentsApply3(a, b, c)
+{
+ function t(a, b, c)
+ {
+ return c;
+ }
+ return t.apply(null, arguments);
+}
+
+function argumentsApplyLength(a, b, c)
+{
+ function t(a, b, c)
+ {
+ return arguments.length;
+ }
+ return t.apply(null, arguments);
+}
+var executedAdditionalArgument = false;
+function argumentsApplyExcessArguments(a, b, c)
+{
+ function t(a, b, c)
+ {
+ return arguments.length;
+ }
+ return t.apply(null, arguments, executedAdditionalArgument = true);
+}
+
+shouldBe("argumentsApply1(1, 2, 3)", "1");
+shouldBe("argumentsApply2(1, 2, 3)", "2");
+shouldBe("argumentsApply3(1, 2, 3)", "3");
+shouldBe("argumentsApplyLength(1, 2, 3)", "3");
+shouldBe("argumentsApplyExcessArguments(1, 2, 3)", "3");
+shouldBeTrue("executedAdditionalArgument");
+
+function arrayApply1(array)
+{
+ function t(a, b, c)
+ {
+ return a;
+ }
+ return t.apply(null, array);
+}
+
+function arrayApply2(array)
+{
+ function t(a, b, c)
+ {
+ return b;
+ }
+ return t.apply(null, array);
+}
+
+function arrayApply3(array)
+{
+ function t(a, b, c)
+ {
+ return c;
+ }
+ return t.apply(null, array);
+}
+
+function arrayApplyLength(array)
+{
+ function t(a, b, c)
+ {
+ return arguments.length;
+ }
+ return t.apply(null, array);
+}
+
+shouldBe("arrayApply1([1, 2, 3])", "1");
+shouldBe("arrayApply2([1, 2, 3])", "2");
+shouldBe("arrayApply3([1, 2, 3])", "3");
+shouldBe("arrayApplyLength([1, 2, 3])", "3");
+
+
+function argumentsApplyDelete1(a, b, c)
+{
+ function t(a, b, c)
+ {
+ return a;
+ }
+ delete arguments[1];
+ return t.apply(null, arguments);
+}
+
+function argumentsApplyDelete2(a, b, c)
+{
+ function t(a, b, c)
+ {
+ return b;
+ }
+ delete arguments[1];
+ return t.apply(null, arguments);
+}
+
+function argumentsApplyDelete3(a, b, c)
+{
+ function t(a, b, c)
+ {
+ return c;
+ }
+ delete arguments[1];
+ return t.apply(null, arguments);
+}
+
+function argumentsApplyDeleteLength(a, b, c)
+{
+ function t(a, b, c)
+ {
+ return arguments.length;
+ }
+ delete arguments[1];
+ return t.apply(null, arguments);
+}
+
+shouldBe("argumentsApplyDelete1(1, 2, 3)", "1");
+shouldBe("argumentsApplyDelete2(1, 2, 3)", "undefined");
+shouldBe("argumentsApplyDelete3(1, 2, 3)", "3");
+shouldBe("argumentsApplyDeleteLength(1, 2, 3)", "3");
+
+
+function arrayApplyDelete1(array)
+{
+ function t(a, b, c)
+ {
+ return a;
+ }
+ delete array[1];
+ return t.apply(null, array);
+}
+
+function arrayApplyDelete2(array)
+{
+ function t(a, b, c)
+ {
+ return b;
+ }
+ delete array[1];
+ return t.apply(null, array);
+}
+
+function arrayApplyDelete3(array)
+{
+ function t(a, b, c)
+ {
+ return c;
+ }
+ delete array[1];
+ return t.apply(null, array);
+}
+
+function arrayApplyDeleteLength(array)
+{
+ function t(a, b, c)
+ {
+ return arguments.length;
+ }
+ delete array[1];
+ return t.apply(null, array);
+}
+
+shouldBe("arrayApplyDelete1([1, 2, 3])", "1");
+shouldBe("arrayApplyDelete2([1, 2, 3])", "undefined");
+shouldBe("arrayApplyDelete3([1, 2, 3])", "3");
+shouldBe("arrayApplyDeleteLength([1, 2, 3])", "3");
+
+
+function argumentsApplyChangeLength1()
+{
+ function f() {
+ return arguments.length;
+ };
+ arguments.length = 2;
+ return f.apply(null, arguments);
+}
+
+
+function argumentsApplyChangeLength2()
+{
+ function f(a) {
+ return arguments.length;
+ };
+ arguments.length = 2;
+ return f.apply(null, arguments);
+}
+
+
+function argumentsApplyChangeLength3()
+{
+ function f(a, b, c) {
+ return arguments.length;
+ };
+ arguments.length = 2;
+ return f.apply(null, arguments);
+};
+
+function argumentsApplyChangeLength4()
+{
+ function f() {
+ return arguments.length;
+ };
+ arguments.length = 0;
+ return f.apply(null, arguments);
+};
+
+function argumentsApplyChangeLength5()
+{
+ function f() {
+ return arguments.length;
+ };
+ arguments.length = "Not A Number";
+ return f.apply(null, arguments);
+}
+
+shouldBe("argumentsApplyChangeLength1(1)", "2");
+shouldBe("argumentsApplyChangeLength2(1)", "2");
+shouldBe("argumentsApplyChangeLength3(1)", "2");
+shouldBe("argumentsApplyChangeLength4(1)", "0");
+shouldBe("argumentsApplyChangeLength5(1)", "0");
+
+function arrayApplyChangeLength1()
+{
+ function f() {
+ return arguments.length;
+ };
+ var array = [];
+ array.length = 2;
+ return f.apply(null, array);
+}
+
+function arrayApplyChangeLength2()
+{
+ function f(a) {
+ return arguments.length;
+ };
+ var array = [];
+ array.length = 2;
+ return f.apply(null, array);
+}
+
+function arrayApplyChangeLength3()
+{
+ function f(a, b, c) {
+ return arguments.length;
+ };
+ var array = [];
+ array.length = 2;
+ return f.apply(null, array);
+}
+
+function arrayApplyChangeLength4()
+{
+ function f() {
+ return arguments.length;
+ };
+ var array = [1];
+ array.length = 0;
+ return f.apply(null, array);
+};
+
+shouldBe("arrayApplyChangeLength1()", "2");
+shouldBe("arrayApplyChangeLength2()", "2");
+shouldBe("arrayApplyChangeLength3()", "2");
+shouldBe("arrayApplyChangeLength4()", "0");
+
+shouldBe("var a = []; a.length = 0xFFFE; [].constructor.apply('', a).length", "0xFFFE");
+shouldBe("var a = []; a.length = 0xFFFF; [].constructor.apply('', a).length", "0xFFFF");
+shouldBe("var a = []; a.length = 0x10000; [].constructor.apply('', a).length", "0x10000");
+shouldThrow("var a = []; a.length = 0x10001; [].constructor.apply('', a).length");
+shouldThrow("var a = []; a.length = 0xFFFFFFFE; [].constructor.apply('', a).length");
+shouldThrow("var a = []; a.length = 0xFFFFFFFF; [].constructor.apply('', a).length");
+
+// ES5 permits apply with array-like objects.
+shouldBe("(function(a,b,c,d){ return d ? -1 : (a+b+c); }).apply(undefined, {length:3, 0:100, 1:20, 2:3})", '123');
--- /dev/null
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks that the Function constructor detects some syntax errors correctly (bug#59795).
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+FAIL Function('(i + (j)') should throw SyntaxError: Expected token ')'. Threw exception SyntaxError: Unexpected token }.
+FAIL Function('return (i + (j)') should throw SyntaxError: Expected token ')'. Threw exception SyntaxError: Unexpected token }.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks that the Function constructor detects some syntax errors correctly (bug#59795)."
+);
+
+shouldThrow("Function('(i + (j)')", '"SyntaxError: Expected token \')\'"');
+shouldThrow("Function('return (i + (j)')", '"SyntaxError: Expected token \')\'"');
--- /dev/null
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks that parentheses are preserved when significant, and not added where inappropriate. We need this test because the JavaScriptCore parser removes all parentheses and the serializer then adds them back.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS compileAndSerialize('a * b * c') is 'a * b * c'
+PASS compileAndSerialize('(a * b) * c') is '(a * b) * c'
+PASS compileAndSerialize('a * (b * c)') is 'a * (b * c)'
+PASS compileAndSerialize('a * b + c') is 'a * b + c'
+PASS compileAndSerialize('(a * b) + c') is '(a * b) + c'
+PASS compileAndSerialize('a * (b + c)') is 'a * (b + c)'
+PASS compileAndSerialize('a * b - c') is 'a * b - c'
+PASS compileAndSerialize('(a * b) - c') is '(a * b) - c'
+PASS compileAndSerialize('a * (b - c)') is 'a * (b - c)'
+PASS compileAndSerialize('a / b / c') is 'a / b / c'
+PASS compileAndSerialize('(a / b) / c') is '(a / b) / c'
+PASS compileAndSerialize('a / (b / c)') is 'a / (b / c)'
+PASS compileAndSerialize('a * b / c') is 'a * b / c'
+PASS compileAndSerialize('(a * b) / c') is '(a * b) / c'
+PASS compileAndSerialize('a * (b / c)') is 'a * (b / c)'
+PASS compileAndSerialize('a / b + c') is 'a / b + c'
+PASS compileAndSerialize('(a / b) + c') is '(a / b) + c'
+PASS compileAndSerialize('a / (b + c)') is 'a / (b + c)'
+PASS compileAndSerialize('a % b % c') is 'a % b % c'
+PASS compileAndSerialize('(a % b) % c') is '(a % b) % c'
+PASS compileAndSerialize('a % (b % c)') is 'a % (b % c)'
+PASS compileAndSerialize('a * b % c') is 'a * b % c'
+PASS compileAndSerialize('(a * b) % c') is '(a * b) % c'
+PASS compileAndSerialize('a * (b % c)') is 'a * (b % c)'
+PASS compileAndSerialize('a % b + c') is 'a % b + c'
+PASS compileAndSerialize('(a % b) + c') is '(a % b) + c'
+PASS compileAndSerialize('a % (b + c)') is 'a % (b + c)'
+PASS compileAndSerialize('a + b + c') is 'a + b + c'
+PASS compileAndSerialize('(a + b) + c') is '(a + b) + c'
+PASS compileAndSerialize('a + (b + c)') is 'a + (b + c)'
+PASS compileAndSerialize('a + b << c') is 'a + b << c'
+PASS compileAndSerialize('(a + b) << c') is '(a + b) << c'
+PASS compileAndSerialize('a + (b << c)') is 'a + (b << c)'
+PASS compileAndSerialize('a + b >> c') is 'a + b >> c'
+PASS compileAndSerialize('(a + b) >> c') is '(a + b) >> c'
+PASS compileAndSerialize('a + (b >> c)') is 'a + (b >> c)'
+PASS compileAndSerialize('a + b >>> c') is 'a + b >>> c'
+PASS compileAndSerialize('(a + b) >>> c') is '(a + b) >>> c'
+PASS compileAndSerialize('a + (b >>> c)') is 'a + (b >>> c)'
+PASS compileAndSerialize('a - b - c') is 'a - b - c'
+PASS compileAndSerialize('(a - b) - c') is '(a - b) - c'
+PASS compileAndSerialize('a - (b - c)') is 'a - (b - c)'
+PASS compileAndSerialize('a + b - c') is 'a + b - c'
+PASS compileAndSerialize('(a + b) - c') is '(a + b) - c'
+PASS compileAndSerialize('a + (b - c)') is 'a + (b - c)'
+PASS compileAndSerialize('a - b << c') is 'a - b << c'
+PASS compileAndSerialize('(a - b) << c') is '(a - b) << c'
+PASS compileAndSerialize('a - (b << c)') is 'a - (b << c)'
+PASS compileAndSerialize('a << b << c') is 'a << b << c'
+PASS compileAndSerialize('(a << b) << c') is '(a << b) << c'
+PASS compileAndSerialize('a << (b << c)') is 'a << (b << c)'
+PASS compileAndSerialize('a << b < c') is 'a << b < c'
+PASS compileAndSerialize('(a << b) < c') is '(a << b) < c'
+PASS compileAndSerialize('a << (b < c)') is 'a << (b < c)'
+PASS compileAndSerialize('a << b > c') is 'a << b > c'
+PASS compileAndSerialize('(a << b) > c') is '(a << b) > c'
+PASS compileAndSerialize('a << (b > c)') is 'a << (b > c)'
+PASS compileAndSerialize('a << b <= c') is 'a << b <= c'
+PASS compileAndSerialize('(a << b) <= c') is '(a << b) <= c'
+PASS compileAndSerialize('a << (b <= c)') is 'a << (b <= c)'
+PASS compileAndSerialize('a << b >= c') is 'a << b >= c'
+PASS compileAndSerialize('(a << b) >= c') is '(a << b) >= c'
+PASS compileAndSerialize('a << (b >= c)') is 'a << (b >= c)'
+PASS compileAndSerialize('a << b instanceof c') is 'a << b instanceof c'
+PASS compileAndSerialize('(a << b) instanceof c') is '(a << b) instanceof c'
+PASS compileAndSerialize('a << (b instanceof c)') is 'a << (b instanceof c)'
+PASS compileAndSerialize('a << b in c') is 'a << b in c'
+PASS compileAndSerialize('(a << b) in c') is '(a << b) in c'
+PASS compileAndSerialize('a << (b in c)') is 'a << (b in c)'
+PASS compileAndSerialize('a >> b >> c') is 'a >> b >> c'
+PASS compileAndSerialize('(a >> b) >> c') is '(a >> b) >> c'
+PASS compileAndSerialize('a >> (b >> c)') is 'a >> (b >> c)'
+PASS compileAndSerialize('a << b >> c') is 'a << b >> c'
+PASS compileAndSerialize('(a << b) >> c') is '(a << b) >> c'
+PASS compileAndSerialize('a << (b >> c)') is 'a << (b >> c)'
+PASS compileAndSerialize('a >> b < c') is 'a >> b < c'
+PASS compileAndSerialize('(a >> b) < c') is '(a >> b) < c'
+PASS compileAndSerialize('a >> (b < c)') is 'a >> (b < c)'
+PASS compileAndSerialize('a >>> b >>> c') is 'a >>> b >>> c'
+PASS compileAndSerialize('(a >>> b) >>> c') is '(a >>> b) >>> c'
+PASS compileAndSerialize('a >>> (b >>> c)') is 'a >>> (b >>> c)'
+PASS compileAndSerialize('a << b >>> c') is 'a << b >>> c'
+PASS compileAndSerialize('(a << b) >>> c') is '(a << b) >>> c'
+PASS compileAndSerialize('a << (b >>> c)') is 'a << (b >>> c)'
+PASS compileAndSerialize('a >>> b < c') is 'a >>> b < c'
+PASS compileAndSerialize('(a >>> b) < c') is '(a >>> b) < c'
+PASS compileAndSerialize('a >>> (b < c)') is 'a >>> (b < c)'
+PASS compileAndSerialize('a < b < c') is 'a < b < c'
+PASS compileAndSerialize('(a < b) < c') is '(a < b) < c'
+PASS compileAndSerialize('a < (b < c)') is 'a < (b < c)'
+PASS compileAndSerialize('a < b == c') is 'a < b == c'
+PASS compileAndSerialize('(a < b) == c') is '(a < b) == c'
+PASS compileAndSerialize('a < (b == c)') is 'a < (b == c)'
+PASS compileAndSerialize('a < b != c') is 'a < b != c'
+PASS compileAndSerialize('(a < b) != c') is '(a < b) != c'
+PASS compileAndSerialize('a < (b != c)') is 'a < (b != c)'
+PASS compileAndSerialize('a < b === c') is 'a < b === c'
+PASS compileAndSerialize('(a < b) === c') is '(a < b) === c'
+PASS compileAndSerialize('a < (b === c)') is 'a < (b === c)'
+PASS compileAndSerialize('a < b !== c') is 'a < b !== c'
+PASS compileAndSerialize('(a < b) !== c') is '(a < b) !== c'
+PASS compileAndSerialize('a < (b !== c)') is 'a < (b !== c)'
+PASS compileAndSerialize('a > b > c') is 'a > b > c'
+PASS compileAndSerialize('(a > b) > c') is '(a > b) > c'
+PASS compileAndSerialize('a > (b > c)') is 'a > (b > c)'
+PASS compileAndSerialize('a < b > c') is 'a < b > c'
+PASS compileAndSerialize('(a < b) > c') is '(a < b) > c'
+PASS compileAndSerialize('a < (b > c)') is 'a < (b > c)'
+PASS compileAndSerialize('a > b == c') is 'a > b == c'
+PASS compileAndSerialize('(a > b) == c') is '(a > b) == c'
+PASS compileAndSerialize('a > (b == c)') is 'a > (b == c)'
+PASS compileAndSerialize('a <= b <= c') is 'a <= b <= c'
+PASS compileAndSerialize('(a <= b) <= c') is '(a <= b) <= c'
+PASS compileAndSerialize('a <= (b <= c)') is 'a <= (b <= c)'
+PASS compileAndSerialize('a < b <= c') is 'a < b <= c'
+PASS compileAndSerialize('(a < b) <= c') is '(a < b) <= c'
+PASS compileAndSerialize('a < (b <= c)') is 'a < (b <= c)'
+PASS compileAndSerialize('a <= b == c') is 'a <= b == c'
+PASS compileAndSerialize('(a <= b) == c') is '(a <= b) == c'
+PASS compileAndSerialize('a <= (b == c)') is 'a <= (b == c)'
+PASS compileAndSerialize('a >= b >= c') is 'a >= b >= c'
+PASS compileAndSerialize('(a >= b) >= c') is '(a >= b) >= c'
+PASS compileAndSerialize('a >= (b >= c)') is 'a >= (b >= c)'
+PASS compileAndSerialize('a < b >= c') is 'a < b >= c'
+PASS compileAndSerialize('(a < b) >= c') is '(a < b) >= c'
+PASS compileAndSerialize('a < (b >= c)') is 'a < (b >= c)'
+PASS compileAndSerialize('a >= b == c') is 'a >= b == c'
+PASS compileAndSerialize('(a >= b) == c') is '(a >= b) == c'
+PASS compileAndSerialize('a >= (b == c)') is 'a >= (b == c)'
+PASS compileAndSerialize('a instanceof b instanceof c') is 'a instanceof b instanceof c'
+PASS compileAndSerialize('(a instanceof b) instanceof c') is '(a instanceof b) instanceof c'
+PASS compileAndSerialize('a instanceof (b instanceof c)') is 'a instanceof (b instanceof c)'
+PASS compileAndSerialize('a < b instanceof c') is 'a < b instanceof c'
+PASS compileAndSerialize('(a < b) instanceof c') is '(a < b) instanceof c'
+PASS compileAndSerialize('a < (b instanceof c)') is 'a < (b instanceof c)'
+PASS compileAndSerialize('a instanceof b == c') is 'a instanceof b == c'
+PASS compileAndSerialize('(a instanceof b) == c') is '(a instanceof b) == c'
+PASS compileAndSerialize('a instanceof (b == c)') is 'a instanceof (b == c)'
+PASS compileAndSerialize('a in b in c') is 'a in b in c'
+PASS compileAndSerialize('(a in b) in c') is '(a in b) in c'
+PASS compileAndSerialize('a in (b in c)') is 'a in (b in c)'
+PASS compileAndSerialize('a < b in c') is 'a < b in c'
+PASS compileAndSerialize('(a < b) in c') is '(a < b) in c'
+PASS compileAndSerialize('a < (b in c)') is 'a < (b in c)'
+PASS compileAndSerialize('a in b == c') is 'a in b == c'
+PASS compileAndSerialize('(a in b) == c') is '(a in b) == c'
+PASS compileAndSerialize('a in (b == c)') is 'a in (b == c)'
+PASS compileAndSerialize('a == b == c') is 'a == b == c'
+PASS compileAndSerialize('(a == b) == c') is '(a == b) == c'
+PASS compileAndSerialize('a == (b == c)') is 'a == (b == c)'
+PASS compileAndSerialize('a == b & c') is 'a == b & c'
+PASS compileAndSerialize('(a == b) & c') is '(a == b) & c'
+PASS compileAndSerialize('a == (b & c)') is 'a == (b & c)'
+PASS compileAndSerialize('a != b != c') is 'a != b != c'
+PASS compileAndSerialize('(a != b) != c') is '(a != b) != c'
+PASS compileAndSerialize('a != (b != c)') is 'a != (b != c)'
+PASS compileAndSerialize('a == b != c') is 'a == b != c'
+PASS compileAndSerialize('(a == b) != c') is '(a == b) != c'
+PASS compileAndSerialize('a == (b != c)') is 'a == (b != c)'
+PASS compileAndSerialize('a != b & c') is 'a != b & c'
+PASS compileAndSerialize('(a != b) & c') is '(a != b) & c'
+PASS compileAndSerialize('a != (b & c)') is 'a != (b & c)'
+PASS compileAndSerialize('a === b === c') is 'a === b === c'
+PASS compileAndSerialize('(a === b) === c') is '(a === b) === c'
+PASS compileAndSerialize('a === (b === c)') is 'a === (b === c)'
+PASS compileAndSerialize('a == b === c') is 'a == b === c'
+PASS compileAndSerialize('(a == b) === c') is '(a == b) === c'
+PASS compileAndSerialize('a == (b === c)') is 'a == (b === c)'
+PASS compileAndSerialize('a === b & c') is 'a === b & c'
+PASS compileAndSerialize('(a === b) & c') is '(a === b) & c'
+PASS compileAndSerialize('a === (b & c)') is 'a === (b & c)'
+PASS compileAndSerialize('a !== b !== c') is 'a !== b !== c'
+PASS compileAndSerialize('(a !== b) !== c') is '(a !== b) !== c'
+PASS compileAndSerialize('a !== (b !== c)') is 'a !== (b !== c)'
+PASS compileAndSerialize('a == b !== c') is 'a == b !== c'
+PASS compileAndSerialize('(a == b) !== c') is '(a == b) !== c'
+PASS compileAndSerialize('a == (b !== c)') is 'a == (b !== c)'
+PASS compileAndSerialize('a !== b & c') is 'a !== b & c'
+PASS compileAndSerialize('(a !== b) & c') is '(a !== b) & c'
+PASS compileAndSerialize('a !== (b & c)') is 'a !== (b & c)'
+PASS compileAndSerialize('a & b & c') is 'a & b & c'
+PASS compileAndSerialize('(a & b) & c') is '(a & b) & c'
+PASS compileAndSerialize('a & (b & c)') is 'a & (b & c)'
+PASS compileAndSerialize('a & b ^ c') is 'a & b ^ c'
+PASS compileAndSerialize('(a & b) ^ c') is '(a & b) ^ c'
+PASS compileAndSerialize('a & (b ^ c)') is 'a & (b ^ c)'
+PASS compileAndSerialize('a ^ b ^ c') is 'a ^ b ^ c'
+PASS compileAndSerialize('(a ^ b) ^ c') is '(a ^ b) ^ c'
+PASS compileAndSerialize('a ^ (b ^ c)') is 'a ^ (b ^ c)'
+PASS compileAndSerialize('a ^ b | c') is 'a ^ b | c'
+PASS compileAndSerialize('(a ^ b) | c') is '(a ^ b) | c'
+PASS compileAndSerialize('a ^ (b | c)') is 'a ^ (b | c)'
+PASS compileAndSerialize('a | b | c') is 'a | b | c'
+PASS compileAndSerialize('(a | b) | c') is '(a | b) | c'
+PASS compileAndSerialize('a | (b | c)') is 'a | (b | c)'
+PASS compileAndSerialize('a | b && c') is 'a | b && c'
+PASS compileAndSerialize('(a | b) && c') is '(a | b) && c'
+PASS compileAndSerialize('a | (b && c)') is 'a | (b && c)'
+PASS compileAndSerialize('a && b && c') is 'a && b && c'
+PASS compileAndSerialize('(a && b) && c') is '(a && b) && c'
+PASS compileAndSerialize('a && (b && c)') is 'a && (b && c)'
+PASS compileAndSerialize('a && b || c') is 'a && b || c'
+PASS compileAndSerialize('(a && b) || c') is '(a && b) || c'
+PASS compileAndSerialize('a && (b || c)') is 'a && (b || c)'
+PASS compileAndSerialize('a || b || c') is 'a || b || c'
+PASS compileAndSerialize('(a || b) || c') is '(a || b) || c'
+PASS compileAndSerialize('a || (b || c)') is 'a || (b || c)'
+PASS compileAndSerialize('a = b = c') is 'a = b = c'
+PASS compileAndSerialize('(a = b) = c') is '(a = b) = c'
+PASS compileAndSerialize('a = (b = c)') is 'a = (b = c)'
+PASS compileAndSerialize('a = b + c') is 'a = b + c'
+PASS compileAndSerialize('(a = b) + c') is '(a = b) + c'
+PASS compileAndSerialize('a = (b + c)') is 'a = (b + c)'
+FAIL compileAndSerialize('a + b = c') should throw an exception. Was a + b = c.
+PASS compileAndSerialize('(a + b) = c') is '(a + b) = c'
+PASS compileAndSerialize('a + (b = c)') is 'a + (b = c)'
+PASS compileAndSerialize('a *= b *= c') is 'a *= b *= c'
+PASS compileAndSerialize('(a *= b) *= c') is '(a *= b) *= c'
+PASS compileAndSerialize('a *= (b *= c)') is 'a *= (b *= c)'
+PASS compileAndSerialize('a = b *= c') is 'a = b *= c'
+PASS compileAndSerialize('(a = b) *= c') is '(a = b) *= c'
+PASS compileAndSerialize('a = (b *= c)') is 'a = (b *= c)'
+PASS compileAndSerialize('a *= b + c') is 'a *= b + c'
+PASS compileAndSerialize('(a *= b) + c') is '(a *= b) + c'
+PASS compileAndSerialize('a *= (b + c)') is 'a *= (b + c)'
+FAIL compileAndSerialize('a + b *= c') should throw an exception. Was a + b *= c.
+PASS compileAndSerialize('(a + b) *= c') is '(a + b) *= c'
+PASS compileAndSerialize('a + (b *= c)') is 'a + (b *= c)'
+PASS compileAndSerialize('a /= b /= c') is 'a /= b /= c'
+PASS compileAndSerialize('(a /= b) /= c') is '(a /= b) /= c'
+PASS compileAndSerialize('a /= (b /= c)') is 'a /= (b /= c)'
+PASS compileAndSerialize('a = b /= c') is 'a = b /= c'
+PASS compileAndSerialize('(a = b) /= c') is '(a = b) /= c'
+PASS compileAndSerialize('a = (b /= c)') is 'a = (b /= c)'
+PASS compileAndSerialize('a /= b + c') is 'a /= b + c'
+PASS compileAndSerialize('(a /= b) + c') is '(a /= b) + c'
+PASS compileAndSerialize('a /= (b + c)') is 'a /= (b + c)'
+FAIL compileAndSerialize('a + b /= c') should throw an exception. Was a + b /= c.
+PASS compileAndSerialize('(a + b) /= c') is '(a + b) /= c'
+PASS compileAndSerialize('a + (b /= c)') is 'a + (b /= c)'
+PASS compileAndSerialize('a %= b %= c') is 'a %= b %= c'
+PASS compileAndSerialize('(a %= b) %= c') is '(a %= b) %= c'
+PASS compileAndSerialize('a %= (b %= c)') is 'a %= (b %= c)'
+PASS compileAndSerialize('a = b %= c') is 'a = b %= c'
+PASS compileAndSerialize('(a = b) %= c') is '(a = b) %= c'
+PASS compileAndSerialize('a = (b %= c)') is 'a = (b %= c)'
+PASS compileAndSerialize('a %= b + c') is 'a %= b + c'
+PASS compileAndSerialize('(a %= b) + c') is '(a %= b) + c'
+PASS compileAndSerialize('a %= (b + c)') is 'a %= (b + c)'
+FAIL compileAndSerialize('a + b %= c') should throw an exception. Was a + b %= c.
+PASS compileAndSerialize('(a + b) %= c') is '(a + b) %= c'
+PASS compileAndSerialize('a + (b %= c)') is 'a + (b %= c)'
+PASS compileAndSerialize('a += b += c') is 'a += b += c'
+PASS compileAndSerialize('(a += b) += c') is '(a += b) += c'
+PASS compileAndSerialize('a += (b += c)') is 'a += (b += c)'
+PASS compileAndSerialize('a = b += c') is 'a = b += c'
+PASS compileAndSerialize('(a = b) += c') is '(a = b) += c'
+PASS compileAndSerialize('a = (b += c)') is 'a = (b += c)'
+PASS compileAndSerialize('a += b + c') is 'a += b + c'
+PASS compileAndSerialize('(a += b) + c') is '(a += b) + c'
+PASS compileAndSerialize('a += (b + c)') is 'a += (b + c)'
+FAIL compileAndSerialize('a + b += c') should throw an exception. Was a + b += c.
+PASS compileAndSerialize('(a + b) += c') is '(a + b) += c'
+PASS compileAndSerialize('a + (b += c)') is 'a + (b += c)'
+PASS compileAndSerialize('a -= b -= c') is 'a -= b -= c'
+PASS compileAndSerialize('(a -= b) -= c') is '(a -= b) -= c'
+PASS compileAndSerialize('a -= (b -= c)') is 'a -= (b -= c)'
+PASS compileAndSerialize('a = b -= c') is 'a = b -= c'
+PASS compileAndSerialize('(a = b) -= c') is '(a = b) -= c'
+PASS compileAndSerialize('a = (b -= c)') is 'a = (b -= c)'
+PASS compileAndSerialize('a -= b + c') is 'a -= b + c'
+PASS compileAndSerialize('(a -= b) + c') is '(a -= b) + c'
+PASS compileAndSerialize('a -= (b + c)') is 'a -= (b + c)'
+FAIL compileAndSerialize('a + b -= c') should throw an exception. Was a + b -= c.
+PASS compileAndSerialize('(a + b) -= c') is '(a + b) -= c'
+PASS compileAndSerialize('a + (b -= c)') is 'a + (b -= c)'
+PASS compileAndSerialize('a <<= b <<= c') is 'a <<= b <<= c'
+PASS compileAndSerialize('(a <<= b) <<= c') is '(a <<= b) <<= c'
+PASS compileAndSerialize('a <<= (b <<= c)') is 'a <<= (b <<= c)'
+PASS compileAndSerialize('a = b <<= c') is 'a = b <<= c'
+PASS compileAndSerialize('(a = b) <<= c') is '(a = b) <<= c'
+PASS compileAndSerialize('a = (b <<= c)') is 'a = (b <<= c)'
+PASS compileAndSerialize('a <<= b + c') is 'a <<= b + c'
+PASS compileAndSerialize('(a <<= b) + c') is '(a <<= b) + c'
+PASS compileAndSerialize('a <<= (b + c)') is 'a <<= (b + c)'
+FAIL compileAndSerialize('a + b <<= c') should throw an exception. Was a + b <<= c.
+PASS compileAndSerialize('(a + b) <<= c') is '(a + b) <<= c'
+PASS compileAndSerialize('a + (b <<= c)') is 'a + (b <<= c)'
+PASS compileAndSerialize('a >>= b >>= c') is 'a >>= b >>= c'
+PASS compileAndSerialize('(a >>= b) >>= c') is '(a >>= b) >>= c'
+PASS compileAndSerialize('a >>= (b >>= c)') is 'a >>= (b >>= c)'
+PASS compileAndSerialize('a = b >>= c') is 'a = b >>= c'
+PASS compileAndSerialize('(a = b) >>= c') is '(a = b) >>= c'
+PASS compileAndSerialize('a = (b >>= c)') is 'a = (b >>= c)'
+PASS compileAndSerialize('a >>= b + c') is 'a >>= b + c'
+PASS compileAndSerialize('(a >>= b) + c') is '(a >>= b) + c'
+PASS compileAndSerialize('a >>= (b + c)') is 'a >>= (b + c)'
+FAIL compileAndSerialize('a + b >>= c') should throw an exception. Was a + b >>= c.
+PASS compileAndSerialize('(a + b) >>= c') is '(a + b) >>= c'
+PASS compileAndSerialize('a + (b >>= c)') is 'a + (b >>= c)'
+PASS compileAndSerialize('a >>>= b >>>= c') is 'a >>>= b >>>= c'
+PASS compileAndSerialize('(a >>>= b) >>>= c') is '(a >>>= b) >>>= c'
+PASS compileAndSerialize('a >>>= (b >>>= c)') is 'a >>>= (b >>>= c)'
+PASS compileAndSerialize('a = b >>>= c') is 'a = b >>>= c'
+PASS compileAndSerialize('(a = b) >>>= c') is '(a = b) >>>= c'
+PASS compileAndSerialize('a = (b >>>= c)') is 'a = (b >>>= c)'
+PASS compileAndSerialize('a >>>= b + c') is 'a >>>= b + c'
+PASS compileAndSerialize('(a >>>= b) + c') is '(a >>>= b) + c'
+PASS compileAndSerialize('a >>>= (b + c)') is 'a >>>= (b + c)'
+FAIL compileAndSerialize('a + b >>>= c') should throw an exception. Was a + b >>>= c.
+PASS compileAndSerialize('(a + b) >>>= c') is '(a + b) >>>= c'
+PASS compileAndSerialize('a + (b >>>= c)') is 'a + (b >>>= c)'
+PASS compileAndSerialize('a &= b &= c') is 'a &= b &= c'
+PASS compileAndSerialize('(a &= b) &= c') is '(a &= b) &= c'
+PASS compileAndSerialize('a &= (b &= c)') is 'a &= (b &= c)'
+PASS compileAndSerialize('a = b &= c') is 'a = b &= c'
+PASS compileAndSerialize('(a = b) &= c') is '(a = b) &= c'
+PASS compileAndSerialize('a = (b &= c)') is 'a = (b &= c)'
+PASS compileAndSerialize('a &= b + c') is 'a &= b + c'
+PASS compileAndSerialize('(a &= b) + c') is '(a &= b) + c'
+PASS compileAndSerialize('a &= (b + c)') is 'a &= (b + c)'
+FAIL compileAndSerialize('a + b &= c') should throw an exception. Was a + b &= c.
+PASS compileAndSerialize('(a + b) &= c') is '(a + b) &= c'
+PASS compileAndSerialize('a + (b &= c)') is 'a + (b &= c)'
+PASS compileAndSerialize('a ^= b ^= c') is 'a ^= b ^= c'
+PASS compileAndSerialize('(a ^= b) ^= c') is '(a ^= b) ^= c'
+PASS compileAndSerialize('a ^= (b ^= c)') is 'a ^= (b ^= c)'
+PASS compileAndSerialize('a = b ^= c') is 'a = b ^= c'
+PASS compileAndSerialize('(a = b) ^= c') is '(a = b) ^= c'
+PASS compileAndSerialize('a = (b ^= c)') is 'a = (b ^= c)'
+PASS compileAndSerialize('a ^= b + c') is 'a ^= b + c'
+PASS compileAndSerialize('(a ^= b) + c') is '(a ^= b) + c'
+PASS compileAndSerialize('a ^= (b + c)') is 'a ^= (b + c)'
+FAIL compileAndSerialize('a + b ^= c') should throw an exception. Was a + b ^= c.
+PASS compileAndSerialize('(a + b) ^= c') is '(a + b) ^= c'
+PASS compileAndSerialize('a + (b ^= c)') is 'a + (b ^= c)'
+PASS compileAndSerialize('a |= b |= c') is 'a |= b |= c'
+PASS compileAndSerialize('(a |= b) |= c') is '(a |= b) |= c'
+PASS compileAndSerialize('a |= (b |= c)') is 'a |= (b |= c)'
+PASS compileAndSerialize('a = b |= c') is 'a = b |= c'
+PASS compileAndSerialize('(a = b) |= c') is '(a = b) |= c'
+PASS compileAndSerialize('a = (b |= c)') is 'a = (b |= c)'
+PASS compileAndSerialize('a |= b + c') is 'a |= b + c'
+PASS compileAndSerialize('(a |= b) + c') is '(a |= b) + c'
+PASS compileAndSerialize('a |= (b + c)') is 'a |= (b + c)'
+FAIL compileAndSerialize('a + b |= c') should throw an exception. Was a + b |= c.
+PASS compileAndSerialize('(a + b) |= c') is '(a + b) |= c'
+PASS compileAndSerialize('a + (b |= c)') is 'a + (b |= c)'
+PASS compileAndSerialize('delete a + b') is 'delete a + b'
+PASS compileAndSerialize('(delete a) + b') is '(delete a) + b'
+PASS compileAndSerialize('delete (a + b)') is 'delete (a + b)'
+PASS compileAndSerialize('!delete a') is '!delete a'
+PASS compileAndSerialize('!(delete a)') is '!(delete a)'
+PASS compileAndSerialize('void a + b') is 'void a + b'
+PASS compileAndSerialize('(void a) + b') is '(void a) + b'
+PASS compileAndSerialize('void (a + b)') is 'void (a + b)'
+PASS compileAndSerialize('!void a') is '!void a'
+PASS compileAndSerialize('!(void a)') is '!(void a)'
+PASS compileAndSerialize('typeof a + b') is 'typeof a + b'
+PASS compileAndSerialize('(typeof a) + b') is '(typeof a) + b'
+PASS compileAndSerialize('typeof (a + b)') is 'typeof (a + b)'
+PASS compileAndSerialize('!typeof a') is '!typeof a'
+PASS compileAndSerialize('!(typeof a)') is '!(typeof a)'
+PASS compileAndSerialize('++a + b') is '++a + b'
+PASS compileAndSerialize('(++a) + b') is '(++a) + b'
+PASS compileAndSerialize('++(a + b)') is '++(a + b)'
+PASS compileAndSerialize('!++a') is '!++a'
+PASS compileAndSerialize('!(++a)') is '!(++a)'
+PASS compileAndSerialize('--a + b') is '--a + b'
+PASS compileAndSerialize('(--a) + b') is '(--a) + b'
+PASS compileAndSerialize('--(a + b)') is '--(a + b)'
+PASS compileAndSerialize('!--a') is '!--a'
+PASS compileAndSerialize('!(--a)') is '!(--a)'
+PASS compileAndSerialize('+ a + b') is '+ a + b'
+PASS compileAndSerialize('(+ a) + b') is '(+ a) + b'
+PASS compileAndSerialize('+ (a + b)') is '+ (a + b)'
+PASS compileAndSerialize('!+ a') is '!+ a'
+PASS compileAndSerialize('!(+ a)') is '!(+ a)'
+PASS compileAndSerialize('- a + b') is '- a + b'
+PASS compileAndSerialize('(- a) + b') is '(- a) + b'
+PASS compileAndSerialize('- (a + b)') is '- (a + b)'
+PASS compileAndSerialize('!- a') is '!- a'
+PASS compileAndSerialize('!(- a)') is '!(- a)'
+PASS compileAndSerialize('~a + b') is '~a + b'
+PASS compileAndSerialize('(~a) + b') is '(~a) + b'
+PASS compileAndSerialize('~(a + b)') is '~(a + b)'
+PASS compileAndSerialize('!~a') is '!~a'
+PASS compileAndSerialize('!(~a)') is '!(~a)'
+PASS compileAndSerialize('!a + b') is '!a + b'
+PASS compileAndSerialize('(!a) + b') is '(!a) + b'
+PASS compileAndSerialize('!(a + b)') is '!(a + b)'
+PASS compileAndSerialize('!!a') is '!!a'
+PASS compileAndSerialize('!(!a)') is '!(!a)'
+PASS compileAndSerialize('!a++') is '!a++'
+PASS compileAndSerialize('!(a++)') is '!(a++)'
+PASS compileAndSerialize('(!a)++') is '(!a)++'
+PASS compileAndSerialize('!a--') is '!a--'
+PASS compileAndSerialize('!(a--)') is '!(a--)'
+PASS compileAndSerialize('(!a)--') is '(!a)--'
+PASS compileAndSerialize('(-1)[a]') is '(-1)[a]'
+PASS compileAndSerialize('(-1)[a] = b') is '(-1)[a] = b'
+PASS compileAndSerialize('(-1)[a] += b') is '(-1)[a] += b'
+PASS compileAndSerialize('(-1)[a]++') is '(-1)[a]++'
+PASS compileAndSerialize('++(-1)[a]') is '++(-1)[a]'
+PASS compileAndSerialize('(-1)[a]()') is '(-1)[a]()'
+PASS compileAndSerialize('new (-1)()') is 'new (-1)()'
+PASS compileAndSerialize('(-1).a') is '(-1).a'
+PASS compileAndSerialize('(-1).a = b') is '(-1).a = b'
+PASS compileAndSerialize('(-1).a += b') is '(-1).a += b'
+PASS compileAndSerialize('(-1).a++') is '(-1).a++'
+PASS compileAndSerialize('++(-1).a') is '++(-1).a'
+PASS compileAndSerialize('(-1).a()') is '(-1).a()'
+PASS compileAndSerialize('(- 0)[a]') is '(- 0)[a]'
+PASS compileAndSerialize('(- 0)[a] = b') is '(- 0)[a] = b'
+PASS compileAndSerialize('(- 0)[a] += b') is '(- 0)[a] += b'
+PASS compileAndSerialize('(- 0)[a]++') is '(- 0)[a]++'
+PASS compileAndSerialize('++(- 0)[a]') is '++(- 0)[a]'
+PASS compileAndSerialize('(- 0)[a]()') is '(- 0)[a]()'
+PASS compileAndSerialize('new (- 0)()') is 'new (- 0)()'
+PASS compileAndSerialize('(- 0).a') is '(- 0).a'
+PASS compileAndSerialize('(- 0).a = b') is '(- 0).a = b'
+PASS compileAndSerialize('(- 0).a += b') is '(- 0).a += b'
+PASS compileAndSerialize('(- 0).a++') is '(- 0).a++'
+PASS compileAndSerialize('++(- 0).a') is '++(- 0).a'
+PASS compileAndSerialize('(- 0).a()') is '(- 0).a()'
+PASS compileAndSerialize('(1)[a]') is '(1)[a]'
+PASS compileAndSerialize('(1)[a] = b') is '(1)[a] = b'
+PASS compileAndSerialize('(1)[a] += b') is '(1)[a] += b'
+PASS compileAndSerialize('(1)[a]++') is '(1)[a]++'
+PASS compileAndSerialize('++(1)[a]') is '++(1)[a]'
+PASS compileAndSerialize('(1)[a]()') is '(1)[a]()'
+PASS compileAndSerialize('new (1)()') is 'new (1)()'
+PASS compileAndSerialize('(1).a') is '(1).a'
+PASS compileAndSerialize('(1).a = b') is '(1).a = b'
+PASS compileAndSerialize('(1).a += b') is '(1).a += b'
+PASS compileAndSerialize('(1).a++') is '(1).a++'
+PASS compileAndSerialize('++(1).a') is '++(1).a'
+PASS compileAndSerialize('(1).a()') is '(1).a()'
+PASS compileAndSerialize('(-1) = a') is '(-1) = a'
+PASS compileAndSerialize('(- 0) = a') is '(- 0) = a'
+PASS compileAndSerialize('1 = a') is '1 = a'
+PASS compileAndSerialize('(-1) *= a') is '(-1) *= a'
+PASS compileAndSerialize('(- 0) *= a') is '(- 0) *= a'
+PASS compileAndSerialize('1 *= a') is '1 *= a'
+PASS compileAndSerialize('(-1) /= a') is '(-1) /= a'
+PASS compileAndSerialize('(- 0) /= a') is '(- 0) /= a'
+PASS compileAndSerialize('1 /= a') is '1 /= a'
+PASS compileAndSerialize('(-1) %= a') is '(-1) %= a'
+PASS compileAndSerialize('(- 0) %= a') is '(- 0) %= a'
+PASS compileAndSerialize('1 %= a') is '1 %= a'
+PASS compileAndSerialize('(-1) += a') is '(-1) += a'
+PASS compileAndSerialize('(- 0) += a') is '(- 0) += a'
+PASS compileAndSerialize('1 += a') is '1 += a'
+PASS compileAndSerialize('(-1) -= a') is '(-1) -= a'
+PASS compileAndSerialize('(- 0) -= a') is '(- 0) -= a'
+PASS compileAndSerialize('1 -= a') is '1 -= a'
+PASS compileAndSerialize('(-1) <<= a') is '(-1) <<= a'
+PASS compileAndSerialize('(- 0) <<= a') is '(- 0) <<= a'
+PASS compileAndSerialize('1 <<= a') is '1 <<= a'
+PASS compileAndSerialize('(-1) >>= a') is '(-1) >>= a'
+PASS compileAndSerialize('(- 0) >>= a') is '(- 0) >>= a'
+PASS compileAndSerialize('1 >>= a') is '1 >>= a'
+PASS compileAndSerialize('(-1) >>>= a') is '(-1) >>>= a'
+PASS compileAndSerialize('(- 0) >>>= a') is '(- 0) >>>= a'
+PASS compileAndSerialize('1 >>>= a') is '1 >>>= a'
+PASS compileAndSerialize('(-1) &= a') is '(-1) &= a'
+PASS compileAndSerialize('(- 0) &= a') is '(- 0) &= a'
+PASS compileAndSerialize('1 &= a') is '1 &= a'
+PASS compileAndSerialize('(-1) ^= a') is '(-1) ^= a'
+PASS compileAndSerialize('(- 0) ^= a') is '(- 0) ^= a'
+PASS compileAndSerialize('1 ^= a') is '1 ^= a'
+PASS compileAndSerialize('(-1) |= a') is '(-1) |= a'
+PASS compileAndSerialize('(- 0) |= a') is '(- 0) |= a'
+PASS compileAndSerialize('1 |= a') is '1 |= a'
+PASS compileAndSerializeLeftmostTest('({ }).x') is '({ }).x'
+PASS compileAndSerializeLeftmostTest('x = { }') is 'x = { }'
+PASS compileAndSerializeLeftmostTest('(function () { })()') is '(function () { })()'
+PASS compileAndSerializeLeftmostTest('x = function () { }') is 'x = function () { }'
+PASS compileAndSerializeLeftmostTest('var a') is 'var a'
+PASS compileAndSerializeLeftmostTest('var a = 1') is 'var a = 1'
+PASS compileAndSerializeLeftmostTest('var a, b') is 'var a, b'
+PASS compileAndSerializeLeftmostTest('var a = 1, b = 2') is 'var a = 1, b = 2'
+PASS compileAndSerializeLeftmostTest('var a, b, c') is 'var a, b, c'
+PASS compileAndSerializeLeftmostTest('var a = 1, b = 2, c = 3') is 'var a = 1, b = 2, c = 3'
+PASS compileAndSerializeLeftmostTest('const a = 1') is 'const a = 1'
+PASS compileAndSerializeLeftmostTest('const a = (1, 2)') is 'const a = (1, 2)'
+PASS compileAndSerializeLeftmostTest('const a, b = 1') is 'const a, b = 1'
+PASS compileAndSerializeLeftmostTest('const a = 1, b') is 'const a = 1, b'
+PASS compileAndSerializeLeftmostTest('const a = 1, b = 1') is 'const a = 1, b = 1'
+PASS compileAndSerializeLeftmostTest('const a = (1, 2), b = 1') is 'const a = (1, 2), b = 1'
+PASS compileAndSerializeLeftmostTest('const a = 1, b = (1, 2)') is 'const a = 1, b = (1, 2)'
+PASS compileAndSerializeLeftmostTest('const a = (1, 2), b = (1, 2)') is 'const a = (1, 2), b = (1, 2)'
+PASS compileAndSerialize('(function () { new (a.b()).c })') is '(function () { new (a.b()).c })'
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks that parentheses are preserved when significant, and not added where inappropriate. " +
+"We need this test because the JavaScriptCore parser removes all parentheses and the serializer then adds them back."
+);
+
+function compileAndSerialize(expression)
+{
+ var f = eval("(function () { return " + expression + "; })");
+ var serializedString = f.toString();
+ serializedString = serializedString.replace(/[ \t\r\n]+/g, " ");
+ serializedString = serializedString.replace("function () { return ", "");
+ serializedString = serializedString.replace("; }", "");
+ return serializedString;
+}
+
+function compileAndSerializeLeftmostTest(expression)
+{
+ var f = eval("(function () { " + expression + "; })");
+ var serializedString = f.toString();
+ serializedString = serializedString.replace(/[ \t\r\n]+/g, " ");
+ serializedString = serializedString.replace("function () { ", "");
+ serializedString = serializedString.replace("; }", "");
+ return serializedString;
+}
+
+var removesExtraParentheses = compileAndSerialize("(a + b) + c") == "a + b + c";
+
+function testKeepParentheses(expression)
+{
+ shouldBe("compileAndSerialize('" + expression + "')",
+ "'" + expression + "'");
+}
+
+function testOptionalParentheses(expression)
+{
+ stripped_expression = removesExtraParentheses
+ ? expression.replace(/\(/g, '').replace(/\)/g, '')
+ : expression;
+ shouldBe("compileAndSerialize('" + expression + "')",
+ "'" + stripped_expression + "'");
+}
+
+function testLeftAssociativeSame(opA, opB)
+{
+ testKeepParentheses("a " + opA + " b " + opB + " c");
+ testOptionalParentheses("(a " + opA + " b) " + opB + " c");
+ testKeepParentheses("a " + opA + " (b " + opB + " c)");
+}
+
+function testRightAssociativeSame(opA, opB)
+{
+ testKeepParentheses("a " + opA + " b " + opB + " c");
+ testKeepParentheses("(a " + opA + " b) " + opB + " c");
+ testOptionalParentheses("a " + opA + " (b " + opB + " c)");
+}
+
+function testHigherFirst(opHigher, opLower)
+{
+ testKeepParentheses("a " + opHigher + " b " + opLower + " c");
+ testOptionalParentheses("(a " + opHigher + " b) " + opLower + " c");
+ testKeepParentheses("a " + opHigher + " (b " + opLower + " c)");
+}
+
+function testLowerFirst(opLower, opHigher)
+{
+ testKeepParentheses("a " + opLower + " b " + opHigher + " c");
+ testKeepParentheses("(a " + opLower + " b) " + opHigher + " c");
+ testOptionalParentheses("a " + opLower + " (b " + opHigher + " c)");
+}
+
+var binaryOperators = [
+ [ "*", "/", "%" ], [ "+", "-" ],
+ [ "<<", ">>", ">>>" ],
+ [ "<", ">", "<=", ">=", "instanceof", "in" ],
+ [ "==", "!=", "===", "!==" ],
+ [ "&" ], [ "^" ], [ "|" ],
+ [ "&&" ], [ "||" ]
+];
+
+for (i = 0; i < binaryOperators.length; ++i) {
+ var ops = binaryOperators[i];
+ for (j = 0; j < ops.length; ++j) {
+ var op = ops[j];
+ testLeftAssociativeSame(op, op);
+ if (j != 0)
+ testLeftAssociativeSame(ops[0], op);
+ if (i < binaryOperators.length - 1) {
+ var nextOps = binaryOperators[i + 1];
+ if (j == 0)
+ for (k = 0; k < nextOps.length; ++k)
+ testHigherFirst(op, nextOps[k]);
+ else
+ testHigherFirst(op, nextOps[0]);
+ }
+ }
+}
+
+var assignmentOperators = [ "=", "*=", "/=" , "%=", "+=", "-=", "<<=", ">>=", ">>>=", "&=", "^=", "|=" ];
+
+for (i = 0; i < assignmentOperators.length; ++i) {
+ var op = assignmentOperators[i];
+ testRightAssociativeSame(op, op);
+ if (i != 0)
+ testRightAssociativeSame("=", op);
+ testLowerFirst(op, "+");
+ shouldThrow("compileAndSerialize('a + b " + op + " c')");
+ testKeepParentheses("(a + b) " + op + " c");
+ testKeepParentheses("a + (b " + op + " c)");
+}
+
+var prefixOperators = [ "delete", "void", "typeof", "++", "--", "+", "-", "~", "!" ];
+var prefixOperatorSpace = [ " ", " ", " ", "", "", " ", " ", "", "" ];
+
+for (i = 0; i < prefixOperators.length; ++i) {
+ var op = prefixOperators[i] + prefixOperatorSpace[i];
+ testKeepParentheses("" + op + "a + b");
+ testOptionalParentheses("(" + op + "a) + b");
+ testKeepParentheses("" + op + "(a + b)");
+ testKeepParentheses("!" + op + "a");
+ testOptionalParentheses("!(" + op + "a)");
+}
+
+
+testKeepParentheses("!a++");
+testOptionalParentheses("!(a++)");
+testKeepParentheses("(!a)++");
+
+testKeepParentheses("!a--");
+testOptionalParentheses("!(a--)");
+testKeepParentheses("(!a)--");
+
+testKeepParentheses("(-1)[a]");
+testKeepParentheses("(-1)[a] = b");
+testKeepParentheses("(-1)[a] += b");
+testKeepParentheses("(-1)[a]++");
+testKeepParentheses("++(-1)[a]");
+testKeepParentheses("(-1)[a]()");
+
+testKeepParentheses("new (-1)()");
+
+testKeepParentheses("(-1).a");
+testKeepParentheses("(-1).a = b");
+testKeepParentheses("(-1).a += b");
+testKeepParentheses("(-1).a++");
+testKeepParentheses("++(-1).a");
+testKeepParentheses("(-1).a()");
+
+testKeepParentheses("(- 0)[a]");
+testKeepParentheses("(- 0)[a] = b");
+testKeepParentheses("(- 0)[a] += b");
+testKeepParentheses("(- 0)[a]++");
+testKeepParentheses("++(- 0)[a]");
+testKeepParentheses("(- 0)[a]()");
+
+testKeepParentheses("new (- 0)()");
+
+testKeepParentheses("(- 0).a");
+testKeepParentheses("(- 0).a = b");
+testKeepParentheses("(- 0).a += b");
+testKeepParentheses("(- 0).a++");
+testKeepParentheses("++(- 0).a");
+testKeepParentheses("(- 0).a()");
+
+testOptionalParentheses("(1)[a]");
+testOptionalParentheses("(1)[a] = b");
+testOptionalParentheses("(1)[a] += b");
+testOptionalParentheses("(1)[a]++");
+testOptionalParentheses("++(1)[a]");
+
+shouldBe("compileAndSerialize('(1)[a]()')",
+ removesExtraParentheses ? "'1[a]()'" : "'(1)[a]()'");
+
+shouldBe("compileAndSerialize('new (1)()')",
+ removesExtraParentheses ? "'new 1()'" : "'new (1)()'");
+
+testKeepParentheses("(1).a");
+testKeepParentheses("(1).a = b");
+testKeepParentheses("(1).a += b");
+testKeepParentheses("(1).a++");
+testKeepParentheses("++(1).a");
+testKeepParentheses("(1).a()");
+
+for (i = 0; i < assignmentOperators.length; ++i) {
+ var op = assignmentOperators[i];
+ testKeepParentheses("(-1) " + op + " a");
+ testKeepParentheses("(- 0) " + op + " a");
+ testKeepParentheses("1 " + op + " a");
+}
+
+shouldBe("compileAndSerializeLeftmostTest('({ }).x')", "'({ }).x'");
+shouldBe("compileAndSerializeLeftmostTest('x = { }')", "'x = { }'");
+shouldBe("compileAndSerializeLeftmostTest('(function () { })()')", "'(function () { })()'");
+shouldBe("compileAndSerializeLeftmostTest('x = function () { }')", "'x = function () { }'");
+
+shouldBe("compileAndSerializeLeftmostTest('var a')", "'var a'");
+shouldBe("compileAndSerializeLeftmostTest('var a = 1')", "'var a = 1'");
+shouldBe("compileAndSerializeLeftmostTest('var a, b')", "'var a, b'");
+shouldBe("compileAndSerializeLeftmostTest('var a = 1, b = 2')", "'var a = 1, b = 2'");
+shouldBe("compileAndSerializeLeftmostTest('var a, b, c')", "'var a, b, c'");
+shouldBe("compileAndSerializeLeftmostTest('var a = 1, b = 2, c = 3')", "'var a = 1, b = 2, c = 3'");
+
+shouldBe("compileAndSerializeLeftmostTest('const a = 1')", "'const a = 1'");
+shouldBe("compileAndSerializeLeftmostTest('const a = (1, 2)')", "'const a = (1, 2)'");
+shouldBe("compileAndSerializeLeftmostTest('const a, b = 1')", "'const a, b = 1'");
+shouldBe("compileAndSerializeLeftmostTest('const a = 1, b')", "'const a = 1, b'");
+shouldBe("compileAndSerializeLeftmostTest('const a = 1, b = 1')", "'const a = 1, b = 1'");
+shouldBe("compileAndSerializeLeftmostTest('const a = (1, 2), b = 1')", "'const a = (1, 2), b = 1'");
+shouldBe("compileAndSerializeLeftmostTest('const a = 1, b = (1, 2)')", "'const a = 1, b = (1, 2)'");
+shouldBe("compileAndSerializeLeftmostTest('const a = (1, 2), b = (1, 2)')", "'const a = (1, 2), b = (1, 2)'");
+
+shouldBe("compileAndSerialize('(function () { new (a.b()).c })')", "'(function () { new (a.b()).c })'");
--- /dev/null
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks that functions re-string-ify in a way that is syntactically compatible with concatenation.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+FAIL (function(){return}).toString() should be function () {return;}. Was function (){return}.
+FAIL (function(){return }).toString() should be function () {return; }. Was function (){return }.
+FAIL (function(){return
+}).toString() should be function () {return;
+}. Was function (){return
+}.
+FAIL (function(){}).toString() should be function () {}. Was function (){}.
+FAIL (function(){ }).toString() should be function () { }. Was function (){ }.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks that functions re-string-ify in a way that is syntactically " +
+"compatible with concatenation."
+);
+
+shouldBe("(function(){return}).toString()", "'function () {return;}'");
+shouldBe("(function(){return }).toString()", "'function () {return; }'");
+shouldBe("(function(){return" + "\n" + "}).toString()", "'function () {return;" + "\\n" + "}'");
+shouldBe("(function(){}).toString()", "'function () {}'");
+shouldBe("(function(){ }).toString()", "'function () { }'");
--- /dev/null
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+PASS function f() { g()++; } f.toString() is 'function f() { g()++; }'
+PASS function f() { g()--; } f.toString() is 'function f() { g()--; }'
+PASS function f() { ++g(); } f.toString() is 'function f() { ++g(); }'
+PASS function f() { --g(); } f.toString() is 'function f() { --g(); }'
+PASS function f() { g() = 1; } f.toString() is 'function f() { g() = 1; }'
+PASS function f() { g() += 1; } f.toString() is 'function f() { g() += 1; }'
+FAIL g()++ should throw ReferenceError: Postfix ++ operator applied to value that is not a reference.. Threw exception ReferenceError: Invalid left-hand side expression in postfix operation.
+FAIL g()-- should throw ReferenceError: Postfix -- operator applied to value that is not a reference.. Threw exception ReferenceError: Invalid left-hand side expression in postfix operation.
+FAIL ++g() should throw ReferenceError: Prefix ++ operator applied to value that is not a reference.. Threw exception ReferenceError: Invalid left-hand side expression in prefix operation.
+FAIL --g() should throw ReferenceError: Prefix -- operator applied to value that is not a reference.. Threw exception ReferenceError: Invalid left-hand side expression in prefix operation.
+FAIL g() = 1 should throw ReferenceError: Left side of assignment is not a reference.. Threw exception ReferenceError: Invalid left-hand side in assignment.
+FAIL g() += 1 should throw ReferenceError: Left side of assignment is not a reference.. Threw exception ReferenceError: Invalid left-hand side in assignment.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+shouldBe("function f() { g()++; } f.toString()", "'function f() { g()++; }'");
+shouldBe("function f() { g()--; } f.toString()", "'function f() { g()--; }'");
+shouldBe("function f() { ++g(); } f.toString()", "'function f() { ++g(); }'");
+shouldBe("function f() { --g(); } f.toString()", "'function f() { --g(); }'");
+shouldBe("function f() { g() = 1; } f.toString()", "'function f() { g() = 1; }'");
+shouldBe("function f() { g() += 1; } f.toString()", "'function f() { g() += 1; }'");
+shouldThrow("g()++", "'ReferenceError: Postfix ++ operator applied to value that is not a reference.'");
+shouldThrow("g()--", "'ReferenceError: Postfix -- operator applied to value that is not a reference.'");
+shouldThrow("++g()", "'ReferenceError: Prefix ++ operator applied to value that is not a reference.'");
+shouldThrow("--g()", "'ReferenceError: Prefix -- operator applied to value that is not a reference.'");
+shouldThrow("g() = 1", "'ReferenceError: Left side of assignment is not a reference.'");
+shouldThrow("g() += 1", "'ReferenceError: Left side of assignment is not a reference.'");
--- /dev/null
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This is a test case for bugs 55346, 70889, and 75452.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS ({}).toString.call(Error.prototype) is "[object Error]"
+PASS ({}).toString.call(RangeError.prototype) is "[object Error]"
+PASS err.toString() is "message"
+PASS err.hasOwnProperty('message') is false
+PASS err.hasOwnProperty('message') is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'This is a test case for bugs <a href="https://bugs.webkit.org/show_bug.cgi?id=55346">55346</a>, <a href="https://bugs.webkit.org/show_bug.cgi?id=70889">70889</a>, and <a href="https://bugs.webkit.org/show_bug.cgi?id=75452">75452</a>.'
+);
+
+shouldBe("({}).toString.call(Error.prototype)", '"[object Error]"');
+shouldBe("({}).toString.call(RangeError.prototype)", '"[object Error]"');
+
+var err = new Error("message");
+err.name = "";
+shouldBe("err.toString()", '"message"');
+
+var err = new Error();
+shouldBeFalse("err.hasOwnProperty('message')");
+
+var err = new Error(undefined);
+shouldBeFalse("err.hasOwnProperty('message')");
--- /dev/null
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+PASS (0.0).toString(4) is "0"
+PASS (-0.0).toString(4) is "0"
+PASS (0.0).toString() is "0"
+PASS (-0.0).toString() is "0"
+PASS (1234.567).toString() is "1234.567"
+PASS (1234.567).toString(0) threw exception RangeError: toString() radix argument must be between 2 and 36.
+PASS (1234.567).toString(null) threw exception RangeError: toString() radix argument must be between 2 and 36.
+PASS (1234.567).toString(false) threw exception RangeError: toString() radix argument must be between 2 and 36.
+PASS (1234.567).toString('foo') threw exception RangeError: toString() radix argument must be between 2 and 36.
+PASS (1234.567).toString(nan) threw exception RangeError: toString() radix argument must be between 2 and 36.
+PASS (1234.567).toString(1) threw exception RangeError: toString() radix argument must be between 2 and 36.
+PASS (1234.567).toString(true) threw exception RangeError: toString() radix argument must be between 2 and 36.
+PASS (1234.567).toString('1') threw exception RangeError: toString() radix argument must be between 2 and 36.
+PASS (1234.567).toString(2) is "10011010010.1001000100100110111010010111100011010101"
+FAIL (1234.567).toString(3) should be 1200201.120022100021001021021002202. Was 1200201.1200221000210010210210022012001102222001211021211122102120100010210200200010021222011100022102111111220000120121020202022222012221002020211012221122112000100011101001001002222022012020010220022122022110202002002202222202212010021201212012220021121111000000211200200222000112012112202111102102221120000212111202201022111021100221120010011220020100220021221110002212111200002212221102221002020220001110120021210211010221211001220011121210110000101120102000202011022002220222101010221211000120010022102002210021221002122211021120201111101202110100001121111120122120122110201201222020221011002121022200201210122000022020200001000000221221112200220100222120210020001201202121010200011210020001210210121202022102101110122020100020021222102012012222212121111121121121101212122021001010222201200221200011220111121111111102022222110022222112200020021100202210020012212001001102111111221201020222201000210220121000100220121111222121011110101102001002022021011201200101200001210210121000020121110102110210201010021122012201111111201102000222010212012002220010220121211212002120011021000212221221222212221011021.
+PASS (1234.567).toString(4) is "103102.21010212322113203111"
+PASS (1234.567).toString(4.9) is "103102.21010212322113203111"
+FAIL (1234.567).toString(5) should be 14414.240414141414141414. Was 14414.2404141414141414142001330114424340310401243302440231242000113043123113241003203103222323344012414440233013014243114024103434404401442341212210040423132144332233123403444214333034032120122342101304444100213130221312124302310000121420313130233324403331401413403104022134310103342230131122120400243010014400433301114434003131440210024041411240133114442212311404331144241232301112122233011302123243314440102021213421324210233021414231204242131230022200231142043201230104303340241341442024130004234014013344014122213220012003331442013023201013321330311133442440004210432424442444401411440310341433001141420244030003112023323232320133200241102233100204304444111043004140140141144243401313223011344420021202301444431004242024100001143300134104422421212224430111011311014301200423321110111323443032012124004240034223202410113442322244113243224440124111213032021200234200040422323123042101210040023131304002301141034233014440442324424432201121202113441433213220402344201401121222133443421241121332411332403342011024024040100401130140011130024320113121001032003303020321103014011343210443044311143011222133112.
+FAIL (1234.567).toString(6) should be 5414.32224554134430233. Was 5414.3222455413443023323355441432422515541513.
+FAIL (1234.567).toString(7) should be 3412.365323661111653. Was 3412.3653236611116525003006322001106262526423502236603135500642356240035335103351460444366123312630635446606624066252003331211022200461254221636430052553433322130415044420314121050016230251621043431515223434032660363546150133624211620331415335465112653210536541511650034050150553414415665203055401246562556516133264533422365114510442555452630202303465460006656451212301252554640421611202036412061014401243411616220124332503616404021512066541520132022166233352620436006601654615351142605225051331456655265644105464440620612132004102631611401411525363001644642360540514225416521440326255225162603053331303316510461104502455554160645203341631356523430651650156421214464434124323364312205115015543452230222456662313645241632222032243101333560524353153562141365266513365213006245146623530264344641542505545411201433543030321150013666622601245411100615134643634103435262652604406356254334116220032346102205431241506222463415513362655416243154405541220162461435601431260412250030100014066644353326405410000146050110633266400161543564314366114435655151420653606640546532414512600015136011520161555441252606026212.
+PASS (1234.567).toString(8) is "2322.44223351361524"
+FAIL (1234.567).toString(9) should be 1621.50830703723265. Was 1621.5083070372326504286173774837630372060325814027244480051722228818706673584846030433103286816612627827366208288276325176580754400075062801517567437284602545263843732750315621080784308545008584283222604350772412773180455340034636066426282833385401610836270783258424664435241004744657657365186683407728065356026660100085748081087670605167712015320172355227234356630625836518877744754735556703388162760481454444228840887560624068320576104244485122863072653032654487714334203226715161160172353021741242363324818144464202812516280381775507613702585788583424881125807185888538676210831486144562375864261345147383222322272055634547363306683408365573860425234373548873681638548110246868604100746883165721244675751048012126782157878154353713371758462432003183582526011586844378053200827331008624516010554456712807563108347046657674665651131422144550256168047014215677030141443587008105610375340533658384385003266047014066632784512440300865616602765820164258867505802667163243085767301453006274266560838042613666653021737412176552874258744101065687672444665763184042125577415816217234264077124502247240847650642.
+PASS (1234.567).toString(10) is "1234.567"
+FAIL (1234.567).toString(11) should be a22.62674a0a5885. Was a22.62674a0a58849145684a462507384219787878954737689989a347647680876095a2345860885046031287a9a1694a397131934142026745166a704344773a73700802694683125343988941755546a814849594a364029607aa0771a2447068930aa55775996897257a3855716340286a996939669868425056a42944a4543725202099605343316045838659207562a00519a4023622a82606539a94736645317056aa9482468a996994a347471153a71a8684a881786634929410231554133396466810a1310137999aa9911076821099a20247541213715118123019574636441209452414914a696a2969849328944530a34844533922965306848a95a2189454316192787338072241118032120757808a2588a900a7419391324061a544aa1a74a8a9373669362927a4020a628a7341a920559382a473291439394a52447455278191a0074944991223446a09529857938a8944181884714a37592416309652596060a15950167253414370287593729386550380730aa21059a04131a274936a843348919329612133271998378a57529794259a5644a51915812aa102320721422511533436064026a268a4677401310870620386925a6224540a78a8032945065017470785084793207763a3a02a9449127443659851a98297920300353402081344029399a9121852511105716a9325013222074551a466973999087784363a362609a1976a4869aa33009a6770a4896225643669258159743602a1919a1a561.
+FAIL (1234.567).toString(12) should be 86a.697938b17701. Was 86a.697938b1770127290b99.
+FAIL (1234.567).toString(13) should be 73c.74a91191a65. Was 73c.74a91191a64cb86850bc08a694340c765979634a010706991c088a61018b29a16a74093795640793846a7520587816ba56405b7a872869b395c336ca519474baa17539169173a880b49c178074ba551a5781a115152793324291b9260b60333573955737845b03a2321a65277a780923b262898597973bc4b669705680a0b1b88b366b6386c96208979c14a9632c516326883522840165b38c8b415b7a339abc6ca7051b0ac70277244a05477b8a0a09cab072a27b920389477b65616831116514419c44512967a92b39ca73ac01c461b6735ca31bcc17aba7a76412a7a599a8c217c6a74a67aa6c4664432065732caa7c24a1856170748647c2b049c19c572323c03301c283b69cb46b09a045b444a4c7c82901656583267697389b318a73b171a18406324a78b5c478a9c67c99c877b107448cac651945570a83220baa4a3048157189845cb66b7361c129cc3016c52c4b858cb0874ca122b8b7ba9333aa946391a24b8c86958968773bc18278022b1ba76b24727c2cca55442697549392a152927139208c12745bc26a5c17432332990a3267915b06331374a7a84b9469c0208358290337c99cb323a9076a284c5b318bc826989c8b8663bc249a9c687395504958825c1a541b08710bb647288ca4c1179cc2ac84761123a7b275910cb7a43c18c293b1c754b01cb9a211767356a626887980b384822c14a57494331946a5916c953ba85b08461b96168c8296237065623c3950a939746c6c200b5b1a6b60c671c6b91b3.
+FAIL (1234.567).toString(14) should be 642.7d1bc2caa757. Was 642.7d1bc2caa75735ccb458a0d0b6bb6131b9114537.
+FAIL (1234.567).toString(15) should be 574.87895959596. Was 574.87895959595a4bbac80bc1e90eeb5bc8c18b3dc77a5962116b159d66bbb7bd95a4c7984c63322434615e80235b8a482669a85e97218c41518e00eb898aba463593d3b4d00e7dc1d0343cd27161096dd810593669d1561982bcc35cda2e54c28de7759c1586adc867209b034293039e03bdce29cb6a8be7d65e09844094989a2d53663d122330bc94048d1bd67722a86db068a0679025d78db9312272c8b91671596d75d80c53331eb018579c83115c2d00581db910e8e4cb44c4c958c8d86dd59d55439b7c849da32130ded53a697a26a8dcea6b8ddc2ad047624bba922909d8c2d48460bc33a2e816d9ecde13d6d24ee6589b0ad9d696cc28753b8020ad21e86ac4363914adc4a87139ab188313439cd2ea8622b4bd54033e8a4a6e61a80c8229dc37399d73978d1d3443b31c987e158904214cce785d84e22e2a60623b141292e67575b1d1a050dbccd02c4732638d24b4c226e9dcc1a387cd7d2a1e797e0757a9de108846719aab2999b58669b21ab06cee3ac6e29990781505958595a4ce0be0710c5b2190365a2dbbbc5eea4993665e1d25266de37c19605488a2b1ce054361097e63c08ebbb7de7092476ddb0b52c89470a957b999b34b2bcb730053e89ed48789d9a20405b360d084b3805659900bd8b831852929bb542e45e3836c26c423e8421724619c2a9725e437c96a83484961985ddc2d4d8a060dae117d710c53e729a934964b59dd977b203a05e87c87d1839c0254d34775cd6becc912a817d21719e47a7.
+PASS (1234.567).toString(16) is "4d2.9126e978d5"
+FAIL (1234.567).toString(17) should be 44a.9aeb6faa0da. Was 44a.9aeb6faa0da2c5e88788d0f52d2ebc023ae5494926de55072ee4114fb38ga5258dd24a1ga4250bb32247g582114g92gc99462cbb5d8584a21d09eaadg00dc40ec938ggdb9e2091gf2ac482442fbcbc28cde82aa6e79e6a57af38e51fg176526dabc6549900c8976140bb4f5cd0d9c642bdbb7e7135d0ea35feb5805e7ba97975a1f2fa45f62e774307g760ec230e43064edg517gf7c9c93d24c43bg24094406b0b4792cg54a38f2b3065agg390efe33e7655f0288d30ec6b6cb994961625d18g636bf1g3443c2a9g5dc222c546c417a50b3e74df94d217bgeee8fad1cf5c2517g9e7babecd38b7092fd9cg519g029gf701a829e98g37402bc496dc3g0f1473564b33aeede5cc70ge58778ddad730feef409449acgd2a2bcc1917b797c94ec57eb4g8805e9708c5g57a78626029b5c247ae12gf8e7c54bd8024cfgc63a1f723d295cdf3gdf83gg17736a84614g1f68ddd1e4494f27d61ba5901f2384d6dedc7875b1babb8g09570fa3fd32f197d59fg499729261g8fgbg753ead4dafcff1fa8ef719a694db92a80f535c6128eg5659a68efdggd9b32ec6970e7cb41fbg99af02d38c1egb828407eegcc4cf985c77ggdf5gc5b54a8g7bdd4ag2318gdf3512ea7a41d1be2c665gbc5619342b9200f0gda9cd2c957af6d29gegee7228b7dbae7f6788c4eg4556a9ca2e13e75588g369ba1272a1b400201fbeb7d2d2d4a41f895e5fce3e2g7523d3573d67dagdee47b77g36106804a1857bd3g0a3e8bc8ebcf368f5382519e9af50.
+FAIL (1234.567).toString(18) should be 3ea.a3cd7102ac. Was 3ea.a3cd7102abf03dd3fcf0535638d9d313eha75b49.
+FAIL (1234.567).toString(19) should be 37i.aed102a04d. Was 37i.aed102a04d40782ebh1e2gc7i558c30fbe230dha57019e3a30e434220f7142ab33f6e4h3ec9ha57b474a52a9ddheb151594e7661418if1ggc24h26e6574769g148c278efc63ded13615bf6b1igddig1i6d0ffe64a9faad5b4gf240cd074b5hc3idafec1be77g4cb0755g8a0d652ceg9e749bdah56a2h5d3b94c74ff0b78aidgab693if10ab8h046425137ae5250f04c07dc22ifbda3fgdeh9a6e1d23d5ebga293ge581441eeb07b884197424b0c3gfech7820fbgg95eahdc3aceahci65i823d3h146dd80ieff23bi84bec219ea9he47ig3g309ci1h7f0i0i29bab4b1fhd19f9edf4if1f28a5b0bac87cihe28abbh1f4abegba22geh1c6h52c07e0ci5gi819e41d3d0fdee50h27c8hid03a95gcf4hac16188ae5ii719di85ad3a8fd059aa63b1ge9fc541hf69ee66gf0175b41ca1dhahaa39hc7id7c91dc8d09e7h0id0252532dg493g5f80a209c31f41c92ifh02i23iged06i6cf9777g3a10hif3i3217d32b00fii7ag4c8ee9iadf3201i366b4g23gc505g63c846b5102d5gg86dhh2d8eaf301ac13cg0f45d171ff479g1995f1hc7c7ii1i0b981e2e042b371a68hb64c5fh92hf30fd72e073bf439ae10dg4g739h170ddf394cbea90hh5490fia83d36bigf72a5ecf8cf126d54h7ghdeg5fic0i21db77hf88haefdb12h3222fc5c7d307707h5ceg3i01a17be5c31a5gb9dhad6ca6ica7c4ba4491504b7h21c2d83b2db3fi67chgi75d13f5c01dhcbgc34888bc70ecbe66ga096195gch11a936a622c4dccff7if4g8423hifh4.
+FAIL (1234.567).toString(20) should be 31e.b6g. Was 31e.b6g000000019g0ibbcg5.
+FAIL (1234.567).toString(21) should be 2gg.bj0kf5cfe9. Was 2gg.bj0kf5cfe91hk6fg383b1938ff8d00h4k9295959jcbj9c9282e840b169kji1eg32893afe063f0bbfkef2cbaegca035bf10b2aj3e6f6fg0kg35k8j82j82e08e6bi0c2ie8hhcgc57ih6aegb9bh7g808619k264h6hc29k812a70gk210g315d9bfh7if6h6ck9511b2kfb1fg4ed66gdigb641738d5a65gc748e1b688cigkcif51cb261hd4jhj5h4602e2addbie0d3d5dc26bhkecea961h4ia838e2bc92ag34a370c6ejaf27djiebghch29feekj17gf62g74d0h575g94aekd7kdfcbb55ejbb2e96bhj7b91450jaab24jii3aehaed6141ej3fccj8hfjk34kh5idghfb8d1kh39adaf2ce5eh756ej088gg9ab99fb332158dcd59b8ah108ei3431j6i11k092ciibkh2ih9dgh9b0922119c98684b38846630diejg60k1d93cg6ifk57e54akihbi89kh9h084ckcg5a7iieg6c01e90d09dbaik9b15k9kfj0igh00di8bcei4ifek38heea014f0ei2afa8ib08ii9eg2e0k71d43906f13bac08g9e6f22b76kihca1a13ff0eci4217h784ahgd5789j308bdgfjgekhkjhf6fe43dkih40hb2163i613dd4g1jfcb1ibc4i469ekbc38kh99i93k14ag7ikejfa528c38j90fhab8keai8cccikg5f69749934d2856i5908jh2hh99f5jig8hh2eh4ca8gh19k7h2g0a63hbc96d0kg27ke0759dc8107e63jd0ddkb8fe0kk0a04ciadaib51kf101i364i0ic1gedh145i2ghi4ie4j1agc3fgb5hckjj4ea5eke04hj59ie9e4hc4bce16ghf37g4b7fh3jh43bfc52a815bbe69e7h79gk8if00jb9020b4c7fb3bbb388h54kji9e14j7afjhi4ch547jdi53f89d7e5ckj.
+FAIL (1234.567).toString(22) should be 2c2.ca9937cak. Was 2c2.ca9937cak1d502399f2hka8a3c87h0kc76fa6j5b.
+FAIL (1234.567).toString(23) should be 27f.d0lfjb1a7c. Was 27f.d0lfjb1a7c6cabfj7gee33jdja9fg9cmjg378fhea19cfabg896fi0ab1gl839fil5cg8dj1hbgjagb0ilm88em2l9e3jg8hmm19ebmmjj6fk1l19fg7011c1j6ji3c6bl1lhk3khbl105c2d3ce1j2b3818aml72lch658elc4d1h9d94cj861eg75j0k59fdl596i978be821lgkiml5da72bd3j0h563h6khf70m64d9h2eac46l4a2g335i010hdl0h5h1b61agdhmd7kdmmch05iljadhh10i86lah1ajf4fj7i2m8h18jjf2amd2e66a86ei3j0h77b7kf6j657am1f6imjaaa28f021m9a13icka536c0fa65aalbbliei26cll38ac1cm343h0ec8h0k4mh1kbhla6a9889llj6db07eb9gmfihggd1kaim70gb6l082jcaldg353ae9i35g77fem7bg77k7em4c41fhbejmhhggj4blli3f7510l55l1j0c0h862ci9he2dlaki2j0ieah36d8i3gf3di7h095ajkbd3amglggc5i6ifh4076g436jcc9bc335mbgec23bjgfki54fm9fc105c2g1l9mc8mmgm1j3e8i96hjd38ic5keb8m53kb2kcec18c04369lg97dk660idbijfcfh9ef0g05c41116i1l664900jjf5jgkikl9kkhj6j8clm5h584l2875j4j8c358k8j3f88c4a297cbc818j26a0ihmf21ll6kkfm911ae4e7hb2l5ha85ffdi63hmk97cdd4mfcim97gmhclh43ig2j5ma5c19hle8i2hhlm2gjjmiae30754mb7d0l7881ighhh0c0bfagekm07h344bdli77m5jj97g69aeg8163ed6amgfm039bj2b9ib9aldfa103i83cebh0bgdj8m7l823k2d6h4l8mia9hk673maia22mik4k3l07h02mb9g56lk26g3micj053g308if9349kamm3jf7bamh3ele3024acbad8ib02cgef9h3f6dgml9ah6cj4mhdm3e9k3kc17lib.
+FAIL (1234.567).toString(24) should be 23a.dee4nj99j. Was 23a.dee4nj99j0fg7c.
+FAIL (1234.567).toString(25) should be 1o9.e49999999. Was 1o9.e49999999a1i19mnkg41ei2o2gea06fn7g8e53ag3cddjk7lokdf81mn6ke5jjko1odlbc544d8boici7j3om9ifj3ba7dm584ol0bgfc877n2g0079aggfdiekigk98kg42bjg13jcf86c740ef51o0ni16oj0ggo252kll7k8g9oc7g94i6oe7hf677ci1827hngok5abbjbhm5dfblmgamm87f2c0d6m4h1d14fike8loae804dk91io1lcbha1a3i9m1fda58h8fg6ioek0m5neeoeok96o35j9i06lm2o3036adhhhh1ia2l5ci524foo65n0lk91l9mnk88cf6joa272f9on54eae5019i08l4mebbcen161861n1a4dh6568dofh1be0mk3mdae56jmhco6hncok7l6bfh270dm044chgd4b1b0k2ggfk2f6l3mi1okodemoha6bab8o9ibhakdoa9177c8jnm7l78hl8hkim15e2kk54181k16f2na6gb05h0i323b5f918nb4n4n69f6cbi6eenjbhl7knoe3cgg7mam85goed2a7gdo13o374h8945hi6e9g311b5ohb636dc05g54k2jkh1532l495l91a8licnb4m8ibnmmc4fnfa1423mne1n8g09jjl149i4j8j171if83onjg1474014kcbb60hfackaonn7d0km7ajbakfng7dac201a9j2f872je2jjh3lf2o5593h0bmn9e0em502menh17kc4abi9n9hl986i5m1381kbh36l1be3fo090i6i58789fcic7b586650j8ejjh9h2m99nc9icmij65c955o35499c5n54d27ddfc3hmj247i65n4kmel3gckj06150e146l8bcdof887babce844kd9aold9hh24f7520h8e2768cg00ojfbd9o5d3aflcnh3h3n1a02nefdkjniknid3fd3f83d31a5ibe3k00i0a2bgk4k0m4l18d3b1d368i50cg3e3fmeebb1f2dh1cb5bh2330l7o3h7eo8hijg8eegl3de180o3gnkhaiagomceac7g0.
+FAIL (1234.567).toString(26) should be 1lc.ej7fa4pkf. Was 1lc.ej7fa4pkfb5i3961o8k832hm594h8p558gbk836d.
+FAIL (1234.567).toString(27) should be 1ij.f8971772k. Was 1ij.f8971772jicqigbgeln3176612hjc2lmdh055b6kqjq9k7aqemi31c999qkjk182nkm6iioqopj2fgjq2ed907f68i4jmomclqe07mfobmbc8e11h2382hd0pmf0pqcq9k80d52g7a8g9h1eg403e3i6jbiq8la8g9512lip2h9npbe6dcfm30ede5n5m6fhk8a9nbo6g5i2k60908hdo838n720ffna61g20g75fklld5k322hljjqpndeeecgnk9a8of8f1h4eddckqm2qmo22c6p21pi9cmdhfb8o97859385dhnad3ci9kkaff3f0g75925d3m76a2ejoddfci8j7jiq185ggin1b97qhhpqabeq3bhilhhqplq7ij2l4hiddo77hoco44fdm89k726p65h3dmm6a0k8a9p6gpbo1bfld7amqpb853pmoa0mkoq0c92dkq9fhb3me7he34o16bkh6enpoed5baa75epf7c609haq7ki14qkmd7o59i2km330q2dji11ndeka8imo99p4l4k5n7e6h53c4b6ddn0nifo4l1cjh7l30d4daql0o9h117g41lb5p8d8f09oi4l1c6k38hdj7d102oh1k08fhk0fcnqomihi86lf9m98hfm04e90ipcojo2lo481b6k5925cma6gjn8pcnqdc936h8n77de6hf9hc46bgpmahjijllcoc7lbdi6mlm2mn5247kbkaejjemg2ehioi75p64b9q7cae046m1b7eqp74348kqmj643hf40o48na9lm2p3k3cf3eall2aqk7p73h5hgq6k82clgn11kdcb150cq5607jpadoonpp5i78a3lmhnbbq4l8325a03hd7m37fl94igi43cgp0g4hgd5hkpk1gijhea508eqbgdgmbbikh9k67d60hne52lc68c4jf491kj8bi691p91d6a4bg1ppkn3cq0h34oc9b2mj33oollqj5p3c47lg83l32j0kep8jn11mo160667pe18d7kq5m7dh5kfnhl541bc73pjpn5al27a1n9bd0llg74434np75joa3f1fge73g8k28aqd6io.
+FAIL (1234.567).toString(28) should be 1g2.foelqia8e. Was 1g2.foelqia8ebflde2c988l.
+FAIL (1234.567).toString(29) should be 1dg.gcog9e05q. Was 1dg.gcog9e05po0nh1nj03cbgo1s4id5kf2fqf8nq7rcokr5r63no6b9hj1gnhjbcc4m6kfc7fde17chdp5qbfqc50f2sqjmqoo74sm9k5lskgpr9r8fd5cn9343kr8115oifrk2g7hnnrm1q1es93b3llrihs93si1s3bcjeqrcpbgi0kahhp3d4gpckqmai7019sicnm99i9ssbc783514d47f6qm4m89p5rd0hpear8p3lr0lcigo23bfa0h1c7e0rjh660r8ef5h68f0qb767c22rnlf3223qcaq9ob0ii69f21q8kj29b29f3rs36f56rksdq9438ci9e16hlg3rqm3mj7gmrfsl5662sg7opi1egbap2orejfjghr6oakhgo34s3mdn3p8b94ipfjo64cmhbicgiqk53b4bosjhmi32p0k1iamfqi967a564srpam1h941f6k6mhnp4bf9dkri5qdq4j5fmkl8obhd2697qc2k1s1ekjcqg7oa8akcfkhlorkmqd4hgkh6i74l1apj80kf666p30fh1q9dg8a8ljoeagcjh39139ofgrelf1f6oc8m6ag0gcip89o71sg8befga8n0kie7o227f7qqi3iejklc31n4mghl24d47j895s56a66g73mkp6s5eg1911e04jdc5lkrrrm0gimnm5rc0eoderkjof545drclphj5l3forgmnibdpo4s463rg9ag4nke52mib07hd26jhba5ip94bp2q05b6njlre33mikb8r61l58eii962i6ao6q8iosok7sih21df1c33m4g33fbbke709spj8m0fdnc0rml6c94prrle4614bs1069kck62g48ke386rbknn2sak70slj4j49o39cs6h7eri3lb4n8d7dsa279moms3qg28n26dhddn9j8ckk697j9kn2lk8oo39p099eo71po4hl6255of7m657folsppcc5g39afqbqf5ds0q97a32kkif0omn62hf58g0638brcapql0dbb0og0kjb6cdjdbms3d9pd5h60fi9odqfl6nkh87ja5fs4afrpiqknrif0p6cjqamsj.
+FAIL (1234.567).toString(30) should be 1b4.h09. Was 1b4.h0900000048qm7t47k6ehb9has3ibc3cosop9b7f.
+FAIL (1234.567).toString(31) should be 18p.hhrfcj3t. Was 18p.hhrfcj3t1k41f3ur475nm0bg1h8gu4g13ce2ne0rm2ir3rpqaee5mf5tgth2o8lguf8e3b88bhpt2r51g78uluu3a1fqftitn46hk0acq4stpemhna1kallplbo232fqtj4ch1mksr0kn38g2g3k9nbttettehjr56st04tcdn6o95guhiqe9a0bcrlmha7ht7e45uet5pk0s3928bjguhhrc4ij98hhpthu95pju4d4097r7ipc1k2b5o8qj9qeck5dfdeqimkp155fh2oe5mfk3abkebaq6j3eubssrjfod3p17is71tqieaf7na99p482sll6jr1oihribth5bg41ha7qd3tenff7g171kfdgut580s2noh9qlq8lckgsiukrt21ongno1jc477rf07cr6d5ujqa7srl1bdkon156619a1o9olmctbiiu1ih28fbjuphcd0ngqijsh8n5h59sfs4qhpdu62jkur6tigkgem50ogh37n3jsrdr4d8h7ta3h84p2iureoimpa31eiott237la8d0b9sqjq9l8ra97m4ldnersbmpun64dl50jf32kop6idibf7bekrr6ppot5utdknbq0lid0fkehoc3ssf6orm3g50h6emfsml0ppc1ae6881duufiuj3e84b6uhon93qk4ame494oclafd1mpprsiaqd8gpi7m5brmq8nrh2nlro7phb7pdli1pb0gfedluh0bjb9ennetsfdjs3u00os2649841h6eiiitq12ik8uoio9fo2ddj124nu17tp4go804hsrm8gih707o1l5efdmq7r5cpde3ai3edu2o3hi7eps3lr8rpindhqu47k22g5f6a3qdkmnreultenpftup2momtqksbhjlk2bbbdbtgb62l3dq392htmfod8msrmh92hkp6rqt675emb0ce5an6gqd2421h7gpol0bkhggt6k9ethhau8005ktd0r68b5r28b7asmhodb0bk6bi290fjpl0ic9ta2u66lhteopo000p60rspseqs4scdqafbqlebui3m33t19o6a465jj27ufu36e5po2i4k6dg3u89l.
+PASS (1234.567).toString(32) is "16i.i4jeiu6l"
+FAIL (1234.567).toString(33) should be 14d.inf96rdvm. Was 14d.inf96rdvlmnwci9088vbndq4uf4futpirf3tt6bdnmikf5vptow2lfdo9gm6hbr9bvrb7sld6ceb0nm0e6af6b00a24f4s37kschc3ofqlcadm1gqn8uupf16h1vlcoo3pidc6179cdowhp30e3vfhmt67wcsvv39b4ubav6bejs2rfj0g4vdckkgkeemjrlk5v0cqsvnnvq21rpq0lcb25ac0vqu9jniunkjt8343hp8nhha4tlsb70ws36e1cjl78n2qf59fbw1a6ki068ivmrkfc91sbk9mc5uqunumfjobgtfnqk2mgqf8aolom2wur0862bpktrnb452e14w8iwojga2ngb7kd4459ki6mt9pn7a85aseqfmsdl5owmfbtfm002w8sus5tu5afjb03ahekeptae5q2wvvkapng5o1d1jp8bwmcjfnldp3ktrhpl49htmdiq8srejnq3e7ibp217ve3du7ob886cd84wr5su4ac88dhmjsak6rt9tgp1e2wam38vof695m981w7l7g17cc4s7wkmp2aa6rvtc7ebmuqhemi9sanpa01dea47bejtoc8w1w8vm77i09dnnoturoo8v31j9f8lwi7d57bu2lrobhnw154drkcp7w5nmcn5m8sc0fc0tcui26d40tuu4k56qj9ikfawhd71w6v42hpdp0b7ucs3jo6u3i626vim8ramcvp0k7lq0ofcuwdn1wn6kgl5i3qqke7dk7fhfjt3f4mla25cccqcr2eqo6fva2vewgofkpnqlvu280krculq5tcusewm1mhwsa7m1tfb7w1nw7bovkeo5j8g14ohj317j4juo2d4pu0mo1srufah8prdbh53k6fbggh2keqltho0ntnq4fefv3tktrkvssshvtkun4wb5k2q64e9ekvum783qbjm3090ark9va6k6t02b4i0mw25unlq4aepwfnuur40b1ouk3cud9jmofti67ujwwjt958h4bqsrgunw15djw3we5kbudrggkfhmutv8vbndr0ete7k5iljk1cujt5doff9vmndn3db239hw1gjaeo743cin8n9qpwoq9n.
+FAIL (1234.567).toString(34) should be 12a.j9fchdtm. Was 12a.j9fchdtm1i0e8edbf0vogn0it8vsx3r8s9s5al8h.
+FAIL (1234.567).toString(35) should be 109.jtk4d4d4e. Was 109.jtk4d4d4doflfe7xi169wd6oyjq01vqcl2f150bis1clidgo4vg3nybjteo1lmjwxvahfy6dqnwydgaympbcv0gpgka2bwejgn0u0gutj58og5m4ab2udlvxfofqyjor4tqqrg1ik6nc1elynjm0p43j43691y6cfxirrmynomfo0xt808yft9pevk3ljiwboaq0uyr6h989pn5aexskwpp8kb0hrwe45vomiv7phkl1msuk8tya7aagjndr5fhkia6illwtjqjv8kpg9j1cm9yh60x0udj60cwu5nd12d59p8vg0ws7qvmnwn47sdbxr97o60st8bussl2932ughjiitjna9p6s55bjdkgxeobvk9euc04gu79pna4oqoxcv4522ggbcgo852pn9jayroy86sf2q119hymgrct7gj7gidbi88iow66djcbqg1g5j6fc5umb5fssde5uq3rvc9x0g81eo5ursjb1ptwu18ljskttqiixfmthionnj7l5p7qemqtn9cdr4xnax361l60vistm8pmjifgbh0j9se6rnekyyekn1c80o95ivbpnmewa1ac1p2suh4dkt0p7jmshx5qb92cov6v12wn7dxdr8tit051nctry8yt7jpsfsex4683ywbtcx9cjul52scv1ud7c996cwa1ieshpa4g6ocyvwm786lhhkwsbt0ep0a088xuuomg2hqga2pk7ibsb457ui5cle42t7yj7ugfp2ynivha0bxqs868b5yq59hg3ri3v9b0akxg0xgk3fx4o5pcayb9gv0sm1vhget72g6lp20f1q3i6subc9qkvvytcli037h3w47x9j343wxe53vodb3dyo9q8a4aj4dcysx95k5ose36267be1mdli4tqw7hcj3oaewepe0livh58p1w1vjc3w31m5c4v1ke94qdaml45dulv8gj7k75bwpd97h9emvycbe7akuvjt1v5d37kshsrekjfodf957jnak4agnkbv9993ycb69im9ygwbtptbghi30i4ph89si4l4hcitimvstrxs5tracv16v00adx14wxt1450cvrhxkdyge20q52.
+FAIL (1234.567).toString(36) should be ya.kety9sifl. Was ya.kety9sifklzsakqhbyb9.
+PASS (1234.567).toString(37) threw exception RangeError: toString() radix argument must be between 2 and 36.
+PASS (1234.567).toString(-1) threw exception RangeError: toString() radix argument must be between 2 and 36.
+PASS (1234.567).toString(posInf) threw exception RangeError: toString() radix argument must be between 2 and 36.
+PASS (1234.567).toString(negInf) threw exception RangeError: toString() radix argument must be between 2 and 36.
+PASS posInf.toString() is "Infinity"
+PASS negInf.toString() is "-Infinity"
+PASS nan.toString() is "NaN"
+PASS "" + -0.0 is "0"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+var posInf = 1/0;
+var negInf = -1/0;
+var nan = 0/0;
+
+shouldBeEqualToString("(0.0).toString(4)", "0");
+shouldBeEqualToString("(-0.0).toString(4)", "0");
+shouldBeEqualToString("(0.0).toString()", "0");
+shouldBeEqualToString("(-0.0).toString()", "0");
+
+// From http://bugs.webkit.org/show_bug.cgi?id=5258
+shouldBeEqualToString("(1234.567).toString()", "1234.567");
+shouldThrow("(1234.567).toString(0)");
+// 0 equivilents
+shouldThrow("(1234.567).toString(null)");
+shouldThrow("(1234.567).toString(false)");
+shouldThrow("(1234.567).toString('foo')");
+shouldThrow("(1234.567).toString(nan)"); // nan is treated like 0
+
+shouldThrow("(1234.567).toString(1)");
+shouldThrow("(1234.567).toString(true)");
+shouldThrow("(1234.567).toString('1')");
+
+// These test for Firefox compatibility, the spec is "implementation defined"
+shouldBeEqualToString("(1234.567).toString(2)", "10011010010.1001000100100110111010010111100011010101");
+shouldBeEqualToString("(1234.567).toString(3)", "1200201.120022100021001021021002202");
+shouldBeEqualToString("(1234.567).toString(4)", "103102.21010212322113203111");
+shouldBeEqualToString("(1234.567).toString(4.9)", "103102.21010212322113203111");
+shouldBeEqualToString("(1234.567).toString(5)", "14414.240414141414141414");
+shouldBeEqualToString("(1234.567).toString(6)", "5414.32224554134430233");
+shouldBeEqualToString("(1234.567).toString(7)", "3412.365323661111653");
+shouldBeEqualToString("(1234.567).toString(8)", "2322.44223351361524");
+shouldBeEqualToString("(1234.567).toString(9)", "1621.50830703723265");
+shouldBeEqualToString("(1234.567).toString(10)", "1234.567");
+shouldBeEqualToString("(1234.567).toString(11)", "a22.62674a0a5885");
+shouldBeEqualToString("(1234.567).toString(12)", "86a.697938b17701");
+shouldBeEqualToString("(1234.567).toString(13)", "73c.74a91191a65");
+shouldBeEqualToString("(1234.567).toString(14)", "642.7d1bc2caa757");
+shouldBeEqualToString("(1234.567).toString(15)", "574.87895959596");
+shouldBeEqualToString("(1234.567).toString(16)", "4d2.9126e978d5");
+shouldBeEqualToString("(1234.567).toString(17)", "44a.9aeb6faa0da");
+shouldBeEqualToString("(1234.567).toString(18)", "3ea.a3cd7102ac");
+shouldBeEqualToString("(1234.567).toString(19)", "37i.aed102a04d");
+shouldBeEqualToString("(1234.567).toString(20)", "31e.b6g");
+shouldBeEqualToString("(1234.567).toString(21)", "2gg.bj0kf5cfe9");
+shouldBeEqualToString("(1234.567).toString(22)", "2c2.ca9937cak");
+shouldBeEqualToString("(1234.567).toString(23)", "27f.d0lfjb1a7c");
+shouldBeEqualToString("(1234.567).toString(24)", "23a.dee4nj99j");
+shouldBeEqualToString("(1234.567).toString(25)", "1o9.e49999999");
+shouldBeEqualToString("(1234.567).toString(26)", "1lc.ej7fa4pkf");
+shouldBeEqualToString("(1234.567).toString(27)", "1ij.f8971772k");
+shouldBeEqualToString("(1234.567).toString(28)", "1g2.foelqia8e");
+shouldBeEqualToString("(1234.567).toString(29)", "1dg.gcog9e05q");
+shouldBeEqualToString("(1234.567).toString(30)", "1b4.h09");
+shouldBeEqualToString("(1234.567).toString(31)", "18p.hhrfcj3t");
+shouldBeEqualToString("(1234.567).toString(32)", "16i.i4jeiu6l");
+shouldBeEqualToString("(1234.567).toString(33)", "14d.inf96rdvm");
+shouldBeEqualToString("(1234.567).toString(34)", "12a.j9fchdtm");
+shouldBeEqualToString("(1234.567).toString(35)", "109.jtk4d4d4e");
+shouldBeEqualToString("(1234.567).toString(36)", "ya.kety9sifl");
+
+shouldThrow("(1234.567).toString(37)");
+shouldThrow("(1234.567).toString(-1)");
+shouldThrow("(1234.567).toString(posInf)");
+shouldThrow("(1234.567).toString(negInf)");
+
+shouldBeEqualToString("posInf.toString()", "Infinity");
+shouldBeEqualToString("negInf.toString()", "-Infinity");
+shouldBeEqualToString("nan.toString()", "NaN");
+
+shouldBeEqualToString('"" + -0.0', "0");
--- /dev/null
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks a few Number.toFixed cases, including 5307: Number.toFixed does not round 0.5 up and 5308: Number.toFixed does not include leading zero.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS (0).toFixed(0) is '0'
+PASS (0.49).toFixed(0) is '0'
+PASS (0.5).toFixed(0) is '1'
+PASS (0.51).toFixed(0) is '1'
+PASS (-0.49).toFixed(0) is '-0'
+PASS (-0.5).toFixed(0) is '-1'
+PASS (-0.51).toFixed(0) is '-1'
+PASS (0).toFixed(1) is '0.0'
+PASS (0.449).toFixed(1) is '0.4'
+PASS (0.45).toFixed(1) is '0.5'
+PASS (0.451).toFixed(1) is '0.5'
+PASS (0.5).toFixed(1) is '0.5'
+PASS (0.549).toFixed(1) is '0.5'
+PASS (0.55).toFixed(1) is '0.6'
+PASS (0.551).toFixed(1) is '0.6'
+PASS (-0.449).toFixed(1) is '-0.4'
+PASS (-0.45).toFixed(1) is '-0.5'
+PASS (-0.451).toFixed(1) is '-0.5'
+PASS (-0.5).toFixed(1) is '-0.5'
+PASS (-0.549).toFixed(1) is '-0.5'
+PASS (-0.55).toFixed(1) is '-0.6'
+PASS (-0.551).toFixed(1) is '-0.6'
+PASS (0.0).toFixed(4) is "0.0000"
+PASS (-0.0).toFixed(4) is "0.0000"
+PASS (0.0).toFixed() is "0"
+PASS (-0.0).toFixed() is "0"
+PASS (1234.567).toFixed() is "1235"
+PASS (1234.567).toFixed(0) is "1235"
+PASS (1234.567).toFixed(null) is "1235"
+PASS (1234.567).toFixed(false) is "1235"
+PASS (1234.567).toFixed('foo') is "1235"
+PASS (1234.567).toFixed(nan) is "1235"
+PASS (1234.567).toFixed(1) is "1234.6"
+PASS (1234.567).toFixed(true) is "1234.6"
+PASS (1234.567).toFixed('1') is "1234.6"
+PASS (1234.567).toFixed(2) is "1234.57"
+PASS (1234.567).toFixed(2.9) is "1234.57"
+PASS (1234.567).toFixed(5) is "1234.56700"
+PASS (1234.567).toFixed(20) is "1234.56700000000000727596"
+PASS (1234.567).toFixed(21) threw exception RangeError: toFixed() digits argument must be between 0 and 20.
+PASS (1234.567).toFixed(100) threw exception RangeError: toFixed() digits argument must be between 0 and 20.
+PASS (1234.567).toFixed(101) threw exception RangeError: toFixed() digits argument must be between 0 and 20.
+PASS (1234.567).toFixed(-1) threw exception RangeError: toFixed() digits argument must be between 0 and 20.
+PASS (1234.567).toFixed(-4) threw exception RangeError: toFixed() digits argument must be between 0 and 20.
+PASS (1234.567).toFixed(-5) threw exception RangeError: toFixed() digits argument must be between 0 and 20.
+PASS (1234.567).toFixed(-20) threw exception RangeError: toFixed() digits argument must be between 0 and 20.
+PASS (1234.567).toFixed(-21) threw exception RangeError: toFixed() digits argument must be between 0 and 20.
+PASS (1234.567).toFixed(posInf) threw exception RangeError: toFixed() digits argument must be between 0 and 20.
+PASS (1234.567).toFixed(negInf) threw exception RangeError: toFixed() digits argument must be between 0 and 20.
+PASS posInf.toFixed() is "Infinity"
+PASS negInf.toFixed() is "-Infinity"
+PASS nan.toFixed() is "NaN"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+ 'This test checks a few Number.toFixed cases, including ' +
+ '<a href="https://bugs.webkit.org/show_bug.cgi?id=5307">5307: Number.toFixed does not round 0.5 up</a>' +
+ ' and ' +
+ '<a href="https://bugs.webkit.org/show_bug.cgi?id=5308">5308: Number.toFixed does not include leading zero</a>' +
+ '.');
+
+shouldBe("(0).toFixed(0)", "'0'");
+
+shouldBe("(0.49).toFixed(0)", "'0'");
+shouldBe("(0.5).toFixed(0)", "'1'");
+shouldBe("(0.51).toFixed(0)", "'1'");
+
+shouldBe("(-0.49).toFixed(0)", "'-0'");
+shouldBe("(-0.5).toFixed(0)", "'-1'");
+shouldBe("(-0.51).toFixed(0)", "'-1'");
+
+shouldBe("(0).toFixed(1)", "'0.0'");
+
+shouldBe("(0.449).toFixed(1)", "'0.4'");
+shouldBe("(0.45).toFixed(1)", "'0.5'");
+shouldBe("(0.451).toFixed(1)", "'0.5'");
+shouldBe("(0.5).toFixed(1)", "'0.5'");
+shouldBe("(0.549).toFixed(1)", "'0.5'");
+shouldBe("(0.55).toFixed(1)", "'0.6'");
+shouldBe("(0.551).toFixed(1)", "'0.6'");
+
+shouldBe("(-0.449).toFixed(1)", "'-0.4'");
+shouldBe("(-0.45).toFixed(1)", "'-0.5'");
+shouldBe("(-0.451).toFixed(1)", "'-0.5'");
+shouldBe("(-0.5).toFixed(1)", "'-0.5'");
+shouldBe("(-0.549).toFixed(1)", "'-0.5'");
+shouldBe("(-0.55).toFixed(1)", "'-0.6'");
+shouldBe("(-0.551).toFixed(1)", "'-0.6'");
+
+var posInf = 1/0;
+var negInf = -1/0;
+var nan = 0/0;
+
+// From Acid3, http://bugs.webkit.org/show_bug.cgi?id=16640
+shouldBeEqualToString("(0.0).toFixed(4)", "0.0000");
+shouldBeEqualToString("(-0.0).toFixed(4)", "0.0000");
+shouldBeEqualToString("(0.0).toFixed()", "0");
+shouldBeEqualToString("(-0.0).toFixed()", "0");
+
+// From http://bugs.webkit.org/show_bug.cgi?id=5258
+shouldBeEqualToString("(1234.567).toFixed()", "1235");
+shouldBeEqualToString("(1234.567).toFixed(0)", "1235");
+// 0 equivilents
+shouldBeEqualToString("(1234.567).toFixed(null)", "1235");
+shouldBeEqualToString("(1234.567).toFixed(false)", "1235");
+shouldBeEqualToString("(1234.567).toFixed('foo')", "1235");
+shouldBeEqualToString("(1234.567).toFixed(nan)", "1235"); // nan is treated like 0
+
+shouldBeEqualToString("(1234.567).toFixed(1)", "1234.6");
+shouldBeEqualToString("(1234.567).toFixed(true)", "1234.6"); // just like 1
+shouldBeEqualToString("(1234.567).toFixed('1')", "1234.6"); // just like 1
+
+shouldBeEqualToString("(1234.567).toFixed(2)", "1234.57");
+shouldBeEqualToString("(1234.567).toFixed(2.9)", "1234.57");
+shouldBeEqualToString("(1234.567).toFixed(5)", "1234.56700");
+shouldBeEqualToString("(1234.567).toFixed(20)", "1234.56700000000000727596");
+
+// SpiderMonkey allows precision values -20 to 100, the spec only allows 0 to 20
+shouldThrow("(1234.567).toFixed(21)");
+shouldThrow("(1234.567).toFixed(100)");
+shouldThrow("(1234.567).toFixed(101)");
+shouldThrow("(1234.567).toFixed(-1)");
+shouldThrow("(1234.567).toFixed(-4)");
+shouldThrow("(1234.567).toFixed(-5)");
+shouldThrow("(1234.567).toFixed(-20)");
+shouldThrow("(1234.567).toFixed(-21)");
+
+shouldThrow("(1234.567).toFixed(posInf)");
+shouldThrow("(1234.567).toFixed(negInf)");
+
+shouldBeEqualToString("posInf.toFixed()", "Infinity");
+shouldBeEqualToString("negInf.toFixed()", "-Infinity");
+shouldBeEqualToString("nan.toFixed()", "NaN");
--- /dev/null
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks a few Number.toPrecision cases, including 15145: (0.999).toPrecision(1) returns incorrect result.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS (0.999).toPrecision(1) is "1"
+PASS (0.999).toPrecision(2) is "1.0"
+PASS (0.999).toPrecision(3) is "0.999"
+PASS (0.0).toPrecision(4) is "0.000"
+PASS (-0.0).toPrecision(4) is "0.000"
+PASS (0.0).toPrecision() is "0"
+PASS (-0.0).toPrecision() is "0"
+PASS (1234.567).toPrecision() is "1234.567"
+PASS (1234.567).toPrecision(0) threw exception RangeError: toPrecision() argument must be between 1 and 21.
+PASS (1234.567).toPrecision(null) threw exception RangeError: toPrecision() argument must be between 1 and 21.
+PASS (1234.567).toPrecision(false) threw exception RangeError: toPrecision() argument must be between 1 and 21.
+PASS (1234.567).toPrecision('foo') threw exception RangeError: toPrecision() argument must be between 1 and 21.
+PASS (1234.567).toPrecision(-1) threw exception RangeError: toPrecision() argument must be between 1 and 21.
+PASS (1234.567).toPrecision(1) is "1e+3"
+PASS (1234.567).toPrecision(true) is "1e+3"
+PASS (1234.567).toPrecision('1') is "1e+3"
+PASS (1234.567).toPrecision(2) is "1.2e+3"
+PASS (1234.567).toPrecision(2.9) is "1.2e+3"
+PASS (1234.567).toPrecision(5) is "1234.6"
+PASS (1234.567).toPrecision(21) is "1234.56700000000000728"
+PASS (1234.567).toPrecision(22) threw exception RangeError: toPrecision() argument must be between 1 and 21.
+PASS (1234.567).toPrecision(100) threw exception RangeError: toPrecision() argument must be between 1 and 21.
+PASS (1234.567).toPrecision(101) threw exception RangeError: toPrecision() argument must be between 1 and 21.
+PASS (1234.567).toPrecision(posInf) threw exception RangeError: toPrecision() argument must be between 1 and 21.
+PASS (1234.567).toPrecision(negInf) threw exception RangeError: toPrecision() argument must be between 1 and 21.
+PASS (1234.567).toPrecision(nan) threw exception RangeError: toPrecision() argument must be between 1 and 21.
+PASS posInf.toPrecision() is "Infinity"
+PASS negInf.toPrecision() is "-Infinity"
+PASS nan.toPrecision() is "NaN"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+ 'This test checks a few Number.toPrecision cases, including ' +
+ '<a href="http://bugs.webkit.org/show_bug.cgi?id=15145">15145: (0.999).toPrecision(1) returns incorrect result</a>' +
+ '.');
+
+shouldBeEqualToString("(0.999).toPrecision(1)", "1");
+shouldBeEqualToString("(0.999).toPrecision(2)", "1.0");
+shouldBeEqualToString("(0.999).toPrecision(3)", "0.999");
+
+var posInf = 1/0;
+var negInf = -1/0;
+var nan = 0/0;
+
+shouldBeEqualToString("(0.0).toPrecision(4)", "0.000");
+shouldBeEqualToString("(-0.0).toPrecision(4)", "0.000");
+shouldBeEqualToString("(0.0).toPrecision()", "0");
+shouldBeEqualToString("(-0.0).toPrecision()", "0");
+shouldBeEqualToString("(1234.567).toPrecision()", "1234.567");
+shouldThrow("(1234.567).toPrecision(0)");
+shouldThrow("(1234.567).toPrecision(null)"); // just like 0
+shouldThrow("(1234.567).toPrecision(false)"); // just like 0
+shouldThrow("(1234.567).toPrecision('foo')"); // just like 0
+shouldThrow("(1234.567).toPrecision(-1)");
+shouldBeEqualToString("(1234.567).toPrecision(1)", "1e+3");
+shouldBeEqualToString("(1234.567).toPrecision(true)", "1e+3"); // just like 1
+shouldBeEqualToString("(1234.567).toPrecision('1')", "1e+3"); // just like 1
+shouldBeEqualToString("(1234.567).toPrecision(2)", "1.2e+3");
+shouldBeEqualToString("(1234.567).toPrecision(2.9)", "1.2e+3");
+shouldBeEqualToString("(1234.567).toPrecision(5)", "1234.6");
+shouldBeEqualToString("(1234.567).toPrecision(21)", "1234.56700000000000728");
+// SpiderMonkey allows precision values 1 to 100, we implement the spec and only allow 1 to 21.
+shouldThrow("(1234.567).toPrecision(22)");
+shouldThrow("(1234.567).toPrecision(100)");
+shouldThrow("(1234.567).toPrecision(101)");
+
+shouldThrow("(1234.567).toPrecision(posInf)");
+shouldThrow("(1234.567).toPrecision(negInf)");
+shouldThrow("(1234.567).toPrecision(nan)"); // nan is treated like 0
+
+shouldBeEqualToString("posInf.toPrecision()", "Infinity");
+shouldBeEqualToString("negInf.toPrecision()", "-Infinity");
+shouldBeEqualToString("nan.toPrecision()", "NaN");
--- /dev/null
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test numeric escapes in string literals - https://bugs.webkit.org/show_bug.cgi?id=51724
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS eval(stringLiteral) is nonStrictResult
+PASS eval(stringLiteral) is strictResult
+PASS eval(stringLiteral) is nonStrictResult
+PASS eval(stringLiteral) threw exception SyntaxError: Octal literals are not allowed in strict mode..
+PASS eval(stringLiteral) is nonStrictResult
+PASS eval(stringLiteral) threw exception SyntaxError: Octal literals are not allowed in strict mode..
+PASS eval(stringLiteral) is nonStrictResult
+FAIL eval(stringLiteral) should throw an exception. Was 8.
+PASS eval(stringLiteral) is nonStrictResult
+FAIL eval(stringLiteral) should throw an exception. Was 9.
+PASS eval(stringLiteral) is nonStrictResult
+PASS eval(stringLiteral) threw exception SyntaxError: Octal literals are not allowed in strict mode..
+PASS eval(stringLiteral) is nonStrictResult
+PASS eval(stringLiteral) threw exception SyntaxError: Octal literals are not allowed in strict mode..
+PASS eval(stringLiteral) is nonStrictResult
+PASS eval(stringLiteral) threw exception SyntaxError: Octal literals are not allowed in strict mode..
+PASS eval(stringLiteral) is nonStrictResult
+PASS eval(stringLiteral) threw exception SyntaxError: Octal literals are not allowed in strict mode..
+PASS eval(stringLiteral) is nonStrictResult
+PASS eval(stringLiteral) threw exception SyntaxError: Octal literals are not allowed in strict mode..
+PASS eval(stringLiteral) is nonStrictResult
+PASS eval(stringLiteral) threw exception SyntaxError: Octal literals are not allowed in strict mode..
+PASS eval(stringLiteral) is nonStrictResult
+PASS eval(stringLiteral) threw exception SyntaxError: Octal literals are not allowed in strict mode..
+PASS eval(stringLiteral) is nonStrictResult
+PASS eval(stringLiteral) threw exception SyntaxError: Octal literals are not allowed in strict mode..
+PASS eval(stringLiteral) is nonStrictResult
+PASS eval(stringLiteral) threw exception SyntaxError: Octal literals are not allowed in strict mode..
+PASS eval(stringLiteral) is nonStrictResult
+PASS eval(stringLiteral) threw exception SyntaxError: Octal literals are not allowed in strict mode..
+PASS eval(stringLiteral) is nonStrictResult
+PASS eval(stringLiteral) threw exception SyntaxError: Octal literals are not allowed in strict mode..
+PASS eval(stringLiteral) is nonStrictResult
+PASS eval(stringLiteral) threw exception SyntaxError: Octal literals are not allowed in strict mode..
+PASS eval(stringLiteral) is nonStrictResult
+FAIL eval(stringLiteral) should throw an exception. Was 99.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Test numeric escapes in string literals - https://bugs.webkit.org/show_bug.cgi?id=51724"
+);
+
+function test(_stringLiteral, _nonStrictResult, _strictResult)
+{
+ stringLiteral = '"' + _stringLiteral + '"';
+ nonStrictResult = _nonStrictResult;
+ shouldBe("eval(stringLiteral)", "nonStrictResult");
+
+ stringLiteral = '"use strict"; ' + stringLiteral;
+ if (_strictResult) {
+ strictResult = _strictResult;
+ shouldBe("eval(stringLiteral)", "strictResult");
+ } else
+ shouldThrow("eval(stringLiteral)");
+}
+
+// Tests for single digit octal and decimal escapes.
+// In non-strict mode 0-7 are octal escapes, 8-9 are NonEscapeCharacters.
+// In strict mode only "\0" is permitted.
+test("\\0", "\x00", "\x00");
+test("\\1", "\x01");
+test("\\7", "\x07");
+test("\\8", "8");
+test("\\9", "9");
+
+// Tests for multi-digit octal values outside strict mode;
+// Octal literals may be 1-3 digits long. In strict more all multi-digit sequences are illegal.
+test("\\00", "\x00");
+test("\\000", "\x00");
+test("\\0000", "\x000");
+
+test("\\01", "\x01");
+test("\\001", "\x01");
+test("\\0001", "\x001");
+
+test("\\10", "\x08");
+test("\\100", "\x40");
+test("\\1000", "\x400");
+
+test("\\19", "\x019");
+test("\\109", "\x089");
+test("\\1009", "\x409");
+
+test("\\99", "99");
--- /dev/null
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that defining a setter on the prototype of an object used for indexed storage works even if it is done after objects with indexed storage are allocated.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+PASS "0,1,2,3,4" is "0,1,2,3,4"
+Henceforth I will have a bad time.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL ouches should be 50. Was 0.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that defining a setter on the prototype of an object used for indexed storage works even if it is done after objects with indexed storage are allocated."
+);
+
+function Cons() {
+}
+
+var ouches = 0;
+
+function foo(haveABadTime) {
+ var result = new Cons();
+ result.length = 5;
+ for (var i = 0; i < result.length; ++i) {
+ if (i == haveABadTime) {
+ debug("Henceforth I will have a bad time.");
+ Cons.prototype.__defineSetter__("3", function() { debug("Ouch!"); ouches++; });
+ }
+ result[i] = i;
+ }
+ return result;
+}
+
+var expected = "\"0,1,2,3,4\"";
+
+for (var i = 0; i < 1000; ++i) {
+ var haveABadTime;
+ if (i == 950) {
+ haveABadTime = 2;
+ expected = "\"0,1,2,,4\"";
+ } else
+ haveABadTime = -1;
+ shouldBe("\"" + Array.prototype.join.apply(foo(haveABadTime), [","]) + "\"", expected);
+}
+
+shouldBe("ouches", "50");
--- /dev/null
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks some object construction cases, including 5939: final comma in javascript object prevents parsing.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS var foo = { 'bar' : 'YES' }; foo.bar is 'YES'
+PASS var foo = { 'bar' : 'YES', }; foo.bar is 'YES'
+PASS var foo = { 'bar' : 'YES' , }; foo.bar is 'YES'
+PASS var foo = { , 'bar' : 'YES' }; foo.bar threw exception SyntaxError: Unexpected token ,.
+PASS var foo = { 'bar' : 'YES',, }; foo.bar threw exception SyntaxError: Unexpected token ,.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+ 'This test checks some object construction cases, including ' +
+ '<a href="https://bugs.webkit.org/show_bug.cgi?id=5939">5939: final comma in javascript object prevents parsing</a>' +
+ '.');
+
+shouldBe("var foo = { 'bar' : 'YES' }; foo.bar", "'YES'");
+shouldBe("var foo = { 'bar' : 'YES', }; foo.bar", "'YES'");
+shouldBe("var foo = { 'bar' : 'YES' , }; foo.bar", "'YES'");
+shouldThrow("var foo = { , 'bar' : 'YES' }; foo.bar");
+shouldThrow("var foo = { 'bar' : 'YES',, }; foo.bar");
--- /dev/null
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This is a test case for bug 3537.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS f.constructor is Foo.Bar
+PASS typeof f.constructor is "function"
+PASS f2.constructor is Foo2.Bar
+PASS typeof f2.constructor is "function"
+PASS f3.constructor is Foo3.Bar
+PASS typeof f3.constructor is "function"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'This is a test case for <a href="https://bugs.webkit.org/show_bug.cgi?id=3537">bug 3537</a>.'
+);
+
+var Foo = { Bar: function () {}};
+var f = new Foo.Bar();
+shouldBe("f.constructor", "Foo.Bar");
+shouldBe("typeof f.constructor", '"function"');
+
+function F() {};
+var Foo2 = { Bar: F};
+var f2 = new Foo2.Bar();
+shouldBe("f2.constructor", "Foo2.Bar");
+shouldBe("typeof f2.constructor", '"function"');
+
+var Foo3 = { Bar: new Function("")};
+var f3 = new Foo3.Bar();
+shouldBe("f3.constructor", "Foo3.Bar");
+shouldBe("typeof f3.constructor", '"function"');
--- /dev/null
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This is a test case for bug 64678.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS Object.prototype.toString.call(undefined) is "[object Undefined]"
+PASS Object.prototype.toString.call(null) is "[object Null]"
+PASS Object.prototype.toLocaleString.call(undefined) threw exception TypeError: Object.prototype.toLocaleString called on null or undefined.
+PASS Object.prototype.valueOf.call(undefined) threw exception TypeError: Cannot convert undefined or null to object.
+PASS Object.prototype.hasOwnProperty.call(undefined, 'hasOwnProperty') threw exception TypeError: Cannot convert undefined or null to object.
+PASS Object.prototype.propertyIsEnumerable.call(undefined, 'propertyIsEnumerable') threw exception TypeError: Cannot convert undefined or null to object.
+PASS Object.prototype.isPrototypeOf.call(undefined, this) threw exception TypeError: Object.prototype.isPrototypeOf called on null or undefined.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'This is a test case for <a https://bugs.webkit.org/show_bug.cgi?id=64678">bug 64678</a>.'
+);
+
+//ES 5.1 allows for Object.prototype.toString being called with undefined/null.
+shouldBe("Object.prototype.toString.call(undefined)", '"[object Undefined]"');
+shouldBe("Object.prototype.toString.call(null)", '"[object Null]"');
+
+// These calls pass undefined as this value, and as such should throw in toObject.
+shouldThrow("Object.prototype.toLocaleString.call(undefined)");
+shouldThrow("Object.prototype.valueOf.call(undefined)");
+shouldThrow("Object.prototype.hasOwnProperty.call(undefined, 'hasOwnProperty')");
+shouldThrow("Object.prototype.propertyIsEnumerable.call(undefined, 'propertyIsEnumerable')");
+shouldThrow("Object.prototype.isPrototypeOf.call(undefined, this)");
--- /dev/null
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests: Object.prototype.toLocaleString(). Related bug: 3989 JSC doesn't implement Object.prototype.toLocaleString()
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS o.toLocaleString() is o.toString()
+PASS o.toLocaleString() is "Dynamic toLocaleString()"
+PASS Object.prototype.toLocaleString.call('Hello, world!') is "Hello, world!"
+PASS Object.prototype.toLocaleString.call('Hello, world!') is "stringPrototypeToString"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'Tests: Object.prototype.toLocaleString(). Related bug: <a href="https://bugs.webkit.org/show_bug.cgi?id=3989">3989 JSC doesn\'t implement Object.prototype.toLocaleString()</a>'
+);
+
+var o = new Object();
+shouldBe("o.toLocaleString()", "o.toString()");
+o.toLocaleString = function () { return "Dynamic toLocaleString()"; }
+shouldBe("o.toLocaleString()", '"Dynamic toLocaleString()"');
+
+shouldBe("Object.prototype.toLocaleString.call('Hello, world!')", '"Hello, world!"');
+
+var stringPrototypeToString = String.prototype.toString;
+String.prototype.toString = (function(){ return "stringPrototypeToString"; });
+shouldBe("Object.prototype.toLocaleString.call('Hello, world!')", '"stringPrototypeToString"');
+String.prototype.toString = stringPrototypeToString;
--- /dev/null
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that defining a setter on the prototype of an object used for indexed storage works.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL "0,1,2,3,4" should be 0,1,2,,4. Was 0,1,2,3,4.
+FAIL ouches should be 100. Was 0.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Tests that defining a setter on the prototype of an object used for indexed storage works."
+);
+
+function Cons() {
+}
+
+var ouches = 0;
+Cons.prototype.__defineSetter__("3", function() { debug("Ouch!"); ouches++; });
+
+function foo() {
+ var result = new Cons();
+ result.length = 5;
+ for (var i = 0; i < result.length; ++i)
+ result[i] = i;
+ return result;
+}
+
+for (var i = 0; i < 100; ++i)
+ shouldBe("\"" + Array.prototype.join.apply(foo(), [","]) + "\"", "\"0,1,2,,4\"");
+
+shouldBe("ouches", "100");
--- /dev/null
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks that the following expressions or statements are valid ECMASCRIPT code or should throw parse error
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Unary operators and member access
+PASS Valid: ""
+PASS Valid: "function f() { }"
+PASS Invalid: "(a"
+PASS Invalid: "function f() { (a }"
+PASS Invalid: "a[5"
+PASS Invalid: "function f() { a[5 }"
+PASS Invalid: "a[5 + 6"
+PASS Invalid: "function f() { a[5 + 6 }"
+PASS Invalid: "a."
+PASS Invalid: "function f() { a. }"
+PASS Invalid: "()"
+PASS Invalid: "function f() { () }"
+PASS Invalid: "a.'l'"
+PASS Invalid: "function f() { a.'l' }"
+PASS Valid: "a: +~!new a"
+PASS Valid: "function f() { a: +~!new a }"
+PASS Invalid: "new -a"
+PASS Invalid: "function f() { new -a }"
+PASS Valid: "new (-1)"
+PASS Valid: "function f() { new (-1) }"
+PASS Valid: "a: b: c: new f(x++)++"
+PASS Valid: "function f() { a: b: c: new f(x++)++ }"
+PASS Valid: "(a)++"
+PASS Valid: "function f() { (a)++ }"
+PASS Valid: "(1--).x"
+PASS Valid: "function f() { (1--).x }"
+PASS Invalid: "a-- ++"
+PASS Invalid: "function f() { a-- ++ }"
+PASS Invalid: "(a:) --b"
+PASS Invalid: "function f() { (a:) --b }"
+PASS Valid: "++ -- ++ a"
+PASS Valid: "function f() { ++ -- ++ a }"
+PASS Valid: "++ new new a ++"
+PASS Valid: "function f() { ++ new new a ++ }"
+PASS Valid: "delete void 0"
+PASS Valid: "function f() { delete void 0 }"
+PASS Invalid: "delete the void"
+PASS Invalid: "function f() { delete the void }"
+PASS Invalid: "(a++"
+PASS Invalid: "function f() { (a++ }"
+PASS Valid: "++a--"
+PASS Valid: "function f() { ++a-- }"
+PASS Valid: "++((a))--"
+PASS Valid: "function f() { ++((a))-- }"
+PASS Valid: "(a.x++)++"
+PASS Valid: "function f() { (a.x++)++ }"
+PASS Invalid: "1: null"
+PASS Invalid: "function f() { 1: null }"
+PASS Invalid: "+-!~"
+PASS Invalid: "function f() { +-!~ }"
+PASS Invalid: "+-!~(("
+PASS Invalid: "function f() { +-!~(( }"
+PASS Invalid: "a)"
+PASS Invalid: "function f() { a) }"
+PASS Invalid: "a]"
+PASS Invalid: "function f() { a] }"
+PASS Invalid: ".l"
+PASS Invalid: "function f() { .l }"
+PASS Invalid: "1.l"
+PASS Invalid: "function f() { 1.l }"
+PASS Valid: "1 .l"
+PASS Valid: "function f() { 1 .l }"
+Binary and conditional operators
+PASS Valid: "a + + typeof this"
+PASS Valid: "function f() { a + + typeof this }"
+PASS Invalid: "a + * b"
+PASS Invalid: "function f() { a + * b }"
+PASS Invalid: "a ? b"
+PASS Invalid: "function f() { a ? b }"
+PASS Invalid: "a ? b :"
+PASS Invalid: "function f() { a ? b : }"
+PASS Invalid: "%a"
+PASS Invalid: "function f() { %a }"
+PASS Invalid: "a-"
+PASS Invalid: "function f() { a- }"
+PASS Valid: "a = b ? b = c : d = e"
+PASS Valid: "function f() { a = b ? b = c : d = e }"
+PASS Valid: "s: a[1].l ? b.l['s'] ? c++ : d : true"
+PASS Valid: "function f() { s: a[1].l ? b.l['s'] ? c++ : d : true }"
+PASS Valid: "a ? b + 1 ? c + 3 * d.l : d[5][6] : e"
+PASS Valid: "function f() { a ? b + 1 ? c + 3 * d.l : d[5][6] : e }"
+PASS Valid: "a in b instanceof delete -c"
+PASS Valid: "function f() { a in b instanceof delete -c }"
+PASS Invalid: "a in instanceof b.l"
+PASS Invalid: "function f() { a in instanceof b.l }"
+PASS Valid: "- - true % 5"
+PASS Valid: "function f() { - - true % 5 }"
+FAIL Invalid: "- false = 3" should throw undefined
+FAIL Invalid: "function f() { - false = 3 }" should throw undefined
+PASS Valid: "a: b: c: (1 + null) = 3"
+PASS Valid: "function f() { a: b: c: (1 + null) = 3 }"
+PASS Valid: "a[2] = b.l += c /= 4 * 7 ^ !6"
+PASS Valid: "function f() { a[2] = b.l += c /= 4 * 7 ^ !6 }"
+FAIL Invalid: "a + typeof b += c in d" should throw undefined
+FAIL Invalid: "function f() { a + typeof b += c in d }" should throw undefined
+FAIL Invalid: "typeof a &= typeof b" should throw undefined
+FAIL Invalid: "function f() { typeof a &= typeof b }" should throw undefined
+PASS Valid: "a: ((typeof (a))) >>>= a || b.l && c"
+PASS Valid: "function f() { a: ((typeof (a))) >>>= a || b.l && c }"
+PASS Valid: "a: b: c[a /= f[a %= b]].l[c[x] = 7] -= a ? b <<= f : g"
+PASS Valid: "function f() { a: b: c[a /= f[a %= b]].l[c[x] = 7] -= a ? b <<= f : g }"
+PASS Valid: "-void+x['y'].l == x.l != 5 - f[7]"
+PASS Valid: "function f() { -void+x['y'].l == x.l != 5 - f[7] }"
+Function calls (and new with arguments)
+PASS Valid: "a()()()"
+PASS Valid: "function f() { a()()() }"
+PASS Valid: "s: l: a[2](4 == 6, 5 = 6)(f[4], 6)"
+PASS Valid: "function f() { s: l: a[2](4 == 6, 5 = 6)(f[4], 6) }"
+PASS Valid: "s: eval(a.apply(), b.call(c[5] - f[7]))"
+PASS Valid: "function f() { s: eval(a.apply(), b.call(c[5] - f[7])) }"
+PASS Invalid: "a("
+PASS Invalid: "function f() { a( }"
+PASS Invalid: "a(5"
+PASS Invalid: "function f() { a(5 }"
+PASS Invalid: "a(5,"
+PASS Invalid: "function f() { a(5, }"
+PASS Invalid: "a(5,)"
+PASS Invalid: "function f() { a(5,) }"
+PASS Invalid: "a(5,6"
+PASS Invalid: "function f() { a(5,6 }"
+PASS Valid: "a(b[7], c <d> e.l, new a() > b)"
+PASS Valid: "function f() { a(b[7], c <d> e.l, new a() > b) }"
+PASS Invalid: "a(b[5)"
+PASS Invalid: "function f() { a(b[5) }"
+PASS Invalid: "a(b.)"
+PASS Invalid: "function f() { a(b.) }"
+PASS Valid: "~new new a(1)(i++)(c[l])"
+PASS Valid: "function f() { ~new new a(1)(i++)(c[l]) }"
+PASS Invalid: "a(*a)"
+PASS Invalid: "function f() { a(*a) }"
+PASS Valid: "((((a))((b)()).l))()"
+PASS Valid: "function f() { ((((a))((b)()).l))() }"
+PASS Valid: "(a)[b + (c) / (d())].l--"
+PASS Valid: "function f() { (a)[b + (c) / (d())].l-- }"
+PASS Valid: "new (5)"
+PASS Valid: "function f() { new (5) }"
+PASS Invalid: "new a(5"
+PASS Invalid: "function f() { new a(5 }"
+PASS Valid: "new (f + 5)(6, (g)() - 'l'() - true(false))"
+PASS Valid: "function f() { new (f + 5)(6, (g)() - 'l'() - true(false)) }"
+PASS Invalid: "a(.length)"
+PASS Invalid: "function f() { a(.length) }"
+function declaration and expression
+PASS Valid: "function f() {}"
+PASS Valid: "function f() { function f() {} }"
+PASS Valid: "function f(a,b) {}"
+PASS Valid: "function f() { function f(a,b) {} }"
+PASS Invalid: "function () {}"
+PASS Invalid: "function f() { function () {} }"
+PASS Invalid: "function f(a b) {}"
+PASS Invalid: "function f() { function f(a b) {} }"
+PASS Invalid: "function f(a,) {}"
+PASS Invalid: "function f() { function f(a,) {} }"
+PASS Invalid: "function f(a,"
+PASS Invalid: "function f() { function f(a, }"
+PASS Invalid: "function f(a, 1) {}"
+PASS Invalid: "function f() { function f(a, 1) {} }"
+PASS Valid: "function g(arguments, eval) {}"
+PASS Valid: "function f() { function g(arguments, eval) {} }"
+PASS Valid: "function f() {} + function g() {}"
+PASS Valid: "function f() { function f() {} + function g() {} }"
+PASS Invalid: "(function a{})"
+PASS Invalid: "function f() { (function a{}) }"
+PASS Invalid: "(function this(){})"
+PASS Invalid: "function f() { (function this(){}) }"
+PASS Valid: "(delete new function f(){} + function(a,b){}(5)(6))"
+PASS Valid: "function f() { (delete new function f(){} + function(a,b){}(5)(6)) }"
+PASS Valid: "6 - function (m) { function g() {} }"
+PASS Valid: "function f() { 6 - function (m) { function g() {} } }"
+PASS Invalid: "function l() {"
+PASS Invalid: "function f() { function l() { }"
+PASS Invalid: "function l++(){}"
+PASS Invalid: "function f() { function l++(){} }"
+Array and object literal, comma operator
+PASS Valid: "[] in [5,6] * [,5,] / [,,5,,] || [a,] && new [,b] % [,,]"
+PASS Valid: "function f() { [] in [5,6] * [,5,] / [,,5,,] || [a,] && new [,b] % [,,] }"
+PASS Invalid: "[5,"
+PASS Invalid: "function f() { [5, }"
+PASS Invalid: "[,"
+PASS Invalid: "function f() { [, }"
+PASS Invalid: "(a,)"
+PASS Invalid: "function f() { (a,) }"
+PASS Valid: "1 + {get get(){}, set set(a){}, get1:4, set1:get-set, }"
+PASS Valid: "function f() { 1 + {get get(){}, set set(a){}, get1:4, set1:get-set, } }"
+PASS Invalid: "1 + {a"
+PASS Invalid: "function f() { 1 + {a }"
+PASS Invalid: "1 + {a:"
+PASS Invalid: "function f() { 1 + {a: }"
+PASS Invalid: "1 + {get l("
+PASS Invalid: "function f() { 1 + {get l( }"
+PASS Invalid: ",a"
+PASS Invalid: "function f() { ,a }"
+PASS Valid: "(4,(5,a(3,4))),f[4,a-6]"
+PASS Valid: "function f() { (4,(5,a(3,4))),f[4,a-6] }"
+PASS Invalid: "(,f)"
+PASS Invalid: "function f() { (,f) }"
+PASS Invalid: "a,,b"
+PASS Invalid: "function f() { a,,b }"
+PASS Invalid: "a ? b, c : d"
+PASS Invalid: "function f() { a ? b, c : d }"
+simple statements
+PASS Valid: "{ }"
+PASS Valid: "function f() { { } }"
+PASS Invalid: "{ { }"
+PASS Invalid: "function f() { { { } }"
+PASS Valid: "{ ; ; ; }"
+PASS Valid: "function f() { { ; ; ; } }"
+PASS Valid: "a: { ; }"
+PASS Valid: "function f() { a: { ; } }"
+PASS Invalid: "{ a: }"
+PASS Invalid: "function f() { { a: } }"
+PASS Valid: "{} f; { 6 + f() }"
+PASS Valid: "function f() { {} f; { 6 + f() } }"
+PASS Valid: "{ a[5],6; {} ++b-new (-5)() } c().l++"
+PASS Valid: "function f() { { a[5],6; {} ++b-new (-5)() } c().l++ }"
+PASS Valid: "{ l1: l2: l3: { this } a = 32 ; { i++ ; { { { } } ++i } } }"
+PASS Valid: "function f() { { l1: l2: l3: { this } a = 32 ; { i++ ; { { { } } ++i } } } }"
+PASS Valid: "if (a) ;"
+PASS Valid: "function f() { if (a) ; }"
+PASS Invalid: "{ if (a) }"
+PASS Invalid: "function f() { { if (a) } }"
+PASS Invalid: "if a {}"
+PASS Invalid: "function f() { if a {} }"
+PASS Invalid: "if (a"
+PASS Invalid: "function f() { if (a }"
+PASS Invalid: "if (a { }"
+PASS Invalid: "function f() { if (a { } }"
+PASS Valid: "x: s: if (a) ; else b"
+PASS Valid: "function f() { x: s: if (a) ; else b }"
+PASS Invalid: "else {}"
+PASS Invalid: "function f() { else {} }"
+PASS Valid: "if (a) if (b) y; else {} else ;"
+PASS Valid: "function f() { if (a) if (b) y; else {} else ; }"
+PASS Invalid: "if (a) {} else x; else"
+PASS Invalid: "function f() { if (a) {} else x; else }"
+PASS Invalid: "if (a) { else }"
+PASS Invalid: "function f() { if (a) { else } }"
+PASS Valid: "if (a.l + new b()) 4 + 5 - f()"
+PASS Valid: "function f() { if (a.l + new b()) 4 + 5 - f() }"
+PASS Valid: "if (a) with (x) ; else with (y) ;"
+PASS Valid: "function f() { if (a) with (x) ; else with (y) ; }"
+PASS Invalid: "with a.b { }"
+PASS Invalid: "function f() { with a.b { } }"
+PASS Valid: "while (a() - new b) ;"
+PASS Valid: "function f() { while (a() - new b) ; }"
+PASS Invalid: "while a {}"
+PASS Invalid: "function f() { while a {} }"
+PASS Valid: "do ; while(0) i++"
+PASS Valid: "function f() { do ; while(0) i++ }"
+PASS Valid: "do if (a) x; else y; while(z)"
+PASS Valid: "function f() { do if (a) x; else y; while(z) }"
+PASS Invalid: "do g; while 4"
+PASS Invalid: "function f() { do g; while 4 }"
+PASS Invalid: "do g; while ((4)"
+PASS Invalid: "function f() { do g; while ((4) }"
+PASS Valid: "{ { do do do ; while(0) while(0) while(0) } }"
+PASS Valid: "function f() { { { do do do ; while(0) while(0) while(0) } } }"
+PASS Valid: "do while (0) if (a) {} else y; while(0)"
+PASS Valid: "function f() { do while (0) if (a) {} else y; while(0) }"
+PASS Valid: "if (a) while (b) if (c) with(d) {} else e; else f"
+PASS Valid: "function f() { if (a) while (b) if (c) with(d) {} else e; else f }"
+PASS Invalid: "break ; break your_limits ; continue ; continue living ; debugger"
+PASS Invalid: "function f() { break ; break your_limits ; continue ; continue living ; debugger }"
+PASS Invalid: "debugger X"
+PASS Invalid: "function f() { debugger X }"
+PASS Invalid: "break 0.2"
+PASS Invalid: "function f() { break 0.2 }"
+PASS Invalid: "continue a++"
+PASS Invalid: "function f() { continue a++ }"
+PASS Invalid: "continue (my_friend)"
+PASS Invalid: "function f() { continue (my_friend) }"
+PASS Valid: "while (1) break"
+PASS Valid: "function f() { while (1) break }"
+PASS Valid: "do if (a) with (b) continue; else debugger; while (false)"
+PASS Valid: "function f() { do if (a) with (b) continue; else debugger; while (false) }"
+PASS Invalid: "do if (a) while (false) else debugger"
+PASS Invalid: "function f() { do if (a) while (false) else debugger }"
+PASS Invalid: "while if (a) ;"
+PASS Invalid: "function f() { while if (a) ; }"
+PASS Valid: "if (a) function f() {} else function g() {}"
+PASS Valid: "function f() { if (a) function f() {} else function g() {} }"
+PASS Valid: "if (a()) while(0) function f() {} else function g() {}"
+PASS Valid: "function f() { if (a()) while(0) function f() {} else function g() {} }"
+PASS Invalid: "if (a()) function f() { else function g() }"
+PASS Invalid: "function f() { if (a()) function f() { else function g() } }"
+PASS Invalid: "if (a) if (b) ; else function f {}"
+PASS Invalid: "function f() { if (a) if (b) ; else function f {} }"
+PASS Invalid: "if (a) if (b) ; else function (){}"
+PASS Invalid: "function f() { if (a) if (b) ; else function (){} }"
+PASS Valid: "throw a"
+PASS Valid: "function f() { throw a }"
+PASS Valid: "throw a + b in void c"
+PASS Valid: "function f() { throw a + b in void c }"
+PASS Invalid: "throw"
+PASS Invalid: "function f() { throw }"
+var and const statements
+PASS Valid: "var a, b = null"
+PASS Valid: "function f() { var a, b = null }"
+PASS Valid: "const a = 5, b, c"
+PASS Valid: "function f() { const a = 5, b, c }"
+PASS Invalid: "var"
+PASS Invalid: "function f() { var }"
+PASS Invalid: "var = 7"
+PASS Invalid: "function f() { var = 7 }"
+PASS Invalid: "var c (6)"
+PASS Invalid: "function f() { var c (6) }"
+PASS Valid: "if (a) var a,b; else const b, c"
+PASS Valid: "function f() { if (a) var a,b; else const b, c }"
+PASS Invalid: "var 5 = 6"
+PASS Invalid: "function f() { var 5 = 6 }"
+PASS Valid: "while (0) var a, b, c=6, d, e, f=5*6, g=f*h, h"
+PASS Valid: "function f() { while (0) var a, b, c=6, d, e, f=5*6, g=f*h, h }"
+PASS Invalid: "var a = if (b) { c }"
+PASS Invalid: "function f() { var a = if (b) { c } }"
+PASS Invalid: "var a = var b"
+PASS Invalid: "function f() { var a = var b }"
+PASS Valid: "const a = b += c, a, a, a = (b - f())"
+PASS Valid: "function f() { const a = b += c, a, a, a = (b - f()) }"
+PASS Invalid: "var a %= b | 5"
+PASS Invalid: "function f() { var a %= b | 5 }"
+PASS Invalid: "var (a) = 5"
+PASS Invalid: "function f() { var (a) = 5 }"
+PASS Invalid: "var a = (4, b = 6"
+PASS Invalid: "function f() { var a = (4, b = 6 }"
+PASS Invalid: "const 'l' = 3"
+PASS Invalid: "function f() { const 'l' = 3 }"
+PASS Invalid: "var var = 3"
+PASS Invalid: "function f() { var var = 3 }"
+PASS Valid: "var varr = 3 in 1"
+PASS Valid: "function f() { var varr = 3 in 1 }"
+PASS Valid: "const a, a, a = void 7 - typeof 8, a = 8"
+PASS Valid: "function f() { const a, a, a = void 7 - typeof 8, a = 8 }"
+PASS Valid: "const x_x = 6 /= 7 ? e : f"
+PASS Valid: "function f() { const x_x = 6 /= 7 ? e : f }"
+PASS Invalid: "var a = ?"
+PASS Invalid: "function f() { var a = ? }"
+PASS Invalid: "const a = *7"
+PASS Invalid: "function f() { const a = *7 }"
+PASS Invalid: "var a = :)"
+PASS Invalid: "function f() { var a = :) }"
+PASS Valid: "var a = a in b in c instanceof d"
+PASS Valid: "function f() { var a = a in b in c instanceof d }"
+PASS Invalid: "var a = b ? c, b"
+PASS Invalid: "function f() { var a = b ? c, b }"
+PASS Invalid: "const a = b : c"
+PASS Invalid: "function f() { const a = b : c }"
+for statement
+PASS Valid: "for ( ; ; ) { break }"
+PASS Valid: "function f() { for ( ; ; ) { break } }"
+PASS Valid: "for ( a ; ; ) { break }"
+PASS Valid: "function f() { for ( a ; ; ) { break } }"
+PASS Valid: "for ( ; a ; ) { break }"
+PASS Valid: "function f() { for ( ; a ; ) { break } }"
+PASS Valid: "for ( ; ; a ) { break }"
+PASS Valid: "function f() { for ( ; ; a ) { break } }"
+PASS Valid: "for ( a ; a ; ) break"
+PASS Valid: "function f() { for ( a ; a ; ) break }"
+PASS Valid: "for ( a ; ; a ) break"
+PASS Valid: "function f() { for ( a ; ; a ) break }"
+PASS Valid: "for ( ; a ; a ) break"
+PASS Valid: "function f() { for ( ; a ; a ) break }"
+PASS Invalid: "for () { }"
+PASS Invalid: "function f() { for () { } }"
+PASS Invalid: "for ( a ) { }"
+PASS Invalid: "function f() { for ( a ) { } }"
+PASS Invalid: "for ( ; ) ;"
+PASS Invalid: "function f() { for ( ; ) ; }"
+PASS Invalid: "for a ; b ; c { }"
+PASS Invalid: "function f() { for a ; b ; c { } }"
+PASS Invalid: "for (a ; { }"
+PASS Invalid: "function f() { for (a ; { } }"
+PASS Invalid: "for ( a ; ) ;"
+PASS Invalid: "function f() { for ( a ; ) ; }"
+PASS Invalid: "for ( ; a ) break"
+PASS Invalid: "function f() { for ( ; a ) break }"
+PASS Valid: "for (var a, b ; ; ) { break } "
+PASS Valid: "function f() { for (var a, b ; ; ) { break } }"
+PASS Valid: "for (var a = b, b = a ; ; ) break"
+PASS Valid: "function f() { for (var a = b, b = a ; ; ) break }"
+PASS Valid: "for (var a = b, c, d, b = a ; x in b ; ) { break }"
+PASS Valid: "function f() { for (var a = b, c, d, b = a ; x in b ; ) { break } }"
+PASS Valid: "for (var a = b, c, d ; ; 1 in a()) break"
+PASS Valid: "function f() { for (var a = b, c, d ; ; 1 in a()) break }"
+PASS Invalid: "for ( ; var a ; ) break"
+PASS Invalid: "function f() { for ( ; var a ; ) break }"
+FAIL Invalid: "for (const a; ; ) break" should throw undefined
+FAIL Invalid: "function f() { for (const a; ; ) break }" should throw undefined
+PASS Invalid: "for ( %a ; ; ) { }"
+PASS Invalid: "function f() { for ( %a ; ; ) { } }"
+PASS Valid: "for (a in b) break"
+PASS Valid: "function f() { for (a in b) break }"
+PASS Valid: "for (a() in b) break"
+PASS Valid: "function f() { for (a() in b) break }"
+PASS Valid: "for (a().l[4] in b) break"
+PASS Valid: "function f() { for (a().l[4] in b) break }"
+PASS Valid: "for (new a in b in c in d) break"
+PASS Valid: "function f() { for (new a in b in c in d) break }"
+PASS Valid: "for (new new new a in b) break"
+PASS Valid: "function f() { for (new new new a in b) break }"
+FAIL Invalid: "for (delete new a() in b) break" should throw undefined
+FAIL Invalid: "function f() { for (delete new a() in b) break }" should throw undefined
+FAIL Invalid: "for (a * a in b) break" should throw undefined
+FAIL Invalid: "function f() { for (a * a in b) break }" should throw undefined
+PASS Valid: "for ((a * a) in b) break"
+PASS Valid: "function f() { for ((a * a) in b) break }"
+FAIL Invalid: "for (a++ in b) break" should throw undefined
+FAIL Invalid: "function f() { for (a++ in b) break }" should throw undefined
+PASS Valid: "for ((a++) in b) break"
+PASS Valid: "function f() { for ((a++) in b) break }"
+FAIL Invalid: "for (++a in b) break" should throw undefined
+FAIL Invalid: "function f() { for (++a in b) break }" should throw undefined
+PASS Valid: "for ((++a) in b) break"
+PASS Valid: "function f() { for ((++a) in b) break }"
+FAIL Invalid: "for (a, b in c) break" should throw undefined
+FAIL Invalid: "function f() { for (a, b in c) break }" should throw undefined
+PASS Invalid: "for (a,b in c ;;) break"
+PASS Invalid: "function f() { for (a,b in c ;;) break }"
+PASS Valid: "for (a,(b in c) ;;) break"
+PASS Valid: "function f() { for (a,(b in c) ;;) break }"
+PASS Valid: "for ((a, b) in c) break"
+PASS Valid: "function f() { for ((a, b) in c) break }"
+FAIL Invalid: "for (a ? b : c in c) break" should throw undefined
+FAIL Invalid: "function f() { for (a ? b : c in c) break }" should throw undefined
+PASS Valid: "for ((a ? b : c) in c) break"
+PASS Valid: "function f() { for ((a ? b : c) in c) break }"
+PASS Valid: "for (var a in b in c) break"
+PASS Valid: "function f() { for (var a in b in c) break }"
+PASS Valid: "for (var a = 5 += 6 in b) break"
+PASS Valid: "function f() { for (var a = 5 += 6 in b) break }"
+PASS Invalid: "for (var a += 5 in b) break"
+PASS Invalid: "function f() { for (var a += 5 in b) break }"
+PASS Invalid: "for (var a = in b) break"
+PASS Invalid: "function f() { for (var a = in b) break }"
+PASS Invalid: "for (var a, b in b) break"
+PASS Invalid: "function f() { for (var a, b in b) break }"
+PASS Invalid: "for (var a = -6, b in b) break"
+PASS Invalid: "function f() { for (var a = -6, b in b) break }"
+PASS Invalid: "for (var a, b = 8 in b) break"
+PASS Invalid: "function f() { for (var a, b = 8 in b) break }"
+PASS Valid: "for (var a = (b in c) in d) break"
+PASS Valid: "function f() { for (var a = (b in c) in d) break }"
+PASS Invalid: "for (var a = (b in c in d) break"
+PASS Invalid: "function f() { for (var a = (b in c in d) break }"
+PASS Invalid: "for (var (a) in b) { }"
+PASS Invalid: "function f() { for (var (a) in b) { } }"
+PASS Valid: "for (var a = 7, b = c < d >= d ; f()[6]++ ; --i()[1]++ ) {}"
+PASS Valid: "function f() { for (var a = 7, b = c < d >= d ; f()[6]++ ; --i()[1]++ ) {} }"
+try statement
+PASS Invalid: "try { break } catch(e) {}"
+PASS Invalid: "function f() { try { break } catch(e) {} }"
+PASS Valid: "try {} finally { c++ }"
+PASS Valid: "function f() { try {} finally { c++ } }"
+PASS Valid: "try { with (x) { } } catch(e) {} finally { if (a) ; }"
+PASS Valid: "function f() { try { with (x) { } } catch(e) {} finally { if (a) ; } }"
+PASS Invalid: "try {}"
+PASS Invalid: "function f() { try {} }"
+PASS Invalid: "catch(e) {}"
+PASS Invalid: "function f() { catch(e) {} }"
+PASS Invalid: "finally {}"
+PASS Invalid: "function f() { finally {} }"
+PASS Invalid: "try a; catch(e) {}"
+PASS Invalid: "function f() { try a; catch(e) {} }"
+PASS Invalid: "try {} catch(e) a()"
+PASS Invalid: "function f() { try {} catch(e) a() }"
+PASS Invalid: "try {} finally a()"
+PASS Invalid: "function f() { try {} finally a() }"
+PASS Invalid: "try {} catch(e)"
+PASS Invalid: "function f() { try {} catch(e) }"
+PASS Invalid: "try {} finally"
+PASS Invalid: "function f() { try {} finally }"
+PASS Invalid: "try {} finally {} catch(e) {}"
+PASS Invalid: "function f() { try {} finally {} catch(e) {} }"
+PASS Invalid: "try {} catch (...) {}"
+PASS Invalid: "function f() { try {} catch (...) {} }"
+PASS Invalid: "try {} catch {}"
+PASS Invalid: "function f() { try {} catch {} }"
+PASS Valid: "if (a) try {} finally {} else b;"
+PASS Valid: "function f() { if (a) try {} finally {} else b; }"
+PASS Valid: "if (--a()) do with(1) try {} catch(ke) { f() ; g() } while (a in b) else {}"
+PASS Valid: "function f() { if (--a()) do with(1) try {} catch(ke) { f() ; g() } while (a in b) else {} }"
+PASS Invalid: "if (a) try {} else b; catch (e) { }"
+PASS Invalid: "function f() { if (a) try {} else b; catch (e) { } }"
+PASS Invalid: "try { finally {}"
+PASS Invalid: "function f() { try { finally {} }"
+switch statement
+PASS Valid: "switch (a) {}"
+PASS Valid: "function f() { switch (a) {} }"
+PASS Invalid: "switch () {}"
+PASS Invalid: "function f() { switch () {} }"
+PASS Invalid: "case 5:"
+PASS Invalid: "function f() { case 5: }"
+PASS Invalid: "default:"
+PASS Invalid: "function f() { default: }"
+PASS Invalid: "switch (a) b;"
+PASS Invalid: "function f() { switch (a) b; }"
+PASS Invalid: "switch (a) case 3: b;"
+PASS Invalid: "function f() { switch (a) case 3: b; }"
+PASS Valid: "switch (f()) { case 5 * f(): default: case '6' - 9: ++i }"
+PASS Valid: "function f() { switch (f()) { case 5 * f(): default: case '6' - 9: ++i } }"
+PASS Invalid: "switch (true) { default: case 6: default: }"
+PASS Invalid: "function f() { switch (true) { default: case 6: default: } }"
+PASS Invalid: "switch (l) { f(); }"
+PASS Invalid: "function f() { switch (l) { f(); } }"
+PASS Invalid: "switch (l) { case 1: ; a: case 5: }"
+PASS Invalid: "function f() { switch (l) { case 1: ; a: case 5: } }"
+PASS Valid: "switch (g() - h[5].l) { case 1 + 6: a: b: c: ++f }"
+PASS Valid: "function f() { switch (g() - h[5].l) { case 1 + 6: a: b: c: ++f } }"
+PASS Invalid: "switch (g) { case 1: a: }"
+PASS Invalid: "function f() { switch (g) { case 1: a: } }"
+PASS Invalid: "switch (g) { case 1: a: default: }"
+PASS Invalid: "function f() { switch (g) { case 1: a: default: } }"
+PASS Invalid: "switch g { case 1: l() }"
+PASS Invalid: "function f() { switch g { case 1: l() } }"
+PASS Invalid: "switch (g) { case 1:"
+PASS Invalid: "function f() { switch (g) { case 1: }"
+PASS Valid: "switch (l) { case a = b ? c : d : }"
+PASS Valid: "function f() { switch (l) { case a = b ? c : d : } }"
+PASS Valid: "switch (sw) { case a ? b - 7[1] ? [c,,] : d = 6 : { } : }"
+PASS Valid: "function f() { switch (sw) { case a ? b - 7[1] ? [c,,] : d = 6 : { } : } }"
+PASS Invalid: "switch (l) { case b ? c : }"
+PASS Invalid: "function f() { switch (l) { case b ? c : } }"
+PASS Valid: "switch (l) { case 1: a: with(g) switch (g) { case 2: default: } default: }"
+PASS Valid: "function f() { switch (l) { case 1: a: with(g) switch (g) { case 2: default: } default: } }"
+PASS Invalid: "switch (4 - ) { }"
+PASS Invalid: "function f() { switch (4 - ) { } }"
+PASS Invalid: "switch (l) { default case: 5; }"
+PASS Invalid: "function f() { switch (l) { default case: 5; } }"
+PASS Invalid: "L: L: ;"
+PASS Invalid: "function f() { L: L: ; }"
+PASS Invalid: "L: L1: L: ;"
+PASS Invalid: "function f() { L: L1: L: ; }"
+PASS Invalid: "L: L1: L2: L3: L4: L: ;"
+PASS Invalid: "function f() { L: L1: L2: L3: L4: L: ; }"
+PASS Invalid: "for(var a,b 'this shouldn't be allowed' false ; ) ;"
+PASS Invalid: "function f() { for(var a,b 'this shouldn't be allowed' false ; ) ; }"
+PASS Invalid: "for(var a,b '"
+PASS Invalid: "function f() { for(var a,b ' }"
+PASS Valid: "function __proto__(){}"
+PASS Valid: "function f() { function __proto__(){} }"
+PASS Valid: "(function __proto__(){})"
+PASS Valid: "function f() { (function __proto__(){}) }"
+PASS Valid: "'use strict'; function __proto__(){}"
+PASS Valid: "function f() { 'use strict'; function __proto__(){} }"
+PASS Valid: "'use strict'; (function __proto__(){})"
+PASS Valid: "function f() { 'use strict'; (function __proto__(){}) }"
+PASS Valid: "if (0) $foo; "
+PASS Valid: "function f() { if (0) $foo; }"
+PASS Valid: "if (0) _foo; "
+PASS Valid: "function f() { if (0) _foo; }"
+PASS Valid: "if (0) foo$; "
+PASS Valid: "function f() { if (0) foo$; }"
+PASS Valid: "if (0) foo_; "
+PASS Valid: "function f() { if (0) foo_; }"
+PASS Valid: "if (0) obj.$foo; "
+PASS Valid: "function f() { if (0) obj.$foo; }"
+PASS Valid: "if (0) obj._foo; "
+PASS Valid: "function f() { if (0) obj._foo; }"
+PASS Valid: "if (0) obj.foo$; "
+PASS Valid: "function f() { if (0) obj.foo$; }"
+PASS Valid: "if (0) obj.foo_; "
+PASS Valid: "function f() { if (0) obj.foo_; }"
+PASS Valid: "if (0) obj.foo\u03bb; "
+PASS Valid: "function f() { if (0) obj.foo\u03bb; }"
+PASS Valid: "if (0) new a(b+c).d = 5"
+PASS Valid: "function f() { if (0) new a(b+c).d = 5 }"
+PASS Valid: "if (0) new a(b+c) = 5"
+PASS Valid: "function f() { if (0) new a(b+c) = 5 }"
+PASS Valid: "([1 || 1].a = 1)"
+PASS Valid: "function f() { ([1 || 1].a = 1) }"
+PASS Valid: "({a: 1 || 1}.a = 1)"
+PASS Valid: "function f() { ({a: 1 || 1}.a = 1) }"
+PASS Invalid: "var a.b = c"
+PASS Invalid: "function f() { var a.b = c }"
+PASS Invalid: "var a.b;"
+PASS Invalid: "function f() { var a.b; }"
+FAIL e.line should be 1 (of type number). Was undefined (of type undefined).
+PASS foo is 'PASS'
+PASS bar is 'PASS'
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This test checks that the following expressions or statements are valid ECMASCRIPT code or should throw parse error"
+);
+
+function runTest(_a, errorType)
+{
+ var success;
+ if (typeof _a != "string")
+ testFailed("runTest expects string argument: " + _a);
+ try {
+ eval(_a);
+ success = true;
+ } catch (e) {
+ success = !(e instanceof SyntaxError);
+ }
+ if ((!!errorType) == !success) {
+ if (errorType)
+ testPassed('Invalid: "' + _a + '"');
+ else
+ testPassed('Valid: "' + _a + '"');
+ } else {
+ if (errorType)
+ testFailed('Invalid: "' + _a + '" should throw ' + errorType.name);
+ else
+ testFailed('Valid: "' + _a + '" should NOT throw ');
+ }
+}
+
+function valid(_a)
+{
+ // Test both the grammar and the syntax checker
+ runTest(_a, false);
+ runTest("function f() { " + _a + " }", false);
+}
+
+function invalid(_a, _type)
+{
+ _type = _type || SyntaxError;
+ // Test both the grammar and the syntax checker
+ runTest(_a, true);
+ runTest("function f() { " + _a + " }", true);
+}
+
+// known issue:
+// some statements requires statement as argument, and
+// it seems the End-Of-File terminator is converted to semicolon
+// "a:[EOF]" is not parse error, while "{ a: }" is parse error
+// "if (a)[EOF]" is not parse error, while "{ if (a) }" is parse error
+// known issues of bison parser:
+// accepts: 'function f() { return 6 + }' (only inside a function declaration)
+// some comma expressions: see reparsing-semicolon-insertion.js
+
+debug ("Unary operators and member access");
+
+valid ("");
+invalid("(a");
+invalid("a[5");
+invalid("a[5 + 6");
+invalid("a.");
+invalid("()");
+invalid("a.'l'");
+valid ("a: +~!new a");
+invalid("new -a");
+valid ("new (-1)")
+valid ("a: b: c: new f(x++)++")
+valid ("(a)++");
+valid ("(1--).x");
+invalid("a-- ++");
+invalid("(a:) --b");
+valid ("++ -- ++ a");
+valid ("++ new new a ++");
+valid ("delete void 0");
+invalid("delete the void");
+invalid("(a++");
+valid ("++a--");
+valid ("++((a))--");
+valid ("(a.x++)++");
+invalid("1: null");
+invalid("+-!~");
+invalid("+-!~((");
+invalid("a)");
+invalid("a]");
+invalid(".l");
+invalid("1.l");
+valid ("1 .l");
+
+debug ("Binary and conditional operators");
+
+valid ("a + + typeof this");
+invalid("a + * b");
+invalid("a ? b");
+invalid("a ? b :");
+invalid("%a");
+invalid("a-");
+valid ("a = b ? b = c : d = e");
+valid ("s: a[1].l ? b.l['s'] ? c++ : d : true");
+valid ("a ? b + 1 ? c + 3 * d.l : d[5][6] : e");
+valid ("a in b instanceof delete -c");
+invalid("a in instanceof b.l");
+valid ("- - true % 5");
+invalid("- false = 3");
+valid ("a: b: c: (1 + null) = 3");
+valid ("a[2] = b.l += c /= 4 * 7 ^ !6");
+invalid("a + typeof b += c in d");
+invalid("typeof a &= typeof b");
+valid ("a: ((typeof (a))) >>>= a || b.l && c");
+valid ("a: b: c[a /= f[a %= b]].l[c[x] = 7] -= a ? b <<= f : g");
+valid ("-void+x['y'].l == x.l != 5 - f[7]");
+
+debug ("Function calls (and new with arguments)");
+
+valid ("a()()()");
+valid ("s: l: a[2](4 == 6, 5 = 6)(f[4], 6)");
+valid ("s: eval(a.apply(), b.call(c[5] - f[7]))");
+invalid("a(");
+invalid("a(5");
+invalid("a(5,");
+invalid("a(5,)");
+invalid("a(5,6");
+valid ("a(b[7], c <d> e.l, new a() > b)");
+invalid("a(b[5)");
+invalid("a(b.)");
+valid ("~new new a(1)(i++)(c[l])");
+invalid("a(*a)");
+valid ("((((a))((b)()).l))()");
+valid ("(a)[b + (c) / (d())].l--");
+valid ("new (5)");
+invalid("new a(5");
+valid ("new (f + 5)(6, (g)() - 'l'() - true(false))");
+invalid("a(.length)");
+
+debug ("function declaration and expression");
+
+valid ("function f() {}");
+valid ("function f(a,b) {}");
+invalid("function () {}");
+invalid("function f(a b) {}");
+invalid("function f(a,) {}");
+invalid("function f(a,");
+invalid("function f(a, 1) {}");
+valid ("function g(arguments, eval) {}");
+valid ("function f() {} + function g() {}");
+invalid("(function a{})");
+invalid("(function this(){})");
+valid ("(delete new function f(){} + function(a,b){}(5)(6))");
+valid ("6 - function (m) { function g() {} }");
+invalid("function l() {");
+invalid("function l++(){}");
+
+debug ("Array and object literal, comma operator");
+
+// Note these are tested elsewhere, no need to repeat those tests here
+valid ("[] in [5,6] * [,5,] / [,,5,,] || [a,] && new [,b] % [,,]");
+invalid("[5,");
+invalid("[,");
+invalid("(a,)");
+valid ("1 + {get get(){}, set set(a){}, get1:4, set1:get-set, }");
+invalid("1 + {a");
+invalid("1 + {a:");
+invalid("1 + {get l(");
+invalid(",a");
+valid ("(4,(5,a(3,4))),f[4,a-6]");
+invalid("(,f)");
+invalid("a,,b");
+invalid("a ? b, c : d");
+
+debug ("simple statements");
+
+valid ("{ }");
+invalid("{ { }");
+valid ("{ ; ; ; }");
+valid ("a: { ; }");
+invalid("{ a: }");
+valid ("{} f; { 6 + f() }");
+valid ("{ a[5],6; {} ++b-new (-5)() } c().l++");
+valid ("{ l1: l2: l3: { this } a = 32 ; { i++ ; { { { } } ++i } } }");
+valid ("if (a) ;");
+invalid("{ if (a) }");
+invalid("if a {}");
+invalid("if (a");
+invalid("if (a { }");
+valid ("x: s: if (a) ; else b");
+invalid("else {}");
+valid ("if (a) if (b) y; else {} else ;");
+invalid("if (a) {} else x; else");
+invalid("if (a) { else }");
+valid ("if (a.l + new b()) 4 + 5 - f()");
+valid ("if (a) with (x) ; else with (y) ;");
+invalid("with a.b { }");
+valid ("while (a() - new b) ;");
+invalid("while a {}");
+valid ("do ; while(0) i++"); // Is this REALLY valid? (Firefox also accepts this)
+valid ("do if (a) x; else y; while(z)");
+invalid("do g; while 4");
+invalid("do g; while ((4)");
+valid ("{ { do do do ; while(0) while(0) while(0) } }");
+valid ("do while (0) if (a) {} else y; while(0)");
+valid ("if (a) while (b) if (c) with(d) {} else e; else f");
+invalid("break ; break your_limits ; continue ; continue living ; debugger");
+invalid("debugger X");
+invalid("break 0.2");
+invalid("continue a++");
+invalid("continue (my_friend)");
+valid ("while (1) break");
+valid ("do if (a) with (b) continue; else debugger; while (false)");
+invalid("do if (a) while (false) else debugger");
+invalid("while if (a) ;");
+valid ("if (a) function f() {} else function g() {}");
+valid ("if (a()) while(0) function f() {} else function g() {}");
+invalid("if (a()) function f() { else function g() }");
+invalid("if (a) if (b) ; else function f {}");
+invalid("if (a) if (b) ; else function (){}");
+valid ("throw a");
+valid ("throw a + b in void c");
+invalid("throw");
+
+debug ("var and const statements");
+
+valid ("var a, b = null");
+valid ("const a = 5, b, c");
+invalid("var");
+invalid("var = 7");
+invalid("var c (6)");
+valid ("if (a) var a,b; else const b, c");
+invalid("var 5 = 6");
+valid ("while (0) var a, b, c=6, d, e, f=5*6, g=f*h, h");
+invalid("var a = if (b) { c }");
+invalid("var a = var b");
+valid ("const a = b += c, a, a, a = (b - f())");
+invalid("var a %= b | 5");
+invalid("var (a) = 5");
+invalid("var a = (4, b = 6");
+invalid("const 'l' = 3");
+invalid("var var = 3");
+valid ("var varr = 3 in 1");
+valid ("const a, a, a = void 7 - typeof 8, a = 8");
+valid ("const x_x = 6 /= 7 ? e : f");
+invalid("var a = ?");
+invalid("const a = *7");
+invalid("var a = :)");
+valid ("var a = a in b in c instanceof d");
+invalid("var a = b ? c, b");
+invalid("const a = b : c");
+
+debug ("for statement");
+
+valid ("for ( ; ; ) { break }");
+valid ("for ( a ; ; ) { break }");
+valid ("for ( ; a ; ) { break }");
+valid ("for ( ; ; a ) { break }");
+valid ("for ( a ; a ; ) break");
+valid ("for ( a ; ; a ) break");
+valid ("for ( ; a ; a ) break");
+invalid("for () { }");
+invalid("for ( a ) { }");
+invalid("for ( ; ) ;");
+invalid("for a ; b ; c { }");
+invalid("for (a ; { }");
+invalid("for ( a ; ) ;");
+invalid("for ( ; a ) break");
+valid ("for (var a, b ; ; ) { break } ");
+valid ("for (var a = b, b = a ; ; ) break");
+valid ("for (var a = b, c, d, b = a ; x in b ; ) { break }");
+valid ("for (var a = b, c, d ; ; 1 in a()) break");
+invalid("for ( ; var a ; ) break");
+invalid("for (const a; ; ) break");
+invalid("for ( %a ; ; ) { }");
+valid ("for (a in b) break");
+valid ("for (a() in b) break");
+valid ("for (a().l[4] in b) break");
+valid ("for (new a in b in c in d) break");
+valid ("for (new new new a in b) break");
+invalid("for (delete new a() in b) break");
+invalid("for (a * a in b) break");
+valid ("for ((a * a) in b) break");
+invalid("for (a++ in b) break");
+valid ("for ((a++) in b) break");
+invalid("for (++a in b) break");
+valid ("for ((++a) in b) break");
+invalid("for (a, b in c) break");
+invalid("for (a,b in c ;;) break");
+valid ("for (a,(b in c) ;;) break");
+valid ("for ((a, b) in c) break");
+invalid("for (a ? b : c in c) break");
+valid ("for ((a ? b : c) in c) break");
+valid ("for (var a in b in c) break");
+valid ("for (var a = 5 += 6 in b) break");
+invalid("for (var a += 5 in b) break");
+invalid("for (var a = in b) break");
+invalid("for (var a, b in b) break");
+invalid("for (var a = -6, b in b) break");
+invalid("for (var a, b = 8 in b) break");
+valid ("for (var a = (b in c) in d) break");
+invalid("for (var a = (b in c in d) break");
+invalid("for (var (a) in b) { }");
+valid ("for (var a = 7, b = c < d >= d ; f()[6]++ ; --i()[1]++ ) {}");
+
+debug ("try statement");
+
+invalid("try { break } catch(e) {}");
+valid ("try {} finally { c++ }");
+valid ("try { with (x) { } } catch(e) {} finally { if (a) ; }");
+invalid("try {}");
+invalid("catch(e) {}");
+invalid("finally {}");
+invalid("try a; catch(e) {}");
+invalid("try {} catch(e) a()");
+invalid("try {} finally a()");
+invalid("try {} catch(e)");
+invalid("try {} finally");
+invalid("try {} finally {} catch(e) {}");
+invalid("try {} catch (...) {}");
+invalid("try {} catch {}");
+valid ("if (a) try {} finally {} else b;");
+valid ("if (--a()) do with(1) try {} catch(ke) { f() ; g() } while (a in b) else {}");
+invalid("if (a) try {} else b; catch (e) { }");
+invalid("try { finally {}");
+
+debug ("switch statement");
+
+valid ("switch (a) {}");
+invalid("switch () {}");
+invalid("case 5:");
+invalid("default:");
+invalid("switch (a) b;");
+invalid("switch (a) case 3: b;");
+valid ("switch (f()) { case 5 * f(): default: case '6' - 9: ++i }");
+invalid("switch (true) { default: case 6: default: }");
+invalid("switch (l) { f(); }");
+invalid("switch (l) { case 1: ; a: case 5: }");
+valid ("switch (g() - h[5].l) { case 1 + 6: a: b: c: ++f }");
+invalid("switch (g) { case 1: a: }");
+invalid("switch (g) { case 1: a: default: }");
+invalid("switch g { case 1: l() }");
+invalid("switch (g) { case 1:");
+valid ("switch (l) { case a = b ? c : d : }");
+valid ("switch (sw) { case a ? b - 7[1] ? [c,,] : d = 6 : { } : }");
+invalid("switch (l) { case b ? c : }");
+valid ("switch (l) { case 1: a: with(g) switch (g) { case 2: default: } default: }");
+invalid("switch (4 - ) { }");
+invalid("switch (l) { default case: 5; }");
+
+invalid("L: L: ;");
+invalid("L: L1: L: ;");
+invalid("L: L1: L2: L3: L4: L: ;");
+
+invalid("for(var a,b 'this shouldn\'t be allowed' false ; ) ;");
+invalid("for(var a,b '");
+
+valid("function __proto__(){}")
+valid("(function __proto__(){})")
+valid("'use strict'; function __proto__(){}")
+valid("'use strict'; (function __proto__(){})")
+
+valid("if (0) $foo; ")
+valid("if (0) _foo; ")
+valid("if (0) foo$; ")
+valid("if (0) foo_; ")
+valid("if (0) obj.$foo; ")
+valid("if (0) obj._foo; ")
+valid("if (0) obj.foo$; ")
+valid("if (0) obj.foo_; ")
+valid("if (0) obj.foo\\u03bb; ")
+valid("if (0) new a(b+c).d = 5");
+valid("if (0) new a(b+c) = 5");
+valid("([1 || 1].a = 1)");
+valid("({a: 1 || 1}.a = 1)");
+
+invalid("var a.b = c");
+invalid("var a.b;");
+
+try { eval("a.b.c = {};"); } catch(e1) { e=e1; shouldBe("e.line", "1") }
+foo = 'FAIL';
+bar = 'PASS';
+try {
+ eval("foo = 'PASS'; a.b.c = {}; bar = 'FAIL';");
+} catch(e) {
+ shouldBe("foo", "'PASS'");
+ shouldBe("bar", "'PASS'");
+}
--- /dev/null
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This page tests for assertion failures in edge cases of property lookup on primitive values.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS checkGet(1, Number) is true
+PASS checkGet('hello', String) is true
+PASS checkGet(true, Boolean) is true
+FAIL checkSet(1, Number) should be true. Was false.
+FAIL checkSet('hello', String) should be true. Was false.
+FAIL checkSet(true, Boolean) should be true. Was false.
+PASS checkGetStrict(1, Number) is true
+PASS checkGetStrict('hello', String) is true
+PASS checkGetStrict(true, Boolean) is true
+FAIL checkSetStrict(1, Number) should be true. Was false.
+FAIL checkSetStrict('hello', String) should be true. Was false.
+FAIL checkSetStrict(true, Boolean) should be true. Was false.
+PASS checkRead(1, Number) is true
+PASS checkRead('hello', String) is true
+PASS checkRead(true, Boolean) is true
+PASS checkWrite(1, Number) is true
+PASS checkWrite('hello', String) is true
+PASS checkWrite(true, Boolean) is true
+PASS checkReadStrict(1, Number) is true
+PASS checkReadStrict('hello', String) is true
+PASS checkReadStrict(true, Boolean) is true
+FAIL checkWriteStrict(1, Number) should throw an exception. Was true.
+FAIL checkWriteStrict('hello', String) should throw an exception. Was true.
+FAIL checkWriteStrict(true, Boolean) should throw an exception. Was true.
+PASS checkNumericGet(1, Number) is true
+PASS checkNumericGet('hello', String) is true
+PASS checkNumericGet(true, Boolean) is true
+FAIL checkNumericSet(1, Number) should be true. Was false.
+FAIL checkNumericSet('hello', String) should be true. Was false.
+FAIL checkNumericSet(true, Boolean) should be true. Was false.
+FAIL checkNumericGetStrict(1, Number) should be true. Was false.
+FAIL checkNumericGetStrict('hello', String) should be true. Was false.
+FAIL checkNumericGetStrict(true, Boolean) should be true. Was false.
+FAIL checkNumericSetStrict(1, Number) should be true. Was false.
+FAIL checkNumericSetStrict('hello', String) should be true. Was false.
+FAIL checkNumericSetStrict(true, Boolean) should be true. Was false.
+PASS checkNumericRead(1, Number) is true
+PASS checkNumericRead('hello', String) is true
+PASS checkNumericRead(true, Boolean) is true
+PASS checkNumericWrite(1, Number) is true
+PASS checkNumericWrite('hello', String) is true
+PASS checkNumericWrite(true, Boolean) is true
+PASS checkNumericReadStrict(1, Number) is true
+PASS checkNumericReadStrict('hello', String) is true
+PASS checkNumericReadStrict(true, Boolean) is true
+FAIL checkNumericWriteStrict(1, Number) should throw an exception. Was true.
+FAIL checkNumericWriteStrict('hello', String) should throw an exception. Was true.
+FAIL checkNumericWriteStrict(true, Boolean) should throw an exception. Was true.
+PASS didNotCrash is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This page tests for assertion failures in edge cases of property lookup on primitive values."
+);
+
+var didNotCrash = true;
+
+(function () {
+ delete String.prototype.constructor;
+ for (var i = 0; i < 3; ++i)
+ "".replace;
+})();
+
+(function () {
+ String.prototype.__proto__ = { x: 1, y: 1 };
+ delete String.prototype.__proto__.x;
+ for (var i = 0; i < 3; ++i)
+ "".y;
+})();
+
+(function () {
+ function f(x) {
+ x.y;
+ }
+
+ String.prototype.x = 1;
+ String.prototype.y = 1;
+ delete String.prototype.x;
+
+ Number.prototype.x = 1;
+ Number.prototype.y = 1;
+ delete Number.prototype.x;
+
+ for (var i = 0; i < 3; ++i)
+ f("");
+
+ for (var i = 0; i < 3; ++i)
+ f(.5);
+})();
+
+
+var checkOkay;
+
+function checkGet(x, constructor)
+{
+ checkOkay = false;
+ Object.defineProperty(constructor.prototype, "foo", { get: function() { checkOkay = typeof this === 'object'; }, configurable: true });
+ x.foo;
+ delete constructor.prototype.foo;
+ return checkOkay;
+}
+
+function checkSet(x, constructor)
+{
+ checkOkay = false;
+ Object.defineProperty(constructor.prototype, "foo", { set: function() { checkOkay = typeof this === 'object'; }, configurable: true });
+ x.foo = null;
+ delete constructor.prototype.foo;
+ return checkOkay;
+}
+
+function checkGetStrict(x, constructor)
+{
+ checkOkay = false;
+ Object.defineProperty(constructor.prototype, "foo", { get: function() { "use strict"; checkOkay = typeof this !== 'object'; }, configurable: true });
+ x.foo;
+ delete constructor.prototype.foo;
+ return checkOkay;
+}
+
+function checkSetStrict(x, constructor)
+{
+ checkOkay = false;
+ Object.defineProperty(constructor.prototype, "foo", { set: function() { "use strict"; checkOkay = typeof this !== 'object'; }, configurable: true });
+ x.foo = null;
+ delete constructor.prototype.foo;
+ return checkOkay;
+}
+
+shouldBeTrue("checkGet(1, Number)");
+shouldBeTrue("checkGet('hello', String)");
+shouldBeTrue("checkGet(true, Boolean)");
+shouldBeTrue("checkSet(1, Number)");
+shouldBeTrue("checkSet('hello', String)");
+shouldBeTrue("checkSet(true, Boolean)");
+shouldBeTrue("checkGetStrict(1, Number)");
+shouldBeTrue("checkGetStrict('hello', String)");
+shouldBeTrue("checkGetStrict(true, Boolean)");
+shouldBeTrue("checkSetStrict(1, Number)");
+shouldBeTrue("checkSetStrict('hello', String)");
+shouldBeTrue("checkSetStrict(true, Boolean)");
+
+function checkRead(x, constructor)
+{
+ return x.foo === undefined;
+}
+
+function checkWrite(x, constructor)
+{
+ x.foo = null;
+ return x.foo === undefined;
+}
+
+function checkReadStrict(x, constructor)
+{
+ "use strict";
+ return x.foo === undefined;
+}
+
+function checkWriteStrict(x, constructor)
+{
+ "use strict";
+ x.foo = null;
+ return x.foo === undefined;
+}
+
+shouldBeTrue("checkRead(1, Number)");
+shouldBeTrue("checkRead('hello', String)");
+shouldBeTrue("checkRead(true, Boolean)");
+shouldBeTrue("checkWrite(1, Number)");
+shouldBeTrue("checkWrite('hello', String)");
+shouldBeTrue("checkWrite(true, Boolean)");
+shouldBeTrue("checkReadStrict(1, Number)");
+shouldBeTrue("checkReadStrict('hello', String)");
+shouldBeTrue("checkReadStrict(true, Boolean)");
+shouldThrow("checkWriteStrict(1, Number)");
+shouldThrow("checkWriteStrict('hello', String)");
+shouldThrow("checkWriteStrict(true, Boolean)");
+
+function checkNumericGet(x, constructor)
+{
+ checkOkay = false;
+ Object.defineProperty(constructor.prototype, 42, { get: function() { checkOkay = typeof this === 'object'; }, configurable: true });
+ x[42];
+ delete constructor.prototype[42];
+ return checkOkay;
+}
+
+function checkNumericSet(x, constructor)
+{
+ checkOkay = false;
+ Object.defineProperty(constructor.prototype, 42, { set: function() { checkOkay = typeof this === 'object'; }, configurable: true });
+ x[42] = null;
+ delete constructor.prototype[42];
+ return checkOkay;
+}
+
+function checkNumericGetStrict(x, constructor)
+{
+ checkOkay = false;
+ Object.defineProperty(constructor.prototype, 42, { get: function() { "use strict"; checkOkay = typeof this !== 'object'; }, configurable: true });
+ x[42];
+ delete constructor.prototype[42];
+ return checkOkay;
+}
+
+function checkNumericSetStrict(x, constructor)
+{
+ checkOkay = false;
+ Object.defineProperty(constructor.prototype, 42, { set: function() { "use strict"; checkOkay = typeof this !== 'object'; }, configurable: true });
+ x[42] = null;
+ delete constructor.prototype[42];
+ return checkOkay;
+}
+
+shouldBeTrue("checkNumericGet(1, Number)");
+shouldBeTrue("checkNumericGet('hello', String)");
+shouldBeTrue("checkNumericGet(true, Boolean)");
+shouldBeTrue("checkNumericSet(1, Number)");
+shouldBeTrue("checkNumericSet('hello', String)");
+shouldBeTrue("checkNumericSet(true, Boolean)");
+shouldBeTrue("checkNumericGetStrict(1, Number)");
+shouldBeTrue("checkNumericGetStrict('hello', String)");
+shouldBeTrue("checkNumericGetStrict(true, Boolean)");
+shouldBeTrue("checkNumericSetStrict(1, Number)");
+shouldBeTrue("checkNumericSetStrict('hello', String)");
+shouldBeTrue("checkNumericSetStrict(true, Boolean)");
+
+function checkNumericRead(x, constructor)
+{
+ return x[42] === undefined;
+}
+
+function checkNumericWrite(x, constructor)
+{
+ x[42] = null;
+ return x[42] === undefined;
+}
+
+function checkNumericReadStrict(x, constructor)
+{
+ "use strict";
+ return x[42] === undefined;
+}
+
+function checkNumericWriteStrict(x, constructor)
+{
+ "use strict";
+ x[42] = null;
+ return x[42] === undefined;
+}
+
+shouldBeTrue("checkNumericRead(1, Number)");
+shouldBeTrue("checkNumericRead('hello', String)");
+shouldBeTrue("checkNumericRead(true, Boolean)");
+shouldBeTrue("checkNumericWrite(1, Number)");
+shouldBeTrue("checkNumericWrite('hello', String)");
+shouldBeTrue("checkNumericWrite(true, Boolean)");
+shouldBeTrue("checkNumericReadStrict(1, Number)");
+shouldBeTrue("checkNumericReadStrict('hello', String)");
+shouldBeTrue("checkNumericReadStrict(true, Boolean)");
+shouldThrow("checkNumericWriteStrict(1, Number)");
+shouldThrow("checkNumericWriteStrict('hello', String)");
+shouldThrow("checkNumericWriteStrict(true, Boolean)");
+
+shouldBeTrue("didNotCrash");
--- /dev/null
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests whether eval() works inside statements that read and modify a value.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS multTest(); is true
+PASS divTest(); is true
+PASS addTest(); is true
+PASS subTest(); is true
+PASS lshiftTest(); is true
+PASS rshiftTest(); is true
+PASS urshiftTest(); is true
+PASS andTest(); is true
+PASS xorTest(); is true
+PASS orTest(); is true
+PASS modTest(); is true
+PASS preIncTest(); is true
+PASS preDecTest(); is true
+PASS postIncTest(); is true
+PASS postDecTest(); is true
+PASS primitiveThisTest.call(1); is true
+FAIL strictThisTest.call(1); should throw an exception. Was true.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'Tests whether eval() works inside statements that read and modify a value.'
+);
+
+function multTest()
+{
+ var x = 1;
+ x *= eval('2');
+ return x == 2;
+}
+
+function divTest()
+{
+ var x = 2;
+ x /= eval('2');
+ return x == 1;
+}
+
+function addTest()
+{
+ var x = 0;
+ x += eval('1');
+ return x == 1;
+}
+
+function subTest()
+{
+ var x = 0;
+ x -= eval('1');
+ return x == -1;
+}
+
+function lshiftTest()
+{
+ var x = 1;
+ x <<= eval('1');
+ return x == 2;
+}
+
+function rshiftTest()
+{
+ var x = 1;
+ x >>= eval('1');
+ return x == 0;
+}
+
+function urshiftTest()
+{
+ var x = 1;
+ x >>>= eval('1');
+ return x == 0;
+}
+
+function andTest()
+{
+ var x = 1;
+ x &= eval('1');
+ return x == 1;
+}
+
+function xorTest()
+{
+ var x = 0;
+ x ^= eval('1');
+ return x == 1;
+}
+
+function orTest()
+{
+ var x = 0;
+ x |= eval('1');
+ return x == 1;
+}
+
+function modTest()
+{
+ var x = 4;
+ x %= eval('3');
+ return x == 1;
+}
+
+function preIncTest()
+{
+ var x = { value: 0 };
+ ++eval('x').value;
+ return x.value == 1;
+}
+
+function preDecTest()
+{
+ var x = { value: 0 };
+ --eval('x').value;
+ return x.value == -1;
+}
+
+function postIncTest()
+{
+ var x = { value: 0 };
+ eval('x').value++;
+ return x.value == 1;
+}
+
+function postDecTest()
+{
+ var x = { value: 0 };
+ eval('x').value--;
+ return x.value == -1;
+}
+
+function primitiveThisTest()
+{
+ // Test that conversion of this is persistant over multiple calls to eval,
+ // even where 'this' is not directly used within the function.
+ eval('this.value = "Seekrit message";');
+ return eval('this.value') === "Seekrit message";
+}
+
+function strictThisTest()
+{
+ // In a strict mode function primitive this values are not converted, so
+ // the property access in the first eval is writing a value to a temporary
+ // object. This throws, per section 8.7.2.
+ "use strict";
+ eval('this.value = "Seekrit message";');
+ return eval('this.value') === undefined;
+}
+
+shouldBeTrue('multTest();');
+shouldBeTrue('divTest();');
+shouldBeTrue('addTest();');
+shouldBeTrue('subTest();');
+shouldBeTrue('lshiftTest();');
+shouldBeTrue('rshiftTest();');
+shouldBeTrue('urshiftTest();');
+shouldBeTrue('andTest();');
+shouldBeTrue('xorTest();');
+shouldBeTrue('orTest();');
+shouldBeTrue('modTest();');
+
+shouldBeTrue('preIncTest();');
+shouldBeTrue('preDecTest();');
+shouldBeTrue('postIncTest();');
+shouldBeTrue('postDecTest();');
+
+shouldBeTrue('primitiveThisTest.call(1);');
+shouldThrow('strictThisTest.call(1);');
--- /dev/null
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test for beginning of line (BOL or ^) matching
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS s.match(/^notHere/) is null
+PASS s.match(/^abc/) is ["abc"]
+PASS s.match(/(^|X)abc/) is ["abc",""]
+PASS s.match(/^longer|123/) is ["123"]
+PASS s.match(/(^abc|c)123/) is ["abc123","abc"]
+PASS s.match(/(c|^abc)123/) is ["abc123","abc"]
+PASS s.match(/(^ab|abc)123/) is ["abc123","abc"]
+PASS s.match(/(bc|^abc)([0-9]*)a/) is ["bc789a","bc","789"]
+PASS /(?:(Y)X)|(X)/.exec("abc") is null
+PASS /(?:(?:^|Y)X)|(X)/.exec("abc") is null
+PASS /(?:(?:^|Y)X)|(X)/.exec("abcd") is null
+PASS /(?:(?:^|Y)X)|(X)/.exec("Xabcd") is ["X",undefined]
+PASS /(?:(?:^|Y)X)|(X)/.exec("aXbcd") is ["X","X"]
+PASS /(?:(?:^|Y)X)|(X)/.exec("abXcd") is ["X","X"]
+PASS /(?:(?:^|Y)X)|(X)/.exec("abcXd") is ["X","X"]
+PASS /(?:(?:^|Y)X)|(X)/.exec("abcdX") is ["X","X"]
+PASS /(?:(?:^|Y)X)|(X)/.exec("YXabcd") is ["YX",undefined]
+PASS /(?:(?:^|Y)X)|(X)/.exec("aYXbcd") is ["YX",undefined]
+PASS /(?:(?:^|Y)X)|(X)/.exec("abYXcd") is ["YX",undefined]
+PASS /(?:(?:^|Y)X)|(X)/.exec("abcYXd") is ["YX",undefined]
+PASS /(?:(?:^|Y)X)|(X)/.exec("abcdYX") is ["YX",undefined]
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test for beginning of line (BOL or ^) matching in a multiline string
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS s.match(/^abc/) is null
+PASS s.match(/^abc/m) is ["abc"]
+PASS s.match(/(^|X)abc/) is null
+PASS s.match(/(^|X)abc/m) is ["abc",""]
+PASS s.match(/(^a|Xa)bc/m) is ["abc","a"]
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'Test for beginning of line (BOL or ^) matching in a multiline string</a>'
+);
+
+var s = "aced\nabc";
+shouldBeNull('s.match(/^abc/)');
+shouldBe('s.match(/^abc/m)', '["abc"]');
+shouldBeNull('s.match(/(^|X)abc/)');
+shouldBe('s.match(/(^|X)abc/m)', '["abc",""]');
+shouldBe('s.match(/(^a|Xa)bc/m)', '["abc","a"]');
--- /dev/null
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'Test for beginning of line (BOL or ^) matching</a>'
+);
+
+var s = "abc123def456xyzabc789abc999";
+shouldBeNull('s.match(/^notHere/)');
+shouldBe('s.match(/^abc/)', '["abc"]');
+shouldBe('s.match(/(^|X)abc/)', '["abc",""]');
+shouldBe('s.match(/^longer|123/)', '["123"]');
+shouldBe('s.match(/(^abc|c)123/)', '["abc123","abc"]');
+shouldBe('s.match(/(c|^abc)123/)', '["abc123","abc"]');
+shouldBe('s.match(/(^ab|abc)123/)', '["abc123","abc"]');
+shouldBe('s.match(/(bc|^abc)([0-9]*)a/)', '["bc789a","bc","789"]');
+shouldBeNull('/(?:(Y)X)|(X)/.exec("abc")');
+shouldBeNull('/(?:(?:^|Y)X)|(X)/.exec("abc")');
+shouldBeNull('/(?:(?:^|Y)X)|(X)/.exec("abcd")');
+shouldBe('/(?:(?:^|Y)X)|(X)/.exec("Xabcd")', '["X",undefined]');
+shouldBe('/(?:(?:^|Y)X)|(X)/.exec("aXbcd")', '["X","X"]');
+shouldBe('/(?:(?:^|Y)X)|(X)/.exec("abXcd")', '["X","X"]');
+shouldBe('/(?:(?:^|Y)X)|(X)/.exec("abcXd")', '["X","X"]');
+shouldBe('/(?:(?:^|Y)X)|(X)/.exec("abcdX")', '["X","X"]');
+shouldBe('/(?:(?:^|Y)X)|(X)/.exec("YXabcd")', '["YX",undefined]');
+shouldBe('/(?:(?:^|Y)X)|(X)/.exec("aYXbcd")', '["YX",undefined]');
+shouldBe('/(?:(?:^|Y)X)|(X)/.exec("abYXcd")', '["YX",undefined]');
+shouldBe('/(?:(?:^|Y)X)|(X)/.exec("abcYXd")', '["YX",undefined]');
+shouldBe('/(?:(?:^|Y)X)|(X)/.exec("abcdYX")', '["YX",undefined]');
--- /dev/null
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks for a regression against JavaScript regular expressions with certain ranges of Unicode characters cause a crash. If it fails, it may crash.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS new RegExp("[À-Ὅ]").toString() is /[À-Ὅ]/.toString()
+PASS new RegExp("[ぁ-ゔ]").toString() is /[ぁ-ゔ]/.toString()
+PASS new RegExp("[䴀-䶵]").toString() is /[䴀-䶵]/.toString()
+PASS new RegExp("[一-龥]").toString() is /[一-龥]/.toString()
+PASS new RegExp("[\ 1-Ὅ]").toString() is /[\ 1-Ὅ]/.toString()
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'This test checks for a regression against <a href="rdar://problem/4161606">JavaScript regular expressions with certain ranges of Unicode characters cause a crash</a>. If it fails, it may crash.'
+);
+
+
+// test ranges reported in bug
+shouldBe('new RegExp("[\u00c0-\u1f4d]").toString()', '/[\u00c0-\u1f4d]/.toString()');
+shouldBe('new RegExp("[\u3041-\u3094]").toString()', '/[\u3041-\u3094]/.toString()');
+shouldBe('new RegExp("[\u4d00-\u4db5]").toString()', '/[\u4d00-\u4db5]/.toString()');
+shouldBe('new RegExp("[\u4e00-\u9fa5]").toString()', '/[\u4e00-\u9fa5]/.toString()');
+
+// test first char < 255, last char > 255
+shouldBe('new RegExp("[\u0001-\u1f4d]").toString()', '/[\u0001-\u1f4d]/.toString()');
--- /dev/null
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test for regression against REGRESSION: RegExp("[^\s$]+", "g") returns extra matches
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS while (match = re.exec(" abcdefg")) accumulate += match + "; "; accumulate is "abcdefg; "
+PASS while (match = re.exec("123456789")) accumulate += match + "; "; accumulate is "1; 2; 3; 4; 5; 6; 7; 8; 9; "
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'Test for regression against <a href="https://bugs.webkit.org/show_bug.cgi?id=5602">REGRESSION: RegExp("[^\\s$]+", "g") returns extra matches</a>'
+);
+
+var re = new RegExp("[^\\s$]+", "g");
+var accumulate = "";
+var match;
+shouldBe('while (match = re.exec(" abcdefg")) accumulate += match + "; "; accumulate', '"abcdefg; "');
+
+var re = new RegExp(/\d/g);
+accumulate = "";
+shouldBe('while (match = re.exec("123456789")) accumulate += match + "; "; accumulate', '"1; 2; 3; 4; 5; 6; 7; 8; 9; "');
--- /dev/null
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test for regression against Yarr Interpreter is crashing in some cases of look-ahead regex patterns
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS "ab".match(/a(?=b|c)/) is ["a"]
+PASS "abd".match(/a(?=c|b)|d/) is ["a"]
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'Test for regression against <a href="https://bugs.webkit.org/show_bug.cgi?id=41458">Yarr Interpreter is crashing in some cases of look-ahead regex patterns</a>'
+);
+
+shouldBe('"ab".match(/a(?=b|c)/)', '["a"]');
+shouldBe('"abd".match(/a(?=c|b)|d/)', '["a"]');
--- /dev/null
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests that regular expressions do not have extensions that diverge from the JavaScript specification. Because WebKit originally used a copy of PCRE, various non-JavaScript regular expression features were historically present. Also tests various related edge cases.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS /\x{41}/.exec("yA1") is null
+PASS /[\x{41}]/.exec("yA1").toString() is "1"
+PASS /\x1g/.exec("x1g").toString() is "x1g"
+PASS /[\x1g]/.exec("x").toString() is "x"
+PASS /[\x1g]/.exec("1").toString() is "1"
+PASS /\2147483648/.exec(String.fromCharCode(140) + "7483648").toString() is String.fromCharCode(140) + "7483648"
+PASS /\4294967296/.exec("\"94967296").toString() is "\"94967296"
+FAIL /\8589934592/.exec("\\8589934592").toString() should be \8589934592. Was 8589934592.
+PASS "\nAbc\n".replace(/(\n)[^\n]+$/, "$1") is "\nAbc\n"
+PASS /x$/.exec("x\n") is null
+PASS /x++/ threw exception SyntaxError: Invalid regular expression: /x++/: Nothing to repeat.
+PASS /[]]/.exec("]") is null
+
+Octal escape sequences are in Annex B of the standard.
+
+PASS /\060/.exec("y01").toString() is "0"
+PASS /[\060]/.exec("y01").toString() is "0"
+PASS /\606/.exec("y06").toString() is "06"
+PASS /[\606]/.exec("y06").toString() is "0"
+PASS /[\606]/.exec("y6").toString() is "6"
+PASS /\101/.exec("yA1").toString() is "A"
+PASS /[\101]/.exec("yA1").toString() is "A"
+PASS /\1011/.exec("yA1").toString() is "A1"
+PASS /[\1011]/.exec("yA1").toString() is "A"
+PASS /[\1011]/.exec("y1").toString() is "1"
+PASS /\10q/.exec("y" + String.fromCharCode(8) + "q").toString() is String.fromCharCode(8) + "q"
+PASS /[\10q]/.exec("y" + String.fromCharCode(8) + "q").toString() is String.fromCharCode(8)
+PASS /\1q/.exec("y" + String.fromCharCode(1) + "q").toString() is String.fromCharCode(1) + "q"
+PASS /[\1q]/.exec("y" + String.fromCharCode(1) + "q").toString() is String.fromCharCode(1)
+PASS /[\1q]/.exec("yq").toString() is "q"
+FAIL /\8q/.exec("\\8q").toString() should be \8q. Was 8q.
+PASS /[\8q]/.exec("y8q").toString() is "8"
+PASS /[\8q]/.exec("yq").toString() is "q"
+PASS /(x)\1q/.exec("xxq").toString() is "xxq,x"
+PASS /(x)[\1q]/.exec("xxq").toString() is "xq,x"
+PASS /(x)[\1q]/.exec("xx" + String.fromCharCode(1)).toString() is "x" + String.fromCharCode(1) + ",x"
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'Tests that regular expressions do not have extensions that diverge from the JavaScript specification. '
++ 'Because WebKit originally used a copy of PCRE, various non-JavaScript regular expression features were historically present. '
++ 'Also tests various related edge cases.'
+);
+
+shouldBe('/\\x{41}/.exec("yA1")', 'null');
+shouldBe('/[\\x{41}]/.exec("yA1").toString()', '"1"');
+shouldBe('/\\x1g/.exec("x1g").toString()', '"x1g"');
+shouldBe('/[\\x1g]/.exec("x").toString()', '"x"');
+shouldBe('/[\\x1g]/.exec("1").toString()', '"1"');
+shouldBe('/\\2147483648/.exec(String.fromCharCode(140) + "7483648").toString()', 'String.fromCharCode(140) + "7483648"');
+shouldBe('/\\4294967296/.exec("\\"94967296").toString()', '"\\"94967296"');
+shouldBe('/\\8589934592/.exec("\\\\8589934592").toString()', '"\\\\8589934592"');
+shouldBe('"\\nAbc\\n".replace(/(\\n)[^\\n]+$/, "$1")', '"\\nAbc\\n"');
+shouldBe('/x$/.exec("x\\n")', 'null');
+shouldThrow('/x++/');
+shouldBe('/[]]/.exec("]")', 'null');
+
+debug('');
+debug('Octal escape sequences are in Annex B of the standard.');
+debug('');
+
+shouldBe('/\\060/.exec("y01").toString()', '"0"');
+shouldBe('/[\\060]/.exec("y01").toString()', '"0"');
+shouldBe('/\\606/.exec("y06").toString()', '"06"');
+shouldBe('/[\\606]/.exec("y06").toString()', '"0"');
+shouldBe('/[\\606]/.exec("y6").toString()', '"6"');
+shouldBe('/\\101/.exec("yA1").toString()', '"A"');
+shouldBe('/[\\101]/.exec("yA1").toString()', '"A"');
+shouldBe('/\\1011/.exec("yA1").toString()', '"A1"');
+shouldBe('/[\\1011]/.exec("yA1").toString()', '"A"');
+shouldBe('/[\\1011]/.exec("y1").toString()', '"1"');
+shouldBe('/\\10q/.exec("y" + String.fromCharCode(8) + "q").toString()', 'String.fromCharCode(8) + "q"');
+shouldBe('/[\\10q]/.exec("y" + String.fromCharCode(8) + "q").toString()', 'String.fromCharCode(8)');
+shouldBe('/\\1q/.exec("y" + String.fromCharCode(1) + "q").toString()', 'String.fromCharCode(1) + "q"');
+shouldBe('/[\\1q]/.exec("y" + String.fromCharCode(1) + "q").toString()', 'String.fromCharCode(1)');
+shouldBe('/[\\1q]/.exec("yq").toString()', '"q"');
+shouldBe('/\\8q/.exec("\\\\8q").toString()', '"\\\\8q"');
+shouldBe('/[\\8q]/.exec("y8q").toString()', '"8"');
+shouldBe('/[\\8q]/.exec("yq").toString()', '"q"');
+shouldBe('/(x)\\1q/.exec("xxq").toString()', '"xxq,x"');
+shouldBe('/(x)[\\1q]/.exec("xxq").toString()', '"xq,x"');
+shouldBe('/(x)[\\1q]/.exec("xx" + String.fromCharCode(1)).toString()', '"x" + String.fromCharCode(1) + ",x"');
+
+debug('');
--- /dev/null
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test for behavior of non-capturing groups, as described in a blog post by Steven Levithan and bug 14931.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS /(x)?\1y/.test("y") is true
+PASS /(x)?\1y/.exec("y") is ["y", undefined]
+PASS /(x)?y/.exec("y") is ["y", undefined]
+PASS "y".match(/(x)?\1y/) is ["y", undefined]
+PASS "y".match(/(x)?y/) is ["y", undefined]
+PASS "y".match(/(x)?\1y/g) is ["y"]
+PASS "y".split(/(x)?\1y/) is ["", undefined, ""]
+PASS "y".split(/(x)?y/) is ["", undefined, ""]
+PASS "y".search(/(x)?\1y/) is 0
+PASS "y".replace(/(x)?\1y/, "z") is "z"
+PASS "y".replace(/(x)?y/, "$1") is ""
+PASS "y".replace(/(x)?\1y/, function($0, $1){ return String($1); }) is "undefined"
+PASS "y".replace(/(x)?y/, function($0, $1){ return String($1); }) is "undefined"
+PASS "y".replace(/(x)?y/, function($0, $1){ return $1; }) is "undefined"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'Test for behavior of non-capturing groups, as described in <a href="http://blog.stevenlevithan.com/archives/npcg-javascript">' +
+'a blog post by Steven Levithan</a> and <a href="http://bugs.webkit.org/show_bug.cgi?id=14931">bug 14931</a>.'
+);
+
+shouldBe('/(x)?\\1y/.test("y")', 'true');
+shouldBe('/(x)?\\1y/.exec("y")', '["y", undefined]');
+shouldBe('/(x)?y/.exec("y")', '["y", undefined]');
+shouldBe('"y".match(/(x)?\\1y/)', '["y", undefined]');
+shouldBe('"y".match(/(x)?y/)', '["y", undefined]');
+shouldBe('"y".match(/(x)?\\1y/g)', '["y"]');
+shouldBe('"y".split(/(x)?\\1y/)', '["", undefined, ""]');
+shouldBe('"y".split(/(x)?y/)', '["", undefined, ""]');
+shouldBe('"y".search(/(x)?\\1y/)', '0');
+shouldBe('"y".replace(/(x)?\\1y/, "z")', '"z"');
+shouldBe('"y".replace(/(x)?y/, "$1")', '""');
+shouldBe('"y".replace(/(x)?\\1y/, function($0, $1){ return String($1); })', '"undefined"');
+shouldBe('"y".replace(/(x)?y/, function($0, $1){ return String($1); })', '"undefined"');
+shouldBe('"y".replace(/(x)?y/, function($0, $1){ return $1; })', '"undefined"');
--- /dev/null
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test for regression against Wrong result in case of non-iterative matching of subpatterns in non-greedy cases in YARR Interpreter
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS "a".match(/(a)??/) is ["", undefined]
+PASS "b".match(/(a)??/) is ["", undefined]
+PASS "ab".match(/(a)??b/) is ["ab", "a"]
+PASS "aaab".match(/(a+)??b/) is ["aaab", "aaa"]
+PASS "abbc".match(/(a)??(b+)??c/) is ["abbc", "a", "bb"]
+PASS "ac".match(/(a)??(b)??c/) is ["ac", "a", undefined]
+PASS "abc".match(/(a(b)??)??c/) is ["abc", "ab", "b"]
+PASS "ac".match(/(a(b)??)??c/) is ["ac", "a", undefined]
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'Test for regression against <a href="https://bugs.webkit.org/show_bug.cgi?id=39289">Wrong result in case of non-iterative matching of subpatterns in non-greedy cases in YARR Interpreter</a>'
+);
+
+shouldBe('"a".match(/(a)??/)', '["", undefined]');
+shouldBe('"b".match(/(a)??/)', '["", undefined]');
+shouldBe('"ab".match(/(a)??b/)', '["ab", "a"]');
+shouldBe('"aaab".match(/(a+)??b/)', '["aaab", "aaa"]');
+shouldBe('"abbc".match(/(a)??(b+)??c/)', '["abbc", "a", "bb"]');
+shouldBe('"ac".match(/(a)??(b)??c/)', '["ac", "a", undefined]');
+shouldBe('"abc".match(/(a(b)??)??c/)', '["abc", "ab", "b"]');
+shouldBe('"ac".match(/(a(b)??)??c/)', '["ac", "a", undefined]');
--- /dev/null
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test for bug 16129: REGRESSION (r27761-r27811): malloc error while visiting http://mysit.es (crashes release build).
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS /^[s{-.[]()]$/ threw exception SyntaxError: Invalid regular expression: /^[s{-.[]()]$/: Range out of order in character class.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+
+'Test for <a href="http://bugs.webkit.org/show_bug.cgi?id=16129">bug 16129</a>: REGRESSION (r27761-r27811): malloc error while visiting http://mysit.es (crashes release build).'
+
+);
+
+shouldThrow('/^[\s{-.\[\]\(\)]$/');
--- /dev/null
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Tests for bug #21232, and related range issues described in bug.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS regexp01.toString() is "1235"
+PASS regexp01a.toString() is "123 5"
+PASS regexp01b.toString() is "1-3 5"
+PASS regexp01c.toString() is "1-3 5"
+PASS regexp01d.toString() is "123 5"
+PASS regexp01e.toString() is "123 5"
+PASS regexp01f.toString() is "-3"
+PASS regexp01g.toString() is "2-"
+PASS regexp02.toString() is "1-35"
+PASS regexp02a.toString() is "1-3 5"
+PASS regexp02b.toString() is "1-3 5"
+PASS regexp02c.toString() is "1-3 5"
+PASS regexp02d.toString() is "1-3 5"
+PASS regexp02e.toString() is "1-3 5"
+PASS regexp03a.toString() is "-.0"
+PASS regexp03b.toString() is "+,-"
+PASS bug21232 is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'Tests for bug <a href="https://bugs.webkit.org/show_bug.cgi?id=21232">#21232</a>, and related range issues described in bug.'
+);
+
+// Basic test for ranges - one to three and five are in regexp, four is not, and '-' should not match
+var regexp01 = /[1-35]+/.exec("-12354");
+shouldBe('regexp01.toString()', '"1235"');
+// Tests inserting an escape character class into the above pattern - where the spaces fall within the
+// range it is no longer a range - hyphens should now match, two should not.
+var regexp01a = /[\s1-35]+/.exec("-123 54");
+shouldBe('regexp01a.toString()', '"123 5"');
+
+// These are invalid ranges, according to ECMA-262, but we allow them.
+var regexp01b = /[1\s-35]+/.exec("21-3 54");
+shouldBe('regexp01b.toString()', '"1-3 5"');
+var regexp01c = /[1-\s35]+/.exec("21-3 54");
+shouldBe('regexp01c.toString()', '"1-3 5"');
+
+var regexp01d = /[1-3\s5]+/.exec("-123 54");
+shouldBe('regexp01d.toString()', '"123 5"');
+var regexp01e = /[1-35\s5]+/.exec("-123 54");
+shouldBe('regexp01e.toString()', '"123 5"');
+// hyphens are normal charaters if a range is not fully specified.
+var regexp01f = /[-3]+/.exec("2-34");
+shouldBe('regexp01f.toString()', '"-3"');
+var regexp01g = /[2-]+/.exec("12-3");
+shouldBe('regexp01g.toString()', '"2-"');
+
+// Similar to the above tests, but where the hyphen is escaped this is never a range.
+var regexp02 = /[1\-35]+/.exec("21-354");
+shouldBe('regexp02.toString()', '"1-35"');
+// As above.
+var regexp02a = /[\s1\-35]+/.exec("21-3 54");
+shouldBe('regexp02a.toString()', '"1-3 5"');
+var regexp02b = /[1\s\-35]+/.exec("21-3 54");
+shouldBe('regexp02b.toString()', '"1-3 5"');
+var regexp02c = /[1\-\s35]+/.exec("21-3 54");
+shouldBe('regexp02c.toString()', '"1-3 5"');
+var regexp02d = /[1\-3\s5]+/.exec("21-3 54");
+shouldBe('regexp02d.toString()', '"1-3 5"');
+var regexp02e = /[1\-35\s5]+/.exec("21-3 54");
+shouldBe('regexp02e.toString()', '"1-3 5"');
+
+// Test that an escaped hyphen can be used as a bound on a range.
+var regexp03a = /[\--0]+/.exec(",-.01");
+shouldBe('regexp03a.toString()', '"-.0"');
+var regexp03b = /[+-\-]+/.exec("*+,-.");
+shouldBe('regexp03b.toString()', '"+,-"');
+
+// The actual bug reported.
+var bug21232 = (/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test('@');
+shouldBe('bug21232', 'false');
--- /dev/null
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test for bug 8870: Crash typing in Yahoo auto-complete widget.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS result.length is 5
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+
+'Test for <a href="https://bugs.webkit.org/show_bug.cgi?id=8870">bug 8870</a>: Crash typing in Yahoo auto-complete widget.'
+
+);
+
+re = new RegExp('^(\\s+|[,:{}\\[\\]]|"(\\\\["\\\\\\/bfnrtu]|[^\\x00-\\x1f"\\\\]+)*"|-?\\d+(\\.\\d*)?([eE][+-]?\\d+)?|true|false|null)+$', '');
+
+result= re.exec('{"ResultSet":{"totalResultsAvailable":"101000000","totalResultsReturned":100,"firstResultPosition":1,"Result":[{"Title":"Solar Eclipses of Saros 132","Summary":"Solar Eclipses of Saros 132 Solar Eclipses of Saros 132 The periodicity and recurrence of solar (and lunar) eclipses is governed by the Saros cycle, a period of approximately 6,585. 3 days (18 years 11 days 8 hours). When two eclipses are ...","Url":"http:\\/\\/sunearth.gsfc.nasa.gov\\/eclipse\\/SEsaros\\/SEsaros132.html","ClickUrl":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBUBzdmMwF;_ylu=X3oDMTB2cXVjNTM5BGNvbG8DdwRsA1dTMQRwb3MDMQRzZWMDc3IEdnRpZAM-\\/SIG=19ip3vo9u\\/EXP=1147592336\\/**http%3a\\/\\/rdrw1.yahoo.com\\/click%3fu=http%3a\\/\\/sunearth.gsfc.nasa.gov\\/eclipse\\/SEsaros\\/SEsaros132.html%26y=0405DC60F30D6DD673%26i=482%26c=15685%26q=02%255ESSHPM%255BL7.,-6%26e=utf-8%26r=0%26d=wow%7eWBSV-en-us%26n=3O6KG7JU5PIK8T7I%26s=6%26t=%26m=44658D10%26x=05A6B5FDC2F29725CD6EE467684E0FE76D","ModificationDate":1146207600,"MimeType":"text\\/html"},{"Title":"Psalms 132 -Matthew Henry\'s Commentary - Bible Software by johnhurt.com","Summary":"Psalms 132 - Matthew Henry Commentary - Bible Software by johnhurt.com ... Henry\'s Psalms 131. Psalms 132. Outline of Psalms 132. David\'s care for the ark ...","Url":"http:\\/\\/www.htmlbible.com\\/kjv30\\/henry\\/H19C132.htm","ClickUrl":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBVhzdmMwF;_ylu=X3oDMTB2ZjQ4dDExBGNvbG8DdwRsA1dTMQRwb3MDMgRzZWMDc3IEdnRpZAM-\\/SIG=1246fjpfq\\/EXP=1147592336\\/**http%3a\\/\\/www.htmlbible.com\\/kjv30\\/henry\\/H19C132.htm","ModificationDate":1015660800,"MimeType":"text\\/html","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBWxzdmMwF;_ylu=X3oDMTBwZG5hOWwzBGNvbG8DdwRwb3MDMgRzZWMDc3IEdnRpZAM-\\/SIG=16llm3b1a\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=www.htmlbible.com\\/kjv30\\/henry\\/H19C132.htm%26w=132%26d=XlIIG0aqMlsm%26icp=1%26.intl=us","Size":"4160"}},{"Title":"General requirements. - 1910.132","Summary":"General%20requirements.%20-%201910.132 ... Regulations (Standards - 29 CFR) General requirements. - 1910.132 ... of any part of the body through absorption, inhalation or physical contact. 1910.132(b) Employee-owned equipment ...","Url":"http:\\/\\/www.osha.gov\\/pls\\/oshaweb\\/owadisp.show_document?p_table=STANDARDS&p_id=9777","ClickUrl":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBXRzdmMwF;_ylu=X3oDMTB2M3MzdmZoBGNvbG8DdwRsA1dTMQRwb3MDMwRzZWMDc3IEdnRpZAM-\\/SIG=13916ebti\\/EXP=1147592336\\/**http%3a\\/\\/www.osha.gov\\/pls\\/oshaweb\\/owadisp.show_document%3fp_table=STANDARDS%26p_id=9777","ModificationDate":1147330800,"MimeType":"text\\/html","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBYhzdmMwF;_ylu=X3oDMTBwZ2dpZ2ZkBGNvbG8DdwRwb3MDMwRzZWMDc3IEdnRpZAM-\\/SIG=186osem1n\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=www.osha.gov\\/pls\\/oshaweb\\/owadisp.show_document%253Fp_table%253DSTANDARDS%2526p_id%253D9777%26w=132%26d=Ujn5sEaqMw88%26icp=1%26.intl=us","Size":"29922"}},{"Title":"USCCB - NAB - Psalm 132","Summary":"Chapter 132. 1. 1 A song of ascents. 2 LORD, remember David and all his anxious care; 2. 3 How he swore an oath to the LORD, vowed to the Mighty One of Jacob: 3. \\"I will not enter the house where I live, nor lie on the couch where I sleep; ... 1 [Psalm 132] A song for a liturgical ceremony in which the ark, the throne of Israel\'s God, was carried in ...","Url":"http:\\/\\/www.usccb.org\\/nab\\/bible\\/psalms\\/psalm132.htm","ClickUrl":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBZBzdmMwF;_ylu=X3oDMTB2OWM1MXQ5BGNvbG8DdwRsA1dTMQRwb3MDNARzZWMDc3IEdnRpZAM-\\/SIG=126n03p75\\/EXP=1147592336\\/**http%3a\\/\\/www.usccb.org\\/nab\\/bible\\/psalms\\/psalm132.htm","ModificationDate":1054623600,"MimeType":"text\\/html","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBaRzdmMwF;_ylu=X3oDMTBwYzFnNmkxBGNvbG8DdwRwb3MDNARzZWMDc3IEdnRpZAM-\\/SIG=16nvcm74b\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=www.usccb.org\\/nab\\/bible\\/psalms\\/psalm132.htm%26w=132%26d=FMBGyUaqMh-a%26icp=1%26.intl=us","Size":"8840"}},{"Title":"* City of Lost Dreams Mod *","Summary":"Mafia game modification","Url":"http:\\/\\/www.citizen-132.com\\/","ClickUrl":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBaxzdmMwF;_ylu=X3oDMTB2NW50aG1hBGNvbG8DdwRsA1dTMQRwb3MDNQRzZWMDc3IEdnRpZAM-\\/SIG=11fnqlf31\\/EXP=1147592336\\/**http%3a\\/\\/www.citizen-132.com\\/","ModificationDate":1107676800,"MimeType":"text\\/html","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBcBzdmMwF;_ylu=X3oDMTBwdDJ0dDBoBGNvbG8DdwRwb3MDNQRzZWMDc3IEdnRpZAM-\\/SIG=160jdk4g3\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=www.citizen-132.com\\/%26w=132%26d=ZiSHAkaqMuny%26icp=1%26.intl=us","Size":"6861"}},{"Title":"BibleGateway.com: Search for a Bible passage in over 35 languages and 50 versions.","Summary":"English (EN) Espa\\u00f1ol (ES) Passage results ... Footnotes: Psalm 132:6 That is, Kiriath Jearim. Psalm 132:6 Or heard of it in ...","Url":"http:\\/\\/www.biblegateway.com\\/passage\\/?book_id=23&chapter=132&version=31","ClickUrl":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBchzdmMwF;_ylu=X3oDMTB2azJrdmpwBGNvbG8DdwRsA1dTMQRwb3MDNgRzZWMDc3IEdnRpZAM-\\/SIG=1300p6cfh\\/EXP=1147592336\\/**http%3a\\/\\/www.biblegateway.com\\/passage\\/%3fbook_id=23%26chapter=132%26version=31","ModificationDate":1147158000,"MimeType":"text\\/html","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBdxzdmMwF;_ylu=X3oDMTBwYmwxdWo4BGNvbG8DdwRwb3MDNgRzZWMDc3IEdnRpZAM-\\/SIG=183q9adk2\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=www.biblegateway.com\\/passage\\/%253Fbook_id%253D23%2526chapter%253D132%2526version%253D31%26w=132%26d=XUM-1kaqMwKY%26icp=1%26.intl=us","Size":"27373"}},{"Title":"132 - Wikipedia, the free encyclopedia","Summary":"From Wikipedia, the free encyclopedia. This article is about the year. For other uses, see 132 (number). Events. Roman Empire. The Olympeion in Athens is completed ... Your continued donations keep Wikipedia running! 132. From Wikipedia, the free encyclopedia ... For other uses, see 132 (number). Years: 128 129 130 131 - 132 - 133 134 135 136 ...","Url":"http:\\/\\/en.wikipedia.org\\/wiki\\/132","ClickUrl":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBeRzdmMwF;_ylu=X3oDMTB2bDEyNXM5BGNvbG8DdwRsA1dTMQRwb3MDNwRzZWMDc3IEdnRpZAM-\\/SIG=11k81281i\\/EXP=1147592336\\/**http%3a\\/\\/en.wikipedia.org\\/wiki\\/132","ModificationDate":1145862000,"MimeType":"text\\/html","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBfhzdmMwF;_ylu=X3oDMTBwMTB0ZWFoBGNvbG8DdwRwb3MDNwRzZWMDc3IEdnRpZAM-\\/SIG=165kmnv8l\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=en.wikipedia.org\\/wiki\\/132%26w=132%26d=OcxF4UaqMuf2%26icp=1%26.intl=us","Size":"15956"}},{"Title":"BBC SPORT | Football | Internationals","Summary":"Visit BBC Sport for all the action as it happens - up-to-the-minute news, results, breaking news, video, audio and feature stories. BBC Sport covers the major events and all the professional football clubs in the UK, plus cricket, rugby, golf, ...","Url":"http:\\/\\/news.bbc.co.uk\\/sport1\\/hi\\/football\\/internationals\\/default.stm","ClickUrl":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBgBzdmMwF;_ylu=X3oDMTB2bTU4Zm85BGNvbG8DdwRsA1dTMQRwb3MDOARzZWMDc3IEdnRpZAM-\\/SIG=12n3aafin\\/EXP=1147592336\\/**http%3a\\/\\/news.bbc.co.uk\\/sport1\\/hi\\/football\\/internationals\\/default.stm","ModificationDate":1147417200,"MimeType":"text\\/html","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBhRzdmMwF;_ylu=X3oDMTBwYTZ1aGtmBGNvbG8DdwRwb3MDOARzZWMDc3IEdnRpZAM-\\/SIG=178rplb9d\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=news.bbc.co.uk\\/sport1\\/hi\\/football\\/internationals\\/default.stm%26w=132%26d=PmSx-kaqMw8o%26icp=1%26.intl=us","Size":"52634"}},{"Title":"Metro Route 132 Timetable, Weekday","Summary":"... Custom Print Help. 132. Weekday: Feb. 11 thru June 2, 2006 ...","Url":"http:\\/\\/transit.metrokc.gov\\/tops\\/bus\\/schedules\\/s132_0_.html","ClickUrl":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBhxzdmMwF;_ylu=X3oDMTB2dW8yNmN0BGNvbG8DdwRsA1dTMQRwb3MDOQRzZWMDc3IEdnRpZAM-\\/SIG=12eusl28m\\/EXP=1147592336\\/**http%3a\\/\\/transit.metrokc.gov\\/tops\\/bus\\/schedules\\/s132_0_.html","ModificationDate":1146553200,"MimeType":"text\\/html","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBjBzdmMwF;_ylu=X3oDMTBwOTRzYmZlBGNvbG8DdwRwb3MDOQRzZWMDc3IEdnRpZAM-\\/SIG=16vd4gkvv\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=transit.metrokc.gov\\/tops\\/bus\\/schedules\\/s132_0_.html%26w=132%26d=Nvq_ekaqMulb%26icp=1%26.intl=us","Size":"27482"}},{"Title":"BBC NEWS | Politics | Bush arrives for state visit","Summary":"George Bush arrives in the UK for the first state visit by a US president amid some of the tightest security London has seen.","Url":"http:\\/\\/news.bbc.co.uk\\/1\\/hi\\/uk_politics\\/3279179.stm","ClickUrl":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBjhzdmMwF;_ylu=X3oDMTEwc3RuNTk4BGNvbG8DdwRsA1dTMQRwb3MDMTAEc2VjA3NyBHZ0aWQD\\/SIG=126am8694\\/EXP=1147592336\\/**http%3a\\/\\/news.bbc.co.uk\\/1\\/hi\\/uk_politics\\/3279179.stm","ModificationDate":1147417200,"MimeType":"text\\/html","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBkxzdmMwF;_ylu=X3oDMTBxNTUzbTg4BGNvbG8DdwRwb3MDMTAEc2VjA3NyBHZ0aWQD\\/SIG=16nt5u57o\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=news.bbc.co.uk\\/1\\/hi\\/uk_politics\\/3279179.stm%26w=132%26d=CxDE2UaqMw8U%26icp=1%26.intl=us","Size":"43537"}},{"Title":"132 (number) - Wikipedia, the free encyclopedia","Summary":"... you can make from 132, you get 132: 12 + 13 + 21 + 23 + 31 + 32 = 132. 132 is the smallest number ...","Url":"http:\\/\\/en.wikipedia.org\\/wiki\\/132_(number)","ClickUrl":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBlRzdmMwF;_ylu=X3oDMTEwNXN0b3YwBGNvbG8DdwRsA1dTMQRwb3MDMTEEc2VjA3NyBHZ0aWQD\\/SIG=11thbnu67\\/EXP=1147592336\\/**http%3a\\/\\/en.wikipedia.org\\/wiki\\/132_(number)","ModificationDate":1145430000,"MimeType":"text\\/html","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBmhzdmMwF;_ylu=X3oDMTBxYnA3amlzBGNvbG8DdwRwb3MDMTEEc2VjA3NyBHZ0aWQD\\/SIG=16m4qjjlq\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=en.wikipedia.org\\/wiki\\/132_%2528number%2529%26w=132%26d=Ygdh6EaqMsBb%26icp=1%26.intl=us","Size":"13154"}},{"Title":"Psalms, Chapter 132","Summary":"King James Reference Suite - Bible Software by johnhurt.com ... Chapter 132. 1. Lord, remember David, and all his afflictions ... Notes on Chapter 132. 1. 2. 3 ...","Url":"http:\\/\\/www.htmlbible.com\\/kjv30\\/B19C132.htm","ClickUrl":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBnBzdmMwF;_ylu=X3oDMTEwNmgxNTZoBGNvbG8DdwRsA1dTMQRwb3MDMTIEc2VjA3NyBHZ0aWQD\\/SIG=11uujk8hq\\/EXP=1147592336\\/**http%3a\\/\\/www.htmlbible.com\\/kjv30\\/B19C132.htm","ModificationDate":1079942400,"MimeType":"text\\/html","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBoRzdmMwF;_ylu=X3oDMTBxN2cybDkwBGNvbG8DdwRwb3MDMTIEc2VjA3NyBHZ0aWQD\\/SIG=16fpgk3vj\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=www.htmlbible.com\\/kjv30\\/B19C132.htm%26w=132%26d=TaFtBUaqMwcr%26icp=1%26.intl=us","Size":"8721"}},{"Title":"SPACE.com -- Privately Funded SpaceShipOne Breaks Sound Barrier","Summary":"A privately financed passenger-carrying sub-orbital rocket plane screamed its way through the sound barrier today, the 100th anniversary of the Wright Brothers historic 12-second flight over Kitty Hawk, North Carolina.","Url":"http:\\/\\/www.space.com\\/businesstechnology\\/technology\\/rutan_update_031217.html","ClickUrl":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBoxzdmMwF;_ylu=X3oDMTEwNHRmcnV0BGNvbG8DdwRsA1dTMQRwb3MDMTMEc2VjA3NyBHZ0aWQD\\/SIG=12vltjpcd\\/EXP=1147592336\\/**http%3a\\/\\/www.space.com\\/businesstechnology\\/technology\\/rutan_update_031217.html","ModificationDate":1147330800,"MimeType":"text\\/html","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBqBzdmMwF;_ylu=X3oDMTBxajcxM3AwBGNvbG8DdwRwb3MDMTMEc2VjA3NyBHZ0aWQD\\/SIG=17g6i6br5\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=www.space.com\\/businesstechnology\\/technology\\/rutan_update_031217.html%26w=132%26d=CklT2kaqMwqb%26icp=1%26.intl=us","Size":"39319"}},{"Title":"D&C 132","Summary":"THE DOCTRINE AND COVENANTS. SECTION 132 ... LDS HomeScriptures Doctrine and Covenants Sections Section 132. Prev | Next ... SECTION 132. Revelation given through Joseph Smith the Prophet, at Nauvoo, Illinois, recorded July 12, 1843 ...","Url":"http:\\/\\/scriptures.lds.org\\/dc\\/132","ClickUrl":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBqhzdmMwF;_ylu=X3oDMTEwamo4ZjVjBGNvbG8DdwRsA1dTMQRwb3MDMTQEc2VjA3NyBHZ0aWQD\\/SIG=11k67f7oi\\/EXP=1147592336\\/**http%3a\\/\\/scriptures.lds.org\\/dc\\/132","ModificationDate":1146985200,"MimeType":"text\\/html","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBrxzdmMwF;_ylu=X3oDMTBxcDhuOXFrBGNvbG8DdwRwb3MDMTQEc2VjA3NyBHZ0aWQD\\/SIG=165qbp40u\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=scriptures.lds.org\\/dc\\/132%26w=132%26d=KIW1S0aqMwF3%26icp=1%26.intl=us","Size":"51549"}},{"Title":"State Representative District 132","Summary":"State Representative District 132. State Representative District 132 is shaded area. SACO. BIDDEFORD. 127. 132. 133. 136. OLD ORCHARD BEACH. SACO","Url":"http:\\/\\/mainegov-images.informe.org\\/sos\\/cec\\/elec\\/apport\\/House\\/h132.pdf","ClickUrl":"http:\\/\\/mainegov-images.informe.org\\/sos\\/cec\\/elec\\/apport\\/House\\/h132.pdf#search=\'\'","ModificationDate":1075968000,"MimeType":"application\\/pdf","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBtBzdmMwF;_ylu=X3oDMTBxbnZxbGc1BGNvbG8DdwRwb3MDMTUEc2VjA3NyBHZ0aWQD\\/SIG=17at7erej\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=mainegov-images.informe.org\\/sos\\/cec\\/elec\\/apport\\/House\\/h132.pdf%26w=132%26d=DsRim0aqMiIQ%26icp=1%26.intl=us","Size":"129767"}},{"Title":"BLB Psa 132","Summary":"We apologize, but the page layout is not visible because you are using an older browser. We recommend upgrading to a standards-compliant browser. Without such, this page will remain viewable, though unformatted.","Url":"http:\\/\\/www.blueletterbible.org\\/kjv\\/Psa\\/Psa132.html","ClickUrl":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBthzdmMwF;_ylu=X3oDMTEwdXRzN2p1BGNvbG8DdwRsA1dTMQRwb3MDMTYEc2VjA3NyBHZ0aWQD\\/SIG=126nkscdr\\/EXP=1147592336\\/**http%3a\\/\\/www.blueletterbible.org\\/kjv\\/Psa\\/Psa132.html","ModificationDate":1146985200,"MimeType":"text\\/html","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBuxzdmMwF;_ylu=X3oDMTBxdWpsMnAxBGNvbG8DdwRwb3MDMTYEc2VjA3NyBHZ0aWQD\\/SIG=16nmo95in\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=www.blueletterbible.org\\/kjv\\/Psa\\/Psa132.html%26w=132%26d=RzXlkkaqMwDE%26icp=1%26.intl=us","Size":"40835"}},{"Title":"ADL Found Guilty Of Spying By California Court","Summary":"ADL Found Guilty Of Spying. By California Court. By Barbara Ferguson. Arab News Correspondent. 4-27-2","Url":"http:\\/\\/www.rense.com\\/general24\\/adl.htm","ClickUrl":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBvRzdmMwF;_ylu=X3oDMTEwcm5pb3BuBGNvbG8DdwRsA1dTMQRwb3MDMTcEc2VjA3NyBHZ0aWQD\\/SIG=11qjguns4\\/EXP=1147592336\\/**http%3a\\/\\/www.rense.com\\/general24\\/adl.htm","ModificationDate":1019890800,"MimeType":"text\\/html","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBwhzdmMwF;_ylu=X3oDMTBxN2RrOGV1BGNvbG8DdwRwb3MDMTcEc2VjA3NyBHZ0aWQD\\/SIG=16bnmcrht\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=www.rense.com\\/general24\\/adl.htm%26w=132%26d=Xkre4EaqMuwO%26icp=1%26.intl=us","Size":"5916"}},{"Title":"FindLaw for Legal Professionals - Case Law, Federal and State Resources, Forms, and Code","Summary":"FindLaw for Legal Professionals is a free resource for attorneys that includes online case law, free state codes, free federal codes, free legal forms, and a directory of products and services for lawyers. This online legal Web site also includes...","Url":"http:\\/\\/caselaw.lp.findlaw.com\\/cgi-bin\\/getcase.pl?court=US&vol=391&invol=936","ClickUrl":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBxBzdmMwF;_ylu=X3oDMTEwa2drb20xBGNvbG8DdwRsA1dTMQRwb3MDMTgEc2VjA3NyBHZ0aWQD\\/SIG=135rsl3q8\\/EXP=1147592336\\/**http%3a\\/\\/caselaw.lp.findlaw.com\\/cgi-bin\\/getcase.pl%3fcourt=US%26vol=391%26invol=936","ModificationDate":1147330800,"MimeType":"text\\/html","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcByRzdmMwF;_ylu=X3oDMTBxZGJndmNzBGNvbG8DdwRwb3MDMTgEc2VjA3NyBHZ0aWQD\\/SIG=188s7bq1v\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=caselaw.lp.findlaw.com\\/cgi-bin\\/getcase.pl%253Fcourt%253DUS%2526vol%253D391%2526invol%253D936%26w=132%26d=GCWYIUaqMwZK%26icp=1%26.intl=us","Size":"57332"}},{"Title":"Chapter 132","Summary":"... Public Records. \\u00a7 132\\u20101. \\" Public records\\" defined ... Public records, as defined in G.S. 132\\u20101, shall not include written communications (and copies thereof) to any public ...","Url":"http:\\/\\/www.ncleg.net\\/EnactedLegislation\\/Statutes\\/HTML\\/ByChapter\\/Chapter_132.html","ClickUrl":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcByxzdmMwF;_ylu=X3oDMTEwdjV0NWw0BGNvbG8DdwRsA1dTMQRwb3MDMTkEc2VjA3NyBHZ0aWQD\\/SIG=1349nldcc\\/EXP=1147592336\\/**http%3a\\/\\/www.ncleg.net\\/EnactedLegislation\\/Statutes\\/HTML\\/ByChapter\\/Chapter_132.html","ModificationDate":1141027200,"MimeType":"text\\/html","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcB0BzdmMwF;_ylu=X3oDMTBxdDJjbXM4BGNvbG8DdwRwb3MDMTkEc2VjA3NyBHZ0aWQD\\/SIG=17lgm2hmb\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=www.ncleg.net\\/EnactedLegislation\\/Statutes\\/HTML\\/ByChapter\\/Chapter_132.html%26w=132%26d=akl3I0aqMt5y%26icp=1%26.intl=us","Size":"76411"}},{"Title":"oremus Bible Browser : Psalm 132","Summary":"Psalm 132. A Song of Ascents. 1O Lord, remember in David\'s favour. all the hardships he endured; 2how he swore to the Lord. and vowed to the Mighty One of Jacob, 3 I will not enter my house. or get into my bed;","Url":"http:\\/\\/bible.oremus.org\\/?passage=Psalm+132","ClickUrl":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcB0hzdmMwF;_ylu=X3oDMTEwcDU0bmdlBGNvbG8DdwRsA1dTMQRwb3MDMjAEc2VjA3NyBHZ0aWQD\\/SIG=122hghelb\\/EXP=1147592336\\/**http%3a\\/\\/bible.oremus.org\\/%3fpassage=Psalm%2b132","ModificationDate":1138003200,"MimeType":"text\\/html","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcB1xzdmMwF;_ylu=X3oDMTBxbjVuNnZxBGNvbG8DdwRwb3MDMjAEc2VjA3NyBHZ0aWQD\\/SIG=16ppk73gi\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=bible.oremus.org\\/%253Fpassage%253DPsalm%2b132%26w=132%26d=MBPBT0aqMkLR%26icp=1%26.intl=us","Size":"6083"}},{"Title":"Electronic Code of Federal Regulations:","Summary":"... Application of part 132 requirements in Great Lakes States and Tribes ... Appendix A to Part 132 --Great Lakes Water Quality Initiative Methodologies for Development of Aquatic Life ...","Url":"http:\\/\\/ecfr.gpoaccess.gov\\/cgi\\/t\\/text\\/text-idx?c=ecfr&tpl=\\/ecfrbrowse\\/Title40\\/40cfr132_main_02.tpl","ClickUrl":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcB2RzdmMwF;_ylu=X3oDMTEwMGRnbnZ2BGNvbG8DdwRsA1dTMQRwb3MDMjEEc2VjA3NyBHZ0aWQD\\/SIG=13p811gl2\\/EXP=1147592336\\/**http%3a\\/\\/ecfr.gpoaccess.gov\\/cgi\\/t\\/text\\/text-idx%3fc=ecfr%26tpl=\\/ecfrbrowse\\/Title40\\/40cfr132_main_02.tpl","ModificationDate":1147244400,"MimeType":"text\\/html","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcB3hzdmMwF;_ylu=X3oDMTBxb2QzaXJsBGNvbG8DdwRwb3MDMjEEc2VjA3NyBHZ0aWQD\\/SIG=18m524f9v\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=ecfr.gpoaccess.gov\\/cgi\\/t\\/text\\/text-idx%253Fc%253Decfr%2526tpl%253D\\/ecfrbrowse\\/Title40\\/40cfr132_main_02.tpl%26w=132%26d=OC6Oa0aqMwQa%26icp=1%26.intl=us","Size":"24321"}},{"Title":"BibleGateway.com - Passage Lookup: Psalms 132;","Summary":"English (EN) Espa\\u00f1ol (ES) Passage results ... View commentary related to this passage : Psalm 132. Psalm 132 (Amplified Bible ...","Url":"http:\\/\\/www.biblegateway.com\\/passage?search=Psalms+132;&version=45;","ClickUrl":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcB4BzdmMwF;_ylu=X3oDMTEwMmJvNjYwBGNvbG8DdwRsA1dTMQRwb3MDMjIEc2VjA3NyBHZ0aWQD\\/SIG=12s5v8a5i\\/EXP=1147592336\\/**http%3a\\/\\/www.biblegateway.com\\/passage%3fsearch=Psalms%2b132;%26version=45;","ModificationDate":1139990400,"MimeType":"text\\/html","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcB5RzdmMwF;_ylu=X3oDMTBxOTdwc3RpBGNvbG8DdwRwb3MDMjIEc2VjA3NyBHZ0aWQD\\/SIG=1810cufkn\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=www.biblegateway.com\\/passage%253Fsearch%253DPsalms%2b132%253B%2526version%253D45%253B%26w=132%26d=KJ4R3EaqMjLm%26icp=1%26.intl=us","Size":"27611"}},{"Title":"N-132: Wu-ftpd Buffer Overflow Vulnerability","Summary":"INFORMATION BULLETIN. N-132: Wu-ftpd Buffer Overflow Vulnerability. [Red Hat Security Advisory RHSA-2003:245-15] July 31, 2003 18:00 GMT. [Revised 13 Aug 2003] [Revised 14 Aug 2003] [Revised 5 Sept 2003] [Revised 8 Oct 2003]","Url":"http:\\/\\/www.ciac.org\\/ciac\\/bulletins\\/n-132.shtml","ClickUrl":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcB5xzdmMwF;_ylu=X3oDMTEwZXVqN2J0BGNvbG8DdwRsA1dTMQRwb3MDMjMEc2VjA3NyBHZ0aWQD\\/SIG=122msf6uh\\/EXP=1147592336\\/**http%3a\\/\\/www.ciac.org\\/ciac\\/bulletins\\/n-132.shtml","ModificationDate":1146812400,"MimeType":"text\\/html","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcB7BzdmMwF;_ylu=X3oDMTBxbm8wZ2ZmBGNvbG8DdwRwb3MDMjMEc2VjA3NyBHZ0aWQD\\/SIG=16jq98ra6\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=www.ciac.org\\/ciac\\/bulletins\\/n-132.shtml%26w=132%26d=cBzeO0aqMu2t%26icp=1%26.intl=us","Size":"12337"}},{"Title":"Bumpy Objects","Summary":"Bumpy Objects","Url":"http:\\/\\/acm.uva.es\\/p\\/v1\\/132.html","ClickUrl":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcB7hzdmMwF;_ylu=X3oDMTEwZmNyM2VjBGNvbG8DdwRsA1dTMQRwb3MDMjQEc2VjA3NyBHZ0aWQD\\/SIG=11j1o5t64\\/EXP=1147592336\\/**http%3a\\/\\/acm.uva.es\\/p\\/v1\\/132.html","ModificationDate":1057820400,"MimeType":"text\\/html","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcB8xzdmMwF;_ylu=X3oDMTBxNWw4M3FvBGNvbG8DdwRwb3MDMjQEc2VjA3NyBHZ0aWQD\\/SIG=164vlv52k\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=acm.uva.es\\/p\\/v1\\/132.html%26w=132%26d=ZSctVkaqMvQs%26icp=1%26.intl=us","Size":"2803"}},{"Title":"The Hayes memo is important\\u2014but bogus. By Daniel Benjamin","Summary":"When they published their \\" Case Closed\\" cover story three weeks ago on the relationship between Saddam Hussein\'s Iraq and al-Qaida, the editors of the Weekly Standard aimed to set off a bomb. The article was centered on a sizable leak\\u2014a gusher...","Url":"http:\\/\\/www.slate.com\\/id\\/2092180\\/","ClickUrl":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcB9RzdmMwF;_ylu=X3oDMTEwamxzbHY1BGNvbG8DdwRsA1dTMQRwb3MDMjUEc2VjA3NyBHZ0aWQD\\/SIG=11kj0d4q1\\/EXP=1147592336\\/**http%3a\\/\\/www.slate.com\\/id\\/2092180\\/","ModificationDate":1147071600,"MimeType":"text\\/html","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcB.hzdmMwF;_ylu=X3oDMTBxdGc1MmltBGNvbG8DdwRwb3MDMjUEc2VjA3NyBHZ0aWQD\\/SIG=16507c1iu\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=slate.msn.com\\/id\\/2092180\\/%26w=132%26d=bWigBUaqMvyd%26icp=1%26.intl=us","Size":"40222"}},{"Title":"FNMOC WXMAP: North America","Summary":"UNCLASSIFIED. FNMOC WXMAP. Model: NOGAPS. Area: North America. DTG: 2006050500. UNCLASSIFIED","Url":"https:\\/\\/www.fnmoc.navy.mil\\/CGI\\/PUBLIC\\/wxmap_single.cgi?area=ngp_namer&prod=850&tau=132","ClickUrl":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcB_BzdmMwF;_ylu=X3oDMTEwNDNwbjA5BGNvbG8DdwRsA1dTMQRwb3MDMjYEc2VjA3NyBHZ0aWQD\\/SIG=13g43sejj\\/EXP=1147592336\\/**https%3a\\/\\/www.fnmoc.navy.mil\\/CGI\\/PUBLIC\\/wxmap_single.cgi%3farea=ngp_namer%26prod=850%26tau=132","ModificationDate":1146812400,"MimeType":"text\\/html","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBAR3dmMwF;_ylu=X3oDMTBxN2ZrcnVrBGNvbG8DdwRwb3MDMjYEc2VjA3NyBHZ0aWQD\\/SIG=18s7gc72v\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=https%3a\\/\\/www.fnmoc.navy.mil\\/CGI\\/PUBLIC\\/wxmap_single.cgi%253Farea%253Dngp_namer%2526prod%253D850%2526tau%253D132%26w=132%26d=KiW5fUaqMvIm%26icp=1%26.intl=us","Size":"9048"}},{"Title":"O-132: BEA WebLogic Server and Express Certificate Spoofing Vulnerability","Summary":"INFORMATION BULLETIN. O-132: BEA WebLogic Server and Express Certificate Spoofing Vulnerability. [BEA Security Advisory: BEA04-54.00] April 30, 2004 20:00 GMT. PROBLEM:","Url":"http:\\/\\/ciac.llnl.gov\\/ciac\\/bulletins\\/o-132.shtml","ClickUrl":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBAx3dmMwF;_ylu=X3oDMTEwb2lhN21nBGNvbG8DdwRsA1dTMQRwb3MDMjcEc2VjA3NyBHZ0aWQD\\/SIG=1231gt787\\/EXP=1147592336\\/**http%3a\\/\\/ciac.llnl.gov\\/ciac\\/bulletins\\/o-132.shtml","ModificationDate":1142064000,"MimeType":"text\\/html","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBCB3dmMwF;_ylu=X3oDMTBxaGVsMDBlBGNvbG8DdwRwb3MDMjcEc2VjA3NyBHZ0aWQD\\/SIG=16k4puak0\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=ciac.llnl.gov\\/ciac\\/bulletins\\/o-132.shtml%26w=132%26d=ZZgzx0aqMjzn%26icp=1%26.intl=us","Size":"10701"}},{"Title":"NET Bible\\u00ae - Psalms 132","Summary":"... Psalms 132. Psalm 1321. A song of ascents.2. 132:1 O Lord, for David\'s sake remember ...","Url":"http:\\/\\/www.bible.org\\/netbible\\/psa132.htm","ClickUrl":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBCh3dmMwF;_ylu=X3oDMTEwYjBiNjdsBGNvbG8DdwRsA1dTMQRwb3MDMjgEc2VjA3NyBHZ0aWQD\\/SIG=11sp4034c\\/EXP=1147592336\\/**http%3a\\/\\/www.bible.org\\/netbible\\/psa132.htm","ModificationDate":1133769600,"MimeType":"text\\/html","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBDx3dmMwF;_ylu=X3oDMTBxOWNtc2JjBGNvbG8DdwRwb3MDMjgEc2VjA3NyBHZ0aWQD\\/SIG=16duuokm4\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=www.bible.org\\/netbible\\/psa132.htm%26w=132%26d=aVzzT0aqMwNl%26icp=1%26.intl=us","Size":"6048"}},{"Title":"HoustonChronicle.com - Sports: Fran Blinebury","Summary":"06, 2006. Column archive 2002. [an error occurred while processing this directive]","Url":"http:\\/\\/www.chron.com\\/content\\/chronicle\\/sports\\/blinebury\\/home","ClickUrl":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBER3dmMwF;_ylu=X3oDMTEwcmlvNjMyBGNvbG8DdwRsA1dTMQRwb3MDMjkEc2VjA3NyBHZ0aWQD\\/SIG=12gac009r\\/EXP=1147592336\\/**http%3a\\/\\/www.chron.com\\/content\\/chronicle\\/sports\\/blinebury\\/home","ModificationDate":1146898800,"MimeType":"text\\/html","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBFh3dmMwF;_ylu=X3oDMTBxNTVsY25mBGNvbG8DdwRwb3MDMjkEc2VjA3NyBHZ0aWQD\\/SIG=171sgehbh\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=www.chron.com\\/content\\/chronicle\\/sports\\/blinebury\\/home%26w=132%26d=I3QMYEaqMuxa%26icp=1%26.intl=us","Size":"27335"}},{"Title":"FNMOC WXMAP: North America","Summary":"UNCLASSIFIED. FNMOC WXMAP. Model: NOGAPS. Area: North America. DTG: 2006050512. UNCLASSIFIED","Url":"https:\\/\\/www.fnmoc.navy.mil\\/CGI\\/PUBLIC\\/wxmap_single.cgi?area=ngp_namer&prod=prp&tau=132","ClickUrl":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBGB3dmMwF;_ylu=X3oDMTEwN2g4ZWdqBGNvbG8DdwRsA1dTMQRwb3MDMzAEc2VjA3NyBHZ0aWQD\\/SIG=13g08kode\\/EXP=1147592336\\/**https%3a\\/\\/www.fnmoc.navy.mil\\/CGI\\/PUBLIC\\/wxmap_single.cgi%3farea=ngp_namer%26prod=prp%26tau=132","ModificationDate":1146812400,"MimeType":"text\\/html","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBHR3dmMwF;_ylu=X3oDMTBxaGdhODhjBGNvbG8DdwRwb3MDMzAEc2VjA3NyBHZ0aWQD\\/SIG=18solhmco\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=https%3a\\/\\/www.fnmoc.navy.mil\\/CGI\\/PUBLIC\\/wxmap_single.cgi%253Farea%253Dngp_namer%2526prod%253Dprp%2526tau%253D132%26w=132%26d=MKdCgkaqMuri%26icp=1%26.intl=us","Size":"9048"}},{"Title":"US CODE: Title 36,132. National School Lunch Week","Summary":"National School Lunch Week. Release date: 2005-10-11. (a) Designation.\\u2014. The week beginning on the second Sunday in October is National School Lunch Week. (b) Proclamation.\\u2014 ... TITLE 36 > Subtitle I > Part A > CHAPTER 1 > \\u00a7 132. Prev | Next. \\u00a7 132. National School Lunch Week ...","Url":"http:\\/\\/www4.law.cornell.edu\\/uscode\\/html\\/uscode36\\/usc_sec_36_00000132----000-.html","ClickUrl":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBHx3dmMwF;_ylu=X3oDMTEwN3BsMm9vBGNvbG8DdwRsA1dTMQRwb3MDMzEEc2VjA3NyBHZ0aWQD\\/SIG=1359dp76s\\/EXP=1147592336\\/**http%3a\\/\\/www4.law.cornell.edu\\/uscode\\/html\\/uscode36\\/usc_sec_36_00000132----000-.html","ModificationDate":1145343600,"MimeType":"text\\/html","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBJB3dmMwF;_ylu=X3oDMTBxNG81cnMxBGNvbG8DdwRwb3MDMzEEc2VjA3NyBHZ0aWQD\\/SIG=17m1he9ur\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=www4.law.cornell.edu\\/uscode\\/html\\/uscode36\\/usc_sec_36_00000132----000-.html%26w=132%26d=NTi8bUaqMpvs%26icp=1%26.intl=us","Size":"8976"}},{"Title":"ATel #132: IGR J17464-3213","Summary":"Outside. Other. Present Time: 7 May 2006; 4:08 UT. RSS. XML Gamma Ray Bursts. IGR J17464-3213 ... IGR J17464-3213. ATel #132; M. Revnivtsev (IKI, Moscow; MPA, Garching), M ... XTE J1746-322 = IGR J17464-3213 = H1743-322. 132. IGR J17464-3213 ...","Url":"http:\\/\\/www.astronomerstelegram.org\\/?read=132","ClickUrl":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBJh3dmMwF;_ylu=X3oDMTEwYWI0N2o2BGNvbG8DdwRsA1dTMQRwb3MDMzIEc2VjA3NyBHZ0aWQD\\/SIG=122qvcsd1\\/EXP=1147592336\\/**http%3a\\/\\/www.astronomerstelegram.org\\/%3fread=132","ModificationDate":1146985200,"MimeType":"text\\/html","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBKx3dmMwF;_ylu=X3oDMTBxYmt2ZDZzBGNvbG8DdwRwb3MDMzIEc2VjA3NyBHZ0aWQD\\/SIG=16pipao89\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=www.astronomerstelegram.org\\/%253Fread%253D132%26w=132%26d=Pb4lcUaqMvBj%26icp=1%26.intl=us","Size":"9056"}},{"Title":"Vashegyite Mineral Data","Summary":"Vashegyite Mineral Data + General Vashegyite Information. Chemical Formula: Al11(PO4)9(OH)6\\u00b738(H2O) or Al6(PO4)5(OH)3\\u00b723(H2O) Composition: Molecular Weight = 1,938.16 gm. Aluminum 15.31 % Al 28.93 % Al2O3","Url":"http:\\/\\/www.webmineral.com\\/data\\/Vashegyite.shtml","ClickUrl":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBLR3dmMwF;_ylu=X3oDMTEwNHFvMGppBGNvbG8DdwRsA1dTMQRwb3MDMzMEc2VjA3NyBHZ0aWQD\\/SIG=123ajp144\\/EXP=1147592336\\/**http%3a\\/\\/www.webmineral.com\\/data\\/Vashegyite.shtml","ModificationDate":1146898800,"MimeType":"text\\/html","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBMh3dmMwF;_ylu=X3oDMTBxNzAwNWY0BGNvbG8DdwRwb3MDMzMEc2VjA3NyBHZ0aWQD\\/SIG=16ktl9ibf\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=www.webmineral.com\\/data\\/Vashegyite.shtml%26w=132%26d=W38GQkaqMvCt%26icp=1%26.intl=us","Size":"29234"}},{"Title":"2003 CFR Title 40, Volume 19","Summary":"... CHAPTER I--ENVIRONMENTAL PROTECTION AGENCY. PART 132--WATER QUALITY GUIDANCE FOR THE GREAT LAKES SYSTEM. 132.1. Scope, purpose, and availability of documents ...","Url":"http:\\/\\/www.access.gpo.gov\\/nara\\/cfr\\/waisidx_03\\/40cfr132_03.html","ClickUrl":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBNB3dmMwF;_ylu=X3oDMTEwdHZ0ZXZxBGNvbG8DdwRsA1dTMQRwb3MDMzQEc2VjA3NyBHZ0aWQD\\/SIG=12imj9jh5\\/EXP=1147592336\\/**http%3a\\/\\/www.access.gpo.gov\\/nara\\/cfr\\/waisidx_03\\/40cfr132_03.html","ModificationDate":1123916400,"MimeType":"text\\/html","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBOR3dmMwF;_ylu=X3oDMTBxcml1MjI5BGNvbG8DdwRwb3MDMzQEc2VjA3NyBHZ0aWQD\\/SIG=173ahs683\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=www.access.gpo.gov\\/nara\\/cfr\\/waisidx_03\\/40cfr132_03.html%26w=132%26d=c8h16UaqMjB2%26icp=1%26.intl=us","Size":"4704"}},{"Title":"Chapter HFS 132","Summary":"... 145. HFS 132.13. DEPARTMENT OF HEALTH AND FAMILY SERVICES ... Subchapter I \\u2014 General. HFS 132.11. Statutory authority. HFS 132.12 ...","Url":"http:\\/\\/www.legis.state.wi.us\\/rsb\\/code\\/hfs\\/hfs132.pdf","ClickUrl":"http:\\/\\/www.legis.state.wi.us\\/rsb\\/code\\/hfs\\/hfs132.pdf#search=\'\'","ModificationDate":1099033200,"MimeType":"application\\/pdf","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBPh3dmMwF;_ylu=X3oDMTBxaXI5cmVpBGNvbG8DdwRwb3MDMzUEc2VjA3NyBHZ0aWQD\\/SIG=16p8cmh99\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=www.legis.state.wi.us\\/rsb\\/code\\/hfs\\/hfs132.pdf%26w=132%26d=CN-yI0aqMkhi%26icp=1%26.intl=us","Size":"283151"}},{"Title":"U.S. Senate: Legislation & Records Home > Votes > Roll Call Vote","Summary":"... Vote Number: 132. Vote Date: June 8, 2005, 05:30 PM ...","Url":"http:\\/\\/www.senate.gov\\/legislative\\/LIS\\/roll_call_lists\\/roll_call_vote_cfm.cfm?congress=109&session=1&vote=00132","ClickUrl":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBQB3dmMwF;_ylu=X3oDMTEwdTlzNmU2BGNvbG8DdwRsA1dTMQRwb3MDMzYEc2VjA3NyBHZ0aWQD\\/SIG=148g3pmm4\\/EXP=1147592336\\/**http%3a\\/\\/www.senate.gov\\/legislative\\/LIS\\/roll_call_lists\\/roll_call_vote_cfm.cfm%3fcongress=109%26session=1%26vote=00132","ModificationDate":1143360000,"MimeType":"text\\/html","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBRR3dmMwF;_ylu=X3oDMTBxOTlsaWYxBGNvbG8DdwRwb3MDMzYEc2VjA3NyBHZ0aWQD\\/SIG=19b3rasjc\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=www.senate.gov\\/legislative\\/LIS\\/roll_call_lists\\/roll_call_vote_cfm.cfm%253Fcongress%253D109%2526session%253D1%2526vote%253D00132%26w=132%26d=dtev60aqMh1g%26icp=1%26.intl=us","Size":"51433"}},{"Title":"Storm Prediction Center Tornado Watch 132","Summary":"Severe weather, tornado, thunderstorm, fire weather, storm report, tornado watch, severe thunderstorm watch, mesoscale discussion, convective outlook products from the Storm Prediction Center. ... SEL2 URGENT - IMMEDIATE BROADCAST REQUESTED TORNADO WATCH NUMBER 132 NWS STORM PREDICTION CENTER NORMAN OK 325 PM CDT ...","Url":"http:\\/\\/www.spc.noaa.gov\\/products\\/watch\\/ww0132.html","ClickUrl":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBRx3dmMwF;_ylu=X3oDMTEwanQ3MzU2BGNvbG8DdwRsA1dTMQRwb3MDMzcEc2VjA3NyBHZ0aWQD\\/SIG=126urlun7\\/EXP=1147592336\\/**http%3a\\/\\/www.spc.noaa.gov\\/products\\/watch\\/ww0132.html","ModificationDate":1146812400,"MimeType":"text\\/html","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBTB3dmMwF;_ylu=X3oDMTBxNDRkc3R1BGNvbG8DdwRwb3MDMzcEc2VjA3NyBHZ0aWQD\\/SIG=16n3e4s74\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=www.spc.noaa.gov\\/products\\/watch\\/ww0132.html%26w=132%26d=N4g-pUaqMusz%26icp=1%26.intl=us","Size":"19990"}},{"Title":"PLANT PHYSIOLOGY ONLINE -- Table of Contents (132 [2])","Summary":"To see an article, click its [Full Text] link. To review many abstracts, check the boxes to the left of the titles you want, and click the \'Get All Checked Abstract(s)\' button. To see one abstract at a time, click its [Abstract] link.","Url":"http:\\/\\/www.plantphysiol.org\\/content\\/vol132\\/issue2\\/index.shtml","ClickUrl":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBTh3dmMwF;_ylu=X3oDMTEwa2NtaWpsBGNvbG8DdwRsA1dTMQRwb3MDMzgEc2VjA3NyBHZ0aWQD\\/SIG=12hg0jpkp\\/EXP=1147592336\\/**http%3a\\/\\/www.plantphysiol.org\\/content\\/vol132\\/issue2\\/index.shtml","ModificationDate":1141804800,"MimeType":"text\\/html","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBUx3dmMwF;_ylu=X3oDMTBxYnZvM21yBGNvbG8DdwRwb3MDMzgEc2VjA3NyBHZ0aWQD\\/SIG=172cps28k\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=www.plantphysiol.org\\/content\\/vol132\\/issue2\\/index.shtml%26w=132%26d=Yvs4KUaqMjZc%26icp=1%26.intl=us","Size":"79038"}},{"Title":"AgGPS 132","Summary":"... The AgGPS 132 outputs sub- meter accuracy DGPS positions ... lightbar is connected to the. AgGPS 132. The AgGPS 132. can output positions up to 10 ...","Url":"http:\\/\\/www.farmgis.com\\/products\\/hardware\\/gps\\/aggps132.pdf","ClickUrl":"http:\\/\\/www.farmgis.com\\/products\\/hardware\\/gps\\/aggps132.pdf#search=\'\'","ModificationDate":1098169200,"MimeType":"application\\/pdf","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBWB3dmMwF;_ylu=X3oDMTBxcXNibWtvBGNvbG8DdwRwb3MDMzkEc2VjA3NyBHZ0aWQD\\/SIG=16us46bp9\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=www.farmgis.com\\/products\\/hardware\\/gps\\/aggps132.pdf%26w=132%26d=EvLM70aqMkiV%26icp=1%26.intl=us","Size":"162160"}},{"Title":"Chapter 132 \\u2014 Grand Jury, Indictments and Other Accusatory Instruments","Summary":"The text appearing in this database was produced from material provided by the Legislative Counsel Committee of the Oregon Legislative Assembly. The official record copy is the printed published copy of the Oregon Revised Statutes. ... 132.010 Composition. A grand jury is a body of seven persons drawn from the jurors in attendance ... 132.030 Challenge of juror prohibited; when juror may be excused. Neither ...","Url":"http:\\/\\/www.leg.state.or.us\\/ors\\/132.html","ClickUrl":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBWh3dmMwF;_ylu=X3oDMTEwYTAzbTUxBGNvbG8DdwRsA1dTMQRwb3MDNDAEc2VjA3NyBHZ0aWQD\\/SIG=11r91jes0\\/EXP=1147592336\\/**http%3a\\/\\/www.leg.state.or.us\\/ors\\/132.html","ModificationDate":1144220400,"MimeType":"text\\/html","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBXx3dmMwF;_ylu=X3oDMTBxdGU5a2FhBGNvbG8DdwRwb3MDNDAEc2VjA3NyBHZ0aWQD\\/SIG=16cbqvrlb\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=www.leg.state.or.us\\/ors\\/132.html%26w=132%26d=MFh3EUaqMk41%26icp=1%26.intl=us","Size":"73717"}},{"Title":"Downloaded 19 Aug 2002 to 132.163.136.56. Redistribution subject to AIP license or copyright, see http:\\/\\/ojps.aip... ","Summary":"Downloaded 19 Aug 2002 to 132.163.136.56. Redistribution subject to AIP license or copyright, see http:\\/\\/ojps.aip.org\\/japo\\/japcr.jsp. Downloaded 19 Aug 2002 to 132.163.136.56.","Url":"http:\\/\\/tf.nist.gov\\/general\\/pdf\\/550.pdf","ClickUrl":"http:\\/\\/tf.nist.gov\\/general\\/pdf\\/550.pdf#search=\'\'","ModificationDate":1029740400,"MimeType":"application\\/pdf","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBZB3dmMwF;_ylu=X3oDMTBxcDdtZjJoBGNvbG8DdwRwb3MDNDEEc2VjA3NyBHZ0aWQD\\/SIG=16bgqks5e\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=tf.nist.gov\\/general\\/pdf\\/550.pdf%26w=132%26d=PNXPXkaqMkLS%26icp=1%26.intl=us","Size":"2485625"}},{"Title":"Father Tom Inspired Pflugerville #132 To Evolve Into A Strong Fraternal Society","Summary":"... Monsignor Tom Frank is presented with the 2002 Society #132. Service Award by President Ray Pokorney ... ach year Society #132. of Pflugerville honors ...","Url":"http:\\/\\/www.kjtnet.org\\/web\\/benefits\\/newsletter\\/march03.pdf","ClickUrl":"http:\\/\\/www.kjtnet.org\\/web\\/benefits\\/newsletter\\/march03.pdf#search=\'\'","ModificationDate":1105603200,"MimeType":"application\\/pdf","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBaR3dmMwF;_ylu=X3oDMTBxMWU2b2h1BGNvbG8DdwRwb3MDNDIEc2VjA3NyBHZ0aWQD\\/SIG=16u12rqgg\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=www.kjtnet.org\\/web\\/benefits\\/newsletter\\/march03.pdf%26w=132%26d=fjH4hEaqMwZd%26icp=1%26.intl=us","Size":"2791412"}},{"Title":"Alsakharovite-Zn Mineral Data","Summary":"Alsakharovite-Zn Mineral Data. [Log In] [Current Auction] [Register to Bid] [FAQ] [About Us] Tired of Ebay rip-offs, scams, and dishonest people?","Url":"http:\\/\\/www.webmineral.com\\/data\\/Alsakharovite-Zn.shtml","ClickUrl":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBax3dmMwF;_ylu=X3oDMTEwN2JwMzlhBGNvbG8DdwRsA1dTMQRwb3MDNDMEc2VjA3NyBHZ0aWQD\\/SIG=129j54b3c\\/EXP=1147592336\\/**http%3a\\/\\/www.webmineral.com\\/data\\/Alsakharovite-Zn.shtml","ModificationDate":1147158000,"MimeType":"text\\/html","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBcB3dmMwF;_ylu=X3oDMTBxamhmc2lnBGNvbG8DdwRwb3MDNDMEc2VjA3NyBHZ0aWQD\\/SIG=16q6pnttb\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=www.webmineral.com\\/data\\/Alsakharovite-Zn.shtml%26w=132%26d=B_smj0aqMwJU%26icp=1%26.intl=us","Size":"38594"}},{"Title":"Psalm 132","Summary":"... Psalm 132. The Eternal Dwelling of God in Zion ...","Url":"http:\\/\\/www.hope.edu\\/academic\\/religion\\/bandstra\\/BIBLE\\/PSA\\/PSA132.HTM","ClickUrl":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBch3dmMwF;_ylu=X3oDMTEwdXE2dm1tBGNvbG8DdwRsA1dTMQRwb3MDNDQEc2VjA3NyBHZ0aWQD\\/SIG=12n448u4t\\/EXP=1147592336\\/**http%3a\\/\\/www.hope.edu\\/academic\\/religion\\/bandstra\\/BIBLE\\/PSA\\/PSA132.HTM","ModificationDate":1114758000,"MimeType":"text\\/html","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBdx3dmMwF;_ylu=X3oDMTBxMjBjZXRuBGNvbG8DdwRwb3MDNDQEc2VjA3NyBHZ0aWQD\\/SIG=17829d5da\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=www.hope.edu\\/academic\\/religion\\/bandstra\\/BIBLE\\/PSA\\/PSA132.HTM%26w=132%26d=Gs9Yt0aqMhg_%26icp=1%26.intl=us","Size":"5137"}},{"Title":"Bug 132 - Heartbeat requires all nodes to be pre-configured in ha.cf","Summary":"... Bugzilla Bug 132. Heartbeat requires all nodes to be pre-configured in ha.cf ... Bug#: 132. Platform: All DEC HP Macintosh PC SGI Sun Other ...","Url":"http:\\/\\/www.osdl.org\\/developer_bugzilla\\/show_bug.cgi?id=132","ClickUrl":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBeR3dmMwF;_ylu=X3oDMTEwa3QxajIyBGNvbG8DdwRsA1dTMQRwb3MDNDUEc2VjA3NyBHZ0aWQD\\/SIG=12g1vvd06\\/EXP=1147592336\\/**http%3a\\/\\/www.osdl.org\\/developer_bugzilla\\/show_bug.cgi%3fid=132","ModificationDate":1146553200,"MimeType":"text\\/html","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBfh3dmMwF;_ylu=X3oDMTBxbHY2NGw5BGNvbG8DdwRwb3MDNDUEc2VjA3NyBHZ0aWQD\\/SIG=177hj2go7\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=www.osdl.org\\/developer_bugzilla\\/show_bug.cgi%253Fid%253D132%26w=132%26d=Uzd0n0aqMtwg%26icp=1%26.intl=us","Size":"40101"}},{"Title":"Bug 132 - ChargeDispositionPlea and ChargeDispositionVerdict","Summary":"... Bugzilla Bug 132. ChargeDispositionPlea and ChargeDispositionVerdict ... Bug#: 132. Domain: AAMVA Corrections Courts Juvenile Law Enforcement Parole Probation Prosecution Other ...","Url":"http:\\/\\/justicexml.gtri.gatech.edu\\/feedback\\/show_bug.cgi?id=132","ClickUrl":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBgB3dmMwF;_ylu=X3oDMTEwdmhtYjA4BGNvbG8DdwRsA1dTMQRwb3MDNDYEc2VjA3NyBHZ0aWQD\\/SIG=12klknku3\\/EXP=1147592336\\/**http%3a\\/\\/justicexml.gtri.gatech.edu\\/feedback\\/show_bug.cgi%3fid=132","ModificationDate":1143360000,"MimeType":"text\\/html","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBhR3dmMwF;_ylu=X3oDMTBxa2g2bWNnBGNvbG8DdwRwb3MDNDYEc2VjA3NyBHZ0aWQD\\/SIG=17bcs6mrt\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=justicexml.gtri.gatech.edu\\/feedback\\/show_bug.cgi%253Fid%253D132%26w=132%26d=e0Zoy0aqMjBn%26icp=1%26.intl=us","Size":"16410"}},{"Title":"Publications","Summary":"... Bulletin 132, Management of the California State Water Project, is a series of annual reports that describe the ... annual Appendix E to Bulletin 132 and the final edition of the ...","Url":"http:\\/\\/www.swpao.water.ca.gov\\/publications","ClickUrl":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBhx3dmMwF;_ylu=X3oDMTEwZjVhYXMzBGNvbG8DdwRsA1dTMQRwb3MDNDcEc2VjA3NyBHZ0aWQD\\/SIG=11ud1cv0a\\/EXP=1147592336\\/**http%3a\\/\\/www.swpao.water.ca.gov\\/publications","ModificationDate":1143187200,"MimeType":"text\\/html","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBjB3dmMwF;_ylu=X3oDMTBxcjNocmY0BGNvbG8DdwRwb3MDNDcEc2VjA3NyBHZ0aWQD\\/SIG=16fvue890\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=www.swpao.water.ca.gov\\/publications%26w=132%26d=CDqKvkaqMhfi%26icp=1%26.intl=us","Size":"27835"}},{"Title":"Sampling at Head Crater and Bench Crater","Summary":"... 132:10:41 Bean: Boy, this Hand Tool Carrier is light and nice compared to carrying it around ... 132:11:20 Bean: I can see everything from fine-grain basalt ...","Url":"http:\\/\\/www.hq.nasa.gov\\/alsj\\/a12\\/a12.head_bench.html","ClickUrl":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBjh3dmMwF;_ylu=X3oDMTEwYjFmcHI4BGNvbG8DdwRsA1dTMQRwb3MDNDgEc2VjA3NyBHZ0aWQD\\/SIG=127h6jrgp\\/EXP=1147592336\\/**http%3a\\/\\/www.hq.nasa.gov\\/alsj\\/a12\\/a12.head_bench.html","ModificationDate":1139731200,"MimeType":"text\\/html","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBkx3dmMwF;_ylu=X3oDMTBxazBuMTN2BGNvbG8DdwRwb3MDNDgEc2VjA3NyBHZ0aWQD\\/SIG=16of05gsq\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=www.hq.nasa.gov\\/alsj\\/a12\\/a12.head_bench.html%26w=132%26d=O2JTbEaqMul1%26icp=1%26.intl=us","Size":"91895"}},{"Title":"Psalms 132","Summary":"Psalms 132. 132:1 A Song of degrees.","Url":"http:\\/\\/www.masterstech-home.com\\/The_Library\\/The_Bible\\/Bible_Chapters\\/Psalms\\/132.html","ClickUrl":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBlR3dmMwF;_ylu=X3oDMTEwOG85MWM5BGNvbG8DdwRsA1dTMQRwb3MDNDkEc2VjA3NyBHZ0aWQD\\/SIG=1381oeor0\\/EXP=1147592336\\/**http%3a\\/\\/www.masterstech-home.com\\/The_Library\\/The_Bible\\/Bible_Chapters\\/Psalms\\/132.html","ModificationDate":1135152000,"MimeType":"text\\/html","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBmh3dmMwF;_ylu=X3oDMTBxNWpuM3FoBGNvbG8DdwRwb3MDNDkEc2VjA3NyBHZ0aWQD\\/SIG=17p7bjs0u\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=www.masterstech-home.com\\/The_Library\\/The_Bible\\/Bible_Chapters\\/Psalms\\/132.html%26w=132%26d=TUYYg0aqMhg4%26icp=1%26.intl=us","Size":"11669"}},{"Title":"California Highways (www.cahighways.org): Routes 129 through 136","Summary":"... The 2005 Transportation Bill included $14.4 million to widen Route 132 from Route 99 west to Dakota Avenue ... between Coulterville and Mariposa was cosigned as Route 49 and Route 132 ...","Url":"http:\\/\\/www.cahighways.org\\/129-136.html","ClickUrl":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBnB3dmMwF;_ylu=X3oDMTEwaXBqZ2lxBGNvbG8DdwRsA1dTMQRwb3MDNTAEc2VjA3NyBHZ0aWQD\\/SIG=11q1ne7f6\\/EXP=1147592336\\/**http%3a\\/\\/www.cahighways.org\\/129-136.html","ModificationDate":1145689200,"MimeType":"text\\/html","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBoR3dmMwF;_ylu=X3oDMTBxbmZjMXVuBGNvbG8DdwRwb3MDNTAEc2VjA3NyBHZ0aWQD\\/SIG=16bhah065\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=www.cahighways.org\\/129-136.html%26w=132%26d=fRBtE0aqMqve%26icp=1%26.intl=us","Size":"49110"}},{"Title":"Downloaded 11 Nov 2002 to 132.64.1.37. Redistribution subject to AIP license or copyright, see http:\\/\\/ojps.aip.org\\/... ","Summary":"Downloaded 11 Nov 2002 to 132.64.1.37. Redistribution subject to AIP license or copyright, see http:\\/\\/ojps.aip.org\\/rsio\\/rsicr.jsp. Downloaded 11 Nov 2002 to 132.64.1.37.","Url":"http:\\/\\/chem.ch.huji.ac.il\\/~porath\\/NST2\\/Lecture%205\\/Kuk%20and%20Silverman%20Rev_Sci_Inst_60_165_1989.pdf","ClickUrl":"http:\\/\\/chem.ch.huji.ac.il\\/~porath\\/NST2\\/Lecture%205\\/Kuk%20and%20Silverman%20Rev_Sci_Inst_60_165_1989.pdf#search=\'\'","ModificationDate":1069660800,"MimeType":"application\\/pdf","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBph3dmMwF;_ylu=X3oDMTBxZHJldXUyBGNvbG8DdwRwb3MDNTEEc2VjA3NyBHZ0aWQD\\/SIG=190pnnu1n\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=chem.ch.huji.ac.il\\/%257Eporath\\/NST2\\/Lecture%2525205\\/Kuk%252520and%252520Silverman%252520Rev_Sci_Inst_60_165_1989.pdf%26w=132%26d=F4c-T0aqMhfn%26icp=1%26.intl=us","Size":"3386219"}},{"Title":"Phelps Personnel Associates","Summary":"Welcome to Phelps Personnel Associates. Recruiting and Placing Engineers and Management Professionals since 1976. Concentration in the Carolinas and Southeastern job market. Permanent, Company fee-paid positions only. Confidential, courteous service","Url":"http:\\/\\/www.phelpspersonnel.com\\/","ClickUrl":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBqB3dmMwF;_ylu=X3oDMTEwazlldjdwBGNvbG8DdwRsA1dTMQRwb3MDNTIEc2VjA3NyBHZ0aWQD\\/SIG=11j85rkug\\/EXP=1147592336\\/**http%3a\\/\\/www.phelpspersonnel.com\\/","ModificationDate":1060239600,"MimeType":"text\\/html","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBrR3dmMwF;_ylu=X3oDMTBxZWJqMW1lBGNvbG8DdwRwb3MDNTIEc2VjA3NyBHZ0aWQD\\/SIG=164jn86me\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=www.phelpspersonnel.com\\/%26w=132%26d=KRPdjUaqMwQa%26icp=1%26.intl=us","Size":"6288"}},{"Title":"132 - Loss and resumption of Australian citizenship - Declaration of desre to resume Australian citizenship under ... ","Summary":"... retain another citizenship \\u0096 be under the age of 25 years. 132 (Design date 0705) - Page 1 ... 23A, 23AA, 23AB or 23B. 132 (Design date 0705) - Page 2 ...","Url":"http:\\/\\/www.immi.gov.au\\/allforms\\/pdf\\/132.pdf","ClickUrl":"http:\\/\\/www.immi.gov.au\\/allforms\\/pdf\\/132.pdf#search=\'\'","ModificationDate":1141113600,"MimeType":"application\\/pdf","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBsh3dmMwF;_ylu=X3oDMTBxYzdmNTNvBGNvbG8DdwRwb3MDNTMEc2VjA3NyBHZ0aWQD\\/SIG=16gtd8vkd\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=www.immi.gov.au\\/allforms\\/pdf\\/132.pdf%26w=132%26d=XLvxbUaqMvqk%26icp=1%26.intl=us","Size":"118238"}},{"Title":"Communication Workersof America Local 3808","Summary":"News Highlights and Headlines. Nominations for one (1) 402 Franklin Road Area Representative will be taken at the June 6, 2006 Membership Meeting. BellSouth CONTRACT INFO. Frequently asked Q&A","Url":"http:\\/\\/cwa3808.org\\/","ClickUrl":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBtB3dmMwF;_ylu=X3oDMTEwMGJ0MmQ1BGNvbG8DdwRsA1dTMQRwb3MDNTQEc2VjA3NyBHZ0aWQD\\/SIG=117pqud0l\\/EXP=1147592336\\/**http%3a\\/\\/cwa3808.org\\/","ModificationDate":1147071600,"MimeType":"text\\/html","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBuR3dmMwF;_ylu=X3oDMTBxY3NiaDkyBGNvbG8DdwRwb3MDNTQEc2VjA3NyBHZ0aWQD\\/SIG=15od3j3p8\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=cwa3808.org\\/%26w=132%26d=ahqtKEaqMwC6%26icp=1%26.intl=us","Size":"53103"}},{"Title":"Mirabilis ICQ 98a Vulnerability","Summary":"... Bugtraq ID: 132. Class: Failure to Handle Exceptional Conditions ...","Url":"http:\\/\\/www.securityfocus.com\\/bid\\/132","ClickUrl":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBux3dmMwF;_ylu=X3oDMTEwNXIwZzI2BGNvbG8DdwRsA1dTMQRwb3MDNTUEc2VjA3NyBHZ0aWQD\\/SIG=11ocj9p23\\/EXP=1147592336\\/**http%3a\\/\\/www.securityfocus.com\\/bid\\/132","ModificationDate":1146034800,"MimeType":"text\\/html","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBwB3dmMwF;_ylu=X3oDMTBxbnNnYWFhBGNvbG8DdwRwb3MDNTUEc2VjA3NyBHZ0aWQD\\/SIG=169dn3s31\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=www.securityfocus.com\\/bid\\/132%26w=132%26d=bbuQiUaqMsU1%26icp=1%26.intl=us","Size":"11819"}},{"Title":"Downloaded 23 Dec 2001 to 132.76.33.15. Redistribution subject to AIP license or copyright, see http:\\/\\/ojps.aip.org\\/... ","Summary":"Downloaded 23 Dec 2001 to 132.76.33.15. Redistribution subject to AIP license or copyright, see http:\\/\\/ojps.aip.org\\/jcpo\\/jcpcr.jsp. Downloaded 23 Dec 2001 to 132.76.33.15.","Url":"http:\\/\\/theochem.weizmann.ac.il\\/AIPreprints\\/8.pdf","ClickUrl":"http:\\/\\/theochem.weizmann.ac.il\\/AIPreprints\\/8.pdf#search=\'\'","ModificationDate":1092294000,"MimeType":"application\\/pdf","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBxR3dmMwF;_ylu=X3oDMTBxcjhpcTNrBGNvbG8DdwRwb3MDNTYEc2VjA3NyBHZ0aWQD\\/SIG=16l1r1fiu\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=theochem.weizmann.ac.il\\/AIPreprints\\/8.pdf%26w=132%26d=VrF160aqMjIt%26icp=1%26.intl=us","Size":"1754089"}},{"Title":"Chapter RL 132","Summary":"DEPARTMENT OF REGULATION AND LICENSING. Unofficial Text (See Printed Volume). Current through date and Register shown on Title Page. Register, July, 1999, No. 523. Chapter RL 132. APPLICATIONS. RL 132.01. Authority. RL 132.02 ... Note: Chapter RL 132 was created as an emergency rule effective 11\\u20131\\u201398 ...","Url":"http:\\/\\/www.legis.state.wi.us\\/rsb\\/code\\/rl\\/rl132.pdf","ClickUrl":"http:\\/\\/www.legis.state.wi.us\\/rsb\\/code\\/rl\\/rl132.pdf#search=\'\'","ModificationDate":1011859200,"MimeType":"application\\/pdf","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcByh3dmMwF;_ylu=X3oDMTBxZjI4aHZhBGNvbG8DdwRwb3MDNTcEc2VjA3NyBHZ0aWQD\\/SIG=16nps3tc2\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=www.legis.state.wi.us\\/rsb\\/code\\/rl\\/rl132.pdf%26w=132%26d=VTECeUaqMi-4%26icp=1%26.intl=us","Size":"8138"}},{"Title":"Rebuffing Bush, 132 Mayors Embrace Kyoto Rules - New York Times","Summary":"Greg Nickels of Seattle and 131 other like-minded mayors have joined a bipartisan coalition to fight global warming on the local level.","Url":"http:\\/\\/www.nytimes.com\\/2005\\/05\\/14\\/national\\/14kyoto.html?ex=1273723200&en=c02e1cce1ca43706&ei=5088","ClickUrl":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBzB3dmMwF;_ylu=X3oDMTEwbm43bzM3BGNvbG8DdwRsA1dTMQRwb3MDNTgEc2VjA3NyBHZ0aWQD\\/SIG=13repbe72\\/EXP=1147592336\\/**http%3a\\/\\/www.nytimes.com\\/2005\\/05\\/14\\/national\\/14kyoto.html%3fex=1273723200%26en=c02e1cce1ca43706%26ei=5088","ModificationDate":1147330800,"MimeType":"text\\/html"},{"Title":"DHS-Revised Rule 132","Summary":"Easy access to Illinois services and information ... an e-mail address to pose questions regarding Rule 132. Please review the Rule 132 Q&A document posted on ...","Url":"http:\\/\\/www.dhs.state.il.us\\/revisedRule132","ClickUrl":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcB0h3dmMwF;_ylu=X3oDMTEwMjl1dW84BGNvbG8DdwRsA1dTMQRwb3MDNTkEc2VjA3NyBHZ0aWQD\\/SIG=11tb4gcma\\/EXP=1147592336\\/**http%3a\\/\\/www.dhs.state.il.us\\/revisedRule132","ModificationDate":1147244400,"MimeType":"text\\/html","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcB1x3dmMwF;_ylu=X3oDMTBxOWMyazRxBGNvbG8DdwRwb3MDNTkEc2VjA3NyBHZ0aWQD\\/SIG=16e8khp3d\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=www.dhs.state.il.us\\/revisedRule132%26w=132%26d=Oc4YikaqMwgM%26icp=1%26.intl=us","Size":"22903"}},{"Title":"211 CMR: DIVISION OF INSURANCE 6\\/27\\/97 211 CMR - 837 211 CMR 132.00: ACTUARIAL OPINION AND MEMORANDUM REGULATION ... ","Summary":"... 132.01: Purpose. 132.02: Authority. 132.03: Scope. 132.04: Definitions. 132.05: General Requirements. 132.06: Required Opinions. 132 ... Adequacy Analysis. 132.08: Statement of Actuarial ...","Url":"http:\\/\\/www.mass.gov\\/doi\\/Legal_Hearings\\/211_132.PDF","ClickUrl":"http:\\/\\/www.mass.gov\\/doi\\/Legal_Hearings\\/211_132.PDF#search=\'\'","ModificationDate":1003906800,"MimeType":"application\\/pdf","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcB3B3dmMwF;_ylu=X3oDMTBxdG9ldThsBGNvbG8DdwRwb3MDNjAEc2VjA3NyBHZ0aWQD\\/SIG=16no3ibvg\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=www.mass.gov\\/doi\\/Legal_Hearings\\/211_132.PDF%26w=132%26d=C4QXPkaqMjRM%26icp=1%26.intl=us","Size":"45945"}},{"Title":"Downloaded 22 Jul 2003 to 132.66.16.23. Redistribution subject to AIP license or copyright, see http:\\/\\/ojps.aip.org\\/... ","Summary":"Downloaded 22 Jul 2003 to 132.66.16.23. Redistribution subject to AIP license or copyright, see http:\\/\\/ojps.aip.org\\/jcpo\\/jcpcr.jsp. Downloaded 22 Jul 2003 to 132.66.16.23.","Url":"http:\\/\\/star.tau.ac.il\\/~andelman\\/reprints\\/021_JCP_1987_87_7229.pdf","ClickUrl":"http:\\/\\/star.tau.ac.il\\/~andelman\\/reprints\\/021_JCP_1987_87_7229.pdf#search=\'\'","ModificationDate":1058857200,"MimeType":"application\\/pdf","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcB4R3dmMwF;_ylu=X3oDMTBxZzZxbDZiBGNvbG8DdwRwb3MDNjEEc2VjA3NyBHZ0aWQD\\/SIG=17adesqgt\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=star.tau.ac.il\\/%257Eandelman\\/reprints\\/021_JCP_1987_87_7229.pdf%26w=132%26d=Lvkyh0aqMh8L%26icp=1%26.intl=us","Size":"1798906"}},{"Title":"Special Troops Battalion, 4th Brigade, 10th Mountain Division Insignia","Summary":"The Institute of Heraldry\'s Special Troops Battalion Section, Special Troops Battalion, 4th Brigade, 10th Mountain Division Insignia Page","Url":"http:\\/\\/www.tioh.hqda.pentagon.mil\\/STB\\/STB4Brigade10MountainDivision.htm","ClickUrl":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcB4x3dmMwF;_ylu=X3oDMTEwZjFqOHFiBGNvbG8DdwRsA1dTMQRwb3MDNjIEc2VjA3NyBHZ0aWQD\\/SIG=12rjb6bu4\\/EXP=1147592336\\/**http%3a\\/\\/www.tioh.hqda.pentagon.mil\\/STB\\/STB4Brigade10MountainDivision.htm","ModificationDate":1109923200,"MimeType":"text\\/html","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcB6B3dmMwF;_ylu=X3oDMTBxZzN1cnRoBGNvbG8DdwRwb3MDNjIEc2VjA3NyBHZ0aWQD\\/SIG=17c61sq2b\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=www.tioh.hqda.pentagon.mil\\/STB\\/STB4Brigade10MountainDivision.htm%26w=132%26d=CjDx1kaqMwEn%26icp=1%26.intl=us","Size":"8896"}},{"Title":"NNSA\'s Brooks lauds partnership in nonproliferation","Summary":"... ite Way. U133. 132. A-4. 135. 134. 132. Fun With Science ...","Url":"http:\\/\\/www.llnl.gov\\/llnl\\/06news\\/employee\\/articles\\/2001\\/12.21.01newsline.pdf","ClickUrl":"http:\\/\\/www.llnl.gov\\/llnl\\/06news\\/employee\\/articles\\/2001\\/12.21.01newsline.pdf#search=\'\'","ModificationDate":1099555200,"MimeType":"application\\/pdf","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcB7R3dmMwF;_ylu=X3oDMTBxZ25nbWN0BGNvbG8DdwRwb3MDNjMEc2VjA3NyBHZ0aWQD\\/SIG=17go91rgp\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=www.llnl.gov\\/llnl\\/06news\\/employee\\/articles\\/2001\\/12.21.01newsline.pdf%26w=132%26d=aLdSWEaqMjYB%26icp=1%26.intl=us","Size":"472758"}},{"Title":"Psalms 132. The Holy Bible: King James Version.","Summary":"... Reference > The Bible > The King James Version > Psalms > 132 ... The Psalms. 132. A Prayer for Blessing on the Sanctuary ...","Url":"http:\\/\\/www.bartleby.com\\/108\\/19\\/132.html","ClickUrl":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcB7x3dmMwF;_ylu=X3oDMTEwdm1iOTMzBGNvbG8DdwRsA1dTMQRwb3MDNjQEc2VjA3NyBHZ0aWQD\\/SIG=11rfct28r\\/EXP=1147592336\\/**http%3a\\/\\/www.bartleby.com\\/108\\/19\\/132.html","ModificationDate":1134460800,"MimeType":"text\\/html","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcB9B3dmMwF;_ylu=X3oDMTBxa3RqY29tBGNvbG8DdwRwb3MDNjQEc2VjA3NyBHZ0aWQD\\/SIG=16ckhlf21\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=www.bartleby.com\\/108\\/19\\/132.html%26w=132%26d=Om0HPEaqMjyM%26icp=1%26.intl=us","Size":"26896"}},{"Title":"The Criterion Collection: Ruling Class, The","Summary":"Title Person. Film Info. 1972. 154 minutes. Color. 1.77:1. Dolby Digital Mono 1.0. Anamorphic. English. Release Info. Catalog Number: CC1575D. ISBN: 1-55940-922-3. UPC: 7-15515-0124-2-3. SRP: $39.95. Synopsis","Url":"http:\\/\\/www.criterionco.com\\/asp\\/release.asp?id=132","ClickUrl":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcB9h3dmMwF;_ylu=X3oDMTEwcTRya2ltBGNvbG8DdwRsA1dTMQRwb3MDNjUEc2VjA3NyBHZ0aWQD\\/SIG=1272o9dh7\\/EXP=1147592336\\/**http%3a\\/\\/www.criterionco.com\\/asp\\/release.asp%3fid=132","ModificationDate":1147244400,"MimeType":"text\\/html","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcB.x3dmMwF;_ylu=X3oDMTBxdDMwMGJvBGNvbG8DdwRwb3MDNjUEc2VjA3NyBHZ0aWQD\\/SIG=16u4fa0dg\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=www.criterionco.com\\/asp\\/release.asp%253Fid%253D132%26w=132%26d=L2PGVEaqMwN7%26icp=1%26.intl=us","Size":"16920"}},{"Title":"AJP Legacy -- Table of Contents (February 28 1941, 132 [2])","Summary":"Contents: February 28 1941, Volume 132, Issue 2 [Index by Author] Other Issues: To see an article, click its [Full Text] link.","Url":"http:\\/\\/ajplegacy.physiology.org\\/content\\/vol132\\/issue2\\/index.shtml","ClickUrl":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcB_R3dmMwF;_ylu=X3oDMTEwZWhkczJpBGNvbG8DdwRsA1dTMQRwb3MDNjYEc2VjA3NyBHZ0aWQD\\/SIG=12lf1ce7j\\/EXP=1147592336\\/**http%3a\\/\\/ajplegacy.physiology.org\\/content\\/vol132\\/issue2\\/index.shtml","ModificationDate":1141459200,"MimeType":"text\\/html","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBAh7dmMwF;_ylu=X3oDMTBxNzI0azAwBGNvbG8DdwRwb3MDNjYEc2VjA3NyBHZ0aWQD\\/SIG=176uub081\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=ajplegacy.physiology.org\\/content\\/vol132\\/issue2\\/index.shtml%26w=132%26d=Ms_vOEaqMj-H%26icp=1%26.intl=us","Size":"24095"}},{"Title":"released a letter (PDF)","Summary":"","Url":"http:\\/\\/www.house.gov\\/judiciary_democrats\\/letters\\/rovehrgrequestltr71405.pdf","ClickUrl":"http:\\/\\/www.house.gov\\/judiciary_democrats\\/letters\\/rovehrgrequestltr71405.pdf#search=\'\'","ModificationDate":1121410800,"MimeType":"application\\/pdf","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBBx7dmMwF;_ylu=X3oDMTBxOXQ3MWF0BGNvbG8DdwRwb3MDNjcEc2VjA3NyBHZ0aWQD\\/SIG=17g69a880\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=www.house.gov\\/judiciary_democrats\\/letters\\/rovehrgrequestltr71405.pdf%26w=132%26d=LPrB50aqMqRY%26icp=1%26.intl=us","Size":"381000"}},{"Title":"NC General Statutes Chapter 132","Summary":"North Carolina. State Public Records Law. North Carolina General Statutes. Chapter 132. Public Records. Last updated December 10th, 1999. Contents. Section Title. 132-1. \\"Public records\\" defined. 132-1.1. ... Section Title. 132-1. \\"Public records\\" defined. 132-1.1. Confidential communications by legal counsel to public board or agency; State tax ...","Url":"http:\\/\\/www.ah.dcr.state.nc.us\\/e-records\\/ncgs\\/ncgs132.htm","ClickUrl":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBCR7dmMwF;_ylu=X3oDMTEwMjJmbW84BGNvbG8DdwRsA1dTMQRwb3MDNjgEc2VjA3NyBHZ0aWQD\\/SIG=12ctoo16c\\/EXP=1147592336\\/**http%3a\\/\\/www.ah.dcr.state.nc.us\\/e-records\\/ncgs\\/ncgs132.htm","ModificationDate":953625600,"MimeType":"text\\/html","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBDh7dmMwF;_ylu=X3oDMTBxYjJtcGphBGNvbG8DdwRwb3MDNjgEc2VjA3NyBHZ0aWQD\\/SIG=16t5vbni8\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=www.ah.dcr.state.nc.us\\/e-records\\/ncgs\\/ncgs132.htm%26w=132%26d=MyfGH0aqMwR0%26icp=1%26.intl=us","Size":"43695"}},{"Title":"Technical Introduction to CDMA","Summary":"Course 132. Technical. Introduction to CDMA. Technical. Introduction to CDMA. IS-95, CDMA2000 and a glimpse of 1xEV. February, 2005. 132 - 1. Technical Introduction to CDMA v4.0 (c) 2005 Scott Baxter. Course Outline. Basic CDMA Principles. Coding","Url":"http:\\/\\/www.howcdmaworks.com\\/intro\\/132v3.pdf","ClickUrl":"http:\\/\\/www.howcdmaworks.com\\/intro\\/132v3.pdf#search=\'\'","ModificationDate":1107590400,"MimeType":"application\\/pdf","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBEx7dmMwF;_ylu=X3oDMTBxbTJnbmxhBGNvbG8DdwRwb3MDNjkEc2VjA3NyBHZ0aWQD\\/SIG=16ghr9cvr\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=www.howcdmaworks.com\\/intro\\/132v3.pdf%26w=132%26d=B6dAbEaqMu7t%26icp=1%26.intl=us","Size":"4342039"}},{"Title":"Thread Images Digitizing","Summary":"Free embroidery design. Specializes in providing custom quality embroidery designs to the professional embroiderer.","Url":"http:\\/\\/www.threadimages.com\\/","ClickUrl":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBFR7dmMwF;_ylu=X3oDMTEwMmI2cWQzBGNvbG8DdwRsA1dTMQRwb3MDNzAEc2VjA3NyBHZ0aWQD\\/SIG=11gsp7523\\/EXP=1147592336\\/**http%3a\\/\\/www.threadimages.com\\/","ModificationDate":1147158000,"MimeType":"text\\/html","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBGx7dmMwF;_ylu=X3oDMTBxaml0dDF0BGNvbG8DdwRwb3MDNzAEc2VjA3NyBHZ0aWQD\\/SIG=161ukrsfh\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=www.threadimages.com\\/%26w=132%26d=BmPG10aqMwgW%26icp=1%26.intl=us","Size":"55861"}},{"Title":"Psalms Chapter 132:1-18.","Summary":"Read the Hebrew Transliteration Psalms 132:1-18 Online.","Url":"http:\\/\\/bibledbdata.org\\/onlinebibles\\/hebrew_translit\\/19_132.htm","ClickUrl":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBHR7dmMwF;_ylu=X3oDMTEwdXJnMnJuBGNvbG8DdwRsA1dTMQRwb3MDNzEEc2VjA3NyBHZ0aWQD\\/SIG=12i1mped7\\/EXP=1147592336\\/**http%3a\\/\\/bibledbdata.org\\/onlinebibles\\/hebrew_translit\\/19_132.htm","ModificationDate":1044172800,"MimeType":"text\\/html","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBIh7dmMwF;_ylu=X3oDMTBxNmJocG1iBGNvbG8DdwRwb3MDNzEEc2VjA3NyBHZ0aWQD\\/SIG=173o8ajtj\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=bibledbdata.org\\/onlinebibles\\/hebrew_translit\\/19_132.htm%26w=132%26d=dfiAJkaqMi1u%26icp=1%26.intl=us","Size":"9706"}},{"Title":"PRC-132","Summary":"K6ERO Portable and pedestrian mobile amateur radio. PRC-132 & M50B. To the left is a Loral Terracom M50B. made in 1988 Serial#19 . Its 10 inches tall. with out battery box or external power. box , 3.5 inches wide and 5.25 inches. deep, weight 6.9 lbs . ... The M50B is the early issue version of the. PRC-132 special operations HF Radio ...","Url":"http:\\/\\/www.muttmotorpool.com\\/PRC-132","ClickUrl":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBJB7dmMwF;_ylu=X3oDMTEwYm80YTY1BGNvbG8DdwRsA1dTMQRwb3MDNzIEc2VjA3NyBHZ0aWQD\\/SIG=11ou3h7bi\\/EXP=1147592336\\/**http%3a\\/\\/www.muttmotorpool.com\\/PRC-132","ModificationDate":1146294000,"MimeType":"text\\/html","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBKR7dmMwF;_ylu=X3oDMTBxaDgzYWcxBGNvbG8DdwRwb3MDNzIEc2VjA3NyBHZ0aWQD\\/SIG=169r7ofhd\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=www.muttmotorpool.com\\/PRC-132%26w=132%26d=Utj0H0aqMs48%26icp=1%26.intl=us","Size":"19723"}},{"Title":"Firenze 132 \\/ 170","Summary":"Firenze 132 \\/ 170. Matte Presentation Paper. 132 gram 2-side coated. 170 gram single side coated. Magicl\\u00e9e\\u00ae Firenze 132 and Firenze 170 matte. papers are designed for poster applications and. have an impressive price performance ratio. The ... If using the 132 gram. paper for 2-sided imaging ink limit on ...","Url":"http:\\/\\/www.magicinkjet.com\\/client_data_pdf\\/guides\\/Firenze.pdf","ClickUrl":"http:\\/\\/www.magicinkjet.com\\/client_data_pdf\\/guides\\/Firenze.pdf#search=\'\'","ModificationDate":1081839600,"MimeType":"application\\/pdf","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBLh7dmMwF;_ylu=X3oDMTBxbXY4b2luBGNvbG8DdwRwb3MDNzMEc2VjA3NyBHZ0aWQD\\/SIG=172sdum75\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=www.magicinkjet.com\\/client_data_pdf\\/guides\\/Firenze.pdf%26w=132%26d=Q4ILzEaqMh1n%26icp=1%26.intl=us","Size":"2152647"}},{"Title":"Museletter # 132 \\/ February 2003: The US and Eurasia: End Game for the Industrial Era?","Summary":"Defining democracy in the wake of the 2002 elections in the U.S.A..","Url":"http:\\/\\/www.museletter.com\\/archive\\/132.html","ClickUrl":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBMB7dmMwF;_ylu=X3oDMTEwNGRiZ3FjBGNvbG8DdwRsA1dTMQRwb3MDNzQEc2VjA3NyBHZ0aWQD\\/SIG=11upr7v32\\/EXP=1147592336\\/**http%3a\\/\\/www.museletter.com\\/archive\\/132.html","ModificationDate":1108540800,"MimeType":"text\\/html","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBNR7dmMwF;_ylu=X3oDMTBxZTNpbG1nBGNvbG8DdwRwb3MDNzQEc2VjA3NyBHZ0aWQD\\/SIG=16fg9g4no\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=www.museletter.com\\/archive\\/132.html%26w=132%26d=SS0AQEaqMvuR%26icp=1%26.intl=us","Size":"47428"}},{"Title":"Downloaded 25 Oct 2002 to 132.66.16.12. Redistribution subject to AIP license or copyright, see http:\\/\\/ojps.aip.org\\/... ","Summary":"Downloaded 25 Oct 2002 to 132.66.16.12. Redistribution subject to AIP license or copyright, see http:\\/\\/ojps.aip.org\\/jcpo\\/jcpcr.jsp. Downloaded 25 Oct 2002 to 132.66.16.12.","Url":"http:\\/\\/star.tau.ac.il\\/~andelman\\/reprints\\/018_JCP_1987_86_3673.pdf","ClickUrl":"http:\\/\\/star.tau.ac.il\\/~andelman\\/reprints\\/018_JCP_1987_86_3673.pdf#search=\'\'","ModificationDate":1035529200,"MimeType":"application\\/pdf","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBOh7dmMwF;_ylu=X3oDMTBxbGZmanU1BGNvbG8DdwRwb3MDNzUEc2VjA3NyBHZ0aWQD\\/SIG=17a4s312u\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=star.tau.ac.il\\/%257Eandelman\\/reprints\\/018_JCP_1987_86_3673.pdf%26w=132%26d=YANT3kaqMhfd%26icp=1%26.intl=us","Size":"1204421"}},{"Title":"Hepatitis B Virus: A Comprehensive Strategy for Eliminating Transmission in the United States Through Universal ... ","Summary":"Hepatitis B Virus: A Comprehensive Strategy for Eliminating Transmission in the United States Through Universal Childhood Vaccination: Recommendations of the Immunization Practices Advisory Committee (ACIP)","Url":"http:\\/\\/www.cdc.gov\\/mmwr\\/preview\\/mmwrhtml\\/00033405.htm","ClickUrl":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBPB7dmMwF;_ylu=X3oDMTEwb2NlbHRuBGNvbG8DdwRsA1dTMQRwb3MDNzYEc2VjA3NyBHZ0aWQD\\/SIG=129kdm2n4\\/EXP=1147592336\\/**http%3a\\/\\/www.cdc.gov\\/mmwr\\/preview\\/mmwrhtml\\/00033405.htm","ModificationDate":1139990400,"MimeType":"text\\/html","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBQR7dmMwF;_ylu=X3oDMTBxZm44bG9sBGNvbG8DdwRwb3MDNzYEc2VjA3NyBHZ0aWQD\\/SIG=16qv48dkp\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=www.cdc.gov\\/mmwr\\/preview\\/mmwrhtml\\/00033405.htm%26w=132%26d=b-Kz6UaqMwIM%26icp=1%26.intl=us","Size":"87232"}},{"Title":"Tour de France 2005","Summary":"... QUICK STEP - INNERGETIC. 132 - CRETSKENS Wilfried (BEL) Born in 10\\/07\\/1976 \\u00e0 Herk-de-Stad (BEL ...","Url":"http:\\/\\/www.letour.fr\\/2005\\/TDF\\/RIDERS\\/us\\/coureurs\\/132.html","ClickUrl":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBQx7dmMwF;_ylu=X3oDMTEwYjdwazg2BGNvbG8DdwRsA1dTMQRwb3MDNzcEc2VjA3NyBHZ0aWQD\\/SIG=12dpjmcf6\\/EXP=1147592336\\/**http%3a\\/\\/www.letour.fr\\/2005\\/TDF\\/RIDERS\\/us\\/coureurs\\/132.html","ModificationDate":1121583600,"MimeType":"text\\/html","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBSB7dmMwF;_ylu=X3oDMTBxa21laGFvBGNvbG8DdwRwb3MDNzcEc2VjA3NyBHZ0aWQD\\/SIG=16u0nn96f\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=www.letour.fr\\/2005\\/TDF\\/RIDERS\\/us\\/coureurs\\/132.html%26w=132%26d=BTTUC0aqMv4Z%26icp=1%26.intl=us","Size":"12171"}},{"Title":"This American Life | Father\'s Day \'99","Summary":"... 6\\/18\\/99. Episode 132. For Father\'s Day, stories about fathers going out of their way to protect their kids, and kids going ...","Url":"http:\\/\\/www.thisamericanlife.org\\/pages\\/descriptions\\/99\\/132.html","ClickUrl":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBSh7dmMwF;_ylu=X3oDMTEwNDFvam42BGNvbG8DdwRsA1dTMQRwb3MDNzgEc2VjA3NyBHZ0aWQD\\/SIG=12iobnkgv\\/EXP=1147592336\\/**http%3a\\/\\/www.thisamericanlife.org\\/pages\\/descriptions\\/99\\/132.html","ModificationDate":1146466800,"MimeType":"text\\/html","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBTx7dmMwF;_ylu=X3oDMTBxZzFuNDV2BGNvbG8DdwRwb3MDNzgEc2VjA3NyBHZ0aWQD\\/SIG=1738d5fam\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=www.thisamericanlife.org\\/pages\\/descriptions\\/99\\/132.html%26w=132%26d=Ss_yvkaqMvWK%26icp=1%26.intl=us","Size":"8411"}},{"Title":"Downloaded 21 Jan 2004 to 132.66.16.34. Redistribution subject to AIP license or copyright, see http:\\/\\/ojps.aip.org\\/... ","Summary":"Downloaded 21 Jan 2004 to 132.66.16.34. Redistribution subject to AIP license or copyright, see http:\\/\\/ojps.aip.org\\/jcpo\\/jcpcr.jsp. Downloaded 21 Jan 2004 to 132.66.16.34.","Url":"http:\\/\\/femto.tau.ac.il\\/~nitzan\\/3.pdf","ClickUrl":"http:\\/\\/femto.tau.ac.il\\/~nitzan\\/3.pdf#search=\'\'","ModificationDate":1088665200,"MimeType":"application\\/pdf","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBVB7dmMwF;_ylu=X3oDMTBxdXJmcnJsBGNvbG8DdwRwb3MDNzkEc2VjA3NyBHZ0aWQD\\/SIG=16da99c2u\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=femto.tau.ac.il\\/%257Enitzan\\/3.pdf%26w=132%26d=b5Br7UaqMjB1%26icp=1%26.intl=us","Size":"1071954"}},{"Title":"CHAPTER 12 ENVIRONMENTAL REVIEW \\u2013 EAST 132","Summary":"Solid Waste Management Plan. 12-1. October2004. DEIS. CHAPTER 12. ENVIRONMENTAL REVIEW \\u2013 EAST 132. ND. STREET SITE. 12.1 Introduction. The East 132. nd. Street Site is currently permitted to handle 2,999 tpd of putrescible waste, with a","Url":"http:\\/\\/www.nyc.gov\\/html\\/dsny\\/downloads\\/pdf\\/pubnrpts\\/swmp-4oct\\/deis\\/chapter12.pdf","ClickUrl":"http:\\/\\/www.nyc.gov\\/html\\/dsny\\/downloads\\/pdf\\/pubnrpts\\/swmp-4oct\\/deis\\/chapter12.pdf#search=\'\'","ModificationDate":1099555200,"MimeType":"application\\/pdf","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBWR7dmMwF;_ylu=X3oDMTBxaHNlODZrBGNvbG8DdwRwb3MDODAEc2VjA3NyBHZ0aWQD\\/SIG=17llu5bkp\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=www.nyc.gov\\/html\\/dsny\\/downloads\\/pdf\\/pubnrpts\\/swmp-4oct\\/deis\\/chapter12.pdf%26w=132%26d=RPmqz0aqMiKh%26icp=1%26.intl=us","Size":"1417879"}},{"Title":"Psalms 132 \\/ Hebrew - English Bible \\/ Mechon-Mamre","Summary":"... 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 ... Psalms Chapter 132. \\u00e0 \\u00f9\\u00d1\\u00c4\\u00e9\\u00f8, \\u00e4\\u00c7\\u00ee\\u00cc\\u00c7\\u00f2\\u00c2\\u00ec\\u00e5\\u00c9\\u00fa ...","Url":"http:\\/\\/www.mechon-mamre.org\\/p\\/pt\\/pt26d2.htm","ClickUrl":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBWx7dmMwF;_ylu=X3oDMTEwc3RoZXBrBGNvbG8DdwRsA1dTMQRwb3MDODEEc2VjA3NyBHZ0aWQD\\/SIG=11vhbotpk\\/EXP=1147592336\\/**http%3a\\/\\/www.mechon-mamre.org\\/p\\/pt\\/pt26d2.htm","ModificationDate":1138694400,"MimeType":"text\\/html","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBYB7dmMwF;_ylu=X3oDMTBxNjUwMGs2BGNvbG8DdwRwb3MDODEEc2VjA3NyBHZ0aWQD\\/SIG=16gg7tf89\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=www.mechon-mamre.org\\/p\\/pt\\/pt26d2.htm%26w=132%26d=WTHLVUaqMu6s%26icp=1%26.intl=us","Size":"13881"}},{"Title":"US CODE: Title 28,132. Creation and composition of district courts","Summary":"Creation and composition of district courts. Release date: 2005-09-29. (a) There shall be in each judicial district a district court which shall be a court of record known as the United States District Court for the district.","Url":"http:\\/\\/www4.law.cornell.edu\\/uscode\\/28\\/132.html","ClickUrl":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBYh7dmMwF;_ylu=X3oDMTEwcWlsMGMxBGNvbG8DdwRsA1dTMQRwb3MDODIEc2VjA3NyBHZ0aWQD\\/SIG=122ek55sr\\/EXP=1147592336\\/**http%3a\\/\\/www4.law.cornell.edu\\/uscode\\/28\\/132.html","ModificationDate":1143273600,"MimeType":"text\\/html","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBZx7dmMwF;_ylu=X3oDMTBxYWs1NmFvBGNvbG8DdwRwb3MDODIEc2VjA3NyBHZ0aWQD\\/SIG=16jb47dcg\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=www4.law.cornell.edu\\/uscode\\/28\\/132.html%26w=132%26d=QQ2S7EaqMjbv%26icp=1%26.intl=us","Size":"9107"}},{"Title":"Fiscal Note","Summary":"... Bill, Resolutions and Memorial Documents. SB05-132 ... Final Act\\/ Resolutions or Memorial: 132_enr.pdfn. 132.enrn. Preamended Documents ...","Url":"http:\\/\\/www.leg.state.co.us\\/Clics2005a\\/csl.nsf\\/fsbillcont3\\/A4058D1E27570DC987256F7E0059EAA8?Open&file=132_enr.pdf","ClickUrl":"http:\\/\\/www.leg.state.co.us\\/Clics2005a\\/csl.nsf\\/fsbillcont3\\/A4058D1E27570DC987256F7E0059EAA8?Open&file=132_enr.pdf#search=\'\'","ModificationDate":1124521200,"MimeType":"application\\/pdf","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBbB7dmMwF;_ylu=X3oDMTBxbGJmNjEwBGNvbG8DdwRwb3MDODMEc2VjA3NyBHZ0aWQD\\/SIG=191n41l4b\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=www.leg.state.co.us\\/Clics2005a\\/csl.nsf\\/fsbillcont3\\/A4058D1E27570DC987256F7E0059EAA8%253FOpen%2526file%253D132_enr.pdf%26w=132%26d=LViIXUaqMkKL%26icp=1%26.intl=us","Size":"87930"}},{"Title":"Development -- Table of Contents (January 1 2005, 132 [1])","Summary":"To see an article, click its [Full Text] link. To review many abstracts, check the boxes to the left of the titles you want, and click the \'Get All Checked Abstract(s)\' button. To see one abstract at a time, click its [Abstract] link.","Url":"http:\\/\\/dev.biologists.org\\/content\\/vol132\\/issue1","ClickUrl":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBbh7dmMwF;_ylu=X3oDMTEwdWdwcnIyBGNvbG8DdwRsA1dTMQRwb3MDODQEc2VjA3NyBHZ0aWQD\\/SIG=123019ojj\\/EXP=1147592336\\/**http%3a\\/\\/dev.biologists.org\\/content\\/vol132\\/issue1","ModificationDate":1147071600,"MimeType":"text\\/html","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBcx7dmMwF;_ylu=X3oDMTBxczM2ZHFvBGNvbG8DdwRwb3MDODQEc2VjA3NyBHZ0aWQD\\/SIG=16kng2m03\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=dev.biologists.org\\/content\\/vol132\\/issue1%26w=132%26d=LFOVEUaqMwR5%26icp=1%26.intl=us","Size":"25711"}},{"Title":"Winter Carnival (1939)","Summary":"Winter Carnival - Cast, Crew, Reviews, Plot Summary, Comments, Discussion, Taglines, Trailers, Posters, Photos, Showtimes, Link to Official Site, Fan Sites","Url":"http:\\/\\/www.imdb.com\\/title\\/tt0032132\\/","ClickUrl":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBdR7dmMwF;_ylu=X3oDMTEwb3IzajNvBGNvbG8DdwRsA1dTMQRwb3MDODUEc2VjA3NyBHZ0aWQD\\/SIG=11o6bhdhm\\/EXP=1147592336\\/**http%3a\\/\\/www.imdb.com\\/title\\/tt0032132\\/","ModificationDate":1147417200,"MimeType":"text\\/html","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBeh7dmMwF;_ylu=X3oDMTBxcG9jdDNjBGNvbG8DdwRwb3MDODUEc2VjA3NyBHZ0aWQD\\/SIG=1696d85k0\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=www.imdb.com\\/title\\/tt0032132\\/%26w=132%26d=OnC3HUaqMw5H%26icp=1%26.intl=us","Size":"44616"}},{"Title":"XM Radio - C-SPAN Radio","Summary":"... XM 132. <Previous. Next ...","Url":"http:\\/\\/www.xmradio.com\\/programming\\/channel_page.jsp?ch=132","ClickUrl":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBfB7dmMwF;_ylu=X3oDMTEwa3RyODBuBGNvbG8DdwRsA1dTMQRwb3MDODYEc2VjA3NyBHZ0aWQD\\/SIG=12gtfnvt7\\/EXP=1147592336\\/**http%3a\\/\\/www.xmradio.com\\/programming\\/channel_page.jsp%3fch=132","ModificationDate":1147158000,"MimeType":"text\\/html","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBgR7dmMwF;_ylu=X3oDMTBxN24xYzc0BGNvbG8DdwRwb3MDODYEc2VjA3NyBHZ0aWQD\\/SIG=1774en6i4\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=www.xmradio.com\\/programming\\/channel_page.jsp%253Fch%253D132%26w=132%26d=WS_5a0aqMwE5%26icp=1%26.intl=us","Size":"23601"}},{"Title":"Al-Qaeda tape says bin Laden alive, urges Iraqis to fight - theage.com.au","Summary":"Arabic television channel Al Arabiya has aired what it says is an audiotape from an al-Qaeda spokesman who says Osama bin Laden is alive and well. - The Age","Url":"http:\\/\\/www.theage.com.au\\/articles\\/2003\\/08\\/18\\/1061059775995.html","ClickUrl":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBgx7dmMwF;_ylu=X3oDMTEwNXU4aDFlBGNvbG8DdwRsA1dTMQRwb3MDODcEc2VjA3NyBHZ0aWQD\\/SIG=12jscc3ng\\/EXP=1147592336\\/**http%3a\\/\\/www.theage.com.au\\/articles\\/2003\\/08\\/18\\/1061059775995.html","ModificationDate":1147158000,"MimeType":"text\\/html","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBiB7dmMwF;_ylu=X3oDMTBxZjFrNnYwBGNvbG8DdwRwb3MDODcEc2VjA3NyBHZ0aWQD\\/SIG=174fs4fo6\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=www.theage.com.au\\/articles\\/2003\\/08\\/18\\/1061059775995.html%26w=132%26d=VUVD3UaqMwJD%26icp=1%26.intl=us","Size":"25163"}},{"Title":"Psalms 132","Summary":"Psalms 132. 132:1. Lord, remember David, and all his afflictions: 132:2. How he sware unto the LORD, and vowed unto the mighty God of Jacob; 132:3 ... Psalms 132. Chapters: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ... 132:3. Surely I will not come into the tabernacle of my ...","Url":"http:\\/\\/www.maitreg.com\\/bible\\/view.asp?book=38&chapter=132","ClickUrl":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBih7dmMwF;_ylu=X3oDMTEwZjVxcHI4BGNvbG8DdwRsA1dTMQRwb3MDODgEc2VjA3NyBHZ0aWQD\\/SIG=12hild8td\\/EXP=1147592336\\/**http%3a\\/\\/www.maitreg.com\\/bible\\/view.asp%3fbook=38%26chapter=132","ModificationDate":1117609200,"MimeType":"text\\/html","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBjx7dmMwF;_ylu=X3oDMTBxb2JpMW5pBGNvbG8DdwRwb3MDODgEc2VjA3NyBHZ0aWQD\\/SIG=17elhve1h\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=www.maitreg.com\\/bible\\/view.asp%253Fbook%253D38%2526chapter%253D132%26w=132%26d=TMHn-UaqMjbU%26icp=1%26.intl=us","Size":"27216"}},{"Title":"132","Summary":"35 U.S.C. 132 Notice of rejection; reexamination. - Patent Laws. 35 U.S.C. 132 Notice of rejection; reexamination.","Url":"http:\\/\\/www.uspto.gov\\/web\\/offices\\/pac\\/mpep\\/documents\\/appxl_35_U_S_C_132.htm","ClickUrl":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBkR7dmMwF;_ylu=X3oDMTEwNTA2aTh1BGNvbG8DdwRsA1dTMQRwb3MDODkEc2VjA3NyBHZ0aWQD\\/SIG=12ucmimjn\\/EXP=1147592336\\/**http%3a\\/\\/www.uspto.gov\\/web\\/offices\\/pac\\/mpep\\/documents\\/appxl_35_U_S_C_132.htm","ModificationDate":1133942400,"MimeType":"text\\/html","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBlh7dmMwF;_ylu=X3oDMTBxNmVndjYxBGNvbG8DdwRwb3MDODkEc2VjA3NyBHZ0aWQD\\/SIG=17f2jjpsh\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=www.uspto.gov\\/web\\/offices\\/pac\\/mpep\\/documents\\/appxl_35_U_S_C_132.htm%26w=132%26d=Nil-N0aqMjBx%26icp=1%26.intl=us","Size":"8182"}},{"Title":"A CONCISE SUMMARY OF THE PUBLIC HEARINGS","Summary":"... hearing on Bill 132. It shows you who was for, who was ... Opposes BSL, pointed out many anomalies in Bill 132, for example you can\'t teach a pit bull to ...","Url":"http:\\/\\/www.dogwatch.net\\/bill132.pdf","ClickUrl":"http:\\/\\/www.dogwatch.net\\/bill132.pdf#search=\'\'","ModificationDate":1109232000,"MimeType":"application\\/pdf","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBmx7dmMwF;_ylu=X3oDMTBxZ2gwNnM2BGNvbG8DdwRwb3MDOTAEc2VjA3NyBHZ0aWQD\\/SIG=168j23ta7\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=www.dogwatch.net\\/bill132.pdf%26w=132%26d=PkjRQEaqMuwO%26icp=1%26.intl=us","Size":"1982792"}},{"Title":"JPL News -- A Galaxy Far, Far Away Eyed by Linked Hawaiian Telescopes","Summary":"... Keck Observatory, Kamuela, Hawaii. 2003-132. Site Manager: Webmasters ...","Url":"http:\\/\\/www.jpl.nasa.gov\\/releases\\/2003\\/132.cfm","ClickUrl":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBnR7dmMwF;_ylu=X3oDMTEwaTAxcXV0BGNvbG8DdwRsA1dTMQRwb3MDOTEEc2VjA3NyBHZ0aWQD\\/SIG=12170u1vu\\/EXP=1147592336\\/**http%3a\\/\\/www.jpl.nasa.gov\\/releases\\/2003\\/132.cfm","ModificationDate":1136016000,"MimeType":"text\\/html","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBoh7dmMwF;_ylu=X3oDMTBxanNkbHBvBGNvbG8DdwRwb3MDOTEEc2VjA3NyBHZ0aWQD\\/SIG=16i2p31tn\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=www.jpl.nasa.gov\\/releases\\/2003\\/132.cfm%26w=132%26d=VNPrSUaqMkiG%26icp=1%26.intl=us","Size":"22198"}},{"Title":"(132) Justinian I","Summary":"(132) Justinian I - AV solidus, A.D. 527-545, 4.45 g. ( inv. 91.270). Obverse: Facing helmeted and cuirassed bust of Justinian, holding globus cruciger in r.; at l.","Url":"http:\\/\\/www.lawrence.edu\\/dept\\/art\\/buerger\\/catalogue\\/132.html","ClickUrl":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBpB7dmMwF;_ylu=X3oDMTEwamM1Y3A2BGNvbG8DdwRsA1dTMQRwb3MDOTIEc2VjA3NyBHZ0aWQD\\/SIG=12f6r1r1h\\/EXP=1147592336\\/**http%3a\\/\\/www.lawrence.edu\\/dept\\/art\\/buerger\\/catalogue\\/132.html","ModificationDate":1006848000,"MimeType":"text\\/html","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBqR7dmMwF;_ylu=X3oDMTBxZWNpdmpnBGNvbG8DdwRwb3MDOTIEc2VjA3NyBHZ0aWQD\\/SIG=1709bh559\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=www.lawrence.edu\\/dept\\/art\\/buerger\\/catalogue\\/132.html%26w=132%26d=BJJDnkaqMjfk%26icp=1%26.intl=us","Size":"3186"}},{"Title":"131","Summary":"35 U.S.C. 131 Examination of application. - Patent Laws. 35 U.S.C. 131 Examination of application.","Url":"http:\\/\\/www.uspto.gov\\/web\\/offices\\/pac\\/mpep\\/documents\\/appxl_35_U_S_C_131.htm","ClickUrl":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBqx7dmMwF;_ylu=X3oDMTEwdDUzZHBhBGNvbG8DdwRsA1dTMQRwb3MDOTMEc2VjA3NyBHZ0aWQD\\/SIG=12u6cdfcn\\/EXP=1147592336\\/**http%3a\\/\\/www.uspto.gov\\/web\\/offices\\/pac\\/mpep\\/documents\\/appxl_35_U_S_C_131.htm","ModificationDate":1133942400,"MimeType":"text\\/html","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBsB7dmMwF;_ylu=X3oDMTBxdXZhZWxkBGNvbG8DdwRwb3MDOTMEc2VjA3NyBHZ0aWQD\\/SIG=17f8j8d98\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=www.uspto.gov\\/web\\/offices\\/pac\\/mpep\\/documents\\/appxl_35_U_S_C_131.htm%26w=132%26d=R2aGhUaqMj30%26icp=1%26.intl=us","Size":"7341"}},{"Title":"132 on Flickr - Photo Sharing!","Summary":"... 132. To take full advantage of Flickr, you should use a JavaScript-enabled browser and ...","Url":"http:\\/\\/www.flickr.com\\/photos\\/brettsky\\/53839790\\/","ClickUrl":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBsh7dmMwF;_ylu=X3oDMTEwZ2lxZDhhBGNvbG8DdwRsA1dTMQRwb3MDOTQEc2VjA3NyBHZ0aWQD\\/SIG=123ojcbf0\\/EXP=1147592336\\/**http%3a\\/\\/www.flickr.com\\/photos\\/brettsky\\/53839790\\/","ModificationDate":1145862000,"MimeType":"text\\/html","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBtx7dmMwF;_ylu=X3oDMTBxYTJvNGFhBGNvbG8DdwRwb3MDOTQEc2VjA3NyBHZ0aWQD\\/SIG=16ks6e563\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=www.flickr.com\\/photos\\/brettsky\\/53839790\\/%26w=132%26d=GA_4oEaqMq4P%26icp=1%26.intl=us","Size":"74392"}},{"Title":"Ag GPS 124 \\/ 132","Summary":"AgGPS 124 \\/ 132. Operation Manual. AgGPS Receiver Firmware Version 1.40, 1.41 and 1.42. Part Number 38747-00-ENG. Revision C. September 2000. T. Support Offices. Trimble Precision Agricultural Systems. 9290 Bond Street, Suite 102. Overland Park, KS 66214 U.S.A. ... describes how to install and configure the AgGPS_ 124, 132, and 132. Air receivers ...","Url":"http:\\/\\/www.linco.com\\/AG124132REVB.PDF","ClickUrl":"http:\\/\\/www.linco.com\\/AG124132REVB.PDF#search=\'\'","ModificationDate":986281200,"MimeType":"application\\/pdf","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBvB7dmMwF;_ylu=X3oDMTBxbDgxOWxkBGNvbG8DdwRwb3MDOTUEc2VjA3NyBHZ0aWQD\\/SIG=16ajtq3hk\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=www.linco.com\\/AG124132REVB.PDF%26w=132%26d=FCohUkaqMjOV%26icp=1%26.intl=us","Size":"3610097"}},{"Title":"Tehillim - Chapter 132 | Chabad.org","Summary":"Please login for more site features. Tehillim - Chapter 132. 1. A song of ascents. Remember, O Lord, onto David all his affliction. 2. That he swore to the Lord, he vowed to the Mighty One of Jacob; ... Chabad.org \\" Library \\" Classic Texts \\" The Bible (with Rashi) \\" K\'tuvim \\" Tehillim \\" Chapter 132 ...","Url":"http:\\/\\/www.chabad.org\\/library\\/article.asp?AID=16353","ClickUrl":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBvh7dmMwF;_ylu=X3oDMTEwam44NW9vBGNvbG8DdwRsA1dTMQRwb3MDOTYEc2VjA3NyBHZ0aWQD\\/SIG=129b821nj\\/EXP=1147592336\\/**http%3a\\/\\/www.chabad.org\\/library\\/article.asp%3fAID=16353","ModificationDate":1146898800,"MimeType":"text\\/html","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBwx7dmMwF;_ylu=X3oDMTBxczRxYWlqBGNvbG8DdwRwb3MDOTYEc2VjA3NyBHZ0aWQD\\/SIG=170gmib5a\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=www.chabad.org\\/library\\/article.asp%253FAID%253D16353%26w=132%26d=I-adaEaqMvld%26icp=1%26.intl=us","Size":"41051"}},{"Title":"Downloaded 19 Jan 2003 to 132.77.4.43. Redistribution subject to AIP license or copyright, see http:\\/\\/ojps.aip.org\\/... ","Summary":"Downloaded 19 Jan 2003 to 132.77.4.43. Redistribution subject to AIP license or copyright, see http:\\/\\/ojps.aip.org\\/jcpo\\/jcpcr.jsp. Downloaded 19 Jan 2003 to 132.77.4.43.","Url":"http:\\/\\/www.weizmann.ac.il\\/chemphys\\/Frydman_group\\/Publications\\/ExchDynamics-JCP90.pdf","ClickUrl":"http:\\/\\/www.weizmann.ac.il\\/chemphys\\/Frydman_group\\/Publications\\/ExchDynamics-JCP90.pdf#search=\'\'","ModificationDate":1061622000,"MimeType":"application\\/pdf","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcByB7dmMwF;_ylu=X3oDMTBxZGVwcTFiBGNvbG8DdwRwb3MDOTcEc2VjA3NyBHZ0aWQD\\/SIG=17p1893is\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=www.weizmann.ac.il\\/chemphys\\/Frydman_group\\/Publications\\/ExchDynamics-JCP90.pdf%26w=132%26d=KPVdS0aqMkW1%26icp=1%26.intl=us","Size":"816603"}},{"Title":"Downloaded 19 May 2003 to 132.77.4.43. Redistribution subject to AIP license or copyright, see http:\\/\\/ojps.aip.org\\/... ","Summary":"Downloaded 19 May 2003 to 132.77.4.43. Redistribution subject to AIP license or copyright, see http:\\/\\/ojps.aip.org\\/japo\\/japcr.jsp. Downloaded 19 May 2003 to 132.77.4.43.","Url":"http:\\/\\/www.weizmann.ac.il\\/wagner\\/COURSES\\/Reading%20material%20(papers)\\/030_JAP_1990_ContactAngle.pdf","ClickUrl":"http:\\/\\/www.weizmann.ac.il\\/wagner\\/COURSES\\/Reading%20material%20(papers)\\/030_JAP_1990_ContactAngle.pdf#search=\'\'","ModificationDate":1136880000,"MimeType":"application\\/pdf","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcBzR7dmMwF;_ylu=X3oDMTBxMjBxZ2VoBGNvbG8DdwRwb3MDOTgEc2VjA3NyBHZ0aWQD\\/SIG=18pfdig62\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=www.weizmann.ac.il\\/wagner\\/COURSES\\/Reading%252520material%252520%2528papers%2529\\/030_JAP_1990_ContactAngle.pdf%26w=132%26d=Nf5MWEaqMkV0%26icp=1%26.intl=us","Size":"784314"}},{"Title":"Downloaded 24 Jul 2002 to 132.163.135.12. Redistribution subject to AIP license or copyright, see http:\\/\\/ojps.aip... ","Summary":"Downloaded 24 Jul 2002 to 132.163.135.12. Redistribution subject to AIP license or copyright, see http:\\/\\/ojps.aip.org\\/japo\\/japcr.jsp. Downloaded 24 Jul 2002 to 132.163.135.12.","Url":"http:\\/\\/tf.nist.gov\\/general\\/pdf\\/569.pdf","ClickUrl":"http:\\/\\/tf.nist.gov\\/general\\/pdf\\/569.pdf#search=\'\'","ModificationDate":1027494000,"MimeType":"application\\/pdf","Cache":{"Url":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcB0h7dmMwF;_ylu=X3oDMTBxNmJhcjNhBGNvbG8DdwRwb3MDOTkEc2VjA3NyBHZ0aWQD\\/SIG=16b31en6n\\/EXP=1147592336\\/**http%3a\\/\\/66.218.69.11\\/search\\/cache%3fei=UTF-8%26query=132%26output=json%26results=100%26appid=jennyhan_ac%26u=tf.nist.gov\\/general\\/pdf\\/569.pdf%26w=132%26d=IpdTwEaqMirR%26icp=1%26.intl=us","Size":"1002734"}},{"Title":"[DB] naruto 132","Summary":"","Url":"http:\\/\\/yhbt.mine.nu\\/t\\/n132.torrent","ClickUrl":"http:\\/\\/uk.wrs.yahoo.com\\/_ylt=A0Je5VwQjWVEsGcB1B7dmMwF;_ylu=X3oDMTExaW11dG45BGNvbG8DdwRsA1dTMQRwb3MDMTAwBHNlYwNzcgR2dGlkAw--\\/SIG=11m58k4sj\\/EXP=1147592336\\/**http%3a\\/\\/yhbt.mine.nu\\/t\\/n132.torrent","ModificationDate":1114671600,"MimeType":"unknown"}]}}');
+
+shouldBe("result.length", "5");
--- /dev/null
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test for proper handling of Unicode RegExps and bug 7445: Gmail puts wrong subject in replies.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS cy('Re: Moose') is 'Moose'
+PASS cy('\u8f6c\u53d1: Moose') is 'Moose'
+PASS inlineRe.source is newFromInlineRe.source
+PASS inlineRe.source is evalFromInlineRe.source
+PASS inlineRe.source is evalInlineRe.source
+PASS inlineRe.source is newFromEvalInlineRe.source
+PASS inlineRe.source is evalFromEvalInlineRe.source
+PASS inlineRe.source is explicitRe.source
+PASS inlineRe.source is newFromExplicitRe.source
+PASS inlineRe.source is evalFromExplicitRe.source
+PASS inlineRe.toString() is newFromInlineRe.toString()
+PASS inlineRe.toString() is evalFromInlineRe.toString()
+PASS inlineRe.toString() is evalInlineRe.toString()
+PASS inlineRe.toString() is newFromEvalInlineRe.toString()
+PASS inlineRe.toString() is evalFromEvalInlineRe.toString()
+PASS inlineRe.toString() is explicitRe.toString()
+PASS inlineRe.toString() is newFromExplicitRe.toString()
+PASS inlineRe.toString() is evalFromExplicitRe.toString()
+PASS inlineRe.exec(sample)[0] is 'bm⠠p'
+PASS evalInlineRe.exec(sample)[0] is 'bm⠠p'
+PASS explicitRe.exec(sample)[0] is 'bm⠠p'
+PASS binlineRe.source is bnewFromInlineRe.source
+PASS binlineRe.source is bevalFromInlineRe.source
+PASS binlineRe.source is bevalInlineRe.source
+PASS binlineRe.source is bnewFromEvalInlineRe.source
+PASS binlineRe.source is bevalFromEvalInlineRe.source
+PASS binlineRe.source is bexplicitRe.source
+PASS binlineRe.source is bnewFromExplicitRe.source
+PASS binlineRe.source is bevalFromExplicitRe.source
+PASS binlineRe.toString() is bnewFromInlineRe.toString()
+PASS binlineRe.toString() is bevalFromInlineRe.toString()
+PASS binlineRe.toString() is bevalInlineRe.toString()
+PASS binlineRe.toString() is bnewFromEvalInlineRe.toString()
+PASS binlineRe.toString() is bevalFromEvalInlineRe.toString()
+PASS binlineRe.toString() is bexplicitRe.toString()
+PASS binlineRe.toString() is bnewFromExplicitRe.toString()
+PASS binlineRe.toString() is bevalFromExplicitRe.toString()
+PASS binlineRe.exec(bsample)[0] is 'bm|p'
+PASS bevalInlineRe.exec(bsample)[0] is 'bm|p'
+PASS bexplicitRe.exec(bsample)[0] is 'bm|p'
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+
+'Test for proper handling of Unicode RegExps and <a href="http://bugzilla.webkit.org/show_bug.cgi?id=7445">bug 7445</a>: Gmail puts wrong subject in replies.'
+
+);
+
+// Regex to match Re in various languanges straight from Gmail source
+var I3=/^\s*(fwd|re|aw|antw|antwort|wg|sv|ang|odp|betreff|betr|transf|reenv\.|reenv|in|res|resp|resp\.|enc|\u8f6c\u53d1|\u56DE\u590D|\u041F\u0435\u0440\u0435\u0441\u043B|\u041E\u0442\u0432\u0435\u0442):\s*(.*)$/i;
+
+// Other RegExs from Gmail source
+var Ci=/\s+/g;
+var BC=/^ /;
+var BG=/ $/;
+
+// Strips leading Re or similar (from Gmail source)
+function cy(a) {
+ //var b = I3.exec(a);
+ var b = I3.exec(a);
+
+ if (b) {
+ a = b[2];
+ }
+
+ return Gn(a);
+}
+
+// This function replaces consecutive whitespace with a single space
+// then removes a leading and trailing space if they exist. (From Gmail)
+function Gn(a) {
+ return a.replace(Ci, " ").replace(BC, "").replace(BG, "");
+}
+
+shouldBe("cy('Re: Moose')", "'Moose'")
+shouldBe("cy('\\u8f6c\\u53d1: Moose')", "'Moose'")
+
+// Test handling of \u2820 (skull and crossbones)
+var sample="sample bm\u2820p cm\\u2820p";
+
+var inlineRe=/.m\u2820p/
+var evalInlineRe=eval("/.m\\u2820p/")
+var explicitRe=new RegExp(".m\\u2820p")
+var newFromInlineRe=new RegExp(inlineRe.source)
+var evalFromInlineRe=eval(inlineRe.toString())
+var newFromEvalInlineRe=new RegExp(evalInlineRe.source)
+var evalFromEvalInlineRe=eval(evalInlineRe.toString())
+var newFromExplicitRe=new RegExp(explicitRe.source)
+var evalFromExplicitRe=eval(explicitRe.toString())
+
+shouldBe("inlineRe.source", "newFromInlineRe.source")
+shouldBe("inlineRe.source", "evalFromInlineRe.source")
+shouldBe("inlineRe.source", "evalInlineRe.source")
+shouldBe("inlineRe.source", "newFromEvalInlineRe.source")
+shouldBe("inlineRe.source", "evalFromEvalInlineRe.source")
+shouldBe("inlineRe.source", "explicitRe.source")
+shouldBe("inlineRe.source", "newFromExplicitRe.source")
+shouldBe("inlineRe.source", "evalFromExplicitRe.source")
+
+shouldBe("inlineRe.toString()", "newFromInlineRe.toString()")
+shouldBe("inlineRe.toString()", "evalFromInlineRe.toString()")
+shouldBe("inlineRe.toString()", "evalInlineRe.toString()")
+shouldBe("inlineRe.toString()", "newFromEvalInlineRe.toString()")
+shouldBe("inlineRe.toString()", "evalFromEvalInlineRe.toString()")
+shouldBe("inlineRe.toString()", "explicitRe.toString()")
+shouldBe("inlineRe.toString()", "newFromExplicitRe.toString()")
+shouldBe("inlineRe.toString()", "evalFromExplicitRe.toString()")
+
+shouldBe("inlineRe.exec(sample)[0]", "'bm\u2820p'")
+shouldBe("evalInlineRe.exec(sample)[0]", "'bm\u2820p'")
+shouldBe("explicitRe.exec(sample)[0]", "'bm\u2820p'")
+
+
+// Test handling of \u007c "|"
+var bsample="sample bm\u007cp cm\\u007cp";
+
+var binlineRe=/.m\u007cp/
+var bevalInlineRe=eval("/.m\\u007cp/")
+var bexplicitRe=new RegExp(".m\\u007cp")
+var bnewFromInlineRe=new RegExp(binlineRe.source)
+var bevalFromInlineRe=eval(binlineRe.toString())
+var bnewFromEvalInlineRe=new RegExp(bevalInlineRe.source)
+var bevalFromEvalInlineRe=eval(bevalInlineRe.toString())
+var bnewFromExplicitRe=new RegExp(bexplicitRe.source)
+var bevalFromExplicitRe=eval(bexplicitRe.toString())
+
+shouldBe("binlineRe.source", "bnewFromInlineRe.source")
+shouldBe("binlineRe.source", "bevalFromInlineRe.source")
+shouldBe("binlineRe.source", "bevalInlineRe.source")
+shouldBe("binlineRe.source", "bnewFromEvalInlineRe.source")
+shouldBe("binlineRe.source", "bevalFromEvalInlineRe.source")
+shouldBe("binlineRe.source", "bexplicitRe.source")
+shouldBe("binlineRe.source", "bnewFromExplicitRe.source")
+shouldBe("binlineRe.source", "bevalFromExplicitRe.source")
+
+shouldBe("binlineRe.toString()", "bnewFromInlineRe.toString()")
+shouldBe("binlineRe.toString()", "bevalFromInlineRe.toString()")
+shouldBe("binlineRe.toString()", "bevalInlineRe.toString()")
+shouldBe("binlineRe.toString()", "bnewFromEvalInlineRe.toString()")
+shouldBe("binlineRe.toString()", "bevalFromEvalInlineRe.toString()")
+shouldBe("binlineRe.toString()", "bexplicitRe.toString()")
+shouldBe("binlineRe.toString()", "bnewFromExplicitRe.toString()")
+shouldBe("binlineRe.toString()", "bevalFromExplicitRe.toString()")
+
+shouldBe("binlineRe.exec(bsample)[0]", "'bm|p'")
+shouldBe("bevalInlineRe.exec(bsample)[0]", "'bm|p'")
+shouldBe("bexplicitRe.exec(bsample)[0]", "'bm|p'")
--- /dev/null
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This file checks which ECMAScript 3 keywords are treated as reserved words in strict mode.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+SHOULD BE RESERVED:
+FAIL isReserved('implements') should be true. Was false.
+FAIL isReserved('interface') should be true. Was false.
+FAIL isReserved('let') should be true. Was false.
+FAIL isReserved('package') should be true. Was false.
+FAIL isReserved('private') should be true. Was false.
+FAIL isReserved('protected') should be true. Was false.
+FAIL isReserved('public') should be true. Was false.
+FAIL isReserved('static') should be true. Was false.
+FAIL isReserved('yield') should be true. Was false.
+
+SHOULD NOT BE RESERVED:
+PASS isReserved('abstract') is false
+PASS isReserved('boolean') is false
+PASS isReserved('byte') is false
+PASS isReserved('char') is false
+PASS isReserved('double') is false
+PASS isReserved('final') is false
+PASS isReserved('float') is false
+PASS isReserved('goto') is false
+PASS isReserved('int') is false
+PASS isReserved('long') is false
+PASS isReserved('native') is false
+PASS isReserved('short') is false
+PASS isReserved('synchronized') is false
+PASS isReserved('throws') is false
+PASS isReserved('transient') is false
+PASS isReserved('volatile') is false
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+function isReserved(word)
+{
+ try {
+ eval("\"use strict\";var " + word + ";");
+ return false;
+ } catch (e) {
+ var expectedError = "Use of reserved word '" + word + "' in strict mode";
+ if (expectedError == e.message)
+ return true;
+ else
+ return false;
+ }
+}
+
+var reservedWords = [
+ "implements",
+ "let",
+ "private",
+ "public",
+ "yield",
+ "interface",
+ "package",
+ "protected",
+ "static"
+];
+
+var unreservedWords = [
+ "abstract",
+ "boolean",
+ "byte",
+ "char",
+ "double",
+ "final",
+ "float",
+ "goto",
+ "int",
+ "long",
+ "native",
+ "short",
+ "synchronized",
+ "throws",
+ "transient",
+ "volatile"
+];
+
+description(
+"This file checks which ECMAScript 3 keywords are treated as reserved words in strict mode."
+);
+
+reservedWords.sort();
+unreservedWords.sort();
+
+debug("SHOULD BE RESERVED:");
+for (var p in reservedWords) {
+ shouldBeTrue("isReserved('" + reservedWords[p] + "')");
+}
+
+debug("");
+
+debug("SHOULD NOT BE RESERVED:");
+for (var p in unreservedWords) {
+ shouldBeFalse("isReserved('" + unreservedWords[p] + "')");
+}
+
+debug("");
--- /dev/null
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test that if an arrity check causes a stack overflow, the exception goes to the right catch
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS gotRightCatch is true
+PASS gotWrongCatch1 is false
+FAIL gotWrongCatch2 should be false. Was true.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description('Test that if an arrity check causes a stack overflow, the exception goes to the right catch');
+
+function funcWith20Args(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8,
+ arg9, arg10, arg11, arg12, arg13, arg14, arg15,
+ arg16, arg17, arg18, arg19, arg20)
+{
+ debug("ERROR: Shouldn't arrive in 20 arg function!");
+}
+
+var gotRightCatch = false, gotWrongCatch1 = false, gotWrongCatch2 = false;
+
+function test1()
+{
+ try {
+ test2();
+ } catch (err) {
+ // Should get here because of stack overflow,
+ // now cause a stack overflow exception due to arrity processing
+ try {
+ var dummy = new RegExp('a|b|c');
+ } catch(err) {
+ gotWrongCatch1 = true;
+ }
+
+ try {
+ funcWith20Args(1, 2, 3);
+ } catch (err2) {
+ gotRightCatch = true;
+ }
+ }
+}
+
+function test2()
+{
+ try {
+ var dummy = new Date();
+ } catch(err) {
+ gotWrongCatch2 = true;
+ }
+
+ try {
+ test1();
+ } catch (err) {
+ // Should get here because of stack overflow,
+ // now cause a stack overflow exception due to arrity processing
+ try {
+ funcWith20Args(1, 2, 3, 4, 5, 6);
+ } catch (err2) {
+ gotRightCatch = true;
+ }
+ }
+}
+
+test1();
+
+shouldBeTrue("gotRightCatch");
+shouldBeFalse("gotWrongCatch1");
+shouldBeFalse("gotWrongCatch2");
--- /dev/null
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks that toLowerCase and toUpperCase handle certain non-trivial cases correctly.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+FAIL String("A𐐀").toLowerCase() should be a𐐨. Was a𐐀.
+FAIL String("a𐐨").toUpperCase() should be A𐐀. Was A𐐨.
+PASS String("ΚΟΣΜΟΣ ΚΟΣΜΟΣ").toLowerCase() is "κοσμος κοσμος"
+PASS String("ß").toUpperCase() is "SS"
+PASS String("ʼn").toUpperCase() is "ʼN"
+PASS String("ǰ").toUpperCase() is "J̌"
+PASS String("ffi").toUpperCase() is "FFI"
+PASS String("FFI").toLowerCase() is "ffi"
+PASS String("IJ").toLowerCase() is "ij"
+PASS expected[String.fromCharCode(0xA78D).toLowerCase()] is true
+PASS expected[String.fromCharCode(0x0265).toUpperCase()] is true
+PASS expected[String.fromCharCode(0x10C7).toLowerCase()] is true
+PASS expected[String.fromCharCode(0x2D27).toUpperCase()] is true
+PASS expected[String.fromCharCode(0x2D2D).toLowerCase()] is true
+PASS expected[String.fromCharCode(0x10CD).toUpperCase()] is true
+PASS expected[String.fromCharCode(0x2CF2).toLowerCase()] is true
+PASS expected[String.fromCharCode(0x2CF3).toUpperCase()] is true
+PASS expected[String.fromCharCode(0xA792).toLowerCase()] is true
+PASS expected[String.fromCharCode(0xA793).toUpperCase()] is true
+PASS expected[String.fromCharCode(0xA7AA).toLowerCase()] is true
+PASS expected[String.fromCharCode(0x0266).toUpperCase()] is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+
+"This test checks that toLowerCase and toUpperCase handle certain non-trivial cases correctly."
+
+);
+
+shouldBe('String("A𐐀").toLowerCase()', '"a𐐨"');
+shouldBe('String("a𐐨").toUpperCase()', '"A𐐀"');
+shouldBe('String("ΚΟΣΜΟΣ ΚΟΣΜΟΣ").toLowerCase()', '"κοσμος κοσμος"');
+shouldBe('String("ß").toUpperCase()', '"SS"');
+shouldBe('String("ʼn").toUpperCase()', '"ʼN"');
+shouldBe('String("ǰ").toUpperCase()', '"J̌"');
+shouldBe('String("ffi").toUpperCase()', '"FFI"');
+shouldBe('String("FFI").toLowerCase()', '"ffi"');
+shouldBe('String("IJ").toLowerCase()', '"ij"');
+
+// Test the toUpper and toLower changes made in Unicode versions 5.2 and 6.1
+// Construct the tests so that it passes if the toLowerCase()/toUpperCase()
+// either return the updated results for compliant platforms or the
+// passed in arguments if not. This should be changed when all platforms
+// support Unicode 5.2 and Unicode 6.1.
+function createExpected(/* ... */)
+{
+ expected = {};
+
+ for (var i = 0; i < arguments.length; i++) {
+ var s = String.fromCharCode(arguments[i]);
+ expected[s] = true;
+ }
+
+ return expected;
+}
+
+// Check Unicode additions in version 5.2. From UnicodeData.txt:
+// 0265;LATIN SMALL LETTER TURNED H;Ll;0;L;;;;;N;;;A78D;;A78D
+// A78D;LATIN CAPITAL LETTER TURNED H;Lu;0;L;;;;;N;;;;0265;
+
+var expected = createExpected(0xA78D, 0x0265);
+shouldBeTrue('expected[String.fromCharCode(0xA78D).toLowerCase()]');
+shouldBeTrue('expected[String.fromCharCode(0x0265).toUpperCase()]');
+
+// Check Unicode additions in version 6.1 From UnicodeData.txt:
+// 0266;LATIN SMALL LETTER H WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER H HOOK;;A7AA;;A7AA
+// 10C7;GEORGIAN CAPITAL LETTER YN;Lu;0;L;;;;;N;;;;2D27;
+// 10CD;GEORGIAN CAPITAL LETTER AEN;Lu;0;L;;;;;N;;;;2D2D;
+// 2CF2;COPTIC CAPITAL LETTER BOHAIRIC KHEI;Lu;0;L;;;;;N;;;;2CF3;
+// 2CF3;COPTIC SMALL LETTER BOHAIRIC KHEI;Ll;0;L;;;;;N;;;2CF2;;2CF2
+// 2D27;GEORGIAN SMALL LETTER YN;Ll;0;L;;;;;N;;;10C7;;10C7
+// 2D2D;GEORGIAN SMALL LETTER AEN;Ll;0;L;;;;;N;;;10CD;;10CD
+// A792;LATIN CAPITAL LETTER C WITH BAR;Lu;0;L;;;;;N;;;;A793;
+// A793;LATIN SMALL LETTER C WITH BAR;Ll;0;L;;;;;N;;;A792;;A792
+// A7AA;LATIN CAPITAL LETTER H WITH HOOK;Lu;0;L;;;;;N;;;;0266;
+
+var expected = createExpected(0x10C7, 0x2D27);
+shouldBeTrue('expected[String.fromCharCode(0x10C7).toLowerCase()]');
+shouldBeTrue('expected[String.fromCharCode(0x2D27).toUpperCase()]');
+
+var expected = createExpected(0x10CD, 0x2D2D);
+shouldBeTrue('expected[String.fromCharCode(0x2D2D).toLowerCase()]');
+shouldBeTrue('expected[String.fromCharCode(0x10CD).toUpperCase()]');
+
+var expected = createExpected(0x2CF2, 0x2CF3);
+shouldBeTrue('expected[String.fromCharCode(0x2CF2).toLowerCase()]');
+shouldBeTrue('expected[String.fromCharCode(0x2CF3).toUpperCase()]');
+
+var expected = createExpected(0xA792, 0xA793);
+shouldBeTrue('expected[String.fromCharCode(0xA792).toLowerCase()]');
+shouldBeTrue('expected[String.fromCharCode(0xA793).toUpperCase()]');
+
+var expected = createExpected(0xA7AA, 0x0266);
+shouldBeTrue('expected[String.fromCharCode(0xA7AA).toLowerCase()]');
+shouldBeTrue('expected[String.fromCharCode(0x0266).toUpperCase()]');
--- /dev/null
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks for a regression against String#split is buggy.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS ''.split() is testCode[i][1]
+PASS ''.split(/./) is testCode[i][1]
+PASS ''.split(/.?/) is testCode[i][1]
+PASS ''.split(/.??/) is testCode[i][1]
+PASS 'ab'.split(/a*/) is testCode[i][1]
+PASS 'ab'.split(/a*?/) is testCode[i][1]
+PASS 'ab'.split(/(?:ab)/) is testCode[i][1]
+PASS 'ab'.split(/(?:ab)*/) is testCode[i][1]
+PASS 'ab'.split(/(?:ab)*?/) is testCode[i][1]
+PASS 'test'.split('') is testCode[i][1]
+PASS 'test'.split() is testCode[i][1]
+PASS '111'.split(1) is testCode[i][1]
+PASS 'test'.split(/(?:)/, 2) is testCode[i][1]
+PASS 'test'.split(/(?:)/, -1) is testCode[i][1]
+PASS 'test'.split(/(?:)/, undefined) is testCode[i][1]
+PASS 'test'.split(/(?:)/, null) is testCode[i][1]
+PASS 'test'.split(/(?:)/, NaN) is testCode[i][1]
+PASS 'test'.split(/(?:)/, true) is testCode[i][1]
+PASS 'test'.split(/(?:)/, '2') is testCode[i][1]
+PASS 'test'.split(/(?:)/, 'two') is testCode[i][1]
+PASS 'a'.split(/-/) is testCode[i][1]
+PASS 'a'.split(/-?/) is testCode[i][1]
+PASS 'a'.split(/-??/) is testCode[i][1]
+PASS 'a'.split(/a/) is testCode[i][1]
+PASS 'a'.split(/a?/) is testCode[i][1]
+PASS 'a'.split(/a??/) is testCode[i][1]
+PASS 'ab'.split(/-/) is testCode[i][1]
+PASS 'ab'.split(/-?/) is testCode[i][1]
+PASS 'ab'.split(/-??/) is testCode[i][1]
+PASS 'a-b'.split(/-/) is testCode[i][1]
+PASS 'a-b'.split(/-?/) is testCode[i][1]
+PASS 'a-b'.split(/-??/) is testCode[i][1]
+PASS 'a--b'.split(/-/) is testCode[i][1]
+PASS 'a--b'.split(/-?/) is testCode[i][1]
+PASS 'a--b'.split(/-??/) is testCode[i][1]
+PASS ''.split(/()()/) is testCode[i][1]
+PASS '.'.split(/()()/) is testCode[i][1]
+PASS '.'.split(/(.?)(.?)/) is testCode[i][1]
+PASS '.'.split(/(.??)(.??)/) is testCode[i][1]
+PASS '.'.split(/(.)?(.)?/) is testCode[i][1]
+PASS 'A<B>bold</B>and<CODE>coded</CODE>'.split(ecmaSampleRe) is testCode[i][1]
+PASS 'tesst'.split(/(s)*/) is testCode[i][1]
+PASS 'tesst'.split(/(s)*?/) is testCode[i][1]
+PASS 'tesst'.split(/(s*)/) is testCode[i][1]
+PASS 'tesst'.split(/(s*?)/) is testCode[i][1]
+PASS 'tesst'.split(/(?:s)*/) is testCode[i][1]
+PASS 'tesst'.split(/(?=s+)/) is testCode[i][1]
+PASS 'test'.split('t') is testCode[i][1]
+PASS 'test'.split('es') is testCode[i][1]
+PASS 'test'.split(/t/) is testCode[i][1]
+PASS 'test'.split(/es/) is testCode[i][1]
+PASS 'test'.split(/(t)/) is testCode[i][1]
+PASS 'test'.split(/(es)/) is testCode[i][1]
+PASS 'test'.split(/(t)(e)(s)(t)/) is testCode[i][1]
+PASS '.'.split(/(((.((.??)))))/) is testCode[i][1]
+PASS '.'.split(/(((((.??)))))/) is testCode[i][1]
+PASS 'hello'.split({toString:function(){return 'e';}}) is ["h", "llo"]
+PASS var a = 'hello'.split({toString:function(){separatorToStringCalled='OKAY';return 'e';}},0); a.push(separatorToStringCalled); a is ["OKAY"]
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'This test checks for a regression against <a href="https://bugs.webkit.org/show_bug.cgi?id=68348">String#split is buggy</a>.'
+);
+
+// The following JavaScript code (including "".split tests) is copyright by Steven Levithan,
+// and released under the MIT License
+var testCode = [
+ ["''.split()", [""]],
+ ["''.split(/./)", [""]],
+ ["''.split(/.?/)", []],
+ ["''.split(/.??/)", []],
+ ["'ab'.split(/a*/)", ["", "b"]],
+ ["'ab'.split(/a*?/)", ["a", "b"]],
+ ["'ab'.split(/(?:ab)/)", ["", ""]],
+ ["'ab'.split(/(?:ab)*/)", ["", ""]],
+ ["'ab'.split(/(?:ab)*?/)", ["a", "b"]],
+ ["'test'.split('')", ["t", "e", "s", "t"]],
+ ["'test'.split()", ["test"]],
+ ["'111'.split(1)", ["", "", "", ""]],
+ ["'test'.split(/(?:)/, 2)", ["t", "e"]],
+ ["'test'.split(/(?:)/, -1)", ["t", "e", "s", "t"]],
+ ["'test'.split(/(?:)/, undefined)", ["t", "e", "s", "t"]],
+ ["'test'.split(/(?:)/, null)", []],
+ ["'test'.split(/(?:)/, NaN)", []],
+ ["'test'.split(/(?:)/, true)", ["t"]],
+ ["'test'.split(/(?:)/, '2')", ["t", "e"]],
+ ["'test'.split(/(?:)/, 'two')", []],
+ ["'a'.split(/-/)", ["a"]],
+ ["'a'.split(/-?/)", ["a"]],
+ ["'a'.split(/-??/)", ["a"]],
+ ["'a'.split(/a/)", ["", ""]],
+ ["'a'.split(/a?/)", ["", ""]],
+ ["'a'.split(/a??/)", ["a"]],
+ ["'ab'.split(/-/)", ["ab"]],
+ ["'ab'.split(/-?/)", ["a", "b"]],
+ ["'ab'.split(/-??/)", ["a", "b"]],
+ ["'a-b'.split(/-/)", ["a", "b"]],
+ ["'a-b'.split(/-?/)", ["a", "b"]],
+ ["'a-b'.split(/-??/)", ["a", "-", "b"]],
+ ["'a--b'.split(/-/)", ["a", "", "b"]],
+ ["'a--b'.split(/-?/)", ["a", "", "b"]],
+ ["'a--b'.split(/-??/)", ["a", "-", "-", "b"]],
+ ["''.split(/()()/)", []],
+ ["'.'.split(/()()/)", ["."]],
+ ["'.'.split(/(.?)(.?)/)", ["", ".", "", ""]],
+ ["'.'.split(/(.??)(.??)/)", ["."]],
+ ["'.'.split(/(.)?(.)?/)", ["", ".", undefined, ""]],
+ ["'A<B>bold</B>and<CODE>coded</CODE>'.split(ecmaSampleRe)", ["A", undefined, "B", "bold", "/", "B", "and", undefined, "CODE", "coded", "/", "CODE", ""]],
+ ["'tesst'.split(/(s)*/)", ["t", undefined, "e", "s", "t"]],
+ ["'tesst'.split(/(s)*?/)", ["t", undefined, "e", undefined, "s", undefined, "s", undefined, "t"]],
+ ["'tesst'.split(/(s*)/)", ["t", "", "e", "ss", "t"]],
+ ["'tesst'.split(/(s*?)/)", ["t", "", "e", "", "s", "", "s", "", "t"]],
+ ["'tesst'.split(/(?:s)*/)", ["t", "e", "t"]],
+ ["'tesst'.split(/(?=s+)/)", ["te", "s", "st"]],
+ ["'test'.split('t')", ["", "es", ""]],
+ ["'test'.split('es')", ["t", "t"]],
+ ["'test'.split(/t/)", ["", "es", ""]],
+ ["'test'.split(/es/)", ["t", "t"]],
+ ["'test'.split(/(t)/)", ["", "t", "es", "t", ""]],
+ ["'test'.split(/(es)/)", ["t", "es", "t"]],
+ ["'test'.split(/(t)(e)(s)(t)/)",["", "t", "e", "s", "t", ""]],
+ ["'.'.split(/(((.((.??)))))/)", ["", ".", ".", ".", "", "", ""]],
+ ["'.'.split(/(((((.??)))))/)", ["."]]
+];
+var ecmaSampleRe = /<(\/)?([^<>]+)>/;
+
+for (var i in testCode)
+ shouldBe(testCode[i][0], 'testCode[i][1]');
+
+// Check that split works with object separators, and that steps 8 & 9 are performed in the correct order.
+var separatorToStringCalled = "ToString not called on the separator";
+shouldBe("'hello'.split({toString:function(){return 'e';}})", '["h", "llo"]');
+shouldBe("var a = 'hello'.split({toString:function(){separatorToStringCalled='OKAY';return 'e';}},0); a.push(separatorToStringCalled); a", '["OKAY"]');
--- /dev/null
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks for a regression against split() function returns wrong answer for second empty split.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS "".split(/s+/) is [""]
+PASS "".split(/s+/) is [""]
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'This test checks for a regression against <a href="https://bugs.webkit.org/show_bug.cgi?id=44600">split() function returns wrong answer for second empty split</a>.'
+);
+
+shouldBe('"".split(/s+/)', '[""]');
+shouldBe('"".split(/s+/)', '[""]');
--- /dev/null
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks for a regression against split() function ignores case insensitive modifier.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS "1s2S3".split(/s/i).toString() is "1,2,3"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'This test checks for a regression against <a href="https://bugs.webkit.org/show_bug.cgi?id=6119">split() function ignores case insensitive modifier</a>.'
+);
+
+shouldBe('"1s2S3".split(/s/i).toString()', '"1,2,3"');
--- /dev/null
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks for regression against 7343: REGRESSION: fast/js/toString-overrides.html fails when run multiple times.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS caught is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'This test checks for regression against <a href="https://bugs.webkit.org/show_bug.cgi?id=7343">7343: REGRESSION: fast/js/toString-overrides.html fails when run multiple times</a>.'
+);
+
+var a = [{ toString : 0 }];
+
+try {
+ a.toString();
+} catch (e) {
+}
+
+var caught = false;
+
+try {
+ a.toString();
+} catch (e) {
+caught = true;
+}
+
+shouldBeTrue("caught");
--- /dev/null
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks for regression against 4147: Array.toString() and toLocaleString() improvements from KDE KJS.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS [1].toString() is '1'
+PASS [1].toLocaleString() is 'toLocaleString'
+FAIL [1].toLocaleString() should be 1. Threw exception TypeError: Property 'toLocaleString' of object [object Number] is not a function
+PASS [/r/].toString() is 'toString2'
+PASS [/r/].toLocaleString() is 'toLocaleString2'
+FAIL [/r/].toLocaleString() should be toString2. Threw exception TypeError: Property 'toLocaleString' of object [object RegExp] is not a function
+PASS caught is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// 15.4 Array Objects
+// (c) 2001 Harri Porten <porten@kde.org>
+
+description(
+'This test checks for regression against <a href="https://bugs.webkit.org/show_bug.cgi?id=4147">4147: Array.toString() and toLocaleString() improvements from KDE KJS</a>.'
+);
+
+// backup
+var backupNumberToString = Number.prototype.toString;
+var backupNumberToLocaleString = Number.prototype.toLocaleString;
+var backupRegExpToString = RegExp.prototype.toString;
+var backupRegExpToLocaleString = RegExp.prototype.toLocaleString;
+
+// change functions
+Number.prototype.toString = function() { return "toString"; }
+Number.prototype.toLocaleString = function() { return "toLocaleString"; }
+RegExp.prototype.toString = function() { return "toString2"; }
+RegExp.prototype.toLocaleString = function() { return "toLocaleString2"; }
+
+// the tests
+shouldBe("[1].toString()", "'1'");
+shouldBe("[1].toLocaleString()", "'toLocaleString'");
+Number.prototype.toLocaleString = "invalid";
+shouldBe("[1].toLocaleString()", "'1'");
+shouldBe("[/r/].toString()", "'toString2'");
+shouldBe("[/r/].toLocaleString()", "'toLocaleString2'");
+RegExp.prototype.toLocaleString = "invalid";
+shouldBe("[/r/].toLocaleString()", "'toString2'");
+
+var caught = false;
+try {
+[{ toString : 0 }].toString();
+} catch (e) {
+caught = true;
+}
+shouldBeTrue("caught");
+
+// restore
+Number.prototype.toString = backupNumberToString;
+Number.prototype.toLocaleString = backupNumberToLocaleString;
+RegExp.prototype.toString = backupRegExpToString;
+RegExp.prototype.toLocaleString = backupRegExpToLocaleString;
--- /dev/null
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This page tests for length miscalculations in regular expression processing.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS re.exec('a') is null
+PASS re2.test('') is false
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This page tests for length miscalculations in regular expression processing."
+);
+
+var re = /b|[^b]/g;
+re.lastIndex = 1;
+shouldBe("re.exec('a')", "null");
+
+var re2 = /[^a]|ab/;
+shouldBe("re2.test('')", "false");
--- /dev/null
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This page tests handling of parenthetical assertions.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS regex1.exec('xx') is ['xx','x']
+PASS regex2.exec('baaabaac') is ['baaabaac','ba',undefined,'abaac']
+PASS regex3.exec('aaab') is ['aab','a','aab']
+PASS regex4.exec('aaab') is ['aab','a','aab']
+PASS regex5.exec('P11') is ['P11','1','1']
+PASS regex6.exec('ababbbcbc') is ['ababb','bb','b']
+PASS regex7.exec('xx') is ['xx','x']
+PASS regex8.exec('xx') is ['xx','x','x']
+PASS regex9.exec('xy') is null
+PASS regex10.exec('xy') is null
+PASS regex11.exec('xy') is null
+PASS regex12.exec('x') is null
+PASS regex12.exec('xx') is ['xx','x']
+PASS regex12.exec('xxy') is ['xx','x']
+PASS regex13.exec('xzzzx') is ['xzzzx','x']
+PASS regex13.exec('xzzzxy') is ['xzzzx','x']
+PASS regex14.exec('aabc') is ['aabc','a','bc']
+PASS regex14.exec('aabcx') is ['aabc','a','bc']
+PASS regex15.exec('aabc') is ['aabc','a','bc']
+PASS regex15.exec('aabcx') is ['aabc','a','bc']
+PASS regex16.exec('ab') is null
+PASS regex16.exec('abc') is ['abc','bc']
+PASS regex17.exec('ab') is ['a','ab']
+PASS regex17.exec('abc') is ['a','ab']
+PASS regex18.exec('x') is ['x','']
+PASS regex18.exec('xx') is ['x','xx']
+PASS regex18.exec('xxx') is ['x','xx']
+PASS regex19.exec('x') is ['x','',undefined]
+PASS regex19.exec('xx') is ['x','xx','xx']
+PASS regex19.exec('xxx') is ['x','xx','xx']
+PASS regex20.exec('x') is null
+PASS regex20.exec('xx') is ['x','xx']
+PASS regex20.exec('xxx') is ['x','xx']
+PASS regex21.exec('aab') is ['aab']
+PASS regex22.exec('55up') is null
+PASS regex23.exec('ax') is null
+PASS regex24.exec('x') is null
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("This page tests handling of parenthetical assertions.");
+
+var regex1 = /(x)(?=\1)x/;
+shouldBe("regex1.exec('xx')", "['xx','x']");
+
+var regex2 = /(.*?)a(?!(a+)b\2c)\2(.*)/;
+shouldBe("regex2.exec('baaabaac')", "['baaabaac','ba',undefined,'abaac']");
+
+var regex3 = /(?=(a+?))(\1ab)/;
+shouldBe("regex3.exec('aaab')", "['aab','a','aab']");
+
+var regex4 = /(?=(a+?))(\1ab)/;
+shouldBe("regex4.exec('aaab')", "['aab','a','aab']");
+
+var regex5 = /^P([1-6])(?=\1)([1-6])$/;
+shouldBe("regex5.exec('P11')", "['P11','1','1']");
+
+var regex6 = /(([a-c])b*?\2)*/;
+shouldBe("regex6.exec('ababbbcbc')", "['ababb','bb','b']");
+
+var regex7 = /(x)(?=x)x/;
+shouldBe("regex7.exec('xx')", "['xx','x']");
+
+var regex8 = /(x)(\1)/;
+shouldBe("regex8.exec('xx')", "['xx','x','x']");
+
+var regex9 = /(x)(?=\1)x/;
+shouldBeNull("regex9.exec('xy')");
+
+var regex10 = /(x)(?=x)x/;
+shouldBeNull("regex10.exec('xy')");
+
+var regex11 = /(x)(\1)/;
+shouldBeNull("regex11.exec('xy')");
+
+var regex12 = /(x)(?=\1)x/;
+shouldBeNull("regex12.exec('x')");
+shouldBe("regex12.exec('xx')", "['xx','x']");
+shouldBe("regex12.exec('xxy')", "['xx','x']");
+
+var regex13 = /(x)zzz(?=\1)x/;
+shouldBe("regex13.exec('xzzzx')", "['xzzzx','x']");
+shouldBe("regex13.exec('xzzzxy')", "['xzzzx','x']");
+
+var regex14 = /(a)\1(?=(b*c))bc/;
+shouldBe("regex14.exec('aabc')", "['aabc','a','bc']");
+shouldBe("regex14.exec('aabcx')", "['aabc','a','bc']");
+
+var regex15 = /(a)a(?=(b*c))bc/;
+shouldBe("regex15.exec('aabc')", "['aabc','a','bc']");
+shouldBe("regex15.exec('aabcx')", "['aabc','a','bc']");
+
+var regex16 = /a(?=(b*c))bc/;
+shouldBeNull("regex16.exec('ab')");
+shouldBe("regex16.exec('abc')", "['abc','bc']");
+
+var regex17 = /(?=((?:ab)*))a/;
+shouldBe("regex17.exec('ab')", "['a','ab']");
+shouldBe("regex17.exec('abc')", "['a','ab']");
+
+var regex18 = /(?=((?:xx)*))x/;
+shouldBe("regex18.exec('x')", "['x','']");
+shouldBe("regex18.exec('xx')", "['x','xx']");
+shouldBe("regex18.exec('xxx')", "['x','xx']");
+
+var regex19 = /(?=((xx)*))x/;
+shouldBe("regex19.exec('x')", "['x','',undefined]");
+shouldBe("regex19.exec('xx')", "['x','xx','xx']");
+shouldBe("regex19.exec('xxx')", "['x','xx','xx']");
+
+var regex20 = /(?=(xx))+x/;
+shouldBeNull("regex20.exec('x')");
+shouldBe("regex20.exec('xx')", "['x','xx']");
+shouldBe("regex20.exec('xxx')", "['x','xx']");
+
+var regex21 = /(?=a+b)aab/;
+shouldBe("regex21.exec('aab')", "['aab']");
+
+var regex22 = /(?!(u|m{0,}g+)u{1,}|2{2,}!1%n|(?!K|(?=y)|(?=ip))+?)(?=(?=(((?:7))*?)*?))p/m;
+shouldBe("regex22.exec('55up')", "null");
+
+var regex23 = /(?=(a)b|c?)()*d/;
+shouldBe("regex23.exec('ax')", "null");
+
+var regex24 = /(?=a|b?)c/;
+shouldBe("regex24.exec('x')", "null");
+
--- /dev/null
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks use of the regexp constructor.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS re === RegExp(re) is true
+PASS re !== new RegExp(re) is true
+PASS re === RegExp(re,'i') threw exception TypeError: Cannot supply flags when constructing one RegExp from another.
+PASS re !== new RegExp(re,'i') threw exception TypeError: Cannot supply flags when constructing one RegExp from another.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("This test checks use of the regexp constructor.");
+
+var re = /abc/;
+
+shouldBeTrue("re === RegExp(re)");
+shouldBeTrue("re !== new RegExp(re)");
+shouldThrow("re === RegExp(re,'i')");
+shouldThrow("re !== new RegExp(re,'i')");
+
--- /dev/null
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This page tests handling of parentheses subexpressions.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS regexp1.exec('test') is null
+PASS regexp1.exec('blah') is ['blah']
+PASS regexp1.exec('1blah') is ['1blah']
+PASS regexp1.exec('blah1') is ['blah1']
+PASS regexp1.exec('blah blah blah') is ['blah blah blah']
+PASS regexp1.exec('blah\nsecond') is ['blah']
+PASS regexp1.exec('first\nblah') is ['blah']
+PASS regexp1.exec('first\nblah\nthird') is ['blah']
+PASS regexp1.exec('first\nblah2\nblah3') is ['blah2']
+PASS regexp2.exec('test') is null
+PASS regexp2.exec('blah') is ['blah']
+PASS regexp2.exec('1blah') is ['1blah']
+PASS regexp2.exec('blah1') is ['blah1']
+PASS regexp2.exec('blah blah blah') is ['blah blah blah']
+PASS regexp2.exec('blah\nsecond') is ['blah']
+PASS regexp2.exec('first\nblah') is null
+PASS regexp2.exec('first\nblah\nthird') is null
+PASS regexp2.exec('first\nblah2\nblah3') is null
+PASS regexp3.exec('test') is null
+PASS regexp3.exec('blah') is ['blah']
+PASS regexp3.exec('1blah') is ['1blah']
+PASS regexp3.exec('blah1') is ['blah1']
+PASS regexp3.exec('blah blah blah') is ['blah blah blah']
+PASS regexp3.exec('blah\nsecond') is null
+PASS regexp3.exec('first\nblah') is ['blah']
+PASS regexp3.exec('first\nblah\nthird') is null
+PASS regexp3.exec('first\nblah2\nblah3') is ['blah3']
+PASS regexp4.exec('test') is null
+PASS regexp4.exec('blah') is ['blah']
+PASS regexp4.exec('1blah') is ['1blah']
+PASS regexp4.exec('blah1') is ['blah1']
+PASS regexp4.exec('blah blah blah') is ['blah blah blah']
+PASS regexp4.exec('blah\nsecond') is null
+PASS regexp4.exec('first\nblah') is null
+PASS regexp4.exec('first\nblah\nthird') is null
+PASS regexp4.exec('first\nblah2\nblah3') is null
+PASS regexp5.exec('test') is null
+PASS regexp5.exec('blah') is ['blah']
+PASS regexp5.exec('1blah') is ['1blah']
+PASS regexp5.exec('blah1') is ['blah1']
+PASS regexp5.exec('blah blah blah') is ['blah blah blah']
+PASS regexp5.exec('blah\nsecond') is ['blah']
+PASS regexp5.exec('first\nblah') is ['blah']
+PASS regexp5.exec('first\nblah\nthird') is ['blah']
+PASS regexp5.exec('first\nblah2\nblah3') is ['blah2']
+PASS regexp6.exec('test') is null
+PASS regexp6.exec('blah') is ['blah']
+PASS regexp6.exec('1blah') is ['1blah']
+PASS regexp6.exec('blah1') is ['blah']
+PASS regexp6.exec('blah blah blah') is ['blah blah blah']
+PASS regexp6.exec('blah\nsecond') is ['blah']
+PASS regexp6.exec('first\nblah') is ['blah']
+PASS regexp6.exec('first\nblah\nthird') is ['blah']
+PASS regexp6.exec('first\nblah2\nblah3') is ['blah']
+PASS regexp7.exec('test') is null
+PASS regexp7.exec('blah') is ['blah']
+PASS regexp7.exec('1blah') is ['1blah']
+PASS regexp7.exec('blah1') is ['blah1']
+PASS regexp7.exec('blah blah blah') is ['blah blah blah']
+PASS regexp7.exec('blah\nsecond') is null
+PASS regexp7.exec('first\nblah') is null
+PASS regexp7.exec('first\nblah\nthird') is null
+PASS regexp7.exec('first\nblah2\nblah3') is null
+PASS regexp8.exec('test') is null
+PASS regexp8.exec('blah') is ['blah','']
+PASS regexp8.exec('1blah') is ['1blah','1']
+PASS regexp8.exec('blah1') is ['blah1','']
+PASS regexp8.exec('blah blah blah') is ['blah blah blah','blah blah ']
+PASS regexp8.exec('blah\nsecond') is null
+PASS regexp8.exec('first\nblah') is null
+PASS regexp8.exec('first\nblah\nthird') is null
+PASS regexp8.exec('first\nblah2\nblah3') is null
+PASS regexp9.exec('test') is null
+PASS regexp9.exec('blah') is ['blah']
+PASS regexp9.exec('1blah') is ['1blah']
+PASS regexp9.exec('blah1') is ['blah1']
+PASS regexp9.exec('blah blah blah') is ['blah blah blah']
+PASS regexp9.exec('blah\nsecond') is ['blah']
+PASS regexp9.exec('first\nblah') is ['blah']
+PASS regexp9.exec('first\nblah\nthird') is ['blah']
+PASS regexp9.exec('first\nblah2\nblah3') is ['blah2']
+PASS regexp10.exec('test') is null
+PASS regexp10.exec('blah') is ['blah']
+PASS regexp10.exec('1blah') is ['1blah']
+PASS regexp10.exec('blah1') is ['blah1']
+PASS regexp10.exec('blah blah blah') is ['blah blah blah']
+PASS regexp10.exec('blah\nsecond') is ['blah']
+PASS regexp10.exec('first\nblah') is ['blah']
+PASS regexp10.exec('first\nblah\nthird') is ['blah']
+PASS regexp10.exec('first\nblah2\nblah3') is ['blah2']
+PASS regexp11.exec('test') is null
+PASS regexp11.exec('blah') is ['blah']
+PASS regexp11.exec('1blah') is ['1blah']
+PASS regexp11.exec('blah1') is ['blah1']
+PASS regexp11.exec('blah blah blah') is ['blah blah blah']
+PASS regexp11.exec('blah\nsecond') is null
+PASS regexp11.exec('first\nblah') is ['blah']
+PASS regexp11.exec('first\nblah\nthird') is null
+PASS regexp11.exec('first\nblah2\nblah3') is ['blah3']
+PASS regexp12.exec('test') is null
+PASS regexp12.exec('blah') is ['blah']
+PASS regexp12.exec('1blah') is ['1blah']
+PASS regexp12.exec('blah1') is ['blah1']
+PASS regexp12.exec('blah blah blah') is ['blah blah blah']
+PASS regexp12.exec('blah\nsecond') is null
+PASS regexp12.exec('first\nblah') is ['blah']
+PASS regexp12.exec('first\nblah\nthird') is null
+PASS regexp12.exec('first\nblah2\nblah3') is ['blah3']
+PASS regexp13.exec('abc\n123') is ['abc\n123']
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("This page tests handling of parentheses subexpressions.");
+
+var regexp1 = /.*blah.*/;
+shouldBeNull("regexp1.exec('test')");
+shouldBe("regexp1.exec('blah')", "['blah']");
+shouldBe("regexp1.exec('1blah')", "['1blah']");
+shouldBe("regexp1.exec('blah1')", "['blah1']");
+shouldBe("regexp1.exec('blah blah blah')", "['blah blah blah']");
+shouldBe("regexp1.exec('blah\\nsecond')", "['blah']");
+shouldBe("regexp1.exec('first\\nblah')", "['blah']");
+shouldBe("regexp1.exec('first\\nblah\\nthird')", "['blah']");
+shouldBe("regexp1.exec('first\\nblah2\\nblah3')", "['blah2']");
+
+var regexp2 = /^.*blah.*/;
+shouldBeNull("regexp2.exec('test')");
+shouldBe("regexp2.exec('blah')", "['blah']");
+shouldBe("regexp2.exec('1blah')", "['1blah']");
+shouldBe("regexp2.exec('blah1')", "['blah1']");
+shouldBe("regexp2.exec('blah blah blah')", "['blah blah blah']");
+shouldBe("regexp2.exec('blah\\nsecond')", "['blah']");
+shouldBeNull("regexp2.exec('first\\nblah')");
+shouldBeNull("regexp2.exec('first\\nblah\\nthird')");
+shouldBeNull("regexp2.exec('first\\nblah2\\nblah3')");
+
+var regexp3 = /.*blah.*$/;
+shouldBeNull("regexp3.exec('test')");
+shouldBe("regexp3.exec('blah')", "['blah']");
+shouldBe("regexp3.exec('1blah')", "['1blah']");
+shouldBe("regexp3.exec('blah1')", "['blah1']");
+shouldBe("regexp3.exec('blah blah blah')", "['blah blah blah']");
+shouldBeNull("regexp3.exec('blah\\nsecond')");
+shouldBe("regexp3.exec('first\\nblah')", "['blah']");
+shouldBeNull("regexp3.exec('first\\nblah\\nthird')");
+shouldBe("regexp3.exec('first\\nblah2\\nblah3')", "['blah3']");
+
+var regexp4 = /^.*blah.*$/;
+shouldBeNull("regexp4.exec('test')");
+shouldBe("regexp4.exec('blah')", "['blah']");
+shouldBe("regexp4.exec('1blah')", "['1blah']");
+shouldBe("regexp4.exec('blah1')", "['blah1']");
+shouldBe("regexp4.exec('blah blah blah')", "['blah blah blah']");
+shouldBeNull("regexp4.exec('blah\\nsecond')");
+shouldBeNull("regexp4.exec('first\\nblah')");
+shouldBeNull("regexp4.exec('first\\nblah\\nthird')");
+shouldBeNull("regexp4.exec('first\\nblah2\\nblah3')");
+
+var regexp5 = /.*?blah.*/;
+shouldBeNull("regexp5.exec('test')");
+shouldBe("regexp5.exec('blah')", "['blah']");
+shouldBe("regexp5.exec('1blah')", "['1blah']");
+shouldBe("regexp5.exec('blah1')", "['blah1']");
+shouldBe("regexp5.exec('blah blah blah')", "['blah blah blah']");
+shouldBe("regexp5.exec('blah\\nsecond')", "['blah']");
+shouldBe("regexp5.exec('first\\nblah')", "['blah']");
+shouldBe("regexp5.exec('first\\nblah\\nthird')", "['blah']");
+shouldBe("regexp5.exec('first\\nblah2\\nblah3')", "['blah2']");
+
+var regexp6 = /.*blah.*?/;
+shouldBeNull("regexp6.exec('test')");
+shouldBe("regexp6.exec('blah')", "['blah']");
+shouldBe("regexp6.exec('1blah')", "['1blah']");
+shouldBe("regexp6.exec('blah1')", "['blah']");
+shouldBe("regexp6.exec('blah blah blah')", "['blah blah blah']");
+shouldBe("regexp6.exec('blah\\nsecond')", "['blah']");
+shouldBe("regexp6.exec('first\\nblah')", "['blah']");
+shouldBe("regexp6.exec('first\\nblah\\nthird')", "['blah']");
+shouldBe("regexp6.exec('first\\nblah2\\nblah3')", "['blah']");
+
+var regexp7 = /^.*?blah.*?$/;
+shouldBeNull("regexp7.exec('test')");
+shouldBe("regexp7.exec('blah')", "['blah']");
+shouldBe("regexp7.exec('1blah')", "['1blah']");
+shouldBe("regexp7.exec('blah1')", "['blah1']");
+shouldBe("regexp7.exec('blah blah blah')", "['blah blah blah']");
+shouldBeNull("regexp7.exec('blah\\nsecond')");
+shouldBeNull("regexp7.exec('first\\nblah')");
+shouldBeNull("regexp7.exec('first\\nblah\\nthird')");
+shouldBeNull("regexp7.exec('first\\nblah2\\nblah3')");
+
+var regexp8 = /^(.*)blah.*$/;
+shouldBeNull("regexp8.exec('test')");
+shouldBe("regexp8.exec('blah')", "['blah','']");
+shouldBe("regexp8.exec('1blah')", "['1blah','1']");
+shouldBe("regexp8.exec('blah1')", "['blah1','']");
+shouldBe("regexp8.exec('blah blah blah')", "['blah blah blah','blah blah ']");
+shouldBeNull("regexp8.exec('blah\\nsecond')");
+shouldBeNull("regexp8.exec('first\\nblah')");
+shouldBeNull("regexp8.exec('first\\nblah\\nthird')");
+shouldBeNull("regexp8.exec('first\\nblah2\\nblah3')");
+
+var regexp9 = /.*blah.*/m;
+shouldBeNull("regexp9.exec('test')");
+shouldBe("regexp9.exec('blah')", "['blah']");
+shouldBe("regexp9.exec('1blah')", "['1blah']");
+shouldBe("regexp9.exec('blah1')", "['blah1']");
+shouldBe("regexp9.exec('blah blah blah')", "['blah blah blah']");
+shouldBe("regexp9.exec('blah\\nsecond')", "['blah']");
+shouldBe("regexp9.exec('first\\nblah')", "['blah']");
+shouldBe("regexp9.exec('first\\nblah\\nthird')", "['blah']");
+shouldBe("regexp9.exec('first\\nblah2\\nblah3')", "['blah2']");
+
+var regexp10 = /^.*blah.*/m;
+shouldBeNull("regexp10.exec('test')");
+shouldBe("regexp10.exec('blah')", "['blah']");
+shouldBe("regexp10.exec('1blah')", "['1blah']");
+shouldBe("regexp10.exec('blah1')", "['blah1']");
+shouldBe("regexp10.exec('blah blah blah')", "['blah blah blah']");
+shouldBe("regexp10.exec('blah\\nsecond')", "['blah']");
+shouldBe("regexp10.exec('first\\nblah')", "['blah']");
+shouldBe("regexp10.exec('first\\nblah\\nthird')", "['blah']");
+shouldBe("regexp10.exec('first\\nblah2\\nblah3')", "['blah2']");
+
+var regexp11 = /.*(?:blah).*$/;
+shouldBeNull("regexp11.exec('test')");
+shouldBe("regexp11.exec('blah')", "['blah']");
+shouldBe("regexp11.exec('1blah')", "['1blah']");
+shouldBe("regexp11.exec('blah1')", "['blah1']");
+shouldBe("regexp11.exec('blah blah blah')", "['blah blah blah']");
+shouldBeNull("regexp11.exec('blah\\nsecond')");
+shouldBe("regexp11.exec('first\\nblah')", "['blah']");
+shouldBeNull("regexp11.exec('first\\nblah\\nthird')");
+shouldBe("regexp11.exec('first\\nblah2\\nblah3')", "['blah3']");
+
+var regexp12 = /.*(?:blah|buzz|bang).*$/;
+shouldBeNull("regexp12.exec('test')");
+shouldBe("regexp12.exec('blah')", "['blah']");
+shouldBe("regexp12.exec('1blah')", "['1blah']");
+shouldBe("regexp12.exec('blah1')", "['blah1']");
+shouldBe("regexp12.exec('blah blah blah')", "['blah blah blah']");
+shouldBeNull("regexp12.exec('blah\\nsecond')");
+shouldBe("regexp12.exec('first\\nblah')", "['blah']");
+shouldBeNull("regexp12.exec('first\\nblah\\nthird')");
+shouldBe("regexp12.exec('first\\nblah2\\nblah3')", "['blah3']");
+
+var regexp13 = /.*\n\d+.*/;
+shouldBe("regexp13.exec('abc\\n123')", "['abc\\n123']");
+
--- /dev/null
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Test that covers capturing brackets, and was adapted from a part of an early version of Acid3.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS /TA[])]/.exec('TA]') threw exception SyntaxError: Invalid regular expression: /TA[])]/: Unmatched ')'.
+PASS /[]/.exec('') is null
+PASS /(\3)(\1)(a)/.exec('cat').toString() is 'a,,,a'
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+'Test that covers capturing brackets, and was adapted from a part of an early version of Acid3.'
+);
+
+// JS regexps aren't like Perl regexps, if their character
+// classes start with a ] that means they're empty. So this
+// is a syntax error; if we get here it's a bug.
+shouldThrow("/TA[])]/.exec('TA]')");
+shouldBe("/[]/.exec('')", "null");
+shouldBe("/(\\3)(\\1)(a)/.exec('cat').toString()", "'a,,,a'");
--- /dev/null
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This page tests the regex examples from the ECMA-262 specification.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS regex01.exec("abc") is ["a"]
+PASS regex02.exec("abc") is ["abc", "a", "a", undefined, "bc", undefined, "bc"]
+PASS regex03.exec("abcdefghi") is ["abcde"]
+PASS regex04.exec("abcdefghi") is ["abc"]
+PASS regex05.exec("aabaac") is ["aaba", "ba"]
+PASS "aaaaaaaaaa,aaaaaaaaaaaaaaa".replace(regex06,"$1") is "aaaaa"
+PASS regex07.exec("zaacbbbcac") is ["zaacbbbcac", "z", "ac", "a", undefined, "c"]
+PASS regex08.exec("b") is ["", undefined]
+PASS regex09.exec("baaaac") is ["b", ""]
+PASS regex10.exec("baaabac") is ["", "aaa"]
+PASS regex11.exec("baaabac") is ["aba", "a"]
+PASS regex12.exec("baaabaac") is ["baaabaac", "ba", undefined, "abaac"]
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This page tests the regex examples from the ECMA-262 specification."
+);
+
+var regex01 = /a|ab/;
+shouldBe('regex01.exec("abc")', '["a"]');
+
+var regex02 = /((a)|(ab))((c)|(bc))/;
+shouldBe('regex02.exec("abc")', '["abc", "a", "a", undefined, "bc", undefined, "bc"]');
+
+var regex03 = /a[a-z]{2,4}/;
+shouldBe('regex03.exec("abcdefghi")', '["abcde"]');
+
+var regex04 = /a[a-z]{2,4}?/;
+shouldBe('regex04.exec("abcdefghi")', '["abc"]');
+
+var regex05 = /(aa|aabaac|ba|b|c)*/;
+shouldBe('regex05.exec("aabaac")', '["aaba", "ba"]');
+
+var regex06 = /^(a+)\1*,\1+$/;
+shouldBe('"aaaaaaaaaa,aaaaaaaaaaaaaaa".replace(regex06,"$1")', '"aaaaa"');
+
+var regex07 = /(z)((a+)?(b+)?(c))*/;
+shouldBe('regex07.exec("zaacbbbcac")', '["zaacbbbcac", "z", "ac", "a", undefined, "c"]');
+
+var regex08 = /(a*)*/;
+shouldBe('regex08.exec("b")', '["", undefined]');
+
+var regex09 = /(a*)b\1+/;
+shouldBe('regex09.exec("baaaac")', '["b", ""]');
+
+var regex10 = /(?=(a+))/;
+shouldBe('regex10.exec("baaabac")', '["", "aaa"]');
+
+var regex11 = /(?=(a+))a*b\1/;
+shouldBe('regex11.exec("baaabac")', '["aba", "a"]');
+
+var regex12 = /(.*?)a(?!(a+)b\2c)\2(.*)/;
+shouldBe('regex12.exec("baaabaac")', '["baaabaac", "ba", undefined, "abaac"]');
--- /dev/null
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This page tests invalid character ranges in character classes.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS /[a-c]+/.exec("-acbd"); is ["acb"]
+PASS /[a\-c]+/.exec("-acbd") is ["-ac"]
+PASS /[c-a]+/.exec("-acbd"); threw exception SyntaxError: Invalid regular expression: /[c-a]+/: Range out of order in character class.
+PASS /[\d-x]+/.exec("1-3xy"); is ["1-3x"]
+PASS /[x-\d]+/.exec("1-3xy"); is ["1-3x"]
+PASS /[\d-\d]+/.exec("1-3xy"); is ["1-3"]
+PASS /[\d-a-z]+/.exec("az1-3y"); is ["az1-3"]
+PASS /[\d\-x]+/.exec("1-3xy"); is ["1-3x"]
+PASS /[x\-\d]+/.exec("1-3xy"); is ["1-3x"]
+PASS /[\d\-\d]+/.exec("1-3xy"); is ["1-3"]
+PASS /[\d-]+/.exec("1-3xy") is ["1-3"]
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This page tests invalid character ranges in character classes."
+);
+
+// These test a basic range / non range.
+shouldBe('/[a-c]+/.exec("-acbd");', '["acb"]');
+shouldBe('/[a\\-c]+/.exec("-acbd")', '["-ac"]');
+
+// A reverse-range is invalid.
+shouldThrow('/[c-a]+/.exec("-acbd");');
+
+// A character-class in a range is invalid, according to ECMA-262, but we allow it.
+shouldBe('/[\\d-x]+/.exec("1-3xy");', '["1-3x"]');
+shouldBe('/[x-\\d]+/.exec("1-3xy");', '["1-3x"]');
+shouldBe('/[\\d-\\d]+/.exec("1-3xy");', '["1-3"]');
+
+// Whilst we break with ECMA-262's definition of CharacterRange, we do comply with
+// the grammar, and as such in the following regex a-z cannot be matched as a range.
+shouldBe('/[\\d-a-z]+/.exec("az1-3y");', '["az1-3"]');
+
+// An escaped hypen should not be confused for an invalid range.
+shouldBe('/[\\d\\-x]+/.exec("1-3xy");', '["1-3x"]');
+shouldBe('/[x\\-\\d]+/.exec("1-3xy");', '["1-3x"]');
+shouldBe('/[\\d\\-\\d]+/.exec("1-3xy");', '["1-3"]');
+
+// A hyphen after a character-class is not invalid.
+shouldBe('/[\\d-]+/.exec("1-3xy")', '["1-3"]');
--- /dev/null
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This page tests that a RegExp object's lastIndex behaves like a regular property.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS delete /x/.lastIndex is false
+PASS 'use strict'; delete /x/.lastIndex threw exception TypeError: Cannot delete property 'lastIndex' of [object RegExp].
+PASS 'lastIndex' in /x/ is true
+PASS for (property in /x/) if (property === 'lastIndex') throw false; true is true
+PASS var re = /x/; re.lastIndex = re; re.lastIndex === re is true
+PASS Object.defineProperty(/x/, {get:function(){}}) threw exception TypeError: Property description must be an object: undefined.
+PASS Object.defineProperty(/x/, 'lastIndex', {enumerable:true}); true threw exception TypeError: Cannot redefine property: lastIndex.
+PASS Object.defineProperty(/x/, 'lastIndex', {enumerable:false}); true is true
+PASS Object.defineProperty(/x/, 'lastIndex', {configurable:true}); true threw exception TypeError: Cannot redefine property: lastIndex.
+PASS Object.defineProperty(/x/, 'lastIndex', {configurable:false}); true is true
+PASS var re = Object.defineProperty(/x/, 'lastIndex', {writable:true}); re.lastIndex = 42; re.lastIndex is 42
+PASS var re = Object.defineProperty(/x/, 'lastIndex', {writable:false}); re.lastIndex = 42; re.lastIndex is 0
+PASS var re = Object.defineProperty(/x/, 'lastIndex', {value:42}); re.lastIndex is 42
+PASS Object.defineProperty(Object.defineProperty(/x/, 'lastIndex', {writable:false}), 'lastIndex', {writable:true}); true threw exception TypeError: Cannot redefine property: lastIndex.
+PASS Object.defineProperty(Object.defineProperty(/x/, 'lastIndex', {writable:false}), 'lastIndex', {value:42}); true threw exception TypeError: Cannot redefine property: lastIndex.
+PASS Object.defineProperty(Object.defineProperty(/x/, 'lastIndex', {writable:false}), 'lastIndex', {value:0}); true is true
+PASS Object.defineProperty(/x/, 'lastIndex', {writable:false}).exec('') is null
+PASS Object.defineProperty(/x/, 'lastIndex', {writable:false}).exec('x') is ["x"]
+FAIL Object.defineProperty(/x/g, 'lastIndex', {writable:false}).exec('') should throw an exception. Was null.
+FAIL Object.defineProperty(/x/g, 'lastIndex', {writable:false}).exec('x') should throw an exception. Was x.
+PASS var re = /x/; Object.freeze(re); Object.isFrozen(re); is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This page tests that a RegExp object's lastIndex behaves like a regular property."
+);
+
+// lastIndex is not configurable
+shouldBeFalse("delete /x/.lastIndex");
+shouldThrow("'use strict'; delete /x/.lastIndex");
+
+// lastIndex is not enumerable
+shouldBeTrue("'lastIndex' in /x/");
+shouldBeTrue("for (property in /x/) if (property === 'lastIndex') throw false; true");
+
+// lastIndex is writable
+shouldBeTrue("var re = /x/; re.lastIndex = re; re.lastIndex === re");
+
+// Cannot redefine lastIndex as an accessor
+shouldThrow("Object.defineProperty(/x/, {get:function(){}})");
+
+// Cannot redefine lastIndex as enumerable
+shouldThrow("Object.defineProperty(/x/, 'lastIndex', {enumerable:true}); true");
+shouldBeTrue("Object.defineProperty(/x/, 'lastIndex', {enumerable:false}); true");
+
+// Cannot redefine lastIndex as configurable
+shouldThrow("Object.defineProperty(/x/, 'lastIndex', {configurable:true}); true");
+shouldBeTrue("Object.defineProperty(/x/, 'lastIndex', {configurable:false}); true");
+
+// Can redefine lastIndex as read-only
+shouldBe("var re = Object.defineProperty(/x/, 'lastIndex', {writable:true}); re.lastIndex = 42; re.lastIndex", '42');
+shouldBe("var re = Object.defineProperty(/x/, 'lastIndex', {writable:false}); re.lastIndex = 42; re.lastIndex", '0');
+
+// Can redefine the value
+shouldBe("var re = Object.defineProperty(/x/, 'lastIndex', {value:42}); re.lastIndex", '42');
+
+// Cannot redefine read-only lastIndex as writable
+shouldThrow("Object.defineProperty(Object.defineProperty(/x/, 'lastIndex', {writable:false}), 'lastIndex', {writable:true}); true");
+
+// Can only redefine the value of a read-only lastIndex as the current value
+shouldThrow("Object.defineProperty(Object.defineProperty(/x/, 'lastIndex', {writable:false}), 'lastIndex', {value:42}); true");
+shouldBeTrue("Object.defineProperty(Object.defineProperty(/x/, 'lastIndex', {writable:false}), 'lastIndex', {value:0}); true");
+
+// Trying to run a global regular expression should throw, if lastIndex is read-only
+shouldBe("Object.defineProperty(/x/, 'lastIndex', {writable:false}).exec('')", 'null');
+shouldBe("Object.defineProperty(/x/, 'lastIndex', {writable:false}).exec('x')", '["x"]');
+shouldThrow("Object.defineProperty(/x/g, 'lastIndex', {writable:false}).exec('')");
+shouldThrow("Object.defineProperty(/x/g, 'lastIndex', {writable:false}).exec('x')");
+
+// Should be able to freeze a regular expression object.
+shouldBeTrue("var re = /x/; Object.freeze(re); Object.isFrozen(re);");
--- /dev/null
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This page tests handling of malformed escape sequences.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+
+Testing regexp: /\ug/gm
+PASS regexp.test('ug') is true
+PASS regexp.lastIndex is 2
+
+Testing regexp: /\xg/gm
+PASS regexp.test('xg') is true
+PASS regexp.lastIndex is 2
+
+Testing regexp: /\c_/gm
+PASS regexp.test('\\c_') is true
+PASS regexp.lastIndex is 3
+
+Testing regexp: /[\B]/gm
+PASS regexp.test('B') is true
+PASS regexp.lastIndex is 1
+
+Testing regexp: /[\b]/gm
+PASS regexp.test('\b') is true
+PASS regexp.lastIndex is 1
+
+Testing regexp: /\8/gm
+PASS regexp.test('\\8') is true
+PASS regexp.lastIndex is 2
+
+Testing regexp: /^[\c]$/
+PASS regexp.test('c') is true
+
+Testing regexp: /^[\c_]$/
+PASS regexp.test('c') is false
+
+Testing regexp: /^[\c]]$/
+PASS regexp.test('c]') is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This page tests handling of malformed escape sequences."
+);
+
+var regexp;
+
+regexp = /\ug/gm;
+debug("\nTesting regexp: " + regexp);
+shouldBeTrue("regexp.test('ug')");
+shouldBe("regexp.lastIndex", "2");
+
+regexp = /\xg/gm;
+debug("\nTesting regexp: " + regexp);
+shouldBeTrue("regexp.test('xg')");
+shouldBe("regexp.lastIndex", "2");
+
+regexp = /\c_/gm;
+debug("\nTesting regexp: " + regexp);
+shouldBeTrue("regexp.test('\\\\c_')");
+shouldBe("regexp.lastIndex", "3");
+
+regexp = /[\B]/gm;
+debug("\nTesting regexp: " + regexp);
+shouldBeTrue("regexp.test('B')");
+shouldBe("regexp.lastIndex", "1");
+
+regexp = /[\b]/gm;
+debug("\nTesting regexp: " + regexp);
+shouldBeTrue("regexp.test('\\b')");
+shouldBe("regexp.lastIndex", "1");
+
+regexp = /\8/gm;
+debug("\nTesting regexp: " + regexp);
+shouldBeTrue("regexp.test('\\\\8')");
+shouldBe("regexp.lastIndex", "2");
+
+regexp = /^[\c]$/;
+debug("\nTesting regexp: " + regexp);
+shouldBeTrue("regexp.test('c')");
+
+regexp = /^[\c_]$/;
+debug("\nTesting regexp: " + regexp);
+shouldBeFalse("regexp.test('c')");
+
+regexp = /^[\c]]$/;
+debug("\nTesting regexp: " + regexp);
+shouldBeTrue("regexp.test('c]')");
--- /dev/null
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This page tests for proper backtracking with greedy quantifiers and non-capturing parentheses.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS re.exec('a') is ['a']
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This page tests for proper backtracking with greedy quantifiers and non-capturing parentheses."
+);
+
+var re = /(?:a*)a/;
+shouldBe("re.exec('a')", "['a']");
--- /dev/null
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This test checks expressions with alternative lengths of appox. 2^31.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS regexp1.exec('') is null
+PASS regexp2.exec('') is null
+PASS regexp3.exec(s3) is null
+FAIL function f() { /[^a$]{4294967295}/ } should throw SyntaxError: Invalid regular expression: number too large in {} quantifier. Was undefined.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("This test checks expressions with alternative lengths of appox. 2^31.");
+
+var regexp1 = /(?:(?=g))|(?:m).{2147483648,}/;
+shouldBe("regexp1.exec('')", 'null');
+
+var regexp2 = /(?:(?=g)).{2147483648,}/;
+shouldBe("regexp2.exec('')", 'null');
+
+var s3 = "&{6}u4a64YfQP{C}u88c4u5772Qu8693{4294967167}u85f2u7f3fs((uf202){4})u5bc6u1947";
+var regexp3 = new RegExp(s3, "");
+shouldBe("regexp3.exec(s3)", 'null');
+
+shouldThrow("function f() { /[^a$]{4294967295}/ }", '"SyntaxError: Invalid regular expression: number too large in {} quantifier"');
--- /dev/null
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This page tests handling of parentheses subexpressions.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS regexp1.exec('abc') is ['ab','a','b']
+PASS regexp2.exec('abacadabe') is ['abe','ab','b','b']
+PASS regexp3.exec('abacadabe') is ['abe','ab','b',undefined]
+PASS regexp4.exec('abacadabe') is ['abe','ab','b',undefined]
+PASS regexp5.exec('abacadabe') is ['abe','ab','b','b',undefined,undefined]
+PASS regexp6.exec('abcde') is ['ab','ab','b','b',undefined,undefined]
+PASS regexp7.exec('abc') is ['abc','ab','b']
+PASS regexp8.exec('bcaddxqy') is ['qy','q','q','y']
+PASS regexp9.exec('asdfjejgsdflaksdfjkeljghkjea') is ['a','a',undefined]
+PASS regexp10.exec('asdfjejgsdflaksdfjkeljghat') is ['at']
+PASS regexp11.exec('Developing with JavaScript is dangerous, do not try it without assistance') is null
+PASS regexp12.exec('Seattle, WA to Buckley, WA') is ['Seattle, WA to Buckley, WA', undefined, 'Seattle', 'WA', undefined, 'Buckley', 'WA']
+PASS regexp13.exec('zxcasd;fl ^AaaAAaaaf;lrlrzs') is ['AaaAAaaaf;lrlrzs',undefined,'AaaAAaaaf;lrlrzs']
+PASS regexp14.exec('b') is ['b',undefined,'b']
+PASS regexp15.exec('abdf') is ['abdf',undefined,'abd','f']
+PASS regexp16.exec('abc') is ['ab','a','b']
+PASS regexp17.exec('bcaDxqy') is ['Dx','D']
+PASS regexp18.exec('Hello: World') is ['Hello:',':']
+PASS regexp19.exec('barrel') is ['bar','']
+PASS regexp20.exec('barrel') is ['barrel','rel']
+PASS regexp20.exec('2barrel') is ['2barrel','rel']
+PASS regexp21.exec('abc') is ['ab','ab','b']
+PASS regexp22.exec('abcdlskfgjdslkfg') is null
+PASS regexp23.exec('<html xmlns="http://www.w3.org/1999/xhtml"') is ['"http://www.w3.org/1999/xhtml"']
+PASS regexp24.exec('123') is null
+PASS regexp25.exec('this is a test') is ['this','this',undefined]
+PASS regexp25.exec('!this is a test') is null
+PASS regexp26.exec('aaa') is ['aaa',undefined,undefined]
+PASS regexp27.exec('file:///Users/Someone/Desktop/HelloWorld/index.html') is ['file:///Users/Someone/Desktop/HelloWorld/index.html','file','//','',undefined,undefined,undefined,'',undefined,'/Users/Someone/Desktop/HelloWorld/index.html',undefined,undefined]
+PASS regexp28.exec('file:///Users/Someone/Desktop/HelloWorld/index.html') is ['file:','file',undefined,undefined,undefined,undefined,undefined]
+PASS regexp29.exec('Committer:') is null
+PASS regexp30.exec('Committer:') is null
+PASS regexp31.exec('Committer:') is null
+PASS regexp32.exec('Committer:') is null
+PASS regexp33.exec('> <head>') is ['>',undefined,undefined,'>']
+PASS regexp34.exec('xyz123') is null
+PASS regexp34.exec('btn-abc') is ['btn-abc']
+PASS regexp34.exec('btn- abc') is null
+PASS regexp34.exec('XXbtn-abc') is null
+PASS regexp34.exec('XX btn-abc') is ['btn-abc']
+PASS regexp35.exec('ax') is ['ax','ax','a','x']
+PASS regexp35.exec('axx') is null
+PASS regexp35.exec('axxx') is ['axxx','axxx','a','xxx']
+PASS regexp35.exec('bx') is ['bx','bx','b','x']
+PASS regexp35.exec('bxx') is null
+PASS regexp35.exec('bxxx') is ['bxxx','bxxx','b','xxx']
+PASS regexp36.exec('/2011') is ['/2011','/2011','/','2011']
+PASS regexp36.exec('/11') is ['/11','/11','/','11']
+PASS regexp36.exec('/123') is null
+PASS regexp37.exec('7/4/1776') is ['7/4/1776','7','/','4','/1776','/','1776']
+PASS regexp37.exec('07-04-1776') is ['07-04-1776','07','-','04','-1776','-','1776']
+PASS regexp38.exec('xx') is ['xx','xx','xx']
+PASS regexp38.exec('b') is ['b','b',undefined]
+PASS regexp38.exec('z') is ['z','z',undefined]
+PASS regexp38.exec('') is ['','',undefined]
+PASS regexp39.exec('') is ['',undefined,undefined]
+PASS regexp39.exec('8') is ['8','8',undefined]
+PASS regexp39.exec('zP') is ['',undefined,undefined]
+PASS regexp40.exec('') is ['',undefined,undefined,undefined,'']
+PASS regexp40.exec('8') is ['8','8','8',undefined,'']
+PASS regexp40.exec('zPz') is ['',undefined,undefined,undefined,'']
+PASS regexp40.exec('zPPz') is ['',undefined,undefined,undefined,'']
+PASS regexp40.exec('zPPPz') is ['',undefined,undefined,undefined,'']
+PASS regexp40.exec('zPPPPz') is ['',undefined,undefined,undefined,'']
+PASS regexp41.exec('Here is a link: http://www.acme.com/our_products/index.html. That is all we want!') is ['http://www.acme.com/our_products/index.html','http://www.acme.com/our_products/index.html','http://','l',undefined]
+PASS regexp42.exec('') is ['',undefined,undefined]
+PASS regexp42.exec('4') is ['4','4','4']
+PASS regexp42.exec('4321') is ['4','4','4']
+PASS /(?!(?=r{0}){2,})|((z)?)?/gi.test('') is true
+PASS regexp43.exec('SSS') is ['']
+PASS regexp44.exec('SSS') is ['',undefined]
+PASS regexp45.exec('vt') is null
+PASS regexp46.exec('5') is null
+PASS regexp46.exec('pk') is ['pk',undefined,undefined]
+PASS regexp46.exec('Xw555') is ['w555','w',undefined]
+PASS regexp46.exec('Xw55pk5') is ['w','w','']
+PASS regexp47.exec('/www.acme.com/this/is/a/path/file.txt') is ['/www.acme.com/this/is/a/path/file.txt','/www.acme.com/this/is/a/path/file.txt',undefined]
+PASS regexp48.exec('http://www.acme.com/this/is/a/path/file.txt') is ['http://www.acme.com/this/is/a/path/file.txt','http','www.acme.com',undefined,'this/is/a/path/file.txt',undefined,undefined]
+PASS regexp49.exec('http://www.acme.com/this/is/a/path/file.txt') is ['http://www.acme.com/this/is/a/path/file.txt',undefined,undefined,'http','www.acme.com',undefined,'this/is/a/path/file.txt',undefined,undefined]
+PASS regexp50.exec('((a)b{28,}c|d)x') is null
+PASS regexp50.exec('abbbbbbbbbbbbbbbbbbbbbbbbbbbbcx') is ['abbbbbbbbbbbbbbbbbbbbbbbbbbbbcx', 'abbbbbbbbbbbbbbbbbbbbbbbbbbbbc', 'a']
+PASS regexp50.exec('dx') is ['dx', 'd', undefined]
+PASS regexp51.exec('abc') is null
+PASS regexp51.exec(s) is [')\9e{-,}P{Any}',')',undefined]
+PASS 'Hi Bob'.match(regexp52) is ['Bob',undefined,'Bob',undefined,undefined]
+PASS regexp53.exec('#') is ['',undefined,'']
+PASS regexp54.exec('#') is ['','',undefined,undefined,'']
+PASS regexp55.exec('#') is ['','']
+PASS regexp56.exec('a') is ['','']
+PASS regexp57.exec('a') is ['a','a']
+PASS regexp58.exec('badbc') is ['a']
+PASS 'Y aaa X Match1 Y aaa Y Match2 Z'.match(regexp59) is ['X Match1 Y','Y Match2 Z']
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("This page tests handling of parentheses subexpressions.");
+
+var regexp1 = /(a|A)(b|B)/;
+shouldBe("regexp1.exec('abc')", "['ab','a','b']");
+
+var regexp2 = /(a((b)|c|d))e/;
+shouldBe("regexp2.exec('abacadabe')", "['abe','ab','b','b']");
+
+var regexp3 = /(a(b|(c)|d))e/;
+shouldBe("regexp3.exec('abacadabe')", "['abe','ab','b',undefined]");
+
+var regexp4 = /(a(b|c|(d)))e/;
+shouldBe("regexp4.exec('abacadabe')", "['abe','ab','b',undefined]");
+
+var regexp5 = /(a((b)|(c)|(d)))e/;
+shouldBe("regexp5.exec('abacadabe')", "['abe','ab','b','b',undefined,undefined]");
+
+var regexp6 = /(a((b)|(c)|(d)))/;
+shouldBe("regexp6.exec('abcde')", "['ab','ab','b','b',undefined,undefined]");
+
+var regexp7 = /(a(b)??)??c/;
+shouldBe("regexp7.exec('abc')", "['abc','ab','b']");
+
+var regexp8 = /(a|(e|q))(x|y)/;
+shouldBe("regexp8.exec('bcaddxqy')" , "['qy','q','q','y']");
+
+var regexp9 = /((t|b)?|a)$/;
+shouldBe("regexp9.exec('asdfjejgsdflaksdfjkeljghkjea')", "['a','a',undefined]");
+
+var regexp10 = /(?:h|e?(?:t|b)?|a?(?:t|b)?)(?:$)/;
+shouldBe("regexp10.exec('asdfjejgsdflaksdfjkeljghat')", "['at']");
+
+var regexp11 = /([Jj]ava([Ss]cript)?)\sis\s(fun\w*)/;
+shouldBeNull("regexp11.exec('Developing with JavaScript is dangerous, do not try it without assistance')");
+
+var regexp12 = /(?:(.+), )?(.+), (..) to (?:(.+), )?(.+), (..)/;
+shouldBe("regexp12.exec('Seattle, WA to Buckley, WA')", "['Seattle, WA to Buckley, WA', undefined, 'Seattle', 'WA', undefined, 'Buckley', 'WA']");
+
+var regexp13 = /(A)?(A.*)/;
+shouldBe("regexp13.exec('zxcasd;fl\ ^AaaAAaaaf;lrlrzs')", "['AaaAAaaaf;lrlrzs',undefined,'AaaAAaaaf;lrlrzs']");
+
+var regexp14 = /(a)|(b)/;
+shouldBe("regexp14.exec('b')", "['b',undefined,'b']");
+
+var regexp15 = /^(?!(ab)de|x)(abd)(f)/;
+shouldBe("regexp15.exec('abdf')", "['abdf',undefined,'abd','f']");
+
+var regexp16 = /(a|A)(b|B)/;
+shouldBe("regexp16.exec('abc')", "['ab','a','b']");
+
+var regexp17 = /(a|d|q|)x/i;
+shouldBe("regexp17.exec('bcaDxqy')", "['Dx','D']");
+
+var regexp18 = /^.*?(:|$)/;
+shouldBe("regexp18.exec('Hello: World')", "['Hello:',':']");
+
+var regexp19 = /(ab|^.{0,2})bar/;
+shouldBe("regexp19.exec('barrel')", "['bar','']");
+
+var regexp20 = /(?:(?!foo)...|^.{0,2})bar(.*)/;
+shouldBe("regexp20.exec('barrel')", "['barrel','rel']");
+shouldBe("regexp20.exec('2barrel')", "['2barrel','rel']");
+
+var regexp21 = /([a-g](b|B)|xyz)/;
+shouldBe("regexp21.exec('abc')", "['ab','ab','b']");
+
+var regexp22 = /(?:^|;)\s*abc=([^;]*)/;
+shouldBeNull("regexp22.exec('abcdlskfgjdslkfg')");
+
+var regexp23 = /"[^<"]*"|'[^<']*'/;
+shouldBe("regexp23.exec('<html xmlns=\"http://www.w3.org/1999/xhtml\"')", "['\"http://www.w3.org/1999/xhtml\"']");
+
+var regexp24 = /^(?:(?=abc)\w{3}:|\d\d)$/;
+shouldBeNull("regexp24.exec('123')");
+
+var regexp25 = /^\s*(\*|[\w\-]+)(\b|$)?/;
+shouldBe("regexp25.exec('this is a test')", "['this','this',undefined]");
+shouldBeNull("regexp25.exec('!this is a test')");
+
+var regexp26 = /a(b)(a*)|aaa/;
+shouldBe("regexp26.exec('aaa')", "['aaa',undefined,undefined]");
+
+var regexp27 = new RegExp(
+ "^" +
+ "(?:" +
+ "([^:/?#]+):" + /* scheme */
+ ")?" +
+ "(?:" +
+ "(//)" + /* authorityRoot */
+ "(" + /* authority */
+ "(?:" +
+ "(" + /* userInfo */
+ "([^:@]*)" + /* user */
+ ":?" +
+ "([^:@]*)" + /* password */
+ ")?" +
+ "@" +
+ ")?" +
+ "([^:/?#]*)" + /* domain */
+ "(?::(\\d*))?" + /* port */
+ ")" +
+ ")?" +
+ "([^?#]*)" + /*path*/
+ "(?:\\?([^#]*))?" + /* queryString */
+ "(?:#(.*))?" /*fragment */
+);
+shouldBe("regexp27.exec('file:///Users/Someone/Desktop/HelloWorld/index.html')", "['file:///Users/Someone/Desktop/HelloWorld/index.html','file','//','',undefined,undefined,undefined,'',undefined,'/Users/Someone/Desktop/HelloWorld/index.html',undefined,undefined]");
+
+var regexp28 = new RegExp(
+ "^" +
+ "(?:" +
+ "([^:/?#]+):" + /* scheme */
+ ")?" +
+ "(?:" +
+ "(//)" + /* authorityRoot */
+ "(" + /* authority */
+ "(" + /* userInfo */
+ "([^:@]*)" + /* user */
+ ":?" +
+ "([^:@]*)" + /* password */
+ ")?" +
+ "@" +
+ ")" +
+ ")?"
+);
+shouldBe("regexp28.exec('file:///Users/Someone/Desktop/HelloWorld/index.html')", "['file:','file',undefined,undefined,undefined,undefined,undefined]");
+
+var regexp29 = /^\s*((\[[^\]]+\])|(u?)("[^"]+"))\s*/;
+shouldBeNull("regexp29.exec('Committer:')");
+
+var regexp30 = /^\s*((\[[^\]]+\])|m(u?)("[^"]+"))\s*/;
+shouldBeNull("regexp30.exec('Committer:')");
+
+var regexp31 = /^\s*(m(\[[^\]]+\])|m(u?)("[^"]+"))\s*/;
+shouldBeNull("regexp31.exec('Committer:')");
+
+var regexp32 = /\s*(m(\[[^\]]+\])|m(u?)("[^"]+"))\s*/;
+shouldBeNull("regexp32.exec('Committer:')");
+
+var regexp33 = RegExp('^(?:(?:(a)(xyz|[^>"\'\s]*)?)|(/?>)|.[^\w\s>]*)');
+shouldBe("regexp33.exec('> <head>')","['>',undefined,undefined,'>']");
+
+var regexp34 = /(?:^|\b)btn-\S+/;
+shouldBeNull("regexp34.exec('xyz123')");
+shouldBe("regexp34.exec('btn-abc')","['btn-abc']");
+shouldBeNull("regexp34.exec('btn- abc')");
+shouldBeNull("regexp34.exec('XXbtn-abc')");
+shouldBe("regexp34.exec('XX btn-abc')","['btn-abc']");
+
+var regexp35 = /^((a|b)(x|xxx)|)$/;
+shouldBe("regexp35.exec('ax')", "['ax','ax','a','x']");
+shouldBeNull("regexp35.exec('axx')");
+shouldBe("regexp35.exec('axxx')", "['axxx','axxx','a','xxx']");
+shouldBe("regexp35.exec('bx')", "['bx','bx','b','x']");
+shouldBeNull("regexp35.exec('bxx')");
+shouldBe("regexp35.exec('bxxx')", "['bxxx','bxxx','b','xxx']");
+
+var regexp36 = /^((\/|\.|\-)(\d\d|\d\d\d\d)|)$/;
+shouldBe("regexp36.exec('/2011')", "['/2011','/2011','/','2011']");
+shouldBe("regexp36.exec('/11')", "['/11','/11','/','11']");
+shouldBeNull("regexp36.exec('/123')");
+
+var regexp37 = /^([1][0-2]|[0]\d|\d)(\/|\.|\-)([0-2]\d|[3][0-1]|\d)((\/|\.|\-)(\d\d|\d\d\d\d)|)$/;
+shouldBe("regexp37.exec('7/4/1776')", "['7/4/1776','7','/','4','/1776','/','1776']");
+shouldBe("regexp37.exec('07-04-1776')", "['07-04-1776','07','-','04','-1776','-','1776']");
+
+var regexp38 = /^(z|(x|xx)|b|)$/;
+shouldBe("regexp38.exec('xx')", "['xx','xx','xx']");
+shouldBe("regexp38.exec('b')", "['b','b',undefined]");
+shouldBe("regexp38.exec('z')", "['z','z',undefined]");
+shouldBe("regexp38.exec('')", "['','',undefined]");
+
+var regexp39 = /(8|((?=P)))?/;
+shouldBe("regexp39.exec('')", "['',undefined,undefined]");
+shouldBe("regexp39.exec('8')", "['8','8',undefined]");
+shouldBe("regexp39.exec('zP')", "['',undefined,undefined]");
+
+var regexp40 = /((8)|((?=P){4}))?()/;
+shouldBe("regexp40.exec('')", "['',undefined,undefined,undefined,'']");
+shouldBe("regexp40.exec('8')", "['8','8','8',undefined,'']");
+shouldBe("regexp40.exec('zPz')", "['',undefined,undefined,undefined,'']");
+shouldBe("regexp40.exec('zPPz')", "['',undefined,undefined,undefined,'']");
+shouldBe("regexp40.exec('zPPPz')", "['',undefined,undefined,undefined,'']");
+shouldBe("regexp40.exec('zPPPPz')", "['',undefined,undefined,undefined,'']");
+
+var regexp41 = /(([\w\-]+:\/\/?|www[.])[^\s()<>]+(?:([\w\d]+)|([^\[:punct:\]\s()<>\W]|\/)))/;
+shouldBe("regexp41.exec('Here is a link: http://www.acme.com/our_products/index.html. That is all we want!')", "['http://www.acme.com/our_products/index.html','http://www.acme.com/our_products/index.html','http://','l',undefined]");
+
+var regexp42 = /((?:(4)?))?/;
+shouldBe("regexp42.exec('')", "['',undefined,undefined]");
+shouldBe("regexp42.exec('4')", "['4','4','4']");
+shouldBe("regexp42.exec('4321')", "['4','4','4']");
+
+shouldBeTrue("/(?!(?=r{0}){2,})|((z)?)?/gi.test('')");
+
+var regexp43 = /(?!(?:\1+s))/;
+shouldBe("regexp43.exec('SSS')", "['']");
+
+var regexp44 = /(?!(?:\3+(s+?)))/g;
+shouldBe("regexp44.exec('SSS')", "['',undefined]");
+
+var regexp45 = /((?!(?:|)v{2,}|))/;
+shouldBeNull("regexp45.exec('vt')");
+
+var regexp46 = /(w)(?:5{3}|())|pk/;
+shouldBeNull("regexp46.exec('5')");
+shouldBe("regexp46.exec('pk')", "['pk',undefined,undefined]");
+shouldBe("regexp46.exec('Xw555')", "['w555','w',undefined]");
+shouldBe("regexp46.exec('Xw55pk5')", "['w','w','']");
+
+var regexp47 = /(.*?)(?:(?:\?(.*?)?)?)(?:(?:#)?)$/;
+shouldBe("regexp47.exec('/www.acme.com/this/is/a/path/file.txt')", "['/www.acme.com/this/is/a/path/file.txt','/www.acme.com/this/is/a/path/file.txt',undefined]");
+
+var regexp48 = /^(?:(\w+):\/*([\w\.\-\d]+)(?::(\d+)|)(?=(?:\/|$))|)(?:$|\/?(.*?)(?:\?(.*?)?|)(?:#(.*)|)$)/;
+/* The regexp on the prior line confuses Xcode syntax highlighting, this coment fixes it! */
+shouldBe("regexp48.exec('http://www.acme.com/this/is/a/path/file.txt')", "['http://www.acme.com/this/is/a/path/file.txt','http','www.acme.com',undefined,'this/is/a/path/file.txt',undefined,undefined]");
+
+var regexp49 = /(?:([^:]*?)(?:(?:\?(.*?)?)?)(?:(?:#)?)$)|(?:^(?:(\w+):\/*([\w\.\-\d]+)(?::(\d+)|)(?=(?:\/|$))|)(?:$|\/?(.*?)(?:\?(.*?)?|)(?:#(.*)|)$))/;
+/* The regexp on the prior line confuses Xcode syntax highlighting, this coment fixes it! */
+shouldBe("regexp49.exec('http://www.acme.com/this/is/a/path/file.txt')", "['http://www.acme.com/this/is/a/path/file.txt',undefined,undefined,'http','www.acme.com',undefined,'this/is/a/path/file.txt',undefined,undefined]");
+
+var regexp50 = /((a)b{28,}c|d)x/;
+shouldBeNull("regexp50.exec('((a)b{28,}c|d)x')");
+shouldBe("regexp50.exec('abbbbbbbbbbbbbbbbbbbbbbbbbbbbcx')", "['abbbbbbbbbbbbbbbbbbbbbbbbbbbbcx', 'abbbbbbbbbbbbbbbbbbbbbbbbbbbbc', 'a']");
+shouldBe("regexp50.exec('dx')", "['dx', 'd', undefined]");
+
+var s = "((.\s{-}).{28,}\P{Yi}?{,30}\|.)\x9e{-,}\P{Any}";
+var regexp51 = new RegExp(s);
+shouldBeNull("regexp51.exec('abc')");
+shouldBe("regexp51.exec(s)", "[')\x9e{-,}P{Any}',')',undefined]");
+
+var regexp52 = /(Rob)|(Bob)|(Robert)|(Bobby)/;
+shouldBe("'Hi Bob'.match(regexp52)", "['Bob',undefined,'Bob',undefined,undefined]");
+
+// Test cases discovered by fuzzing that crashed the compiler.
+var regexp53 = /(?=(?:(?:(gB)|(?!cs|<))((?=(?!v6){0,})))|(?=#)+?)/m;
+shouldBe("regexp53.exec('#')", "['',undefined,'']");
+var regexp54 = /((?:(?:()|(?!))((?=(?!))))|())/m;
+shouldBe("regexp54.exec('#')", "['','',undefined,undefined,'']");
+var regexp55 = /(?:(?:(?:a?|(?:))((?:)))|a?)/m;
+shouldBe("regexp55.exec('#')", "['','']");
+
+// Test evaluation order of empty subpattern alternatives.
+var regexp56 = /(|a)/;
+shouldBe("regexp56.exec('a')", "['','']");
+var regexp57 = /(a|)/;
+shouldBe("regexp57.exec('a')", "['a','a']");
+
+// Tests that non-greedy repeat quantified parentheses will backtrack through multiple frames of subpattern matches.
+var regexp58 = /a|b(?:[^b])*?c/;
+shouldBe("regexp58.exec('badbc')", "['a']");
+var regexp59 = /(X(?:.(?!X))*?Y)|(Y(?:.(?!Y))*?Z)/g;
+shouldBe("'Y aaa X Match1 Y aaa Y Match2 Z'.match(regexp59)", "['X Match1 Y','Y Match2 Z']");
+
--- /dev/null
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+A chunk of our port of PCRE's test suite, adapted to be more applicable to JavaScript.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS regex0.exec(input0); is results
+PASS regex0.exec(input1); is results
+PASS regex0.exec(input2); is results
+PASS regex0.exec(input3); is results
+PASS regex1.exec(input0); is results
+PASS regex1.exec(input1); is results
+PASS regex1.exec(input2); is results
+PASS regex1.exec(input3); is results
+PASS regex1.exec(input4); is results
+PASS regex2.exec(input0); is results
+PASS regex3.exec(input0); is results
+PASS regex4.exec(input0); is results
+PASS regex5.exec(input0); is results
+PASS regex6.exec(input0); is results
+PASS regex7.exec(input0); is results
+PASS regex8.exec(input0); is results
+PASS regex9.exec(input0); is results
+PASS regex10.exec(input0); is results
+PASS regex11.exec(input0); is results
+PASS regex12.exec(input0); is results
+PASS regex12.exec(input1); is results
+PASS regex12.exec(input2); is results
+PASS regex12.exec(input3); is results
+PASS regex12.exec(input4); is results
+PASS regex13.exec(input0); is results
+PASS regex13.exec(input1); is results
+PASS regex13.exec(input2); is results
+PASS regex13.exec(input3); is results
+PASS regex13.exec(input4); is results
+PASS regex13.exec(input5); is results
+PASS regex14.exec(input0); is results
+PASS regex14.exec(input1); is results
+PASS regex14.exec(input2); is results
+PASS regex14.exec(input3); is results
+PASS regex14.exec(input4); is results
+PASS regex14.exec(input5); is results
+PASS regex15.exec(input0); is results
+PASS regex15.exec(input1); is results
+PASS regex15.exec(input2); is results
+PASS regex15.exec(input3); is results
+PASS regex15.exec(input4); is results
+PASS regex15.exec(input5); is results
+PASS regex15.exec(input6); is results
+PASS regex15.exec(input7); is results
+PASS regex15.exec(input8); is results
+PASS regex16.exec(input0); is results
+PASS regex16.exec(input1); is results
+PASS regex16.exec(input2); is results
+PASS regex16.exec(input3); is results
+PASS regex16.exec(input4); is results
+PASS regex16.exec(input5); is results
+PASS regex16.exec(input6); is results
+PASS regex16.exec(input7); is results
+PASS regex16.exec(input8); is results
+PASS regex17.exec(input0); is results
+PASS regex21.exec(input0); is results
+PASS regex21.exec(input1); is results
+PASS regex22.exec(input0); is results
+PASS regex22.exec(input1); is results
+PASS regex22.exec(input2); is results
+PASS regex30.exec(input0); is results
+PASS regex31.exec(input0); is results
+PASS regex32.exec(input0); is results
+PASS regex33.exec(input0); is results
+PASS regex34.exec(input0); is results
+PASS regex35.exec(input0); is results
+PASS regex36.exec(input0); is results
+PASS regex37.exec(input0); is results
+PASS regex37.exec(input1); is results
+PASS regex38.exec(input0); is results
+PASS regex38.exec(input1); is results
+PASS regex39.exec(input0); is results
+PASS regex39.exec(input1); is results
+PASS regex40.exec(input0); is results
+PASS regex41.exec(input0); is results
+PASS regex42.exec(input0); is results
+PASS regex43.exec(input0); is results
+PASS regex44.exec(input0); is results
+PASS regex45.exec(input0); is results
+PASS regex47.exec(input0); is results
+PASS regex48.exec(input0); is results
+PASS regex49.exec(input0); is results
+PASS regex49.exec(input1); is results
+PASS regex50.exec(input0); is results
+PASS regex50.exec(input1); is results
+PASS regex51.exec(input0); is results
+PASS regex52.exec(input0); is results
+PASS regex53.exec(input0); is results
+PASS regex53.exec(input1); is results
+PASS regex54.exec(input0); is results
+PASS regex54.exec(input1); is results
+PASS regex54.exec(input2); is results
+PASS regex54.exec(input3); is results
+PASS regex55.exec(input0); is results
+PASS regex55.exec(input1); is results
+PASS regex55.exec(input2); is results
+PASS regex55.exec(input3); is results
+PASS regex56.exec(input0); is results
+PASS regex57.exec(input0); is results
+PASS regex57.exec(input1); is results
+PASS regex57.exec(input2); is results
+PASS regex58.exec(input0); is results
+PASS regex58.exec(input1); is results
+PASS regex58.exec(input2); is results
+PASS regex59.exec(input0); is results
+PASS regex59.exec(input1); is results
+PASS regex60.exec(input0); is results
+PASS regex60.exec(input1); is results
+PASS regex60.exec(input2); is results
+PASS regex61.exec(input0); is results
+PASS regex61.exec(input1); is results
+PASS regex61.exec(input2); is results
+PASS regex62.exec(input0); is results
+PASS regex63.exec(input0); is results
+PASS regex63.exec(input1); is results
+PASS regex63.exec(input2); is results
+PASS regex64.exec(input0); is results
+PASS regex64.exec(input1); is results
+PASS regex64.exec(input2); is results
+PASS regex65.exec(input0); is results
+PASS regex65.exec(input1); is results
+PASS regex66.exec(input0); is results
+PASS regex66.exec(input1); is results
+PASS regex66.exec(input2); is results
+PASS regex67.exec(input0); is results
+PASS regex67.exec(input1); is results
+PASS regex67.exec(input2); is results
+PASS regex68.exec(input0); is results
+PASS regex68.exec(input1); is results
+PASS regex69.exec(input0); is results
+PASS regex69.exec(input1); is results
+PASS regex69.exec(input2); is results
+PASS regex70.exec(input0); is results
+PASS regex70.exec(input1); is results
+PASS regex70.exec(input2); is results
+PASS regex71.exec(input0); is results
+PASS regex71.exec(input1); is results
+PASS regex71.exec(input2); is results
+PASS regex72.exec(input0); is results
+PASS regex72.exec(input1); is results
+PASS regex72.exec(input2); is results
+PASS regex73.exec(input0); is results
+PASS regex73.exec(input1); is results
+PASS regex74.exec(input0); is results
+PASS regex74.exec(input1); is results
+PASS regex74.exec(input2); is results
+PASS regex75.exec(input0); is results
+PASS regex75.exec(input1); is results
+PASS regex75.exec(input2); is results
+PASS regex75.exec(input3); is results
+PASS regex75.exec(input4); is results
+PASS regex76.exec(input0); is results
+PASS regex76.exec(input1); is results
+PASS regex76.exec(input2); is results
+PASS regex77.exec(input0); is results
+PASS regex77.exec(input1); is results
+PASS regex77.exec(input2); is results
+PASS regex77.exec(input3); is results
+PASS regex78.exec(input0); is results
+PASS regex78.exec(input1); is results
+PASS regex78.exec(input2); is results
+PASS regex78.exec(input3); is results
+PASS regex78.exec(input4); is results
+PASS regex78.exec(input5); is results
+PASS regex79.exec(input0); is results
+PASS regex79.exec(input1); is results
+PASS regex79.exec(input2); is results
+PASS regex80.exec(input0); is results
+PASS regex80.exec(input1); is results
+PASS regex80.exec(input2); is results
+PASS regex81.exec(input0); is results
+PASS regex81.exec(input1); is results
+PASS regex81.exec(input2); is results
+PASS regex82.exec(input0); is results
+PASS regex82.exec(input1); is results
+PASS regex82.exec(input2); is results
+PASS regex86.exec(input0); is results
+PASS regex86.exec(input1); is results
+PASS regex86.exec(input2); is results
+PASS regex86.exec(input3); is results
+PASS regex86.exec(input4); is results
+PASS regex87.exec(input0); is results
+PASS regex87.exec(input1); is results
+PASS regex87.exec(input2); is results
+PASS regex87.exec(input3); is results
+PASS regex87.exec(input4); is results
+PASS regex87.exec(input5); is results
+PASS regex88.exec(input0); is results
+PASS regex88.exec(input1); is results
+PASS regex88.exec(input2); is results
+PASS regex88.exec(input3); is results
+PASS regex88.exec(input4); is results
+PASS regex91.exec(input0); is results
+PASS regex91.exec(input1); is results
+PASS regex91.exec(input2); is results
+PASS regex91.exec(input3); is results
+PASS regex91.exec(input4); is results
+PASS regex92.exec(input0); is results
+PASS regex93.exec(input0); is results
+PASS regex94.exec(input0); is results
+PASS regex95.exec(input0); is results
+PASS regex95.exec(input1); is results
+PASS regex96.exec(input0); is results
+PASS regex97.exec(input0); is results
+PASS regex98.exec(input0); is results
+PASS regex99.exec(input0); is results
+PASS regex100.exec(input0); is results
+PASS regex102.exec(input0); is results
+PASS regex103.exec(input0); is results
+PASS regex104.exec(input0); is results
+PASS regex105.exec(input0); is results
+PASS regex105.exec(input1); is results
+PASS regex106.exec(input0); is results
+PASS regex107.exec(input0); is results
+PASS input0.match(regexGlobal0); is results
+PASS input1.match(regexGlobal0); is results
+PASS input0.match(regexGlobal1); is results
+PASS input0.match(regexGlobal2); is results
+PASS input0.match(regexGlobal3); is results
+PASS input0.match(regexGlobal4); is results
+PASS input0.match(regexGlobal5); is results
+PASS input0.match(regexGlobal6); is results
+PASS input0.match(regexGlobal7); is results
+PASS input0.match(regexGlobal8); is results
+PASS input0.match(regexGlobal9); is results
+PASS input0.match(regexGlobal10); is results
+PASS input0.match(regexGlobal11); is results
+PASS input0.match(regexGlobal12); is results
+PASS input0.match(regexGlobal13); is results
+PASS input0.match(regexGlobal14); is results
+PASS input0.match(regexGlobal15); is results
+PASS input0.match(regexGlobal16); is results
+PASS input0.match(regexGlobal17); is results
+PASS input0.match(regexGlobal19); is results
+PASS input0.match(regexGlobal21); is results
+PASS input0.match(regexGlobal24); is results
+PASS input0.match(regexGlobal25); is results
+PASS input0.match(regexGlobal26); is results
+PASS input0.match(regexGlobal27); is results
+PASS input0.match(regexGlobal28); is results
+PASS input1.match(regexGlobal28); is results
+PASS input0.match(regexGlobal29); is results
+PASS input1.match(regexGlobal29); is results
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"A chunk of our port of PCRE's test suite, adapted to be more applicable to JavaScript."
+);
+
+var regex0 = /a.b/;
+var input0 = "acb";
+var results = ["acb"];
+shouldBe('regex0.exec(input0);', 'results');
+var input1 = "a\x7fb";
+var results = ["a\u007fb"];
+shouldBe('regex0.exec(input1);', 'results');
+var input2 = "a\u0100b";
+var results = ["a\u0100b"];
+shouldBe('regex0.exec(input2);', 'results');
+// Failers
+var input3 = "a\nb";
+var results = null;
+shouldBe('regex0.exec(input3);', 'results');
+
+var regex1 = /a(.{3})b/;
+var input0 = "a\u4000xyb";
+var results = ["a\u4000xyb", "\u4000xy"];
+shouldBe('regex1.exec(input0);', 'results');
+var input1 = "a\u4000\x7fyb";
+var results = ["a\u4000\u007fyb", "\u4000\u007fy"];
+shouldBe('regex1.exec(input1);', 'results');
+var input2 = "a\u4000\u0100yb";
+var results = ["a\u4000\u0100yb", "\u4000\u0100y"];
+shouldBe('regex1.exec(input2);', 'results');
+// Failers
+var input3 = "a\u4000b";
+var results = null;
+shouldBe('regex1.exec(input3);', 'results');
+var input4 = "ac\ncb";
+var results = null;
+shouldBe('regex1.exec(input4);', 'results');
+
+var regex2 = /a(.*?)(.)/;
+var input0 = "a\xc0\x88b";
+var results = ["a\xc0", "", "\xc0"];
+shouldBe('regex2.exec(input0);', 'results');
+
+var regex3 = /a(.*?)(.)/;
+var input0 = "a\u0100b";
+var results = ["a\u0100", "", "\u0100"];
+shouldBe('regex3.exec(input0);', 'results');
+
+var regex4 = /a(.*)(.)/;
+var input0 = "a\xc0\x88b";
+var results = ["a\xc0\x88b", "\xc0\x88", "b"];
+shouldBe('regex4.exec(input0);', 'results');
+
+var regex5 = /a(.*)(.)/;
+var input0 = "a\u0100b";
+var results = ["a\u0100b", "\u0100", "b"];
+shouldBe('regex5.exec(input0);', 'results');
+
+var regex6 = /a(.)(.)/;
+var input0 = "a\xc0\x92bcd";
+var results = ["a\xc0\x92", "\xc0", "\x92"];
+shouldBe('regex6.exec(input0);', 'results');
+
+var regex7 = /a(.)(.)/;
+var input0 = "a\u0240bcd";
+var results = ["a\u0240b", "\u0240", "b"];
+shouldBe('regex7.exec(input0);', 'results');
+
+var regex8 = /a(.?)(.)/;
+var input0 = "a\xc0\x92bcd";
+var results = ["a\xc0\x92", "\xc0", "\x92"];
+shouldBe('regex8.exec(input0);', 'results');
+
+var regex9 = /a(.?)(.)/;
+var input0 = "a\u0240bcd";
+var results = ["a\u0240b", "\u0240", "b"];
+shouldBe('regex9.exec(input0);', 'results');
+
+var regex10 = /a(.??)(.)/;
+var input0 = "a\xc0\x92bcd";
+var results = ["a\xc0", "", "\xc0"];
+shouldBe('regex10.exec(input0);', 'results');
+
+var regex11 = /a(.??)(.)/;
+var input0 = "a\u0240bcd";
+var results = ["a\u0240", "", "\u0240"];
+shouldBe('regex11.exec(input0);', 'results');
+
+var regex12 = /a(.{3})b/;
+var input0 = "a\u1234xyb";
+var results = ["a\u1234xyb", "\u1234xy"];
+shouldBe('regex12.exec(input0);', 'results');
+var input1 = "a\u1234\u4321yb";
+var results = ["a\u1234\u4321yb", "\u1234\u4321y"];
+shouldBe('regex12.exec(input1);', 'results');
+var input2 = "a\u1234\u4321\u3412b";
+var results = ["a\u1234\u4321\u3412b", "\u1234\u4321\u3412"];
+shouldBe('regex12.exec(input2);', 'results');
+// Failers
+var input3 = "a\u1234b";
+var results = null;
+shouldBe('regex12.exec(input3);', 'results');
+var input4 = "ac\ncb";
+var results = null;
+shouldBe('regex12.exec(input4);', 'results');
+
+var regex13 = /a(.{3,})b/;
+var input0 = "a\u1234xyb";
+var results = ["a\u1234xyb", "\u1234xy"];
+shouldBe('regex13.exec(input0);', 'results');
+var input1 = "a\u1234\u4321yb";
+var results = ["a\u1234\u4321yb", "\u1234\u4321y"];
+shouldBe('regex13.exec(input1);', 'results');
+var input2 = "a\u1234\u4321\u3412b";
+var results = ["a\u1234\u4321\u3412b", "\u1234\u4321\u3412"];
+shouldBe('regex13.exec(input2);', 'results');
+var input3 = "axxxxbcdefghijb";
+var results = ["axxxxbcdefghijb", "xxxxbcdefghij"];
+shouldBe('regex13.exec(input3);', 'results');
+var input4 = "a\u1234\u4321\u3412\u3421b";
+var results = ["a\u1234\u4321\u3412\u3421b", "\u1234\u4321\u3412\u3421"];
+shouldBe('regex13.exec(input4);', 'results');
+// Failers
+var input5 = "a\u1234b";
+var results = null;
+shouldBe('regex13.exec(input5);', 'results');
+
+var regex14 = /a(.{3,}?)b/;
+var input0 = "a\u1234xyb";
+var results = ["a\u1234xyb", "\u1234xy"];
+shouldBe('regex14.exec(input0);', 'results');
+var input1 = "a\u1234\u4321yb";
+var results = ["a\u1234\u4321yb", "\u1234\u4321y"];
+shouldBe('regex14.exec(input1);', 'results');
+var input2 = "a\u1234\u4321\u3412b";
+var results = ["a\u1234\u4321\u3412b", "\u1234\u4321\u3412"];
+shouldBe('regex14.exec(input2);', 'results');
+var input3 = "axxxxbcdefghijb";
+var results = ["axxxxb", "xxxx"];
+shouldBe('regex14.exec(input3);', 'results');
+var input4 = "a\u1234\u4321\u3412\u3421b";
+var results = ["a\u1234\u4321\u3412\u3421b", "\u1234\u4321\u3412\u3421"];
+shouldBe('regex14.exec(input4);', 'results');
+// Failers
+var input5 = "a\u1234b";
+var results = null;
+shouldBe('regex14.exec(input5);', 'results');
+
+var regex15 = /a(.{3,5})b/;
+var input0 = "a\u1234xyb";
+var results = ["a\u1234xyb", "\u1234xy"];
+shouldBe('regex15.exec(input0);', 'results');
+var input1 = "a\u1234\u4321yb";
+var results = ["a\u1234\u4321yb", "\u1234\u4321y"];
+shouldBe('regex15.exec(input1);', 'results');
+var input2 = "a\u1234\u4321\u3412b";
+var results = ["a\u1234\u4321\u3412b", "\u1234\u4321\u3412"];
+shouldBe('regex15.exec(input2);', 'results');
+var input3 = "axxxxbcdefghijb";
+var results = ["axxxxb", "xxxx"];
+shouldBe('regex15.exec(input3);', 'results');
+var input4 = "a\u1234\u4321\u3412\u3421b";
+var results = ["a\u1234\u4321\u3412\u3421b", "\u1234\u4321\u3412\u3421"];
+shouldBe('regex15.exec(input4);', 'results');
+var input5 = "axbxxbcdefghijb";
+var results = ["axbxxb", "xbxx"];
+shouldBe('regex15.exec(input5);', 'results');
+var input6 = "axxxxxbcdefghijb";
+var results = ["axxxxxb", "xxxxx"];
+shouldBe('regex15.exec(input6);', 'results');
+// Failers
+var input7 = "a\u1234b";
+var results = null;
+shouldBe('regex15.exec(input7);', 'results');
+var input8 = "axxxxxxbcdefghijb";
+var results = null;
+shouldBe('regex15.exec(input8);', 'results');
+
+var regex16 = /a(.{3,5}?)b/;
+var input0 = "a\u1234xyb";
+var results = ["a\u1234xyb", "\u1234xy"];
+shouldBe('regex16.exec(input0);', 'results');
+var input1 = "a\u1234\u4321yb";
+var results = ["a\u1234\u4321yb", "\u1234\u4321y"];
+shouldBe('regex16.exec(input1);', 'results');
+var input2 = "a\u1234\u4321\u3412b";
+var results = ["a\u1234\u4321\u3412b", "\u1234\u4321\u3412"];
+shouldBe('regex16.exec(input2);', 'results');
+var input3 = "axxxxbcdefghijb";
+var results = ["axxxxb", "xxxx"];
+shouldBe('regex16.exec(input3);', 'results');
+var input4 = "a\u1234\u4321\u3412\u3421b";
+var results = ["a\u1234\u4321\u3412\u3421b", "\u1234\u4321\u3412\u3421"];
+shouldBe('regex16.exec(input4);', 'results');
+var input5 = "axbxxbcdefghijb";
+var results = ["axbxxb", "xbxx"];
+shouldBe('regex16.exec(input5);', 'results');
+var input6 = "axxxxxbcdefghijb";
+var results = ["axxxxxb", "xxxxx"];
+shouldBe('regex16.exec(input6);', 'results');
+// Failers
+var input7 = "a\u1234b";
+var results = null;
+shouldBe('regex16.exec(input7);', 'results');
+var input8 = "axxxxxxbcdefghijb";
+var results = null;
+shouldBe('regex16.exec(input8);', 'results');
+
+var regex17 = /^[a\u00c0]/;
+// Failers
+var input0 = "\u0100";
+var results = null;
+shouldBe('regex17.exec(input0);', 'results');
+
+var regex21 = /(?:\u0100){3}b/;
+var input0 = "\u0100\u0100\u0100b";
+var results = ["\u0100\u0100\u0100b"];
+shouldBe('regex21.exec(input0);', 'results');
+// Failers
+var input1 = "\u0100\u0100b";
+var results = null;
+shouldBe('regex21.exec(input1);', 'results');
+
+var regex22 = /\u00ab/;
+var input0 = "\u00ab";
+var results = ["\u00ab"];
+shouldBe('regex22.exec(input0);', 'results');
+var input1 = "\xc2\xab";
+var results = ["\u00ab"];
+shouldBe('regex22.exec(input1);', 'results');
+// Failers
+var input2 = "\x00{ab}";
+var results = null;
+shouldBe('regex22.exec(input2);', 'results');
+
+var regex30 = /^[^a]{2}/;
+var input0 = "\u0100bc";
+var results = ["\u0100b"];
+shouldBe('regex30.exec(input0);', 'results');
+
+var regex31 = /^[^a]{2,}/;
+var input0 = "\u0100bcAa";
+var results = ["\u0100bcA"];
+shouldBe('regex31.exec(input0);', 'results');
+
+var regex32 = /^[^a]{2,}?/;
+var input0 = "\u0100bca";
+var results = ["\u0100b"];
+shouldBe('regex32.exec(input0);', 'results');
+
+var regex33 = /^[^a]{2}/i;
+var input0 = "\u0100bc";
+var results = ["\u0100b"];
+shouldBe('regex33.exec(input0);', 'results');
+
+var regex34 = /^[^a]{2,}/i;
+var input0 = "\u0100bcAa";
+var results = ["\u0100bc"];
+shouldBe('regex34.exec(input0);', 'results');
+
+var regex35 = /^[^a]{2,}?/i;
+var input0 = "\u0100bca";
+var results = ["\u0100b"];
+shouldBe('regex35.exec(input0);', 'results');
+
+var regex36 = /\u0100{0,0}/;
+var input0 = "abcd";
+var results = [""];
+shouldBe('regex36.exec(input0);', 'results');
+
+var regex37 = /\u0100?/;
+var input0 = "abcd";
+var results = [""];
+shouldBe('regex37.exec(input0);', 'results');
+var input1 = "\u0100\u0100";
+var results = ["\u0100"];
+shouldBe('regex37.exec(input1);', 'results');
+
+var regex38 = /\u0100{0,3}/;
+var input0 = "\u0100\u0100";
+var results = ["\u0100\u0100"];
+shouldBe('regex38.exec(input0);', 'results');
+var input1 = "\u0100\u0100\u0100\u0100";
+var results = ["\u0100\u0100\u0100"];
+shouldBe('regex38.exec(input1);', 'results');
+
+var regex39 = /\u0100*/;
+var input0 = "abce";
+var results = [""];
+shouldBe('regex39.exec(input0);', 'results');
+var input1 = "\u0100\u0100\u0100\u0100";
+var results = ["\u0100\u0100\u0100\u0100"];
+shouldBe('regex39.exec(input1);', 'results');
+
+var regex40 = /\u0100{1,1}/;
+var input0 = "abcd\u0100\u0100\u0100\u0100";
+var results = ["\u0100"];
+shouldBe('regex40.exec(input0);', 'results');
+
+var regex41 = /\u0100{1,3}/;
+var input0 = "abcd\u0100\u0100\u0100\u0100";
+var results = ["\u0100\u0100\u0100"];
+shouldBe('regex41.exec(input0);', 'results');
+
+var regex42 = /\u0100+/;
+var input0 = "abcd\u0100\u0100\u0100\u0100";
+var results = ["\u0100\u0100\u0100\u0100"];
+shouldBe('regex42.exec(input0);', 'results');
+
+var regex43 = /\u0100{3}/;
+var input0 = "abcd\u0100\u0100\u0100XX";
+var results = ["\u0100\u0100\u0100"];
+shouldBe('regex43.exec(input0);', 'results');
+
+var regex44 = /\u0100{3,5}/;
+var input0 = "abcd\u0100\u0100\u0100\u0100\u0100\u0100\u0100XX";
+var results = ["\u0100\u0100\u0100\u0100\u0100"];
+shouldBe('regex44.exec(input0);', 'results');
+
+var regex45 = /\u0100{3,}/;
+var input0 = "abcd\u0100\u0100\u0100\u0100\u0100\u0100\u0100XX";
+var results = ["\u0100\u0100\u0100\u0100\u0100\u0100\u0100"];
+shouldBe('regex45.exec(input0);', 'results');
+
+var regex47 = /\D*/;
+var input0 = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
+var results = ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"];
+shouldBe('regex47.exec(input0);', 'results');
+
+var regex48 = /\D*/;
+var input0 = "\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100";
+var results = ["\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100\u0100"];
+shouldBe('regex48.exec(input0);', 'results');
+
+var regex49 = /\D/;
+var input0 = "1X2";
+var results = ["X"];
+shouldBe('regex49.exec(input0);', 'results');
+var input1 = "1\u01002";
+var results = ["\u0100"];
+shouldBe('regex49.exec(input1);', 'results');
+
+var regex50 = />\S/;
+var input0 = "> >X Y";
+var results = [">X"];
+shouldBe('regex50.exec(input0);', 'results');
+var input1 = "> >\u0100 Y";
+var results = [">\u0100"];
+shouldBe('regex50.exec(input1);', 'results');
+
+var regex51 = /\d/;
+var input0 = "\u01003";
+var results = ["3"];
+shouldBe('regex51.exec(input0);', 'results');
+
+var regex52 = /\s/;
+var input0 = "\u0100 X";
+var results = [" "];
+shouldBe('regex52.exec(input0);', 'results');
+
+var regex53 = /\D+/;
+var input0 = "12abcd34";
+var results = ["abcd"];
+shouldBe('regex53.exec(input0);', 'results');
+// Failers
+var input1 = "1234";
+var results = null;
+shouldBe('regex53.exec(input1);', 'results');
+
+var regex54 = /\D{2,3}/;
+var input0 = "12abcd34";
+var results = ["abc"];
+shouldBe('regex54.exec(input0);', 'results');
+var input1 = "12ab34";
+var results = ["ab"];
+shouldBe('regex54.exec(input1);', 'results');
+// Failers
+var input2 = "1234";
+var results = null;
+shouldBe('regex54.exec(input2);', 'results');
+var input3 = "12a34";
+var results = null;
+shouldBe('regex54.exec(input3);', 'results');
+
+var regex55 = /\D{2,3}?/;
+var input0 = "12abcd34";
+var results = ["ab"];
+shouldBe('regex55.exec(input0);', 'results');
+var input1 = "12ab34";
+var results = ["ab"];
+shouldBe('regex55.exec(input1);', 'results');
+// Failers
+var input2 = "1234";
+var results = null;
+shouldBe('regex55.exec(input2);', 'results');
+var input3 = "12a34";
+var results = null;
+shouldBe('regex55.exec(input3);', 'results');
+
+var regex56 = /\d+/;
+var input0 = "12abcd34";
+var results = ["12"];
+shouldBe('regex56.exec(input0);', 'results');
+
+var regex57 = /\d{2,3}/;
+var input0 = "12abcd34";
+var results = ["12"];
+shouldBe('regex57.exec(input0);', 'results');
+var input1 = "1234abcd";
+var results = ["123"];
+shouldBe('regex57.exec(input1);', 'results');
+// Failers
+var input2 = "1.4";
+var results = null;
+shouldBe('regex57.exec(input2);', 'results');
+
+var regex58 = /\d{2,3}?/;
+var input0 = "12abcd34";
+var results = ["12"];
+shouldBe('regex58.exec(input0);', 'results');
+var input1 = "1234abcd";
+var results = ["12"];
+shouldBe('regex58.exec(input1);', 'results');
+// Failers
+var input2 = "1.4";
+var results = null;
+shouldBe('regex58.exec(input2);', 'results');
+
+var regex59 = /\S+/;
+var input0 = "12abcd34";
+var results = ["12abcd34"];
+shouldBe('regex59.exec(input0);', 'results');
+// Failers
+var input1 = " ";
+var results = null;
+shouldBe('regex59.exec(input1);', 'results');
+
+var regex60 = /\S{2,3}/;
+var input0 = "12abcd34";
+var results = ["12a"];
+shouldBe('regex60.exec(input0);', 'results');
+var input1 = "1234abcd";
+var results = ["123"];
+shouldBe('regex60.exec(input1);', 'results');
+// Failers
+var input2 = " ";
+var results = null;
+shouldBe('regex60.exec(input2);', 'results');
+
+var regex61 = /\S{2,3}?/;
+var input0 = "12abcd34";
+var results = ["12"];
+shouldBe('regex61.exec(input0);', 'results');
+var input1 = "1234abcd";
+var results = ["12"];
+shouldBe('regex61.exec(input1);', 'results');
+// Failers
+var input2 = " ";
+var results = null;
+shouldBe('regex61.exec(input2);', 'results');
+
+var regex62 = />\s+</;
+var input0 = "12> <34";
+var results = ["> <"];
+shouldBe('regex62.exec(input0);', 'results');
+
+var regex63 = />\s{2,3}</;
+var input0 = "ab> <cd";
+var results = ["> <"];
+shouldBe('regex63.exec(input0);', 'results');
+var input1 = "ab> <ce";
+var results = ["> <"];
+shouldBe('regex63.exec(input1);', 'results');
+// Failers
+var input2 = "ab> <cd";
+var results = null;
+shouldBe('regex63.exec(input2);', 'results');
+
+var regex64 = />\s{2,3}?</;
+var input0 = "ab> <cd";
+var results = ["> <"];
+shouldBe('regex64.exec(input0);', 'results');
+var input1 = "ab> <ce";
+var results = ["> <"];
+shouldBe('regex64.exec(input1);', 'results');
+// Failers
+var input2 = "ab> <cd";
+var results = null;
+shouldBe('regex64.exec(input2);', 'results');
+
+var regex65 = /\w+/;
+var input0 = "12 34";
+var results = ["12"];
+shouldBe('regex65.exec(input0);', 'results');
+// Failers
+var input1 = "+++=*!";
+var results = null;
+shouldBe('regex65.exec(input1);', 'results');
+
+var regex66 = /\w{2,3}/;
+var input0 = "ab cd";
+var results = ["ab"];
+shouldBe('regex66.exec(input0);', 'results');
+var input1 = "abcd ce";
+var results = ["abc"];
+shouldBe('regex66.exec(input1);', 'results');
+// Failers
+var input2 = "a.b.c";
+var results = null;
+shouldBe('regex66.exec(input2);', 'results');
+
+var regex67 = /\w{2,3}?/;
+var input0 = "ab cd";
+var results = ["ab"];
+shouldBe('regex67.exec(input0);', 'results');
+var input1 = "abcd ce";
+var results = ["ab"];
+shouldBe('regex67.exec(input1);', 'results');
+// Failers
+var input2 = "a.b.c";
+var results = null;
+shouldBe('regex67.exec(input2);', 'results');
+
+var regex68 = /\W+/;
+var input0 = "12====34";
+var results = ["===="];
+shouldBe('regex68.exec(input0);', 'results');
+// Failers
+var input1 = "abcd";
+var results = null;
+shouldBe('regex68.exec(input1);', 'results');
+
+var regex69 = /\W{2,3}/;
+var input0 = "ab====cd";
+var results = ["==="];
+shouldBe('regex69.exec(input0);', 'results');
+var input1 = "ab==cd";
+var results = ["=="];
+shouldBe('regex69.exec(input1);', 'results');
+// Failers
+var input2 = "a.b.c";
+var results = null;
+shouldBe('regex69.exec(input2);', 'results');
+
+var regex70 = /\W{2,3}?/;
+var input0 = "ab====cd";
+var results = ["=="];
+shouldBe('regex70.exec(input0);', 'results');
+var input1 = "ab==cd";
+var results = ["=="];
+shouldBe('regex70.exec(input1);', 'results');
+// Failers
+var input2 = "a.b.c";
+var results = null;
+shouldBe('regex70.exec(input2);', 'results');
+
+var regex71 = /[\u0100]/;
+var input0 = "\u0100";
+var results = ["\u0100"];
+shouldBe('regex71.exec(input0);', 'results');
+var input1 = "Z\u0100";
+var results = ["\u0100"];
+shouldBe('regex71.exec(input1);', 'results');
+var input2 = "\u0100Z";
+var results = ["\u0100"];
+shouldBe('regex71.exec(input2);', 'results');
+
+var regex72 = /[Z\u0100]/;
+var input0 = "Z\u0100";
+var results = ["Z"];
+shouldBe('regex72.exec(input0);', 'results');
+var input1 = "\u0100";
+var results = ["\u0100"];
+shouldBe('regex72.exec(input1);', 'results');
+var input2 = "\u0100Z";
+var results = ["\u0100"];
+shouldBe('regex72.exec(input2);', 'results');
+
+var regex73 = /[\u0100\u0200]/;
+var input0 = "ab\u0100cd";
+var results = ["\u0100"];
+shouldBe('regex73.exec(input0);', 'results');
+var input1 = "ab\u0200cd";
+var results = ["\u0200"];
+shouldBe('regex73.exec(input1);', 'results');
+
+var regex74 = /[\u0100-\u0200]/;
+var input0 = "ab\u0100cd";
+var results = ["\u0100"];
+shouldBe('regex74.exec(input0);', 'results');
+var input1 = "ab\u0200cd";
+var results = ["\u0200"];
+shouldBe('regex74.exec(input1);', 'results');
+var input2 = "ab\u0111cd";
+var results = ["\u0111"];
+shouldBe('regex74.exec(input2);', 'results');
+
+var regex75 = /[z-\u0200]/;
+var input0 = "ab\u0100cd";
+var results = ["\u0100"];
+shouldBe('regex75.exec(input0);', 'results');
+var input1 = "ab\u0200cd";
+var results = ["\u0200"];
+shouldBe('regex75.exec(input1);', 'results');
+var input2 = "ab\u0111cd";
+var results = ["\u0111"];
+shouldBe('regex75.exec(input2);', 'results');
+var input3 = "abzcd";
+var results = ["z"];
+shouldBe('regex75.exec(input3);', 'results');
+var input4 = "ab|cd";
+var results = ["|"];
+shouldBe('regex75.exec(input4);', 'results');
+
+var regex76 = /[Q\u0100\u0200]/;
+var input0 = "ab\u0100cd";
+var results = ["\u0100"];
+shouldBe('regex76.exec(input0);', 'results');
+var input1 = "ab\u0200cd";
+var results = ["\u0200"];
+shouldBe('regex76.exec(input1);', 'results');
+var input2 = "Q?";
+var results = ["Q"];
+shouldBe('regex76.exec(input2);', 'results');
+
+var regex77 = /[Q\u0100-\u0200]/;
+var input0 = "ab\u0100cd";
+var results = ["\u0100"];
+shouldBe('regex77.exec(input0);', 'results');
+var input1 = "ab\u0200cd";
+var results = ["\u0200"];
+shouldBe('regex77.exec(input1);', 'results');
+var input2 = "ab\u0111cd";
+var results = ["\u0111"];
+shouldBe('regex77.exec(input2);', 'results');
+var input3 = "Q?";
+var results = ["Q"];
+shouldBe('regex77.exec(input3);', 'results');
+
+var regex78 = /[Qz-\u0200]/;
+var input0 = "ab\u0100cd";
+var results = ["\u0100"];
+shouldBe('regex78.exec(input0);', 'results');
+var input1 = "ab\u0200cd";
+var results = ["\u0200"];
+shouldBe('regex78.exec(input1);', 'results');
+var input2 = "ab\u0111cd";
+var results = ["\u0111"];
+shouldBe('regex78.exec(input2);', 'results');
+var input3 = "abzcd";
+var results = ["z"];
+shouldBe('regex78.exec(input3);', 'results');
+var input4 = "ab|cd";
+var results = ["|"];
+shouldBe('regex78.exec(input4);', 'results');
+var input5 = "Q?";
+var results = ["Q"];
+shouldBe('regex78.exec(input5);', 'results');
+
+var regex79 = /[\u0100\u0200]{1,3}/;
+var input0 = "ab\u0100cd";
+var results = ["\u0100"];
+shouldBe('regex79.exec(input0);', 'results');
+var input1 = "ab\u0200cd";
+var results = ["\u0200"];
+shouldBe('regex79.exec(input1);', 'results');
+var input2 = "ab\u0200\u0100\u0200\u0100cd";
+var results = ["\u0200\u0100\u0200"];
+shouldBe('regex79.exec(input2);', 'results');
+
+var regex80 = /[\u0100\u0200]{1,3}?/;
+var input0 = "ab\u0100cd";
+var results = ["\u0100"];
+shouldBe('regex80.exec(input0);', 'results');
+var input1 = "ab\u0200cd";
+var results = ["\u0200"];
+shouldBe('regex80.exec(input1);', 'results');
+var input2 = "ab\u0200\u0100\u0200\u0100cd";
+var results = ["\u0200"];
+shouldBe('regex80.exec(input2);', 'results');
+
+var regex81 = /[Q\u0100\u0200]{1,3}/;
+var input0 = "ab\u0100cd";
+var results = ["\u0100"];
+shouldBe('regex81.exec(input0);', 'results');
+var input1 = "ab\u0200cd";
+var results = ["\u0200"];
+shouldBe('regex81.exec(input1);', 'results');
+var input2 = "ab\u0200\u0100\u0200\u0100cd";
+var results = ["\u0200\u0100\u0200"];
+shouldBe('regex81.exec(input2);', 'results');
+
+var regex82 = /[Q\u0100\u0200]{1,3}?/;
+var input0 = "ab\u0100cd";
+var results = ["\u0100"];
+shouldBe('regex82.exec(input0);', 'results');
+var input1 = "ab\u0200cd";
+var results = ["\u0200"];
+shouldBe('regex82.exec(input1);', 'results');
+var input2 = "ab\u0200\u0100\u0200\u0100cd";
+var results = ["\u0200"];
+shouldBe('regex82.exec(input2);', 'results');
+
+var regex86 = /[^\u0100\u0200]X/;
+var input0 = "AX";
+var results = ["AX"];
+shouldBe('regex86.exec(input0);', 'results');
+var input1 = "\u0150X";
+var results = ["\u0150X"];
+shouldBe('regex86.exec(input1);', 'results');
+var input2 = "\u0500X";
+var results = ["\u0500X"];
+shouldBe('regex86.exec(input2);', 'results');
+// Failers
+var input3 = "\u0100X";
+var results = null;
+shouldBe('regex86.exec(input3);', 'results');
+var input4 = "\u0200X";
+var results = null;
+shouldBe('regex86.exec(input4);', 'results');
+
+var regex87 = /[^Q\u0100\u0200]X/;
+var input0 = "AX";
+var results = ["AX"];
+shouldBe('regex87.exec(input0);', 'results');
+var input1 = "\u0150X";
+var results = ["\u0150X"];
+shouldBe('regex87.exec(input1);', 'results');
+var input2 = "\u0500X";
+var results = ["\u0500X"];
+shouldBe('regex87.exec(input2);', 'results');
+// Failers
+var input3 = "\u0100X";
+var results = null;
+shouldBe('regex87.exec(input3);', 'results');
+var input4 = "\u0200X";
+var results = null;
+shouldBe('regex87.exec(input4);', 'results');
+var input5 = "QX";
+var results = null;
+shouldBe('regex87.exec(input5);', 'results');
+
+var regex88 = /[^\u0100-\u0200]X/;
+var input0 = "AX";
+var results = ["AX"];
+shouldBe('regex88.exec(input0);', 'results');
+var input1 = "\u0500X";
+var results = ["\u0500X"];
+shouldBe('regex88.exec(input1);', 'results');
+// Failers
+var input2 = "\u0100X";
+var results = null;
+shouldBe('regex88.exec(input2);', 'results');
+var input3 = "\u0150X";
+var results = null;
+shouldBe('regex88.exec(input3);', 'results');
+var input4 = "\u0200X";
+var results = null;
+shouldBe('regex88.exec(input4);', 'results');
+
+var regex91 = /[z-\u0100]/i;
+var input0 = "z";
+var results = ["z"];
+shouldBe('regex91.exec(input0);', 'results');
+var input1 = "Z";
+var results = ["Z"];
+shouldBe('regex91.exec(input1);', 'results');
+var input2 = "\u0100";
+var results = ["\u0100"];
+shouldBe('regex91.exec(input2);', 'results');
+// Failers
+var input3 = "\u0102";
+var results = null;
+shouldBe('regex91.exec(input3);', 'results');
+var input4 = "y";
+var results = null;
+shouldBe('regex91.exec(input4);', 'results');
+
+var regex92 = /[\xFF]/;
+var input0 = ">\xff<";
+var results = ["\xff"];
+shouldBe('regex92.exec(input0);', 'results');
+
+var regex93 = /[\xff]/;
+var input0 = ">\u00ff<";
+var results = ["\u00ff"];
+shouldBe('regex93.exec(input0);', 'results');
+
+var regex94 = /[^\xFF]/;
+var input0 = "XYZ";
+var results = ["X"];
+shouldBe('regex94.exec(input0);', 'results');
+
+var regex95 = /[^\xff]/;
+var input0 = "XYZ";
+var results = ["X"];
+shouldBe('regex95.exec(input0);', 'results');
+var input1 = "\u0123";
+var results = ["\u0123"];
+shouldBe('regex95.exec(input1);', 'results');
+
+var regex96 = /^[ac]*b/;
+var input0 = "xb";
+var results = null;
+shouldBe('regex96.exec(input0);', 'results');
+
+var regex97 = /^[ac\u0100]*b/;
+var input0 = "xb";
+var results = null;
+shouldBe('regex97.exec(input0);', 'results');
+
+var regex98 = /^[^x]*b/i;
+var input0 = "xb";
+var results = null;
+shouldBe('regex98.exec(input0);', 'results');
+
+var regex99 = /^[^x]*b/;
+var input0 = "xb";
+var results = null;
+shouldBe('regex99.exec(input0);', 'results');
+
+var regex100 = /^\d*b/;
+var input0 = "xb";
+var results = null;
+shouldBe('regex100.exec(input0);', 'results');
+
+var regex102 = /^\u0085$/i;
+var input0 = "\u0085";
+var results = ["\u0085"];
+shouldBe('regex102.exec(input0);', 'results');
+
+var regex103 = /^\xe1\x88\xb4/;
+var input0 = "\xe1\x88\xb4";
+var results = ["\xe1\x88\xb4"];
+shouldBe('regex103.exec(input0);', 'results');
+
+var regex104 = /^\xe1\x88\xb4/;
+var input0 = "\xe1\x88\xb4";
+var results = ["\xe1\x88\xb4"];
+shouldBe('regex104.exec(input0);', 'results');
+
+var regex105 = /(.{1,5})/;
+var input0 = "abcdefg";
+var results = ["abcde", "abcde"];
+shouldBe('regex105.exec(input0);', 'results');
+var input1 = "ab";
+var results = ["ab", "ab"];
+shouldBe('regex105.exec(input1);', 'results');
+
+var regex106 = /a*\u0100*\w/;
+var input0 = "a";
+var results = ["a"];
+shouldBe('regex106.exec(input0);', 'results');
+
+var regex107 = /[\S\s]*/;
+var input0 = "abc\n\r\u0442\u0435\u0441\u0442xyz";
+var results = ["abc\u000a\u000d\u0442\u0435\u0441\u0442xyz"];
+shouldBe('regex107.exec(input0);', 'results');
+
+var regexGlobal0 = /[^a]+/g;
+var input0 = "bcd";
+var results = ["bcd"];
+shouldBe('input0.match(regexGlobal0);', 'results');
+var input1 = "\u0100aY\u0256Z";
+var results = ["\u0100", "Y\u0256Z"];
+shouldBe('input1.match(regexGlobal0);', 'results');
+
+var regexGlobal1 = /\S\S/g;
+var input0 = "A\u00a3BC";
+var results = ["A\u00a3", "BC"];
+shouldBe('input0.match(regexGlobal1);', 'results');
+
+var regexGlobal2 = /\S{2}/g;
+var input0 = "A\u00a3BC";
+var results = ["A\u00a3", "BC"];
+shouldBe('input0.match(regexGlobal2);', 'results');
+
+var regexGlobal3 = /\W\W/g;
+var input0 = "+\u00a3==";
+var results = ["+\u00a3", "=="];
+shouldBe('input0.match(regexGlobal3);', 'results');
+
+var regexGlobal4 = /\W{2}/g;
+var input0 = "+\u00a3==";
+var results = ["+\u00a3", "=="];
+shouldBe('input0.match(regexGlobal4);', 'results');
+
+var regexGlobal5 = /\S/g;
+var input0 = "\u0442\u0435\u0441\u0442";
+var results = ["\u0442", "\u0435", "\u0441", "\u0442"];
+shouldBe('input0.match(regexGlobal5);', 'results');
+
+var regexGlobal6 = /[\S]/g;
+var input0 = "\u0442\u0435\u0441\u0442";
+var results = ["\u0442", "\u0435", "\u0441", "\u0442"];
+shouldBe('input0.match(regexGlobal6);', 'results');
+
+var regexGlobal7 = /\D/g;
+var input0 = "\u0442\u0435\u0441\u0442";
+var results = ["\u0442", "\u0435", "\u0441", "\u0442"];
+shouldBe('input0.match(regexGlobal7);', 'results');
+
+var regexGlobal8 = /[\D]/g;
+var input0 = "\u0442\u0435\u0441\u0442";
+var results = ["\u0442", "\u0435", "\u0441", "\u0442"];
+shouldBe('input0.match(regexGlobal8);', 'results');
+
+var regexGlobal9 = /\W/g;
+var input0 = "\u2442\u2435\u2441\u2442";
+var results = ["\u2442", "\u2435", "\u2441", "\u2442"];
+shouldBe('input0.match(regexGlobal9);', 'results');
+
+var regexGlobal10 = /[\W]/g;
+var input0 = "\u2442\u2435\u2441\u2442";
+var results = ["\u2442", "\u2435", "\u2441", "\u2442"];
+shouldBe('input0.match(regexGlobal10);', 'results');
+
+var regexGlobal11 = /[\u041f\S]/g;
+var input0 = "\u0442\u0435\u0441\u0442";
+var results = ["\u0442", "\u0435", "\u0441", "\u0442"];
+shouldBe('input0.match(regexGlobal11);', 'results');
+
+var regexGlobal12 = /.[^\S]./g;
+var input0 = "abc def\u0442\u0443xyz\npqr";
+var results = ["c d", "z\u000ap"];
+shouldBe('input0.match(regexGlobal12);', 'results');
+
+var regexGlobal13 = /.[^\S\n]./g;
+var input0 = "abc def\u0442\u0443xyz\npqr";
+var results = ["c d"];
+shouldBe('input0.match(regexGlobal13);', 'results');
+
+var regexGlobal14 = /[\W]/g;
+var input0 = "+\u2442";
+var results = ["+", "\u2442"];
+shouldBe('input0.match(regexGlobal14);', 'results');
+
+var regexGlobal15 = /[^a-zA-Z]/g;
+var input0 = "+\u2442";
+var results = ["+", "\u2442"];
+shouldBe('input0.match(regexGlobal15);', 'results');
+
+var regexGlobal16 = /[^a-zA-Z]/g;
+var input0 = "A\u0442";
+var results = ["\u0442"];
+shouldBe('input0.match(regexGlobal16);', 'results');
+
+var regexGlobal17 = /[\S]/g;
+var input0 = "A\u0442";
+var results = ["A", "\u0442"];
+shouldBe('input0.match(regexGlobal17);', 'results');
+
+var regexGlobal19 = /[\D]/g;
+var input0 = "A\u0442";
+var results = ["A", "\u0442"];
+shouldBe('input0.match(regexGlobal19);', 'results');
+
+var regexGlobal21 = /[^a-z]/g;
+var input0 = "A\u0422";
+var results = ["A", "\u0422"];
+shouldBe('input0.match(regexGlobal21);', 'results');
+
+var regexGlobal24 = /[\S]/g;
+var input0 = "A\u0442";
+var results = ["A", "\u0442"];
+shouldBe('input0.match(regexGlobal24);', 'results');
+
+var regexGlobal25 = /[^A-Z]/g;
+var input0 = "a\u0442";
+var results = ["a", "\u0442"];
+shouldBe('input0.match(regexGlobal25);', 'results');
+
+var regexGlobal26 = /[\W]/g;
+var input0 = "+\u2442";
+var results = ["+", "\u2442"];
+shouldBe('input0.match(regexGlobal26);', 'results');
+
+var regexGlobal27 = /[\D]/g;
+var input0 = "M\u0442";
+var results = ["M", "\u0442"];
+shouldBe('input0.match(regexGlobal27);', 'results');
+
+var regexGlobal28 = /[^a]+/ig;
+var input0 = "bcd";
+var results = ["bcd"];
+shouldBe('input0.match(regexGlobal28);', 'results');
+var input1 = "\u0100aY\u0256Z";
+var results = ["\u0100", "Y\u0256Z"];
+shouldBe('input1.match(regexGlobal28);', 'results');
+
+var regexGlobal29 = /(a|)/g;
+var input0 = "catac";
+var results = ["", "a", "", "a", "", ""];
+shouldBe('input0.match(regexGlobal29);', 'results');
+var input1 = "a\u0256a";
+var results = ["a", "", "a", ""];
+shouldBe('input1.match(regexGlobal29);', 'results');
+
+// DISABLED:
+// These tests use (?<) or (?>) constructs. These are not currently valid in ECMAScript,
+// but these tests may be useful if similar constructs are introduced in the future.
+
+//var regex18 = /(?<=aXb)cd/;
+//var input0 = "aXbcd";
+//var results = ["cd"];
+//shouldBe('regex18.exec(input0);', 'results');
+//
+//var regex19 = /(?<=a\u0100b)cd/;
+//var input0 = "a\u0100bcd";
+//var results = ["cd"];
+//shouldBe('regex19.exec(input0);', 'results');
+//
+//var regex20 = /(?<=a\u100000b)cd/;
+//var input0 = "a\u100000bcd";
+//var results = ["cd"];
+//shouldBe('regex20.exec(input0);', 'results');
+//
+//var regex23 = /(?<=(.))X/;
+//var input0 = "WXYZ";
+//var results = ["X", "W"];
+//shouldBe('regex23.exec(input0);', 'results');
+//var input1 = "\u0256XYZ";
+//var results = ["X", "\u0256"];
+//shouldBe('regex23.exec(input1);', 'results');
+//// Failers
+//var input2 = "XYZ";
+//var results = null;
+//shouldBe('regex23.exec(input2);', 'results');
+//
+//var regex46 = /(?<=a\u0100{2}b)X/;
+//var input0 = "Xyyya\u0100\u0100bXzzz";
+//var results = ["X"];
+//shouldBe('regex46.exec(input0);', 'results');
+//
+//var regex83 = /(?<=[\u0100\u0200])X/;
+//var input0 = "abc\u0200X";
+//var results = ["X"];
+//shouldBe('regex83.exec(input0);', 'results');
+//var input1 = "abc\u0100X";
+//var results = ["X"];
+//shouldBe('regex83.exec(input1);', 'results');
+//// Failers
+//var input2 = "X";
+//var results = null;
+//shouldBe('regex83.exec(input2);', 'results');
+//
+//var regex84 = /(?<=[Q\u0100\u0200])X/;
+//var input0 = "abc\u0200X";
+//var results = ["X"];
+//shouldBe('regex84.exec(input0);', 'results');
+//var input1 = "abc\u0100X";
+//var results = ["X"];
+//shouldBe('regex84.exec(input1);', 'results');
+//var input2 = "abQX";
+//var results = ["X"];
+//shouldBe('regex84.exec(input2);', 'results');
+//// Failers
+//var input3 = "X";
+//var results = null;
+//shouldBe('regex84.exec(input3);', 'results');
+//
+//var regex85 = /(?<=[\u0100\u0200]{3})X/;
+//var input0 = "abc\u0100\u0200\u0100X";
+//var results = ["X"];
+//shouldBe('regex85.exec(input0);', 'results');
+//// Failers
+//var input1 = "abc\u0200X";
+//var results = null;
+//shouldBe('regex85.exec(input1);', 'results');
+//var input2 = "X";
+//var results = null;
+//shouldBe('regex85.exec(input2);', 'results');
+
+// DISABLED:
+// These tests use PCRE's \C token. This is not currently valid in ECMAScript,
+// but these tests may be useful if similar constructs are introduced in the future.
+
+//var regex24 = /X(\C{3})/;
+//var input0 = "X\u1234";
+//var results = ["X\u1234", "\u1234"];
+//shouldBe('regex24.exec(input0);', 'results');
+//
+//var regex25 = /X(\C{4})/;
+//var input0 = "X\u1234YZ";
+//var results = ["X\u1234Y", "\u1234Y"];
+//shouldBe('regex25.exec(input0);', 'results');
+//
+//var regex26 = /X\C*/;
+//var input0 = "XYZabcdce";
+//var results = ["XYZabcdce"];
+//shouldBe('regex26.exec(input0);', 'results');
+//
+//var regex27 = /X\C*?/;
+//var input0 = "XYZabcde";
+//var results = ["X"];
+//shouldBe('regex27.exec(input0);', 'results');
+//
+//var regex28 = /X\C{3,5}/;
+//var input0 = "Xabcdefg";
+//var results = ["Xabcde"];
+//shouldBe('regex28.exec(input0);', 'results');
+//var input1 = "X\u1234";
+//var results = ["X\u1234"];
+//shouldBe('regex28.exec(input1);', 'results');
+//var input2 = "X\u1234YZ";
+//var results = ["X\u1234YZ"];
+//shouldBe('regex28.exec(input2);', 'results');
+//var input3 = "X\u1234\u0512";
+//var results = ["X\u1234\u0512"];
+//shouldBe('regex28.exec(input3);', 'results');
+//var input4 = "X\u1234\u0512YZ";
+//var results = ["X\u1234\u0512"];
+//shouldBe('regex28.exec(input4);', 'results');
+//
+//var regex29 = /X\C{3,5}?/;
+//var input0 = "Xabcdefg";
+//var results = ["Xabc"];
+//shouldBe('regex29.exec(input0);', 'results');
+//var input1 = "X\u1234";
+//var results = ["X\u1234"];
+//shouldBe('regex29.exec(input1);', 'results');
+//var input2 = "X\u1234YZ";
+//var results = ["X\u1234"];
+//shouldBe('regex29.exec(input2);', 'results');
+//var input3 = "X\u1234\u0512";
+//var results = ["X\u1234"];
+//shouldBe('regex29.exec(input3);', 'results');
+//
+//var regex89 = /a\Cb/;
+//var input0 = "aXb";
+//var results = ["aXb"];
+//shouldBe('regex89.exec(input0);', 'results');
+//var input1 = "a\nb";
+//var results = ["a\x0ab"];
+//shouldBe('regex89.exec(input1);', 'results');
+//
+//var regex90 = /a\Cb/;
+//var input0 = "aXb";
+//var results = ["aXb"];
+//shouldBe('regex90.exec(input0);', 'results');
+//var input1 = "a\nb";
+//var results = ["a\u000ab"];
+//shouldBe('regex90.exec(input1);', 'results');
+//// Failers
+//var input2 = "a\u0100b";
+//var results = null;
+//shouldBe('regex90.exec(input2);', 'results');
--- /dev/null
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This page tests assertions followed by quantifiers.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+
+Testing regexp: /(?=a){0}/gm
+PASS regexp.test('a') is true
+PASS regexp.lastIndex is 0
+
+Testing regexp: /(?=a){1}/gm
+PASS regexp.test('a') is true
+PASS regexp.lastIndex is 0
+
+Testing regexp: /(?!a){0}/gm
+PASS regexp.test('b') is true
+PASS regexp.lastIndex is 0
+
+Testing regexp: /(?!a){1}/gm
+PASS regexp.test('b') is true
+PASS regexp.lastIndex is 0
+PASS /^(?=a)?b$/.test("b") is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"This page tests assertions followed by quantifiers."
+);
+
+var regexp;
+
+regexp = /(?=a){0}/gm;
+debug("\nTesting regexp: " + regexp);
+shouldBeTrue("regexp.test('a')");
+shouldBe("regexp.lastIndex", "0");
+
+regexp = /(?=a){1}/gm;
+debug("\nTesting regexp: " + regexp);
+shouldBeTrue("regexp.test('a')");
+shouldBe("regexp.lastIndex", "0");
+
+regexp = /(?!a){0}/gm;
+debug("\nTesting regexp: " + regexp);
+shouldBeTrue("regexp.test('b')");
+shouldBe("regexp.lastIndex", "0");
+
+regexp = /(?!a){1}/gm;
+debug("\nTesting regexp: " + regexp);
+shouldBeTrue("regexp.test('b')");
+shouldBe("regexp.lastIndex", "0");
+
+shouldBeTrue('/^(?=a)?b$/.test("b")');
--- /dev/null
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Some test cases identified by Waldemar Horwat in response to this bug: https://bugs.webkit.org/show_bug.cgi?id=48101
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS /(?:a*?){2,}/.exec("aa") is ["aa"]
+PASS /(?:a*?){2,}/.exec("a") is ["a"]
+PASS /(?:a*?){2,}/.exec("") is [""]
+PASS /(?:a*?)/.exec("aa") is [""]
+PASS /(?:a*?)/.exec("a") is [""]
+PASS /(?:a*?)/.exec("") is [""]
+PASS /(?:a*?)(?:a*?)(?:a*?)/.exec("aa") is [""]
+PASS /(?:a*?)(?:a*?)(?:a*?)/.exec("a") is [""]
+PASS /(?:a*?)(?:a*?)(?:a*?)/.exec("") is [""]
+PASS /(?:a*?){2}/.exec("aa") is [""]
+PASS /(?:a*?){2}/.exec("a") is [""]
+PASS /(?:a*?){2}/.exec("") is [""]
+PASS /(?:a*?){2,3}/.exec("aa") is ["a"]
+PASS /(?:a*?){2,3}/.exec("a") is ["a"]
+PASS /(?:a*?){2,3}/.exec("") is [""]
+PASS /(?:a*?)?/.exec("aa") is ["a"]
+PASS /(?:a*?)?/.exec("a") is ["a"]
+PASS /(?:a*?)?/.exec("") is [""]
+PASS /(?:a*?)*/.exec("aa") is ["aa"]
+PASS /(?:a*?)*/.exec("a") is ["a"]
+PASS /(?:a*?)*/.exec("") is [""]
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description(
+"Some test cases identified by Waldemar Horwat in response to this bug: https://bugs.webkit.org/show_bug.cgi?id=48101"
+);
+
+shouldBe('/(?:a*?){2,}/.exec("aa")', '["aa"]');
+shouldBe('/(?:a*?){2,}/.exec("a")', '["a"]');
+shouldBe('/(?:a*?){2,}/.exec("")', '[""]');
+
+shouldBe('/(?:a*?)/.exec("aa")', '[""]');
+shouldBe('/(?:a*?)/.exec("a")', '[""]');
+shouldBe('/(?:a*?)/.exec("")', '[""]');
+
+shouldBe('/(?:a*?)(?:a*?)(?:a*?)/.exec("aa")', '[""]');
+shouldBe('/(?:a*?)(?:a*?)(?:a*?)/.exec("a")', '[""]');
+shouldBe('/(?:a*?)(?:a*?)(?:a*?)/.exec("")', '[""]');
+
+shouldBe('/(?:a*?){2}/.exec("aa")', '[""]');
+shouldBe('/(?:a*?){2}/.exec("a")', '[""]');
+shouldBe('/(?:a*?){2}/.exec("")', '[""]');
+
+shouldBe('/(?:a*?){2,3}/.exec("aa")', '["a"]');
+shouldBe('/(?:a*?){2,3}/.exec("a")', '["a"]');
+shouldBe('/(?:a*?){2,3}/.exec("")', '[""]');
+
+shouldBe('/(?:a*?)?/.exec("aa")', '["a"]');
+shouldBe('/(?:a*?)?/.exec("a")', '["a"]');
+shouldBe('/(?:a*?)?/.exec("")', '[""]');
+
+shouldBe('/(?:a*?)*/.exec("aa")', '["aa"]');
+shouldBe('/(?:a*?)*/.exec("a")', '["a"]');
+shouldBe('/(?:a*?)*/.exec("")', '[""]');
--- /dev/null
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This page tests toString conversion of RegExp objects, particularly wrt to '/' characters and RegExp.prototype.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+FAIL RegExp('/').source should be \/. Was /.
+PASS RegExp('').source is "(?:)"
+PASS RegExp.prototype.source is "(?:)"
+FAIL RegExp('/').toString() should be /\//. Was ///.
+PASS RegExp('').toString() is "/(?:)/"
+PASS RegExp.prototype.toString() is "/(?:)/"
+FAIL testForwardSlash("^/$", "/"); should be true. Threw exception SyntaxError: Unexpected end of input
+FAIL testForwardSlash("^/$", "/"); should be true. Threw exception SyntaxError: Unexpected end of input
+FAIL testForwardSlash("^\/$", "/"); should be true. Threw exception SyntaxError: Unexpected end of input
+PASS testForwardSlash("^\\/$", "\/"); is true
+PASS testForwardSlash("^\\\/$", "\/"); is true
+FAIL testForwardSlash("^\\\\/$", "\\/"); should be true. Threw exception SyntaxError: Unexpected end of input
+FAIL testForwardSlash("^\\\\\/$", "\\/"); should be true. Threw exception SyntaxError: Unexpected end of input
+FAIL testForwardSlash("x/x/x", "x\/x\/x"); should be true. Threw exception SyntaxError: Unexpected end of input
+FAIL testForwardSlash("x\/x/x", "x\/x\/x"); should be true. Threw exception SyntaxError: Unexpected end of input
+FAIL testForwardSlash("x/x\/x", "x\/x\/x"); should be true. Threw exception SyntaxError: Unexpected end of input
+FAIL testForwardSlash("x\/x\/x", "x\/x\/x"); should be true. Threw exception SyntaxError: Unexpected end of input
+FAIL testLineTerminator("\n"); should be false. Was true.
+PASS testLineTerminator("\\n"); is false
+FAIL testLineTerminator("\r"); should be false. Was true.
+PASS testLineTerminator("\\r"); is false
+FAIL testLineTerminator("\u2028"); should be false. Was true.
+PASS testLineTerminator("\\u2028"); is false
+FAIL testLineTerminator("\u2029"); should be false. Was true.
+PASS testLineTerminator("\\u2029"); is false
+PASS RegExp('[/]').source is '[/]'
+FAIL RegExp('\\[/]').source should be \[\/]. Was \[/].
+PASS var o = new RegExp(); o.toString() === '/'+o.source+'/' && eval(o.toString()+'.exec(String())') is [""]
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("This page tests toString conversion of RegExp objects, particularly wrt to '/' characters and RegExp.prototype.");
+
+function testForwardSlash(pattern, _string)
+{
+ string = _string;
+
+ re1 = new RegExp(pattern);
+ re2 = eval(re1.toString());
+
+ return re1.test(string) && re2.test(string);
+}
+
+function testLineTerminator(pattern)
+{
+ re1 = new RegExp(pattern);
+
+ return /\n|\r|\u2028|\u2029/.test(re1.toString());
+}
+
+shouldBe("RegExp('/').source", '"\\\\/"');
+shouldBe("RegExp('').source", '"(?:)"');
+shouldBe("RegExp.prototype.source", '"(?:)"');
+
+shouldBe("RegExp('/').toString()", '"/\\\\//"');
+shouldBe("RegExp('').toString()", '"/(?:)/"');
+shouldBe("RegExp.prototype.toString()", '"/(?:)/"');
+
+// These strings are equivalent, since the '\' is identity escaping the '/' at the string level.
+shouldBeTrue('testForwardSlash("^/$", "/");');
+shouldBeTrue('testForwardSlash("^\/$", "/");');
+// This string passes "^\/$" to the RegExp, so the '/' is escaped in the re!
+shouldBeTrue('testForwardSlash("^\\/$", "/");');
+// These strings pass "^\\/$" and "^\\\/$" respectively to the RegExp, giving one '\' to match.
+shouldBeTrue('testForwardSlash("^\\\\/$", "\\/");');
+shouldBeTrue('testForwardSlash("^\\\\\\/$", "\\/");');
+// These strings match two backslashes (the second with the '/' escaped).
+shouldBeTrue('testForwardSlash("^\\\\\\\\/$", "\\\\/");');
+shouldBeTrue('testForwardSlash("^\\\\\\\\\\/$", "\\\\/");');
+// Test that nothing goes wrongif there are multiple forward slashes!
+shouldBeTrue('testForwardSlash("x/x/x", "x\\/x\\/x");');
+shouldBeTrue('testForwardSlash("x\\/x/x", "x\\/x\\/x");');
+shouldBeTrue('testForwardSlash("x/x\\/x", "x\\/x\\/x");');
+shouldBeTrue('testForwardSlash("x\\/x\\/x", "x\\/x\\/x");');
+
+shouldBeFalse('testLineTerminator("\\n");');
+shouldBeFalse('testLineTerminator("\\\\n");');
+shouldBeFalse('testLineTerminator("\\r");');
+shouldBeFalse('testLineTerminator("\\\\r");');
+shouldBeFalse('testLineTerminator("\\u2028");');
+shouldBeFalse('testLineTerminator("\\\\u2028");');
+shouldBeFalse('testLineTerminator("\\u2029");');
+shouldBeFalse('testLineTerminator("\\\\u2029");');
+
+shouldBe("RegExp('[/]').source", "'[/]'");
+shouldBe("RegExp('\\\\[/]').source", "'\\\\[\\\\/]'");
+
+// See 15.10.6.4
+// The first half of this checks that:
+// Return the String value formed by concatenating the Strings "/", the
+// String value of the source property of this RegExp object, and "/";
+// The second half checks that:
+// The returned String has the form of a RegularExpressionLiteral that
+// evaluates to another RegExp object with the same behaviour as this object.
+shouldBe("var o = new RegExp(); o.toString() === '/'+o.source+'/' && eval(o.toString()+'.exec(String())')", '[""]');
--- /dev/null
+# Copyright 2013 the V8 project authors. All rights reserved.
+# Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+https://bugs.webkit.org/show_bug.cgi?id=82063
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS /ΣΤΙΓΜΑΣ/i.test("στιγμας") is true
+PASS /ΔΣΔ/i.test("δςδ") is true
+PASS /ς/i.test("σ") is true
+PASS /σ/i.test("ς") is true
+PASS //i.test("") is true
+PASS /DŽ/i.test("DŽ") is true
+PASS /[ǃ-Dž]/i.test("DŽ") is true
+PASS /DŽ/i.test("Dž") is true
+PASS /[ǃ-Dž]/i.test("Dž") is true
+PASS /DŽ/i.test("dž") is true
+PASS /[ǃ-Dž]/i.test("dž") is true
+PASS /Dž/i.test("DŽ") is true
+PASS /[DŽ-dž]/i.test("DŽ") is true
+PASS /Dž/i.test("Dž") is true
+PASS /[DŽ-dž]/i.test("Dž") is true
+PASS /Dž/i.test("dž") is true
+PASS /[DŽ-dž]/i.test("dž") is true
+PASS /dž/i.test("DŽ") is true
+PASS /[Dž-LJ]/i.test("DŽ") is true
+PASS /dž/i.test("Dž") is true
+PASS /[Dž-LJ]/i.test("Dž") is true
+PASS /dž/i.test("dž") is true
+PASS /[Dž-LJ]/i.test("dž") is true
+PASS /LJ/i.test("LJ") is true
+PASS /[dž-Lj]/i.test("LJ") is true
+PASS /LJ/i.test("Lj") is true
+PASS /[dž-Lj]/i.test("Lj") is true
+PASS /LJ/i.test("lj") is true
+PASS /[dž-Lj]/i.test("lj") is true
+PASS /Lj/i.test("LJ") is true
+PASS /[LJ-lj]/i.test("LJ") is true
+PASS /Lj/i.test("Lj") is true
+PASS /[LJ-lj]/i.test("Lj") is true
+PASS /Lj/i.test("lj") is true
+PASS /[LJ-lj]/i.test("lj") is true
+PASS /lj/i.test("LJ") is true
+PASS /[Lj-NJ]/i.test("LJ") is true
+PASS /lj/i.test("Lj") is true
+PASS /[Lj-NJ]/i.test("Lj") is true
+PASS /lj/i.test("lj") is true
+PASS /[Lj-NJ]/i.test("lj") is true
+PASS /NJ/i.test("NJ") is true
+PASS /[lj-Nj]/i.test("NJ") is true
+PASS /NJ/i.test("Nj") is true
+PASS /[lj-Nj]/i.test("Nj") is true
+PASS /NJ/i.test("nj") is true
+PASS /[lj-Nj]/i.test("nj") is true
+PASS /Nj/i.test("NJ") is true
+PASS /[NJ-nj]/i.test("NJ") is true
+PASS /Nj/i.test("Nj") is true
+PASS /[NJ-nj]/i.test("Nj") is true
+PASS /Nj/i.test("nj") is true
+PASS /[NJ-nj]/i.test("nj") is true
+PASS /nj/i.test("NJ") is true
+PASS /[Nj-Ǎ]/i.test("NJ") is true
+PASS /nj/i.test("Nj") is true
+PASS /[Nj-Ǎ]/i.test("Nj") is true
+PASS /nj/i.test("nj") is true
+PASS /[Nj-Ǎ]/i.test("nj") is true
+PASS /DZ/i.test("DZ") is true
+PASS /[ǰ-Dz]/i.test("DZ") is true
+PASS /DZ/i.test("Dz") is true
+PASS /[ǰ-Dz]/i.test("Dz") is true
+PASS /DZ/i.test("dz") is true
+PASS /[ǰ-Dz]/i.test("dz") is true
+PASS /Dz/i.test("DZ") is true
+PASS /[DZ-dz]/i.test("DZ") is true
+PASS /Dz/i.test("Dz") is true
+PASS /[DZ-dz]/i.test("Dz") is true
+PASS /Dz/i.test("dz") is true
+PASS /[DZ-dz]/i.test("dz") is true
+PASS /dz/i.test("DZ") is true
+PASS /[Dz-Ǵ]/i.test("DZ") is true
+PASS /dz/i.test("Dz") is true
+PASS /[Dz-Ǵ]/i.test("Dz") is true
+PASS /dz/i.test("dz") is true
+PASS /[Dz-Ǵ]/i.test("dz") is true
+PASS /Β/i.test("Β") is true
+PASS /[Α-Γ]/i.test("Β") is true
+PASS /Β/i.test("β") is true
+PASS /[Α-Γ]/i.test("β") is true
+PASS /Β/i.test("ϐ") is true
+PASS /[Α-Γ]/i.test("ϐ") is true
+PASS /β/i.test("Β") is true
+PASS /[α-γ]/i.test("Β") is true
+PASS /β/i.test("β") is true
+PASS /[α-γ]/i.test("β") is true
+PASS /β/i.test("ϐ") is true
+PASS /[α-γ]/i.test("ϐ") is true
+PASS /ϐ/i.test("Β") is true
+PASS /[Ϗ-ϑ]/i.test("Β") is true
+PASS /ϐ/i.test("β") is true
+PASS /[Ϗ-ϑ]/i.test("β") is true
+PASS /ϐ/i.test("ϐ") is true
+PASS /[Ϗ-ϑ]/i.test("ϐ") is true
+PASS /Ε/i.test("Ε") is true
+PASS /[Δ-Ζ]/i.test("Ε") is true
+PASS /Ε/i.test("ε") is true
+PASS /[Δ-Ζ]/i.test("ε") is true
+PASS /Ε/i.test("ϵ") is true
+PASS /[Δ-Ζ]/i.test("ϵ") is true
+PASS /ε/i.test("Ε") is true
+PASS /[δ-ζ]/i.test("Ε") is true
+PASS /ε/i.test("ε") is true
+PASS /[δ-ζ]/i.test("ε") is true
+PASS /ε/i.test("ϵ") is true
+PASS /[δ-ζ]/i.test("ϵ") is true
+PASS /ϵ/i.test("Ε") is true
+PASS /[ϴ-϶]/i.test("Ε") is true
+PASS /ϵ/i.test("ε") is true
+PASS /[ϴ-϶]/i.test("ε") is true
+PASS /ϵ/i.test("ϵ") is true
+PASS /[ϴ-϶]/i.test("ϵ") is true
+PASS /Θ/i.test("Θ") is true
+PASS /[Η-Ι]/i.test("Θ") is true
+PASS /Θ/i.test("θ") is true
+PASS /[Η-Ι]/i.test("θ") is true
+PASS /Θ/i.test("ϑ") is true
+PASS /[Η-Ι]/i.test("ϑ") is true
+PASS /θ/i.test("Θ") is true
+PASS /[η-ι]/i.test("Θ") is true
+PASS /θ/i.test("θ") is true
+PASS /[η-ι]/i.test("θ") is true
+PASS /θ/i.test("ϑ") is true
+PASS /[η-ι]/i.test("ϑ") is true
+PASS /ϑ/i.test("Θ") is true
+PASS /[ϐ-ϒ]/i.test("Θ") is true
+PASS /ϑ/i.test("θ") is true
+PASS /[ϐ-ϒ]/i.test("θ") is true
+PASS /ϑ/i.test("ϑ") is true
+PASS /[ϐ-ϒ]/i.test("ϑ") is true
+PASS /ͅ/i.test("ͅ") is true
+PASS /[̈́-͆]/i.test("ͅ") is true
+PASS /ͅ/i.test("Ι") is true
+PASS /[̈́-͆]/i.test("Ι") is true
+PASS /ͅ/i.test("ι") is true
+PASS /[̈́-͆]/i.test("ι") is true
+PASS /ͅ/i.test("ι") is true
+PASS /[̈́-͆]/i.test("ι") is true
+PASS /Ι/i.test("ͅ") is true
+PASS /[Θ-Κ]/i.test("ͅ") is true
+PASS /Ι/i.test("Ι") is true
+PASS /[Θ-Κ]/i.test("Ι") is true
+PASS /Ι/i.test("ι") is true
+PASS /[Θ-Κ]/i.test("ι") is true
+PASS /Ι/i.test("ι") is true
+PASS /[Θ-Κ]/i.test("ι") is true
+PASS /ι/i.test("ͅ") is true
+PASS /[θ-κ]/i.test("ͅ") is true
+PASS /ι/i.test("Ι") is true
+PASS /[θ-κ]/i.test("Ι") is true
+PASS /ι/i.test("ι") is true
+PASS /[θ-κ]/i.test("ι") is true
+PASS /ι/i.test("ι") is true
+PASS /[θ-κ]/i.test("ι") is true
+PASS /ι/i.test("ͅ") is true
+PASS /[᾽-᾿]/i.test("ͅ") is true
+PASS /ι/i.test("Ι") is true
+PASS /[᾽-᾿]/i.test("Ι") is true
+PASS /ι/i.test("ι") is true
+PASS /[᾽-᾿]/i.test("ι") is true
+PASS /ι/i.test("ι") is true
+PASS /[᾽-᾿]/i.test("ι") is true
+PASS /Κ/i.test("Κ") is true
+PASS /[Ι-Λ]/i.test("Κ") is true
+PASS /Κ/i.test("κ") is true
+PASS /[Ι-Λ]/i.test("κ") is true
+PASS /Κ/i.test("ϰ") is true
+PASS /[Ι-Λ]/i.test("ϰ") is true
+PASS /κ/i.test("Κ") is true
+PASS /[ι-λ]/i.test("Κ") is true
+PASS /κ/i.test("κ") is true
+PASS /[ι-λ]/i.test("κ") is true
+PASS /κ/i.test("ϰ") is true
+PASS /[ι-λ]/i.test("ϰ") is true
+PASS /ϰ/i.test("Κ") is true
+PASS /[ϯ-ϱ]/i.test("Κ") is true
+PASS /ϰ/i.test("κ") is true
+PASS /[ϯ-ϱ]/i.test("κ") is true
+PASS /ϰ/i.test("ϰ") is true
+PASS /[ϯ-ϱ]/i.test("ϰ") is true
+PASS /µ/i.test("µ") is true
+PASS /[´-¶]/i.test("µ") is true
+PASS /µ/i.test("Μ") is true
+PASS /[´-¶]/i.test("Μ") is true
+PASS /µ/i.test("μ") is true
+PASS /[´-¶]/i.test("μ") is true
+PASS /Μ/i.test("µ") is true
+PASS /[Λ-Ν]/i.test("µ") is true
+PASS /Μ/i.test("Μ") is true
+PASS /[Λ-Ν]/i.test("Μ") is true
+PASS /Μ/i.test("μ") is true
+PASS /[Λ-Ν]/i.test("μ") is true
+PASS /μ/i.test("µ") is true
+PASS /[λ-ν]/i.test("µ") is true
+PASS /μ/i.test("Μ") is true
+PASS /[λ-ν]/i.test("Μ") is true
+PASS /μ/i.test("μ") is true
+PASS /[λ-ν]/i.test("μ") is true
+PASS /Π/i.test("Π") is true
+PASS /[Ο-Ρ]/i.test("Π") is true
+PASS /Π/i.test("π") is true
+PASS /[Ο-Ρ]/i.test("π") is true
+PASS /Π/i.test("ϖ") is true
+PASS /[Ο-Ρ]/i.test("ϖ") is true
+PASS /π/i.test("Π") is true
+PASS /[ο-ρ]/i.test("Π") is true
+PASS /π/i.test("π") is true
+PASS /[ο-ρ]/i.test("π") is true
+PASS /π/i.test("ϖ") is true
+PASS /[ο-ρ]/i.test("ϖ") is true
+PASS /ϖ/i.test("Π") is true
+PASS /[ϕ-ϗ]/i.test("Π") is true
+PASS /ϖ/i.test("π") is true
+PASS /[ϕ-ϗ]/i.test("π") is true
+PASS /ϖ/i.test("ϖ") is true
+PASS /[ϕ-ϗ]/i.test("ϖ") is true
+PASS /Ρ/i.test("Ρ") is true
+PASS /[Π-]/i.test("Ρ") is true
+PASS /Ρ/i.test("ρ") is true
+PASS /[Π-]/i.test("ρ") is true
+PASS /Ρ/i.test("ϱ") is true
+PASS /[Π-]/i.test("ϱ") is true
+PASS /ρ/i.test("Ρ") is true
+PASS /[π-ς]/i.test("Ρ") is true
+PASS /ρ/i.test("ρ") is true
+PASS /[π-ς]/i.test("ρ") is true
+PASS /ρ/i.test("ϱ") is true
+PASS /[π-ς]/i.test("ϱ") is true
+PASS /ϱ/i.test("Ρ") is true
+PASS /[ϰ-ϲ]/i.test("Ρ") is true
+PASS /ϱ/i.test("ρ") is true
+PASS /[ϰ-ϲ]/i.test("ρ") is true
+PASS /ϱ/i.test("ϱ") is true
+PASS /[ϰ-ϲ]/i.test("ϱ") is true
+PASS /Σ/i.test("Σ") is true
+PASS /[-Τ]/i.test("Σ") is true
+PASS /Σ/i.test("ς") is true
+PASS /[-Τ]/i.test("ς") is true
+PASS /Σ/i.test("σ") is true
+PASS /[-Τ]/i.test("σ") is true
+PASS /ς/i.test("Σ") is true
+PASS /[ρ-σ]/i.test("Σ") is true
+PASS /ς/i.test("ς") is true
+PASS /[ρ-σ]/i.test("ς") is true
+PASS /ς/i.test("σ") is true
+PASS /[ρ-σ]/i.test("σ") is true
+PASS /σ/i.test("Σ") is true
+PASS /[ς-τ]/i.test("Σ") is true
+PASS /σ/i.test("ς") is true
+PASS /[ς-τ]/i.test("ς") is true
+PASS /σ/i.test("σ") is true
+PASS /[ς-τ]/i.test("σ") is true
+PASS /Φ/i.test("Φ") is true
+PASS /[Υ-Χ]/i.test("Φ") is true
+PASS /Φ/i.test("φ") is true
+PASS /[Υ-Χ]/i.test("φ") is true
+PASS /Φ/i.test("ϕ") is true
+PASS /[Υ-Χ]/i.test("ϕ") is true
+PASS /φ/i.test("Φ") is true
+PASS /[υ-χ]/i.test("Φ") is true
+PASS /φ/i.test("φ") is true
+PASS /[υ-χ]/i.test("φ") is true
+PASS /φ/i.test("ϕ") is true
+PASS /[υ-χ]/i.test("ϕ") is true
+PASS /ϕ/i.test("Φ") is true
+PASS /[ϔ-ϖ]/i.test("Φ") is true
+PASS /ϕ/i.test("φ") is true
+PASS /[ϔ-ϖ]/i.test("φ") is true
+PASS /ϕ/i.test("ϕ") is true
+PASS /[ϔ-ϖ]/i.test("ϕ") is true
+PASS /Ṡ/i.test("Ṡ") is true
+PASS /[ṟ-ṡ]/i.test("Ṡ") is true
+PASS /Ṡ/i.test("ṡ") is true
+PASS /[ṟ-ṡ]/i.test("ṡ") is true
+PASS /Ṡ/i.test("ẛ") is true
+PASS /[ṟ-ṡ]/i.test("ẛ") is true
+PASS /ṡ/i.test("Ṡ") is true
+PASS /[Ṡ-Ṣ]/i.test("Ṡ") is true
+PASS /ṡ/i.test("ṡ") is true
+PASS /[Ṡ-Ṣ]/i.test("ṡ") is true
+PASS /ṡ/i.test("ẛ") is true
+PASS /[Ṡ-Ṣ]/i.test("ẛ") is true
+PASS /ẛ/i.test("Ṡ") is true
+PASS /[ẚ-ẜ]/i.test("Ṡ") is true
+PASS /ẛ/i.test("ṡ") is true
+PASS /[ẚ-ẜ]/i.test("ṡ") is true
+PASS /ẛ/i.test("ẛ") is true
+PASS /[ẚ-ẜ]/i.test("ẛ") is true
+PASS /Ϗ/i.test("Ϗ") is true
+PASS /ϗ/i.test("Ϗ") is true
+PASS /Ϗ/i.test("ϗ") is true
+PASS /ϗ/i.test("ϗ") is true
+PASS /ἑ/i.test("ἑ") is true
+PASS /Ἑ/i.test("ἑ") is true
+PASS /ἑ/i.test("Ἑ") is true
+PASS /Ἑ/i.test("Ἑ") is true
+PASS /҉/i.test("Ҋ") is false
+PASS /Ҋ/i.test("Ҋ") is true
+PASS /ҋ/i.test("Ҋ") is true
+PASS /Ҍ/i.test("Ҋ") is false
+PASS /҉/i.test("ҋ") is false
+PASS /Ҋ/i.test("ҋ") is true
+PASS /ҋ/i.test("ҋ") is true
+PASS /Ҍ/i.test("ҋ") is false
+PASS /[҉-Ҋ]/i.test("ҋ") is true
+PASS /[ҋ-Ҍ]/i.test("Ҋ") is true
+PASS /ӄ/i.test("Ӆ") is false
+PASS /Ӆ/i.test("Ӆ") is true
+PASS /ӆ/i.test("Ӆ") is true
+PASS /Ӈ/i.test("Ӆ") is false
+PASS /ӄ/i.test("ӆ") is false
+PASS /Ӆ/i.test("ӆ") is true
+PASS /ӆ/i.test("ӆ") is true
+PASS /Ӈ/i.test("ӆ") is false
+PASS /[ӄ-Ӆ]/i.test("ӆ") is true
+PASS /[ӆ-Ӈ]/i.test("Ӆ") is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
--- /dev/null
+// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+// 1. Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// 2. Redistributions in binary form must reproduce the above copyright
+// notice, this list of conditions and the following disclaimer in the
+// documentation and/or other materials provided with the distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+description("https://bugs.webkit.org/show_bug.cgi?id=82063");
+
+shouldBeTrue('/ΣΤΙΓΜΑΣ/i.test("στιγμας")');
+shouldBeTrue('/ΔΣΔ/i.test("δςδ")');
+shouldBeTrue('/ς/i.test("σ")');
+shouldBeTrue('/σ/i.test("ς")');
+
+// Simple case, has no canonical equivalents
+shouldBeTrue('/\u1f16/i.test("\u1f16")')
+
+// Test the sets of USC2 code points that have more than one canonically equivalent value.
+function ucs2CodePoint(x)
+{
+ var s = x.toString(16);
+ while (s.length < 4)
+ s = 0 + s;
+ return eval('"\\u' + s + '"');
+}
+function testSet(set)
+{
+ for (i in set) {
+ for (j in set) {
+ shouldBeTrue('/' + ucs2CodePoint(set[i]) + '/i.test("' + ucs2CodePoint(set[j]) + '")')
+ shouldBeTrue('/[' + ucs2CodePoint(set[i] - 1) + '-' + ucs2CodePoint(set[i] + 1) + ']/i.test("' + ucs2CodePoint(set[j]) + '")')
+ }
+ }
+}
+testSet([ 0x01c4, 0x01c5, 0x01c6 ]);
+testSet([ 0x01c7, 0x01c8, 0x01c9 ]);
+testSet([ 0x01ca, 0x01cb, 0x01cc ]);
+testSet([ 0x01f1, 0x01f2, 0x01f3 ]);
+testSet([ 0x0392, 0x03b2, 0x03d0 ]);
+testSet([ 0x0395, 0x03b5, 0x03f5 ]);
+testSet([ 0x0398, 0x03b8, 0x03d1 ]);
+testSet([ 0x0345, 0x0399, 0x03b9, 0x1fbe ]);
+testSet([ 0x039a, 0x03ba, 0x03f0 ]);
+testSet([ 0x00b5, 0x039c, 0x03bc ]);
+testSet([ 0x03a0, 0x03c0, 0x03d6 ]);
+testSet([ 0x03a1, 0x03c1, 0x03f1 ]);
+testSet([ 0x03a3, 0x03c2, 0x03c3 ]);
+testSet([ 0x03a6, 0x03c6, 0x03d5 ]);
+testSet([ 0x1e60, 0x1e61, 0x1e9b ]);
+
+// Test a couple of lo/hi pairs
+shouldBeTrue('/\u03cf/i.test("\u03cf")')
+shouldBeTrue('/\u03d7/i.test("\u03cf")')
+shouldBeTrue('/\u03cf/i.test("\u03d7")')
+shouldBeTrue('/\u03d7/i.test("\u03d7")')
+shouldBeTrue('/\u1f11/i.test("\u1f11")')
+shouldBeTrue('/\u1f19/i.test("\u1f11")')
+shouldBeTrue('/\u1f11/i.test("\u1f19")')
+shouldBeTrue('/\u1f19/i.test("\u1f19")')
+
+// Test an aligned alternating capitalization pair.
+shouldBeFalse('/\u0489/i.test("\u048a")')
+shouldBeTrue('/\u048a/i.test("\u048a")')
+shouldBeTrue('/\u048b/i.test("\u048a")')
+shouldBeFalse('/\u048c/i.test("\u048a")')
+shouldBeFalse('/\u0489/i.test("\u048b")')
+shouldBeTrue('/\u048a/i.test("\u048b")')
+shouldBeTrue('/\u048b/i.test("\u048b")')
+shouldBeFalse('/\u048c/i.test("\u048b")')
+shouldBeTrue('/[\u0489-\u048a]/i.test("\u048b")')
+shouldBeTrue('/[\u048b-\u048c]/i.test("\u048a")')
+
+// Test an unaligned alternating capitalization pair.
+shouldBeFalse('/\u04c4/i.test("\u04c5")')
+shouldBeTrue('/\u04c5/i.test("\u04c5")')
+shouldBeTrue('/\u04c6/i.test("\u04c5")')
+shouldBeFalse('/\u04c7/i.test("\u04c5")')
+shouldBeFalse('/\u04c4/i.test("\u04c6")')
+shouldBeTrue('/\u04c5/i.test("\u04c6")')
+shouldBeTrue('/\u04c6/i.test("\u04c6")')
+shouldBeFalse('/\u04c7/i.test("\u04c6")')
+shouldBeTrue('/[\u04c4-\u04c5]/i.test("\u04c6")')
+shouldBeTrue('/[\u04c6-\u04c7]/i.test("\u04c5")')
+
+var successfullyParsed = true;
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
var wasPostTestScriptParsed = false;
-var errorMessage;
+
+function removeLink(text)
+{
+ return text.replace(/<a[^>]*>/g, "").replace(/<\/a>/g, "");
+}
function description(msg)
{
- print(msg);
+ print(removeLink(msg));
print("\nOn success, you will see a series of \"PASS\" messages, followed by \"TEST COMPLETE\".\n");
print();
}
function testFailed(msg)
{
- errorMessage = msg;
print("FAIL", escapeString(msg));
}
function isSuccessfullyParsed()
{
- // FIXME: Remove this and only report unexpected syntax errors.
- if (!errorMessage)
- successfullyParsed = true;
+ successfullyParsed = true;
shouldBeTrue("successfullyParsed");
debug("\nTEST COMPLETE\n");
}