Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(35)

Unified Diff: test/mjsunit/const-redecl.js

Issue 7811015: Change global const handling to silently ignore redeclarations (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 9 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: test/mjsunit/const-redecl.js
diff --git a/test/mjsunit/const-redecl.js b/test/mjsunit/const-redecl.js
index 26d765b97a312c77f5d6a56dac545383bd20a4eb..b57878fd7715c9749eb338faa0fbfd09b1a92ef0 100644
--- a/test/mjsunit/const-redecl.js
+++ b/test/mjsunit/const-redecl.js
@@ -98,7 +98,8 @@ function TestAll(expected,s,opt_e) {
var msg = s;
if (opt_e) { e = opt_e; msg += "; " + opt_e; }
assertEquals(expected, TestLocal(s,e), "local:'" + msg + "'");
- assertEquals(expected, TestGlobal(s,e), "global:'" + msg + "'");
+ // Redeclarations of global consts do not throw, they are silently ignored.
+ assertEquals(42, TestGlobal(s, 42), "global:'" + msg + "'");
assertEquals(expected, TestContext(s,e), "context:'" + msg + "'");
}
@@ -218,3 +219,41 @@ TestAll(0, "var a,b,c,d,e,f,g,h; " + loop, "x");
// Test that const inside with behaves correctly.
TestAll(87, "with ({x:42}) { const x = 87; }", "x");
TestAll(undefined, "with ({x:42}) { const x; }", "x");
+
+
+// Additional tests for how various combinations of re-declarations affect
+// the values of the var/const in question.
+try {
+ eval("var undefined;");
+} catch (ex) {
+ assertUnreachable("undefined (1) has thrown");
+}
+
+var original_undef = undefined;
+var undefined = 1; // Should be silently ignored.
+assertEquals(original_undef, undefined, "undefined got overwritten");
+undefined = original_undef;
+
+var a; const a; const a = 1;
+// According to ES5 10.5.8.c, the assignment "= 1" should be ignored.
+assertEquals(a, undefined, "a has wrong value");
+a = 2;
+assertEquals(a, 2, "a should be writable");
+
+var b = 1; const b = 2;
+assertEquals(b, 1, "b has wrong value");
+
+var c = 1; const c = 2; const c = 3;
+assertEquals(c, 1, "c has wrong value");
+
+const d = 1; const d = 2;
+assertEquals(d, 1, "d has wrong value");
+
+const e = 1; var e = 2;
+assertEquals(e, 1, "e has wrong value");
+
+const f = 1; const f;
+assertEquals(f, 1, "f has wrong value");
+
+var g; const g = 1;
+assertEquals(g, undefined, "g has wrong value");

Powered by Google App Engine
This is Rietveld 408576698