Revert "Make window.{undefined,NaN,Infinity} read-only"

This reverts r8766.

TEST=WebKit LayoutTests green again.

Review URL: http://codereview.chromium.org/7562005

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@8800 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent 4487f8c0
...@@ -1172,7 +1172,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_DeclareGlobals) { ...@@ -1172,7 +1172,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_DeclareGlobals) {
return ThrowRedeclarationError(isolate, "const", name); return ThrowRedeclarationError(isolate, "const", name);
} }
// Otherwise, we check for locally conflicting declarations. // Otherwise, we check for locally conflicting declarations.
if (is_local && is_const_property) { if (is_local && (is_read_only || is_const_property)) {
const char* type = (is_read_only) ? "const" : "var"; const char* type = (is_read_only) ? "const" : "var";
return ThrowRedeclarationError(isolate, type, name); return ThrowRedeclarationError(isolate, type, name);
} }
...@@ -1406,11 +1406,12 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_InitializeVarGlobal) { ...@@ -1406,11 +1406,12 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_InitializeVarGlobal) {
// make sure to introduce it. // make sure to introduce it.
found = false; found = false;
} else if ((intercepted & READ_ONLY) != 0) { } else if ((intercepted & READ_ONLY) != 0) {
// The property is present, but read-only, so we ignore the // The property is present, but read-only. Since we're trying to
// redeclaration. However if we found readonly property // overwrite it with a variable declaration we must throw a
// re-declaration error. However if we found readonly property
// on one of hidden prototypes, just shadow it. // on one of hidden prototypes, just shadow it.
if (real_holder != isolate->context()->global()) break; if (real_holder != isolate->context()->global()) break;
return isolate->heap()->undefined_value(); return ThrowRedeclarationError(isolate, "const", name);
} }
} }
......
...@@ -162,14 +162,13 @@ function GlobalEval(x) { ...@@ -162,14 +162,13 @@ function GlobalEval(x) {
function SetupGlobal() { function SetupGlobal() {
// ECMA 262 - 15.1.1.1. // ECMA 262 - 15.1.1.1.
%SetProperty(global, "NaN", $NaN, DONT_ENUM | DONT_DELETE | READ_ONLY); %SetProperty(global, "NaN", $NaN, DONT_ENUM | DONT_DELETE);
// ECMA-262 - 15.1.1.2. // ECMA-262 - 15.1.1.2.
%SetProperty(global, "Infinity", 1/0, DONT_ENUM | DONT_DELETE | READ_ONLY); %SetProperty(global, "Infinity", 1/0, DONT_ENUM | DONT_DELETE);
// ECMA-262 - 15.1.1.3. // ECMA-262 - 15.1.1.3.
%SetProperty(global, "undefined", void 0, %SetProperty(global, "undefined", void 0, DONT_ENUM | DONT_DELETE);
DONT_ENUM | DONT_DELETE | READ_ONLY);
// Setup non-enumerable function on the global object. // Setup non-enumerable function on the global object.
InstallFunctions(global, DONT_ENUM, $Array( InstallFunctions(global, DONT_ENUM, $Array(
......
...@@ -498,7 +498,7 @@ TEST(Reappearing) { ...@@ -498,7 +498,7 @@ TEST(Reappearing) {
0, 0,
2, // var declaration + const initialization 2, // var declaration + const initialization
4, // 2 x declaration + 2 x initialization 4, // 2 x declaration + 2 x initialization
EXPECT_RESULT, Undefined()); // x = 0 fails for a const. EXPECT_EXCEPTION); // x has already been declared!
} }
} }
......
...@@ -41,6 +41,16 @@ chapter10/10.4/10.4.2/10.4.2-2-c-1: FAIL_OK ...@@ -41,6 +41,16 @@ chapter10/10.4/10.4.2/10.4.2-2-c-1: FAIL_OK
# We are compatible with Safari and Firefox. # We are compatible with Safari and Firefox.
chapter11/11.1/11.1.5: UNIMPLEMENTED chapter11/11.1/11.1.5: UNIMPLEMENTED
# We do not have a global object called 'global' as required by tests.
chapter15/15.1: FAIL_OK
# NaN is writable. We are compatible with JSC.
chapter15/15.2/15.2.3/15.2.3.3/15.2.3.3-4-178: FAIL_OK
# Infinity is writable. We are compatible with JSC.
chapter15/15.2/15.2.3/15.2.3.3/15.2.3.3-4-179: FAIL_OK
# undefined is writable. We are compatible with JSC.
chapter15/15.2/15.2.3/15.2.3.3/15.2.3.3-4-180: FAIL_OK
# Our Function object has an "arguments" property which is used as a # Our Function object has an "arguments" property which is used as a
# non-property in the test. # non-property in the test.
chapter15/15.2/15.2.3/15.2.3.3/15.2.3.3-4-183: FAIL_OK chapter15/15.2/15.2.3/15.2.3.3/15.2.3.3-4-183: FAIL_OK
......
...@@ -76,8 +76,6 @@ array = [ ...@@ -76,8 +76,6 @@ array = [
"execScript"]; "execScript"];
CheckEcmaSemantics(this, array, "Global"); CheckEcmaSemantics(this, array, "Global");
CheckReadOnlyAttr(this, "Infinity"); CheckReadOnlyAttr(this, "Infinity");
CheckReadOnlyAttr(this, "NaN");
CheckReadOnlyAttr(this, "undefined");
array = ["exec", "test", "toString", "compile"]; array = ["exec", "test", "toString", "compile"];
CheckEcmaSemantics(RegExp.prototype, array, "RegExp prototype"); CheckEcmaSemantics(RegExp.prototype, array, "RegExp prototype");
...@@ -191,7 +189,7 @@ function CheckReadOnlyAttr(type, prop) { ...@@ -191,7 +189,7 @@ function CheckReadOnlyAttr(type, prop) {
assertFalse(deleted, "delete operator returned true: " + prop); assertFalse(deleted, "delete operator returned true: " + prop);
assertTrue(type.hasOwnProperty(prop), "not there after delete: " + prop); assertTrue(type.hasOwnProperty(prop), "not there after delete: " + prop);
type[prop] = "foo"; type[prop] = "foo";
assertEquals(old, type[prop], "overwritable: " + prop); assertEquals("foo", type[prop], "overwritable: " + prop);
} }
print("OK"); print("OK");
...@@ -178,17 +178,6 @@ S15.5.4.13_A1_T3: FAIL_OK ...@@ -178,17 +178,6 @@ S15.5.4.13_A1_T3: FAIL_OK
S15.5.4.14_A1_T3: FAIL_OK S15.5.4.14_A1_T3: FAIL_OK
S15.5.4.15_A1_T3: FAIL_OK S15.5.4.15_A1_T3: FAIL_OK
# NaN, Infinity and undefined are read-only according to ES5.
S15.1.1.1_A2_T1: FAIL_OK # NaN
S15.1.1.1_A2_T2: FAIL_OK # NaN
S15.1.1.2_A2_T1: FAIL_OK # Infinity
# S15.1.1.2_A2_T2 would fail if it weren't bogus in r97. sputnik bug #45.
S15.1.1.3_A2_T1: FAIL_OK # undefined
S15.1.1.3_A2_T2: FAIL_OK # undefined
S8.1_A3: FAIL_OK # undefined (comment is correct, test itself is bogus/ES3)
S8.5_A4: FAIL_OK # NaN
S8.5_A10: FAIL_OK # Infinity
##################### SKIPPED TESTS ##################### ##################### SKIPPED TESTS #####################
# These tests take a looong time to run in debug mode. # These tests take a looong time to run in debug mode.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment