Add support for global
authorkeith_miller@apple.com <keith_miller@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 21 Dec 2016 04:04:50 +0000 (04:04 +0000)
committerkeith_miller@apple.com <keith_miller@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 21 Dec 2016 04:04:50 +0000 (04:04 +0000)
https://bugs.webkit.org/show_bug.cgi?id=165171

Reviewed by Filip Pizlo.

JSTests:

* stress/global.js: Added.

Source/JavaScriptCore:

This patch adds spport for the global property on the global object.
The global property spec is in stage three and is quite simple.
For reference: http://tc39.github.io/proposal-global/

* runtime/JSGlobalObject.cpp:

LayoutTests:

Fix getOwnPropertyDescriptor test.

* js/resources/getOwnPropertyDescriptor.js:

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

JSTests/ChangeLog
JSTests/stress/global.js [new file with mode: 0644]
LayoutTests/ChangeLog
LayoutTests/js/dom/getOwnPropertyDescriptor-expected.txt
LayoutTests/js/resources/getOwnPropertyDescriptor.js
Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/runtime/JSGlobalObject.cpp

index 1346ed3..025e60f 100644 (file)
@@ -1,3 +1,12 @@
+2016-12-20  Keith Miller  <keith_miller@apple.com>
+
+        Add support for global
+        https://bugs.webkit.org/show_bug.cgi?id=165171
+
+        Reviewed by Filip Pizlo.
+
+        * stress/global.js: Added.
+
 2016-12-20  JF Bastien  <jfbastien@apple.com>
 
         WebAssembly API: implement WebAssembly.LinkError
diff --git a/JSTests/stress/global.js b/JSTests/stress/global.js
new file mode 100644 (file)
index 0000000..3e87c15
--- /dev/null
@@ -0,0 +1,20 @@
+// This file tests the global property on the global object.
+
+let g = new Function("return this")();
+
+if (g !== global)
+    throw new Error("global returned the wrong value");
+
+for (name in g) {
+    if (name === "global")
+        throw new Error("global should not be enumerable")
+}
+
+
+global = 5;
+if (global !== 5)
+    throw new Error("global should be assignable");
+
+delete global;
+if ("global" in g)
+    throw new Error("global should be configurable");
index fa4a7ba..2ed1322 100644 (file)
@@ -1,3 +1,14 @@
+2016-12-20  Keith Miller  <keith_miller@apple.com>
+
+        Add support for global
+        https://bugs.webkit.org/show_bug.cgi?id=165171
+
+        Reviewed by Filip Pizlo.
+
+        Fix getOwnPropertyDescriptor test.
+
+        * js/resources/getOwnPropertyDescriptor.js:
+
 2016-12-20  Ryan Haddad  <ryanhaddad@apple.com>
 
         Rebaseline js/dom/global-constructors-attributes.html for mac-wk1.
index dd05fb6..f3d629b 100644 (file)
@@ -94,42 +94,42 @@ PASS Object.getOwnPropertyDescriptor(Math.sin, 'name').hasOwnProperty('get') is
 PASS Object.getOwnPropertyDescriptor(Math.sin, 'name').hasOwnProperty('set') is false
 PASS Object.getOwnPropertyDescriptor(Math.sin, 'name').enumerable is false
 PASS Object.getOwnPropertyDescriptor(Math.sin, 'name').configurable is true
-PASS Object.getOwnPropertyDescriptor(global, 'global').value is global
-PASS Object.getOwnPropertyDescriptor(global, 'global').hasOwnProperty('get') is false
-PASS Object.getOwnPropertyDescriptor(global, 'global').hasOwnProperty('set') is false
-PASS Object.getOwnPropertyDescriptor(global, 'global').enumerable is true
-PASS Object.getOwnPropertyDescriptor(global, 'global').configurable is false
-PASS Object.getOwnPropertyDescriptor(global, 'undefined').value is undefined
-PASS Object.getOwnPropertyDescriptor(global, 'undefined').hasOwnProperty('get') is false
-PASS Object.getOwnPropertyDescriptor(global, 'undefined').hasOwnProperty('set') is false
-PASS Object.getOwnPropertyDescriptor(global, 'undefined').enumerable is false
-PASS Object.getOwnPropertyDescriptor(global, 'undefined').configurable is false
-PASS Object.getOwnPropertyDescriptor(global, 'NaN').value is NaN
-PASS Object.getOwnPropertyDescriptor(global, 'NaN').hasOwnProperty('get') is false
-PASS Object.getOwnPropertyDescriptor(global, 'NaN').hasOwnProperty('set') is false
-PASS Object.getOwnPropertyDescriptor(global, 'NaN').enumerable is false
-PASS Object.getOwnPropertyDescriptor(global, 'NaN').configurable is false
-PASS Object.getOwnPropertyDescriptor(global, 'Infinity').value is Infinity
-PASS Object.getOwnPropertyDescriptor(global, 'Infinity').hasOwnProperty('get') is false
-PASS Object.getOwnPropertyDescriptor(global, 'Infinity').hasOwnProperty('set') is false
-PASS Object.getOwnPropertyDescriptor(global, 'Infinity').enumerable is false
-PASS Object.getOwnPropertyDescriptor(global, 'Infinity').configurable is false
-PASS Object.getOwnPropertyDescriptor(global, 'window').get is globalWindowGetter
-PASS Object.getOwnPropertyDescriptor(global, 'window').set is undefined
-PASS Object.getOwnPropertyDescriptor(global, 'window').hasOwnProperty('value') is false
-PASS Object.getOwnPropertyDescriptor(global, 'window').hasOwnProperty('writable') is false
-PASS Object.getOwnPropertyDescriptor(global, 'window').enumerable is true
-PASS Object.getOwnPropertyDescriptor(global, 'window').configurable is false
-PASS Object.getOwnPropertyDescriptor(global, 'XMLHttpRequest').value is XMLHttpRequest
-PASS Object.getOwnPropertyDescriptor(global, 'XMLHttpRequest').hasOwnProperty('get') is false
-PASS Object.getOwnPropertyDescriptor(global, 'XMLHttpRequest').hasOwnProperty('set') is false
-PASS Object.getOwnPropertyDescriptor(global, 'XMLHttpRequest').enumerable is false
-PASS Object.getOwnPropertyDescriptor(global, 'XMLHttpRequest').configurable is true
-PASS Object.getOwnPropertyDescriptor(global, 0).value is global[0]
-PASS Object.getOwnPropertyDescriptor(global, 0).hasOwnProperty('get') is false
-PASS Object.getOwnPropertyDescriptor(global, 0).hasOwnProperty('set') is false
-PASS Object.getOwnPropertyDescriptor(global, 0).enumerable is false
-PASS Object.getOwnPropertyDescriptor(global, 0).configurable is false
+PASS Object.getOwnPropertyDescriptor(globalObject, 'globalObject').value is globalObject
+PASS Object.getOwnPropertyDescriptor(globalObject, 'globalObject').hasOwnProperty('get') is false
+PASS Object.getOwnPropertyDescriptor(globalObject, 'globalObject').hasOwnProperty('set') is false
+PASS Object.getOwnPropertyDescriptor(globalObject, 'globalObject').enumerable is true
+PASS Object.getOwnPropertyDescriptor(globalObject, 'globalObject').configurable is false
+PASS Object.getOwnPropertyDescriptor(globalObject, 'undefined').value is undefined
+PASS Object.getOwnPropertyDescriptor(globalObject, 'undefined').hasOwnProperty('get') is false
+PASS Object.getOwnPropertyDescriptor(globalObject, 'undefined').hasOwnProperty('set') is false
+PASS Object.getOwnPropertyDescriptor(globalObject, 'undefined').enumerable is false
+PASS Object.getOwnPropertyDescriptor(globalObject, 'undefined').configurable is false
+PASS Object.getOwnPropertyDescriptor(globalObject, 'NaN').value is NaN
+PASS Object.getOwnPropertyDescriptor(globalObject, 'NaN').hasOwnProperty('get') is false
+PASS Object.getOwnPropertyDescriptor(globalObject, 'NaN').hasOwnProperty('set') is false
+PASS Object.getOwnPropertyDescriptor(globalObject, 'NaN').enumerable is false
+PASS Object.getOwnPropertyDescriptor(globalObject, 'NaN').configurable is false
+PASS Object.getOwnPropertyDescriptor(globalObject, 'Infinity').value is Infinity
+PASS Object.getOwnPropertyDescriptor(globalObject, 'Infinity').hasOwnProperty('get') is false
+PASS Object.getOwnPropertyDescriptor(globalObject, 'Infinity').hasOwnProperty('set') is false
+PASS Object.getOwnPropertyDescriptor(globalObject, 'Infinity').enumerable is false
+PASS Object.getOwnPropertyDescriptor(globalObject, 'Infinity').configurable is false
+PASS Object.getOwnPropertyDescriptor(globalObject, 'window').get is globalWindowGetter
+PASS Object.getOwnPropertyDescriptor(globalObject, 'window').set is undefined
+PASS Object.getOwnPropertyDescriptor(globalObject, 'window').hasOwnProperty('value') is false
+PASS Object.getOwnPropertyDescriptor(globalObject, 'window').hasOwnProperty('writable') is false
+PASS Object.getOwnPropertyDescriptor(globalObject, 'window').enumerable is true
+PASS Object.getOwnPropertyDescriptor(globalObject, 'window').configurable is false
+PASS Object.getOwnPropertyDescriptor(globalObject, 'XMLHttpRequest').value is XMLHttpRequest
+PASS Object.getOwnPropertyDescriptor(globalObject, 'XMLHttpRequest').hasOwnProperty('get') is false
+PASS Object.getOwnPropertyDescriptor(globalObject, 'XMLHttpRequest').hasOwnProperty('set') is false
+PASS Object.getOwnPropertyDescriptor(globalObject, 'XMLHttpRequest').enumerable is false
+PASS Object.getOwnPropertyDescriptor(globalObject, 'XMLHttpRequest').configurable is true
+PASS Object.getOwnPropertyDescriptor(globalObject, 0).value is globalObject[0]
+PASS Object.getOwnPropertyDescriptor(globalObject, 0).hasOwnProperty('get') is false
+PASS Object.getOwnPropertyDescriptor(globalObject, 0).hasOwnProperty('set') is false
+PASS Object.getOwnPropertyDescriptor(globalObject, 0).enumerable is false
+PASS Object.getOwnPropertyDescriptor(globalObject, 0).configurable is false
 PASS Object.getOwnPropertyDescriptor(document.getElementsByTagName('div'), 0).value is document.getElementsByTagName('div')[0]
 PASS Object.getOwnPropertyDescriptor(document.getElementsByTagName('div'), 0).hasOwnProperty('get') is false
 PASS Object.getOwnPropertyDescriptor(document.getElementsByTagName('div'), 0).hasOwnProperty('set') is false
index 1c7d4d3..4a11bb1 100644 (file)
@@ -36,15 +36,15 @@ descriptorShouldBe("/(a)*/g.exec('a')", "'length'", {writable: true, enumerable:
 descriptorShouldBe("function(){}", "'length'", {writable: false, enumerable: false, configurable: true, value:0});
 descriptorShouldBe("Math.sin", "'length'", {writable: false, enumerable: false, configurable: true, value:1});
 descriptorShouldBe("Math.sin", "'name'", {writable: false, enumerable: false, configurable: true, value:"'sin'"});
-var global = this;
-descriptorShouldBe("global", "'global'", {writable: true, enumerable: true, configurable: false, value:"global"});
-descriptorShouldBe("global", "'undefined'", {writable: false, enumerable: false, configurable: false, value:"undefined"});
-descriptorShouldBe("global", "'NaN'", {writable: false, enumerable: false, configurable: false, value:"NaN"});
-descriptorShouldBe("global", "'Infinity'", {writable: false, enumerable: false, configurable: false, value:"Infinity"});
-var globalWindowGetter = Object.getOwnPropertyDescriptor(global, 'window').get;
-descriptorShouldBe("global", "'window'", {get: 'globalWindowGetter', set: undefined, enumerable: true, configurable: false});
-descriptorShouldBe("global", "'XMLHttpRequest'", {writable: true, enumerable: false, configurable: true, value:"XMLHttpRequest"});
-descriptorShouldBe("global", "0", {writable: true, enumerable: false, configurable: false, value:"global[0]"});
+var globalObject = this;
+descriptorShouldBe("globalObject", "'globalObject'", {writable: true, enumerable: true, configurable: false, value:"globalObject"});
+descriptorShouldBe("globalObject", "'undefined'", {writable: false, enumerable: false, configurable: false, value:"undefined"});
+descriptorShouldBe("globalObject", "'NaN'", {writable: false, enumerable: false, configurable: false, value:"NaN"});
+descriptorShouldBe("globalObject", "'Infinity'", {writable: false, enumerable: false, configurable: false, value:"Infinity"});
+var globalWindowGetter = Object.getOwnPropertyDescriptor(globalObject, 'window').get;
+descriptorShouldBe("globalObject", "'window'", {get: 'globalWindowGetter', set: undefined, enumerable: true, configurable: false});
+descriptorShouldBe("globalObject", "'XMLHttpRequest'", {writable: true, enumerable: false, configurable: true, value:"XMLHttpRequest"});
+descriptorShouldBe("globalObject", "0", {writable: true, enumerable: false, configurable: false, value:"globalObject[0]"});
 descriptorShouldBe("document.getElementsByTagName('div')", "0", {writable: false, enumerable: true, configurable: true, value:"document.getElementsByTagName('div')[0]"});
 descriptorShouldBe("document.getElementsByClassName('pass')", "0", {writable: false, enumerable: true, configurable: true, value:"document.getElementsByClassName('pass')[0]"});
 var canvas = document.createElement("canvas");
index 4ea9072..55ee8e5 100644 (file)
@@ -1,3 +1,16 @@
+2016-12-20  Keith Miller  <keith_miller@apple.com>
+
+        Add support for global
+        https://bugs.webkit.org/show_bug.cgi?id=165171
+
+        Reviewed by Filip Pizlo.
+
+        This patch adds spport for the global property on the global object.
+        The global property spec is in stage three and is quite simple.
+        For reference: http://tc39.github.io/proposal-global/
+
+        * runtime/JSGlobalObject.cpp:
+
 2016-12-20  Saam Barati  <sbarati@apple.com>
 
         WebAssembly: We should compile wasm functions in parallel
index bd666b9..a70ecf4 100644 (file)
@@ -271,6 +271,7 @@ const GlobalObjectMethodTable JSGlobalObject::s_globalObjectMethodTable = {
   encodeURI             globalFuncEncodeURI                          DontEnum|Function 1
   encodeURIComponent    globalFuncEncodeURIComponent                 DontEnum|Function 1
   EvalError             JSGlobalObject::m_evalErrorConstructor       DontEnum|CellProperty
+  global                JSGlobalObject::m_globalThis                 DontEnum|CellProperty
   ReferenceError        JSGlobalObject::m_referenceErrorConstructor  DontEnum|CellProperty
   SyntaxError           JSGlobalObject::m_syntaxErrorConstructor     DontEnum|CellProperty
   URIError              JSGlobalObject::m_URIErrorConstructor        DontEnum|CellProperty