Function.name and Function.length should be configurable.
authormark.lam@apple.com <mark.lam@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 26 Feb 2016 22:29:59 +0000 (22:29 +0000)
committermark.lam@apple.com <mark.lam@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 26 Feb 2016 22:29:59 +0000 (22:29 +0000)
https://bugs.webkit.org/show_bug.cgi?id=154604

Reviewed by Saam Barati.

Source/JavaScriptCore:

According to https://tc39.github.io/ecma262/#sec-ecmascript-language-functions-and-classes,
"Unless otherwise specified, the name property of a built-in Function object,
if it exists, has the attributes { [[Writable]]: false, [[Enumerable]]: false,
[[Configurable]]: true }."

Similarly, "the length property of a built-in Function object has the attributes
{ [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true }."

This patch makes Function.name and Function.length configurable.

We do this by lazily reifying the JSFunction name and length properties on first
access.  We track whether each of these properties have been reified using flags
in the FunctionRareData.  On first access, if not already reified, we will put
the property into the object with its default value and attributes and set the
reified flag.  Thereafter, we rely on the base JSObject to handle access to the
property.

Also, lots of test results have to be re-baselined because the old Function.length
has attribute DontDelete, which is in conflict with the ES6 requirement that it
is configurable.

* runtime/FunctionRareData.h:
(JSC::FunctionRareData::hasReifiedLength):
(JSC::FunctionRareData::setHasReifiedLength):
(JSC::FunctionRareData::hasReifiedName):
(JSC::FunctionRareData::setHasReifiedName):
- Flags for tracking whether each property has been reified.

* runtime/JSFunction.cpp:
(JSC::JSFunction::finishCreation):
(JSC::JSFunction::createBuiltinFunction):
- Host and builtin functions currently always reify their name and length
  properties.  Currently, for builtins, the default names that are used may
  differ from the executable name.  For now, we'll stay with keeping this
  alternate approach to getting the name and length properties for host and
  builtin functions.
  However, we need their default attribute to be configurable as well.

(JSC::JSFunction::getOwnPropertySlot):
(JSC::JSFunction::getOwnNonIndexPropertyNames):
(JSC::JSFunction::put):
(JSC::JSFunction::deleteProperty):
(JSC::JSFunction::defineOwnProperty):
(JSC::JSFunction::reifyLength):
(JSC::JSFunction::reifyName):
(JSC::JSFunction::reifyLazyPropertyIfNeeded):
(JSC::JSFunction::lengthGetter): Deleted.
(JSC::JSFunction::nameGetter): Deleted.
* runtime/JSFunction.h:
* runtime/JSFunctionInlines.h:
(JSC::JSFunction::hasReifiedLength):
(JSC::JSFunction::hasReifiedName):

* tests/es6.yaml:
- 4 new passing tests.

* tests/mozilla/ecma/Array/15.4.4.3-1.js:
* tests/mozilla/ecma/Array/15.4.4.4-1.js:
* tests/mozilla/ecma/Array/15.4.4.4-2.js:
* tests/mozilla/ecma/GlobalObject/15.1.2.1-1.js:
* tests/mozilla/ecma/GlobalObject/15.1.2.2-1.js:
* tests/mozilla/ecma/GlobalObject/15.1.2.3-1.js:
* tests/mozilla/ecma/GlobalObject/15.1.2.4.js:
* tests/mozilla/ecma/GlobalObject/15.1.2.5-1.js:
* tests/mozilla/ecma/GlobalObject/15.1.2.6.js:
* tests/mozilla/ecma/GlobalObject/15.1.2.7.js:
* tests/mozilla/ecma/String/15.5.4.10-1.js:
* tests/mozilla/ecma/String/15.5.4.11-1.js:
* tests/mozilla/ecma/String/15.5.4.11-5.js:
* tests/mozilla/ecma/String/15.5.4.12-1.js:
* tests/mozilla/ecma/String/15.5.4.6-2.js:
* tests/mozilla/ecma/String/15.5.4.7-2.js:
* tests/mozilla/ecma/String/15.5.4.8-1.js:
* tests/mozilla/ecma/String/15.5.4.9-1.js:
- Rebase expected test results.

* tests/stress/function-configurable-properties.js: Added.

LayoutTests:

* ietestcenter/Javascript/TestCases/15.2.3.3-4-187.js:
(ES5Harness.registerTest.test):
* ietestcenter/Javascript/TestCases/15.3.4.5-15-2.js:
(ES5Harness.registerTest.test):
* js/dom/function-name-expected.txt:
* js/dom/getOwnPropertyDescriptor-expected.txt:
* js/dom/script-tests/function-name.js:
* js/mozilla/strict/15.3.5.1-expected.txt:
* js/mozilla/strict/function-name-arity-expected.txt:
* js/mozilla/strict/script-tests/15.3.5.1.js:
* js/mozilla/strict/script-tests/function-name-arity.js:
* js/resources/getOwnPropertyDescriptor.js:
* sputnik/Conformance/15_Native_Objects/15.10_RegExp/15.10.6/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A9.html:
* sputnik/Conformance/15_Native_Objects/15.10_RegExp/15.10.6/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A9.html:
* sputnik/Conformance/15_Native_Objects/15.10_RegExp/15.10.6/15.10.6.4_RegExp.prototype.toString/S15.10.6.4_A9.html:
* sputnik/Conformance/15_Native_Objects/15.1_The_Global_Object/15.1.2/15.1.2.1_eval/S15.1.2.1_A4.2.html:
* sputnik/Conformance/15_Native_Objects/15.1_The_Global_Object/15.1.2/15.1.2.2_parseInt/S15.1.2.2_A9.2.html:
* sputnik/Conformance/15_Native_Objects/15.1_The_Global_Object/15.1.2/15.1.2.3_parseFloat/S15.1.2.3_A7.2.html:
* sputnik/Conformance/15_Native_Objects/15.1_The_Global_Object/15.1.2/15.1.2.4_isNaN/S15.1.2.4_A2.2.html:
* sputnik/Conformance/15_Native_Objects/15.1_The_Global_Object/15.1.2/15.1.2.5_isFinite/S15.1.2.5_A2.2.html:
* sputnik/Conformance/15_Native_Objects/15.1_The_Global_Object/15.1.3/15.1.3.1_decodeURI/S15.1.3.1_A5.2.html:
* sputnik/Conformance/15_Native_Objects/15.1_The_Global_Object/15.1.3/15.1.3.2_decodeURIComponent/S15.1.3.2_A5.2.html:
* sputnik/Conformance/15_Native_Objects/15.1_The_Global_Object/15.1.3/15.1.3.3_encodeURI/S15.1.3.3_A5.2.html:
* sputnik/Conformance/15_Native_Objects/15.1_The_Global_Object/15.1.3/15.1.3.4_encodeURIComponent/S15.1.3.4_A5.2.html:
* sputnik/Conformance/15_Native_Objects/15.2_Object/15.2.4/15.2.4.2_Object.prototype.toString/S15.2.4.2_A9.html:
* sputnik/Conformance/15_Native_Objects/15.2_Object/15.2.4/15.2.4.3_Object.prototype.toLocaleString/S15.2.4.3_A9.html:
* sputnik/Conformance/15_Native_Objects/15.2_Object/15.2.4/15.2.4.4_Object.prototype.valueOf/S15.2.4.4_A9.html:
* sputnik/Conformance/15_Native_Objects/15.2_Object/15.2.4/15.2.4.5_Object.prototype.hasOwnProperty/S15.2.4.5_A9.html:
* sputnik/Conformance/15_Native_Objects/15.2_Object/15.2.4/15.2.4.6_Object.prototype.isPrototypeOf/S15.2.4.6_A9.html:
* sputnik/Conformance/15_Native_Objects/15.2_Object/15.2.4/15.2.4.7_Object.prototype.propertyIsEnumerable/S15.2.4.7_A9.html:
* sputnik/Conformance/15_Native_Objects/15.3_Function/15.3.4/15.3.4.2_Function.prototype.toString/S15.3.4.2_A9.html:
* sputnik/Conformance/15_Native_Objects/15.3_Function/15.3.4/15.3.4.3_Function.prototype.apply/S15.3.4.3_A9.html:
* sputnik/Conformance/15_Native_Objects/15.3_Function/15.3.4/15.3.4.4_Function.prototype.call/S15.3.4.4_A9.html:
* sputnik/Conformance/15_Native_Objects/15.3_Function/15.3.5/S15.3.5.1_A2_T1.html:
* sputnik/Conformance/15_Native_Objects/15.3_Function/15.3.5/S15.3.5.1_A2_T2.html:
* sputnik/Conformance/15_Native_Objects/15.3_Function/15.3.5/S15.3.5.1_A2_T3.html:
* sputnik/Conformance/15_Native_Objects/15.4_Array/15.4.4/15.4.4.10_Array_prototype_slice/S15.4.4.10_A5.2.html:
* sputnik/Conformance/15_Native_Objects/15.4_Array/15.4.4/15.4.4.11_Array_prototype_sort/S15.4.4.11_A7.2.html:
* sputnik/Conformance/15_Native_Objects/15.4_Array/15.4.4/15.4.4.12_Array_prototype_splice/S15.4.4.12_A5.2.html:
* sputnik/Conformance/15_Native_Objects/15.4_Array/15.4.4/15.4.4.13_Array_prototype_unshift/S15.4.4.13_A5.2.html:
* sputnik/Conformance/15_Native_Objects/15.4_Array/15.4.4/15.4.4.2_Array_prototype_toString/S15.4.4.2_A4.2.html:
* sputnik/Conformance/15_Native_Objects/15.4_Array/15.4.4/15.4.4.3_Array_prototype_toLocaleString/S15.4.4.3_A4.2.html:
* sputnik/Conformance/15_Native_Objects/15.4_Array/15.4.4/15.4.4.4_Array_prototype_concat/S15.4.4.4_A4.2.html:
* sputnik/Conformance/15_Native_Objects/15.4_Array/15.4.4/15.4.4.5_Array_prototype_join/S15.4.4.5_A6.2.html:
* sputnik/Conformance/15_Native_Objects/15.4_Array/15.4.4/15.4.4.6_Array_prototype_pop/S15.4.4.6_A5.2.html:
* sputnik/Conformance/15_Native_Objects/15.4_Array/15.4.4/15.4.4.7_Array_prototype_push/S15.4.4.7_A6.2.html:
* sputnik/Conformance/15_Native_Objects/15.4_Array/15.4.4/15.4.4.8_Array_prototype_reverse/S15.4.4.8_A5.2.html:
* sputnik/Conformance/15_Native_Objects/15.4_Array/15.4.4/15.4.4.9_Array_prototype_shift/S15.4.4.9_A5.2.html:
* sputnik/Conformance/15_Native_Objects/15.5_String/15.5.4/15.5.4.10_String.prototype.match/S15.5.4.10_A9.html:
* sputnik/Conformance/15_Native_Objects/15.5_String/15.5.4/15.5.4.11_String.prototype.replace/S15.5.4.11_A9.html:
* sputnik/Conformance/15_Native_Objects/15.5_String/15.5.4/15.5.4.12_String.prototype.search/S15.5.4.12_A9.html:
* sputnik/Conformance/15_Native_Objects/15.5_String/15.5.4/15.5.4.13_String.prototype.slice/S15.5.4.13_A9.html:
* sputnik/Conformance/15_Native_Objects/15.5_String/15.5.4/15.5.4.14_String.prototype.split/S15.5.4.14_A9.html:
* sputnik/Conformance/15_Native_Objects/15.5_String/15.5.4/15.5.4.15_String.prototype.substring/S15.5.4.15_A9.html:
* sputnik/Conformance/15_Native_Objects/15.5_String/15.5.4/15.5.4.16_String.prototype.toLowerCase/S15.5.4.16_A9.html:
* sputnik/Conformance/15_Native_Objects/15.5_String/15.5.4/15.5.4.17_String.prototype.toLocaleLowerCase/S15.5.4.17_A9.html:
* sputnik/Conformance/15_Native_Objects/15.5_String/15.5.4/15.5.4.18_String.prototype.toUpperCase/S15.5.4.18_A9.html:
* sputnik/Conformance/15_Native_Objects/15.5_String/15.5.4/15.5.4.19_String.prototype.toLocaleUpperCase/S15.5.4.19_A9.html:
* sputnik/Conformance/15_Native_Objects/15.5_String/15.5.4/15.5.4.4_String.prototype.charAt/S15.5.4.4_A9.html:
* sputnik/Conformance/15_Native_Objects/15.5_String/15.5.4/15.5.4.5_String.prototype.charCodeAt/S15.5.4.5_A9.html:
* sputnik/Conformance/15_Native_Objects/15.5_String/15.5.4/15.5.4.6_String.prototype.concat/S15.5.4.6_A9.html:
* sputnik/Conformance/15_Native_Objects/15.5_String/15.5.4/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A9.html:
* sputnik/Conformance/15_Native_Objects/15.5_String/15.5.4/15.5.4.8_String.prototype.lastIndexOf/S15.5.4.8_A9.html:
* sputnik/Conformance/15_Native_Objects/15.5_String/15.5.4/15.5.4.9_String.prototype.localeCompare/S15.5.4.9_A9.html:
* sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.4/15.9.4.2_Date.parse/S15.9.4.2_A3_T2.html:
* sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.4/15.9.4.3_Date.UTC/S15.9.4.3_A3_T2.html:
* sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.10_Date.prototype.getFullYear/S15.9.5.10_A3_T2.html:
* sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.11_Date.prototype.getUTCFullYear/S15.9.5.11_A3_T2.html:
* sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.12_Date.prototype.getMonth/S15.9.5.12_A3_T2.html:
* sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.13_Date.prototype.getUTCMonth/S15.9.5.13_A3_T2.html:
* sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.14_Date.prototype.getDate/S15.9.5.14_A3_T2.html:
* sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.15_Date.prototype.getUTCDate/S15.9.5.15_A3_T2.html:
* sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.16_Date.prototype.getDay/S15.9.5.16_A3_T2.html:
* sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.17_Date.prototype.getUTCDay/S15.9.5.17_A3_T2.html:
* sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.18_Date.prototype.getHours/S15.9.5.18_A3_T2.html:
* sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.19_Date.prototype.getUTCHours/S15.9.5.19_A3_T2.html:
* sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.20_Date.prototype.getMinutes/S15.9.5.20_A3_T2.html:
* sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.21_Date.prototype.getUTCMinutes/S15.9.5.21_A3_T2.html:
* sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.22_Date.prototype.getSeconds/S15.9.5.22_A3_T2.html:
* sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.23_Date.prototype.getUTCSeconds/S15.9.5.23_A3_T2.html:
* sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.24_Date.prototype.getMilliseconds/S15.9.5.24_A3_T2.html:
* sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.25_Date.prototype.getUTCMilliseconds/S15.9.5.25_A3_T2.html:
* sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.26_Date.prototype.getTimezoneOffset/S15.9.5.26_A3_T2.html:
* sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.27_Date.prototype.setTime/S15.9.5.27_A3_T2.html:
* sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.28_Date.prototype.setMilliseconds/S15.9.5.28_A3_T2.html:
* sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.29_Date.prototype.setUTCMilliseconds/S15.9.5.29_A3_T2.html:
* sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.2_Date.prototype.toString/S15.9.5.2_A3_T2.html:
* sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.30_Date.prototype.setSeconds/S15.9.5.30_A3_T2.html:
* sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.31_Date.prototype.setUTCSeconds/S15.9.5.31_A3_T2.html:
* sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.32_Date.prototype.setMinutes/S15.9.5.32_A3_T2.html:
* sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.33_Date.prototype.setUTCMinutes/S15.9.5.33_A3_T2.html:
* sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.34_Date.prototype.setHours/S15.9.5.34_A3_T2.html:
* sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.35_Date.prototype.setUTCHours/S15.9.5.35_A3_T2.html:
* sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.36_Date.prototype.setDate/S15.9.5.36_A3_T2.html:
* sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.37_Date.prototype.setUTCDate/S15.9.5.37_A3_T2.html:
* sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.38_Date.prototype.setMonth/S15.9.5.38_A3_T2.html:
* sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.39_Date.prototype.setUTCMonth/S15.9.5.39_A3_T2.html:
* sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.3_Date.prototype.toDateString/S15.9.5.3_A3_T2.html:
* sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.40_Date.prototype.setFullYear/S15.9.5.40_A3_T2.html:
* sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.41_Date.prototype.setUTCFullYear/S15.9.5.41_A3_T2.html:
* sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.42_Date.prototype.toUTCString/S15.9.5.42_A3_T2.html:
* sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.4_Date.prototype.toTimeString/S15.9.5.4_A3_T2.html:
* sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.5_Date.prototype.toLocaleString/S15.9.5.5_A3_T2.html:
* sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.6_Date.prototype.toLocaleDateString/S15.9.5.6_A3_T2.html:
* sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.7_Date.prototype.toLocaleTimeString/S15.9.5.7_A3_T2.html:
* sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.8_Date.prototype.valueOf/S15.9.5.8_A3_T2.html:
* sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.9_Date.prototype.getTime/S15.9.5.9_A3_T2.html:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@197205 268f45cc-cd09-0410-ab3c-d52691b4dbfc

131 files changed:
LayoutTests/ChangeLog
LayoutTests/ietestcenter/Javascript/TestCases/15.2.3.3-4-187.js
LayoutTests/ietestcenter/Javascript/TestCases/15.3.4.5-15-2.js
LayoutTests/js/dom/function-name-expected.txt
LayoutTests/js/dom/getOwnPropertyDescriptor-expected.txt
LayoutTests/js/dom/script-tests/function-name.js
LayoutTests/js/mozilla/strict/15.3.5.1-expected.txt
LayoutTests/js/mozilla/strict/function-name-arity-expected.txt
LayoutTests/js/mozilla/strict/script-tests/15.3.5.1.js
LayoutTests/js/mozilla/strict/script-tests/function-name-arity.js
LayoutTests/js/resources/getOwnPropertyDescriptor.js
LayoutTests/sputnik/Conformance/15_Native_Objects/15.10_RegExp/15.10.6/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A9.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.10_RegExp/15.10.6/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A9.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.10_RegExp/15.10.6/15.10.6.4_RegExp.prototype.toString/S15.10.6.4_A9.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.1_The_Global_Object/15.1.2/15.1.2.1_eval/S15.1.2.1_A4.2.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.1_The_Global_Object/15.1.2/15.1.2.2_parseInt/S15.1.2.2_A9.2.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.1_The_Global_Object/15.1.2/15.1.2.3_parseFloat/S15.1.2.3_A7.2.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.1_The_Global_Object/15.1.2/15.1.2.4_isNaN/S15.1.2.4_A2.2.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.1_The_Global_Object/15.1.2/15.1.2.5_isFinite/S15.1.2.5_A2.2.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.1_The_Global_Object/15.1.3/15.1.3.1_decodeURI/S15.1.3.1_A5.2.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.1_The_Global_Object/15.1.3/15.1.3.2_decodeURIComponent/S15.1.3.2_A5.2.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.1_The_Global_Object/15.1.3/15.1.3.3_encodeURI/S15.1.3.3_A5.2.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.1_The_Global_Object/15.1.3/15.1.3.4_encodeURIComponent/S15.1.3.4_A5.2.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.2_Object/15.2.4/15.2.4.2_Object.prototype.toString/S15.2.4.2_A9.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.2_Object/15.2.4/15.2.4.3_Object.prototype.toLocaleString/S15.2.4.3_A9.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.2_Object/15.2.4/15.2.4.4_Object.prototype.valueOf/S15.2.4.4_A9.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.2_Object/15.2.4/15.2.4.5_Object.prototype.hasOwnProperty/S15.2.4.5_A9.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.2_Object/15.2.4/15.2.4.6_Object.prototype.isPrototypeOf/S15.2.4.6_A9.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.2_Object/15.2.4/15.2.4.7_Object.prototype.propertyIsEnumerable/S15.2.4.7_A9.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.3_Function/15.3.4/15.3.4.2_Function.prototype.toString/S15.3.4.2_A9.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.3_Function/15.3.4/15.3.4.3_Function.prototype.apply/S15.3.4.3_A9.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.3_Function/15.3.4/15.3.4.4_Function.prototype.call/S15.3.4.4_A9.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.3_Function/15.3.5/S15.3.5.1_A2_T1.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.3_Function/15.3.5/S15.3.5.1_A2_T2.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.3_Function/15.3.5/S15.3.5.1_A2_T3.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.4_Array/15.4.4/15.4.4.10_Array_prototype_slice/S15.4.4.10_A5.2.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.4_Array/15.4.4/15.4.4.11_Array_prototype_sort/S15.4.4.11_A7.2.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.4_Array/15.4.4/15.4.4.12_Array_prototype_splice/S15.4.4.12_A5.2.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.4_Array/15.4.4/15.4.4.13_Array_prototype_unshift/S15.4.4.13_A5.2.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.4_Array/15.4.4/15.4.4.2_Array_prototype_toString/S15.4.4.2_A4.2.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.4_Array/15.4.4/15.4.4.3_Array_prototype_toLocaleString/S15.4.4.3_A4.2.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.4_Array/15.4.4/15.4.4.4_Array_prototype_concat/S15.4.4.4_A4.2.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.4_Array/15.4.4/15.4.4.5_Array_prototype_join/S15.4.4.5_A6.2.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.4_Array/15.4.4/15.4.4.6_Array_prototype_pop/S15.4.4.6_A5.2.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.4_Array/15.4.4/15.4.4.7_Array_prototype_push/S15.4.4.7_A6.2.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.4_Array/15.4.4/15.4.4.8_Array_prototype_reverse/S15.4.4.8_A5.2.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.4_Array/15.4.4/15.4.4.9_Array_prototype_shift/S15.4.4.9_A5.2.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.5_String/15.5.4/15.5.4.10_String.prototype.match/S15.5.4.10_A9.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.5_String/15.5.4/15.5.4.11_String.prototype.replace/S15.5.4.11_A9.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.5_String/15.5.4/15.5.4.12_String.prototype.search/S15.5.4.12_A9.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.5_String/15.5.4/15.5.4.13_String.prototype.slice/S15.5.4.13_A9.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.5_String/15.5.4/15.5.4.14_String.prototype.split/S15.5.4.14_A9.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.5_String/15.5.4/15.5.4.15_String.prototype.substring/S15.5.4.15_A9.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.5_String/15.5.4/15.5.4.16_String.prototype.toLowerCase/S15.5.4.16_A9.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.5_String/15.5.4/15.5.4.17_String.prototype.toLocaleLowerCase/S15.5.4.17_A9.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.5_String/15.5.4/15.5.4.18_String.prototype.toUpperCase/S15.5.4.18_A9.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.5_String/15.5.4/15.5.4.19_String.prototype.toLocaleUpperCase/S15.5.4.19_A9.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.5_String/15.5.4/15.5.4.4_String.prototype.charAt/S15.5.4.4_A9.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.5_String/15.5.4/15.5.4.5_String.prototype.charCodeAt/S15.5.4.5_A9.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.5_String/15.5.4/15.5.4.6_String.prototype.concat/S15.5.4.6_A9.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.5_String/15.5.4/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A9.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.5_String/15.5.4/15.5.4.8_String.prototype.lastIndexOf/S15.5.4.8_A9.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.5_String/15.5.4/15.5.4.9_String.prototype.localeCompare/S15.5.4.9_A9.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.4/15.9.4.2_Date.parse/S15.9.4.2_A3_T2.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.4/15.9.4.3_Date.UTC/S15.9.4.3_A3_T2.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.10_Date.prototype.getFullYear/S15.9.5.10_A3_T2.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.11_Date.prototype.getUTCFullYear/S15.9.5.11_A3_T2.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.12_Date.prototype.getMonth/S15.9.5.12_A3_T2.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.13_Date.prototype.getUTCMonth/S15.9.5.13_A3_T2.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.14_Date.prototype.getDate/S15.9.5.14_A3_T2.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.15_Date.prototype.getUTCDate/S15.9.5.15_A3_T2.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.16_Date.prototype.getDay/S15.9.5.16_A3_T2.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.17_Date.prototype.getUTCDay/S15.9.5.17_A3_T2.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.18_Date.prototype.getHours/S15.9.5.18_A3_T2.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.19_Date.prototype.getUTCHours/S15.9.5.19_A3_T2.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.20_Date.prototype.getMinutes/S15.9.5.20_A3_T2.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.21_Date.prototype.getUTCMinutes/S15.9.5.21_A3_T2.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.22_Date.prototype.getSeconds/S15.9.5.22_A3_T2.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.23_Date.prototype.getUTCSeconds/S15.9.5.23_A3_T2.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.24_Date.prototype.getMilliseconds/S15.9.5.24_A3_T2.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.25_Date.prototype.getUTCMilliseconds/S15.9.5.25_A3_T2.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.26_Date.prototype.getTimezoneOffset/S15.9.5.26_A3_T2.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.27_Date.prototype.setTime/S15.9.5.27_A3_T2.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.28_Date.prototype.setMilliseconds/S15.9.5.28_A3_T2.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.29_Date.prototype.setUTCMilliseconds/S15.9.5.29_A3_T2.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.2_Date.prototype.toString/S15.9.5.2_A3_T2.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.30_Date.prototype.setSeconds/S15.9.5.30_A3_T2.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.31_Date.prototype.setUTCSeconds/S15.9.5.31_A3_T2.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.32_Date.prototype.setMinutes/S15.9.5.32_A3_T2.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.33_Date.prototype.setUTCMinutes/S15.9.5.33_A3_T2.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.34_Date.prototype.setHours/S15.9.5.34_A3_T2.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.35_Date.prototype.setUTCHours/S15.9.5.35_A3_T2.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.36_Date.prototype.setDate/S15.9.5.36_A3_T2.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.37_Date.prototype.setUTCDate/S15.9.5.37_A3_T2.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.38_Date.prototype.setMonth/S15.9.5.38_A3_T2.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.39_Date.prototype.setUTCMonth/S15.9.5.39_A3_T2.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.3_Date.prototype.toDateString/S15.9.5.3_A3_T2.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.40_Date.prototype.setFullYear/S15.9.5.40_A3_T2.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.41_Date.prototype.setUTCFullYear/S15.9.5.41_A3_T2.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.42_Date.prototype.toUTCString/S15.9.5.42_A3_T2.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.4_Date.prototype.toTimeString/S15.9.5.4_A3_T2.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.5_Date.prototype.toLocaleString/S15.9.5.5_A3_T2.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.6_Date.prototype.toLocaleDateString/S15.9.5.6_A3_T2.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.7_Date.prototype.toLocaleTimeString/S15.9.5.7_A3_T2.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.8_Date.prototype.valueOf/S15.9.5.8_A3_T2.html
LayoutTests/sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.9_Date.prototype.getTime/S15.9.5.9_A3_T2.html
Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/runtime/FunctionRareData.h
Source/JavaScriptCore/runtime/JSFunction.cpp
Source/JavaScriptCore/runtime/JSFunction.h
Source/JavaScriptCore/runtime/JSFunctionInlines.h
Source/JavaScriptCore/tests/es6.yaml
Source/JavaScriptCore/tests/mozilla/ecma/Array/15.4.4.3-1.js
Source/JavaScriptCore/tests/mozilla/ecma/Array/15.4.4.4-1.js
Source/JavaScriptCore/tests/mozilla/ecma/Array/15.4.4.4-2.js
Source/JavaScriptCore/tests/mozilla/ecma/GlobalObject/15.1.2.1-1.js
Source/JavaScriptCore/tests/mozilla/ecma/GlobalObject/15.1.2.2-1.js
Source/JavaScriptCore/tests/mozilla/ecma/GlobalObject/15.1.2.3-1.js
Source/JavaScriptCore/tests/mozilla/ecma/GlobalObject/15.1.2.4.js
Source/JavaScriptCore/tests/mozilla/ecma/GlobalObject/15.1.2.5-1.js
Source/JavaScriptCore/tests/mozilla/ecma/GlobalObject/15.1.2.6.js
Source/JavaScriptCore/tests/mozilla/ecma/GlobalObject/15.1.2.7.js
Source/JavaScriptCore/tests/mozilla/ecma/String/15.5.4.10-1.js
Source/JavaScriptCore/tests/mozilla/ecma/String/15.5.4.11-1.js
Source/JavaScriptCore/tests/mozilla/ecma/String/15.5.4.11-5.js
Source/JavaScriptCore/tests/mozilla/ecma/String/15.5.4.12-1.js
Source/JavaScriptCore/tests/mozilla/ecma/String/15.5.4.6-2.js
Source/JavaScriptCore/tests/mozilla/ecma/String/15.5.4.7-2.js
Source/JavaScriptCore/tests/mozilla/ecma/String/15.5.4.8-1.js
Source/JavaScriptCore/tests/mozilla/ecma/String/15.5.4.9-1.js
Source/JavaScriptCore/tests/stress/function-configurable-properties.js [new file with mode: 0644]

index 5707fde..28314bc 100644 (file)
@@ -1,3 +1,118 @@
+2016-02-26  Mark Lam  <mark.lam@apple.com>
+
+        Function.name and Function.length should be configurable.
+        https://bugs.webkit.org/show_bug.cgi?id=154604
+
+        Reviewed by Saam Barati.
+
+        * ietestcenter/Javascript/TestCases/15.2.3.3-4-187.js:
+        (ES5Harness.registerTest.test):
+        * ietestcenter/Javascript/TestCases/15.3.4.5-15-2.js:
+        (ES5Harness.registerTest.test):
+        * js/dom/function-name-expected.txt:
+        * js/dom/getOwnPropertyDescriptor-expected.txt:
+        * js/dom/script-tests/function-name.js:
+        * js/mozilla/strict/15.3.5.1-expected.txt:
+        * js/mozilla/strict/function-name-arity-expected.txt:
+        * js/mozilla/strict/script-tests/15.3.5.1.js:
+        * js/mozilla/strict/script-tests/function-name-arity.js:
+        * js/resources/getOwnPropertyDescriptor.js:
+        * sputnik/Conformance/15_Native_Objects/15.10_RegExp/15.10.6/15.10.6.2_RegExp.prototype.exec/S15.10.6.2_A9.html:
+        * sputnik/Conformance/15_Native_Objects/15.10_RegExp/15.10.6/15.10.6.3_RegExp.prototype.test/S15.10.6.3_A9.html:
+        * sputnik/Conformance/15_Native_Objects/15.10_RegExp/15.10.6/15.10.6.4_RegExp.prototype.toString/S15.10.6.4_A9.html:
+        * sputnik/Conformance/15_Native_Objects/15.1_The_Global_Object/15.1.2/15.1.2.1_eval/S15.1.2.1_A4.2.html:
+        * sputnik/Conformance/15_Native_Objects/15.1_The_Global_Object/15.1.2/15.1.2.2_parseInt/S15.1.2.2_A9.2.html:
+        * sputnik/Conformance/15_Native_Objects/15.1_The_Global_Object/15.1.2/15.1.2.3_parseFloat/S15.1.2.3_A7.2.html:
+        * sputnik/Conformance/15_Native_Objects/15.1_The_Global_Object/15.1.2/15.1.2.4_isNaN/S15.1.2.4_A2.2.html:
+        * sputnik/Conformance/15_Native_Objects/15.1_The_Global_Object/15.1.2/15.1.2.5_isFinite/S15.1.2.5_A2.2.html:
+        * sputnik/Conformance/15_Native_Objects/15.1_The_Global_Object/15.1.3/15.1.3.1_decodeURI/S15.1.3.1_A5.2.html:
+        * sputnik/Conformance/15_Native_Objects/15.1_The_Global_Object/15.1.3/15.1.3.2_decodeURIComponent/S15.1.3.2_A5.2.html:
+        * sputnik/Conformance/15_Native_Objects/15.1_The_Global_Object/15.1.3/15.1.3.3_encodeURI/S15.1.3.3_A5.2.html:
+        * sputnik/Conformance/15_Native_Objects/15.1_The_Global_Object/15.1.3/15.1.3.4_encodeURIComponent/S15.1.3.4_A5.2.html:
+        * sputnik/Conformance/15_Native_Objects/15.2_Object/15.2.4/15.2.4.2_Object.prototype.toString/S15.2.4.2_A9.html:
+        * sputnik/Conformance/15_Native_Objects/15.2_Object/15.2.4/15.2.4.3_Object.prototype.toLocaleString/S15.2.4.3_A9.html:
+        * sputnik/Conformance/15_Native_Objects/15.2_Object/15.2.4/15.2.4.4_Object.prototype.valueOf/S15.2.4.4_A9.html:
+        * sputnik/Conformance/15_Native_Objects/15.2_Object/15.2.4/15.2.4.5_Object.prototype.hasOwnProperty/S15.2.4.5_A9.html:
+        * sputnik/Conformance/15_Native_Objects/15.2_Object/15.2.4/15.2.4.6_Object.prototype.isPrototypeOf/S15.2.4.6_A9.html:
+        * sputnik/Conformance/15_Native_Objects/15.2_Object/15.2.4/15.2.4.7_Object.prototype.propertyIsEnumerable/S15.2.4.7_A9.html:
+        * sputnik/Conformance/15_Native_Objects/15.3_Function/15.3.4/15.3.4.2_Function.prototype.toString/S15.3.4.2_A9.html:
+        * sputnik/Conformance/15_Native_Objects/15.3_Function/15.3.4/15.3.4.3_Function.prototype.apply/S15.3.4.3_A9.html:
+        * sputnik/Conformance/15_Native_Objects/15.3_Function/15.3.4/15.3.4.4_Function.prototype.call/S15.3.4.4_A9.html:
+        * sputnik/Conformance/15_Native_Objects/15.3_Function/15.3.5/S15.3.5.1_A2_T1.html:
+        * sputnik/Conformance/15_Native_Objects/15.3_Function/15.3.5/S15.3.5.1_A2_T2.html:
+        * sputnik/Conformance/15_Native_Objects/15.3_Function/15.3.5/S15.3.5.1_A2_T3.html:
+        * sputnik/Conformance/15_Native_Objects/15.4_Array/15.4.4/15.4.4.10_Array_prototype_slice/S15.4.4.10_A5.2.html:
+        * sputnik/Conformance/15_Native_Objects/15.4_Array/15.4.4/15.4.4.11_Array_prototype_sort/S15.4.4.11_A7.2.html:
+        * sputnik/Conformance/15_Native_Objects/15.4_Array/15.4.4/15.4.4.12_Array_prototype_splice/S15.4.4.12_A5.2.html:
+        * sputnik/Conformance/15_Native_Objects/15.4_Array/15.4.4/15.4.4.13_Array_prototype_unshift/S15.4.4.13_A5.2.html:
+        * sputnik/Conformance/15_Native_Objects/15.4_Array/15.4.4/15.4.4.2_Array_prototype_toString/S15.4.4.2_A4.2.html:
+        * sputnik/Conformance/15_Native_Objects/15.4_Array/15.4.4/15.4.4.3_Array_prototype_toLocaleString/S15.4.4.3_A4.2.html:
+        * sputnik/Conformance/15_Native_Objects/15.4_Array/15.4.4/15.4.4.4_Array_prototype_concat/S15.4.4.4_A4.2.html:
+        * sputnik/Conformance/15_Native_Objects/15.4_Array/15.4.4/15.4.4.5_Array_prototype_join/S15.4.4.5_A6.2.html:
+        * sputnik/Conformance/15_Native_Objects/15.4_Array/15.4.4/15.4.4.6_Array_prototype_pop/S15.4.4.6_A5.2.html:
+        * sputnik/Conformance/15_Native_Objects/15.4_Array/15.4.4/15.4.4.7_Array_prototype_push/S15.4.4.7_A6.2.html:
+        * sputnik/Conformance/15_Native_Objects/15.4_Array/15.4.4/15.4.4.8_Array_prototype_reverse/S15.4.4.8_A5.2.html:
+        * sputnik/Conformance/15_Native_Objects/15.4_Array/15.4.4/15.4.4.9_Array_prototype_shift/S15.4.4.9_A5.2.html:
+        * sputnik/Conformance/15_Native_Objects/15.5_String/15.5.4/15.5.4.10_String.prototype.match/S15.5.4.10_A9.html:
+        * sputnik/Conformance/15_Native_Objects/15.5_String/15.5.4/15.5.4.11_String.prototype.replace/S15.5.4.11_A9.html:
+        * sputnik/Conformance/15_Native_Objects/15.5_String/15.5.4/15.5.4.12_String.prototype.search/S15.5.4.12_A9.html:
+        * sputnik/Conformance/15_Native_Objects/15.5_String/15.5.4/15.5.4.13_String.prototype.slice/S15.5.4.13_A9.html:
+        * sputnik/Conformance/15_Native_Objects/15.5_String/15.5.4/15.5.4.14_String.prototype.split/S15.5.4.14_A9.html:
+        * sputnik/Conformance/15_Native_Objects/15.5_String/15.5.4/15.5.4.15_String.prototype.substring/S15.5.4.15_A9.html:
+        * sputnik/Conformance/15_Native_Objects/15.5_String/15.5.4/15.5.4.16_String.prototype.toLowerCase/S15.5.4.16_A9.html:
+        * sputnik/Conformance/15_Native_Objects/15.5_String/15.5.4/15.5.4.17_String.prototype.toLocaleLowerCase/S15.5.4.17_A9.html:
+        * sputnik/Conformance/15_Native_Objects/15.5_String/15.5.4/15.5.4.18_String.prototype.toUpperCase/S15.5.4.18_A9.html:
+        * sputnik/Conformance/15_Native_Objects/15.5_String/15.5.4/15.5.4.19_String.prototype.toLocaleUpperCase/S15.5.4.19_A9.html:
+        * sputnik/Conformance/15_Native_Objects/15.5_String/15.5.4/15.5.4.4_String.prototype.charAt/S15.5.4.4_A9.html:
+        * sputnik/Conformance/15_Native_Objects/15.5_String/15.5.4/15.5.4.5_String.prototype.charCodeAt/S15.5.4.5_A9.html:
+        * sputnik/Conformance/15_Native_Objects/15.5_String/15.5.4/15.5.4.6_String.prototype.concat/S15.5.4.6_A9.html:
+        * sputnik/Conformance/15_Native_Objects/15.5_String/15.5.4/15.5.4.7_String.prototype.indexOf/S15.5.4.7_A9.html:
+        * sputnik/Conformance/15_Native_Objects/15.5_String/15.5.4/15.5.4.8_String.prototype.lastIndexOf/S15.5.4.8_A9.html:
+        * sputnik/Conformance/15_Native_Objects/15.5_String/15.5.4/15.5.4.9_String.prototype.localeCompare/S15.5.4.9_A9.html:
+        * sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.4/15.9.4.2_Date.parse/S15.9.4.2_A3_T2.html:
+        * sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.4/15.9.4.3_Date.UTC/S15.9.4.3_A3_T2.html:
+        * sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.10_Date.prototype.getFullYear/S15.9.5.10_A3_T2.html:
+        * sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.11_Date.prototype.getUTCFullYear/S15.9.5.11_A3_T2.html:
+        * sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.12_Date.prototype.getMonth/S15.9.5.12_A3_T2.html:
+        * sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.13_Date.prototype.getUTCMonth/S15.9.5.13_A3_T2.html:
+        * sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.14_Date.prototype.getDate/S15.9.5.14_A3_T2.html:
+        * sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.15_Date.prototype.getUTCDate/S15.9.5.15_A3_T2.html:
+        * sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.16_Date.prototype.getDay/S15.9.5.16_A3_T2.html:
+        * sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.17_Date.prototype.getUTCDay/S15.9.5.17_A3_T2.html:
+        * sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.18_Date.prototype.getHours/S15.9.5.18_A3_T2.html:
+        * sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.19_Date.prototype.getUTCHours/S15.9.5.19_A3_T2.html:
+        * sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.20_Date.prototype.getMinutes/S15.9.5.20_A3_T2.html:
+        * sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.21_Date.prototype.getUTCMinutes/S15.9.5.21_A3_T2.html:
+        * sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.22_Date.prototype.getSeconds/S15.9.5.22_A3_T2.html:
+        * sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.23_Date.prototype.getUTCSeconds/S15.9.5.23_A3_T2.html:
+        * sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.24_Date.prototype.getMilliseconds/S15.9.5.24_A3_T2.html:
+        * sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.25_Date.prototype.getUTCMilliseconds/S15.9.5.25_A3_T2.html:
+        * sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.26_Date.prototype.getTimezoneOffset/S15.9.5.26_A3_T2.html:
+        * sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.27_Date.prototype.setTime/S15.9.5.27_A3_T2.html:
+        * sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.28_Date.prototype.setMilliseconds/S15.9.5.28_A3_T2.html:
+        * sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.29_Date.prototype.setUTCMilliseconds/S15.9.5.29_A3_T2.html:
+        * sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.2_Date.prototype.toString/S15.9.5.2_A3_T2.html:
+        * sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.30_Date.prototype.setSeconds/S15.9.5.30_A3_T2.html:
+        * sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.31_Date.prototype.setUTCSeconds/S15.9.5.31_A3_T2.html:
+        * sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.32_Date.prototype.setMinutes/S15.9.5.32_A3_T2.html:
+        * sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.33_Date.prototype.setUTCMinutes/S15.9.5.33_A3_T2.html:
+        * sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.34_Date.prototype.setHours/S15.9.5.34_A3_T2.html:
+        * sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.35_Date.prototype.setUTCHours/S15.9.5.35_A3_T2.html:
+        * sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.36_Date.prototype.setDate/S15.9.5.36_A3_T2.html:
+        * sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.37_Date.prototype.setUTCDate/S15.9.5.37_A3_T2.html:
+        * sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.38_Date.prototype.setMonth/S15.9.5.38_A3_T2.html:
+        * sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.39_Date.prototype.setUTCMonth/S15.9.5.39_A3_T2.html:
+        * sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.3_Date.prototype.toDateString/S15.9.5.3_A3_T2.html:
+        * sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.40_Date.prototype.setFullYear/S15.9.5.40_A3_T2.html:
+        * sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.41_Date.prototype.setUTCFullYear/S15.9.5.41_A3_T2.html:
+        * sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.42_Date.prototype.toUTCString/S15.9.5.42_A3_T2.html:
+        * sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.4_Date.prototype.toTimeString/S15.9.5.4_A3_T2.html:
+        * sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.5_Date.prototype.toLocaleString/S15.9.5.5_A3_T2.html:
+        * sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.6_Date.prototype.toLocaleDateString/S15.9.5.6_A3_T2.html:
+        * sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.7_Date.prototype.toLocaleTimeString/S15.9.5.7_A3_T2.html:
+        * sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.8_Date.prototype.valueOf/S15.9.5.8_A3_T2.html:
+        * sputnik/Conformance/15_Native_Objects/15.9_Date/15.9.5/15.9.5.9_Date.prototype.getTime/S15.9.5.9_A3_T2.html:
+
 2016-02-26  Chris Dumez  <cdumez@apple.com>
 
         Unreviewed, fix flaky test introduced in r197156.
index a7da808..eac330d 100644 (file)
@@ -33,7 +33,7 @@ test: function testcase() {
 \r
   if (desc.writable === false &&\r
       desc.enumerable === false &&\r
-      desc.configurable === false &&\r
+      desc.configurable === true &&\r
       desc.hasOwnProperty('get') === false &&\r
       desc.hasOwnProperty('set') === false) {\r
     return true;\r
index bea5e94..033509a 100644 (file)
@@ -35,7 +35,7 @@ test: function testcase() {
   if (desc.value === 0 &&\r
       desc.enumerable === false &&\r
       desc.writable === false &&\r
-      desc.configurable == false) {\r
+      desc.configurable == true) {\r
     return true;\r
   }\r
  },\r
index 89e774e..dbe54c2 100644 (file)
@@ -4,7 +4,7 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE
 
 
 PASS (function f() {}).name is 'f'
-PASS delete (function f() {}).name is false
+PASS delete (function f() {}).name is true
 PASS (function() {}).name is ''
 PASS Math.name is undefined
 PASS Error.name is 'Error'
index 652c0d5..0c0654c 100644 (file)
@@ -83,17 +83,17 @@ PASS Object.getOwnPropertyDescriptor(function(){}, 'length').value is 0
 PASS Object.getOwnPropertyDescriptor(function(){}, 'length').hasOwnProperty('get') is false
 PASS Object.getOwnPropertyDescriptor(function(){}, 'length').hasOwnProperty('set') is false
 PASS Object.getOwnPropertyDescriptor(function(){}, 'length').enumerable is false
-PASS Object.getOwnPropertyDescriptor(function(){}, 'length').configurable is false
+PASS Object.getOwnPropertyDescriptor(function(){}, 'length').configurable is true
 PASS Object.getOwnPropertyDescriptor(Math.sin, 'length').value is 1
 PASS Object.getOwnPropertyDescriptor(Math.sin, 'length').hasOwnProperty('get') is false
 PASS Object.getOwnPropertyDescriptor(Math.sin, 'length').hasOwnProperty('set') is false
 PASS Object.getOwnPropertyDescriptor(Math.sin, 'length').enumerable is false
-PASS Object.getOwnPropertyDescriptor(Math.sin, 'length').configurable is false
+PASS Object.getOwnPropertyDescriptor(Math.sin, 'length').configurable is true
 PASS Object.getOwnPropertyDescriptor(Math.sin, 'name').value is 'sin'
 PASS Object.getOwnPropertyDescriptor(Math.sin, 'name').hasOwnProperty('get') is false
 PASS Object.getOwnPropertyDescriptor(Math.sin, 'name').hasOwnProperty('set') is false
 PASS Object.getOwnPropertyDescriptor(Math.sin, 'name').enumerable is false
-PASS Object.getOwnPropertyDescriptor(Math.sin, 'name').configurable is false
+PASS Object.getOwnPropertyDescriptor(Math.sin, 'name').configurable is true
 PASS Object.getOwnPropertyDescriptor(global, 'global').value is global
 PASS Object.getOwnPropertyDescriptor(global, 'global').hasOwnProperty('get') is false
 PASS Object.getOwnPropertyDescriptor(global, 'global').hasOwnProperty('set') is false
index d27bff6..070386c 100644 (file)
@@ -3,7 +3,7 @@ description(
 );
 
 shouldBe("(function f() {}).name", "'f'");
-shouldBe("delete (function f() {}).name", "false");
+shouldBe("delete (function f() {}).name", "true");
 shouldBe("(function() {}).name", "''");
 shouldBe("Math.name", "undefined");
 shouldBe("Error.name", "'Error'");
index 181c8d1..9aea2b0 100644 (file)
@@ -1,8 +1,8 @@
 PASS 'use strict'; var f = fn(); f.length = 1; f.length threw exception of type TypeError.
 PASS var f = fn(); f.length = 1; f.length is 3
 PASS true === true
-PASS 'use strict'; var f = fn(); delete f.length threw exception of type TypeError.
-PASS var f = fn(); delete f.length is false
+PASS 'use strict'; var f = fn(); delete f.length is true
+PASS var f = fn(); delete f.length is true
 PASS true === true
  PASSED! 
 PASS successfullyParsed is true
index e086cea..77e9e1c 100644 (file)
@@ -1,8 +1,8 @@
 PASS 'use strict'; var f = fn(); f.name = "g"; f.name threw exception of type TypeError.
 PASS var f = fn(); f.name = "g"; f.name is "f"
 PASS true === true
-PASS 'use strict'; var f = fn(); delete f.name threw exception of type TypeError.
-PASS var f = fn(); delete f.name is false
+PASS 'use strict'; var f = fn(); delete f.name is true
+PASS var f = fn(); delete f.name is true
 PASS true === true
 PASS 'use strict'; var f = fn(); f.arity = 4; f.arity is 4
 PASS var f = fn(); f.arity = 4; f.arity is 4
index ac50efe..c1b793a 100644 (file)
@@ -13,7 +13,7 @@ assertEq(testLenientAndStrict('var f = fn(); f.length = 1; f.length',
                               returns(3), raisesException(TypeError)),
          true);
 assertEq(testLenientAndStrict('var f = fn(); delete f.length',
-                              returns(false), raisesException(TypeError)),
+                              returns(true), returns(true)),
          true);
 
 reportCompare(true, true);
index 7e4e6e9..a2c9c3f 100644 (file)
@@ -13,7 +13,7 @@ assertEq(testLenientAndStrict('var f = fn(); f.name = "g"; f.name',
                               returns("f"), raisesException(TypeError)),
          true);
 assertEq(testLenientAndStrict('var f = fn(); delete f.name',
-                              returns(false), raisesException(TypeError)),
+                              returns(true), returns(true)),
          true);
 
 // arity is not a spec defined property of Function.
index de1888a..6b4134c 100644 (file)
@@ -33,9 +33,9 @@ descriptorShouldBe("[1,2,3]", "'length'", {writable: true, enumerable: false, co
 descriptorShouldBe("[1,2,3]", "'length'", {writable: true, enumerable: false, configurable: false, value:"3"});
 descriptorShouldBe("/(a)*/g.exec('a')", "0", {writable: true, enumerable: true, configurable: true, value:"'a'"});
 descriptorShouldBe("/(a)*/g.exec('a')", "'length'", {writable: true, enumerable: false, configurable: false, value:2});
-descriptorShouldBe("function(){}", "'length'", {writable: false, enumerable: false, configurable: false, value:0});
-descriptorShouldBe("Math.sin", "'length'", {writable: false, enumerable: false, configurable: false, value:1});
-descriptorShouldBe("Math.sin", "'name'", {writable: false, enumerable: false, configurable: false, value:"'sin'"});
+descriptorShouldBe("function(){}", "'length'", {writable: false, enumerable: false, configurable: true, value:0});
+descriptorShouldBe("Math.sin", "'length'", {writable: false, enumerable: false, configurable: true, value:1});
+descriptorShouldBe("Math.sin", "'name'", {writable: false, enumerable: false, configurable: true, value:"'sin'"});
 var global = this;
 descriptorShouldBe("global", "'global'", {writable: true, enumerable: true, configurable: false, value:"global"});
 descriptorShouldBe("global", "'undefined'", {writable: false, enumerable: false, configurable: false, value:"undefined"});
index cc190e7..a859360 100644 (file)
@@ -68,8 +68,8 @@ try {
 /**
 * @name: S15.10.6.2_A9;
 * @section: 15.10.6.2;
-* @assertion: The RegExp.prototype.exec.length property has the attribute DontDelete;
-* @description: Checking if deleting the RegExp.prototype.exec.length property fails;
+* @assertion: The RegExp.prototype.exec.length property has the attribute [[Configurable]]:true;
+* @description: Checking if deleting the RegExp.prototype.exec.length property succeeds;
 */
 
 //CHECK#0
@@ -78,13 +78,13 @@ if ((RegExp.prototype.exec.hasOwnProperty('length') !== true)) {
 }
 
 //CHECK#1
-if (delete RegExp.prototype.exec.length !== false) {
-  testFailed('#1: delete RegExp.prototype.exec.length === false');
+if (delete RegExp.prototype.exec.length !== true) {
+  testFailed('#1: delete RegExp.prototype.exec.length === true');
 }
 
 //CHECK#2
-if (RegExp.prototype.exec.hasOwnProperty('length') !== true) {
-  testFailed('#2: delete RegExp.prototype.exec.length; RegExp.prototype.exec.hasOwnProperty(\'length\') === true');
+if (RegExp.prototype.exec.hasOwnProperty('length') !== false) {
+  testFailed('#2: delete RegExp.prototype.exec.length; RegExp.prototype.exec.hasOwnProperty(\'length\') === false');
 }
 
 
index ac2f297..11b6f82 100644 (file)
@@ -68,8 +68,8 @@ try {
 /**
 * @name: S15.10.6.3_A9;
 * @section: 15.10.6.3;
-* @assertion: The RegExp.prototype.test.length property has the attribute DontDelete;
-* @description: Checking if deleting RegExp.prototype.test.length property fails;
+* @assertion: The RegExp.prototype.test.length property has the attribute [[Configurable]]:true;
+* @description: Checking if deleting RegExp.prototype.test.length property succeeds;
 */
 
 //CHECK#0
@@ -78,13 +78,13 @@ if ((RegExp.prototype.exec.hasOwnProperty('length') !== true)) {
 }
 
 //CHECK#1
-if (delete RegExp.prototype.exec.length !== false) {
-  testFailed('#1: delete RegExp.prototype.exec.length === false');
+if (delete RegExp.prototype.exec.length !== true) {
+  testFailed('#1: delete RegExp.prototype.exec.length === true');
 }
 
 //CHECK#2
-if (RegExp.prototype.exec.hasOwnProperty('length') !== true) {
-  testFailed('#2: delete RegExp.prototype.exec.length; RegExp.prototype.exec.hasOwnProperty(\'length\') === true');
+if (RegExp.prototype.exec.hasOwnProperty('length') !== false) {
+  testFailed('#2: delete RegExp.prototype.exec.length; RegExp.prototype.exec.hasOwnProperty(\'length\') === false');
 }
 
 
index 95da707..ef174ff 100644 (file)
@@ -68,8 +68,8 @@ try {
 /**
 * @name: S15.10.6.4_A9;
 * @section: 15.10.6.4;
-* @assertion: The RegExp.prototype.toString.length property has the attribute DontDelete;
-* @description: Checking if deleting the RegExp.prototype.toString.length property fails;
+* @assertion: The RegExp.prototype.toString.length property has the attribute [[Configurable]]:true;
+* @description: Checking if deleting the RegExp.prototype.toString.length property succeeds;
 */
 
 //CHECK#0
@@ -78,13 +78,13 @@ if ((RegExp.prototype.toString.hasOwnProperty('length') !== true)) {
 }
 
 //CHECK#1
-if (delete RegExp.prototype.toString.length !== false) {
-       testFailed('#1: delete RegExp.prototype.toString.length === false');
+if (delete RegExp.prototype.toString.length !== true) {
+       testFailed('#1: delete RegExp.prototype.toString.length === true');
 }
 
 //CHECK#2
-if (RegExp.prototype.toString.hasOwnProperty('length') !== true) {
-       testFailed('#2: delete RegExp.prototype.toString.length; RegExp.prototype.toString.hasOwnProperty(\'length\') === true');
+if (RegExp.prototype.toString.hasOwnProperty('length') !== false) {
+       testFailed('#2: delete RegExp.prototype.toString.length; RegExp.prototype.toString.hasOwnProperty(\'length\') === false');
 }
 
 
index 32ae363..9c0a5c3 100644 (file)
@@ -68,7 +68,7 @@ try {
 /**
  * @name: S15.1.2.1_A4.2;
  * @section: 15.1.2.1, 15.2.4.5, 11.4.1;
- * @assertion: The length property of eval has the attribute DontDelete;
+ * @assertion: The length property of eval has the attribute [[Configurable]]:true;
  * @description: Checking use hasOwnProperty, delete;
 */
 
@@ -80,13 +80,13 @@ if (eval.hasOwnProperty('length') !== true) {
 delete eval.length;
 
 //CHECK#2
-if (eval.hasOwnProperty('length') !== true) {
-  testFailed('#2: delete eval.length; eval.hasOwnProperty(\'length\') === true. Actual: ' + (eval.hasOwnProperty('length')));
+if (eval.hasOwnProperty('length') !== false) {
+  testFailed('#2: delete eval.length; eval.hasOwnProperty(\'length\') === false. Actual: ' + (eval.hasOwnProperty('length')));
 }
 
 //CHECK#3
-if (eval.length === undefined) {
-  testFailed('#3: delete eval.length; eval.length !== undefined');
+if (eval.length !== 0) {
+  testFailed('#3: delete eval.length; eval.length === 0');
 }
 
 
index ef6aece..faeadd3 100644 (file)
@@ -68,7 +68,7 @@ try {
 /**
  * @name: S15.1.2.2_A9.2;
  * @section: 15.1.2.2, 15.2.4.5, 11.4.1;
- * @assertion: The length property of parseInt has the attribute DontDelete;
+ * @assertion: The length property of parseInt has the attribute [[Configurable]]:true;
  * @description: Checking use hasOwnProperty, delete;
 */
 
@@ -80,13 +80,13 @@ if (parseInt.hasOwnProperty('length') !== true) {
 delete parseInt.length;
 
 //CHECK#2
-if (parseInt.hasOwnProperty('length') !== true) {
-  testFailed('#2: delete parseInt.length; parseInt.hasOwnProperty(\'length\') === true. Actual: ' + (parseInt.hasOwnProperty('length')));
+if (parseInt.hasOwnProperty('length') !== false) {
+  testFailed('#2: delete parseInt.length; parseInt.hasOwnProperty(\'length\') === false. Actual: ' + (parseInt.hasOwnProperty('length')));
 }
 
 //CHECK#3
-if (parseInt.length === undefined) {
-  testFailed('#3: delete parseInt.length; parseInt.length !== undefined');
+if (parseInt.length !== 0) {
+  testFailed('#3: delete parseInt.length; parseInt.length === 0');
 }
 
 } catch (ex) {
index 14da1d3..cfc84c1 100644 (file)
@@ -68,7 +68,7 @@ try {
 /**
  * @name: S15.1.2.3_A7.2;
  * @section: 15.1.2.3, 15.2.4.5, 11.4.1;
- * @assertion: The length property of parseFloat has the attribute DontDelete;
+ * @assertion: The length property of parseFloat has the attribute [[Configurable]]:true;
  * @description: Checking use hasOwnProperty, delete;
 */
 
@@ -80,13 +80,13 @@ if (parseFloat.hasOwnProperty('length') !== true) {
 delete parseFloat.length;
 
 //CHECK#2
-if (parseFloat.hasOwnProperty('length') !== true) {
-  testFailed('#2: delete parseFloat.length; parseFloat.hasOwnProperty(\'length\') === true. Actual: ' + (parseFloat.hasOwnProperty('length')));
+if (parseFloat.hasOwnProperty('length') !== false) {
+  testFailed('#2: delete parseFloat.length; parseFloat.hasOwnProperty(\'length\') === false. Actual: ' + (parseFloat.hasOwnProperty('length')));
 }
 
 //CHECK#3
-if (parseFloat.length === undefined) {
-  testFailed('#3: delete parseFloat.length; parseFloat.length !== undefined');
+if (parseFloat.length !== 0) {
+  testFailed('#3: delete parseFloat.length; parseFloat.length === 0');
 }
 
 } catch (ex) {
index 7299866..776d6ab 100644 (file)
@@ -68,7 +68,7 @@ try {
 /**
  * @name: S15.1.2.4_A2.2;
  * @section: 15.1.2.4, 15.2.4.5, 11.4.1;
- * @assertion: The length property of isNaN has the attribute DontDelete;
+ * @assertion: The length property of isNaN has the attribute [[Configurable]]:true;
  * @description: Checking use hasOwnProperty, delete;
 */
 
@@ -80,13 +80,13 @@ if (isNaN.hasOwnProperty('length') !== true) {
 delete isNaN.length;
 
 //CHECK#2
-if (isNaN.hasOwnProperty('length') !== true) {
-  testFailed('#2: delete isNaN.length; isNaN.hasOwnProperty(\'length\') === true. Actual: ' + (isNaN.hasOwnProperty('length')));
+if (isNaN.hasOwnProperty('length') !== false) {
+  testFailed('#2: delete isNaN.length; isNaN.hasOwnProperty(\'length\') === false. Actual: ' + (isNaN.hasOwnProperty('length')));
 }
 
 //CHECK#3
-if (isNaN.length === undefined) {
-  testFailed('#3: delete isNaN.length; isNaN.length !== undefined');
+if (isNaN.length !== 0) {
+  testFailed('#3: delete isNaN.length; isNaN.length === 0');
 }
 
 } catch (ex) {
index e077da2..e2222de 100644 (file)
@@ -68,7 +68,7 @@ try {
 /**
  * @name: S15.1.2.5_A2.2;
  * @section: 15.1.2.5, 15.2.4.5, 11.4.1;
- * @assertion: The length property of isFinite has the attribute DontDelete;
+ * @assertion: The length property of isFinite has the attribute [[Configurable]]:true;
  * @description: Checking use hasOwnProperty, delete;
 */
 
@@ -80,13 +80,13 @@ if (isFinite.hasOwnProperty('length') !== true) {
 delete isFinite.length;
 
 //CHECK#2
-if (isFinite.hasOwnProperty('length') !== true) {
-  testFailed('#2: delete isFinite.length; isFinite.hasOwnProperty(\'length\') === true. Actual: ' + (isFinite.hasOwnProperty('length')));
+if (isFinite.hasOwnProperty('length') !== false) {
+  testFailed('#2: delete isFinite.length; isFinite.hasOwnProperty(\'length\') === false. Actual: ' + (isFinite.hasOwnProperty('length')));
 }
 
 //CHECK#3
-if (isFinite.length === undefined) {
-  testFailed('#3: delete isFinite.length; isFinite.length !== undefined');
+if (isFinite.length !== 0) {
+  testFailed('#3: delete isFinite.length; isFinite.length === 0');
 }
 
 } catch (ex) {
index e348603..051ae48 100644 (file)
@@ -68,7 +68,7 @@ try {
 /**
  * @name: S15.1.3.1_A5.2;
  * @section: 15.1.3.1, 15.2.4.5, 11.4.1;
- * @assertion: The length property of decodeURI has the attribute DontDelete;
+ * @assertion: The length property of decodeURI has the attribute [[Configurable]]:true;
  * @description: Checking use hasOwnProperty, delete;
 */
 
@@ -80,13 +80,13 @@ if (decodeURI.hasOwnProperty('length') !== true) {
 delete decodeURI.length;
 
 //CHECK#2
-if (decodeURI.hasOwnProperty('length') !== true) {
-  testFailed('#2: delete decodeURI.length; decodeURI.hasOwnProperty(\'length\') === true. Actual: ' + (decodeURI.hasOwnProperty('length')));
+if (decodeURI.hasOwnProperty('length') !== false) {
+  testFailed('#2: delete decodeURI.length; decodeURI.hasOwnProperty(\'length\') === false. Actual: ' + (decodeURI.hasOwnProperty('length')));
 }
 
 //CHECK#3
-if (decodeURI.length === undefined) {
-  testFailed('#3: delete decodeURI.length; decodeURI.length !== undefined');
+if (decodeURI.length !== 0) {
+  testFailed('#3: delete decodeURI.length; decodeURI.length === 0');
 }
 
 
index 788119f..2197dec 100644 (file)
@@ -68,7 +68,7 @@ try {
 /**
  * @name: S15.1.3.2_A5.2;
  * @section: 15.1.3.2, 15.2.4.5, 11.4.1;
- * @assertion: The length property of decodeURIComponent has the attribute DontDelete;
+ * @assertion: The length property of decodeURIComponent has the attribute [[Configurable]]:true;
  * @description: Checking use hasOwnProperty, delete;
 */
 
@@ -80,13 +80,13 @@ if (decodeURIComponent.hasOwnProperty('length') !== true) {
 delete decodeURIComponent.length;
 
 //CHECK#2
-if (decodeURIComponent.hasOwnProperty('length') !== true) {
-  testFailed('#2: delete decodeURIComponent.length; decodeURIComponent.hasOwnProperty(\'length\') === true. Actual: ' + (decodeURIComponent.hasOwnProperty('length')));
+if (decodeURIComponent.hasOwnProperty('length') !== false) {
+  testFailed('#2: delete decodeURIComponent.length; decodeURIComponent.hasOwnProperty(\'length\') === false. Actual: ' + (decodeURIComponent.hasOwnProperty('length')));
 }
 
 //CHECK#3
-if (decodeURIComponent.length === undefined) {
-  testFailed('#3: delete decodeURIComponent.length; decodeURIComponent.length !== undefined');
+if (decodeURIComponent.length !== 0) {
+  testFailed('#3: delete decodeURIComponent.length; decodeURIComponent.length === 0');
 }
 
 
index 4976778..6bb61ba 100644 (file)
@@ -68,7 +68,7 @@ try {
 /**
  * @name: S15.1.3.3_A5.2;
  * @section: 15.1.3.3, 15.2.4.5, 11.4.1;
- * @assertion: The length property of encodeURI has the attribute DontDelete;
+ * @assertion: The length property of encodeURI has the attribute [[Configurable]]:true;
  * @description: Checking use hasOwnProperty, delete;
 */
 
@@ -80,13 +80,13 @@ if (encodeURI.hasOwnProperty('length') !== true) {
 delete encodeURI.length;
 
 //CHECK#2
-if (encodeURI.hasOwnProperty('length') !== true) {
-  testFailed('#2: delete encodeURI.length; encodeURI.hasOwnProperty(\'length\') === true. Actual: ' + (encodeURI.hasOwnProperty('length')));
+if (encodeURI.hasOwnProperty('length') !== false) {
+  testFailed('#2: delete encodeURI.length; encodeURI.hasOwnProperty(\'length\') === false. Actual: ' + (encodeURI.hasOwnProperty('length')));
 }
 
 //CHECK#3
-if (encodeURI.length === undefined) {
-  testFailed('#3: delete encodeURI.length; encodeURI.length !== undefined');
+if (encodeURI.length !== 0) {
+  testFailed('#3: delete encodeURI.length; encodeURI.length === 0');
 }
 
 
index cef65c4..5ee6d74 100644 (file)
@@ -68,7 +68,7 @@ try {
 /**
  * @name: S15.1.3.4_A5.2;
  * @section: 15.1.3.4, 15.2.4.5, 11.4.1;
- * @assertion: The length property of encodeURIComponent has the attribute DontDelete;
+ * @assertion: The length property of encodeURIComponent has the attribute [[Configurable]]:true;
  * @description: Checking use hasOwnProperty, delete;
 */
 
@@ -80,13 +80,13 @@ if (encodeURIComponent.hasOwnProperty('length') !== true) {
 delete encodeURIComponent.length;
 
 //CHECK#2
-if (encodeURIComponent.hasOwnProperty('length') !== true) {
-  testFailed('#2: delete encodeURIComponent.length; encodeURIComponent.hasOwnProperty(\'length\') === true. Actual: ' + (encodeURIComponent.hasOwnProperty('length')));
+if (encodeURIComponent.hasOwnProperty('length') !== false) {
+  testFailed('#2: delete encodeURIComponent.length; encodeURIComponent.hasOwnProperty(\'length\') === false. Actual: ' + (encodeURIComponent.hasOwnProperty('length')));
 }
 
 //CHECK#3
-if (encodeURIComponent.length === undefined) {
-  testFailed('#3: delete encodeURIComponent.length; encodeURIComponent.length !== undefined');
+if (encodeURIComponent.length !== 0) {
+  testFailed('#3: delete encodeURIComponent.length; encodeURIComponent.length === 0');
 }
 
 
index 0fc96fd..a7ddea8 100644 (file)
@@ -68,8 +68,8 @@ try {
 /**
 * @name: S15.2.4.2_A9;
 * @section: 15.2.4.2;
-* @assertion: The Object.prototype.toString.length property has the attribute DontDelete;
-* @description: Checknig if deleting of the Object.prototype.toString.length property fails;
+* @assertion: The Object.prototype.toString.length property has the attribute [[Configurable]]:true;
+* @description: Checknig if deleting of the Object.prototype.toString.length property succeeds;
 */
 
 //CHECK#0
@@ -78,13 +78,13 @@ if (!(Object.prototype.toString.hasOwnProperty('length'))) {
 }
 
 //CHECK#1
-if (delete Object.prototype.toString.length) {
-  testFailed('#1: The Object.prototype.toString.length property has the attributes DontDelete');
+if (!(delete Object.prototype.toString.length)) {
+  testFailed('#1: The Object.prototype.toString.length property has the attribute [[Configurable]]:true');
 }
 
 //CHECK#2
-if (!(Object.prototype.toString.hasOwnProperty('length'))) {
-  testFailed('#2: The Object.prototype.toString.length property has the attributes DontDelete');
+if (Object.prototype.toString.hasOwnProperty('length')) {
+  testFailed('#2: The Object.prototype.toString.length property has the attribute [[Configurable]]:true');
 }
 
 } catch (ex) {
index e9340b8..3ca1fe2 100644 (file)
@@ -68,8 +68,8 @@ try {
 /**
 * @name: S15.2.4.3_A9;
 * @section: 15.2.4.3;
-* @assertion: The Object.prototype.toLocaleString.length property has the attribute DontDelete;
-* @description: Checknig if deleting of the Object.prototype.toLocaleString.length property fails;
+* @assertion: The Object.prototype.toLocaleString.length property has the attribute [[Configurable]]:true;
+* @description: Checknig if deleting of the Object.prototype.toLocaleString.length property succeeds;
 */
 
 //CHECK#0
@@ -78,13 +78,13 @@ if (!(Object.prototype.toLocaleString.hasOwnProperty('length'))) {
 }
 
 //CHECK#1
-if (delete Object.prototype.toLocaleString.length) {
-  testFailed('#1: The Object.prototype.toLocaleString.length property has the attributes DontDelete');
+if (!(delete Object.prototype.toLocaleString.length)) {
+  testFailed('#1: The Object.prototype.toLocaleString.length property has the attribute [[Configurable]]:true');
 }
 
 //CHECK#2
-if (!(Object.prototype.toLocaleString.hasOwnProperty('length'))) {
-  testFailed('#2: The Object.prototype.toLocaleString.length property has the attributes DontDelete');
+if (Object.prototype.toLocaleString.hasOwnProperty('length')) {
+  testFailed('#2: The Object.prototype.toLocaleString.length property has the attribute [[Configurable]]:true');
 }
 
 } catch (ex) {
index 708b5ab..f1c7383 100644 (file)
@@ -68,8 +68,8 @@ try {
 /**
 * @name: S15.2.4.4_A9;
 * @section: 15.2.4.4;
-* @assertion: The Object.prototype.valueOf.length property has the attribute DontDelete;
-* @description: Checknig if deleting of the Object.prototype.valueOf.length property fails;
+* @assertion: The Object.prototype.valueOf.length property has the attribute [[Configurable]]:true;
+* @description: Checknig if deleting of the Object.prototype.valueOf.length property succeeds;
 */
 
 //CHECK#0
@@ -78,13 +78,13 @@ if (!(Object.prototype.valueOf.hasOwnProperty('length'))) {
 }
 
 //CHECK#1
-if (delete Object.prototype.valueOf.length) {
-  testFailed('#1: The Object.prototype.valueOf.length property has the attributes DontDelete');
+if (!(delete Object.prototype.valueOf.length)) {
+  testFailed('#1: The Object.prototype.valueOf.length property has the attribute [[Configurable]]:true');
 }
 
 //CHECK#2
-if (!(Object.prototype.valueOf.hasOwnProperty('length'))) {
-  testFailed('#2: The Object.prototype.valueOf.length property has the attributes DontDelete');
+if (Object.prototype.valueOf.hasOwnProperty('length')) {
+  testFailed('#2: The Object.prototype.valueOf.length property has the attribute [[Configurable]]:true');
 }
 
 } catch (ex) {
index e35fb73..f30649d 100644 (file)
@@ -68,8 +68,8 @@ try {
 /**
 * @name: S15.2.4.5_A9;
 * @section: 15.2.4.5;
-* @assertion: The Object.prototype.hasOwnProperty.length property has the attribute DontDelete;
-* @description: Checking if deleting the Object.prototype.hasOwnProperty.length property fails;
+* @assertion: The Object.prototype.hasOwnProperty.length property has the attribute [[Configurable]]:true;
+* @description: Checking if deleting the Object.prototype.hasOwnProperty.length property succeeds;
 */
 
 //CHECK#0
@@ -78,13 +78,13 @@ if (!(Object.prototype.hasOwnProperty.hasOwnProperty('length'))) {
 }
 
 //CHECK#1
-if (delete Object.prototype.hasOwnProperty.length) {
-  testFailed('#1: The Object.prototype.hasOwnProperty.length property has the attributes DontDelete');
+if (!(delete Object.prototype.hasOwnProperty.length)) {
+  testFailed('#1: The Object.prototype.hasOwnProperty.length property has the attribute [[Configurable]]:true');
 }
 
 //CHECK#2
-if (!(Object.prototype.hasOwnProperty.hasOwnProperty('length'))) {
-  testFailed('#2: The Object.prototype.hasOwnProperty.length property has the attributes DontDelete');
+if (Object.prototype.hasOwnProperty.hasOwnProperty('length')) {
+  testFailed('#2: The Object.prototype.hasOwnProperty.length property has the attribute [[Configurable]]:true');
 }
 
 } catch (ex) {
index ac248b8..e463b15 100644 (file)
@@ -68,8 +68,8 @@ try {
 /**
 * @name: S15.2.4.6_A9;
 * @section: 15.2.4.6;
-* @assertion: The Object.prototype.isPrototypeOf.length property has the attribute DontDelete;
-* @description: Checking deleting the Object.prototype.isPrototypeOf.length property fails;
+* @assertion: The Object.prototype.isPrototypeOf.length property has the attribute [[Configurable]]:true;
+* @description: Checking deleting the Object.prototype.isPrototypeOf.length property succeeds;
 */
 
 //CHECK#0
@@ -78,8 +78,8 @@ if (!(Object.prototype.isPrototypeOf.hasOwnProperty('length'))) {
 }
 
 //CHECK#1
-if (delete Object.prototype.isPrototypeOf.length) {
-  testFailed('#1: The Object.prototype.isPrototypeOf.length property has the attributes DontDelete');
+if (!(delete Object.prototype.isPrototypeOf.length)) {
+  testFailed('#1: The Object.prototype.isPrototypeOf.length property has the attribute [[Configurable]]:true');
 }
 //
 
index 576275d..fbbf3fe 100644 (file)
@@ -68,8 +68,8 @@ try {
 /**
 * @name: S15.2.4.7_A9;
 * @section: 15.2.4.7;
-* @assertion: The Object.prototype.propertyIsEnumerable.length property has the attribute DontDelete;
-* @description: Checking if deleting the Object.prototype.propertyIsEnumerable.length property fails;
+* @assertion: The Object.prototype.propertyIsEnumerable.length property has the attribute [[Configurable]]:true;
+* @description: Checking if deleting the Object.prototype.propertyIsEnumerable.length property succeeds;
 */
 
 //CHECK#0
@@ -78,8 +78,8 @@ if (!(Object.prototype.propertyIsEnumerable.hasOwnProperty('length'))) {
 }
 
 //CHECK#1
-if (delete Object.prototype.propertyIsEnumerable.length) {
-  testFailed('#1: The Object.prototype.propertyIsEnumerable.length property has the attributes DontDelete');
+if (!(delete Object.prototype.propertyIsEnumerable.length)) {
+  testFailed('#1: The Object.prototype.propertyIsEnumerable.length property has the attribute [[Configurable]]:true');
 }
 //
 
index 94db214..359bb9f 100644 (file)
@@ -68,8 +68,8 @@ try {
 /**
 * @name: S15.3.4.2_A9;
 * @section: 15.3.4.2;
-* @assertion: The Function.prototype.toString.length property has the attribute DontDelete;
-* @description: Checking if deleting the Function.prototype.toString.length property fails;
+* @assertion: The Function.prototype.toString.length property has the attribute [[Configurable]]:true;
+* @description: Checking if deleting the Function.prototype.toString.length property succeeds;
 */
 
 //CHECK#0
@@ -78,13 +78,13 @@ if (!(Function.prototype.toString.hasOwnProperty('length'))) {
 }
 
 //CHECK#1
-if (delete Function.prototype.toString.length) {
-  testFailed('#1: The Function.prototype.toString.length property has the attributes DontDelete');
+if (!(delete Function.prototype.toString.length)) {
+  testFailed('#1: The Function.prototype.toString.length property has the attribute [[Configurable]]:true');
 }
 
 //CHECK#2
-if (!(Function.prototype.toString.hasOwnProperty('length'))) {
-  testFailed('#2: The Function.prototype.toString.length property has the attributes DontDelete');
+if (Function.prototype.toString.hasOwnProperty('length')) {
+  testFailed('#2: The Function.prototype.toString.length property has the attribute [[Configurable]]:true');
 }
 
 } catch (ex) {
index cb91de4..dc1e35c 100644 (file)
@@ -68,8 +68,8 @@ try {
 /**
 * @name: S15.3.4.3_A9;
 * @section: 15.3.4.3;
-* @assertion: The Function.prototype.apply.length property has the attribute DontDelete;
-* @description: Checking if deleting the Function.prototype.apply.length property fails;
+* @assertion: The Function.prototype.apply.length property has the attribute [[Configurable]]:true;
+* @description: Checking if deleting the Function.prototype.apply.length property succeeds;
 */
 
 //CHECK#0
@@ -78,13 +78,13 @@ if (!(Function.prototype.apply.hasOwnProperty('length'))) {
 }
 
 //CHECK#1
-if (delete Function.prototype.apply.length) {
-  testFailed('#1: The Function.prototype.apply.length property has the attributes DontDelete');
+if (!(delete Function.prototype.apply.length)) {
+  testFailed('#1: The Function.prototype.apply.length property has the attribute [[Configurable]]:true');
 }
 
 //CHECK#2
-if (!(Function.prototype.apply.hasOwnProperty('length'))) {
-  testFailed('#2: The Function.prototype.apply.length property has the attributes DontDelete');
+if (Function.prototype.apply.hasOwnProperty('length')) {
+  testFailed('#2: The Function.prototype.apply.length property has the attribute [[Configurable]]:true');
 }
 
 } catch (ex) {
index 67a4e1f..e8e242f 100644 (file)
@@ -68,8 +68,8 @@ try {
 /**
 * @name: S15.3.4.4_A9;
 * @section: 15.3.4.4;
-* @assertion: The Function.prototype.call.length property has the attribute DontDelete;
-* @description: Checking if deleting the Function.prototype.call.length property fails;
+* @assertion: The Function.prototype.call.length property has the attribute [[Configurable]]:true;
+* @description: Checking if deleting the Function.prototype.call.length property succeeds;
 */
 
 //CHECK#0
@@ -78,13 +78,13 @@ if (!(Function.prototype.call.hasOwnProperty('length'))) {
 }
 
 //CHECK#1
-if (delete Function.prototype.call.length) {
-  testFailed('#1: The Function.prototype.call.length property has the attributes DontDelete');
+if (!(delete Function.prototype.call.length)) {
+  testFailed('#1: The Function.prototype.call.length property has the attribute [[Configurable]]:true');
 }
 
 //CHECK#2
-if (!(Function.prototype.call.hasOwnProperty('length'))) {
-  testFailed('#2: The Function.prototype.call.length property has the attributes DontDelete');
+if (Function.prototype.call.hasOwnProperty('length')) {
+  testFailed('#2: The Function.prototype.call.length property has the attribute [[Configurable]]:true');
 }
 
 } catch (ex) {
index c18d0b4..d81b3c9 100644 (file)
@@ -68,8 +68,8 @@ try {
 /**
 * @name: S15.3.5.1_A2_T1;
 * @section: 15.3.5.1;
-* @assertion: the length property has the attributes { DontDelete };
-* @description: Checking if deleting the length property of Function("arg1,arg2,arg3", null) fails;
+* @assertion: the length property has the attribute [[Configurable]]:true;
+* @description: Checking if deleting the length property of Function("arg1,arg2,arg3", null) succeeds;
 */
 
 f = new Function("arg1,arg2,arg3", null);
@@ -80,18 +80,18 @@ if (!(f.hasOwnProperty('length'))) {
 }
 
 //CHECK#2
-if(delete f.length){
-  testFailed('#2: the function.length property has the attributes DontDelete.');
+if(!(delete f.length)) {
+  testFailed('#2: the function.length property has the attribute [[Configurable]]:true.');
 }
 
 //CHECK#3
-if (!(f.hasOwnProperty('length'))) {
-  testFailed('#3: the function.length property has the attributes DontDelete.');
+if (f.hasOwnProperty('length')) {
+  testFailed('#3: the function.length property has the attribute [[Configurable]]:true.');
 }
 
 //CHECK#4
-if (f.length !== 3) {
-  testFailed('#4: the length property has the attributes { DontDelete }');
+if (f.length !== 0) {
+  testFailed('#4: the length property has the attribute [[Configurable]]:true.');
 }
 
 } catch (ex) {
index d9e4839..39ca482 100644 (file)
@@ -68,8 +68,8 @@ try {
 /**
 * @name: S15.3.5.1_A2_T2;
 * @section: 15.3.5.1;
-* @assertion: the length property has the attributes { DontDelete };
-* @description: Checking if deleting the length property of Function("arg1,arg2,arg3","arg4,arg5", null) fails;
+* @assertion: the length property has the attribute [[Configurable]]:true;
+* @description: Checking if deleting the length property of Function("arg1,arg2,arg3","arg4,arg5", null) succeeds;
 */
 
 f =  Function("arg1,arg2,arg3","arg4,arg5", null);
@@ -82,13 +82,13 @@ if (!(f.hasOwnProperty('length'))) {
 delete f.length;
 
 //CHECK#2
-if (!(f.hasOwnProperty('length'))) {
-  testFailed('#2: the function.length property has the attributes DontDelete.');
+if (f.hasOwnProperty('length')) {
+  testFailed('#2: the function.length property has the attribute [[Configurable]]:true.');
 }
 
 //CHECK#3
-if (f.length !== 5) {
-  testFailed('#3: the length property has the attributes { DontDelete }');
+if (f.length !== 0) {
+  testFailed('#3: the length property has the attribute [[Configurable]]:true');
 }
 
 } catch (ex) {
index f4b6dd5..a129f94 100644 (file)
@@ -68,8 +68,8 @@ try {
 /**
 * @name: S15.3.5.1_A2_T3;
 * @section: 15.3.5.1;
-* @assertion: the length property has the attributes { DontDelete };
-* @description: Checking if deleting the length property of Function("arg1,arg2,arg3","arg1,arg2","arg3", null) fails;
+* @assertion: the length property has the attribute [[Configurable]]:true;
+* @description: Checking if deleting the length property of Function("arg1,arg2,arg3","arg1,arg2","arg3", null) succeeds;
 */
 
 f = new Function("arg1,arg2,arg3","arg1,arg2","arg3", null);
@@ -82,13 +82,13 @@ if (!(f.hasOwnProperty('length'))) {
 delete f.length;
 
 //CHECK#2
-if (!(f.hasOwnProperty('length'))) {
-  testFailed('#2: the function.length property has the attributes DontDelete.');
+if (f.hasOwnProperty('length')) {
+  testFailed('#2: the function.length property has the attribute [[Configurable]]:true.');
 }
 
 //CHECK#3
-if (f.length !== 6) {
-  testFailed('#3: the length property has the attributes { DontDelete }');
+if (f.length !== 0) {
+  testFailed('#3: the length property has the attribute [[Configurable]]:true');
 }
 
 } catch (ex) {
index 685d620..2fed094 100644 (file)
@@ -68,7 +68,7 @@ try {
 /**
 * @name: S15.4.4.10_A5.2;
 * @section: 15.4.4.10, 15.2.4.5, 11.4.1;
-* @assertion: The length property of slice has the attribute DontDelete;
+* @assertion: The length property of slice has the attribute [[Configurable]]:true;
 * @description: Checking use hasOwnProperty, delete;
 */
 
@@ -80,13 +80,13 @@ if (Array.prototype.slice.hasOwnProperty('length') !== true) {
 delete Array.prototype.slice.length;
 
 //CHECK#2
-if (Array.prototype.slice.hasOwnProperty('length') !== true) {
-  testFailed('#2: delete Array.prototype.slice.length; Array.prototype.slice.hasOwnProperty(\'length\') === true. Actual: ' + (Array.prototype.slice.hasOwnProperty('length')));
+if (Array.prototype.slice.hasOwnProperty('length') !== false) {
+  testFailed('#2: delete Array.prototype.slice.length; Array.prototype.slice.hasOwnProperty(\'length\') === false. Actual: ' + (Array.prototype.slice.hasOwnProperty('length')));
 }
 
 //CHECK#3
-if (Array.prototype.slice.length === undefined) {
-  testFailed('#3: delete Array.prototype.slice.length; Array.prototype.slice.length !== undefined');
+if (Array.prototype.slice.length !== 0) {
+  testFailed('#3: delete Array.prototype.slice.length; Array.prototype.slice.length === 0');
 }
 
 
index baf9a31..811f87d 100644 (file)
@@ -68,7 +68,7 @@ try {
 /**
 * @name: S15.4.4.11_A7.2;
 * @section: 15.4.4.11, 15.2.4.5, 11.4.1;
-* @assertion: The length property of sort has the attribute DontDelete;
+* @assertion: The length property of sort has the attribute [[Configurable]]:true;
 * @description: Checking use hasOwnProperty, delete;
 */
 
@@ -80,13 +80,13 @@ if (Array.prototype.sort.hasOwnProperty('length') !== true) {
 delete Array.prototype.sort.length;
 
 //CHECK#2
-if (Array.prototype.sort.hasOwnProperty('length') !== true) {
-  testFailed('#2: delete Array.prototype.sort.length; Array.prototype.sort.hasOwnProperty(\'length\') === true. Actual: ' + (Array.prototype.sort.hasOwnProperty('length')));
+if (Array.prototype.sort.hasOwnProperty('length') !== false) {
+  testFailed('#2: delete Array.prototype.sort.length; Array.prototype.sort.hasOwnProperty(\'length\') === false. Actual: ' + (Array.prototype.sort.hasOwnProperty('length')));
 }
 
 //CHECK#3
-if (Array.prototype.sort.length === undefined) {
-  testFailed('#3: delete Array.prototype.sort.length; Array.prototype.sort.length !== undefined');
+if (Array.prototype.sort.length !== 0) {
+  testFailed('#3: delete Array.prototype.sort.length; Array.prototype.sort.length === 0');
 }
 
 
index eeac0fb..4192e7d 100644 (file)
@@ -68,7 +68,7 @@ try {
 /**
 * @name: S15.4.4.12_A5.2;
 * @section: 15.4.4.12, 15.2.4.5, 11.4.1;
-* @assertion: The length property of splice has the attribute DontDelete;
+* @assertion: The length property of splice has the attribute [[Configurable]]:true;
 * @description: Checking use hasOwnProperty, delete;
 */
 
@@ -80,13 +80,13 @@ if (Array.prototype.splice.hasOwnProperty('length') !== true) {
 delete Array.prototype.splice.length;
 
 //CHECK#2
-if (Array.prototype.splice.hasOwnProperty('length') !== true) {
-  testFailed('#2: delete Array.prototype.splice.length; Array.prototype.splice.hasOwnProperty(\'length\') === true. Actual: ' + (Array.prototype.splice.hasOwnProperty('length')));
+if (Array.prototype.splice.hasOwnProperty('length') !== false) {
+  testFailed('#2: delete Array.prototype.splice.length; Array.prototype.splice.hasOwnProperty(\'length\') === false. Actual: ' + (Array.prototype.splice.hasOwnProperty('length')));
 }
 
 //CHECK#3
-if (Array.prototype.splice.length === undefined) {
-  testFailed('#3: delete Array.prototype.splice.length; Array.prototype.splice.length !== undefined');
+if (Array.prototype.splice.length !== 0) {
+  testFailed('#3: delete Array.prototype.splice.length; Array.prototype.splice.length === 0');
 }
 
 
index 580c155..816cd34 100644 (file)
@@ -68,7 +68,7 @@ try {
 /**
 * @name: S15.4.4.13_A5.2;
 * @section: 15.4.4.13, 15.2.4.5, 11.4.1;
-* @assertion: The length property of unshift has the attribute DontDelete;
+* @assertion: The length property of unshift has the attribute [[Configurable]]:true;
 * @description: Checking use hasOwnProperty, delete;
 */
 
@@ -80,13 +80,13 @@ if (Array.prototype.unshift.hasOwnProperty('length') !== true) {
 delete Array.prototype.unshift.length;
 
 //CHECK#2
-if (Array.prototype.unshift.hasOwnProperty('length') !== true) {
-  testFailed('#2: delete Array.prototype.unshift.length; Array.prototype.unshift.hasOwnProperty(\'length\') === true. Actual: ' + (Array.prototype.unshift.hasOwnProperty('length')));
+if (Array.prototype.unshift.hasOwnProperty('length') !== false) {
+  testFailed('#2: delete Array.prototype.unshift.length; Array.prototype.unshift.hasOwnProperty(\'length\') === false. Actual: ' + (Array.prototype.unshift.hasOwnProperty('length')));
 }
 
 //CHECK#3
-if (Array.prototype.unshift.length === undefined) {
-  testFailed('#3: delete Array.prototype.unshift.length; Array.prototype.unshift.length !== undefined');
+if (Array.prototype.unshift.length !== 0) {
+  testFailed('#3: delete Array.prototype.unshift.length; Array.prototype.unshift.length === 0');
 }
 
 
index 8080637..0ae1edb 100644 (file)
@@ -68,7 +68,7 @@ try {
 /**
 * @name: S15.4.4.2_A4.2;
 * @section: 15.4.4.2, 15.2.4.5, 11.4.1;
-* @assertion: The length property of toString has the attribute DontDelete;
+* @assertion: The length property of toString has the attribute [[Configurable]]:true;
 * @description: Checking use hasOwnProperty, delete;
 */
 
@@ -80,13 +80,13 @@ if (Array.prototype.toString.hasOwnProperty('length') !== true) {
 delete Array.prototype.toString.length;
 
 //CHECK#2
-if (Array.prototype.toString.hasOwnProperty('length') !== true) {
-  testFailed('#2: delete Array.prototype.toString.length; Array.prototype.toString.hasOwnProperty(\'length\') === true. Actual: ' + (Array.prototype.toString.hasOwnProperty('length')));
+if (Array.prototype.toString.hasOwnProperty('length') !== false) {
+  testFailed('#2: delete Array.prototype.toString.length; Array.prototype.toString.hasOwnProperty(\'length\') === false. Actual: ' + (Array.prototype.toString.hasOwnProperty('length')));
 }
 
 //CHECK#3
-if (Array.prototype.toString.length === undefined) {
-  testFailed('#3: delete Array.prototype.toString.length; Array.prototype.toString.length !== undefined');
+if (Array.prototype.toString.length !== 0) {
+  testFailed('#3: delete Array.prototype.toString.length; Array.prototype.toString.length === 0');
 }
 
 
index 8a89eb5..0eebe2f 100644 (file)
@@ -68,7 +68,7 @@ try {
 /**
 * @name: S15.4.4.3_A4.2;
 * @section: 15.4.4.3, 15.2.4.5, 11.4.1;
-* @assertion: The length property of toLocaleString has the attribute DontDelete;
+* @assertion: The length property of toLocaleString has the attribute [[Configurable]]:true;
 * @description: Checking use hasOwnProperty, delete;
 */
 
@@ -80,13 +80,13 @@ if (Array.prototype.toLocaleString.hasOwnProperty('length') !== true) {
 delete Array.prototype.toLocaleString.length;
 
 //CHECK#2
-if (Array.prototype.toLocaleString.hasOwnProperty('length') !== true) {
-  testFailed('#2: delete Array.prototype.toLocaleString.length; Array.prototype.toLocaleString.hasOwnProperty(\'length\') === true. Actual: ' + (Array.prototype.toLocaleString.hasOwnProperty('length')));
+if (Array.prototype.toLocaleString.hasOwnProperty('length') !== false) {
+  testFailed('#2: delete Array.prototype.toLocaleString.length; Array.prototype.toLocaleString.hasOwnProperty(\'length\') === false. Actual: ' + (Array.prototype.toLocaleString.hasOwnProperty('length')));
 }
 
 //CHECK#3
-if (Array.prototype.toLocaleString.length === undefined) {
-  testFailed('#3: delete Array.prototype.toLocaleString.length; Array.prototype.toLocaleString.length !== undefined');
+if (Array.prototype.toLocaleString.length !== 0) {
+  testFailed('#3: delete Array.prototype.toLocaleString.length; Array.prototype.toLocaleString.length === 0');
 }
 
 
index ac4784d..8e8e08f 100644 (file)
@@ -68,7 +68,7 @@ try {
 /**
 * @name: S15.4.4.4_A4.2;
 * @section: 15.4.4.4, 15.2.4.5, 11.4.1;
-* @assertion: The length property of concat has the attribute DontDelete;
+* @assertion: The length property of concat has the attribute [[Configurable]]:true;
 * @description: Checking use hasOwnProperty, delete;
 */
 
@@ -80,13 +80,13 @@ if (Array.prototype.concat.hasOwnProperty('length') !== true) {
 delete Array.prototype.concat.length;
 
 //CHECK#2
-if (Array.prototype.concat.hasOwnProperty('length') !== true) {
-  testFailed('#2: delete Array.prototype.concat.length; Array.prototype.concat.hasOwnProperty(\'length\') === true. Actual: ' + (Array.prototype.concat.hasOwnProperty('length')));
+if (Array.prototype.concat.hasOwnProperty('length') !== false) {
+  testFailed('#2: delete Array.prototype.concat.length; Array.prototype.concat.hasOwnProperty(\'length\') === false. Actual: ' + (Array.prototype.concat.hasOwnProperty('length')));
 }
 
 //CHECK#3
-if (Array.prototype.concat.length === undefined) {
-  testFailed('#3: delete Array.prototype.concat.length; Array.prototype.concat.length !== undefined');
+if (Array.prototype.concat.length !== 0) {
+  testFailed('#3: delete Array.prototype.concat.length; Array.prototype.concat.length === 0');
 }
 
 
index a0c856e..fb19045 100644 (file)
@@ -68,7 +68,7 @@ try {
 /**
 * @name: S15.4.4.5_A6.2;
 * @section: 15.4.4.5, 15.2.4.5, 11.4.1;
-* @assertion: The length property of join has the attribute DontDelete;
+* @assertion: The length property of join has the attribute [[Configurable]]:true;
 * @description: Checking use hasOwnProperty, delete;
 */
 
@@ -80,13 +80,13 @@ if (Array.prototype.join.hasOwnProperty('length') !== true) {
 delete Array.prototype.join.length;
 
 //CHECK#2
-if (Array.prototype.join.hasOwnProperty('length') !== true) {
-  testFailed('#2: delete Array.prototype.join.length; Array.prototype.join.hasOwnProperty(\'length\') === true. Actual: ' + (Array.prototype.join.hasOwnProperty('length')));
+if (Array.prototype.join.hasOwnProperty('length') !== false) {
+  testFailed('#2: delete Array.prototype.join.length; Array.prototype.join.hasOwnProperty(\'length\') === false. Actual: ' + (Array.prototype.join.hasOwnProperty('length')));
 }
 
 //CHECK#3
-if (Array.prototype.join.length === undefined) {
-  testFailed('#3: delete Array.prototype.join.length; Array.prototype.join.length !== undefined');
+if (Array.prototype.join.length !== 0) {
+  testFailed('#3: delete Array.prototype.join.length; Array.prototype.join.length === 0');
 }
 
 
index 1304b0c..bf8f881 100644 (file)
@@ -68,7 +68,7 @@ try {
 /**
 * @name: S15.4.4.6_A5.2;
 * @section: 15.4.4.6, 15.2.4.5, 11.4.1;
-* @assertion: The length property of pop has the attribute DontDelete;
+* @assertion: The length property of pop has the attribute [[Configurable]]:true;
 * @description: Checking use hasOwnProperty, delete;
 */
 
@@ -80,13 +80,13 @@ if (Array.prototype.pop.hasOwnProperty('length') !== true) {
 delete Array.prototype.pop.length;
 
 //CHECK#2
-if (Array.prototype.pop.hasOwnProperty('length') !== true) {
-  testFailed('#2: delete Array.prototype.pop.length; Array.prototype.pop.hasOwnProperty(\'length\') === true. Actual: ' + (Array.prototype.pop.hasOwnProperty('length')));
+if (Array.prototype.pop.hasOwnProperty('length') !== false) {
+  testFailed('#2: delete Array.prototype.pop.length; Array.prototype.pop.hasOwnProperty(\'length\') === false. Actual: ' + (Array.prototype.pop.hasOwnProperty('length')));
 }
 
 //CHECK#3
-if (Array.prototype.pop.length === undefined) {
-  testFailed('#3: delete Array.prototype.pop.length; Array.prototype.pop.length !== undefined');
+if (Array.prototype.pop.length !== 0) {
+  testFailed('#3: delete Array.prototype.pop.length; Array.prototype.pop.length === 0');
 }
 
 
index 8809e8c..98b200b 100644 (file)
@@ -68,7 +68,7 @@ try {
 /**
 * @name: S15.4.4.7_A6.2;
 * @section: 15.4.4.7, 15.2.4.5, 11.4.1;
-* @assertion: The length property of push has the attribute DontDelete;
+* @assertion: The length property of push has the attribute [[Configurable]]:true;
 * @description: Checking use hasOwnProperty, delete;
 */
 
@@ -80,13 +80,13 @@ if (Array.prototype.push.hasOwnProperty('length') !== true) {
 delete Array.prototype.push.length;
 
 //CHECK#2
-if (Array.prototype.push.hasOwnProperty('length') !== true) {
-  testFailed('#2: delete Array.prototype.push.length; Array.prototype.push.hasOwnProperty(\'length\') === true. Actual: ' + (Array.prototype.push.hasOwnProperty('length')));
+if (Array.prototype.push.hasOwnProperty('length') !== false) {
+  testFailed('#2: delete Array.prototype.push.length; Array.prototype.push.hasOwnProperty(\'length\') === false. Actual: ' + (Array.prototype.push.hasOwnProperty('length')));
 }
 
 //CHECK#3
-if (Array.prototype.push.length === undefined) {
-  testFailed('#3: delete Array.prototype.push.length; Array.prototype.push.length !== undefined');
+if (Array.prototype.push.length !== 0) {
+  testFailed('#3: delete Array.prototype.push.length; Array.prototype.push.length === 0');
 }
 
 
index cbd664b..8cb8473 100644 (file)
@@ -68,7 +68,7 @@ try {
 /**
 * @name: S15.4.4.8_A5.2;
 * @section: 15.4.4.8, 15.2.4.5, 11.4.1;
-* @assertion: The length property of reverse has the attribute DontDelete;
+* @assertion: The length property of reverse has the attribute [[Configurable]]:true;
 * @description: Checking use hasOwnProperty, delete;
 */
 
@@ -80,13 +80,13 @@ if (Array.prototype.reverse.hasOwnProperty('length') !== true) {
 delete Array.prototype.reverse.length;
 
 //CHECK#2
-if (Array.prototype.reverse.hasOwnProperty('length') !== true) {
-  testFailed('#2: delete Array.prototype.reverse.length; Array.prototype.reverse.hasOwnProperty(\'length\') === true. Actual: ' + (Array.prototype.reverse.hasOwnProperty('length')));
+if (Array.prototype.reverse.hasOwnProperty('length') !== false) {
+  testFailed('#2: delete Array.prototype.reverse.length; Array.prototype.reverse.hasOwnProperty(\'length\') === false. Actual: ' + (Array.prototype.reverse.hasOwnProperty('length')));
 }
 
 //CHECK#3
-if (Array.prototype.reverse.length === undefined) {
-  testFailed('#3: delete Array.prototype.reverse.length; Array.prototype.reverse.length !== undefined');
+if (Array.prototype.reverse.length !== 0) {
+  testFailed('#3: delete Array.prototype.reverse.length; Array.prototype.reverse.length === 0');
 }
 
 
index 92c3675..0151080 100644 (file)
@@ -68,7 +68,7 @@ try {
 /**
 * @name: S15.4.4.9_A5.2;
 * @section: 15.4.4.9, 15.2.4.5, 11.4.1;
-* @assertion: The length property of shift has the attribute DontDelete;
+* @assertion: The length property of shift has the attribute [[Configurable]]:true;
 * @description: Checking use hasOwnProperty, delete;
 */
 
@@ -80,13 +80,13 @@ if (Array.prototype.shift.hasOwnProperty('length') !== true) {
 delete Array.prototype.shift.length;
 
 //CHECK#2
-if (Array.prototype.shift.hasOwnProperty('length') !== true) {
-  testFailed('#2: delete Array.prototype.shift.length; Array.prototype.shift.hasOwnProperty(\'length\') === true. Actual: ' + (Array.prototype.shift.hasOwnProperty('length')));
+if (Array.prototype.shift.hasOwnProperty('length') !== false) {
+  testFailed('#2: delete Array.prototype.shift.length; Array.prototype.shift.hasOwnProperty(\'length\') === false. Actual: ' + (Array.prototype.shift.hasOwnProperty('length')));
 }
 
 //CHECK#3
-if (Array.prototype.shift.length === undefined) {
-  testFailed('#3: delete Array.prototype.shift.length; Array.prototype.shift.length !== undefined');
+if (Array.prototype.shift.length !== 0) {
+  testFailed('#3: delete Array.prototype.shift.length; Array.prototype.shift.length === 0');
 }
 
 
index ca3b653..1dedc61 100644 (file)
@@ -68,8 +68,8 @@ try {
 /**
 * @name: S15.5.4.10_A9;
 * @section: 15.5.4.10;
-* @assertion: The String.prototype.match.length property has the attribute DontDelete;
-* @description: Checking if deleting the String.prototype.match.length property fails;
+* @assertion: The String.prototype.match.length property has the attribute [[Configurable]]:true;
+* @description: Checking if deleting the String.prototype.match.length property succeeds;
 */
 
 //////////////////////////////////////////////////////////////////////////////
@@ -82,16 +82,16 @@ if (!(String.prototype.match.hasOwnProperty('length'))) {
 
 //////////////////////////////////////////////////////////////////////////////
 //CHECK#1
-if (delete String.prototype.match.length) {
-  testFailed('#1: delete String.prototype.match.length return false');
+if (!(delete String.prototype.match.length)) {
+  testFailed('#1: delete String.prototype.match.length return true');
 }
 //
 //////////////////////////////////////////////////////////////////////////////
 
 //////////////////////////////////////////////////////////////////////////////
 //CHECK#2
-if (!(String.prototype.match.hasOwnProperty('length'))) {
-  testFailed('#2: delete String.prototype.match.length; String.prototype.match.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.match.hasOwnProperty('length'));
+if (String.prototype.match.hasOwnProperty('length')) {
+  testFailed('#2: delete String.prototype.match.length; String.prototype.match.hasOwnProperty(\'length\') return false. Actual: '+String.prototype.match.hasOwnProperty('length'));
 }
 //
 //////////////////////////////////////////////////////////////////////////////
index 24e62b0..a1bb222 100644 (file)
@@ -68,8 +68,8 @@ try {
 /**
 * @name: S15.5.4.11_A9;
 * @section: 15.5.4.11;
-* @assertion: The String.prototype.replace.length property has the attribute DontDelete;
-* @description: Checking if deleting the String.prototype.replace.length property fails;
+* @assertion: The String.prototype.replace.length property has the attribute [[Configurable]]:true;
+* @description: Checking if deleting the String.prototype.replace.length property succeeds;
 */
 
 //////////////////////////////////////////////////////////////////////////////
@@ -82,16 +82,16 @@ if (!(String.prototype.replace.hasOwnProperty('length'))) {
 
 //////////////////////////////////////////////////////////////////////////////
 //CHECK#1
-if (delete String.prototype.replace.length) {
-  testFailed('#1: delete String.prototype.replace.length return false');
+if (!(delete String.prototype.replace.length)) {
+  testFailed('#1: delete String.prototype.replace.length return true');
 }
 //
 //////////////////////////////////////////////////////////////////////////////
 
 //////////////////////////////////////////////////////////////////////////////
 //CHECK#2
-if (!(String.prototype.replace.hasOwnProperty('length'))) {
-  testFailed('#2: delete String.prototype.replace.length; String.prototype.replace.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.replace.hasOwnProperty('length'));
+if (String.prototype.replace.hasOwnProperty('length')) {
+  testFailed('#2: delete String.prototype.replace.length; String.prototype.replace.hasOwnProperty(\'length\') return false. Actual: '+String.prototype.replace.hasOwnProperty('length'));
 }
 //
 //////////////////////////////////////////////////////////////////////////////
index 1517795..87aa6c0 100644 (file)
@@ -68,8 +68,8 @@ try {
 /**
 * @name: S15.5.4.12_A9;
 * @section: 15.5.4.12;
-* @assertion: The String.prototype.search.length property has the attribute DontDelete;
-* @description: Checking if deleting the String.prototype.search.length property fails;
+* @assertion: The String.prototype.search.length property has the attribute [[Configurable]]:true;
+* @description: Checking if deleting the String.prototype.search.length property succeeds;
 */
 
 //////////////////////////////////////////////////////////////////////////////
@@ -82,16 +82,16 @@ if (!(String.prototype.search.hasOwnProperty('length'))) {
 
 //////////////////////////////////////////////////////////////////////////////
 //CHECK#1
-if (delete String.prototype.search.length) {
-  testFailed('#1: delete String.prototype.search.length return false');
+if (!(delete String.prototype.search.length)) {
+  testFailed('#1: delete String.prototype.search.length return true');
 }
 //
 //////////////////////////////////////////////////////////////////////////////
 
 //////////////////////////////////////////////////////////////////////////////
 //CHECK#2
-if (!(String.prototype.search.hasOwnProperty('length'))) {
-  testFailed('#2: delete String.prototype.search.length; String.prototype.search.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.search.hasOwnProperty('length'));
+if (String.prototype.search.hasOwnProperty('length')) {
+  testFailed('#2: delete String.prototype.search.length; String.prototype.search.hasOwnProperty(\'length\') return false. Actual: '+String.prototype.search.hasOwnProperty('length'));
 }
 //
 //////////////////////////////////////////////////////////////////////////////
index f744fb5..4b9cafe 100644 (file)
@@ -68,8 +68,8 @@ try {
 /**
 * @name: S15.5.4.13_A9;
 * @section: 15.5.4.13;
-* @assertion: The String.prototype.slice.length property has the attribute DontDelete;
-* @description: Checking if deleting the String.prototype.slice.length property fails;
+* @assertion: The String.prototype.slice.length property has the attribute [[Configurable]]:true;
+* @description: Checking if deleting the String.prototype.slice.length property succeeds;
 */
 
 //////////////////////////////////////////////////////////////////////////////
@@ -82,16 +82,16 @@ if (!(String.prototype.slice.hasOwnProperty('length'))) {
 
 //////////////////////////////////////////////////////////////////////////////
 //CHECK#1
-if (delete String.prototype.slice.length) {
-  testFailed('#1: delete String.prototype.slice.length return false');
+if (!(delete String.prototype.slice.length)) {
+  testFailed('#1: delete String.prototype.slice.length return true');
 }
 //
 //////////////////////////////////////////////////////////////////////////////
 
 //////////////////////////////////////////////////////////////////////////////
 //CHECK#2
-if (!(String.prototype.slice.hasOwnProperty('length'))) {
-  testFailed('#2: delete String.prototype.slice.length; String.prototype.slice.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.slice.hasOwnProperty('length'));
+if (String.prototype.slice.hasOwnProperty('length')) {
+  testFailed('#2: delete String.prototype.slice.length; String.prototype.slice.hasOwnProperty(\'length\') return false. Actual: '+String.prototype.slice.hasOwnProperty('length'));
 }
 //
 //////////////////////////////////////////////////////////////////////////////
index 1cc840b..032b1d3 100644 (file)
@@ -68,8 +68,8 @@ try {
 /**
 * @name: S15.5.4.14_A9;
 * @section: 15.5.4.14;
-* @assertion: The String.prototype.split.length property has the attribute DontDelete;
-* @description: Checking if deleting the String.prototype.split.length property fails;
+* @assertion: The String.prototype.split.length property has the attribute [[Configurable]]:true;
+* @description: Checking if deleting the String.prototype.split.length property succeeds;
 */
 
 //////////////////////////////////////////////////////////////////////////////
@@ -82,16 +82,16 @@ if (!(String.prototype.split.hasOwnProperty('length'))) {
 
 //////////////////////////////////////////////////////////////////////////////
 //CHECK#1
-if (delete String.prototype.split.length) {
-  testFailed('#1: delete String.prototype.split.length return false');
+if (!(delete String.prototype.split.length)) {
+  testFailed('#1: delete String.prototype.split.length return true');
 }
 //
 //////////////////////////////////////////////////////////////////////////////
 
 //////////////////////////////////////////////////////////////////////////////
 //CHECK#2
-if (!(String.prototype.split.hasOwnProperty('length'))) {
-  testFailed('#2: delete String.prototype.split.length; String.prototype.split.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.split.hasOwnProperty('length'));
+if (String.prototype.split.hasOwnProperty('length')) {
+  testFailed('#2: delete String.prototype.split.length; String.prototype.split.hasOwnProperty(\'length\') return false. Actual: '+String.prototype.split.hasOwnProperty('length'));
 }
 //
 //////////////////////////////////////////////////////////////////////////////
index 1e3478d..071b8ac 100644 (file)
@@ -68,8 +68,8 @@ try {
 /**
 * @name: S15.5.4.15_A9;
 * @section: 15.5.4.15;
-* @assertion: The String.prototype.substring.length property has the attribute DontDelete;
-* @description: Checking if deleting the String.prototype.substring.length property fails;
+* @assertion: The String.prototype.substring.length property has the attribute [[Configurable]]:true;
+* @description: Checking if deleting the String.prototype.substring.length property succeeds;
 */
 
 //////////////////////////////////////////////////////////////////////////////
@@ -82,16 +82,16 @@ if (!(String.prototype.substring.hasOwnProperty('length'))) {
 
 //////////////////////////////////////////////////////////////////////////////
 //CHECK#1
-if (delete String.prototype.substring.length) {
-  testFailed('#1: delete String.prototype.substring.length return false');
+if (!(delete String.prototype.substring.length)) {
+  testFailed('#1: delete String.prototype.substring.length return true');
 }
 //
 //////////////////////////////////////////////////////////////////////////////
 
 //////////////////////////////////////////////////////////////////////////////
 //CHECK#2
-if (!(String.prototype.substring.hasOwnProperty('length'))) {
-  testFailed('#2: delete String.prototype.substring.length; String.prototype.substring.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.substring.hasOwnProperty('length'));
+if (String.prototype.substring.hasOwnProperty('length')) {
+  testFailed('#2: delete String.prototype.substring.length; String.prototype.substring.hasOwnProperty(\'length\') return false. Actual: '+String.prototype.substring.hasOwnProperty('length'));
 }
 //
 //////////////////////////////////////////////////////////////////////////////
index 2d8179c..da2730b 100644 (file)
@@ -68,8 +68,8 @@ try {
 /**
 * @name: S15.5.4.16_A9;
 * @section: 15.5.4.16;
-* @assertion: The String.prototype.toLowerCase.length property has the attribute DontDelete;
-* @description: Checking if deleting the String.prototype.toLowerCase.length property fails;
+* @assertion: The String.prototype.toLowerCase.length property has the attribute [[Configurable]]:true;
+* @description: Checking if deleting the String.prototype.toLowerCase.length property succeeds;
 */
 
 //////////////////////////////////////////////////////////////////////////////
@@ -82,16 +82,16 @@ if (!(String.prototype.toLowerCase.hasOwnProperty('length'))) {
 
 //////////////////////////////////////////////////////////////////////////////
 //CHECK#1
-if (delete String.prototype.toLowerCase.length) {
-  testFailed('#1: delete String.prototype.toLowerCase.length return false');
+if (!(delete String.prototype.toLowerCase.length)) {
+  testFailed('#1: delete String.prototype.toLowerCase.length return true');
 }
 //
 //////////////////////////////////////////////////////////////////////////////
 
 //////////////////////////////////////////////////////////////////////////////
 //CHECK#2
-if (!(String.prototype.toLowerCase.hasOwnProperty('length'))) {
-  testFailed('#2: delete String.prototype.toLowerCase.length; String.prototype.toLowerCase.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.toLowerCase.hasOwnProperty('length'));
+if (String.prototype.toLowerCase.hasOwnProperty('length')) {
+  testFailed('#2: delete String.prototype.toLowerCase.length; String.prototype.toLowerCase.hasOwnProperty(\'length\') return false. Actual: '+String.prototype.toLowerCase.hasOwnProperty('length'));
 }
 //
 //////////////////////////////////////////////////////////////////////////////
index b2a8deb..605c317 100644 (file)
@@ -68,8 +68,8 @@ try {
 /**
 * @name: S15.5.4.17_A9;
 * @section: 15.5.4.17;
-* @assertion: The String.prototype.toLocaleLowerCase.length property has the attribute DontDelete;
-* @description: Checking if deleting the String.prototype.toLocaleLowerCase.length property fails;
+* @assertion: The String.prototype.toLocaleLowerCase.length property has the attribute [[Configurable]]:true;
+* @description: Checking if deleting the String.prototype.toLocaleLowerCase.length property succeeds;
 */
 
 //////////////////////////////////////////////////////////////////////////////
@@ -82,16 +82,16 @@ if (!(String.prototype.toLocaleLowerCase.hasOwnProperty('length'))) {
 
 //////////////////////////////////////////////////////////////////////////////
 //CHECK#1
-if (delete String.prototype.toLocaleLowerCase.length) {
-  testFailed('#1: delete String.prototype.toLocaleLowerCase.length return false');
+if (!(delete String.prototype.toLocaleLowerCase.length)) {
+  testFailed('#1: delete String.prototype.toLocaleLowerCase.length return true');
 }
 //
 //////////////////////////////////////////////////////////////////////////////
 
 //////////////////////////////////////////////////////////////////////////////
 //CHECK#2
-if (!(String.prototype.toLocaleLowerCase.hasOwnProperty('length'))) {
-  testFailed('#2: delete String.prototype.toLocaleLowerCase.length; String.prototype.toLocaleLowerCase.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.toLocaleLowerCase.hasOwnProperty('length'));
+if (String.prototype.toLocaleLowerCase.hasOwnProperty('length')) {
+  testFailed('#2: delete String.prototype.toLocaleLowerCase.length; String.prototype.toLocaleLowerCase.hasOwnProperty(\'length\') return false. Actual: '+String.prototype.toLocaleLowerCase.hasOwnProperty('length'));
 }
 //
 //////////////////////////////////////////////////////////////////////////////
index f4693c1..b18c8c3 100644 (file)
@@ -68,8 +68,8 @@ try {
 /**
 * @name: S15.5.4.18_A9;
 * @section: 15.5.4.18;
-* @assertion: The String.prototype.toUpperCase.length property has the attribute DontDelete;
-* @description: Checking if deleting the String.prototype.toUpperCase.length property fails;
+* @assertion: The String.prototype.toUpperCase.length property has the attribute [[Configurable]]:true;
+* @description: Checking if deleting the String.prototype.toUpperCase.length property succeeds;
 */
 
 //////////////////////////////////////////////////////////////////////////////
@@ -82,16 +82,16 @@ if (!(String.prototype.toUpperCase.hasOwnProperty('length'))) {
 
 //////////////////////////////////////////////////////////////////////////////
 //CHECK#1
-if (delete String.prototype.toUpperCase.length) {
-  testFailed('#1: delete String.prototype.toUpperCase.length return false');
+if (!(delete String.prototype.toUpperCase.length)) {
+  testFailed('#1: delete String.prototype.toUpperCase.length return true');
 }
 //
 //////////////////////////////////////////////////////////////////////////////
 
 //////////////////////////////////////////////////////////////////////////////
 //CHECK#2
-if (!(String.prototype.toUpperCase.hasOwnProperty('length'))) {
-  testFailed('#2: delete String.prototype.toUpperCase.length; String.prototype.toUpperCase.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.toUpperCase.hasOwnProperty('length'));
+if (String.prototype.toUpperCase.hasOwnProperty('length')) {
+  testFailed('#2: delete String.prototype.toUpperCase.length; String.prototype.toUpperCase.hasOwnProperty(\'length\') return false. Actual: '+String.prototype.toUpperCase.hasOwnProperty('length'));
 }
 //
 //////////////////////////////////////////////////////////////////////////////
index 5e1d41e..3785cba 100644 (file)
@@ -68,8 +68,8 @@ try {
 /**
 * @name: S15.5.4.19_A9;
 * @section: 15.5.4.19;
-* @assertion: The String.prototype.toLocaleUpperCase.length property has the attribute DontDelete;
-* @description: Checking if deleting the String.prototype.toLocaleUpperCase.length property fails;
+* @assertion: The String.prototype.toLocaleUpperCase.length property has the attribute [[Configurable]]:true;
+* @description: Checking if deleting the String.prototype.toLocaleUpperCase.length property succeeds;
 */
 
 //////////////////////////////////////////////////////////////////////////////
@@ -82,16 +82,16 @@ if (!(String.prototype.toLocaleUpperCase.hasOwnProperty('length'))) {
 
 //////////////////////////////////////////////////////////////////////////////
 //CHECK#1
-if (delete String.prototype.toLocaleUpperCase.length) {
-  testFailed('#1: delete String.prototype.toLocaleUpperCase.length return false');
+if (!(delete String.prototype.toLocaleUpperCase.length)) {
+  testFailed('#1: delete String.prototype.toLocaleUpperCase.length return true');
 }
 //
 //////////////////////////////////////////////////////////////////////////////
 
 //////////////////////////////////////////////////////////////////////////////
 //CHECK#2
-if (!(String.prototype.toLocaleUpperCase.hasOwnProperty('length'))) {
-  testFailed('#2: delete String.prototype.toLocaleUpperCase.length; String.prototype.toLocaleUpperCase.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.toLocaleUpperCase.hasOwnProperty('length'));
+if (String.prototype.toLocaleUpperCase.hasOwnProperty('length')) {
+  testFailed('#2: delete String.prototype.toLocaleUpperCase.length; String.prototype.toLocaleUpperCase.hasOwnProperty(\'length\') return false. Actual: '+String.prototype.toLocaleUpperCase.hasOwnProperty('length'));
 }
 //
 //////////////////////////////////////////////////////////////////////////////
index e2c9547..c429fd0 100644 (file)
@@ -68,8 +68,8 @@ try {
 /**
 * @name: S15.5.4.4_A9;
 * @section: 15.5.4.4;
-* @assertion: The String.prototype.charAt.length property has the attribute DontDelete;
-* @description: Checking if deleting the String.prototype.charAt.length property fails;
+* @assertion: The String.prototype.charAt.length property has the attribute [[Configurable]]:true;
+* @description: Checking if deleting the String.prototype.charAt.length property succeeds;
 */
 
 //////////////////////////////////////////////////////////////////////////////
@@ -82,16 +82,16 @@ if (!(String.prototype.charAt.hasOwnProperty('length'))) {
 
 //////////////////////////////////////////////////////////////////////////////
 //CHECK#1
-if (delete String.prototype.charAt.length) {
-  testFailed('#1: delete String.prototype.charAt.length return false');
+if (!(delete String.prototype.charAt.length)) {
+  testFailed('#1: delete String.prototype.charAt.length return true');
 }
 //
 //////////////////////////////////////////////////////////////////////////////
 
 //////////////////////////////////////////////////////////////////////////////
 //CHECK#2
-if (!(String.prototype.charAt.hasOwnProperty('length'))) {
-  testFailed('#2: delete String.prototype.charAt.length; String.prototype.charAt.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.charAt.hasOwnProperty('length')); 
+if (String.prototype.charAt.hasOwnProperty('length')) {
+  testFailed('#2: delete String.prototype.charAt.length; String.prototype.charAt.hasOwnProperty(\'length\') return false. Actual: '+String.prototype.charAt.hasOwnProperty('length')); 
 }
 //
 //////////////////////////////////////////////////////////////////////////////
index 8ef48c9..529f31b 100644 (file)
@@ -68,8 +68,8 @@ try {
 /**
 * @name: S15.5.4.5_A9;
 * @section: 15.5.4.5;
-* @assertion: The String.prototype.charCodeAt.length property has the attribute DontDelete;
-* @description: Checking if deleting the String.prototype.charCodeAt.length property fails;
+* @assertion: The String.prototype.charCodeAt.length property has the attribute [[Configurable]]:true;
+* @description: Checking if deleting the String.prototype.charCodeAt.length property succeeds;
 */
 
 //////////////////////////////////////////////////////////////////////////////
@@ -82,16 +82,16 @@ if (!(String.prototype.charCodeAt.hasOwnProperty('length'))) {
 
 //////////////////////////////////////////////////////////////////////////////
 //CHECK#1
-if (delete String.prototype.charCodeAt.length) {
-  testFailed('#1: delete String.prototype.charCodeAt.length return false');
+if (!(delete String.prototype.charCodeAt.length)) {
+  testFailed('#1: delete String.prototype.charCodeAt.length return true');
 }
 //
 //////////////////////////////////////////////////////////////////////////////
 
 //////////////////////////////////////////////////////////////////////////////
 //CHECK#2
-if (!(String.prototype.charCodeAt.hasOwnProperty('length'))) {
-  testFailed('#2: delete String.prototype.charCodeAt.length; String.prototype.charCodeAt.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.charCodeAt.hasOwnProperty('length')); 
+if (String.prototype.charCodeAt.hasOwnProperty('length')) {
+  testFailed('#2: delete String.prototype.charCodeAt.length; String.prototype.charCodeAt.hasOwnProperty(\'length\') return false. Actual: '+String.prototype.charCodeAt.hasOwnProperty('length')); 
 }
 //
 //////////////////////////////////////////////////////////////////////////////
index 5891765..0c05ab1 100644 (file)
@@ -68,8 +68,8 @@ try {
 /**
 * @name: S15.5.4.6_A9;
 * @section: 15.5.4.6;
-* @assertion: The String.prototype.concat.length property has the attribute DontDelete;
-* @description: Checking if deleting the String.prototype.concat.length property fails;
+* @assertion: The String.prototype.concat.length property has the attribute [[Configurable]]:true;
+* @description: Checking if deleting the String.prototype.concat.length property succeeds;
 */
 
 //////////////////////////////////////////////////////////////////////////////
@@ -82,16 +82,16 @@ if (!(String.prototype.concat.hasOwnProperty('length'))) {
 
 //////////////////////////////////////////////////////////////////////////////
 //CHECK#1
-if (delete String.prototype.concat.length) {
-  testFailed('#1: delete String.prototype.concat.length return false');
+if (!(delete String.prototype.concat.length)) {
+  testFailed('#1: delete String.prototype.concat.length return true');
 }
 //
 //////////////////////////////////////////////////////////////////////////////
 
 //////////////////////////////////////////////////////////////////////////////
 //CHECK#2
-if (!(String.prototype.concat.hasOwnProperty('length'))) {
-  testFailed('#2: delete String.prototype.concat.length; String.prototype.concat.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.concat.hasOwnProperty('length')); 
+if (String.prototype.concat.hasOwnProperty('length')) {
+  testFailed('#2: delete String.prototype.concat.length; String.prototype.concat.hasOwnProperty(\'length\') return false. Actual: '+String.prototype.concat.hasOwnProperty('length')); 
 }
 //
 //////////////////////////////////////////////////////////////////////////////
index 29115a5..46230ba 100644 (file)
@@ -68,8 +68,8 @@ try {
 /**
 * @name: S15.5.4.7_A9;
 * @section: 15.5.4.7;
-* @assertion: The String.prototype.indexOf.length property has the attribute DontDelete;
-* @description: Checking if deleting the String.prototype.indexOf.length property fails;
+* @assertion: The String.prototype.indexOf.length property has the attribute [[Configurable]]:true;
+* @description: Checking if deleting the String.prototype.indexOf.length property succeeds;
 */
 
 //////////////////////////////////////////////////////////////////////////////
@@ -82,16 +82,16 @@ if (!(String.prototype.indexOf.hasOwnProperty('length'))) {
 
 //////////////////////////////////////////////////////////////////////////////
 //CHECK#1
-if (delete String.prototype.indexOf.length) {
-  testFailed('#1: delete String.prototype.indexOf.length raturn false');
+if (!(delete String.prototype.indexOf.length)) {
+  testFailed('#1: delete String.prototype.indexOf.length return true');
 }
 //
 //////////////////////////////////////////////////////////////////////////////
 
 //////////////////////////////////////////////////////////////////////////////
 //CHECK#2
-if (!(String.prototype.indexOf.hasOwnProperty('length'))) {
-  testFailed('#2: delete String.prototype.indexOf.length; String.prototype.indexOf.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.indexOf.hasOwnProperty('length')); 
+if (String.prototype.indexOf.hasOwnProperty('length')) {
+  testFailed('#2: delete String.prototype.indexOf.length; String.prototype.indexOf.hasOwnProperty(\'length\') return false. Actual: '+String.prototype.indexOf.hasOwnProperty('length')); 
 }
 //
 //////////////////////////////////////////////////////////////////////////////
index 2ca64d0..cdd8e14 100644 (file)
@@ -68,8 +68,8 @@ try {
 /**
 * @name: S15.5.4.8_A9;
 * @section: 15.5.4.8;
-* @assertion: The String.prototype.lastIndexOf.length property has the attribute DontDelete;
-* @description: Checking if deleting the String.prototype.lastIndexOf.length property fails;
+* @assertion: The String.prototype.lastIndexOf.length property has the attribute [[Configurable]]:true;
+* @description: Checking if deleting the String.prototype.lastIndexOf.length property succeeds;
 */
 
 //////////////////////////////////////////////////////////////////////////////
@@ -82,16 +82,16 @@ if (!(String.prototype.lastIndexOf.hasOwnProperty('length'))) {
 
 //////////////////////////////////////////////////////////////////////////////
 //CHECK#1
-if (delete String.prototype.lastIndexOf.length) {
-  testFailed('#1: delete String.prototype.lastIndexOf.length return false');
+if (!(delete String.prototype.lastIndexOf.length)) {
+  testFailed('#1: delete String.prototype.lastIndexOf.length return true');
 }
 //
 //////////////////////////////////////////////////////////////////////////////
 
 //////////////////////////////////////////////////////////////////////////////
 //CHECK#2
-if (!(String.prototype.lastIndexOf.hasOwnProperty('length'))) {
-  testFailed('#2: delete String.prototype.lastIndexOf.length; String.prototype.lastIndexOf.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.lastIndexOf.hasOwnProperty('length'));
+if (String.prototype.lastIndexOf.hasOwnProperty('length')) {
+  testFailed('#2: delete String.prototype.lastIndexOf.length; String.prototype.lastIndexOf.hasOwnProperty(\'length\') return false. Actual: '+String.prototype.lastIndexOf.hasOwnProperty('length'));
 }
 //
 //////////////////////////////////////////////////////////////////////////////
index da28c98..7ad60e0 100644 (file)
@@ -68,8 +68,8 @@ try {
 /**
 * @name: S15.5.4.9_A9;
 * @section: 15.5.4.9;
-* @assertion: The String.prototype.localeCompare.length property has the attribute DontDelete;
-* @description: Checking if deleting the String.prototype.localeCompare.length property fails;
+* @assertion: The String.prototype.localeCompare.length property has the attribute [[Configurable]]:true;
+* @description: Checking if deleting the String.prototype.localeCompare.length property succeeds;
 */
 
 //////////////////////////////////////////////////////////////////////////////
@@ -82,16 +82,16 @@ if (!(String.prototype.localeCompare.hasOwnProperty('length'))) {
 
 //////////////////////////////////////////////////////////////////////////////
 //CHECK#1
-if (delete String.prototype.localeCompare.length) {
-  testFailed('#1: delete String.prototype.localeCompare.length return false');
+if (!(delete String.prototype.localeCompare.length)) {
+  testFailed('#1: delete String.prototype.localeCompare.length return true');
 }
 //
 //////////////////////////////////////////////////////////////////////////////
 
 //////////////////////////////////////////////////////////////////////////////
 //CHECK#2
-if (!(String.prototype.localeCompare.hasOwnProperty('length'))) {
-  testFailed('#2: delete String.prototype.localeCompare.length; String.prototype.localeCompare.hasOwnProperty(\'length\') return true. Actual: '+String.prototype.localeCompare.hasOwnProperty('length'));
+if (String.prototype.localeCompare.hasOwnProperty('length')) {
+  testFailed('#2: delete String.prototype.localeCompare.length; String.prototype.localeCompare.hasOwnProperty(\'length\') return false. Actual: '+String.prototype.localeCompare.hasOwnProperty('length'));
 }
 //
 //////////////////////////////////////////////////////////////////////////////
index 192ba6b..2fb010d 100644 (file)
@@ -68,16 +68,16 @@ try {
 /**
  * @name: S15.9.4.2_A3_T2;
  * @section: 15.9.4.2;
- * @assertion: The Date.parse property "length" has { ReadOnly, DontDelete, DontEnum } attributes;
- * @description: Checking DontDelete attribute;
+ * @assertion: The Date.parse property "length" has { [[Writable]]:false, [[Enumerable]]:false, [[Configurable]]:true } attributes;
+ * @description: Checking [[Configurable]] attribute;
  */
 
-if (delete Date.parse.length  !== false) {
-  testFailed('#1: The Date.parse.length property has the attributes DontDelete');
+if (delete Date.parse.length  !== true) {
+  testFailed('#1: The Date.parse.length property has the attribute [[Configurable]]:true');
 }
 
-if (!Date.parse.hasOwnProperty('length')) {
-  testFailed('#2: The Date.parse.length property has the attributes DontDelete');
+if (Date.parse.hasOwnProperty('length')) {
+  testFailed('#2: The Date.parse.length property has the attribute [[Configurable]]:true');
 }
 
 
index fa918be..284415b 100644 (file)
@@ -68,16 +68,16 @@ try {
 /**
  * @name: S15.9.4.3_A3_T2;
  * @section: 15.9.4.3;
- * @assertion: The Date.UTC property "length" has { ReadOnly, DontDelete, DontEnum } attributes;
- * @description: Checking DontDelete attribute;
+ * @assertion: The Date.UTC property "length" has { [[Writable]]:false, [[Enumerable]]:false, [[Configurable]]:true } attributes;
+ * @description: Checking [[Configurable]] attribute;
  */
 
-if (delete Date.UTC.length  !== false) {
-  testFailed('#1: The Date.UTC.length property has the attributes DontDelete');
+if (delete Date.UTC.length  !== true) {
+  testFailed('#1: The Date.UTC.length property has the attribute [[Configurable]]:true');
 }
 
-if (!Date.UTC.hasOwnProperty('length')) {
-  testFailed('#2: The Date.UTC.length property has the attributes DontDelete');
+if (Date.UTC.hasOwnProperty('length')) {
+  testFailed('#2: The Date.UTC.length property has the attribute [[Configurable]]:true');
 }
 
 
index 2ea70f4..6ae6aef 100644 (file)
@@ -68,16 +68,16 @@ try {
 /**
  * @name: S15.9.5.10_A3_T2;
  * @section: 15.9.5.10;
- * @assertion: The Date.prototype.getFullYear property "length" has { ReadOnly, DontDelete, DontEnum } attributes;
- * @description: Checking DontDelete attribute;
+ * @assertion: The Date.prototype.getFullYear property "length" has { [[Writable]]:false, [[Enumerable]]:false, [[Configurable]]:true } attributes;
+ * @description: Checking [[Configurable]] attribute;
  */
 
-if (delete Date.prototype.getFullYear.length  !== false) {
-  testFailed('#1: The Date.prototype.getFullYear.length property has the attributes DontDelete');
+if (delete Date.prototype.getFullYear.length  !== true) {
+  testFailed('#1: The Date.prototype.getFullYear.length property has the attribute [[Configurable]]:true');
 }
 
-if (!Date.prototype.getFullYear.hasOwnProperty('length')) {
-  testFailed('#2: The Date.prototype.getFullYear.length property has the attributes DontDelete');
+if (Date.prototype.getFullYear.hasOwnProperty('length')) {
+  testFailed('#2: The Date.prototype.getFullYear.length property has the attribute [[Configurable]]:true');
 }
 
 
index cf27eac..43628d5 100644 (file)
@@ -68,16 +68,16 @@ try {
 /**
  * @name: S15.9.5.11_A3_T2;
  * @section: 15.9.5.11;
- * @assertion: The Date.prototype.getUTCFullYear property "length" has { ReadOnly, DontDelete, DontEnum } attributes;
- * @description: Checking DontDelete attribute;
+ * @assertion: The Date.prototype.getUTCFullYear property "length" has { [[Writable]]:false, [[Enumerable]]:false, [[Configurable]]:true } attributes;
+ * @description: Checking [[Configurable]] attribute;
  */
 
-if (delete Date.prototype.getUTCFullYear.length  !== false) {
-  testFailed('#1: The Date.prototype.getUTCFullYear.length property has the attributes DontDelete');
+if (delete Date.prototype.getUTCFullYear.length  !== true) {
+  testFailed('#1: The Date.prototype.getUTCFullYear.length property has the attribute [[Configurable]]:true');
 }
 
-if (!Date.prototype.getUTCFullYear.hasOwnProperty('length')) {
-  testFailed('#2: The Date.prototype.getUTCFullYear.length property has the attributes DontDelete');
+if (Date.prototype.getUTCFullYear.hasOwnProperty('length')) {
+  testFailed('#2: The Date.prototype.getUTCFullYear.length property has the attribute [[Configurable]]:true');
 }
 
 
index cc8bc9f..3ee9d2b 100644 (file)
@@ -68,16 +68,16 @@ try {
 /**
  * @name: S15.9.5.12_A3_T2;
  * @section: 15.9.5.12;
- * @assertion: The Date.prototype.getMonth property "length" has { ReadOnly, DontDelete, DontEnum } attributes;
- * @description: Checking DontDelete attribute;
+ * @assertion: The Date.prototype.getMonth property "length" has { [[Writable]]:false, [[Enumerable]]:false, [[Configurable]]:true } attributes;
+ * @description: Checking [[Configurable]] attribute;
  */
 
-if (delete Date.prototype.getMonth.length  !== false) {
-  testFailed('#1: The Date.prototype.getMonth.length property has the attributes DontDelete');
+if (delete Date.prototype.getMonth.length  !== true) {
+  testFailed('#1: The Date.prototype.getMonth.length property has the attribute [[Configurable]]:true');
 }
 
-if (!Date.prototype.getMonth.hasOwnProperty('length')) {
-  testFailed('#2: The Date.prototype.getMonth.length property has the attributes DontDelete');
+if (Date.prototype.getMonth.hasOwnProperty('length')) {
+  testFailed('#2: The Date.prototype.getMonth.length property has the attribute [[Configurable]]:true');
 }
 
 
index 59a7d48..41de198 100644 (file)
@@ -68,16 +68,16 @@ try {
 /**
  * @name: S15.9.5.13_A3_T2;
  * @section: 15.9.5.13;
- * @assertion: The Date.prototype.getUTCMonth property "length" has { ReadOnly, DontDelete, DontEnum } attributes;
- * @description: Checking DontDelete attribute;
+ * @assertion: The Date.prototype.getUTCMonth property "length" has { [[Writable]]:false, [[Enumerable]]:false, [[Configurable]]:true } attributes;
+ * @description: Checking [[Configurable]] attribute;
  */
 
-if (delete Date.prototype.getUTCMonth.length  !== false) {
-  testFailed('#1: The Date.prototype.getUTCMonth.length property has the attributes DontDelete');
+if (delete Date.prototype.getUTCMonth.length  !== true) {
+  testFailed('#1: The Date.prototype.getUTCMonth.length property has the attribute [[Configurable]]:true');
 }
 
-if (!Date.prototype.getUTCMonth.hasOwnProperty('length')) {
-  testFailed('#2: The Date.prototype.getUTCMonth.length property has the attributes DontDelete');
+if (Date.prototype.getUTCMonth.hasOwnProperty('length')) {
+  testFailed('#2: The Date.prototype.getUTCMonth.length property has the attribute [[Configurable]]:true');
 }
 
 
index b11f3b5..66850e6 100644 (file)
@@ -68,16 +68,16 @@ try {
 /**
  * @name: S15.9.5.14_A3_T2;
  * @section: 15.9.5.14;
- * @assertion: The Date.prototype.getDate property "length" has { ReadOnly, DontDelete, DontEnum } attributes;
- * @description: Checking DontDelete attribute;
+ * @assertion: The Date.prototype.getDate property "length" has { [[Writable]]:false, [[Enumerable]]:false, [[Configurable]]:true } attributes;
+ * @description: Checking [[Configurable]] attribute;
  */
 
-if (delete Date.prototype.getDate.length  !== false) {
-  testFailed('#1: The Date.prototype.getDate.length property has the attributes DontDelete');
+if (delete Date.prototype.getDate.length  !== true) {
+  testFailed('#1: The Date.prototype.getDate.length property has the attribute [[Configurable]]:true');
 }
 
-if (!Date.prototype.getDate.hasOwnProperty('length')) {
-  testFailed('#2: The Date.prototype.getDate.length property has the attributes DontDelete');
+if (Date.prototype.getDate.hasOwnProperty('length')) {
+  testFailed('#2: The Date.prototype.getDate.length property has the attribute [[Configurable]]:true');
 }
 
 
index 198fc06..e534417 100644 (file)
@@ -68,16 +68,16 @@ try {
 /**
  * @name: S15.9.5.15_A3_T2;
  * @section: 15.9.5.15;
- * @assertion: The Date.prototype.getUTCDate property "length" has { ReadOnly, DontDelete, DontEnum } attributes;
- * @description: Checking DontDelete attribute;
+ * @assertion: The Date.prototype.getUTCDate property "length" has { [[Writable]]:false, [[Enumerable]]:false, [[Configurable]]:true } attributes;
+ * @description: Checking [[Configurable]] attribute;
  */
 
-if (delete Date.prototype.getUTCDate.length  !== false) {
-  testFailed('#1: The Date.prototype.getUTCDate.length property has the attributes DontDelete');
+if (delete Date.prototype.getUTCDate.length  !== true) {
+  testFailed('#1: The Date.prototype.getUTCDate.length property has the attribute [[Configurable]]:true');
 }
 
-if (!Date.prototype.getUTCDate.hasOwnProperty('length')) {
-  testFailed('#2: The Date.prototype.getUTCDate.length property has the attributes DontDelete');
+if (Date.prototype.getUTCDate.hasOwnProperty('length')) {
+  testFailed('#2: The Date.prototype.getUTCDate.length property has the attribute [[Configurable]]:true');
 }
 
 
index dba1c98..03a0d5d 100644 (file)
@@ -68,16 +68,16 @@ try {
 /**
  * @name: S15.9.5.16_A3_T2;
  * @section: 15.9.5.16;
- * @assertion: The Date.prototype.getDay property "length" has { ReadOnly, DontDelete, DontEnum } attributes;
- * @description: Checking DontDelete attribute;
+ * @assertion: The Date.prototype.getDay property "length" has { [[Writable]]:false, [[Enumerable]]:false, [[Configurable]]:true } attributes;
+ * @description: Checking [[Configurable]] attribute;
  */
 
-if (delete Date.prototype.getDay.length  !== false) {
-  testFailed('#1: The Date.prototype.getDay.length property has the attributes DontDelete');
+if (delete Date.prototype.getDay.length  !== true) {
+  testFailed('#1: The Date.prototype.getDay.length property has the attribute [[Configurable]]:true');
 }
 
-if (!Date.prototype.getDay.hasOwnProperty('length')) {
-  testFailed('#2: The Date.prototype.getDay.length property has the attributes DontDelete');
+if (Date.prototype.getDay.hasOwnProperty('length')) {
+  testFailed('#2: The Date.prototype.getDay.length property has the attribute [[Configurable]]:true');
 }
 
 
index ac30883..f72b0f0 100644 (file)
@@ -68,16 +68,16 @@ try {
 /**
  * @name: S15.9.5.17_A3_T2;
  * @section: 15.9.5.17;
- * @assertion: The Date.prototype.getUTCDay property "length" has { ReadOnly, DontDelete, DontEnum } attributes;
- * @description: Checking DontDelete attribute;
+ * @assertion: The Date.prototype.getUTCDay property "length" has { [[Writable]]:false, [[Enumerable]]:false, [[Configurable]]:true } attributes;
+ * @description: Checking [[Configurable]] attribute;
  */
 
-if (delete Date.prototype.getUTCDay.length  !== false) {
-  testFailed('#1: The Date.prototype.getUTCDay.length property has the attributes DontDelete');
+if (delete Date.prototype.getUTCDay.length  !== true) {
+  testFailed('#1: The Date.prototype.getUTCDay.length property has the attribute [[Configurable]]:true');
 }
 
-if (!Date.prototype.getUTCDay.hasOwnProperty('length')) {
-  testFailed('#2: The Date.prototype.getUTCDay.length property has the attributes DontDelete');
+if (Date.prototype.getUTCDay.hasOwnProperty('length')) {
+  testFailed('#2: The Date.prototype.getUTCDay.length property has the attribute [[Configurable]]:true');
 }
 
 
index 1be24ea..ee28d73 100644 (file)
@@ -68,16 +68,16 @@ try {
 /**
  * @name: S15.9.5.18_A3_T2;
  * @section: 15.9.5.18;
- * @assertion: The Date.prototype.getHours property "length" has { ReadOnly, DontDelete, DontEnum } attributes;
- * @description: Checking DontDelete attribute;
+ * @assertion: The Date.prototype.getHours property "length" has { [[Writable]]:false, [[Enumerable]]:false, [[Configurable]]:true } attributes;
+ * @description: Checking [[Configurable]] attribute;
  */
 
-if (delete Date.prototype.getHours.length  !== false) {
-  testFailed('#1: The Date.prototype.getHours.length property has the attributes DontDelete');
+if (delete Date.prototype.getHours.length  !== true) {
+  testFailed('#1: The Date.prototype.getHours.length property has the attribute [[Configurable]]:true');
 }
 
-if (!Date.prototype.getHours.hasOwnProperty('length')) {
-  testFailed('#2: The Date.prototype.getHours.length property has the attributes DontDelete');
+if (Date.prototype.getHours.hasOwnProperty('length')) {
+  testFailed('#2: The Date.prototype.getHours.length property has the attribute [[Configurable]]:true');
 }
 
 
index 2945a57..29a4a7a 100644 (file)
@@ -68,16 +68,16 @@ try {
 /**
  * @name: S15.9.5.19_A3_T2;
  * @section: 15.9.5.19;
- * @assertion: The Date.prototype.getUTCHours property "length" has { ReadOnly, DontDelete, DontEnum } attributes;
- * @description: Checking DontDelete attribute;
+ * @assertion: The Date.prototype.getUTCHours property "length" has { [[Writable]]:false, [[Enumerable]]:false, [[Configurable]]:true } attributes;
+ * @description: Checking [[Configurable]] attribute;
  */
 
-if (delete Date.prototype.getUTCHours.length  !== false) {
-  testFailed('#1: The Date.prototype.getUTCHours.length property has the attributes DontDelete');
+if (delete Date.prototype.getUTCHours.length  !== true) {
+  testFailed('#1: The Date.prototype.getUTCHours.length property has the attribute [[Configurable]]:true');
 }
 
-if (!Date.prototype.getUTCHours.hasOwnProperty('length')) {
-  testFailed('#2: The Date.prototype.getUTCHours.length property has the attributes DontDelete');
+if (Date.prototype.getUTCHours.hasOwnProperty('length')) {
+  testFailed('#2: The Date.prototype.getUTCHours.length property has the attribute [[Configurable]]:true');
 }
 
 
index e5eb926..51c2b3c 100644 (file)
@@ -68,16 +68,16 @@ try {
 /**
  * @name: S15.9.5.20_A3_T2;
  * @section: 15.9.5.20;
- * @assertion: The Date.prototype.getMinutes property "length" has { ReadOnly, DontDelete, DontEnum } attributes;
- * @description: Checking DontDelete attribute;
+ * @assertion: The Date.prototype.getMinutes property "length" has { [[Writable]]:false, [[Enumerable]]:false, [[Configurable]]:true } attributes;
+ * @description: Checking [[Configurable]] attribute;
  */
 
-if (delete Date.prototype.getMinutes.length  !== false) {
-  testFailed('#1: The Date.prototype.getMinutes.length property has the attributes DontDelete');
+if (delete Date.prototype.getMinutes.length  !== true) {
+  testFailed('#1: The Date.prototype.getMinutes.length property has the attribute [[Configurable]]:true');
 }
 
-if (!Date.prototype.getMinutes.hasOwnProperty('length')) {
-  testFailed('#2: The Date.prototype.getMinutes.length property has the attributes DontDelete');
+if (Date.prototype.getMinutes.hasOwnProperty('length')) {
+  testFailed('#2: The Date.prototype.getMinutes.length property has the attribute [[Configurable]]:true');
 }
 
 
index 35c9267..a543237 100644 (file)
@@ -68,16 +68,16 @@ try {
 /**
  * @name: S15.9.5.21_A3_T2;
  * @section: 15.9.5.21;
- * @assertion: The Date.prototype.getUTCMinutes property "length" has { ReadOnly, DontDelete, DontEnum } attributes;
- * @description: Checking DontDelete attribute;
+ * @assertion: The Date.prototype.getUTCMinutes property "length" has { [[Writable]]:false, [[Enumerable]]:false, [[Configurable]]:true } attributes;
+ * @description: Checking [[Configurable]] attribute;
  */
 
-if (delete Date.prototype.getUTCMinutes.length  !== false) {
-  testFailed('#1: The Date.prototype.getUTCMinutes.length property has the attributes DontDelete');
+if (delete Date.prototype.getUTCMinutes.length  !== true) {
+  testFailed('#1: The Date.prototype.getUTCMinutes.length property has the attribute [[Configurable]]:true');
 }
 
-if (!Date.prototype.getUTCMinutes.hasOwnProperty('length')) {
-  testFailed('#2: The Date.prototype.getUTCMinutes.length property has the attributes DontDelete');
+if (Date.prototype.getUTCMinutes.hasOwnProperty('length')) {
+  testFailed('#2: The Date.prototype.getUTCMinutes.length property has the attribute [[Configurable]]:true');
 }
 
 
index 16994d6..3b84203 100644 (file)
@@ -68,16 +68,16 @@ try {
 /**
  * @name: S15.9.5.22_A3_T2;
  * @section: 15.9.5.22;
- * @assertion: The Date.prototype.getSeconds property "length" has { ReadOnly, DontDelete, DontEnum } attributes;
- * @description: Checking DontDelete attribute;
+ * @assertion: The Date.prototype.getSeconds property "length" has { [[Writable]]:false, [[Enumerable]]:false, [[Configurable]]:true } attributes;
+ * @description: Checking [[Configurable]] attribute;
  */
 
-if (delete Date.prototype.getSeconds.length  !== false) {
-  testFailed('#1: The Date.prototype.getSeconds.length property has the attributes DontDelete');
+if (delete Date.prototype.getSeconds.length  !== true) {
+  testFailed('#1: The Date.prototype.getSeconds.length property has the attribute [[Configurable]]:true');
 }
 
-if (!Date.prototype.getSeconds.hasOwnProperty('length')) {
-  testFailed('#2: The Date.prototype.getSeconds.length property has the attributes DontDelete');
+if (Date.prototype.getSeconds.hasOwnProperty('length')) {
+  testFailed('#2: The Date.prototype.getSeconds.length property has the attribute [[Configurable]]:true');
 }
 
 
index 93c3b2f..6aaaabe 100644 (file)
@@ -68,16 +68,16 @@ try {
 /**
  * @name: S15.9.5.23_A3_T2;
  * @section: 15.9.5.23;
- * @assertion: The Date.prototype.getUTCSeconds property "length" has { ReadOnly, DontDelete, DontEnum } attributes;
- * @description: Checking DontDelete attribute;
+ * @assertion: The Date.prototype.getUTCSeconds property "length" has { [[Writable]]:false, [[Enumerable]]:false, [[Configurable]]:true } attributes;
+ * @description: Checking [[Configurable]] attribute;
  */
 
-if (delete Date.prototype.getUTCSeconds.length  !== false) {
-  testFailed('#1: The Date.prototype.getUTCSeconds.length property has the attributes DontDelete');
+if (delete Date.prototype.getUTCSeconds.length  !== true) {
+  testFailed('#1: The Date.prototype.getUTCSeconds.length property has the attribute [[Configurable]]:true');
 }
 
-if (!Date.prototype.getUTCSeconds.hasOwnProperty('length')) {
-  testFailed('#2: The Date.prototype.getUTCSeconds.length property has the attributes DontDelete');
+if (Date.prototype.getUTCSeconds.hasOwnProperty('length')) {
+  testFailed('#2: The Date.prototype.getUTCSeconds.length property has the attribute [[Configurable]]:true');
 }
 
 
index 6ea1dc8..915089b 100644 (file)
@@ -68,16 +68,16 @@ try {
 /**
  * @name: S15.9.5.24_A3_T2;
  * @section: 15.9.5.24;
- * @assertion: The Date.prototype.getMilliseconds property "length" has { ReadOnly, DontDelete, DontEnum } attributes;
- * @description: Checking DontDelete attribute;
+ * @assertion: The Date.prototype.getMilliseconds property "length" has { [[Writable]]:false, [[Enumerable]]:false, [[Configurable]]:true } attributes;
+ * @description: Checking [[Configurable]] attribute;
  */
 
-if (delete Date.prototype.getMilliseconds.length  !== false) {
-  testFailed('#1: The Date.prototype.getMilliseconds.length property has the attributes DontDelete');
+if (delete Date.prototype.getMilliseconds.length  !== true) {
+  testFailed('#1: The Date.prototype.getMilliseconds.length property has the attribute [[Configurable]]:true');
 }
 
-if (!Date.prototype.getMilliseconds.hasOwnProperty('length')) {
-  testFailed('#2: The Date.prototype.getMilliseconds.length property has the attributes DontDelete');
+if (Date.prototype.getMilliseconds.hasOwnProperty('length')) {
+  testFailed('#2: The Date.prototype.getMilliseconds.length property has the attribute [[Configurable]]:true');
 }
 
 
index 1dc8e03..b95bfdc 100644 (file)
@@ -68,16 +68,16 @@ try {
 /**
  * @name: S15.9.5.25_A3_T2;
  * @section: 15.9.5.25;
- * @assertion: The Date.prototype.getUTCMilliseconds property "length" has { ReadOnly, DontDelete, DontEnum } attributes;
- * @description: Checking DontDelete attribute;
+ * @assertion: The Date.prototype.getUTCMilliseconds property "length" has { [[Writable]]:false, [[Enumerable]]:false, [[Configurable]]:true } attributes;
+ * @description: Checking [[Configurable]] attribute;
  */
 
-if (delete Date.prototype.getUTCMilliseconds.length  !== false) {
-  testFailed('#1: The Date.prototype.getUTCMilliseconds.length property has the attributes DontDelete');
+if (delete Date.prototype.getUTCMilliseconds.length  !== true) {
+  testFailed('#1: The Date.prototype.getUTCMilliseconds.length property has the attribute [[Configurable]]:true');
 }
 
-if (!Date.prototype.getUTCMilliseconds.hasOwnProperty('length')) {
-  testFailed('#2: The Date.prototype.getUTCMilliseconds.length property has the attributes DontDelete');
+if (Date.prototype.getUTCMilliseconds.hasOwnProperty('length')) {
+  testFailed('#2: The Date.prototype.getUTCMilliseconds.length property has the attribute [[Configurable]]:true');
 }
 
 
index 2f50c6e..749400e 100644 (file)
@@ -68,16 +68,16 @@ try {
 /**
  * @name: S15.9.5.26_A3_T2;
  * @section: 15.9.5.26;
- * @assertion: The Date.prototype.getTimezoneOffset property "length" has { ReadOnly, DontDelete, DontEnum } attributes;
- * @description: Checking DontDelete attribute;
+ * @assertion: The Date.prototype.getTimezoneOffset property "length" has { [[Writable]]:false, [[Enumerable]]:false, [[Configurable]]:true } attributes;
+ * @description: Checking [[Configurable]] attribute;
  */
 
-if (delete Date.prototype.getTimezoneOffset.length  !== false) {
-  testFailed('#1: The Date.prototype.getTimezoneOffset.length property has the attributes DontDelete');
+if (delete Date.prototype.getTimezoneOffset.length  !== true) {
+  testFailed('#1: The Date.prototype.getTimezoneOffset.length property has the attribute [[Configurable]]:true');
 }
 
-if (!Date.prototype.getTimezoneOffset.hasOwnProperty('length')) {
-  testFailed('#2: The Date.prototype.getTimezoneOffset.length property has the attributes DontDelete');
+if (Date.prototype.getTimezoneOffset.hasOwnProperty('length')) {
+  testFailed('#2: The Date.prototype.getTimezoneOffset.length property has the attribute [[Configurable]]:true');
 }
 
 
index 36cd9db..d5c934f 100644 (file)
@@ -68,16 +68,16 @@ try {
 /**
  * @name: S15.9.5.27_A3_T2;
  * @section: 15.9.5.27;
- * @assertion: The Date.prototype.setTime property "length" has { ReadOnly, DontDelete, DontEnum } attributes;
- * @description: Checking DontDelete attribute;
+ * @assertion: The Date.prototype.setTime property "length" has { [[Writable]]:false, [[Enumerable]]:false, [[Configurable]]:true } attributes;
+ * @description: Checking [[Configurable]] attribute;
  */
 
-if (delete Date.prototype.setTime.length  !== false) {
-  testFailed('#1: The Date.prototype.setTime.length property has the attributes DontDelete');
+if (delete Date.prototype.setTime.length  !== true) {
+  testFailed('#1: The Date.prototype.setTime.length property has the attribute [[Configurable]]:true');
 }
 
-if (!Date.prototype.setTime.hasOwnProperty('length')) {
-  testFailed('#2: The Date.prototype.setTime.length property has the attributes DontDelete');
+if (Date.prototype.setTime.hasOwnProperty('length')) {
+  testFailed('#2: The Date.prototype.setTime.length property has the attribute [[Configurable]]:true');
 }
 
 
index b9b31c3..98ddf1f 100644 (file)
@@ -68,16 +68,16 @@ try {
 /**
  * @name: S15.9.5.28_A3_T2;
  * @section: 15.9.5.28;
- * @assertion: The Date.prototype.setMilliseconds property "length" has { ReadOnly, DontDelete, DontEnum } attributes;
- * @description: Checking DontDelete attribute;
+ * @assertion: The Date.prototype.setMilliseconds property "length" has { [[Writable]]:false, [[Enumerable]]:false, [[Configurable]]:true } attributes;
+ * @description: Checking [[Configurable]] attribute;
  */
 
-if (delete Date.prototype.setMilliseconds.length  !== false) {
-  testFailed('#1: The Date.prototype.setMilliseconds.length property has the attributes DontDelete');
+if (delete Date.prototype.setMilliseconds.length  !== true) {
+  testFailed('#1: The Date.prototype.setMilliseconds.length property has the attribute [[Configurable]]:true');
 }
 
-if (!Date.prototype.setMilliseconds.hasOwnProperty('length')) {
-  testFailed('#2: The Date.prototype.setMilliseconds.length property has the attributes DontDelete');
+if (Date.prototype.setMilliseconds.hasOwnProperty('length')) {
+  testFailed('#2: The Date.prototype.setMilliseconds.length property has the attribute [[Configurable]]:true');
 }
 
 
index 0a54fd3..e886d1b 100644 (file)
@@ -68,16 +68,16 @@ try {
 /**
  * @name: S15.9.5.29_A3_T2;
  * @section: 15.9.5.29;
- * @assertion: The Date.prototype.setUTCMilliseconds property "length" has { ReadOnly, DontDelete, DontEnum } attributes;
- * @description: Checking DontDelete attribute;
+ * @assertion: The Date.prototype.setUTCMilliseconds property "length" has { [[Writable]]:false, [[Enumerable]]:false, [[Configurable]]:true } attributes;
+ * @description: Checking [[Configurable]] attribute;
  */
 
-if (delete Date.prototype.setUTCMilliseconds.length  !== false) {
-  testFailed('#1: The Date.prototype.setUTCMilliseconds.length property has the attributes DontDelete');
+if (delete Date.prototype.setUTCMilliseconds.length  !== true) {
+  testFailed('#1: The Date.prototype.setUTCMilliseconds.length property has the attribute [[Configurable]]:true');
 }
 
-if (!Date.prototype.setUTCMilliseconds.hasOwnProperty('length')) {
-  testFailed('#2: The Date.prototype.setUTCMilliseconds.length property has the attributes DontDelete');
+if (Date.prototype.setUTCMilliseconds.hasOwnProperty('length')) {
+  testFailed('#2: The Date.prototype.setUTCMilliseconds.length property has the attribute [[Configurable]]:true');
 }
 
 
index 6d81ca5..29df420 100644 (file)
@@ -68,16 +68,16 @@ try {
 /**
  * @name: S15.9.5.2_A3_T2;
  * @section: 15.9.5.2;
- * @assertion: The Date.prototype.toString property "length" has { ReadOnly, DontDelete, DontEnum } attributes;
- * @description: Checking DontDelete attribute;
+ * @assertion: The Date.prototype.toString property "length" has { [[Writable]]:false, [[Enumerable]]:false, [[Configurable]]:true } attributes;
+ * @description: Checking [[Configurable]] attribute;
  */
 
-if (delete Date.prototype.toString.length  !== false) {
-  testFailed('#1: The Date.prototype.toString.length property has the attributes DontDelete');
+if (delete Date.prototype.toString.length  !== true) {
+  testFailed('#1: The Date.prototype.toString.length property has the attribute [[Configurable]]:true');
 }
 
-if (!Date.prototype.toString.hasOwnProperty('length')) {
-  testFailed('#2: The Date.prototype.toString.length property has the attributes DontDelete');
+if (Date.prototype.toString.hasOwnProperty('length')) {
+  testFailed('#2: The Date.prototype.toString.length property has the attribute [[Configurable]]:true');
 }
 
 
index b767c8a..e10b0e1 100644 (file)
@@ -68,16 +68,16 @@ try {
 /**
  * @name: S15.9.5.30_A3_T2;
  * @section: 15.9.5.30;
- * @assertion: The Date.prototype.setSeconds property "length" has { ReadOnly, DontDelete, DontEnum } attributes;
- * @description: Checking DontDelete attribute;
+ * @assertion: The Date.prototype.setSeconds property "length" has { [[Writable]]:false, [[Enumerable]]:false, [[Configurable]]:true } attributes;
+ * @description: Checking [[Configurable]] attribute;
  */
 
-if (delete Date.prototype.setSeconds.length  !== false) {
-  testFailed('#1: The Date.prototype.setSeconds.length property has the attributes DontDelete');
+if (delete Date.prototype.setSeconds.length  !== true) {
+  testFailed('#1: The Date.prototype.setSeconds.length property has the attribute [[Configurable]]:true');
 }
 
-if (!Date.prototype.setSeconds.hasOwnProperty('length')) {
-  testFailed('#2: The Date.prototype.setSeconds.length property has the attributes DontDelete');
+if (Date.prototype.setSeconds.hasOwnProperty('length')) {
+  testFailed('#2: The Date.prototype.setSeconds.length property has the attribute [[Configurable]]:true');
 }
 
 
index 4f17011..22bf8bd 100644 (file)
@@ -68,16 +68,16 @@ try {
 /**
  * @name: S15.9.5.31_A3_T2;
  * @section: 15.9.5.31;
- * @assertion: The Date.prototype.setUTCSeconds property "length" has { ReadOnly, DontDelete, DontEnum } attributes;
- * @description: Checking DontDelete attribute;
+ * @assertion: The Date.prototype.setUTCSeconds property "length" has { [[Writable]]:false, [[Enumerable]]:false, [[Configurable]]:true } attributes;
+ * @description: Checking [[Configurable]] attribute;
  */
 
-if (delete Date.prototype.setUTCSeconds.length  !== false) {
-  testFailed('#1: The Date.prototype.setUTCSeconds.length property has the attributes DontDelete');
+if (delete Date.prototype.setUTCSeconds.length  !== true) {
+  testFailed('#1: The Date.prototype.setUTCSeconds.length property has the attribute [[Configurable]]:true');
 }
 
-if (!Date.prototype.setUTCSeconds.hasOwnProperty('length')) {
-  testFailed('#2: The Date.prototype.setUTCSeconds.length property has the attributes DontDelete');
+if (Date.prototype.setUTCSeconds.hasOwnProperty('length')) {
+  testFailed('#2: The Date.prototype.setUTCSeconds.length property has the attribute [[Configurable]]:true');
 }
 
 
index 8892202..1d1f6f3 100644 (file)
@@ -68,16 +68,16 @@ try {
 /**
  * @name: S15.9.5.32_A3_T2;
  * @section: 15.9.5.32;
- * @assertion: The Date.prototype.setMinutes property "length" has { ReadOnly, DontDelete, DontEnum } attributes;
- * @description: Checking DontDelete attribute;
+ * @assertion: The Date.prototype.setMinutes property "length" has { [[Writable]]:false, [[Enumerable]]:false, [[Configurable]]:true } attributes;
+ * @description: Checking [[Configurable]] attribute;
  */
 
-if (delete Date.prototype.setMinutes.length  !== false) {
-  testFailed('#1: The Date.prototype.setMinutes.length property has the attributes DontDelete');
+if (delete Date.prototype.setMinutes.length  !== true) {
+  testFailed('#1: The Date.prototype.setMinutes.length property has the attribute [[Configurable]]:true');
 }
 
-if (!Date.prototype.setMinutes.hasOwnProperty('length')) {
-  testFailed('#2: The Date.prototype.setMinutes.length property has the attributes DontDelete');
+if (Date.prototype.setMinutes.hasOwnProperty('length')) {
+  testFailed('#2: The Date.prototype.setMinutes.length property has the attribute [[Configurable]]:true');
 }
 
 
index ed062ad..fa950fb 100644 (file)
@@ -68,16 +68,16 @@ try {
 /**
  * @name: S15.9.5.33_A3_T2;
  * @section: 15.9.5.33;
- * @assertion: The Date.prototype.setUTCMinutes property "length" has { ReadOnly, DontDelete, DontEnum } attributes;
- * @description: Checking DontDelete attribute;
+ * @assertion: The Date.prototype.setUTCMinutes property "length" has { [[Writable]]:false, [[Enumerable]]:false, [[Configurable]]:true } attributes;
+ * @description: Checking [[Configurable]] attribute;
  */
 
-if (delete Date.prototype.setUTCMinutes.length  !== false) {
-  testFailed('#1: The Date.prototype.setUTCMinutes.length property has the attributes DontDelete');
+if (delete Date.prototype.setUTCMinutes.length  !== true) {
+  testFailed('#1: The Date.prototype.setUTCMinutes.length property has the attribute [[Configurable]]:true');
 }
 
-if (!Date.prototype.setUTCMinutes.hasOwnProperty('length')) {
-  testFailed('#2: The Date.prototype.setUTCMinutes.length property has the attributes DontDelete');
+if (Date.prototype.setUTCMinutes.hasOwnProperty('length')) {
+  testFailed('#2: The Date.prototype.setUTCMinutes.length property has the attribute [[Configurable]]:true');
 }
 
 
index fc8e64a..bc4d8cc 100644 (file)
@@ -68,16 +68,16 @@ try {
 /**
  * @name: S15.9.5.34_A3_T2;
  * @section: 15.9.5.34;
- * @assertion: The Date.prototype.setHours property "length" has { ReadOnly, DontDelete, DontEnum } attributes;
- * @description: Checking DontDelete attribute;
+ * @assertion: The Date.prototype.setHours property "length" has { [[Writable]]:false, [[Enumerable]]:false, [[Configurable]]:true } attributes;
+ * @description: Checking [[Configurable]] attribute;
  */
 
-if (delete Date.prototype.setHours.length  !== false) {
-  testFailed('#1: The Date.prototype.setHours.length property has the attributes DontDelete');
+if (delete Date.prototype.setHours.length  !== true) {
+  testFailed('#1: The Date.prototype.setHours.length property has the attribute [[Configurable]]:true');
 }
 
-if (!Date.prototype.setHours.hasOwnProperty('length')) {
-  testFailed('#2: The Date.prototype.setHours.length property has the attributes DontDelete');
+if (Date.prototype.setHours.hasOwnProperty('length')) {
+  testFailed('#2: The Date.prototype.setHours.length property has the attribute [[Configurable]]:true');
 }
 
 
index 7ede301..79bd8ff 100644 (file)
@@ -68,16 +68,16 @@ try {
 /**
  * @name: S15.9.5.35_A3_T2;
  * @section: 15.9.5.35;
- * @assertion: The Date.prototype.setUTCHours property "length" has { ReadOnly, DontDelete, DontEnum } attributes;
- * @description: Checking DontDelete attribute;
+ * @assertion: The Date.prototype.setUTCHours property "length" has { [[Writable]]:false, [[Enumerable]]:false, [[Configurable]]:true } attributes;
+ * @description: Checking [[Configurable]] attribute;
  */
 
-if (delete Date.prototype.setUTCHours.length  !== false) {
-  testFailed('#1: The Date.prototype.setUTCHours.length property has the attributes DontDelete');
+if (delete Date.prototype.setUTCHours.length  !== true) {
+  testFailed('#1: The Date.prototype.setUTCHours.length property has the attribute [[Configurable]]:true');
 }
 
-if (!Date.prototype.setUTCHours.hasOwnProperty('length')) {
-  testFailed('#2: The Date.prototype.setUTCHours.length property has the attributes DontDelete');
+if (Date.prototype.setUTCHours.hasOwnProperty('length')) {
+  testFailed('#2: The Date.prototype.setUTCHours.length property has the attribute [[Configurable]]:true');
 }
 
 
index e54bf3e..074b389 100644 (file)
@@ -68,16 +68,16 @@ try {
 /**
  * @name: S15.9.5.36_A3_T2;
  * @section: 15.9.5.36;
- * @assertion: The Date.prototype.setDate property "length" has { ReadOnly, DontDelete, DontEnum } attributes;
- * @description: Checking DontDelete attribute;
+ * @assertion: The Date.prototype.setDate property "length" has { [[Writable]]:false, [[Enumerable]]:false, [[Configurable]]:true } attributes;
+ * @description: Checking [[Configurable]] attribute;
  */
 
-if (delete Date.prototype.setDate.length  !== false) {
-  testFailed('#1: The Date.prototype.setDate.length property has the attributes DontDelete');
+if (delete Date.prototype.setDate.length  !== true) {
+  testFailed('#1: The Date.prototype.setDate.length property has the attribute [[Configurable]]:true');
 }
 
-if (!Date.prototype.setDate.hasOwnProperty('length')) {
-  testFailed('#2: The Date.prototype.setDate.length property has the attributes DontDelete');
+if (Date.prototype.setDate.hasOwnProperty('length')) {
+  testFailed('#2: The Date.prototype.setDate.length property has the attribute [[Configurable]]:true');
 }
 
 
index 37654fd..d8bfbeb 100644 (file)
@@ -68,16 +68,16 @@ try {
 /**
  * @name: S15.9.5.37_A3_T2;
  * @section: 15.9.5.37;
- * @assertion: The Date.prototype.setUTCDate property "length" has { ReadOnly, DontDelete, DontEnum } attributes;
- * @description: Checking DontDelete attribute;
+ * @assertion: The Date.prototype.setUTCDate property "length" has { [[Writable]]:false, [[Enumerable]]:false, [[Configurable]]:true } attributes;
+ * @description: Checking [[Configurable]] attribute;
  */
 
-if (delete Date.prototype.setUTCDate.length  !== false) {
-  testFailed('#1: The Date.prototype.setUTCDate.length property has the attributes DontDelete');
+if (delete Date.prototype.setUTCDate.length  !== true) {
+  testFailed('#1: The Date.prototype.setUTCDate.length property has the attribute [[Configurable]]:true');
 }
 
-if (!Date.prototype.setUTCDate.hasOwnProperty('length')) {
-  testFailed('#2: The Date.prototype.setUTCDate.length property has the attributes DontDelete');
+if (Date.prototype.setUTCDate.hasOwnProperty('length')) {
+  testFailed('#2: The Date.prototype.setUTCDate.length property has the attribute [[Configurable]]:true');
 }
 
 
index 01fbe39..188ec04 100644 (file)
@@ -68,16 +68,16 @@ try {
 /**
  * @name: S15.9.5.38_A3_T2;
  * @section: 15.9.5.38;
- * @assertion: The Date.prototype.setMonth property "length" has { ReadOnly, DontDelete, DontEnum } attributes;
- * @description: Checking DontDelete attribute;
+ * @assertion: The Date.prototype.setMonth property "length" has { [[Writable]]:false, [[Enumerable]]:false, [[Configurable]]:true } attributes;
+ * @description: Checking [[Configurable]] attribute;
  */
 
-if (delete Date.prototype.setMonth.length  !== false) {
-  testFailed('#1: The Date.prototype.setMonth.length property has the attributes DontDelete');
+if (delete Date.prototype.setMonth.length  !== true) {
+  testFailed('#1: The Date.prototype.setMonth.length property has the attribute [[Configurable]]:true');
 }
 
-if (!Date.prototype.setMonth.hasOwnProperty('length')) {
-  testFailed('#2: The Date.prototype.setMonth.length property has the attributes DontDelete');
+if (Date.prototype.setMonth.hasOwnProperty('length')) {
+  testFailed('#2: The Date.prototype.setMonth.length property has the attribute [[Configurable]]:true');
 }
 
 
index d6d4c84..ecb9dac 100644 (file)
@@ -68,16 +68,16 @@ try {
 /**
  * @name: S15.9.5.39_A3_T2;
  * @section: 15.9.5.39;
- * @assertion: The Date.prototype.setUTCMonth property "length" has { ReadOnly, DontDelete, DontEnum } attributes;
- * @description: Checking DontDelete attribute;
+ * @assertion: The Date.prototype.setUTCMonth property "length" has { [[Writable]]:false, [[Enumerable]]:false, [[Configurable]]:true } attributes;
+ * @description: Checking [[Configurable]] attribute;
  */
 
-if (delete Date.prototype.setUTCMonth.length  !== false) {
-  testFailed('#1: The Date.prototype.setUTCMonth.length property has the attributes DontDelete');
+if (delete Date.prototype.setUTCMonth.length  !== true) {
+  testFailed('#1: The Date.prototype.setUTCMonth.length property has the attribute [[Configurable]]:true');
 }
 
-if (!Date.prototype.setUTCMonth.hasOwnProperty('length')) {
-  testFailed('#2: The Date.prototype.setUTCMonth.length property has the attributes DontDelete');
+if (Date.prototype.setUTCMonth.hasOwnProperty('length')) {
+  testFailed('#2: The Date.prototype.setUTCMonth.length property has the attribute [[Configurable]]:true');
 }
 
 
index b15bb8c..300d971 100644 (file)
@@ -68,16 +68,16 @@ try {
 /**
  * @name: S15.9.5.3_A3_T2;
  * @section: 15.9.5.3;
- * @assertion: The Date.prototype.toDateString property "length" has { ReadOnly, DontDelete, DontEnum } attributes;
- * @description: Checking DontDelete attribute;
+ * @assertion: The Date.prototype.toDateString property "length" has { [[Writable]]:false, [[Enumerable]]:false, [[Configurable]]:true } attributes;
+ * @description: Checking [[Configurable]] attribute;
  */
 
-if (delete Date.prototype.toDateString.length  !== false) {
-  testFailed('#1: The Date.prototype.toDateString.length property has the attributes DontDelete');
+if (delete Date.prototype.toDateString.length  !== true) {
+  testFailed('#1: The Date.prototype.toDateString.length property has the attribute [[Configurable]]:true');
 }
 
-if (!Date.prototype.toDateString.hasOwnProperty('length')) {
-  testFailed('#2: The Date.prototype.toDateString.length property has the attributes DontDelete');
+if (Date.prototype.toDateString.hasOwnProperty('length')) {
+  testFailed('#2: The Date.prototype.toDateString.length property has the attribute [[Configurable]]:true');
 }
 
 
index bb336b2..10facfc 100644 (file)
@@ -68,16 +68,16 @@ try {
 /**
  * @name: S15.9.5.40_A3_T2;
  * @section: 15.9.5.40;
- * @assertion: The Date.prototype.setFullYear property "length" has { ReadOnly, DontDelete, DontEnum } attributes;
- * @description: Checking DontDelete attribute;
+ * @assertion: The Date.prototype.setFullYear property "length" has { [[Writable]]:false, [[Enumerable]]:false, [[Configurable]]:true } attributes;
+ * @description: Checking [[Configurable]] attribute;
  */
 
-if (delete Date.prototype.setFullYear.length  !== false) {
-  testFailed('#1: The Date.prototype.setFullYear.length property has the attributes DontDelete');
+if (delete Date.prototype.setFullYear.length  !== true) {
+  testFailed('#1: The Date.prototype.setFullYear.length property has the attribute [[Configurable]]:true');
 }
 
-if (!Date.prototype.setFullYear.hasOwnProperty('length')) {
-  testFailed('#2: The Date.prototype.setFullYear.length property has the attributes DontDelete');
+if (Date.prototype.setFullYear.hasOwnProperty('length')) {
+  testFailed('#2: The Date.prototype.setFullYear.length property has the attribute [[Configurable]]:true');
 }
 
 
index fecae0d..fc3f310 100644 (file)
@@ -68,16 +68,16 @@ try {
 /**
  * @name: S15.9.5.41_A3_T2;
  * @section: 15.9.5.41;
- * @assertion: The Date.prototype.setUTCFullYear property "length" has { ReadOnly, DontDelete, DontEnum } attributes;
- * @description: Checking DontDelete attribute;
+ * @assertion: The Date.prototype.setUTCFullYear property "length" has { [[Writable]]:false, [[Enumerable]]:false, [[Configurable]]:true } attributes;
+ * @description: Checking [[Configurable]] attribute;
  */
 
-if (delete Date.prototype.setUTCFullYear.length  !== false) {
-  testFailed('#1: The Date.prototype.setUTCFullYear.length property has the attributes DontDelete');
+if (delete Date.prototype.setUTCFullYear.length  !== true) {
+  testFailed('#1: The Date.prototype.setUTCFullYear.length property has the attribute [[Configurable]]:true');
 }
 
-if (!Date.prototype.setUTCFullYear.hasOwnProperty('length')) {
-  testFailed('#2: The Date.prototype.setUTCFullYear.length property has the attributes DontDelete');
+if (Date.prototype.setUTCFullYear.hasOwnProperty('length')) {
+  testFailed('#2: The Date.prototype.setUTCFullYear.length property has the attribute [[Configurable]]:true');
 }
 
 
index 81d5125..9ac648f 100644 (file)
@@ -68,16 +68,16 @@ try {
 /**
  * @name: S15.9.5.42_A3_T2;
  * @section: 15.9.5.42;
- * @assertion: The Date.prototype.toUTCString property "length" has { ReadOnly, DontDelete, DontEnum } attributes;
- * @description: Checking DontDelete attribute;
+ * @assertion: The Date.prototype.toUTCString property "length" has { [[Writable]]:false, [[Enumerable]]:false, [[Configurable]]:true } attributes;
+ * @description: Checking [[Configurable]] attribute;
  */
 
-if (delete Date.prototype.toUTCString.length  !== false) {
-  testFailed('#1: The Date.prototype.toUTCString.length property has the attributes DontDelete');
+if (delete Date.prototype.toUTCString.length  !== true) {
+  testFailed('#1: The Date.prototype.toUTCString.length property has the attribute [[Configurable]]:true');
 }
 
-if (!Date.prototype.toUTCString.hasOwnProperty('length')) {
-  testFailed('#2: The Date.prototype.toUTCString.length property has the attributes DontDelete');
+if (Date.prototype.toUTCString.hasOwnProperty('length')) {
+  testFailed('#2: The Date.prototype.toUTCString.length property has the attribute [[Configurable]]:true');
 }
 
 
index 5531e54..eb3827f 100644 (file)
@@ -68,16 +68,16 @@ try {
 /**
  * @name: S15.9.5.4_A3_T2;
  * @section: 15.9.5.4;
- * @assertion: The Date.prototype.toTimeString property "length" has { ReadOnly, DontDelete, DontEnum } attributes;
- * @description: Checking DontDelete attribute;
+ * @assertion: The Date.prototype.toTimeString property "length" has { [[Writable]]:false, [[Enumerable]]:false, [[Configurable]]:true } attributes;
+ * @description: Checking [[Configurable]] attribute;
  */
 
-if (delete Date.prototype.toTimeString.length  !== false) {
-  testFailed('#1: The Date.prototype.toTimeString.length property has the attributes DontDelete');
+if (delete Date.prototype.toTimeString.length  !== true) {
+  testFailed('#1: The Date.prototype.toTimeString.length property has the attribute [[Configurable]]:true');
 }
 
-if (!Date.prototype.toTimeString.hasOwnProperty('length')) {
-  testFailed('#2: The Date.prototype.toTimeString.length property has the attributes DontDelete');
+if (Date.prototype.toTimeString.hasOwnProperty('length')) {
+  testFailed('#2: The Date.prototype.toTimeString.length property has the attribute [[Configurable]]:true');
 }
 
 
index f75cc9d..cb6c109 100644 (file)
@@ -68,16 +68,16 @@ try {
 /**
  * @name: S15.9.5.5_A3_T2;
  * @section: 15.9.5.5;
- * @assertion: The Date.prototype.toLocaleString property "length" has { ReadOnly, DontDelete, DontEnum } attributes;
- * @description: Checking DontDelete attribute;
+ * @assertion: The Date.prototype.toLocaleString property "length" has { [[Writable]]:false, [[Enumerable]]:false, [[Configurable]]:true } attributes;
+ * @description: Checking [[Configurable]] attribute;
  */
 
-if (delete Date.prototype.toLocaleString.length  !== false) {
-  testFailed('#1: The Date.prototype.toLocaleString.length property has the attributes DontDelete');
+if (delete Date.prototype.toLocaleString.length  !== true) {
+  testFailed('#1: The Date.prototype.toLocaleString.length property has the attribute [[Configurable]]:true');
 }
 
-if (!Date.prototype.toLocaleString.hasOwnProperty('length')) {
-  testFailed('#2: The Date.prototype.toLocaleString.length property has the attributes DontDelete');
+if (Date.prototype.toLocaleString.hasOwnProperty('length')) {
+  testFailed('#2: The Date.prototype.toLocaleString.length property has the attribute [[Configurable]]:true');
 }
 
 
index b99a516..4253bc7 100644 (file)
@@ -68,16 +68,16 @@ try {
 /**
  * @name: S15.9.5.6_A3_T2;
  * @section: 15.9.5.6;
- * @assertion: The Date.prototype.toLocaleDateString property "length" has { ReadOnly, DontDelete, DontEnum } attributes;
- * @description: Checking DontDelete attribute;
+ * @assertion: The Date.prototype.toLocaleDateString property "length" has { [[Writable]]:false, [[Enumerable]]:false, [[Configurable]]:true } attributes;
+ * @description: Checking [[Configurable]] attribute;
  */
 
-if (delete Date.prototype.toLocaleDateString.length  !== false) {
-  testFailed('#1: The Date.prototype.toLocaleDateString.length property has the attributes DontDelete');
+if (delete Date.prototype.toLocaleDateString.length  !== true) {
+  testFailed('#1: The Date.prototype.toLocaleDateString.length property has the attribute [[Configurable]]:true');
 }
 
-if (!Date.prototype.toLocaleDateString.hasOwnProperty('length')) {
-  testFailed('#2: The Date.prototype.toLocaleDateString.length property has the attributes DontDelete');
+if (Date.prototype.toLocaleDateString.hasOwnProperty('length')) {
+  testFailed('#2: The Date.prototype.toLocaleDateString.length property has the attribute [[Configurable]]:true');
 }
 
 
index 009d666..e2eef19 100644 (file)
@@ -68,16 +68,16 @@ try {
 /**
  * @name: S15.9.5.7_A3_T2;
  * @section: 15.9.5.7;
- * @assertion: The Date.prototype.toLocaleTimeString property "length" has { ReadOnly, DontDelete, DontEnum } attributes;
- * @description: Checking DontDelete attribute;
+ * @assertion: The Date.prototype.toLocaleTimeString property "length" has { [[Writable]]:false, [[Enumerable]]:false, [[Configurable]]:true } attributes;
+ * @description: Checking [[Configurable]] attribute;
  */
 
-if (delete Date.prototype.toLocaleTimeString.length  !== false) {
-  testFailed('#1: The Date.prototype.toLocaleTimeString.length property has the attributes DontDelete');
+if (delete Date.prototype.toLocaleTimeString.length  !== true) {
+  testFailed('#1: The Date.prototype.toLocaleTimeString.length property has the attribute [[Configurable]]:true');
 }
 
-if (!Date.prototype.toLocaleTimeString.hasOwnProperty('length')) {
-  testFailed('#2: The Date.prototype.toLocaleTimeString.length property has the attributes DontDelete');
+if (Date.prototype.toLocaleTimeString.hasOwnProperty('length')) {
+  testFailed('#2: The Date.prototype.toLocaleTimeString.length property has the attribute [[Configurable]]:true');
 }
 
 
index a46c26f..485d844 100644 (file)
@@ -68,16 +68,16 @@ try {
 /**
  * @name: S15.9.5.8_A3_T2;
  * @section: 15.9.5.8;
- * @assertion: The Date.prototype.valueOf property "length" has { ReadOnly, DontDelete, DontEnum } attributes;
- * @description: Checking DontDelete attribute;
+ * @assertion: The Date.prototype.valueOf property "length" has { [[Writable]]:false, [[Enumerable]]:false, [[Configurable]]:true } attributes;
+ * @description: Checking [[Configurable]] attribute;
  */
 
-if (delete Date.prototype.valueOf.length  !== false) {
-  testFailed('#1: The Date.prototype.valueOf.length property has the attributes DontDelete');
+if (delete Date.prototype.valueOf.length  !== true) {
+  testFailed('#1: The Date.prototype.valueOf.length property has the attribute [[Configurable]]:true');
 }
 
-if (!Date.prototype.valueOf.hasOwnProperty('length')) {
-  testFailed('#2: The Date.prototype.valueOf.length property has the attributes DontDelete');
+if (Date.prototype.valueOf.hasOwnProperty('length')) {
+  testFailed('#2: The Date.prototype.valueOf.length property has the attribute [[Configurable]]:true');
 }
 
 
index d427432..97d465e 100644 (file)
@@ -68,16 +68,16 @@ try {
 /**
  * @name: S15.9.5.9_A3_T2;
  * @section: 15.9.5.9;
- * @assertion: The Date.prototype.getTime property "length" has { ReadOnly, DontDelete, DontEnum } attributes;
- * @description: Checking DontDelete attribute;
+ * @assertion: The Date.prototype.getTime property "length" has { [[Writable]]:false, [[Enumerable]]:false, [[Configurable]]:true } attributes;
+ * @description: Checking [[Configurable]] attribute;
  */
 
-if (delete Date.prototype.getTime.length  !== false) {
-  testFailed('#1: The Date.prototype.getTime.length property has the attributes DontDelete');
+if (delete Date.prototype.getTime.length  !== true) {
+  testFailed('#1: The Date.prototype.getTime.length property has the attribute [[Configurable]]:true');
 }
 
-if (!Date.prototype.getTime.hasOwnProperty('length')) {
-  testFailed('#2: The Date.prototype.getTime.length property has the attributes DontDelete');
+if (Date.prototype.getTime.hasOwnProperty('length')) {
+  testFailed('#2: The Date.prototype.getTime.length property has the attribute [[Configurable]]:true');
 }
 
 
index a52dfa9..77ce4e9 100644 (file)
@@ -1,3 +1,88 @@
+2016-02-26  Mark Lam  <mark.lam@apple.com>
+
+        Function.name and Function.length should be configurable.
+        https://bugs.webkit.org/show_bug.cgi?id=154604
+
+        Reviewed by Saam Barati.
+
+        According to https://tc39.github.io/ecma262/#sec-ecmascript-language-functions-and-classes,
+        "Unless otherwise specified, the name property of a built-in Function object,
+        if it exists, has the attributes { [[Writable]]: false, [[Enumerable]]: false,
+        [[Configurable]]: true }."
+
+        Similarly, "the length property of a built-in Function object has the attributes
+        { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true }."
+
+        This patch makes Function.name and Function.length configurable.
+
+        We do this by lazily reifying the JSFunction name and length properties on first
+        access.  We track whether each of these properties have been reified using flags
+        in the FunctionRareData.  On first access, if not already reified, we will put
+        the property into the object with its default value and attributes and set the
+        reified flag.  Thereafter, we rely on the base JSObject to handle access to the
+        property.
+
+        Also, lots of test results have to be re-baselined because the old Function.length
+        has attribute DontDelete, which is in conflict with the ES6 requirement that it
+        is configurable.
+
+        * runtime/FunctionRareData.h:
+        (JSC::FunctionRareData::hasReifiedLength):
+        (JSC::FunctionRareData::setHasReifiedLength):
+        (JSC::FunctionRareData::hasReifiedName):
+        (JSC::FunctionRareData::setHasReifiedName):
+        - Flags for tracking whether each property has been reified.
+
+        * runtime/JSFunction.cpp:
+        (JSC::JSFunction::finishCreation):
+        (JSC::JSFunction::createBuiltinFunction):
+        - Host and builtin functions currently always reify their name and length
+          properties.  Currently, for builtins, the default names that are used may
+          differ from the executable name.  For now, we'll stay with keeping this
+          alternate approach to getting the name and length properties for host and
+          builtin functions.
+          However, we need their default attribute to be configurable as well.
+
+        (JSC::JSFunction::getOwnPropertySlot):
+        (JSC::JSFunction::getOwnNonIndexPropertyNames):
+        (JSC::JSFunction::put):
+        (JSC::JSFunction::deleteProperty):
+        (JSC::JSFunction::defineOwnProperty):
+        (JSC::JSFunction::reifyLength):
+        (JSC::JSFunction::reifyName):
+        (JSC::JSFunction::reifyLazyPropertyIfNeeded):
+        (JSC::JSFunction::lengthGetter): Deleted.
+        (JSC::JSFunction::nameGetter): Deleted.
+        * runtime/JSFunction.h:
+        * runtime/JSFunctionInlines.h:
+        (JSC::JSFunction::hasReifiedLength):
+        (JSC::JSFunction::hasReifiedName):
+
+        * tests/es6.yaml:
+        - 4 new passing tests.
+
+        * tests/mozilla/ecma/Array/15.4.4.3-1.js:
+        * tests/mozilla/ecma/Array/15.4.4.4-1.js:
+        * tests/mozilla/ecma/Array/15.4.4.4-2.js:
+        * tests/mozilla/ecma/GlobalObject/15.1.2.1-1.js:
+        * tests/mozilla/ecma/GlobalObject/15.1.2.2-1.js:
+        * tests/mozilla/ecma/GlobalObject/15.1.2.3-1.js:
+        * tests/mozilla/ecma/GlobalObject/15.1.2.4.js:
+        * tests/mozilla/ecma/GlobalObject/15.1.2.5-1.js:
+        * tests/mozilla/ecma/GlobalObject/15.1.2.6.js:
+        * tests/mozilla/ecma/GlobalObject/15.1.2.7.js:
+        * tests/mozilla/ecma/String/15.5.4.10-1.js:
+        * tests/mozilla/ecma/String/15.5.4.11-1.js:
+        * tests/mozilla/ecma/String/15.5.4.11-5.js:
+        * tests/mozilla/ecma/String/15.5.4.12-1.js:
+        * tests/mozilla/ecma/String/15.5.4.6-2.js:
+        * tests/mozilla/ecma/String/15.5.4.7-2.js:
+        * tests/mozilla/ecma/String/15.5.4.8-1.js:
+        * tests/mozilla/ecma/String/15.5.4.9-1.js:
+        - Rebase expected test results.
+
+        * tests/stress/function-configurable-properties.js: Added.
+
 2016-02-26  Keith Miller  <keith_miller@apple.com>
 
         Folding of OverridesHasInstance DFG nodes shoud happen in constant folding not fixup
index b3708c1..e383046 100644 (file)
@@ -93,6 +93,11 @@ public:
     Structure* getBoundFunctionStructure() { return m_boundFunctionStructure.get(); }
     void setBoundFunctionStructure(VM& vm, Structure* structure) { m_boundFunctionStructure.set(vm, this, structure); }
 
+    bool hasReifiedLength() const { return m_hasReifiedLength; }
+    void setHasReifiedLength() { m_hasReifiedLength = true; }
+    bool hasReifiedName() const { return m_hasReifiedName; }
+    void setHasReifiedName() { m_hasReifiedName = true; }
+
 protected:
     FunctionRareData(VM&);
     ~FunctionRareData();
@@ -118,6 +123,8 @@ private:
     InlineWatchpointSet m_objectAllocationProfileWatchpoint;
     InternalFunctionAllocationProfile m_internalFunctionAllocationProfile;
     WriteBarrier<Structure> m_boundFunctionStructure;
+    bool m_hasReifiedLength { false };
+    bool m_hasReifiedName { false };
 };
 
 } // namespace JSC
index 70ec4fa..26f01a4 100644 (file)
@@ -116,23 +116,23 @@ void JSFunction::finishCreation(VM& vm, NativeExecutable* executable, int length
     Base::finishCreation(vm);
     ASSERT(inherits(info()));
     m_executable.set(vm, this, executable);
-    putDirect(vm, vm.propertyNames->name, jsString(&vm, name), DontDelete | ReadOnly | DontEnum);
-    putDirect(vm, vm.propertyNames->length, jsNumber(length), DontDelete | ReadOnly | DontEnum);
+    putDirect(vm, vm.propertyNames->name, jsString(&vm, name), ReadOnly | DontEnum);
+    putDirect(vm, vm.propertyNames->length, jsNumber(length), ReadOnly | DontEnum);
 }
 
 JSFunction* JSFunction::createBuiltinFunction(VM& vm, FunctionExecutable* executable, JSGlobalObject* globalObject)
 {
     JSFunction* function = create(vm, executable, globalObject);
-    function->putDirect(vm, vm.propertyNames->name, jsString(&vm, executable->name().string()), DontDelete | ReadOnly | DontEnum);
-    function->putDirect(vm, vm.propertyNames->length, jsNumber(executable->parameterCount()), DontDelete | ReadOnly | DontEnum);
+    function->putDirect(vm, vm.propertyNames->name, jsString(&vm, executable->name().string()), ReadOnly | DontEnum);
+    function->putDirect(vm, vm.propertyNames->length, jsNumber(executable->parameterCount()), ReadOnly | DontEnum);
     return function;
 }
 
 JSFunction* JSFunction::createBuiltinFunction(VM& vm, FunctionExecutable* executable, JSGlobalObject* globalObject, const String& name)
 {
     JSFunction* function = create(vm, executable, globalObject);
-    function->putDirect(vm, vm.propertyNames->name, jsString(&vm, name), DontDelete | ReadOnly | DontEnum);
-    function->putDirect(vm, vm.propertyNames->length, jsNumber(executable->parameterCount()), DontDelete | ReadOnly | DontEnum);
+    function->putDirect(vm, vm.propertyNames->name, jsString(&vm, name), ReadOnly | DontEnum);
+    function->putDirect(vm, vm.propertyNames->length, jsNumber(executable->parameterCount()), ReadOnly | DontEnum);
     return function;
 }
 
@@ -343,20 +343,6 @@ EncodedJSValue JSFunction::callerGetter(ExecState* exec, EncodedJSValue thisValu
     return JSValue::encode(throwTypeError(exec, ASCIILiteral("Function.caller used to retrieve strict caller")));
 }
 
-EncodedJSValue JSFunction::lengthGetter(ExecState*, EncodedJSValue thisValue, PropertyName)
-{
-    JSFunction* thisObj = jsCast<JSFunction*>(JSValue::decode(thisValue));
-    ASSERT(!thisObj->isHostFunction());
-    return JSValue::encode(jsNumber(thisObj->jsExecutable()->parameterCount()));
-}
-
-EncodedJSValue JSFunction::nameGetter(ExecState*, EncodedJSValue thisValue, PropertyName)
-{
-    JSFunction* thisObj = jsCast<JSFunction*>(JSValue::decode(thisValue));
-    ASSERT(!thisObj->isHostFunction());
-    return JSValue::encode(thisObj->jsExecutable()->nameValue());
-}
-
 bool JSFunction::getOwnPropertySlot(JSObject* object, ExecState* exec, PropertyName propertyName, PropertySlot& slot)
 {
     JSFunction* thisObject = jsCast<JSFunction*>(object);
@@ -397,16 +383,6 @@ bool JSFunction::getOwnPropertySlot(JSObject* object, ExecState* exec, PropertyN
         return true;
     }
 
-    if (propertyName == exec->propertyNames().length) {
-        slot.setCacheableCustom(thisObject, ReadOnly | DontEnum | DontDelete, lengthGetter);
-        return true;
-    }
-
-    if (propertyName == exec->propertyNames().name) {
-        slot.setCacheableCustom(thisObject, ReadOnly | DontEnum | DontDelete, nameGetter);
-        return true;
-    }
-
     if (propertyName == exec->propertyNames().caller) {
         if (thisObject->jsExecutable()->isStrictMode()) {
             bool result = Base::getOwnPropertySlot(thisObject, exec, propertyName, slot);
@@ -421,6 +397,8 @@ bool JSFunction::getOwnPropertySlot(JSObject* object, ExecState* exec, PropertyN
         return true;
     }
 
+    thisObject->reifyLazyPropertyIfNeeded(exec, propertyName);
+
     return Base::getOwnPropertySlot(thisObject, exec, propertyName, slot);
 }
 
@@ -435,8 +413,10 @@ void JSFunction::getOwnNonIndexPropertyNames(JSObject* object, ExecState* exec,
 
         propertyNames.add(vm.propertyNames->arguments);
         propertyNames.add(vm.propertyNames->caller);
-        propertyNames.add(vm.propertyNames->length);
-        propertyNames.add(vm.propertyNames->name);
+        if (!thisObject->hasReifiedLength())
+            propertyNames.add(vm.propertyNames->length);
+        if (!thisObject->hasReifiedName())
+            propertyNames.add(vm.propertyNames->name);
     }
     Base::getOwnNonIndexPropertyNames(thisObject, exec, propertyNames, mode);
 }
@@ -467,11 +447,12 @@ void JSFunction::put(JSCell* cell, ExecState* exec, PropertyName propertyName, J
         Base::put(thisObject, exec, propertyName, value, slot);
         return;
     }
-    if (propertyName == exec->propertyNames().arguments || propertyName == exec->propertyNames().length || propertyName == exec->propertyNames().name || propertyName == exec->propertyNames().caller) {
+    if (propertyName == exec->propertyNames().arguments || propertyName == exec->propertyNames().caller) {
         if (slot.isStrictMode())
             throwTypeError(exec, StrictModeReadonlyPropertyWriteError);
         return;
     }
+    thisObject->reifyLazyPropertyIfNeeded(exec, propertyName);
     Base::put(thisObject, exec, propertyName, value, slot);
 }
 
@@ -482,11 +463,11 @@ bool JSFunction::deleteProperty(JSCell* cell, ExecState* exec, PropertyName prop
     if (!thisObject->isHostOrBuiltinFunction() && !exec->vm().isInDefineOwnProperty()) {
         FunctionExecutable* executable = thisObject->jsExecutable();
         if (propertyName == exec->propertyNames().arguments
-            || propertyName == exec->propertyNames().length
-            || propertyName == exec->propertyNames().name
             || (propertyName == exec->propertyNames().prototype && !executable->isArrowFunction())
             || propertyName == exec->propertyNames().caller)
-        return false;
+            return false;
+
+        thisObject->reifyLazyPropertyIfNeeded(exec, propertyName);
     }
     
     return Base::deleteProperty(thisObject, exec, propertyName);
@@ -525,12 +506,10 @@ bool JSFunction::defineOwnProperty(JSObject* object, ExecState* exec, PropertyNa
             return Base::defineOwnProperty(object, exec, propertyName, descriptor, throwException);
         }
         valueCheck = !descriptor.value() || sameValue(exec, descriptor.value(), retrieveCallerFunction(exec, thisObject));
-    } else if (propertyName == exec->propertyNames().length)
-        valueCheck = !descriptor.value() || sameValue(exec, descriptor.value(), jsNumber(thisObject->jsExecutable()->parameterCount()));
-    else if (propertyName == exec->propertyNames().name)
-        valueCheck = !descriptor.value() || sameValue(exec, descriptor.value(), thisObject->jsExecutable()->nameValue());
-    else
+    } else {
+        thisObject->reifyLazyPropertyIfNeeded(exec, propertyName);
         return Base::defineOwnProperty(object, exec, propertyName, descriptor, throwException);
+    }
      
     if (descriptor.configurablePresent() && descriptor.configurable()) {
         if (throwException)
@@ -588,4 +567,45 @@ String getCalculatedDisplayName(CallFrame* callFrame, JSObject* object)
     return emptyString();
 }
 
+void JSFunction::reifyLength(ExecState* exec)
+{
+    VM& vm = exec->vm();
+    FunctionRareData* rareData = this->rareData(vm);
+
+    ASSERT(!hasReifiedLength());
+    ASSERT(!isHostFunction());
+    JSValue initialValue = jsNumber(jsExecutable()->parameterCount());
+    unsigned initialAttributes = DontEnum | ReadOnly;
+    const Identifier& identifier = exec->propertyNames().length;
+    putDirect(vm, identifier, initialValue, initialAttributes);
+
+    rareData->setHasReifiedLength();
+}
+
+void JSFunction::reifyName(ExecState* exec)
+{
+    VM& vm = exec->vm();
+    FunctionRareData* rareData = this->rareData(vm);
+
+    ASSERT(!hasReifiedName());
+    ASSERT(!isHostFunction());
+    JSValue initialValue = jsExecutable()->nameValue();
+    unsigned initialAttributes = DontEnum | ReadOnly;
+    const Identifier& identifier = exec->propertyNames().name;
+    putDirect(vm, identifier, initialValue, initialAttributes);
+
+    rareData->setHasReifiedName();
+}
+
+void JSFunction::reifyLazyPropertyIfNeeded(ExecState* exec, PropertyName propertyName)
+{
+    if (propertyName == exec->propertyNames().length) {
+        if (!hasReifiedLength())
+            reifyLength(exec);
+    } else if (propertyName == exec->propertyNames().name) {
+        if (!hasReifiedName())
+            reifyName(exec);
+    }
+}
+
 } // namespace JSC
index 878bbab..be92101 100644 (file)
@@ -186,7 +186,13 @@ private:
         function->finishCreation(vm);
         return function;
     }
-    
+
+    bool hasReifiedLength() const;
+    bool hasReifiedName() const;
+    void reifyLength(ExecState*);
+    void reifyName(ExecState*);
+    void reifyLazyPropertyIfNeeded(ExecState*, PropertyName propertyName);
+
     friend class LLIntOffsetsExtractor;
 
     static EncodedJSValue argumentsGetter(ExecState*, EncodedJSValue, PropertyName);
index ef43d32..8a2db18 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2013, 2015 Apple Inc. All rights reserved.
+ * Copyright (C) 2013, 2015-2016 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -110,6 +110,16 @@ inline bool isHostFunction(JSValue value, NativeFunction nativeFunction)
     return function->nativeFunction() == nativeFunction;
 }
 
+inline bool JSFunction::hasReifiedLength() const
+{
+    return m_rareData ? m_rareData->hasReifiedLength() : false;
+}
+
+inline bool JSFunction::hasReifiedName() const
+{
+    return m_rareData ? m_rareData->hasReifiedName() : false;
+}
+
 } // namespace JSC
 
 #endif // JSFunctionInlines_h
index d1f9683..8175078 100644 (file)
 - path: es6/function_name_property_bound_functions.js
   cmd: runES6 :normal
 - path: es6/function_name_property_class_expressions.js
-  cmd: runES6 :fail
+  cmd: runES6 :normal
 - path: es6/function_name_property_class_statements.js
-  cmd: runES6 :fail
+  cmd: runES6 :normal
 - path: es6/function_name_property_isnt_writable_is_configurable.js
-  cmd: runES6 :fail
+  cmd: runES6 :normal
 - path: es6/function_name_property_object_methods_class.js
   cmd: runES6 :fail
 - path: es6/function_name_property_object_methods_function.js
 - path: es6/miscellaneous_built-in_prototypes_are_not_instances.js
   cmd: runES6 :fail
 - path: es6/miscellaneous_function_length_is_configurable.js
-  cmd: runES6 :fail
+  cmd: runES6 :normal
 - path: es6/miscellaneous_no_assignments_allowed_in_for-in_head.js
   cmd: runES6 :fail
 - path: es6/miscellaneous_RegExp_constructor_can_alter_flags.js
index 63ec5b0..29f2c42 100644 (file)
@@ -52,8 +52,8 @@ function getTestCases() {
     var ARR_PROTOTYPE = Array.prototype;
 
     array[item++] = new TestCase( SECTION, "Array.prototype.join.length",           1,      Array.prototype.join.length );
-    array[item++] = new TestCase( SECTION, "delete Array.prototype.join.length",    false,  delete Array.prototype.join.length );
-    array[item++] = new TestCase( SECTION, "delete Array.prototype.join.length; Array.prototype.join.length",    1, eval("delete Array.prototype.join.length; Array.prototype.join.length") );
+    array[item++] = new TestCase( SECTION, "delete Array.prototype.join.length",    true,   delete Array.prototype.join.length );
+    array[item++] = new TestCase( SECTION, "Array.prototype.join.length",           0,      Array.prototype.join.length );
 
     // case where array length is 0
 
index c8e7422..38aea92 100644 (file)
@@ -84,8 +84,8 @@ function getTestCases() {
     var ARR_PROTOTYPE = Array.prototype;
 
     testcases[testcases.length] = new TestCase( SECTION, "Array.prototype.reverse.length",           0,      Array.prototype.reverse.length );
-    testcases[testcases.length] = new TestCase( SECTION, "delete Array.prototype.reverse.length",    false,  delete Array.prototype.reverse.length );
-    testcases[testcases.length] = new TestCase( SECTION, "delete Array.prototype.reverse.length; Array.prototype.reverse.length",    0, eval("delete Array.prototype.reverse.length; Array.prototype.reverse.length") );
+    testcases[testcases.length] = new TestCase( SECTION, "delete Array.prototype.reverse.length",    true,   delete Array.prototype.reverse.length );
+    testcases[testcases.length] = new TestCase( SECTION, "Array.prototype.reverse.length",           0,      Array.prototype.reverse.length );
 
     // length of array is 0
     testcases[testcases.length] = new TestCase(   SECTION,
index 1d0d850..89bf6d1 100644 (file)
@@ -84,8 +84,8 @@ function getTestCases() {
     var ARR_PROTOTYPE = Array.prototype;
 
     testcases[testcases.length] = new TestCase( SECTION, "Array.prototype.reverse.length",           0,      Array.prototype.reverse.length );
-    testcases[testcases.length] = new TestCase( SECTION, "delete Array.prototype.reverse.length",    false,  delete Array.prototype.reverse.length );
-    testcases[testcases.length] = new TestCase( SECTION, "delete Array.prototype.reverse.length; Array.prototype.reverse.length",    0, eval("delete Array.prototype.reverse.length; Array.prototype.reverse.length") );
+    testcases[testcases.length] = new TestCase( SECTION, "delete Array.prototype.reverse.length",    true,   delete Array.prototype.reverse.length );
+    testcases[testcases.length] = new TestCase( SECTION, "Array.prototype.reverse.length",           0,      Array.prototype.reverse.length );
 
     // length of array is 0
     testcases[testcases.length] = new TestCase(   SECTION,
index d4f38a7..9b4dd0f 100644 (file)
@@ -46,9 +46,10 @@ function getTestCases() {
     var item = 0;
 
     array[item++] = new TestCase( SECTION,      "eval.length",              1,              eval.length );
-    array[item++] = new TestCase( SECTION,      "delete eval.length",       false,          delete eval.length );
+    array[item++] = new TestCase( SECTION,      "delete eval.length",       true,           delete eval.length );
+    array[item++] = new TestCase( SECTION,      "eval.length",              0,              eval.length );
     array[item++] = new TestCase( SECTION,      "var PROPS = ''; for ( p in eval ) { PROPS += p }; PROPS",  "", eval("var PROPS = ''; for ( p in eval ) { PROPS += p }; PROPS") );
-    array[item++] = new TestCase( SECTION,      "eval.length = null; eval.length",       1, eval( "eval.length = null; eval.length") );
+    array[item++] = new TestCase( SECTION,      "eval.length = null; eval.length",       0, eval( "eval.length = null; eval.length") );
 //    array[item++] = new TestCase( SECTION,     "eval.__proto__",                       Function.prototype,            eval.__proto__ );
 
     // test cases where argument is not a string.  should return the argument.
index 5d39046..e8c684b 100644 (file)
@@ -110,9 +110,9 @@ function getTestCases() {
     array[item++] = new TestCase( SECTION,  "parseInt.length",      2,      parseInt.length );
     array[item++] = new TestCase( SECTION,  "parseInt.length = 0; parseInt.length",     2,      eval("parseInt.length = 0; parseInt.length") );
     array[item++] = new TestCase( SECTION,  "var PROPS=''; for ( var p in parseInt ) { PROPS += p; }; PROPS",   "", eval("var PROPS=''; for ( var p in parseInt ) { PROPS += p; }; PROPS") );
-    array[item++] = new TestCase( SECTION,  "delete parseInt.length",   false,  delete parseInt.length );
-    array[item++] = new TestCase( SECTION,  "delete parseInt.length; parseInt.length",  2,  eval("delete parseInt.length; parseInt.length") );
-    array[item++] = new TestCase( SECTION,  "parseInt.length = null; parseInt.length",  2,  eval("parseInt.length = null; parseInt.length") );
+    array[item++] = new TestCase( SECTION,  "delete parseInt.length",   true,  delete parseInt.length );
+    array[item++] = new TestCase( SECTION,  "parseInt.length",      0,      parseInt.length );
+    array[item++] = new TestCase( SECTION,  "parseInt.length = null; parseInt.length",  0,  eval("parseInt.length = null; parseInt.length") );
 
     array[item++] = new TestCase( SECTION,  "parseInt()",       NaN,    parseInt() );
     array[item++] = new TestCase( SECTION,  "parseInt('')",     NaN,    parseInt("") );
index 0efec6b..183c5d3 100644 (file)
@@ -78,8 +78,8 @@ function getTestCases() {
     array[item++] = new TestCase( SECTION, "parseFloat.length",     1,              parseFloat.length );
 
     array[item++] = new TestCase( SECTION, "parseFloat.length = null; parseFloat.length",   1,      eval("parseFloat.length = null; parseFloat.length") );
-    array[item++] = new TestCase( SECTION, "delete parseFloat.length",                      false,  delete parseFloat.length );
-    array[item++] = new TestCase( SECTION, "delete parseFloat.length; parseFloat.length",   1,      eval("delete parseFloat.length; parseFloat.length") );
+    array[item++] = new TestCase( SECTION, "delete parseFloat.length",                      true,   delete parseFloat.length );
+    array[item++] = new TestCase( SECTION, "parseFloat.length",     0,              parseFloat.length );
     array[item++] = new TestCase( SECTION, "var MYPROPS=''; for ( var p in parseFloat ) { MYPROPS += p }; MYPROPS", "", eval("var MYPROPS=''; for ( var p in parseFloat ) { MYPROPS += p }; MYPROPS") );
 
     array[item++] = new TestCase( SECTION, "parseFloat()",          Number.NaN,     parseFloat() );
index 386f3a6..0563f8b 100644 (file)
@@ -83,8 +83,8 @@ function getTestCases() {
 
     array[item++] = new TestCase( SECTION, "escape.length",         1,          escape.length );
     array[item++] = new TestCase( SECTION, "escape.length = null; escape.length",   1,  eval("escape.length = null; escape.length") );
-    array[item++] = new TestCase( SECTION, "delete escape.length",                  false,  delete escape.length );
-    array[item++] = new TestCase( SECTION, "delete escape.length; escape.length",   1,      eval("delete escape.length; escape.length") );
+    array[item++] = new TestCase( SECTION, "delete escape.length",                  true,  delete escape.length );
+    array[item++] = new TestCase( SECTION, "escape.length",         0,          escape.length );
     array[item++] = new TestCase( SECTION, "var MYPROPS=''; for ( var p in escape ) { MYPROPS+= p}; MYPROPS",    "",    eval("var MYPROPS=''; for ( var p in escape ) { MYPROPS+= p}; MYPROPS") );
 
     array[item++] = new TestCase( SECTION, "escape()",              "undefined",    escape() );
index da1a6f9..ada78af 100644 (file)
@@ -81,8 +81,8 @@ function getTestCases() {
 
     array[item++] = new TestCase( SECTION, "unescape.length",       1,               unescape.length );
     array[item++] = new TestCase( SECTION, "unescape.length = null; unescape.length",   1,      eval("unescape.length=null; unescape.length") );
-    array[item++] = new TestCase( SECTION, "delete unescape.length",                    false,  delete unescape.length );
-    array[item++] = new TestCase( SECTION, "delete unescape.length; unescape.length",   1,      eval("delete unescape.length; unescape.length") );
+    array[item++] = new TestCase( SECTION, "delete unescape.length",                    true,  delete unescape.length );
+    array[item++] = new TestCase( SECTION, "unescape.length",       0,               unescape.length );
     array[item++] = new TestCase( SECTION, "var MYPROPS=''; for ( var p in unescape ) { MYPROPS+= p }; MYPROPS",    "", eval("var MYPROPS=''; for ( var p in unescape ) { MYPROPS+= p }; MYPROPS") );
 
     array[item++] = new TestCase( SECTION, "unescape()",              "undefined",    unescape() );
index 053dab4..b99b42a 100644 (file)
@@ -51,8 +51,8 @@ function getTestCases() {
     array[item++] = new TestCase( SECTION, "isNaN.length",      1,                  isNaN.length );
     array[item++] = new TestCase( SECTION, "var MYPROPS=''; for ( var p in isNaN ) { MYPROPS+= p }; MYPROPS", "", eval("var MYPROPS=''; for ( var p in isNaN ) { MYPROPS+= p }; MYPROPS") );
     array[item++] = new TestCase( SECTION, "isNaN.length = null; isNaN.length", 1,      eval("isNaN.length=null; isNaN.length") );
-    array[item++] = new TestCase( SECTION, "delete isNaN.length",               false,  delete isNaN.length );
-    array[item++] = new TestCase( SECTION, "delete isNaN.length; isNaN.length", 1,      eval("delete isNaN.length; isNaN.length") );
+    array[item++] = new TestCase( SECTION, "delete isNaN.length",               true,   delete isNaN.length );
+    array[item++] = new TestCase( SECTION, "isNaN.length",      0,                  isNaN.length );
 
 //    array[item++] = new TestCase( SECTION, "isNaN.__proto__",   Function.prototype, isNaN.__proto__ );
 
index df384fa..1486963 100644 (file)
@@ -50,8 +50,8 @@ function getTestCases() {
 
     array[item++] = new TestCase( SECTION, "isFinite.length",      1,                  isFinite.length );
     array[item++] = new TestCase( SECTION, "isFinite.length = null; isFinite.length",   1,      eval("isFinite.length=null; isFinite.length") );
-    array[item++] = new TestCase( SECTION, "delete isFinite.length",                    false,  delete isFinite.length );
-    array[item++] = new TestCase( SECTION, "delete isFinite.length; isFinite.length",   1,      eval("delete isFinite.length; isFinite.length") );
+    array[item++] = new TestCase( SECTION, "delete isFinite.length",                    true,   delete isFinite.length );
+    array[item++] = new TestCase( SECTION, "isFinite.length",      0,                  isFinite.length );
     array[item++] = new TestCase( SECTION, "var MYPROPS=''; for ( p in isFinite ) { MYPROPS+= p }; MYPROPS",    "", eval("var MYPROPS=''; for ( p in isFinite ) { MYPROPS += p }; MYPROPS") );
 
     array[item++] = new TestCase( SECTION,  "isFinite()",           false,              isFinite() );
index 454afef..d76e1c1 100644 (file)
@@ -74,8 +74,8 @@ function getTestCases() {
     var item = 0;
 
     array[item++] = new TestCase( SECTION,  "String.prototype.substring.length",        2,          String.prototype.substring.length );
-    array[item++] = new TestCase( SECTION,  "delete String.prototype.substring.length", false,      delete String.prototype.substring.length );
-    array[item++] = new TestCase( SECTION,  "delete String.prototype.substring.length; String.prototype.substring.length", 2,      eval("delete String.prototype.substring.length; String.prototype.substring.length") );
+    array[item++] = new TestCase( SECTION,  "delete String.prototype.substring.length", true,       delete String.prototype.substring.length );
+    array[item++] = new TestCase( SECTION,  "String.prototype.substring.length",        0,          String.prototype.substring.length );
 
     // test cases for when substring is called with no arguments.
 
index b24a9cc..bba288b 100644 (file)
@@ -55,8 +55,8 @@ function getTestCases() {
     var item = 0;
 
     array[item++] = new TestCase( SECTION,  "String.prototype.toLowerCase.length",        0,          String.prototype.toLowerCase.length );
-    array[item++] = new TestCase( SECTION,  "delete String.prototype.toLowerCase.length", false,      delete String.prototype.toLowerCase.length );
-    array[item++] = new TestCase( SECTION,  "delete String.prototype.toLowerCase.length; String.prototype.toLowerCase.length", 0,      eval("delete String.prototype.toLowerCase.length; String.prototype.toLowerCase.length") );
+    array[item++] = new TestCase( SECTION,  "delete String.prototype.toLowerCase.length", true,       delete String.prototype.toLowerCase.length );
+    array[item++] = new TestCase( SECTION,  "String.prototype.toLowerCase.length",        0,          String.prototype.toLowerCase.length );
 
     // Basic Latin, Latin-1 Supplement, Latin Extended A
     for ( var i = 0; i <= 0x017f; i++ ) {
index 4d42091..5e0fc4a 100644 (file)
@@ -55,8 +55,8 @@ function getTestCases() {
     var item = 0;
 
     array[item++] = new TestCase( SECTION,  "String.prototype.toLowerCase.length",        0,          String.prototype.toLowerCase.length );
-    array[item++] = new TestCase( SECTION,  "delete String.prototype.toLowerCase.length", false,      delete String.prototype.toLowerCase.length );
-    array[item++] = new TestCase( SECTION,  "delete String.prototype.toLowerCase.length; String.prototype.toLowerCase.length", 0,      eval("delete String.prototype.toLowerCase.length; String.prototype.toLowerCase.length") );
+    array[item++] = new TestCase( SECTION,  "delete String.prototype.toLowerCase.length", true,       delete String.prototype.toLowerCase.length );
+    array[item++] = new TestCase( SECTION,  "String.prototype.toLowerCase.length",        0,          String.prototype.toLowerCase.length );
 
     // Cyrillic (part)
     // Range: U+0400 to U+04FF
index fb8f0df..a7e1ff6 100644 (file)
@@ -55,8 +55,8 @@ function getTestCases() {
     var item = 0;
 
     array[item++] = new TestCase( SECTION,  "String.prototype.toUpperCase.length",        0,          String.prototype.toUpperCase.length );
-    array[item++] = new TestCase( SECTION,  "delete String.prototype.toUpperCase.length", false,      delete String.prototype.toUpperCase.length );
-    array[item++] = new TestCase( SECTION,  "delete String.prototype.toupperCase.length; String.prototype.toupperCase.length", 0,      eval("delete String.prototype.toUpperCase.length; String.prototype.toUpperCase.length") );
+    array[item++] = new TestCase( SECTION,  "delete String.prototype.toUpperCase.length", true,       delete String.prototype.toUpperCase.length );
+    array[item++] = new TestCase( SECTION,  "String.prototype.toUpperCase.length",        0,          String.prototype.toUpperCase.length );
 
     // Basic Latin, Latin-1 Supplement, Latin Extended A
     for ( var i = 0; i <= 0x017f; i++ ) {
index bd1be63..b799012 100644 (file)
@@ -103,8 +103,8 @@ function getTestCases() {
 
     array[item++] = new TestCase( SECTION, "String.prototype.indexOf.length",                                               1,     String.prototype.indexOf.length );
     array[item++] = new TestCase( SECTION, "String.prototype.indexOf.length = null; String.prototype.indexOf.length",       1,     eval("String.prototype.indexOf.length = null; String.prototype.indexOf.length") );
-    array[item++] = new TestCase( SECTION, "delete String.prototype.indexOf.length",                                        false,  delete String.prototype.indexOf.length );
-    array[item++] = new TestCase( SECTION, "delete String.prototype.indexOf.length; String.prototype.indexOf.length",       1,      eval("delete String.prototype.indexOf.length; String.prototype.indexOf.length") );
+    array[item++] = new TestCase( SECTION, "delete String.prototype.indexOf.length",                                        true,  delete String.prototype.indexOf.length );
+    array[item++] = new TestCase( SECTION, "String.prototype.indexOf.length",                                               0,     String.prototype.indexOf.length );
 
     array[item++] = new TestCase( SECTION, "var s = new String(); s.indexOf()",     -1,     eval("var s = new String(); s.indexOf()") );
 
index 9972c7e..828390c 100644 (file)
@@ -75,8 +75,8 @@ function getTestCases() {
     var item = 0;
 
     array[item++] = new TestCase( SECTION, "String.prototype.lastIndexOf.length",           1,          String.prototype.lastIndexOf.length );
-    array[item++] = new TestCase( SECTION, "delete String.prototype.lastIndexOf.length",    false,      delete String.prototype.lastIndexOf.length );
-    array[item++] = new TestCase( SECTION, "delete String.prototype.lastIndexOf.length; String.prototype.lastIndexOf.length",   1,  eval("delete String.prototype.lastIndexOf.length; String.prototype.lastIndexOf.length" ) );
+    array[item++] = new TestCase( SECTION, "delete String.prototype.lastIndexOf.length",    true,       delete String.prototype.lastIndexOf.length );
+    array[item++] = new TestCase( SECTION, "String.prototype.lastIndexOf.length",           0,          String.prototype.lastIndexOf.length );
 
     array[item++] = new TestCase( SECTION, "var s = new String(''); s.lastIndexOf('', 0)",          LastIndexOf("","",0),  eval("var s = new String(''); s.lastIndexOf('', 0)") );
     array[item++] = new TestCase( SECTION, "var s = new String(''); s.lastIndexOf('')",             LastIndexOf("",""),  eval("var s = new String(''); s.lastIndexOf('')") );
index 1dddd41..d8b55af 100644 (file)
@@ -61,8 +61,8 @@ function getTestCases() {
     var item = 0;
 
     array[item++] = new TestCase( SECTION,  "String.prototype.split.length",        2,          String.prototype.split.length );
-    array[item++] = new TestCase( SECTION,  "delete String.prototype.split.length", false,      delete String.prototype.split.length );
-    array[item++] = new TestCase( SECTION,  "delete String.prototype.split.length; String.prototype.split.length", 2,      eval("delete String.prototype.split.length; String.prototype.split.length") );
+    array[item++] = new TestCase( SECTION,  "delete String.prototype.split.length", true,       delete String.prototype.split.length );
+    array[item++] = new TestCase( SECTION,  "String.prototype.split.length",        0,          String.prototype.split.length );
 
     // test cases for when split is called with no arguments.
 
index 9ae08dc..5c10fec 100644 (file)
@@ -64,8 +64,8 @@ function getTestCases() {
     var item = 0;
 
     array[item++] = new TestCase( SECTION,  "String.prototype.substring.length",        2,          String.prototype.substring.length );
-    array[item++] = new TestCase( SECTION,  "delete String.prototype.substring.length", false,      delete String.prototype.substring.length );
-    array[item++] = new TestCase( SECTION,  "delete String.prototype.substring.length; String.prototype.substring.length", 2,      eval("delete String.prototype.substring.length; String.prototype.substring.length") );
+    array[item++] = new TestCase( SECTION,  "delete String.prototype.substring.length", true,       delete String.prototype.substring.length );
+    array[item++] = new TestCase( SECTION,  "String.prototype.substring.length",        0,          String.prototype.substring.length );
 
     // test cases for when substring is called with no arguments.
 
diff --git a/Source/JavaScriptCore/tests/stress/function-configurable-properties.js b/Source/JavaScriptCore/tests/stress/function-configurable-properties.js
new file mode 100644 (file)
index 0000000..1a10ca1
--- /dev/null
@@ -0,0 +1,79 @@
+function shouldBe(actual, expected) {
+    if (actual !== expected)
+        throw new Error("Failed assertion: actual " + actual + " should be " + expected);
+}
+function shouldNotBe(actual, expected) {
+    if (actual === expected)
+        throw new Error("Failed assertion: actual " + actual + " should not be " + expected);
+}
+
+function readX(f) {
+    return f.x;
+}
+noInline(readX);
+
+function readY(f) {
+    return f.y;
+}
+noInline(readY);
+
+var lazyPropNames = [ "name", "length" ];
+
+function test(propName, foo) {
+    foo.x = 20;
+    for (var i = 0; i < 1000; i++)
+        shouldBe(readX(foo), 20);
+
+    // Reify the lazy property.
+    var propValue = foo[propName];
+
+    // Verify that we can still access the property after the reification of foo.name.
+    for (var i = 0; i < 1000; i++)
+        shouldBe(readX(foo), 20);
+
+    foo.y = 25;
+    for (var i = 0; i < 1000; i++)
+        shouldBe(readY(foo), 25);
+
+    // Verify that the property has the configurable attribute.
+    var desc = Object.getOwnPropertyDescriptor(foo, propName);
+    shouldBe(desc.configurable, true);
+    shouldBe(desc.writable, false);
+    shouldBe(desc.enumerable, false);
+    shouldBe(desc.value, propValue);
+
+    shouldBe(eval("foo[propName] = 5, foo[propName]"), propValue);
+    shouldBe(eval("foo." + propName + " = 5, foo." + propName), propValue);
+    for (var prop in foo)
+        shouldNotBe(prop, propName);
+
+    Object.defineProperty(foo, propName, {
+        value: propValue,
+        writable: true,
+        enumerable: true,
+        configurable: true
+    });
+
+    shouldBe(eval("foo[propName] = 5, foo[propName]"), 5);
+    shouldBe(eval("foo." + propName + " = 25, foo." + propName), 25);
+    var found = false;
+    for (var prop in foo) {
+        if (prop === propName) {
+            found = true;
+            break;
+        }
+    }
+    shouldBe(found, true);
+    
+    shouldBe(eval("delete foo." + propName), true);
+
+    delete foo.y;
+    shouldBe(foo.y, undefined);
+}
+
+function runTest() {
+    for (var i = 0; i < lazyPropNames.length; i++)
+        test(lazyPropNames[i], new Function(""));
+}
+
+runTest();