| Index: src/wasm/wasm-module.cc
|
| diff --git a/src/wasm/wasm-module.cc b/src/wasm/wasm-module.cc
|
| index 4d8b60fdf2269b302d6992c4cd165e1b5a7fb5e1..4b72e5976e92e6c2152b2f924da09ef5aa886fbc 100644
|
| --- a/src/wasm/wasm-module.cc
|
| +++ b/src/wasm/wasm-module.cc
|
| @@ -2330,3 +2330,75 @@ void testing::ValidateOrphanedInstance(Isolate* isolate,
|
| CHECK(compiled_module->has_weak_wasm_module());
|
| CHECK(compiled_module->ptr_to_weak_wasm_module()->cleared());
|
| }
|
| +
|
| +Handle<JSArray> wasm::GetImports(Isolate* isolate,
|
| + Handle<WasmModuleObject> module_object) {
|
| + Handle<WasmCompiledModule> compiled_module(module_object->compiled_module(),
|
| + isolate);
|
| + Factory* factory = isolate->factory();
|
| +
|
| + Handle<String> module_string = factory->InternalizeUtf8String("module");
|
| + Handle<String> name_string = factory->InternalizeUtf8String("name");
|
| + Handle<String> kind_string = factory->InternalizeUtf8String("kind");
|
| +
|
| + Handle<String> function_string = factory->InternalizeUtf8String("function");
|
| + Handle<String> table_string = factory->InternalizeUtf8String("table");
|
| + Handle<String> memory_string = factory->InternalizeUtf8String("memory");
|
| + Handle<String> global_string = factory->InternalizeUtf8String("global");
|
| +
|
| + // Create the result array.
|
| + WasmModule* module = compiled_module->module();
|
| + int num_imports = static_cast<int>(module->import_table.size());
|
| + Handle<JSArray> array_object = factory->NewJSArray(FAST_ELEMENTS, 0, 0);
|
| + Handle<FixedArray> storage = factory->NewFixedArray(num_imports);
|
| + JSArray::SetContent(array_object, storage);
|
| + array_object->set_length(Smi::FromInt(num_imports));
|
| +
|
| + Handle<JSFunction> object_function =
|
| + Handle<JSFunction>(isolate->native_context()->object_function(), isolate);
|
| +
|
| + // Populate the result array.
|
| + for (int index = 0; index < num_imports; ++index) {
|
| + WasmImport& import = module->import_table[index];
|
| +
|
| + Handle<JSObject> entry = factory->NewJSObject(object_function, TENURED);
|
| +
|
| + Handle<String> import_kind;
|
| + switch (import.kind) {
|
| + case kExternalFunction:
|
| + import_kind = function_string;
|
| + break;
|
| + case kExternalTable:
|
| + import_kind = table_string;
|
| + break;
|
| + case kExternalMemory:
|
| + import_kind = memory_string;
|
| + break;
|
| + case kExternalGlobal:
|
| + import_kind = global_string;
|
| + break;
|
| + default:
|
| + UNREACHABLE();
|
| + }
|
| +
|
| + MaybeHandle<String> import_module =
|
| + WasmCompiledModule::ExtractUtf8StringFromModuleBytes(
|
| + isolate, compiled_module, import.module_name_offset,
|
| + import.module_name_length);
|
| +
|
| + MaybeHandle<String> import_name =
|
| + WasmCompiledModule::ExtractUtf8StringFromModuleBytes(
|
| + isolate, compiled_module, import.field_name_offset,
|
| + import.field_name_length);
|
| +
|
| + JSObject::AddProperty(entry, module_string, import_module.ToHandleChecked(),
|
| + NONE);
|
| + JSObject::AddProperty(entry, name_string, import_name.ToHandleChecked(),
|
| + NONE);
|
| + JSObject::AddProperty(entry, kind_string, import_kind, NONE);
|
| +
|
| + storage->set(index, *entry);
|
| + }
|
| +
|
| + return array_object;
|
| +}
|
|
|