| Index: src/wasm/wasm-module.cc
|
| diff --git a/src/wasm/wasm-module.cc b/src/wasm/wasm-module.cc
|
| index 8ad95c8c1efd04cff6b9c0606be83bd0d2e63582..07d2ef1113f725ea24bffd1efd64dbd4afa15999 100644
|
| --- a/src/wasm/wasm-module.cc
|
| +++ b/src/wasm/wasm-module.cc
|
| @@ -837,9 +837,10 @@
|
| // Attach an array with function names and an array with offsets into that
|
| // first array.
|
| //-------------------------------------------------------------------------
|
| - instance.js_object->SetInternalField(
|
| - kWasmFunctionNamesArray,
|
| - *BuildFunctionNamesTable(isolate, module_env.module));
|
| + {
|
| + Handle<Object> arr = BuildFunctionNamesTable(isolate, module_env.module);
|
| + instance.js_object->SetInternalField(kWasmFunctionNamesArray, *arr);
|
| + }
|
|
|
| code_stats.Report();
|
|
|
| @@ -982,30 +983,14 @@
|
| return -1;
|
| }
|
|
|
| -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>");
|
| +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);
|
| }
|
|
|
| bool IsWasmObject(Handle<JSObject> object) {
|
| @@ -1013,7 +998,9 @@
|
| return object->GetInternalFieldCount() == kWasmModuleInternalFieldCount &&
|
| object->GetInternalField(kWasmModuleCodeTable)->IsFixedArray() &&
|
| object->GetInternalField(kWasmMemArrayBuffer)->IsJSArrayBuffer() &&
|
| - object->GetInternalField(kWasmFunctionNamesArray)->IsByteArray();
|
| + (object->GetInternalField(kWasmFunctionNamesArray)->IsByteArray() ||
|
| + object->GetInternalField(kWasmFunctionNamesArray)
|
| + ->IsUndefined(object->GetIsolate()));
|
| }
|
|
|
| } // namespace wasm
|
|
|