| Index: src/wasm/wasm-js.cc
|
| diff --git a/src/wasm/wasm-js.cc b/src/wasm/wasm-js.cc
|
| index 62a4c5dfec1e22654afb993db3f69153ee0f9527..6fde52b90bd67dcd54675268197d1b02bcd28ca2 100644
|
| --- a/src/wasm/wasm-js.cc
|
| +++ b/src/wasm/wasm-js.cc
|
| @@ -425,22 +425,9 @@ void WebAssemblyTable(const v8::FunctionCallbackInfo<v8::Value>& args) {
|
| }
|
|
|
| i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate);
|
| - i::Handle<i::JSFunction> table_ctor(
|
| - i_isolate->native_context()->wasm_table_constructor());
|
| - i::Handle<i::JSObject> table_obj =
|
| - i_isolate->factory()->NewJSObject(table_ctor);
|
| - i::Handle<i::FixedArray> fixed_array =
|
| - i_isolate->factory()->NewFixedArray(initial);
|
| - i::Object* null = i_isolate->heap()->null_value();
|
| - for (int i = 0; i < initial; ++i) fixed_array->set(i, null);
|
| - table_obj->SetInternalField(kWasmTableArrayFieldIndex, *fixed_array);
|
| - table_obj->SetInternalField(
|
| - kWasmTableMaximumFieldIndex,
|
| - has_maximum.FromJust()
|
| - ? static_cast<i::Object*>(i::Smi::FromInt(maximum))
|
| - : static_cast<i::Object*>(i_isolate->heap()->undefined_value()));
|
| - i::Handle<i::Symbol> table_sym(i_isolate->native_context()->wasm_table_sym());
|
| - i::Object::SetProperty(table_obj, table_sym, table_obj, i::STRICT).Check();
|
| + i::Handle<i::FixedArray> fixed_array;
|
| + i::Handle<i::JSObject> table_obj = i::WasmJs::CreateWasmTableObject(
|
| + i_isolate, initial, has_maximum.FromJust(), maximum, &fixed_array);
|
| v8::ReturnValue<v8::Value> return_value = args.GetReturnValue();
|
| return_value.Set(Utils::ToLocal(table_obj));
|
| }
|
| @@ -721,6 +708,28 @@ i::Handle<i::JSObject> i::WasmJs::CreateWasmMemoryObject(
|
| return memory_obj;
|
| }
|
|
|
| +i::Handle<i::JSObject> i::WasmJs::CreateWasmTableObject(
|
| + i::Isolate* i_isolate, uint32_t initial, bool has_maximum, uint32_t maximum,
|
| + i::Handle<i::FixedArray>* array) {
|
| + i::Handle<i::JSFunction> table_ctor(
|
| + i_isolate->native_context()->wasm_table_constructor());
|
| + i::Handle<i::JSObject> table_obj =
|
| + i_isolate->factory()->NewJSObject(table_ctor);
|
| + *array = i_isolate->factory()->NewFixedArray(initial);
|
| + i::Object* null = i_isolate->heap()->null_value();
|
| + // TODO(titzer): consider moving FixedArray to size_t.
|
| + for (int i = 0; i < static_cast<int>(initial); ++i) (*array)->set(i, null);
|
| + table_obj->SetInternalField(kWasmTableArrayFieldIndex, *(*array));
|
| + table_obj->SetInternalField(
|
| + kWasmTableMaximumFieldIndex,
|
| + has_maximum
|
| + ? static_cast<i::Object*>(i::Smi::FromInt(maximum))
|
| + : static_cast<i::Object*>(i_isolate->heap()->undefined_value()));
|
| + i::Handle<i::Symbol> table_sym(i_isolate->native_context()->wasm_table_sym());
|
| + i::Object::SetProperty(table_obj, table_sym, table_obj, i::STRICT).Check();
|
| + return table_obj;
|
| +}
|
| +
|
| // TODO(titzer): we use the API to create the function template because the
|
| // internal guts are too ugly to replicate here.
|
| static i::Handle<i::FunctionTemplateInfo> NewTemplate(i::Isolate* i_isolate,
|
|
|