| Index: src/wasm/wasm-module.cc
|
| diff --git a/src/wasm/wasm-module.cc b/src/wasm/wasm-module.cc
|
| index 07d2ef1113f725ea24bffd1efd64dbd4afa15999..cbbbaab1ef52cf340f5450d26c06fe8882032de3 100644
|
| --- a/src/wasm/wasm-module.cc
|
| +++ b/src/wasm/wasm-module.cc
|
| @@ -834,13 +834,12 @@ MaybeHandle<JSObject> WasmModule::Instantiate(
|
| }
|
|
|
| //-------------------------------------------------------------------------
|
| - // Attach an array with function names and an array with offsets into that
|
| - // first array.
|
| + // Attach the function name table.
|
| //-------------------------------------------------------------------------
|
| - {
|
| - Handle<Object> arr = BuildFunctionNamesTable(isolate, module_env.module);
|
| - instance.js_object->SetInternalField(kWasmFunctionNamesArray, *arr);
|
| - }
|
| + Handle<ByteArray> function_name_table =
|
| + BuildFunctionNamesTable(isolate, module_env.module);
|
| + instance.js_object->SetInternalField(kWasmFunctionNamesArray,
|
| + *function_name_table);
|
|
|
| code_stats.Report();
|
|
|
| @@ -983,14 +982,30 @@ int32_t CompileAndRunWasmModule(Isolate* isolate, const WasmModule* module) {
|
| return -1;
|
| }
|
|
|
| -MaybeHandle<String> GetWasmFunctionName(Handle<JSObject> wasm,
|
| - uint32_t func_index) {
|
| - DCHECK(IsWasmObject(wasm));
|
| - Object* func_names_arr_obj = wasm->GetInternalField(kWasmFunctionNamesArray);
|
| - Isolate* isolate = wasm->GetIsolate();
|
| - if (func_names_arr_obj->IsUndefined(isolate)) return Handle<String>::null();
|
| - return GetWasmFunctionNameFromTable(
|
| - handle(ByteArray::cast(func_names_arr_obj), isolate), func_index);
|
| +Handle<Object> GetWasmFunctionNameOrNull(Isolate* isolate, Handle<Object> wasm,
|
| + uint32_t func_index) {
|
| + if (!wasm->IsUndefined()) {
|
| + Handle<ByteArray> func_names_arr_obj(
|
| + ByteArray::cast(Handle<JSObject>::cast(wasm)->GetInternalField(
|
| + kWasmFunctionNamesArray)),
|
| + isolate);
|
| + // TODO(clemens): Extract this from the module bytes; skip whole function
|
| + // name table.
|
| + Handle<Object> name;
|
| + if (GetWasmFunctionNameFromTable(func_names_arr_obj, func_index)
|
| + .ToHandle(&name)) {
|
| + return name;
|
| + }
|
| + }
|
| + return isolate->factory()->null_value();
|
| +}
|
| +
|
| +Handle<String> GetWasmFunctionName(Isolate* isolate, Handle<Object> wasm,
|
| + uint32_t func_index) {
|
| + Handle<Object> name_or_null =
|
| + GetWasmFunctionNameOrNull(isolate, wasm, func_index);
|
| + if (!name_or_null->IsNull()) return Handle<String>::cast(name_or_null);
|
| + return isolate->factory()->NewStringFromStaticChars("<WASM UNNAMED>");
|
| }
|
|
|
| bool IsWasmObject(Handle<JSObject> object) {
|
| @@ -998,9 +1013,7 @@ bool IsWasmObject(Handle<JSObject> object) {
|
| return object->GetInternalFieldCount() == kWasmModuleInternalFieldCount &&
|
| object->GetInternalField(kWasmModuleCodeTable)->IsFixedArray() &&
|
| object->GetInternalField(kWasmMemArrayBuffer)->IsJSArrayBuffer() &&
|
| - (object->GetInternalField(kWasmFunctionNamesArray)->IsByteArray() ||
|
| - object->GetInternalField(kWasmFunctionNamesArray)
|
| - ->IsUndefined(object->GetIsolate()));
|
| + object->GetInternalField(kWasmFunctionNamesArray)->IsByteArray();
|
| }
|
|
|
| } // namespace wasm
|
|
|