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

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

Issue 2590243003: [wasm] Set JS API names and function lengths appropriately. (Closed)
Patch Set: Created 4 years 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 | « no previous file | test/mjsunit/wasm/js-api.js » ('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/api-natives.h" 5 #include "src/api-natives.h"
6 #include "src/api.h" 6 #include "src/api.h"
7 #include "src/asmjs/asm-js.h" 7 #include "src/asmjs/asm-js.h"
8 #include "src/asmjs/asm-typer.h" 8 #include "src/asmjs/asm-typer.h"
9 #include "src/asmjs/asm-wasm-builder.h" 9 #include "src/asmjs/asm-wasm-builder.h"
10 #include "src/assert-scope.h" 10 #include "src/assert-scope.h"
(...skipping 555 matching lines...) Expand 10 before | Expand all | Expand 10 after
566 static i::Handle<i::FunctionTemplateInfo> NewTemplate(i::Isolate* i_isolate, 566 static i::Handle<i::FunctionTemplateInfo> NewTemplate(i::Isolate* i_isolate,
567 FunctionCallback func) { 567 FunctionCallback func) {
568 Isolate* isolate = reinterpret_cast<Isolate*>(i_isolate); 568 Isolate* isolate = reinterpret_cast<Isolate*>(i_isolate);
569 Local<FunctionTemplate> local = FunctionTemplate::New(isolate, func); 569 Local<FunctionTemplate> local = FunctionTemplate::New(isolate, func);
570 return v8::Utils::OpenHandle(*local); 570 return v8::Utils::OpenHandle(*local);
571 } 571 }
572 572
573 namespace internal { 573 namespace internal {
574 574
575 Handle<JSFunction> InstallFunc(Isolate* isolate, Handle<JSObject> object, 575 Handle<JSFunction> InstallFunc(Isolate* isolate, Handle<JSObject> object,
576 const char* str, FunctionCallback func) { 576 const char* str, FunctionCallback func,
577 int length = 0) {
577 Handle<String> name = v8_str(isolate, str); 578 Handle<String> name = v8_str(isolate, str);
578 Handle<FunctionTemplateInfo> temp = NewTemplate(isolate, func); 579 Handle<FunctionTemplateInfo> temp = NewTemplate(isolate, func);
579 Handle<JSFunction> function = 580 Handle<JSFunction> function =
580 ApiNatives::InstantiateFunction(temp).ToHandleChecked(); 581 ApiNatives::InstantiateFunction(temp).ToHandleChecked();
582 JSFunction::SetName(function, name, isolate->factory()->empty_string());
583 function->shared()->set_length(length);
581 PropertyAttributes attributes = static_cast<PropertyAttributes>(DONT_ENUM); 584 PropertyAttributes attributes = static_cast<PropertyAttributes>(DONT_ENUM);
582 JSObject::AddProperty(object, name, function, attributes); 585 JSObject::AddProperty(object, name, function, attributes);
583 return function; 586 return function;
584 } 587 }
585 588
586 Handle<JSFunction> InstallGetter(Isolate* isolate, Handle<JSObject> object, 589 Handle<JSFunction> InstallGetter(Isolate* isolate, Handle<JSObject> object,
587 const char* str, FunctionCallback func) { 590 const char* str, FunctionCallback func) {
588 Handle<String> name = v8_str(isolate, str); 591 Handle<String> name = v8_str(isolate, str);
589 Handle<FunctionTemplateInfo> temp = NewTemplate(isolate, func); 592 Handle<FunctionTemplateInfo> temp = NewTemplate(isolate, func);
590 Handle<JSFunction> function = 593 Handle<JSFunction> function =
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
629 Handle<String> name = v8_str(isolate, "WebAssembly"); 632 Handle<String> name = v8_str(isolate, "WebAssembly");
630 Handle<JSFunction> cons = factory->NewFunction(name); 633 Handle<JSFunction> cons = factory->NewFunction(name);
631 JSFunction::SetInstancePrototype( 634 JSFunction::SetInstancePrototype(
632 cons, Handle<Object>(context->initial_object_prototype(), isolate)); 635 cons, Handle<Object>(context->initial_object_prototype(), isolate));
633 cons->shared()->set_instance_class_name(*name); 636 cons->shared()->set_instance_class_name(*name);
634 Handle<JSObject> webassembly = factory->NewJSObject(cons, TENURED); 637 Handle<JSObject> webassembly = factory->NewJSObject(cons, TENURED);
635 PropertyAttributes attributes = static_cast<PropertyAttributes>(DONT_ENUM); 638 PropertyAttributes attributes = static_cast<PropertyAttributes>(DONT_ENUM);
636 JSObject::AddProperty(global, name, webassembly, attributes); 639 JSObject::AddProperty(global, name, webassembly, attributes);
637 640
638 // Setup compile 641 // Setup compile
639 InstallFunc(isolate, webassembly, "compile", WebAssemblyCompile); 642 InstallFunc(isolate, webassembly, "compile", WebAssemblyCompile, 1);
640 643
641 // Setup compile 644 // Setup compile
642 InstallFunc(isolate, webassembly, "validate", WebAssemblyValidate); 645 InstallFunc(isolate, webassembly, "validate", WebAssemblyValidate, 1);
643 646
644 // Setup Module 647 // Setup Module
645 Handle<JSFunction> module_constructor = 648 Handle<JSFunction> module_constructor =
646 InstallFunc(isolate, webassembly, "Module", WebAssemblyModule); 649 InstallFunc(isolate, webassembly, "Module", WebAssemblyModule, 1);
647 context->set_wasm_module_constructor(*module_constructor); 650 context->set_wasm_module_constructor(*module_constructor);
648 Handle<JSObject> module_proto = 651 Handle<JSObject> module_proto =
649 factory->NewJSObject(module_constructor, TENURED); 652 factory->NewJSObject(module_constructor, TENURED);
650 i::Handle<i::Map> map = isolate->factory()->NewMap( 653 i::Handle<i::Map> map = isolate->factory()->NewMap(
651 i::JS_OBJECT_TYPE, i::JSObject::kHeaderSize + 654 i::JS_OBJECT_TYPE, i::JSObject::kHeaderSize +
652 WasmModuleObject::kFieldCount * i::kPointerSize); 655 WasmModuleObject::kFieldCount * i::kPointerSize);
653 JSFunction::SetInitialMap(module_constructor, map, module_proto); 656 JSFunction::SetInitialMap(module_constructor, map, module_proto);
654 JSObject::AddProperty(module_proto, isolate->factory()->constructor_string(), 657 JSObject::AddProperty(module_proto, isolate->factory()->constructor_string(),
655 module_constructor, DONT_ENUM); 658 module_constructor, DONT_ENUM);
656 659
657 // Setup Instance 660 // Setup Instance
658 Handle<JSFunction> instance_constructor = 661 Handle<JSFunction> instance_constructor =
659 InstallFunc(isolate, webassembly, "Instance", WebAssemblyInstance); 662 InstallFunc(isolate, webassembly, "Instance", WebAssemblyInstance, 1);
660 context->set_wasm_instance_constructor(*instance_constructor); 663 context->set_wasm_instance_constructor(*instance_constructor);
661 664
662 // Setup Table 665 // Setup Table
663 Handle<JSFunction> table_constructor = 666 Handle<JSFunction> table_constructor =
664 InstallFunc(isolate, webassembly, "Table", WebAssemblyTable); 667 InstallFunc(isolate, webassembly, "Table", WebAssemblyTable, 1);
665 context->set_wasm_table_constructor(*table_constructor); 668 context->set_wasm_table_constructor(*table_constructor);
666 Handle<JSObject> table_proto = 669 Handle<JSObject> table_proto =
667 factory->NewJSObject(table_constructor, TENURED); 670 factory->NewJSObject(table_constructor, TENURED);
668 map = isolate->factory()->NewMap( 671 map = isolate->factory()->NewMap(
669 i::JS_OBJECT_TYPE, i::JSObject::kHeaderSize + 672 i::JS_OBJECT_TYPE, i::JSObject::kHeaderSize +
670 WasmTableObject::kFieldCount * i::kPointerSize); 673 WasmTableObject::kFieldCount * i::kPointerSize);
671 JSFunction::SetInitialMap(table_constructor, map, table_proto); 674 JSFunction::SetInitialMap(table_constructor, map, table_proto);
672 JSObject::AddProperty(table_proto, isolate->factory()->constructor_string(), 675 JSObject::AddProperty(table_proto, isolate->factory()->constructor_string(),
673 table_constructor, DONT_ENUM); 676 table_constructor, DONT_ENUM);
674 InstallGetter(isolate, table_proto, "length", WebAssemblyTableGetLength); 677 InstallGetter(isolate, table_proto, "length", WebAssemblyTableGetLength);
675 InstallFunc(isolate, table_proto, "grow", WebAssemblyTableGrow); 678 InstallFunc(isolate, table_proto, "grow", WebAssemblyTableGrow, 1);
676 InstallFunc(isolate, table_proto, "get", WebAssemblyTableGet); 679 InstallFunc(isolate, table_proto, "get", WebAssemblyTableGet, 1);
677 InstallFunc(isolate, table_proto, "set", WebAssemblyTableSet); 680 InstallFunc(isolate, table_proto, "set", WebAssemblyTableSet, 2);
678 681
679 // Setup Memory 682 // Setup Memory
680 Handle<JSFunction> memory_constructor = 683 Handle<JSFunction> memory_constructor =
681 InstallFunc(isolate, webassembly, "Memory", WebAssemblyMemory); 684 InstallFunc(isolate, webassembly, "Memory", WebAssemblyMemory, 1);
682 context->set_wasm_memory_constructor(*memory_constructor); 685 context->set_wasm_memory_constructor(*memory_constructor);
683 Handle<JSObject> memory_proto = 686 Handle<JSObject> memory_proto =
684 factory->NewJSObject(memory_constructor, TENURED); 687 factory->NewJSObject(memory_constructor, TENURED);
685 map = isolate->factory()->NewMap( 688 map = isolate->factory()->NewMap(
686 i::JS_OBJECT_TYPE, i::JSObject::kHeaderSize + 689 i::JS_OBJECT_TYPE, i::JSObject::kHeaderSize +
687 WasmMemoryObject::kFieldCount * i::kPointerSize); 690 WasmMemoryObject::kFieldCount * i::kPointerSize);
688 JSFunction::SetInitialMap(memory_constructor, map, memory_proto); 691 JSFunction::SetInitialMap(memory_constructor, map, memory_proto);
689 JSObject::AddProperty(memory_proto, isolate->factory()->constructor_string(), 692 JSObject::AddProperty(memory_proto, isolate->factory()->constructor_string(),
690 memory_constructor, DONT_ENUM); 693 memory_constructor, DONT_ENUM);
691 InstallFunc(isolate, memory_proto, "grow", WebAssemblyMemoryGrow); 694 InstallFunc(isolate, memory_proto, "grow", WebAssemblyMemoryGrow, 1);
692 InstallGetter(isolate, memory_proto, "buffer", WebAssemblyMemoryGetBuffer); 695 InstallGetter(isolate, memory_proto, "buffer", WebAssemblyMemoryGetBuffer);
693 696
694 // Setup errors 697 // Setup errors
695 attributes = static_cast<PropertyAttributes>(DONT_ENUM); 698 attributes = static_cast<PropertyAttributes>(DONT_ENUM);
696 Handle<JSFunction> compile_error( 699 Handle<JSFunction> compile_error(
697 isolate->native_context()->wasm_compile_error_function()); 700 isolate->native_context()->wasm_compile_error_function());
698 JSObject::AddProperty(webassembly, isolate->factory()->CompileError_string(), 701 JSObject::AddProperty(webassembly, isolate->factory()->CompileError_string(),
699 compile_error, attributes); 702 compile_error, attributes);
700 Handle<JSFunction> link_error( 703 Handle<JSFunction> link_error(
701 isolate->native_context()->wasm_link_error_function()); 704 isolate->native_context()->wasm_link_error_function());
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
764 i::Handle<i::Symbol> symbol(isolate->context()->wasm_memory_sym(), isolate); 767 i::Handle<i::Symbol> symbol(isolate->context()->wasm_memory_sym(), isolate);
765 return HasBrand(value, symbol); 768 return HasBrand(value, symbol);
766 } 769 }
767 770
768 bool WasmJs::IsWasmTableObject(Isolate* isolate, Handle<Object> value) { 771 bool WasmJs::IsWasmTableObject(Isolate* isolate, Handle<Object> value) {
769 i::Handle<i::Symbol> symbol(isolate->context()->wasm_table_sym(), isolate); 772 i::Handle<i::Symbol> symbol(isolate->context()->wasm_table_sym(), isolate);
770 return HasBrand(value, symbol); 773 return HasBrand(value, symbol);
771 } 774 }
772 } // namespace internal 775 } // namespace internal
773 } // namespace v8 776 } // namespace v8
OLDNEW
« no previous file with comments | « no previous file | test/mjsunit/wasm/js-api.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698