Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(341)

Side by Side Diff: src/wasm/wasm-objects.cc

Issue 2741683004: [rename] Rename internal field to embedder field. (Closed)
Patch Set: [rename] Rename internal field to embedder field. Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/wasm/wasm-objects.h ('k') | test/cctest/test-api.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 the V8 project authors. All rights reserved. 1 // Copyright 2015 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/wasm/wasm-objects.h" 5 #include "src/wasm/wasm-objects.h"
6 #include "src/utils.h" 6 #include "src/utils.h"
7 7
8 #include "src/base/iterator.h" 8 #include "src/base/iterator.h"
9 #include "src/debug/debug-interface.h" 9 #include "src/debug/debug-interface.h"
10 #include "src/objects-inl.h" 10 #include "src/objects-inl.h"
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
42 #define DEFINE_OPTIONAL_GETTER0(getter, Container, name, field, type) \ 42 #define DEFINE_OPTIONAL_GETTER0(getter, Container, name, field, type) \
43 DEFINE_GETTER0(getter, Container, name, field, type) \ 43 DEFINE_GETTER0(getter, Container, name, field, type) \
44 bool Container::has_##name() { \ 44 bool Container::has_##name() { \
45 return !getter(field)->IsUndefined(GetIsolate()); \ 45 return !getter(field)->IsUndefined(GetIsolate()); \
46 } 46 }
47 47
48 #define DEFINE_GETTER0(getter, Container, name, field, type) \ 48 #define DEFINE_GETTER0(getter, Container, name, field, type) \
49 type* Container::name() { return type::cast(getter(field)); } 49 type* Container::name() { return type::cast(getter(field)); }
50 50
51 #define DEFINE_OBJ_GETTER(Container, name, field, type) \ 51 #define DEFINE_OBJ_GETTER(Container, name, field, type) \
52 DEFINE_GETTER0(GetInternalField, Container, name, field, type) 52 DEFINE_GETTER0(GetEmbedderField, Container, name, field, type)
53 #define DEFINE_OBJ_ACCESSORS(Container, name, field, type) \ 53 #define DEFINE_OBJ_ACCESSORS(Container, name, field, type) \
54 DEFINE_ACCESSORS0(GetInternalField, SetInternalField, Container, name, \ 54 DEFINE_ACCESSORS0(GetEmbedderField, SetEmbedderField, Container, name, \
55 field, type) 55 field, type)
56 #define DEFINE_OPTIONAL_OBJ_ACCESSORS(Container, name, field, type) \ 56 #define DEFINE_OPTIONAL_OBJ_ACCESSORS(Container, name, field, type) \
57 DEFINE_OPTIONAL_ACCESSORS0(GetInternalField, SetInternalField, Container, \ 57 DEFINE_OPTIONAL_ACCESSORS0(GetEmbedderField, SetEmbedderField, Container, \
58 name, field, type) 58 name, field, type)
59 #define DEFINE_ARR_GETTER(Container, name, field, type) \ 59 #define DEFINE_ARR_GETTER(Container, name, field, type) \
60 DEFINE_GETTER0(get, Container, name, field, type) 60 DEFINE_GETTER0(get, Container, name, field, type)
61 #define DEFINE_ARR_ACCESSORS(Container, name, field, type) \ 61 #define DEFINE_ARR_ACCESSORS(Container, name, field, type) \
62 DEFINE_ACCESSORS0(get, set, Container, name, field, type) 62 DEFINE_ACCESSORS0(get, set, Container, name, field, type)
63 #define DEFINE_OPTIONAL_ARR_ACCESSORS(Container, name, field, type) \ 63 #define DEFINE_OPTIONAL_ARR_ACCESSORS(Container, name, field, type) \
64 DEFINE_OPTIONAL_ACCESSORS0(get, set, Container, name, field, type) 64 DEFINE_OPTIONAL_ACCESSORS0(get, set, Container, name, field, type)
65 #define DEFINE_OPTIONAL_ARR_GETTER(Container, name, field, type) \ 65 #define DEFINE_OPTIONAL_ARR_GETTER(Container, name, field, type) \
66 DEFINE_OPTIONAL_GETTER0(get, Container, name, field, type) 66 DEFINE_OPTIONAL_GETTER0(get, Container, name, field, type)
67 67
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
228 Handle<Symbol> module_sym(isolate->native_context()->wasm_module_sym()); 228 Handle<Symbol> module_sym(isolate->native_context()->wasm_module_sym());
229 Object::SetProperty(module_object, module_sym, module_object, STRICT) 229 Object::SetProperty(module_object, module_sym, module_object, STRICT)
230 .Check(); 230 .Check();
231 } else { 231 } else {
232 DCHECK(origin == ModuleOrigin::kAsmJsOrigin); 232 DCHECK(origin == ModuleOrigin::kAsmJsOrigin);
233 Handle<Map> map = isolate->factory()->NewMap( 233 Handle<Map> map = isolate->factory()->NewMap(
234 JS_OBJECT_TYPE, 234 JS_OBJECT_TYPE,
235 JSObject::kHeaderSize + WasmModuleObject::kFieldCount * kPointerSize); 235 JSObject::kHeaderSize + WasmModuleObject::kFieldCount * kPointerSize);
236 module_object = isolate->factory()->NewJSObjectFromMap(map, TENURED); 236 module_object = isolate->factory()->NewJSObjectFromMap(map, TENURED);
237 } 237 }
238 module_object->SetInternalField(WasmModuleObject::kCompiledModule, 238 module_object->SetEmbedderField(WasmModuleObject::kCompiledModule,
239 *compiled_module); 239 *compiled_module);
240 Handle<WeakCell> link_to_module = 240 Handle<WeakCell> link_to_module =
241 isolate->factory()->NewWeakCell(module_object); 241 isolate->factory()->NewWeakCell(module_object);
242 compiled_module->set_weak_wasm_module(link_to_module); 242 compiled_module->set_weak_wasm_module(link_to_module);
243 return Handle<WasmModuleObject>::cast(module_object); 243 return Handle<WasmModuleObject>::cast(module_object);
244 } 244 }
245 245
246 WasmModuleObject* WasmModuleObject::cast(Object* object) { 246 WasmModuleObject* WasmModuleObject::cast(Object* object) {
247 DCHECK(object->IsJSObject()); 247 DCHECK(object->IsJSObject());
248 // TODO(titzer): brand check for WasmModuleObject. 248 // TODO(titzer): brand check for WasmModuleObject.
249 return reinterpret_cast<WasmModuleObject*>(object); 249 return reinterpret_cast<WasmModuleObject*>(object);
250 } 250 }
251 251
252 bool WasmModuleObject::IsWasmModuleObject(Object* object) { 252 bool WasmModuleObject::IsWasmModuleObject(Object* object) {
253 return object->IsJSObject() && 253 return object->IsJSObject() &&
254 JSObject::cast(object)->GetInternalFieldCount() == kFieldCount; 254 JSObject::cast(object)->GetEmbedderFieldCount() == kFieldCount;
255 } 255 }
256 256
257 DEFINE_OBJ_GETTER(WasmModuleObject, compiled_module, kCompiledModule, 257 DEFINE_OBJ_GETTER(WasmModuleObject, compiled_module, kCompiledModule,
258 WasmCompiledModule) 258 WasmCompiledModule)
259 259
260 Handle<WasmTableObject> WasmTableObject::New(Isolate* isolate, uint32_t initial, 260 Handle<WasmTableObject> WasmTableObject::New(Isolate* isolate, uint32_t initial,
261 int64_t maximum, 261 int64_t maximum,
262 Handle<FixedArray>* js_functions) { 262 Handle<FixedArray>* js_functions) {
263 Handle<JSFunction> table_ctor( 263 Handle<JSFunction> table_ctor(
264 isolate->native_context()->wasm_table_constructor()); 264 isolate->native_context()->wasm_table_constructor());
265 Handle<JSObject> table_obj = isolate->factory()->NewJSObject(table_ctor); 265 Handle<JSObject> table_obj = isolate->factory()->NewJSObject(table_ctor);
266 table_obj->SetInternalField(kWrapperTracerHeader, Smi::kZero); 266 table_obj->SetEmbedderField(kWrapperTracerHeader, Smi::kZero);
267 267
268 *js_functions = isolate->factory()->NewFixedArray(initial); 268 *js_functions = isolate->factory()->NewFixedArray(initial);
269 Object* null = isolate->heap()->null_value(); 269 Object* null = isolate->heap()->null_value();
270 for (int i = 0; i < static_cast<int>(initial); ++i) { 270 for (int i = 0; i < static_cast<int>(initial); ++i) {
271 (*js_functions)->set(i, null); 271 (*js_functions)->set(i, null);
272 } 272 }
273 table_obj->SetInternalField(kFunctions, *(*js_functions)); 273 table_obj->SetEmbedderField(kFunctions, *(*js_functions));
274 Handle<Object> max = isolate->factory()->NewNumber(maximum); 274 Handle<Object> max = isolate->factory()->NewNumber(maximum);
275 table_obj->SetInternalField(kMaximum, *max); 275 table_obj->SetEmbedderField(kMaximum, *max);
276 276
277 Handle<FixedArray> dispatch_tables = isolate->factory()->NewFixedArray(0); 277 Handle<FixedArray> dispatch_tables = isolate->factory()->NewFixedArray(0);
278 table_obj->SetInternalField(kDispatchTables, *dispatch_tables); 278 table_obj->SetEmbedderField(kDispatchTables, *dispatch_tables);
279 Handle<Symbol> table_sym(isolate->native_context()->wasm_table_sym()); 279 Handle<Symbol> table_sym(isolate->native_context()->wasm_table_sym());
280 Object::SetProperty(table_obj, table_sym, table_obj, STRICT).Check(); 280 Object::SetProperty(table_obj, table_sym, table_obj, STRICT).Check();
281 return Handle<WasmTableObject>::cast(table_obj); 281 return Handle<WasmTableObject>::cast(table_obj);
282 } 282 }
283 283
284 DEFINE_OBJ_GETTER(WasmTableObject, dispatch_tables, kDispatchTables, FixedArray) 284 DEFINE_OBJ_GETTER(WasmTableObject, dispatch_tables, kDispatchTables, FixedArray)
285 285
286 Handle<FixedArray> WasmTableObject::AddDispatchTable( 286 Handle<FixedArray> WasmTableObject::AddDispatchTable(
287 Isolate* isolate, Handle<WasmTableObject> table_obj, 287 Isolate* isolate, Handle<WasmTableObject> table_obj,
288 Handle<WasmInstanceObject> instance, int table_index, 288 Handle<WasmInstanceObject> instance, int table_index,
289 Handle<FixedArray> function_table, Handle<FixedArray> signature_table) { 289 Handle<FixedArray> function_table, Handle<FixedArray> signature_table) {
290 Handle<FixedArray> dispatch_tables( 290 Handle<FixedArray> dispatch_tables(
291 FixedArray::cast(table_obj->GetInternalField(kDispatchTables)), isolate); 291 FixedArray::cast(table_obj->GetEmbedderField(kDispatchTables)), isolate);
292 DCHECK_EQ(0, dispatch_tables->length() % 4); 292 DCHECK_EQ(0, dispatch_tables->length() % 4);
293 293
294 if (instance.is_null()) return dispatch_tables; 294 if (instance.is_null()) return dispatch_tables;
295 // TODO(titzer): use weak cells here to avoid leaking instances. 295 // TODO(titzer): use weak cells here to avoid leaking instances.
296 296
297 // Grow the dispatch table and add a new triple at the end. 297 // Grow the dispatch table and add a new triple at the end.
298 Handle<FixedArray> new_dispatch_tables = 298 Handle<FixedArray> new_dispatch_tables =
299 isolate->factory()->CopyFixedArrayAndGrow(dispatch_tables, 4); 299 isolate->factory()->CopyFixedArrayAndGrow(dispatch_tables, 4);
300 300
301 new_dispatch_tables->set(dispatch_tables->length() + 0, *instance); 301 new_dispatch_tables->set(dispatch_tables->length() + 0, *instance);
302 new_dispatch_tables->set(dispatch_tables->length() + 1, 302 new_dispatch_tables->set(dispatch_tables->length() + 1,
303 Smi::FromInt(table_index)); 303 Smi::FromInt(table_index));
304 new_dispatch_tables->set(dispatch_tables->length() + 2, *function_table); 304 new_dispatch_tables->set(dispatch_tables->length() + 2, *function_table);
305 new_dispatch_tables->set(dispatch_tables->length() + 3, *signature_table); 305 new_dispatch_tables->set(dispatch_tables->length() + 3, *signature_table);
306 306
307 table_obj->SetInternalField(WasmTableObject::kDispatchTables, 307 table_obj->SetEmbedderField(WasmTableObject::kDispatchTables,
308 *new_dispatch_tables); 308 *new_dispatch_tables);
309 309
310 return new_dispatch_tables; 310 return new_dispatch_tables;
311 } 311 }
312 312
313 DEFINE_OBJ_ACCESSORS(WasmTableObject, functions, kFunctions, FixedArray) 313 DEFINE_OBJ_ACCESSORS(WasmTableObject, functions, kFunctions, FixedArray)
314 314
315 uint32_t WasmTableObject::current_length() { return functions()->length(); } 315 uint32_t WasmTableObject::current_length() { return functions()->length(); }
316 316
317 bool WasmTableObject::has_maximum_length() { 317 bool WasmTableObject::has_maximum_length() {
318 return GetInternalField(kMaximum)->Number() >= 0; 318 return GetEmbedderField(kMaximum)->Number() >= 0;
319 } 319 }
320 320
321 int64_t WasmTableObject::maximum_length() { 321 int64_t WasmTableObject::maximum_length() {
322 return static_cast<int64_t>(GetInternalField(kMaximum)->Number()); 322 return static_cast<int64_t>(GetEmbedderField(kMaximum)->Number());
323 } 323 }
324 324
325 WasmTableObject* WasmTableObject::cast(Object* object) { 325 WasmTableObject* WasmTableObject::cast(Object* object) {
326 DCHECK(object && object->IsJSObject()); 326 DCHECK(object && object->IsJSObject());
327 // TODO(titzer): brand check for WasmTableObject. 327 // TODO(titzer): brand check for WasmTableObject.
328 return reinterpret_cast<WasmTableObject*>(object); 328 return reinterpret_cast<WasmTableObject*>(object);
329 } 329 }
330 330
331 void WasmTableObject::Grow(Isolate* isolate, Handle<WasmTableObject> table, 331 void WasmTableObject::Grow(Isolate* isolate, Handle<WasmTableObject> table,
332 uint32_t count) { 332 uint32_t count) {
333 Handle<FixedArray> dispatch_tables(table->dispatch_tables()); 333 Handle<FixedArray> dispatch_tables(table->dispatch_tables());
334 wasm::GrowDispatchTables(isolate, dispatch_tables, 334 wasm::GrowDispatchTables(isolate, dispatch_tables,
335 table->functions()->length(), count); 335 table->functions()->length(), count);
336 } 336 }
337 337
338 Handle<WasmMemoryObject> WasmMemoryObject::New(Isolate* isolate, 338 Handle<WasmMemoryObject> WasmMemoryObject::New(Isolate* isolate,
339 Handle<JSArrayBuffer> buffer, 339 Handle<JSArrayBuffer> buffer,
340 int32_t maximum) { 340 int32_t maximum) {
341 Handle<JSFunction> memory_ctor( 341 Handle<JSFunction> memory_ctor(
342 isolate->native_context()->wasm_memory_constructor()); 342 isolate->native_context()->wasm_memory_constructor());
343 Handle<JSObject> memory_obj = 343 Handle<JSObject> memory_obj =
344 isolate->factory()->NewJSObject(memory_ctor, TENURED); 344 isolate->factory()->NewJSObject(memory_ctor, TENURED);
345 memory_obj->SetInternalField(kWrapperTracerHeader, Smi::kZero); 345 memory_obj->SetEmbedderField(kWrapperTracerHeader, Smi::kZero);
346 346
347 memory_obj->SetInternalField(kArrayBuffer, *buffer); 347 memory_obj->SetEmbedderField(kArrayBuffer, *buffer);
348 Handle<Object> max = isolate->factory()->NewNumber(maximum); 348 Handle<Object> max = isolate->factory()->NewNumber(maximum);
349 memory_obj->SetInternalField(kMaximum, *max); 349 memory_obj->SetEmbedderField(kMaximum, *max);
350 Handle<Symbol> memory_sym(isolate->native_context()->wasm_memory_sym()); 350 Handle<Symbol> memory_sym(isolate->native_context()->wasm_memory_sym());
351 Object::SetProperty(memory_obj, memory_sym, memory_obj, STRICT).Check(); 351 Object::SetProperty(memory_obj, memory_sym, memory_obj, STRICT).Check();
352 return Handle<WasmMemoryObject>::cast(memory_obj); 352 return Handle<WasmMemoryObject>::cast(memory_obj);
353 } 353 }
354 354
355 DEFINE_OBJ_ACCESSORS(WasmMemoryObject, buffer, kArrayBuffer, JSArrayBuffer) 355 DEFINE_OBJ_ACCESSORS(WasmMemoryObject, buffer, kArrayBuffer, JSArrayBuffer)
356 DEFINE_OPTIONAL_OBJ_ACCESSORS(WasmMemoryObject, instances_link, kInstancesLink, 356 DEFINE_OPTIONAL_OBJ_ACCESSORS(WasmMemoryObject, instances_link, kInstancesLink,
357 WasmInstanceWrapper) 357 WasmInstanceWrapper)
358 358
359 uint32_t WasmMemoryObject::current_pages() { 359 uint32_t WasmMemoryObject::current_pages() {
360 return SafeUint32(buffer()->byte_length()) / wasm::WasmModule::kPageSize; 360 return SafeUint32(buffer()->byte_length()) / wasm::WasmModule::kPageSize;
361 } 361 }
362 362
363 bool WasmMemoryObject::has_maximum_pages() { 363 bool WasmMemoryObject::has_maximum_pages() {
364 return GetInternalField(kMaximum)->Number() >= 0; 364 return GetEmbedderField(kMaximum)->Number() >= 0;
365 } 365 }
366 366
367 int32_t WasmMemoryObject::maximum_pages() { 367 int32_t WasmMemoryObject::maximum_pages() {
368 return static_cast<int32_t>(GetInternalField(kMaximum)->Number()); 368 return static_cast<int32_t>(GetEmbedderField(kMaximum)->Number());
369 } 369 }
370 370
371 WasmMemoryObject* WasmMemoryObject::cast(Object* object) { 371 WasmMemoryObject* WasmMemoryObject::cast(Object* object) {
372 DCHECK(object && object->IsJSObject()); 372 DCHECK(object && object->IsJSObject());
373 // TODO(titzer): brand check for WasmMemoryObject. 373 // TODO(titzer): brand check for WasmMemoryObject.
374 return reinterpret_cast<WasmMemoryObject*>(object); 374 return reinterpret_cast<WasmMemoryObject*>(object);
375 } 375 }
376 376
377 void WasmMemoryObject::AddInstance(Isolate* isolate, 377 void WasmMemoryObject::AddInstance(Isolate* isolate,
378 Handle<WasmInstanceObject> instance) { 378 Handle<WasmInstanceObject> instance) {
379 Handle<WasmInstanceWrapper> instance_wrapper = 379 Handle<WasmInstanceWrapper> instance_wrapper =
380 handle(instance->instance_wrapper()); 380 handle(instance->instance_wrapper());
381 if (has_instances_link()) { 381 if (has_instances_link()) {
382 Handle<WasmInstanceWrapper> current_wrapper(instances_link()); 382 Handle<WasmInstanceWrapper> current_wrapper(instances_link());
383 DCHECK(WasmInstanceWrapper::IsWasmInstanceWrapper(*current_wrapper)); 383 DCHECK(WasmInstanceWrapper::IsWasmInstanceWrapper(*current_wrapper));
384 DCHECK(!current_wrapper->has_previous()); 384 DCHECK(!current_wrapper->has_previous());
385 instance_wrapper->set_next_wrapper(*current_wrapper); 385 instance_wrapper->set_next_wrapper(*current_wrapper);
386 current_wrapper->set_previous_wrapper(*instance_wrapper); 386 current_wrapper->set_previous_wrapper(*instance_wrapper);
387 } 387 }
388 set_instances_link(*instance_wrapper); 388 set_instances_link(*instance_wrapper);
389 } 389 }
390 390
391 void WasmMemoryObject::ResetInstancesLink(Isolate* isolate) { 391 void WasmMemoryObject::ResetInstancesLink(Isolate* isolate) {
392 Handle<Object> undefined = isolate->factory()->undefined_value(); 392 Handle<Object> undefined = isolate->factory()->undefined_value();
393 SetInternalField(kInstancesLink, *undefined); 393 SetEmbedderField(kInstancesLink, *undefined);
394 } 394 }
395 395
396 DEFINE_OBJ_ACCESSORS(WasmInstanceObject, compiled_module, kCompiledModule, 396 DEFINE_OBJ_ACCESSORS(WasmInstanceObject, compiled_module, kCompiledModule,
397 WasmCompiledModule) 397 WasmCompiledModule)
398 DEFINE_OPTIONAL_OBJ_ACCESSORS(WasmInstanceObject, globals_buffer, 398 DEFINE_OPTIONAL_OBJ_ACCESSORS(WasmInstanceObject, globals_buffer,
399 kGlobalsArrayBuffer, JSArrayBuffer) 399 kGlobalsArrayBuffer, JSArrayBuffer)
400 DEFINE_OPTIONAL_OBJ_ACCESSORS(WasmInstanceObject, memory_buffer, 400 DEFINE_OPTIONAL_OBJ_ACCESSORS(WasmInstanceObject, memory_buffer,
401 kMemoryArrayBuffer, JSArrayBuffer) 401 kMemoryArrayBuffer, JSArrayBuffer)
402 DEFINE_OPTIONAL_OBJ_ACCESSORS(WasmInstanceObject, memory_object, kMemoryObject, 402 DEFINE_OPTIONAL_OBJ_ACCESSORS(WasmInstanceObject, memory_object, kMemoryObject,
403 WasmMemoryObject) 403 WasmMemoryObject)
(...skipping 19 matching lines...) Expand all
423 WasmInstanceObject* WasmInstanceObject::cast(Object* object) { 423 WasmInstanceObject* WasmInstanceObject::cast(Object* object) {
424 DCHECK(IsWasmInstanceObject(object)); 424 DCHECK(IsWasmInstanceObject(object));
425 return reinterpret_cast<WasmInstanceObject*>(object); 425 return reinterpret_cast<WasmInstanceObject*>(object);
426 } 426 }
427 427
428 bool WasmInstanceObject::IsWasmInstanceObject(Object* object) { 428 bool WasmInstanceObject::IsWasmInstanceObject(Object* object) {
429 if (!object->IsJSObject()) return false; 429 if (!object->IsJSObject()) return false;
430 430
431 JSObject* obj = JSObject::cast(object); 431 JSObject* obj = JSObject::cast(object);
432 Isolate* isolate = obj->GetIsolate(); 432 Isolate* isolate = obj->GetIsolate();
433 if (obj->GetInternalFieldCount() != kFieldCount) { 433 if (obj->GetEmbedderFieldCount() != kFieldCount) {
434 return false; 434 return false;
435 } 435 }
436 436
437 Object* mem = obj->GetInternalField(kMemoryArrayBuffer); 437 Object* mem = obj->GetEmbedderField(kMemoryArrayBuffer);
438 if (!(mem->IsUndefined(isolate) || mem->IsJSArrayBuffer()) || 438 if (!(mem->IsUndefined(isolate) || mem->IsJSArrayBuffer()) ||
439 !WasmCompiledModule::IsWasmCompiledModule( 439 !WasmCompiledModule::IsWasmCompiledModule(
440 obj->GetInternalField(kCompiledModule))) { 440 obj->GetEmbedderField(kCompiledModule))) {
441 return false; 441 return false;
442 } 442 }
443 443
444 // All checks passed. 444 // All checks passed.
445 return true; 445 return true;
446 } 446 }
447 447
448 Handle<WasmInstanceObject> WasmInstanceObject::New( 448 Handle<WasmInstanceObject> WasmInstanceObject::New(
449 Isolate* isolate, Handle<WasmCompiledModule> compiled_module) { 449 Isolate* isolate, Handle<WasmCompiledModule> compiled_module) {
450 Handle<JSFunction> instance_cons( 450 Handle<JSFunction> instance_cons(
451 isolate->native_context()->wasm_instance_constructor()); 451 isolate->native_context()->wasm_instance_constructor());
452 Handle<JSObject> instance_object = 452 Handle<JSObject> instance_object =
453 isolate->factory()->NewJSObject(instance_cons, TENURED); 453 isolate->factory()->NewJSObject(instance_cons, TENURED);
454 instance_object->SetInternalField(kWrapperTracerHeader, Smi::kZero); 454 instance_object->SetEmbedderField(kWrapperTracerHeader, Smi::kZero);
455 455
456 Handle<Symbol> instance_sym(isolate->native_context()->wasm_instance_sym()); 456 Handle<Symbol> instance_sym(isolate->native_context()->wasm_instance_sym());
457 Object::SetProperty(instance_object, instance_sym, instance_object, STRICT) 457 Object::SetProperty(instance_object, instance_sym, instance_object, STRICT)
458 .Check(); 458 .Check();
459 Handle<WasmInstanceObject> instance( 459 Handle<WasmInstanceObject> instance(
460 reinterpret_cast<WasmInstanceObject*>(*instance_object), isolate); 460 reinterpret_cast<WasmInstanceObject*>(*instance_object), isolate);
461 461
462 instance->SetInternalField(kCompiledModule, *compiled_module); 462 instance->SetEmbedderField(kCompiledModule, *compiled_module);
463 instance->SetInternalField(kMemoryObject, isolate->heap()->undefined_value()); 463 instance->SetEmbedderField(kMemoryObject, isolate->heap()->undefined_value());
464 Handle<WasmInstanceWrapper> instance_wrapper = 464 Handle<WasmInstanceWrapper> instance_wrapper =
465 WasmInstanceWrapper::New(isolate, instance); 465 WasmInstanceWrapper::New(isolate, instance);
466 instance->SetInternalField(kWasmMemInstanceWrapper, *instance_wrapper); 466 instance->SetEmbedderField(kWasmMemInstanceWrapper, *instance_wrapper);
467 return instance; 467 return instance;
468 } 468 }
469 469
470 WasmInstanceObject* WasmExportedFunction::instance() { 470 WasmInstanceObject* WasmExportedFunction::instance() {
471 return WasmInstanceObject::cast(GetInternalField(kInstance)); 471 return WasmInstanceObject::cast(GetEmbedderField(kInstance));
472 } 472 }
473 473
474 int WasmExportedFunction::function_index() { 474 int WasmExportedFunction::function_index() {
475 return SafeInt32(GetInternalField(kIndex)); 475 return SafeInt32(GetEmbedderField(kIndex));
476 } 476 }
477 477
478 WasmExportedFunction* WasmExportedFunction::cast(Object* object) { 478 WasmExportedFunction* WasmExportedFunction::cast(Object* object) {
479 DCHECK(object && object->IsJSFunction()); 479 DCHECK(object && object->IsJSFunction());
480 DCHECK_EQ(Code::JS_TO_WASM_FUNCTION, 480 DCHECK_EQ(Code::JS_TO_WASM_FUNCTION,
481 JSFunction::cast(object)->code()->kind()); 481 JSFunction::cast(object)->code()->kind());
482 // TODO(titzer): brand check for WasmExportedFunction. 482 // TODO(titzer): brand check for WasmExportedFunction.
483 return reinterpret_cast<WasmExportedFunction*>(object); 483 return reinterpret_cast<WasmExportedFunction*>(object);
484 } 484 }
485 485
(...skipping 12 matching lines...) Expand all
498 } else { 498 } else {
499 name = maybe_name.ToHandleChecked(); 499 name = maybe_name.ToHandleChecked();
500 } 500 }
501 DCHECK_EQ(Code::JS_TO_WASM_FUNCTION, export_wrapper->kind()); 501 DCHECK_EQ(Code::JS_TO_WASM_FUNCTION, export_wrapper->kind());
502 Handle<SharedFunctionInfo> shared = 502 Handle<SharedFunctionInfo> shared =
503 isolate->factory()->NewSharedFunctionInfo(name, export_wrapper, false); 503 isolate->factory()->NewSharedFunctionInfo(name, export_wrapper, false);
504 shared->set_length(arity); 504 shared->set_length(arity);
505 shared->set_internal_formal_parameter_count(arity); 505 shared->set_internal_formal_parameter_count(arity);
506 Handle<JSFunction> function = isolate->factory()->NewFunction( 506 Handle<JSFunction> function = isolate->factory()->NewFunction(
507 isolate->wasm_function_map(), name, export_wrapper); 507 isolate->wasm_function_map(), name, export_wrapper);
508 function->SetInternalField(kWrapperTracerHeader, Smi::kZero); 508 function->SetEmbedderField(kWrapperTracerHeader, Smi::kZero);
509 509
510 function->set_shared(*shared); 510 function->set_shared(*shared);
511 511
512 function->SetInternalField(kInstance, *instance); 512 function->SetEmbedderField(kInstance, *instance);
513 function->SetInternalField(kIndex, Smi::FromInt(func_index)); 513 function->SetEmbedderField(kIndex, Smi::FromInt(func_index));
514 return Handle<WasmExportedFunction>::cast(function); 514 return Handle<WasmExportedFunction>::cast(function);
515 } 515 }
516 516
517 bool WasmSharedModuleData::IsWasmSharedModuleData(Object* object) { 517 bool WasmSharedModuleData::IsWasmSharedModuleData(Object* object) {
518 if (!object->IsFixedArray()) return false; 518 if (!object->IsFixedArray()) return false;
519 FixedArray* arr = FixedArray::cast(object); 519 FixedArray* arr = FixedArray::cast(object);
520 if (arr->length() != kFieldCount) return false; 520 if (arr->length() != kFieldCount) return false;
521 Isolate* isolate = arr->GetIsolate(); 521 Isolate* isolate = arr->GetIsolate();
522 if (!arr->get(kModuleWrapper)->IsForeign()) return false; 522 if (!arr->get(kModuleWrapper)->IsForeign()) return false;
523 if (!arr->get(kModuleBytes)->IsUndefined(isolate) && 523 if (!arr->get(kModuleBytes)->IsUndefined(isolate) &&
(...skipping 664 matching lines...) Expand 10 before | Expand all | Expand 10 after
1188 if (!array->get(kWrapperInstanceObject)->IsWeakCell()) return false; 1188 if (!array->get(kWrapperInstanceObject)->IsWeakCell()) return false;
1189 Isolate* isolate = array->GetIsolate(); 1189 Isolate* isolate = array->GetIsolate();
1190 if (!array->get(kNextInstanceWrapper)->IsUndefined(isolate) && 1190 if (!array->get(kNextInstanceWrapper)->IsUndefined(isolate) &&
1191 !array->get(kNextInstanceWrapper)->IsFixedArray()) 1191 !array->get(kNextInstanceWrapper)->IsFixedArray())
1192 return false; 1192 return false;
1193 if (!array->get(kPreviousInstanceWrapper)->IsUndefined(isolate) && 1193 if (!array->get(kPreviousInstanceWrapper)->IsUndefined(isolate) &&
1194 !array->get(kPreviousInstanceWrapper)->IsFixedArray()) 1194 !array->get(kPreviousInstanceWrapper)->IsFixedArray())
1195 return false; 1195 return false;
1196 return true; 1196 return true;
1197 } 1197 }
OLDNEW
« no previous file with comments | « src/wasm/wasm-objects.h ('k') | test/cctest/test-api.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698