Bug 55736 - Implement seal/freeze/preventExtensions for normal object types.
authorbarraclough@apple.com <barraclough@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 4 Mar 2011 22:34:48 +0000 (22:34 +0000)
committerbarraclough@apple.com <barraclough@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 4 Mar 2011 22:34:48 +0000 (22:34 +0000)
Provide basic functionallity from section 15.2.4 of ECMA-262.
This support will need expanding to cover arrays, too.

Reviewed by Sam Weinig.

Source/JavaScriptCore:

Shows a 0.5% progression on SunSpidey, this seems to be due to changing
ObjectConstructor to use a static table.

* DerivedSources.make:
* JavaScriptCore.exp:
* interpreter/CallFrame.h:
(JSC::ExecState::objectConstructorTable):
    Add a static table for ObjectConstructor.
* runtime/CommonIdentifiers.h:
* runtime/JSGlobalData.cpp:
(JSC::JSGlobalData::JSGlobalData):
(JSC::JSGlobalData::~JSGlobalData):
    Add a static table for ObjectConstructor.
* runtime/JSGlobalData.h:
* runtime/JSGlobalObject.cpp:
(JSC::JSGlobalObject::reset):
    Add a static table for ObjectConstructor.
* runtime/JSObject.cpp:
(JSC::JSObject::seal):
(JSC::JSObject::freeze):
(JSC::JSObject::preventExtensions):
    Transition the object's structure.
(JSC::JSObject::defineOwnProperty):
    Check isExtensible.
* runtime/JSObject.h:
(JSC::JSObject::isSealed):
(JSC::JSObject::isFrozen):
(JSC::JSObject::isExtensible):
    These wrap method on structure.
(JSC::JSObject::putDirectInternal):
    Check isExtensible.
* runtime/ObjectConstructor.cpp:
(JSC::ObjectConstructor::ObjectConstructor):
(JSC::ObjectConstructor::getOwnPropertySlot):
(JSC::ObjectConstructor::getOwnPropertyDescriptor):
    Change ObjectConstructor to use a static table.
(JSC::objectConstructorSeal):
(JSC::objectConstructorFreeze):
(JSC::objectConstructorPreventExtensions):
(JSC::objectConstructorIsSealed):
(JSC::objectConstructorIsFrozen):
(JSC::objectConstructorIsExtensible):
    Add new methods on Object.
* runtime/ObjectConstructor.h:
(JSC::ObjectConstructor::createStructure):
* runtime/Structure.cpp:
(JSC::Structure::Structure):
    init/propagate  m_preventExtensions
(JSC::Structure::sealTransition):
(JSC::Structure::freezeTransition):
(JSC::Structure::preventExtensionsTransition):
    transition the structure, materializing the property map, setting m_preventExtensions & changing attributes.
(JSC::Structure::isSealed):
(JSC::Structure::isFrozen):
    check attributes to detect if object is sealed/frozen.
* runtime/Structure.h:
(JSC::Structure::isExtensible):
    checks the m_preventExtensions flag.

LayoutTests:

Update results - many more tests PASS.
Also adds a new testcase.

* fast/js/Object-getOwnPropertyNames-expected.txt:
* fast/js/script-tests/Object-getOwnPropertyNames.js:
* ietestcenter/Javascript/15.2.3.10-0-1-expected.txt:
* ietestcenter/Javascript/15.2.3.10-0-2-expected.txt:
* ietestcenter/Javascript/15.2.3.10-1-expected.txt:
* ietestcenter/Javascript/15.2.3.10-2-expected.txt:
* ietestcenter/Javascript/15.2.3.11-0-1-expected.txt:
* ietestcenter/Javascript/15.2.3.11-0-2-expected.txt:
* ietestcenter/Javascript/15.2.3.11-1-expected.txt:
* ietestcenter/Javascript/15.2.3.11-4-1-expected.txt:
* ietestcenter/Javascript/15.2.3.11-4-10-expected.txt:
* ietestcenter/Javascript/15.2.3.11-4-11-expected.txt:
* ietestcenter/Javascript/15.2.3.11-4-12-expected.txt:
* ietestcenter/Javascript/15.2.3.11-4-13-expected.txt:
* ietestcenter/Javascript/15.2.3.11-4-14-expected.txt:
* ietestcenter/Javascript/15.2.3.11-4-15-expected.txt:
* ietestcenter/Javascript/15.2.3.11-4-16-expected.txt:
* ietestcenter/Javascript/15.2.3.11-4-17-expected.txt:
* ietestcenter/Javascript/15.2.3.11-4-18-expected.txt:
* ietestcenter/Javascript/15.2.3.11-4-19-expected.txt:
* ietestcenter/Javascript/15.2.3.11-4-2-expected.txt:
* ietestcenter/Javascript/15.2.3.11-4-20-expected.txt:
* ietestcenter/Javascript/15.2.3.11-4-21-expected.txt:
* ietestcenter/Javascript/15.2.3.11-4-22-expected.txt:
* ietestcenter/Javascript/15.2.3.11-4-23-expected.txt:
* ietestcenter/Javascript/15.2.3.11-4-24-expected.txt:
* ietestcenter/Javascript/15.2.3.11-4-25-expected.txt:
* ietestcenter/Javascript/15.2.3.11-4-26-expected.txt:
* ietestcenter/Javascript/15.2.3.11-4-27-expected.txt:
* ietestcenter/Javascript/15.2.3.11-4-3-expected.txt:
* ietestcenter/Javascript/15.2.3.11-4-4-expected.txt:
* ietestcenter/Javascript/15.2.3.11-4-5-expected.txt:
* ietestcenter/Javascript/15.2.3.11-4-6-expected.txt:
* ietestcenter/Javascript/15.2.3.11-4-7-expected.txt:
* ietestcenter/Javascript/15.2.3.11-4-8-expected.txt:
* ietestcenter/Javascript/15.2.3.11-4-9-expected.txt:
* ietestcenter/Javascript/15.2.3.12-0-1-expected.txt:
* ietestcenter/Javascript/15.2.3.12-0-2-expected.txt:
* ietestcenter/Javascript/15.2.3.12-1-expected.txt:
* ietestcenter/Javascript/15.2.3.12-3-1-expected.txt:
* ietestcenter/Javascript/15.2.3.12-3-10-expected.txt:
* ietestcenter/Javascript/15.2.3.12-3-11-expected.txt:
* ietestcenter/Javascript/15.2.3.12-3-12-expected.txt:
* ietestcenter/Javascript/15.2.3.12-3-13-expected.txt:
* ietestcenter/Javascript/15.2.3.12-3-14-expected.txt:
* ietestcenter/Javascript/15.2.3.12-3-15-expected.txt:
* ietestcenter/Javascript/15.2.3.12-3-16-expected.txt:
* ietestcenter/Javascript/15.2.3.12-3-17-expected.txt:
* ietestcenter/Javascript/15.2.3.12-3-18-expected.txt:
* ietestcenter/Javascript/15.2.3.12-3-19-expected.txt:
* ietestcenter/Javascript/15.2.3.12-3-2-expected.txt:
* ietestcenter/Javascript/15.2.3.12-3-20-expected.txt:
* ietestcenter/Javascript/15.2.3.12-3-21-expected.txt:
* ietestcenter/Javascript/15.2.3.12-3-22-expected.txt:
* ietestcenter/Javascript/15.2.3.12-3-23-expected.txt:
* ietestcenter/Javascript/15.2.3.12-3-24-expected.txt:
* ietestcenter/Javascript/15.2.3.12-3-25-expected.txt:
* ietestcenter/Javascript/15.2.3.12-3-26-expected.txt:
* ietestcenter/Javascript/15.2.3.12-3-27-expected.txt:
* ietestcenter/Javascript/15.2.3.12-3-3-expected.txt:
* ietestcenter/Javascript/15.2.3.12-3-4-expected.txt:
* ietestcenter/Javascript/15.2.3.12-3-5-expected.txt:
* ietestcenter/Javascript/15.2.3.12-3-6-expected.txt:
* ietestcenter/Javascript/15.2.3.12-3-7-expected.txt:
* ietestcenter/Javascript/15.2.3.12-3-8-expected.txt:
* ietestcenter/Javascript/15.2.3.12-3-9-expected.txt:
* ietestcenter/Javascript/15.2.3.13-0-1-expected.txt:
* ietestcenter/Javascript/15.2.3.13-0-2-expected.txt:
* ietestcenter/Javascript/15.2.3.13-0-3-expected.txt:
* ietestcenter/Javascript/15.2.3.13-1-expected.txt:
* ietestcenter/Javascript/15.2.3.13-2-1-expected.txt:
* ietestcenter/Javascript/15.2.3.13-2-10-expected.txt:
* ietestcenter/Javascript/15.2.3.13-2-11-expected.txt:
* ietestcenter/Javascript/15.2.3.13-2-12-expected.txt:
* ietestcenter/Javascript/15.2.3.13-2-13-expected.txt:
* ietestcenter/Javascript/15.2.3.13-2-14-expected.txt:
* ietestcenter/Javascript/15.2.3.13-2-15-expected.txt:
* ietestcenter/Javascript/15.2.3.13-2-16-expected.txt:
* ietestcenter/Javascript/15.2.3.13-2-17-expected.txt:
* ietestcenter/Javascript/15.2.3.13-2-18-expected.txt:
* ietestcenter/Javascript/15.2.3.13-2-19-expected.txt:
* ietestcenter/Javascript/15.2.3.13-2-2-expected.txt:
* ietestcenter/Javascript/15.2.3.13-2-20-expected.txt:
* ietestcenter/Javascript/15.2.3.13-2-21-expected.txt:
* ietestcenter/Javascript/15.2.3.13-2-3-expected.txt:
* ietestcenter/Javascript/15.2.3.13-2-4-expected.txt:
* ietestcenter/Javascript/15.2.3.13-2-5-expected.txt:
* ietestcenter/Javascript/15.2.3.13-2-6-expected.txt:
* ietestcenter/Javascript/15.2.3.13-2-7-expected.txt:
* ietestcenter/Javascript/15.2.3.13-2-8-expected.txt:
* ietestcenter/Javascript/15.2.3.13-2-9-expected.txt:
* ietestcenter/Javascript/15.2.3.14-2-4-expected.txt:
* ietestcenter/Javascript/15.2.3.14-2-5-expected.txt:
* ietestcenter/Javascript/15.2.3.14-2-6-expected.txt:
* ietestcenter/Javascript/15.2.3.3-4-20-expected.txt:
* ietestcenter/Javascript/15.2.3.3-4-21-expected.txt:
* ietestcenter/Javascript/15.2.3.3-4-22-expected.txt:
* ietestcenter/Javascript/15.2.3.3-4-23-expected.txt:
* ietestcenter/Javascript/15.2.3.3-4-24-expected.txt:
* ietestcenter/Javascript/15.2.3.3-4-25-expected.txt:
* ietestcenter/Javascript/15.2.3.4-4-2-expected.txt:
* ietestcenter/Javascript/15.2.3.6-4-1-expected.txt:
* ietestcenter/Javascript/15.2.3.8-0-1-expected.txt:
* ietestcenter/Javascript/15.2.3.8-0-2-expected.txt:
* ietestcenter/Javascript/15.2.3.8-1-expected.txt:
* ietestcenter/Javascript/15.2.3.9-0-1-expected.txt:
* ietestcenter/Javascript/15.2.3.9-0-2-expected.txt:
* ietestcenter/Javascript/15.2.3.9-1-expected.txt:

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

130 files changed:
LayoutTests/ChangeLog
LayoutTests/fast/js/Object-getOwnPropertyNames-expected.txt
LayoutTests/fast/js/preventExtensions-expected.txt [new file with mode: 0644]
LayoutTests/fast/js/preventExtensions.html [new file with mode: 0644]
LayoutTests/fast/js/script-tests/Object-getOwnPropertyNames.js
LayoutTests/fast/js/script-tests/preventExtensions.js [new file with mode: 0644]
LayoutTests/ietestcenter/Javascript/15.2.3.10-0-1-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.10-0-2-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.10-1-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.10-2-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.11-0-1-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.11-0-2-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.11-1-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.11-4-1-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.11-4-10-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.11-4-11-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.11-4-12-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.11-4-13-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.11-4-14-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.11-4-15-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.11-4-16-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.11-4-17-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.11-4-18-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.11-4-19-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.11-4-2-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.11-4-20-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.11-4-21-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.11-4-22-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.11-4-23-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.11-4-24-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.11-4-25-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.11-4-26-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.11-4-27-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.11-4-3-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.11-4-4-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.11-4-5-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.11-4-6-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.11-4-7-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.11-4-8-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.11-4-9-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.12-0-1-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.12-0-2-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.12-1-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.12-3-1-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.12-3-10-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.12-3-11-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.12-3-12-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.12-3-13-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.12-3-14-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.12-3-15-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.12-3-16-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.12-3-17-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.12-3-18-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.12-3-19-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.12-3-2-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.12-3-20-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.12-3-21-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.12-3-22-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.12-3-23-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.12-3-24-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.12-3-25-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.12-3-26-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.12-3-27-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.12-3-3-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.12-3-4-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.12-3-5-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.12-3-6-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.12-3-7-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.12-3-8-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.12-3-9-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.13-0-1-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.13-0-2-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.13-0-3-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.13-1-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.13-2-1-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.13-2-10-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.13-2-11-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.13-2-12-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.13-2-13-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.13-2-14-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.13-2-15-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.13-2-16-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.13-2-17-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.13-2-18-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.13-2-19-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.13-2-2-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.13-2-20-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.13-2-21-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.13-2-3-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.13-2-4-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.13-2-5-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.13-2-6-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.13-2-7-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.13-2-8-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.13-2-9-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.14-2-4-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.14-2-5-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.14-2-6-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.3-4-20-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.3-4-21-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.3-4-22-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.3-4-23-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.3-4-24-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.3-4-25-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.4-4-2-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.6-4-1-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.8-0-1-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.8-0-2-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.8-1-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.9-0-1-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.9-0-2-expected.txt
LayoutTests/ietestcenter/Javascript/15.2.3.9-1-expected.txt
Source/JavaScriptCore/Android.mk
Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/DerivedSources.make
Source/JavaScriptCore/DerivedSources.pro
Source/JavaScriptCore/GNUmakefile.am
Source/JavaScriptCore/JavaScriptCore.exp
Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj
Source/JavaScriptCore/interpreter/CallFrame.h
Source/JavaScriptCore/runtime/CommonIdentifiers.h
Source/JavaScriptCore/runtime/JSGlobalData.cpp
Source/JavaScriptCore/runtime/JSGlobalData.h
Source/JavaScriptCore/runtime/JSGlobalObject.cpp
Source/JavaScriptCore/runtime/JSObject.cpp
Source/JavaScriptCore/runtime/JSObject.h
Source/JavaScriptCore/runtime/ObjectConstructor.cpp
Source/JavaScriptCore/runtime/ObjectConstructor.h
Source/JavaScriptCore/runtime/Structure.cpp
Source/JavaScriptCore/runtime/Structure.h

index ee87079..ea57efa 100644 (file)
@@ -1,3 +1,123 @@
+2011-03-03  Gavin Barraclough  <barraclough@apple.com>
+
+        Reviewed by Sam Weinig.
+
+        Bug 55736 - Implement seal/freeze/preventExtensions for normal object types.
+        Provide basic functionallity from section 15.2.4 of ECMA-262.
+        This support will need expanding to cover arrays, too.
+
+        Update results - many more tests PASS.
+        Also adds a new testcase.
+
+        * fast/js/Object-getOwnPropertyNames-expected.txt:
+        * fast/js/script-tests/Object-getOwnPropertyNames.js:
+        * ietestcenter/Javascript/15.2.3.10-0-1-expected.txt:
+        * ietestcenter/Javascript/15.2.3.10-0-2-expected.txt:
+        * ietestcenter/Javascript/15.2.3.10-1-expected.txt:
+        * ietestcenter/Javascript/15.2.3.10-2-expected.txt:
+        * ietestcenter/Javascript/15.2.3.11-0-1-expected.txt:
+        * ietestcenter/Javascript/15.2.3.11-0-2-expected.txt:
+        * ietestcenter/Javascript/15.2.3.11-1-expected.txt:
+        * ietestcenter/Javascript/15.2.3.11-4-1-expected.txt:
+        * ietestcenter/Javascript/15.2.3.11-4-10-expected.txt:
+        * ietestcenter/Javascript/15.2.3.11-4-11-expected.txt:
+        * ietestcenter/Javascript/15.2.3.11-4-12-expected.txt:
+        * ietestcenter/Javascript/15.2.3.11-4-13-expected.txt:
+        * ietestcenter/Javascript/15.2.3.11-4-14-expected.txt:
+        * ietestcenter/Javascript/15.2.3.11-4-15-expected.txt:
+        * ietestcenter/Javascript/15.2.3.11-4-16-expected.txt:
+        * ietestcenter/Javascript/15.2.3.11-4-17-expected.txt:
+        * ietestcenter/Javascript/15.2.3.11-4-18-expected.txt:
+        * ietestcenter/Javascript/15.2.3.11-4-19-expected.txt:
+        * ietestcenter/Javascript/15.2.3.11-4-2-expected.txt:
+        * ietestcenter/Javascript/15.2.3.11-4-20-expected.txt:
+        * ietestcenter/Javascript/15.2.3.11-4-21-expected.txt:
+        * ietestcenter/Javascript/15.2.3.11-4-22-expected.txt:
+        * ietestcenter/Javascript/15.2.3.11-4-23-expected.txt:
+        * ietestcenter/Javascript/15.2.3.11-4-24-expected.txt:
+        * ietestcenter/Javascript/15.2.3.11-4-25-expected.txt:
+        * ietestcenter/Javascript/15.2.3.11-4-26-expected.txt:
+        * ietestcenter/Javascript/15.2.3.11-4-27-expected.txt:
+        * ietestcenter/Javascript/15.2.3.11-4-3-expected.txt:
+        * ietestcenter/Javascript/15.2.3.11-4-4-expected.txt:
+        * ietestcenter/Javascript/15.2.3.11-4-5-expected.txt:
+        * ietestcenter/Javascript/15.2.3.11-4-6-expected.txt:
+        * ietestcenter/Javascript/15.2.3.11-4-7-expected.txt:
+        * ietestcenter/Javascript/15.2.3.11-4-8-expected.txt:
+        * ietestcenter/Javascript/15.2.3.11-4-9-expected.txt:
+        * ietestcenter/Javascript/15.2.3.12-0-1-expected.txt:
+        * ietestcenter/Javascript/15.2.3.12-0-2-expected.txt:
+        * ietestcenter/Javascript/15.2.3.12-1-expected.txt:
+        * ietestcenter/Javascript/15.2.3.12-3-1-expected.txt:
+        * ietestcenter/Javascript/15.2.3.12-3-10-expected.txt:
+        * ietestcenter/Javascript/15.2.3.12-3-11-expected.txt:
+        * ietestcenter/Javascript/15.2.3.12-3-12-expected.txt:
+        * ietestcenter/Javascript/15.2.3.12-3-13-expected.txt:
+        * ietestcenter/Javascript/15.2.3.12-3-14-expected.txt:
+        * ietestcenter/Javascript/15.2.3.12-3-15-expected.txt:
+        * ietestcenter/Javascript/15.2.3.12-3-16-expected.txt:
+        * ietestcenter/Javascript/15.2.3.12-3-17-expected.txt:
+        * ietestcenter/Javascript/15.2.3.12-3-18-expected.txt:
+        * ietestcenter/Javascript/15.2.3.12-3-19-expected.txt:
+        * ietestcenter/Javascript/15.2.3.12-3-2-expected.txt:
+        * ietestcenter/Javascript/15.2.3.12-3-20-expected.txt:
+        * ietestcenter/Javascript/15.2.3.12-3-21-expected.txt:
+        * ietestcenter/Javascript/15.2.3.12-3-22-expected.txt:
+        * ietestcenter/Javascript/15.2.3.12-3-23-expected.txt:
+        * ietestcenter/Javascript/15.2.3.12-3-24-expected.txt:
+        * ietestcenter/Javascript/15.2.3.12-3-25-expected.txt:
+        * ietestcenter/Javascript/15.2.3.12-3-26-expected.txt:
+        * ietestcenter/Javascript/15.2.3.12-3-27-expected.txt:
+        * ietestcenter/Javascript/15.2.3.12-3-3-expected.txt:
+        * ietestcenter/Javascript/15.2.3.12-3-4-expected.txt:
+        * ietestcenter/Javascript/15.2.3.12-3-5-expected.txt:
+        * ietestcenter/Javascript/15.2.3.12-3-6-expected.txt:
+        * ietestcenter/Javascript/15.2.3.12-3-7-expected.txt:
+        * ietestcenter/Javascript/15.2.3.12-3-8-expected.txt:
+        * ietestcenter/Javascript/15.2.3.12-3-9-expected.txt:
+        * ietestcenter/Javascript/15.2.3.13-0-1-expected.txt:
+        * ietestcenter/Javascript/15.2.3.13-0-2-expected.txt:
+        * ietestcenter/Javascript/15.2.3.13-0-3-expected.txt:
+        * ietestcenter/Javascript/15.2.3.13-1-expected.txt:
+        * ietestcenter/Javascript/15.2.3.13-2-1-expected.txt:
+        * ietestcenter/Javascript/15.2.3.13-2-10-expected.txt:
+        * ietestcenter/Javascript/15.2.3.13-2-11-expected.txt:
+        * ietestcenter/Javascript/15.2.3.13-2-12-expected.txt:
+        * ietestcenter/Javascript/15.2.3.13-2-13-expected.txt:
+        * ietestcenter/Javascript/15.2.3.13-2-14-expected.txt:
+        * ietestcenter/Javascript/15.2.3.13-2-15-expected.txt:
+        * ietestcenter/Javascript/15.2.3.13-2-16-expected.txt:
+        * ietestcenter/Javascript/15.2.3.13-2-17-expected.txt:
+        * ietestcenter/Javascript/15.2.3.13-2-18-expected.txt:
+        * ietestcenter/Javascript/15.2.3.13-2-19-expected.txt:
+        * ietestcenter/Javascript/15.2.3.13-2-2-expected.txt:
+        * ietestcenter/Javascript/15.2.3.13-2-20-expected.txt:
+        * ietestcenter/Javascript/15.2.3.13-2-21-expected.txt:
+        * ietestcenter/Javascript/15.2.3.13-2-3-expected.txt:
+        * ietestcenter/Javascript/15.2.3.13-2-4-expected.txt:
+        * ietestcenter/Javascript/15.2.3.13-2-5-expected.txt:
+        * ietestcenter/Javascript/15.2.3.13-2-6-expected.txt:
+        * ietestcenter/Javascript/15.2.3.13-2-7-expected.txt:
+        * ietestcenter/Javascript/15.2.3.13-2-8-expected.txt:
+        * ietestcenter/Javascript/15.2.3.13-2-9-expected.txt:
+        * ietestcenter/Javascript/15.2.3.14-2-4-expected.txt:
+        * ietestcenter/Javascript/15.2.3.14-2-5-expected.txt:
+        * ietestcenter/Javascript/15.2.3.14-2-6-expected.txt:
+        * ietestcenter/Javascript/15.2.3.3-4-20-expected.txt:
+        * ietestcenter/Javascript/15.2.3.3-4-21-expected.txt:
+        * ietestcenter/Javascript/15.2.3.3-4-22-expected.txt:
+        * ietestcenter/Javascript/15.2.3.3-4-23-expected.txt:
+        * ietestcenter/Javascript/15.2.3.3-4-24-expected.txt:
+        * ietestcenter/Javascript/15.2.3.3-4-25-expected.txt:
+        * ietestcenter/Javascript/15.2.3.4-4-2-expected.txt:
+        * ietestcenter/Javascript/15.2.3.6-4-1-expected.txt:
+        * ietestcenter/Javascript/15.2.3.8-0-1-expected.txt:
+        * ietestcenter/Javascript/15.2.3.8-0-2-expected.txt:
+        * ietestcenter/Javascript/15.2.3.8-1-expected.txt:
+        * ietestcenter/Javascript/15.2.3.9-0-1-expected.txt:
+        * ietestcenter/Javascript/15.2.3.9-0-2-expected.txt:
+        * ietestcenter/Javascript/15.2.3.9-1-expected.txt:
+
 2011-03-04  Pavel Feldman  <pfeldman@chromium.org>
 
         Not reviewed: follow up to 80355, fixing Qt tests.
index 1fc3033..a7e5df9 100644 (file)
@@ -40,7 +40,7 @@ PASS getSortedOwnPropertyNames(decodeURI) is ['length', 'name']
 PASS getSortedOwnPropertyNames(decodeURIComponent) is ['length', 'name']
 PASS getSortedOwnPropertyNames(encodeURI) is ['length', 'name']
 PASS getSortedOwnPropertyNames(encodeURIComponent) is ['length', 'name']
-PASS getSortedOwnPropertyNames(Object) is ['create', 'defineProperties', 'defineProperty', 'getOwnPropertyDescriptor', 'getOwnPropertyNames', 'getPrototypeOf', 'keys', 'length', 'name', 'prototype']
+PASS getSortedOwnPropertyNames(Object) is ['create', 'defineProperties', 'defineProperty', 'freeze', 'getOwnPropertyDescriptor', 'getOwnPropertyNames', 'getPrototypeOf', 'isExtensible', 'isFrozen', 'isSealed', 'keys', 'length', 'name', 'preventExtensions', 'prototype', 'seal']
 PASS getSortedOwnPropertyNames(Object.prototype) is ['__defineGetter__', '__defineSetter__', '__lookupGetter__', '__lookupSetter__', 'constructor', 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable', 'toLocaleString', 'toString', 'valueOf']
 PASS getSortedOwnPropertyNames(Function) is ['length', 'name', 'prototype']
 PASS getSortedOwnPropertyNames(Function.prototype) is ['apply', 'call', 'constructor', 'length', 'name', 'toString']
diff --git a/LayoutTests/fast/js/preventExtensions-expected.txt b/LayoutTests/fast/js/preventExtensions-expected.txt
new file mode 100644 (file)
index 0000000..26a3ccd
--- /dev/null
@@ -0,0 +1,13 @@
+This test checks whether various seal/freeze/preventExtentions work on a regular object.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS test(obj()) is "(b:4)(c:3)E"
+PASS test(preventExtensions(obj())) is "(b:4)"
+PASS test(seal(obj())) is "(a:1)(b:4)S"
+PASS test(freeze(obj())) is "(a:1)(b:2)SF"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/fast/js/preventExtensions.html b/LayoutTests/fast/js/preventExtensions.html
new file mode 100644 (file)
index 0000000..2b5b668
--- /dev/null
@@ -0,0 +1,13 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<link rel="stylesheet" href="resources/js-test-style.css">
+<script src="resources/js-test-pre.js"></script>
+</head>
+<body>
+<p id="description"></p>
+<div id="console"></div>
+<script src="script-tests/preventExtensions.js"></script>
+<script src="resources/js-test-post.js"></script>
+</body>
+</html>
index 3eed548..ed7ae05 100644 (file)
@@ -48,7 +48,7 @@ var expectedPropertyNamesSet = {
     "encodeURI": "['length', 'name']",
     "encodeURIComponent": "['length', 'name']",
 // Built-in ECMA objects
-    "Object": "['create', 'defineProperties', 'defineProperty', 'getOwnPropertyDescriptor', 'getOwnPropertyNames', 'getPrototypeOf', 'keys', 'length', 'name', 'prototype']",
+    "Object": "['create', 'defineProperties', 'defineProperty', 'freeze', 'getOwnPropertyDescriptor', 'getOwnPropertyNames', 'getPrototypeOf', 'isExtensible', 'isFrozen', 'isSealed', 'keys', 'length', 'name', 'preventExtensions', 'prototype', 'seal']",
     "Object.prototype": "['__defineGetter__', '__defineSetter__', '__lookupGetter__', '__lookupSetter__', 'constructor', 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable', 'toLocaleString', 'toString', 'valueOf']",
     "Function": "['length', 'name', 'prototype']",
     "Function.prototype": "['apply', 'call', 'constructor', 'length', 'name', 'toString']",
diff --git a/LayoutTests/fast/js/script-tests/preventExtensions.js b/LayoutTests/fast/js/script-tests/preventExtensions.js
new file mode 100644 (file)
index 0000000..31cbdf7
--- /dev/null
@@ -0,0 +1,51 @@
+description(
+"This test checks whether various seal/freeze/preventExtentions work on a regular object."
+);
+
+function obj()
+{
+    return { a: 1, b: 2 };
+}
+
+function test(obj)
+{
+    obj.c =3;
+    obj.b =4;
+    delete obj.a;
+
+    var result = "";
+    for (key in obj)
+        result += ("(" + key + ":" + obj[key] + ")");
+    if (Object.isSealed(obj))
+        result += "S";
+    if (Object.isFrozen(obj))
+        result += "F";
+    if (Object.isExtensible(obj))
+        result += "E";
+    return result;
+}
+
+function seal(obj)
+{
+    Object.seal(obj);
+    return obj;
+}
+
+function freeze(obj)
+{
+    Object.freeze(obj);
+    return obj;
+}
+
+function preventExtensions(obj)
+{
+    Object.preventExtensions(obj);
+    return obj;
+}
+
+shouldBe('test(obj())', '"(b:4)(c:3)E"'); // extensible, can delete a, can modify b, and can add c
+shouldBe('test(preventExtensions(obj()))', '"(b:4)"'); // <nothing>, can delete a, can modify b, and CANNOT add c
+shouldBe('test(seal(obj()))', '"(a:1)(b:4)S"'); // sealed, CANNOT delete a, can modify b, and CANNOT add c
+shouldBe('test(freeze(obj()))', '"(a:1)(b:2)SF"'); // sealed and frozen, CANNOT delete a, CANNOT modify b, and CANNOT add c
+
+successfullyParsed = true;
\ No newline at end of file
index dde3c13..9e634fa 100644 (file)
@@ -4,7 +4,7 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE
 
 
 PASS ES5Harness.preconditionPassed is true
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 42e1866..fa069ed 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 1b59009..62dc2b8 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index d039fbe..c1f00f0 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 8f194b8..31dd098 100644 (file)
@@ -4,7 +4,7 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE
 
 
 PASS ES5Harness.preconditionPassed is true
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 4a96efc..24bf0f4 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index b4c0596..4ac279f 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index e8465ba..353e0b9 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index a1fac44..4556738 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 7fc24ad..51ab947 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 9d90253..85b778b 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index f33447b..b05a627 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index f8b294c..1a3a8f0 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index cda012d..e2ea59b 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 41e1050..25b798a 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 12b7fec..9ae31db 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 36c2c55..fdb2b35 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 7c2eb3c..4a98606 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index b9f5baf..3a37a47 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index a1a810d..3d31fa7 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index b2ca3fa..af17c4f 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 5f5e664..9e1a624 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 48fa1ee..ebb81c3 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index d8a0a3e..40d76fa 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 973adbf..e8fdcbe 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 768bf7f..ea590f3 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index f0c229a..c0c3d20 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index f784a17..4547ddf 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index f8cddca..dbb200a 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 7fdbeca..c89fcbc 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 91bc4b7..0482bd2 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index da97d46..fa4769b 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 638a3f8..fcc4252 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 019f0f5..a78c885 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 796d558..06dcb1e 100644 (file)
@@ -4,7 +4,7 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE
 
 
 PASS ES5Harness.preconditionPassed is true
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 7a4d6be..497409b 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 786c7a9..577ae53 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 0c9a839..845154e 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 6710f11..4625c7f 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index ff8204e..616ad1c 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 6ebe497..1d1cd02 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index c754cfc..97495c1 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 66a1d2c..cb01ba2 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index b9dfd61..5ff183d 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 45ec5b6..f254852 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index b67aeb8..ead8fc2 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 3c9a892..d5e33eb 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 106e43c..0f89a5b 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 1fd1451..f774800 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 6e28e44..15e47a3 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 900e738..b62d673 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 80514b6..0876b33 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 0d82ead..7c74f7a 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 67ad827..d32811c 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 7a17cd3..a63557d 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 5c4fa12..f2eccd9 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 47b7691..eddaa50 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index d977e22..f349df4 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 519894c..2fa3fa1 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 4daad46..66cbd9f 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 5d8235b..52a7f14 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index e69dd92..96e54d9 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 02f38a1..d7e9e73 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 2574efd..0dcb279 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 2ce2165..de46187 100644 (file)
@@ -4,7 +4,7 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE
 
 
 PASS ES5Harness.preconditionPassed is true
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 43959c7..19653a0 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index cb9bc3f..bfe0fe3 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 324fd2b..1eb7ff0 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 3fa9ab2..c275b5d 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 191f024..741b4f3 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 65ad821..22b28cf 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 2769269..9893358 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 3b4bb04..95713af 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index d2b1ac9..adcfa46 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index fadb873..c22bed9 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index f8407cb..b2eb0b3 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 328bf1a..ff5c31b 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 1e5c0fc..1a141a9 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 1403728..6e76c49 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 2522fb8..17bf286 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 92b42bb..6f7bf4c 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 242e55e..21eb47a 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 0256655..9dbdb61 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 0ab033d..ad988e5 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 265fdd2..c154cea 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index ab332ad..03b3bae 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index efdbea6..95c5ecc 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 88703d0..bdbb25c 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index ec5ab27..cd22a8b 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 457948b..d6f6b5f 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 23aa4a4..59f9f08 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index ace99d8..ddc2cfa 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index e5ea0bc..7737e5a 100644 (file)
@@ -4,7 +4,7 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE
 
 
 PASS ES5Harness.preconditionPassed is true
-FAIL ES5Harness.testPassed should be true. Was false.
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index a9ad40e..a5f8cbd 100644 (file)
@@ -4,7 +4,7 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE
 
 
 PASS ES5Harness.preconditionPassed is true
-FAIL ES5Harness.testPassed should be true. Was false.
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index fe08fa7..8dd61ea 100644 (file)
@@ -4,7 +4,7 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE
 
 
 PASS ES5Harness.preconditionPassed is true
-FAIL ES5Harness.testPassed should be true. Was false.
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index ae61c91..feeec79 100644 (file)
@@ -4,7 +4,7 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE
 
 
 PASS ES5Harness.preconditionPassed is true
-FAIL ES5Harness.testPassed should be true. Was false.
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 0068c4e..269d0b1 100644 (file)
@@ -4,7 +4,7 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE
 
 
 PASS ES5Harness.preconditionPassed is true
-FAIL ES5Harness.testPassed should be true. Was false.
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index c24d5bf..22c405d 100644 (file)
@@ -4,7 +4,7 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE
 
 
 PASS ES5Harness.preconditionPassed is true
-FAIL ES5Harness.testPassed should be true. Was false.
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index c608309..3aa593b 100644 (file)
@@ -4,7 +4,7 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE
 
 
 PASS ES5Harness.preconditionPassed is true
-FAIL ES5Harness.testPassed should be true. Was false.
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 9933f6e..fa8069a 100644 (file)
@@ -3,7 +3,7 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
 FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
 PASS successfullyParsed is true
 
index 507c9d0..0bdbd79 100644 (file)
@@ -4,7 +4,7 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE
 
 
 PASS ES5Harness.preconditionPassed is true
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 5f62b53..01e94c1 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index c6d08d3..2829b1a 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 8eba7d1..96d687a 100644 (file)
@@ -4,7 +4,7 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE
 
 
 PASS ES5Harness.preconditionPassed is true
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index b75c878..a2f1e20 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 4bfca13..69707da 100644 (file)
@@ -3,8 +3,8 @@
 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
 
 
-FAIL ES5Harness.preconditionPassed should be true (of type boolean). Was undefined (of type undefined).
-FAIL ES5Harness.testPassed should be true (of type boolean). Was undefined (of type undefined).
+PASS ES5Harness.preconditionPassed is true
+PASS ES5Harness.testPassed is true
 PASS successfullyParsed is true
 
 TEST COMPLETE
index 972a7b2..a147b1d 100644 (file)
@@ -200,6 +200,7 @@ JSC_OBJECTS := $(addprefix $(intermediates)/runtime/, \
                                JSONObject.lut.h \
                                MathObject.lut.h \
                                NumberConstructor.lut.h \
+                               ObjectConstructor.lut.h \
                                RegExpConstructor.lut.h \
                                RegExpObject.lut.h \
                                StringPrototype.lut.h \
index 5a93259..68e612b 100644 (file)
@@ -1,3 +1,70 @@
+2011-03-03  Gavin Barraclough  <barraclough@apple.com>
+
+        Reviewed by Sam Weinig.
+
+        Bug 55736 - Implement seal/freeze/preventExtensions for normal object types.
+        Provide basic functionallity from section 15.2.4 of ECMA-262.
+        This support will need expanding to cover arrays, too.
+
+        Shows a 0.5% progression on SunSpidey, this seems to be due to changing
+        ObjectConstructor to use a static table.
+
+        * DerivedSources.make:
+        * JavaScriptCore.exp:
+        * interpreter/CallFrame.h:
+        (JSC::ExecState::objectConstructorTable):
+            Add a static table for ObjectConstructor.
+        * runtime/CommonIdentifiers.h:
+        * runtime/JSGlobalData.cpp:
+        (JSC::JSGlobalData::JSGlobalData):
+        (JSC::JSGlobalData::~JSGlobalData):
+            Add a static table for ObjectConstructor.
+        * runtime/JSGlobalData.h:
+        * runtime/JSGlobalObject.cpp:
+        (JSC::JSGlobalObject::reset):
+            Add a static table for ObjectConstructor.
+        * runtime/JSObject.cpp:
+        (JSC::JSObject::seal):
+        (JSC::JSObject::freeze):
+        (JSC::JSObject::preventExtensions):
+            Transition the object's structure.
+        (JSC::JSObject::defineOwnProperty):
+            Check isExtensible.
+        * runtime/JSObject.h:
+        (JSC::JSObject::isSealed):
+        (JSC::JSObject::isFrozen):
+        (JSC::JSObject::isExtensible):
+            These wrap method on structure.
+        (JSC::JSObject::putDirectInternal):
+            Check isExtensible.
+        * runtime/ObjectConstructor.cpp:
+        (JSC::ObjectConstructor::ObjectConstructor):
+        (JSC::ObjectConstructor::getOwnPropertySlot):
+        (JSC::ObjectConstructor::getOwnPropertyDescriptor):
+            Change ObjectConstructor to use a static table.
+        (JSC::objectConstructorSeal):
+        (JSC::objectConstructorFreeze):
+        (JSC::objectConstructorPreventExtensions):
+        (JSC::objectConstructorIsSealed):
+        (JSC::objectConstructorIsFrozen):
+        (JSC::objectConstructorIsExtensible):
+            Add new methods on Object.
+        * runtime/ObjectConstructor.h:
+        (JSC::ObjectConstructor::createStructure):
+        * runtime/Structure.cpp:
+        (JSC::Structure::Structure):
+            init/propagate  m_preventExtensions
+        (JSC::Structure::sealTransition):
+        (JSC::Structure::freezeTransition):
+        (JSC::Structure::preventExtensionsTransition):
+            transition the structure, materializing the property map, setting m_preventExtensions & changing attributes.
+        (JSC::Structure::isSealed):
+        (JSC::Structure::isFrozen):
+            check attributes to detect if object is sealed/frozen.
+        * runtime/Structure.h:
+        (JSC::Structure::isExtensible):
+            checks the m_preventExtensions flag.
+
 2011-03-04  Steve Falkenburg  <sfalken@apple.com>
 
         Reviewed by Jon Honeycutt.
index 0ff9cdf..8abb17c 100644 (file)
@@ -44,6 +44,7 @@ all : \
     Lexer.lut.h \
     MathObject.lut.h \
     NumberConstructor.lut.h \
+    ObjectConstructor.lut.h \
     RegExpConstructor.lut.h \
     RegExpJitTables.h \
     RegExpObject.lut.h \
index eac4dd9..061ae56 100644 (file)
@@ -19,6 +19,7 @@ LUT_FILES += \
     runtime/JSONObject.cpp \
     runtime/MathObject.cpp \
     runtime/NumberConstructor.cpp \
+    runtime/ObjectConstructor.cpp \
     runtime/RegExpConstructor.cpp \
     runtime/RegExpObject.cpp \
     runtime/StringPrototype.cpp
index babac89..0f77e41 100644 (file)
@@ -45,6 +45,7 @@ javascriptcore_built_nosources += \
        Source/JavaScriptCore/runtime/JSONObject.lut.h \
        Source/JavaScriptCore/runtime/MathObject.lut.h \
        Source/JavaScriptCore/runtime/NumberConstructor.lut.h \
+       Source/JavaScriptCore/runtime/ObjectConstructor.lut.h \
        Source/JavaScriptCore/runtime/RegExpConstructor.lut.h \
        Source/JavaScriptCore/runtime/RegExpObject.lut.h \
        Source/JavaScriptCore/runtime/StringPrototype.lut.h
index 6baa4d5..cd1a77f 100644 (file)
@@ -1,3 +1,4 @@
+__ZN3JSC22objectConstructorTableE
 _JSCheckScriptSyntax
 _JSClassCreate
 _JSClassRelease
index c06cc67..f6857d8 100644 (file)
                        };
                        buildConfigurationList = 149C277108902AFE008A9EFC /* Build configuration list for PBXProject "JavaScriptCore" */;
                        compatibilityVersion = "Xcode 3.1";
+                       developmentRegion = English;
                        hasScannedForEncodings = 1;
                        knownRegions = (
                                English,
index ce263a4..e73e13a 100644 (file)
@@ -80,6 +80,7 @@ namespace JSC  {
         static const HashTable* jsonTable(CallFrame* callFrame) { return callFrame->globalData().jsonTable; }
         static const HashTable* mathTable(CallFrame* callFrame) { return callFrame->globalData().mathTable; }
         static const HashTable* numberTable(CallFrame* callFrame) { return callFrame->globalData().numberTable; }
+        static const HashTable* objectConstructorTable(CallFrame* callFrame) { return callFrame->globalData().objectConstructorTable; }
         static const HashTable* regExpTable(CallFrame* callFrame) { return callFrame->globalData().regExpTable; }
         static const HashTable* regExpConstructorTable(CallFrame* callFrame) { return callFrame->globalData().regExpConstructorTable; }
         static const HashTable* stringTable(CallFrame* callFrame) { return callFrame->globalData().stringTable; }
index 6587a8f..478a639 100644 (file)
     macro(compile) \
     macro(configurable) \
     macro(constructor) \
-    macro(create) \
-    macro(defineProperty) \
-    macro(defineProperties) \
     macro(enumerable) \
     macro(eval) \
     macro(exec) \
     macro(fromCharCode) \
     macro(global) \
     macro(get) \
-    macro(getPrototypeOf) \
-    macro(getOwnPropertyDescriptor) \
-    macro(getOwnPropertyNames) \
     macro(hasOwnProperty) \
     macro(ignoreCase) \
     macro(index) \
     macro(input) \
     macro(isArray) \
     macro(isPrototypeOf) \
-    macro(keys) \
     macro(length) \
     macro(message) \
     macro(multiline) \
index 3e210d8..e25040c 100644 (file)
@@ -75,6 +75,7 @@ extern JSC_CONST_HASHTABLE HashTable jsonTable;
 extern JSC_CONST_HASHTABLE HashTable dateTable;
 extern JSC_CONST_HASHTABLE HashTable mathTable;
 extern JSC_CONST_HASHTABLE HashTable numberTable;
+extern JSC_CONST_HASHTABLE HashTable objectConstructorTable;
 extern JSC_CONST_HASHTABLE HashTable regExpTable;
 extern JSC_CONST_HASHTABLE HashTable regExpConstructorTable;
 extern JSC_CONST_HASHTABLE HashTable stringTable;
@@ -119,6 +120,7 @@ JSGlobalData::JSGlobalData(GlobalDataType globalDataType, ThreadStackType thread
     , jsonTable(fastNew<HashTable>(JSC::jsonTable))
     , mathTable(fastNew<HashTable>(JSC::mathTable))
     , numberTable(fastNew<HashTable>(JSC::numberTable))
+    , objectConstructorTable(fastNew<HashTable>(JSC::objectConstructorTable))
     , regExpTable(fastNew<HashTable>(JSC::regExpTable))
     , regExpConstructorTable(fastNew<HashTable>(JSC::regExpConstructorTable))
     , stringTable(fastNew<HashTable>(JSC::stringTable))
@@ -204,6 +206,7 @@ JSGlobalData::~JSGlobalData()
     jsonTable->deleteTable();
     mathTable->deleteTable();
     numberTable->deleteTable();
+    objectConstructorTable->deleteTable();
     regExpTable->deleteTable();
     regExpConstructorTable->deleteTable();
     stringTable->deleteTable();
@@ -213,6 +216,7 @@ JSGlobalData::~JSGlobalData()
     fastDelete(const_cast<HashTable*>(jsonTable));
     fastDelete(const_cast<HashTable*>(mathTable));
     fastDelete(const_cast<HashTable*>(numberTable));
+    fastDelete(const_cast<HashTable*>(objectConstructorTable));
     fastDelete(const_cast<HashTable*>(regExpTable));
     fastDelete(const_cast<HashTable*>(regExpConstructorTable));
     fastDelete(const_cast<HashTable*>(stringTable));
index f4f76c9..ee3e067 100644 (file)
@@ -139,6 +139,7 @@ namespace JSC {
         const HashTable* jsonTable;
         const HashTable* mathTable;
         const HashTable* numberTable;
+        const HashTable* objectConstructorTable;
         const HashTable* regExpTable;
         const HashTable* regExpConstructorTable;
         const HashTable* stringTable;
index 552fbf9..28fc07d 100644 (file)
@@ -221,7 +221,7 @@ void JSGlobalObject::reset(JSValue prototype)
 
     // Constructors
 
-    JSCell* objectConstructor = new (exec) ObjectConstructor(exec, this, ObjectConstructor::createStructure(d()->functionPrototype.get()), d()->objectPrototype.get(), d()->functionStructure.get());
+    JSCell* objectConstructor = new (exec) ObjectConstructor(exec, this, ObjectConstructor::createStructure(d()->functionPrototype.get()), d()->objectPrototype.get());
     JSCell* functionConstructor = new (exec) FunctionConstructor(exec, this, FunctionConstructor::createStructure(d()->functionPrototype.get()), d()->functionPrototype.get());
     JSCell* arrayConstructor = new (exec) ArrayConstructor(exec, this, ArrayConstructor::createStructure(d()->functionPrototype.get()), d()->arrayPrototype.get(), d()->functionStructure.get());
     JSCell* stringConstructor = new (exec) StringConstructor(exec, this, StringConstructor::createStructure(d()->functionPrototype.get()), d()->functionStructure.get(), d()->stringPrototype.get());
index 19569c7..fb8a967 100644 (file)
@@ -509,6 +509,22 @@ JSObject* JSObject::unwrappedObject()
     return this;
 }
 
+void JSObject::seal()
+{
+    setStructure(Structure::sealTransition(m_structure));
+}
+
+void JSObject::freeze()
+{
+    setStructure(Structure::freezeTransition(m_structure));
+}
+
+void JSObject::preventExtensions()
+{
+    if (isExtensible())
+        setStructure(Structure::preventExtensionsTransition(m_structure));
+}
+
 void JSObject::removeDirect(const Identifier& propertyName)
 {
     size_t offset;
@@ -645,6 +661,9 @@ bool JSObject::defineOwnProperty(ExecState* exec, const Identifier& propertyName
     // If we have a new property we can just put it on normally
     PropertyDescriptor current;
     if (!getOwnPropertyDescriptor(exec, propertyName, current)) {
+        // unless extensions are prevented!
+        if (!isExtensible())
+            return false;
         PropertyDescriptor oldDescriptor;
         oldDescriptor.setValue(jsUndefined());
         return putDescriptor(exec, this, propertyName, descriptor, descriptor.attributes(), oldDescriptor);
index 63725a4..2b4db43 100644 (file)
@@ -210,6 +210,13 @@ namespace JSC {
         virtual bool isStrictModeFunction() const { return false; }
         virtual bool isErrorInstance() const { return false; }
 
+        void seal();
+        void freeze();
+        void preventExtensions();
+        bool isSealed() { return m_structure->isSealed(); }
+        bool isFrozen() { return m_structure->isFrozen(); }
+        bool isExtensible() { return m_structure->isExtensible(); }
+
         virtual ComplType exceptionType() const { return Throw; }
 
         void allocatePropertyStorage(size_t oldSize, size_t newSize);
@@ -571,6 +578,9 @@ inline bool JSObject::putDirectInternal(JSGlobalData& globalData, const Identifi
             return true;
         }
 
+        if (!isExtensible())
+            return false;
+
         size_t currentCapacity = m_structure->propertyStorageCapacity();
         offset = m_structure->addPropertyWithoutTransition(propertyName, attributes, specificFunction);
         if (currentCapacity != m_structure->propertyStorageCapacity())
@@ -632,6 +642,9 @@ inline bool JSObject::putDirectInternal(JSGlobalData& globalData, const Identifi
         return true;
     }
 
+    if (!isExtensible())
+        return false;
+
     RefPtr<Structure> structure = Structure::addPropertyTransition(m_structure, propertyName, attributes, specificFunction, offset);
 
     if (currentCapacity != structure->propertyStorageCapacity())
index be7d1dd..5080ef8 100644 (file)
@@ -26,6 +26,7 @@
 #include "JSFunction.h"
 #include "JSArray.h"
 #include "JSGlobalObject.h"
+#include "Lookup.h"
 #include "ObjectPrototype.h"
 #include "PropertyDescriptor.h"
 #include "PropertyNameArray.h"
@@ -41,23 +42,56 @@ static EncodedJSValue JSC_HOST_CALL objectConstructorKeys(ExecState*);
 static EncodedJSValue JSC_HOST_CALL objectConstructorDefineProperty(ExecState*);
 static EncodedJSValue JSC_HOST_CALL objectConstructorDefineProperties(ExecState*);
 static EncodedJSValue JSC_HOST_CALL objectConstructorCreate(ExecState*);
+static EncodedJSValue JSC_HOST_CALL objectConstructorSeal(ExecState*);
+static EncodedJSValue JSC_HOST_CALL objectConstructorFreeze(ExecState*);
+static EncodedJSValue JSC_HOST_CALL objectConstructorPreventExtensions(ExecState*);
+static EncodedJSValue JSC_HOST_CALL objectConstructorIsSealed(ExecState*);
+static EncodedJSValue JSC_HOST_CALL objectConstructorIsFrozen(ExecState*);
+static EncodedJSValue JSC_HOST_CALL objectConstructorIsExtensible(ExecState*);
 
-ObjectConstructor::ObjectConstructor(ExecState* exec, JSGlobalObject* globalObject, NonNullPassRefPtr<Structure> structure, ObjectPrototype* objectPrototype, Structure* functionStructure)
+}
+
+#include "ObjectConstructor.lut.h"
+
+namespace JSC {
+
+const ClassInfo ObjectConstructor::s_info = { "Function", &InternalFunction::s_info, 0, ExecState::objectConstructorTable };
+
+/* Source for ObjectConstructor.lut.h
+@begin objectConstructorTable
+  getPrototypeOf            objectConstructorGetPrototypeOf             DontEnum|Function 1
+  getOwnPropertyDescriptor  objectConstructorGetOwnPropertyDescriptor   DontEnum|Function 2
+  getOwnPropertyNames       objectConstructorGetOwnPropertyNames        DontEnum|Function 1
+  keys                      objectConstructorKeys                       DontEnum|Function 1
+  defineProperty            objectConstructorDefineProperty             DontEnum|Function 3
+  defineProperties          objectConstructorDefineProperties           DontEnum|Function 2
+  create                    objectConstructorCreate                     DontEnum|Function 2
+  seal                      objectConstructorSeal                       DontEnum|Function 1
+  freeze                    objectConstructorFreeze                     DontEnum|Function 1
+  preventExtensions         objectConstructorPreventExtensions          DontEnum|Function 1
+  isSealed                  objectConstructorIsSealed                   DontEnum|Function 1
+  isFrozen                  objectConstructorIsFrozen                   DontEnum|Function 1
+  isExtensible              objectConstructorIsExtensible               DontEnum|Function 1
+@end
+*/
+
+ObjectConstructor::ObjectConstructor(ExecState* exec, JSGlobalObject* globalObject, NonNullPassRefPtr<Structure> structure, ObjectPrototype* objectPrototype)
     : InternalFunction(&exec->globalData(), globalObject, structure, Identifier(exec, "Object"))
 {
     // ECMA 15.2.3.1
     putDirectWithoutTransition(exec->globalData(), exec->propertyNames().prototype, objectPrototype, DontEnum | DontDelete | ReadOnly);
-    
     // no. of arguments for constructor
     putDirectWithoutTransition(exec->globalData(), exec->propertyNames().length, jsNumber(1), ReadOnly | DontEnum | DontDelete);
-    
-    putDirectFunctionWithoutTransition(exec, new (exec) JSFunction(exec, globalObject, functionStructure, 1, exec->propertyNames().getPrototypeOf, objectConstructorGetPrototypeOf), DontEnum);
-    putDirectFunctionWithoutTransition(exec, new (exec) JSFunction(exec, globalObject, functionStructure, 2, exec->propertyNames().getOwnPropertyDescriptor, objectConstructorGetOwnPropertyDescriptor), DontEnum);
-    putDirectFunctionWithoutTransition(exec, new (exec) JSFunction(exec, globalObject, functionStructure, 1, exec->propertyNames().getOwnPropertyNames, objectConstructorGetOwnPropertyNames), DontEnum);
-    putDirectFunctionWithoutTransition(exec, new (exec) JSFunction(exec, globalObject, functionStructure, 1, exec->propertyNames().keys, objectConstructorKeys), DontEnum);
-    putDirectFunctionWithoutTransition(exec, new (exec) JSFunction(exec, globalObject, functionStructure, 3, exec->propertyNames().defineProperty, objectConstructorDefineProperty), DontEnum);
-    putDirectFunctionWithoutTransition(exec, new (exec) JSFunction(exec, globalObject, functionStructure, 2, exec->propertyNames().defineProperties, objectConstructorDefineProperties), DontEnum);
-    putDirectFunctionWithoutTransition(exec, new (exec) JSFunction(exec, globalObject, functionStructure, 2, exec->propertyNames().create, objectConstructorCreate), DontEnum);
+}
+
+bool ObjectConstructor::getOwnPropertySlot(ExecState* exec, const Identifier& propertyName, PropertySlot &slot)
+{
+    return getStaticFunctionSlot<JSObject>(exec, ExecState::objectConstructorTable(exec), this, propertyName, slot);
+}
+
+bool ObjectConstructor::getOwnPropertyDescriptor(ExecState* exec, const Identifier& propertyName, PropertyDescriptor& descriptor)
+{
+    return getStaticFunctionDescriptor<JSObject>(exec, ExecState::objectConstructorTable(exec), this, propertyName, descriptor);
 }
 
 // ECMA 15.2.2
@@ -316,4 +350,55 @@ EncodedJSValue JSC_HOST_CALL objectConstructorCreate(ExecState* exec)
     return JSValue::encode(defineProperties(exec, newObject, asObject(exec->argument(1))));
 }
 
+EncodedJSValue JSC_HOST_CALL objectConstructorSeal(ExecState* exec)
+{
+    JSValue obj = exec->argument(0);
+    if (!obj.isObject())
+        return throwVMError(exec, createTypeError(exec, "Object.seal can only be called on Objects."));
+    asObject(obj)->seal();
+    return JSValue::encode(obj);
+}
+
+EncodedJSValue JSC_HOST_CALL objectConstructorFreeze(ExecState* exec)
+{
+    JSValue obj = exec->argument(0);
+    if (!obj.isObject())
+        return throwVMError(exec, createTypeError(exec, "Object.freeze can only be called on Objects."));
+    asObject(obj)->freeze();
+    return JSValue::encode(obj);
+}
+
+EncodedJSValue JSC_HOST_CALL objectConstructorPreventExtensions(ExecState* exec)
+{
+    JSValue obj = exec->argument(0);
+    if (!obj.isObject())
+        return throwVMError(exec, createTypeError(exec, "Object.preventExtensions can only be called on Objects."));
+    asObject(obj)->preventExtensions();
+    return JSValue::encode(obj);
+}
+
+EncodedJSValue JSC_HOST_CALL objectConstructorIsSealed(ExecState* exec)
+{
+    JSValue obj = exec->argument(0);
+    if (!obj.isObject())
+        return throwVMError(exec, createTypeError(exec, "Object.isSealed can only be called on Objects."));
+    return JSValue::encode(jsBoolean(asObject(obj)->isSealed()));
+}
+
+EncodedJSValue JSC_HOST_CALL objectConstructorIsFrozen(ExecState* exec)
+{
+    JSValue obj = exec->argument(0);
+    if (!obj.isObject())
+        return throwVMError(exec, createTypeError(exec, "Object.isFrozen can only be called on Objects."));
+    return JSValue::encode(jsBoolean(asObject(obj)->isFrozen()));
+}
+
+EncodedJSValue JSC_HOST_CALL objectConstructorIsExtensible(ExecState* exec)
+{
+    JSValue obj = exec->argument(0);
+    if (!obj.isObject())
+        return throwVMError(exec, createTypeError(exec, "Object.isExtensible can only be called on Objects."));
+    return JSValue::encode(jsBoolean(asObject(obj)->isExtensible()));
+}
+
 } // namespace JSC
index d477156..895f988 100644 (file)
@@ -29,7 +29,20 @@ namespace JSC {
 
     class ObjectConstructor : public InternalFunction {
     public:
-        ObjectConstructor(ExecState*, JSGlobalObject*, NonNullPassRefPtr<Structure>, ObjectPrototype*, Structure* functionStructure);
+        ObjectConstructor(ExecState*, JSGlobalObject*, NonNullPassRefPtr<Structure>, ObjectPrototype*);
+
+        virtual bool getOwnPropertySlot(ExecState*, const Identifier&, PropertySlot&);
+        virtual bool getOwnPropertyDescriptor(ExecState*, const Identifier&, PropertyDescriptor&);
+
+        static const ClassInfo s_info;
+
+        static PassRefPtr<Structure> createStructure(JSValue prototype)
+        {
+            return Structure::create(prototype, TypeInfo(ObjectType, StructureFlags), AnonymousSlotCount, &s_info);
+        }
+
+    protected:
+        static const unsigned StructureFlags = OverridesGetOwnPropertySlot | InternalFunction::StructureFlags;
 
     private:
         virtual ConstructType getConstructData(ConstructData&);
index 43c6bae..829e3db 100644 (file)
@@ -203,6 +203,7 @@ Structure::Structure(JSValue prototype, const TypeInfo& typeInfo, unsigned anony
     , m_attributesInPrevious(0)
     , m_specificFunctionThrashCount(0)
     , m_anonymousSlotCount(anonymousSlotCount)
+    , m_preventExtensions(false)
 {
     ASSERT(m_prototype);
     ASSERT(m_prototype->isObject() || m_prototype->isNull());
@@ -236,6 +237,7 @@ Structure::Structure(const Structure* previous)
     , m_attributesInPrevious(0)
     , m_specificFunctionThrashCount(previous->m_specificFunctionThrashCount)
     , m_anonymousSlotCount(previous->anonymousSlotCount())
+    , m_preventExtensions(previous->m_preventExtensions)
 {
     ASSERT(m_prototype);
     ASSERT(m_prototype->isObject() || m_prototype->isNull());
@@ -519,6 +521,86 @@ PassRefPtr<Structure> Structure::toUncacheableDictionaryTransition(Structure* st
     return toDictionaryTransition(structure, UncachedDictionaryKind);
 }
 
+// In future we may want to cache this transition.
+PassRefPtr<Structure> Structure::sealTransition(Structure* structure)
+{
+    RefPtr<Structure> transition = preventExtensionsTransition(structure);
+
+    if (transition->m_propertyTable) {
+        PropertyTable::iterator end = transition->m_propertyTable->end();
+        for (PropertyTable::iterator iter = transition->m_propertyTable->begin(); iter != end; ++iter)
+            iter->attributes |= DontDelete;
+    }
+
+    return transition.release();
+}
+
+// In future we may want to cache this transition.
+PassRefPtr<Structure> Structure::freezeTransition(Structure* structure)
+{
+    RefPtr<Structure> transition = preventExtensionsTransition(structure);
+
+    if (transition->m_propertyTable) {
+        PropertyTable::iterator end = transition->m_propertyTable->end();
+        for (PropertyTable::iterator iter = transition->m_propertyTable->begin(); iter != end; ++iter)
+            iter->attributes |= (DontDelete | ReadOnly);
+    }
+
+    return transition.release();
+}
+
+// In future we may want to cache this transition.
+PassRefPtr<Structure> Structure::preventExtensionsTransition(Structure* structure)
+{
+    RefPtr<Structure> transition = create(structure);
+
+    // Don't set m_offset, as one can not transition to this.
+
+    structure->materializePropertyMapIfNecessary();
+    transition->m_propertyTable = structure->copyPropertyTable();
+    transition->m_isPinnedPropertyTable = true;
+    transition->m_preventExtensions = true;
+
+    ASSERT(structure->anonymousSlotCount() == transition->anonymousSlotCount());
+    return transition.release();
+}
+
+// In future we may want to cache this property.
+bool Structure::isSealed()
+{
+    if (isExtensible())
+        return false;
+
+    materializePropertyMapIfNecessary();
+    if (!m_propertyTable)
+        return true;
+
+    PropertyTable::iterator end = m_propertyTable->end();
+    for (PropertyTable::iterator iter = m_propertyTable->begin(); iter != end; ++iter) {
+        if ((iter->attributes & DontDelete) != DontDelete)
+            return false;
+    }
+    return true;
+}
+
+// In future we may want to cache this property.
+bool Structure::isFrozen()
+{
+    if (isExtensible())
+        return false;
+
+    materializePropertyMapIfNecessary();
+    if (!m_propertyTable)
+        return true;
+
+    PropertyTable::iterator end = m_propertyTable->end();
+    for (PropertyTable::iterator iter = m_propertyTable->begin(); iter != end; ++iter) {
+        if ((iter->attributes & (DontDelete | ReadOnly)) != (DontDelete | ReadOnly))
+            return false;
+    }
+    return true;
+}
+
 PassRefPtr<Structure> Structure::flattenDictionaryStructure(JSGlobalData& globalData, JSObject* object)
 {
     ASSERT(isDictionary());
index fa2ecaf..bf27334 100644 (file)
@@ -76,6 +76,13 @@ namespace JSC {
         static PassRefPtr<Structure> getterSetterTransition(Structure*);
         static PassRefPtr<Structure> toCacheableDictionaryTransition(Structure*);
         static PassRefPtr<Structure> toUncacheableDictionaryTransition(Structure*);
+        static PassRefPtr<Structure> sealTransition(Structure*);
+        static PassRefPtr<Structure> freezeTransition(Structure*);
+        static PassRefPtr<Structure> preventExtensionsTransition(Structure*);
+
+        bool isSealed();
+        bool isFrozen();
+        bool isExtensible() const { return !m_preventExtensions; }
 
         PassRefPtr<Structure> flattenDictionaryStructure(JSGlobalData&, JSObject*);
 
@@ -216,7 +223,8 @@ namespace JSC {
 #endif
         unsigned m_specificFunctionThrashCount : 2;
         unsigned m_anonymousSlotCount : 5;
-        // 5 free bits
+        unsigned m_preventExtensions : 1;
+        // 4 free bits
     };
 
     inline size_t Structure::get(const Identifier& propertyName)