Update ModuleLoader code by using the latest builtin primitives
authorutatane.tea@gmail.com <utatane.tea@gmail.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 15 Dec 2016 02:23:56 +0000 (02:23 +0000)
committerutatane.tea@gmail.com <utatane.tea@gmail.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 15 Dec 2016 02:23:56 +0000 (02:23 +0000)
https://bugs.webkit.org/show_bug.cgi?id=165851

Reviewed by Sam Weinig.

Update the module loader code,

1. Use @globalPrivate for the utilities, instead of setting them as the member of ModuleLoader.
2. Use @putByValDirect instead of @push. @push is user-observable since it uses Set() operation
   and it can be observed by defining indexed setters in Array.prototype.

* builtins/ModuleLoaderPrototype.js:
(ensureRegistered):
(fulfillFetch):
(commitInstantiated):
(requestFetch):
(requestSatisfy):
(setStateToMax): Deleted.
(newRegistryEntry): Deleted.
* runtime/ModuleLoaderPrototype.cpp:

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

Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/builtins/ModuleLoaderPrototype.js
Source/JavaScriptCore/runtime/ModuleLoaderPrototype.cpp

index 3a81da7..81a68d3 100644 (file)
@@ -1,3 +1,26 @@
+2016-12-14  Yusuke Suzuki  <utatane.tea@gmail.com>
+
+        Update ModuleLoader code by using the latest builtin primitives
+        https://bugs.webkit.org/show_bug.cgi?id=165851
+
+        Reviewed by Sam Weinig.
+
+        Update the module loader code,
+
+        1. Use @globalPrivate for the utilities, instead of setting them as the member of ModuleLoader.
+        2. Use @putByValDirect instead of @push. @push is user-observable since it uses Set() operation
+           and it can be observed by defining indexed setters in Array.prototype.
+
+        * builtins/ModuleLoaderPrototype.js:
+        (ensureRegistered):
+        (fulfillFetch):
+        (commitInstantiated):
+        (requestFetch):
+        (requestSatisfy):
+        (setStateToMax): Deleted.
+        (newRegistryEntry): Deleted.
+        * runtime/ModuleLoaderPrototype.cpp:
+
 2016-12-14  Michael Saboff  <msaboff@apple.com>
 
         The stress GC bot crashes in JavaScriptCore beneath ShadowChicken::update and Inspector::jsToInspectorValue
index 6df426f..01c2b21 100644 (file)
@@ -32,6 +32,7 @@
 //    2. Loader.fetch
 //    3. Loader.instantiate
 
+@globalPrivate
 function setStateToMax(entry, newState)
 {
     // https://whatwg.github.io/loader/#set-state-to-max
@@ -42,6 +43,7 @@ function setStateToMax(entry, newState)
         entry.state = newState;
 }
 
+@globalPrivate
 function newRegistryEntry(key)
 {
     // https://whatwg.github.io/loader/#registry
@@ -111,7 +113,7 @@ function ensureRegistered(key)
     if (entry)
         return entry;
 
-    entry = this.newRegistryEntry(key);
+    entry = @newRegistryEntry(key);
     this.registry.@set(key, entry);
 
     return entry;
@@ -134,7 +136,7 @@ function fulfillFetch(entry, payload)
     if (!entry.fetch)
         entry.fetch = @newPromiseCapability(@InternalPromise).@promise;
     this.forceFulfillPromise(entry.fetch, payload);
-    this.setStateToMax(entry, @ModuleInstantiate);
+    @setStateToMax(entry, @ModuleInstantiate);
 }
 
 function fulfillInstantiate(entry, optionalInstance, source)
@@ -180,13 +182,13 @@ function commitInstantiated(entry, optionalInstance, source)
             key: depKey,
             value: @undefined
         };
-        dependencies.@push(pair);
+        @putByValDirect(dependencies, dependencies.length, pair);
         dependenciesMap.@set(depKey, pair);
     }
     entry.dependencies = dependencies;
     entry.dependenciesMap = dependenciesMap;
     entry.module = moduleRecord;
-    this.setStateToMax(entry, @ModuleSatisfy);
+    @setStateToMax(entry, @ModuleSatisfy);
 }
 
 function instantiation(result, source, entry)
@@ -219,7 +221,7 @@ function requestFetch(key, initiator)
     //     For example, JavaScriptCore shell can provide the hook fetching the resource
     //     from the local file system.
     var fetchPromise = this.fetch(key, initiator).then((payload) => {
-        this.setStateToMax(entry, @ModuleInstantiate);
+        @setStateToMax(entry, @ModuleInstantiate);
         return payload;
     });
     entry.fetch = fetchPromise;
@@ -297,11 +299,11 @@ function requestSatisfy(key, initiator)
                     return entry;
                 });
             });
-            depLoads.@push(promise);
+            @putByValDirect(depLoads, depLoads.length, promise);
         }
 
         return @InternalPromise.internalAll(depLoads).then((modules) => {
-            this.setStateToMax(entry, @ModuleLink);
+            @setStateToMax(entry, @ModuleLink);
             return entry;
         });
     });
@@ -363,7 +365,7 @@ function link(entry, initiator)
 
     if (entry.state === @ModuleReady)
         return;
-    this.setStateToMax(entry, @ModuleReady);
+    @setStateToMax(entry, @ModuleReady);
 
     // Since we already have the "dependencies" field,
     // we can call moduleDeclarationInstantiation with the correct order
index 3fccda7..f36fd48 100644 (file)
@@ -65,8 +65,6 @@ const ClassInfo ModuleLoaderPrototype::s_info = { "ModuleLoader", &Base::s_info,
 
 /* Source for ModuleLoaderPrototype.lut.h
 @begin moduleLoaderPrototypeTable
-    setStateToMax                  JSBuiltin                                           DontEnum|Function 2
-    newRegistryEntry               JSBuiltin                                           DontEnum|Function 1
     ensureRegistered               JSBuiltin                                           DontEnum|Function 1
     forceFulfillPromise            JSBuiltin                                           DontEnum|Function 2
     fulfillFetch                   JSBuiltin                                           DontEnum|Function 2