[JSC] linking and evaluating the modules are done in a sync manner
authorutatane.tea@gmail.com <utatane.tea@gmail.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 1 Sep 2016 02:11:43 +0000 (02:11 +0000)
committerutatane.tea@gmail.com <utatane.tea@gmail.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 1 Sep 2016 02:11:43 +0000 (02:11 +0000)
https://bugs.webkit.org/show_bug.cgi?id=161467

Reviewed by Saam Barati.

While the fetching and the other stages are done in an asynchronous manner,
linking and evaluating are done in a sync manner.
Just return the result value and do not wrap them with the internal promise.

* builtins/ModuleLoaderPrototype.js:
(linkAndEvaluateModule):
* runtime/Completion.cpp:
(JSC::linkAndEvaluateModule):
* runtime/Completion.h:
* runtime/JSModuleLoader.cpp:
(JSC::JSModuleLoader::linkAndEvaluateModule):
* runtime/JSModuleLoader.h:

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

Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/builtins/ModuleLoaderPrototype.js
Source/JavaScriptCore/runtime/Completion.cpp
Source/JavaScriptCore/runtime/Completion.h
Source/JavaScriptCore/runtime/JSModuleLoader.cpp
Source/JavaScriptCore/runtime/JSModuleLoader.h

index 7153cbc..ba6cc9d 100644 (file)
@@ -1,5 +1,25 @@
 2016-08-31  Yusuke Suzuki  <utatane.tea@gmail.com>
 
+        [JSC] linking and evaluating the modules are done in a sync manner
+        https://bugs.webkit.org/show_bug.cgi?id=161467
+
+        Reviewed by Saam Barati.
+
+        While the fetching and the other stages are done in an asynchronous manner,
+        linking and evaluating are done in a sync manner.
+        Just return the result value and do not wrap them with the internal promise.
+
+        * builtins/ModuleLoaderPrototype.js:
+        (linkAndEvaluateModule):
+        * runtime/Completion.cpp:
+        (JSC::linkAndEvaluateModule):
+        * runtime/Completion.h:
+        * runtime/JSModuleLoader.cpp:
+        (JSC::JSModuleLoader::linkAndEvaluateModule):
+        * runtime/JSModuleLoader.h:
+
+2016-08-31  Yusuke Suzuki  <utatane.tea@gmail.com>
+
         stress/random-53bit.js.ftl-no-cjit-no-inline-validate sometimes fails
         https://bugs.webkit.org/show_bug.cgi?id=161436
 
index 6a3bc82..6861e64 100644 (file)
@@ -558,5 +558,10 @@ function linkAndEvaluateModule(key)
 {
     "use strict";
 
-    return this.requestReady(key);
+    var entry = this.ensureRegistered(key);
+    if (entry.state < @ModuleLink)
+        throw new @TypeError("Requested module is not instantiated yet.");
+
+    this.link(entry);
+    return this.moduleEvaluation(entry.module);
 }
index c586956..162bc29 100644 (file)
@@ -229,7 +229,7 @@ JSInternalPromise* loadModule(ExecState* exec, const SourceCode& source)
     return loadModule(lock, exec, globalObject, key, jsUndefined());
 }
 
-JSInternalPromise* linkAndEvaluateModule(ExecState* exec, const Identifier& moduleKey)
+JSValue linkAndEvaluateModule(ExecState* exec, const Identifier& moduleKey)
 {
     JSLockHolder lock(exec);
     RELEASE_ASSERT(exec->vm().atomicStringTable() == wtfThreadData().atomicStringTable());
index f131cc5..5d4045c 100644 (file)
@@ -65,8 +65,8 @@ JS_EXPORT_PRIVATE JSInternalPromise* loadAndEvaluateModule(ExecState*, const Sou
 JS_EXPORT_PRIVATE JSInternalPromise* loadModule(ExecState*, const String& moduleName);
 JS_EXPORT_PRIVATE JSInternalPromise* loadModule(ExecState*, const SourceCode&);
 
-// Link and evaluate the already linked module.
-JS_EXPORT_PRIVATE JSInternalPromise* linkAndEvaluateModule(ExecState*, const Identifier& moduleKey);
+// Link and evaluate the already linked module. This function is called in a sync manner.
+JS_EXPORT_PRIVATE JSValue linkAndEvaluateModule(ExecState*, const Identifier& moduleKey);
 
 } // namespace JSC
 
index d3b5a6a..0b4c245 100644 (file)
@@ -114,7 +114,7 @@ JSInternalPromise* JSModuleLoader::loadModule(ExecState* exec, JSValue moduleNam
     return jsCast<JSInternalPromise*>(call(exec, function, callType, callData, this, arguments));
 }
 
-JSInternalPromise* JSModuleLoader::linkAndEvaluateModule(ExecState* exec, JSValue moduleKey)
+JSValue JSModuleLoader::linkAndEvaluateModule(ExecState* exec, JSValue moduleKey)
 {
     JSObject* function = jsCast<JSObject*>(get(exec, exec->propertyNames().builtinNames().linkAndEvaluateModulePublicName()));
     CallData callData;
@@ -124,7 +124,7 @@ JSInternalPromise* JSModuleLoader::linkAndEvaluateModule(ExecState* exec, JSValu
     MarkedArgumentBuffer arguments;
     arguments.append(moduleKey);
 
-    return jsCast<JSInternalPromise*>(call(exec, function, callType, callData, this, arguments));
+    return call(exec, function, callType, callData, this, arguments);
 }
 
 JSInternalPromise* JSModuleLoader::resolve(ExecState* exec, JSValue name, JSValue referrer)
index 4cd5904..de8e282 100644 (file)
@@ -65,7 +65,7 @@ public:
     JSValue provide(ExecState*, JSValue key, Status, const String&);
     JSInternalPromise* loadAndEvaluateModule(ExecState*, JSValue moduleName, JSValue referrer);
     JSInternalPromise* loadModule(ExecState*, JSValue moduleName, JSValue referrer);
-    JSInternalPromise* linkAndEvaluateModule(ExecState*, JSValue moduleKey);
+    JSValue linkAndEvaluateModule(ExecState*, JSValue moduleKey);
 
     // Platform dependent hooked APIs.
     JSInternalPromise* resolve(ExecState*, JSValue name, JSValue referrer);