| Index: src/api.cc
|
| diff --git a/src/api.cc b/src/api.cc
|
| index 7fec7da4474a68d28c22c31ce91e63464151ca8b..c9c5210fdfa2a05ba630c7b755e4487540423bfd 100644
|
| --- a/src/api.cc
|
| +++ b/src/api.cc
|
| @@ -1915,108 +1915,12 @@ Local<Value> Module::GetEmbedderData() const {
|
| i::handle(self->embedder_data(), self->GetIsolate()));
|
| }
|
|
|
| -MUST_USE_RESULT
|
| -static bool InstantiateModule(Local<Module> v8_module,
|
| - Local<Context> v8_context,
|
| - Module::ResolveCallback callback,
|
| - Local<Value> callback_data) {
|
| - i::Handle<i::Module> module = Utils::OpenHandle(*v8_module);
|
| - i::Isolate* isolate = module->GetIsolate();
|
| -
|
| - // Already instantiated.
|
| - if (module->code()->IsJSFunction()) return true;
|
| -
|
| - i::Handle<i::SharedFunctionInfo> shared(
|
| - i::SharedFunctionInfo::cast(module->code()), isolate);
|
| - i::Handle<i::Context> context = Utils::OpenHandle(*v8_context);
|
| - i::Handle<i::JSFunction> function =
|
| - isolate->factory()->NewFunctionFromSharedFunctionInfo(
|
| - shared, handle(context->native_context(), isolate));
|
| - module->set_code(*function);
|
| -
|
| - i::Handle<i::FixedArray> regular_exports = i::handle(
|
| - shared->scope_info()->ModuleDescriptorInfo()->regular_exports(), isolate);
|
| - i::Handle<i::FixedArray> regular_imports = i::handle(
|
| - shared->scope_info()->ModuleDescriptorInfo()->regular_imports(), isolate);
|
| - i::Handle<i::FixedArray> special_exports = i::handle(
|
| - shared->scope_info()->ModuleDescriptorInfo()->special_exports(), isolate);
|
| -
|
| - // Set up local exports.
|
| - for (int i = 0, n = regular_exports->length(); i < n; i += 2) {
|
| - i::Handle<i::FixedArray> export_names(
|
| - i::FixedArray::cast(regular_exports->get(i + 1)), isolate);
|
| - i::Module::CreateExport(module, export_names);
|
| - }
|
| -
|
| - // Partially set up indirect exports.
|
| - // For each indirect export, we create the appropriate slot in the export
|
| - // table and store its ModuleInfoEntry there. When we later find the correct
|
| - // Cell in the module that actually provides the value, we replace the
|
| - // ModuleInfoEntry by that Cell (see ResolveExport).
|
| - for (int i = 0, n = special_exports->length(); i < n; ++i) {
|
| - i::Handle<i::ModuleInfoEntry> entry(
|
| - i::ModuleInfoEntry::cast(special_exports->get(i)), isolate);
|
| - i::Handle<i::Object> export_name(entry->export_name(), isolate);
|
| - if (export_name->IsUndefined(isolate)) continue; // Star export.
|
| - i::Module::CreateIndirectExport(
|
| - module, i::Handle<i::String>::cast(export_name), entry);
|
| - }
|
| -
|
| - for (int i = 0, length = v8_module->GetModuleRequestsLength(); i < length;
|
| - ++i) {
|
| - Local<Module> requested_module;
|
| - // TODO(adamk): Revisit these failure cases once d8 knows how to
|
| - // persist a module_map across multiple top-level module loads, as
|
| - // the current module is left in a "half-instantiated" state.
|
| - if (!callback(v8_context, v8_module->GetModuleRequest(i), v8_module,
|
| - callback_data)
|
| - .ToLocal(&requested_module)) {
|
| - // TODO(adamk): Give this a better error message. But this is a
|
| - // misuse of the API anyway.
|
| - isolate->ThrowIllegalOperation();
|
| - return false;
|
| - }
|
| - module->requested_modules()->set(i, *Utils::OpenHandle(*requested_module));
|
| - if (!InstantiateModule(requested_module, v8_context, callback,
|
| - callback_data)) {
|
| - return false;
|
| - }
|
| - }
|
| -
|
| - // Resolve imports.
|
| - for (int i = 0, n = regular_imports->length(); i < n; ++i) {
|
| - i::Handle<i::ModuleInfoEntry> entry(
|
| - i::ModuleInfoEntry::cast(regular_imports->get(i)), isolate);
|
| - i::Handle<i::String> name(i::String::cast(entry->import_name()), isolate);
|
| - int module_request = i::Smi::cast(entry->module_request())->value();
|
| - if (i::Module::ResolveImport(module, name, module_request, true)
|
| - .is_null()) {
|
| - return false;
|
| - }
|
| - }
|
| -
|
| - // Resolve indirect exports.
|
| - for (int i = 0, n = special_exports->length(); i < n; ++i) {
|
| - i::Handle<i::ModuleInfoEntry> entry(
|
| - i::ModuleInfoEntry::cast(special_exports->get(i)), isolate);
|
| - i::Handle<i::Object> name(entry->export_name(), isolate);
|
| - if (name->IsUndefined(isolate)) continue; // Star export.
|
| - if (i::Module::ResolveExport(module, i::Handle<i::String>::cast(name), true)
|
| - .is_null()) {
|
| - return false;
|
| - }
|
| - }
|
| -
|
| - return true;
|
| -}
|
| -
|
| bool Module::Instantiate(Local<Context> context,
|
| Module::ResolveCallback callback,
|
| Local<Value> callback_data) {
|
| PREPARE_FOR_EXECUTION_BOOL(context, Module, Instantiate);
|
| - has_pending_exception =
|
| - !InstantiateModule(Utils::ToLocal(Utils::OpenHandle(this)), context,
|
| - callback, callback_data);
|
| + has_pending_exception = !i::Module::Instantiate(
|
| + Utils::OpenHandle(this), context, callback, callback_data);
|
| RETURN_ON_FAILED_EXECUTION_BOOL();
|
| return true;
|
| }
|
|
|