From c8aea7a184a250882fdf3a6e0cea61110e05bff3 Mon Sep 17 00:00:00 2001 From: "rossberg@chromium.org" Date: Fri, 20 Apr 2012 13:35:09 +0000 Subject: [PATCH] Put new global var semantics behind a flag until WebKit tests are cleaned up. R=mstarzinger@chromium.org BUG= TEST= Review URL: https://chromiumcodereview.appspot.com/10163003 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@11402 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/flag-definitions.h | 2 ++ src/runtime.cc | 5 ++++- test/cctest/test-api.cc | 1 + test/cctest/test-decls.cc | 2 ++ test/mjsunit/declare-locally.js | 2 ++ test/mjsunit/regress/regress-1119.js | 2 ++ test/mjsunit/regress/regress-115452.js | 2 ++ test/mjsunit/regress/regress-1170.js | 2 ++ 8 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/flag-definitions.h b/src/flag-definitions.h index 101900ea27..3f4ead8f22 100644 --- a/src/flag-definitions.h +++ b/src/flag-definitions.h @@ -132,6 +132,8 @@ public: // Flags for language modes and experimental language features. DEFINE_bool(use_strict, false, "enforce strict mode") +DEFINE_bool(es52_globals, false, + "activate new semantics for global var declarations") DEFINE_bool(harmony_typeof, false, "enable harmony semantics for typeof") DEFINE_bool(harmony_scoping, false, "enable harmony block scoping") diff --git a/src/runtime.cc b/src/runtime.cc index a344b28e0a..1772fb7913 100644 --- a/src/runtime.cc +++ b/src/runtime.cc @@ -1300,7 +1300,10 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_DeclareGlobals) { // value of the variable if the property is already there. // Do the lookup locally only, see ES5 errata. LookupResult lookup(isolate); - global->LocalLookup(*name, &lookup); + if (FLAG_es52_globals) + global->LocalLookup(*name, &lookup); + else + global->Lookup(*name, &lookup); if (lookup.IsProperty()) { // We found an existing property. Unless it was an interceptor // that claims the property is absent, skip this declaration. diff --git a/test/cctest/test-api.cc b/test/cctest/test-api.cc index 9155993612..d841baf6a8 100644 --- a/test/cctest/test-api.cc +++ b/test/cctest/test-api.cc @@ -12483,6 +12483,7 @@ THREADED_TEST(GetCallingContext) { // Check that a variable declaration with no explicit initialization // value does shadow an existing property in the prototype chain. THREADED_TEST(InitGlobalVarInProtoChain) { + i::FLAG_es52_globals = true; v8::HandleScope scope; LocalContext context; // Introduce a variable in the prototype chain. diff --git a/test/cctest/test-decls.cc b/test/cctest/test-decls.cc index e3d61582c5..e6bdc9f505 100644 --- a/test/cctest/test-decls.cc +++ b/test/cctest/test-decls.cc @@ -521,6 +521,7 @@ class ExistsInPrototypeContext: public DeclarationContext { TEST(ExistsInPrototype) { + i::FLAG_es52_globals = true; HandleScope scope; // Sanity check to make sure that the holder of the interceptor @@ -583,6 +584,7 @@ class AbsentInPrototypeContext: public DeclarationContext { TEST(AbsentInPrototype) { + i::FLAG_es52_globals = true; HandleScope scope; { AbsentInPrototypeContext context; diff --git a/test/mjsunit/declare-locally.js b/test/mjsunit/declare-locally.js index 458ac7e9dc..20bfe6da1f 100644 --- a/test/mjsunit/declare-locally.js +++ b/test/mjsunit/declare-locally.js @@ -33,6 +33,8 @@ // This exercises the code in runtime.cc in // DeclareGlobal...Locally(). +// Flags: --es52_globals + this.__proto__.foo = 42; this.__proto__.bar = 87; diff --git a/test/mjsunit/regress/regress-1119.js b/test/mjsunit/regress/regress-1119.js index 1163ca042e..5fd8f369b1 100644 --- a/test/mjsunit/regress/regress-1119.js +++ b/test/mjsunit/regress/regress-1119.js @@ -28,6 +28,8 @@ // Test runtime declaration of properties with var which are intercepted // by JS accessors. +// Flags: --es52_globals + this.__defineSetter__("x", function() { hasBeenInvoked = true; }); this.__defineSetter__("y", function() { throw 'exception'; }); diff --git a/test/mjsunit/regress/regress-115452.js b/test/mjsunit/regress/regress-115452.js index f745e1bad3..dc711581e9 100644 --- a/test/mjsunit/regress/regress-115452.js +++ b/test/mjsunit/regress/regress-115452.js @@ -27,6 +27,8 @@ // Test that a function declaration cannot overwrite a read-only property. +// Flags: --es52_globals + function foobl() {} assertTrue(typeof this.foobl == "function"); assertTrue(Object.getOwnPropertyDescriptor(this, "foobl").writable); diff --git a/test/mjsunit/regress/regress-1170.js b/test/mjsunit/regress/regress-1170.js index eb3f3c71b7..8c5f6f8ab4 100644 --- a/test/mjsunit/regress/regress-1170.js +++ b/test/mjsunit/regress/regress-1170.js @@ -25,6 +25,8 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// Flags: --es52_globals + var setter_value = 0; this.__defineSetter__("a", function(v) { setter_value = v; });