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

Unified Diff: third_party/WebKit/Source/core/loader/modulescript/ModuleTreeLinker.cpp

Issue 2839563002: [ES6 modules] Return previous error when an instantiation is reattempt. (Closed)
Patch Set: comments Created 3 years, 8 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: third_party/WebKit/Source/core/loader/modulescript/ModuleTreeLinker.cpp
diff --git a/third_party/WebKit/Source/core/loader/modulescript/ModuleTreeLinker.cpp b/third_party/WebKit/Source/core/loader/modulescript/ModuleTreeLinker.cpp
index 7f9213e213e24be7730548294b06b323f6672a0b..9e1440b1a3b7044ac27541de364ad7c911291db8 100644
--- a/third_party/WebKit/Source/core/loader/modulescript/ModuleTreeLinker.cpp
+++ b/third_party/WebKit/Source/core/loader/modulescript/ModuleTreeLinker.cpp
@@ -112,7 +112,7 @@ void ModuleTreeLinker::AdvanceState(State new_state) {
registry_->ReleaseFinishedFetcher(this);
// https://html.spec.whatwg.org/multipage/webappapis.html#internal-module-script-graph-fetching-procedure
- // Step 8. Asynchronously complete this algorithm with descendants result.
+ // Step 9. Asynchronously complete this algorithm with descendants result.
client_->NotifyModuleTreeLoadFinished(descendants_module_script_);
}
}
@@ -230,7 +230,7 @@ void ModuleTreeLinker::FetchDescendants() {
// Abort this algorithm, and asynchronously complete it with null.
// Note: The return variable for "internal module script graph fetching
- // procedure" is descendants_module_script_ per Step 8.
+ // procedure" is descendants_module_script_ per Step 9.
DCHECK(!descendants_module_script_);
// Note: while we complete "fetch the descendants of a module script"
// algorithm here, we still need to continue to the rest of the
@@ -336,33 +336,51 @@ void ModuleTreeLinker::Instantiate() {
// https://html.spec.whatwg.org/multipage/webappapis.html#internal-module-script-graph-fetching-procedure
- // Step 5. Let record be result's module record.
- ScriptModule record = module_script_->Record();
-
- // Step 6. Let instantiationStatus be record.ModuleDeclarationInstantiation().
+ // Step 5. Let instantiationStatus be null.
// Note: The |error| variable corresponds to spec variable
// "instantiationStatus". If |error| is empty, it indicates successful
// completion.
- ScriptValue error = modulator_->InstantiateModule(record);
+ ScriptValue error;
+
+ // Step 6. If result's instantiation state is "errored",...
+ if (module_script_->InstantiationState() ==
+ ModuleInstantiationState::kErrored) {
+ // ... Set instantiationStatus to record.ModuleDeclarationInstantiation().
+ error = modulator_->GetInstantiationError(module_script_);
+ DCHECK(!error.IsEmpty());
+ } else {
+ // Step 7. Otherwise:
+ // Step 7.1. Let record be result's module record.
+ ScriptModule record = module_script_->Record();
+ // Step 7.2. Set instantiationStatus to
+ // record.ModuleDeclarationInstantiation().
+ error = modulator_->InstantiateModule(record);
+ }
- // Step 7. For each module script script in result's uninstantiated inclusive
+ // Step 8. For each module script script in result's uninstantiated inclusive
// descendant module scripts, perform the following steps:
HeapHashSet<Member<ModuleScript>> uninstantiated_set =
UninstantiatedInclusiveDescendants();
for (const auto& descendant : uninstantiated_set) {
if (!error.IsEmpty()) {
- // Step 7.1. If instantiationStatus is an abrupt completion, then set
- // script's instantiation state to "errored", its instantiation error to
- // instantiationStatus.[[Value]], and its module record to null.
+ // Step 8.1. If instantiationStatus is an abrupt completion, then
+ // Step 8.1.1. Set script module record's [[HostDefined]] field to
+ // undefined.
+ // TODO(kouhei): Implement this.
+
+ // Step 8.1.2. Set script's module record to null.
+ // Step 8.1.3. Set script's instantiation state to "errored".
+ // Step 8.1.4. Set script's instantiation error to
+ // instantiationStatus.[[Value]].
descendant->SetInstantiationErrorAndClearRecord(error);
} else {
- // Step 7.2. Otherwise, set script's instantiation state to
+ // Step 8.2. Otherwise, set script's instantiation state to
// "instantiated".
descendant->SetInstantiationSuccess();
}
}
- // Step 8. Asynchronously complete this algorithm with descendants result.
+ // Step 9. Asynchronously complete this algorithm with descendants result.
AdvanceState(State::kFinished);
}

Powered by Google App Engine
This is Rietveld 408576698