| OLD | NEW |
| 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 776 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 787 | 787 |
| 788 Handle<Symbol> memory_sym = factory->NewPrivateSymbol(); | 788 Handle<Symbol> memory_sym = factory->NewPrivateSymbol(); |
| 789 context->set_wasm_memory_sym(*memory_sym); | 789 context->set_wasm_memory_sym(*memory_sym); |
| 790 | 790 |
| 791 // Bind the WebAssembly object. | 791 // Bind the WebAssembly object. |
| 792 Handle<String> name = v8_str(isolate, "WebAssembly"); | 792 Handle<String> name = v8_str(isolate, "WebAssembly"); |
| 793 Handle<JSFunction> cons = factory->NewFunction(name); | 793 Handle<JSFunction> cons = factory->NewFunction(name); |
| 794 JSFunction::SetInstancePrototype( | 794 JSFunction::SetInstancePrototype( |
| 795 cons, Handle<Object>(context->initial_object_prototype(), isolate)); | 795 cons, Handle<Object>(context->initial_object_prototype(), isolate)); |
| 796 cons->shared()->set_instance_class_name(*name); | 796 cons->shared()->set_instance_class_name(*name); |
| 797 Handle<JSObject> wasm_object = factory->NewJSObject(cons, TENURED); | 797 Handle<JSObject> webassembly = factory->NewJSObject(cons, TENURED); |
| 798 PropertyAttributes attributes = static_cast<PropertyAttributes>(DONT_ENUM); | 798 PropertyAttributes attributes = static_cast<PropertyAttributes>(DONT_ENUM); |
| 799 JSObject::AddProperty(global, name, wasm_object, attributes); | 799 JSObject::AddProperty(global, name, webassembly, attributes); |
| 800 | 800 |
| 801 // Setup compile | 801 // Setup compile |
| 802 InstallFunc(isolate, wasm_object, "compile", WebAssemblyCompile); | 802 InstallFunc(isolate, webassembly, "compile", WebAssemblyCompile); |
| 803 | 803 |
| 804 // Setup compile | 804 // Setup compile |
| 805 InstallFunc(isolate, wasm_object, "validate", WebAssemblyValidate); | 805 InstallFunc(isolate, webassembly, "validate", WebAssemblyValidate); |
| 806 | 806 |
| 807 // Setup Module | 807 // Setup Module |
| 808 Handle<JSFunction> module_constructor = | 808 Handle<JSFunction> module_constructor = |
| 809 InstallFunc(isolate, wasm_object, "Module", WebAssemblyModule); | 809 InstallFunc(isolate, webassembly, "Module", WebAssemblyModule); |
| 810 context->set_wasm_module_constructor(*module_constructor); | 810 context->set_wasm_module_constructor(*module_constructor); |
| 811 Handle<JSObject> module_proto = | 811 Handle<JSObject> module_proto = |
| 812 factory->NewJSObject(module_constructor, TENURED); | 812 factory->NewJSObject(module_constructor, TENURED); |
| 813 i::Handle<i::Map> map = isolate->factory()->NewMap( | 813 i::Handle<i::Map> map = isolate->factory()->NewMap( |
| 814 i::JS_OBJECT_TYPE, i::JSObject::kHeaderSize + i::kPointerSize); | 814 i::JS_OBJECT_TYPE, i::JSObject::kHeaderSize + i::kPointerSize); |
| 815 JSFunction::SetInitialMap(module_constructor, map, module_proto); | 815 JSFunction::SetInitialMap(module_constructor, map, module_proto); |
| 816 JSObject::AddProperty(module_proto, isolate->factory()->constructor_string(), | 816 JSObject::AddProperty(module_proto, isolate->factory()->constructor_string(), |
| 817 module_constructor, DONT_ENUM); | 817 module_constructor, DONT_ENUM); |
| 818 | 818 |
| 819 // Setup Instance | 819 // Setup Instance |
| 820 Handle<JSFunction> instance_constructor = | 820 Handle<JSFunction> instance_constructor = |
| 821 InstallFunc(isolate, wasm_object, "Instance", WebAssemblyInstance); | 821 InstallFunc(isolate, webassembly, "Instance", WebAssemblyInstance); |
| 822 context->set_wasm_instance_constructor(*instance_constructor); | 822 context->set_wasm_instance_constructor(*instance_constructor); |
| 823 | 823 |
| 824 // Setup Table | 824 // Setup Table |
| 825 Handle<JSFunction> table_constructor = | 825 Handle<JSFunction> table_constructor = |
| 826 InstallFunc(isolate, wasm_object, "Table", WebAssemblyTable); | 826 InstallFunc(isolate, webassembly, "Table", WebAssemblyTable); |
| 827 context->set_wasm_table_constructor(*table_constructor); | 827 context->set_wasm_table_constructor(*table_constructor); |
| 828 Handle<JSObject> table_proto = | 828 Handle<JSObject> table_proto = |
| 829 factory->NewJSObject(table_constructor, TENURED); | 829 factory->NewJSObject(table_constructor, TENURED); |
| 830 map = isolate->factory()->NewMap( | 830 map = isolate->factory()->NewMap( |
| 831 i::JS_OBJECT_TYPE, i::JSObject::kHeaderSize + | 831 i::JS_OBJECT_TYPE, i::JSObject::kHeaderSize + |
| 832 kWasmTableInternalFieldCount * i::kPointerSize); | 832 kWasmTableInternalFieldCount * i::kPointerSize); |
| 833 JSFunction::SetInitialMap(table_constructor, map, table_proto); | 833 JSFunction::SetInitialMap(table_constructor, map, table_proto); |
| 834 JSObject::AddProperty(table_proto, isolate->factory()->constructor_string(), | 834 JSObject::AddProperty(table_proto, isolate->factory()->constructor_string(), |
| 835 table_constructor, DONT_ENUM); | 835 table_constructor, DONT_ENUM); |
| 836 InstallGetter(isolate, table_proto, "length", WebAssemblyTableGetLength); | 836 InstallGetter(isolate, table_proto, "length", WebAssemblyTableGetLength); |
| 837 InstallFunc(isolate, table_proto, "grow", WebAssemblyTableGrow); | 837 InstallFunc(isolate, table_proto, "grow", WebAssemblyTableGrow); |
| 838 InstallFunc(isolate, table_proto, "get", WebAssemblyTableGet); | 838 InstallFunc(isolate, table_proto, "get", WebAssemblyTableGet); |
| 839 InstallFunc(isolate, table_proto, "set", WebAssemblyTableSet); | 839 InstallFunc(isolate, table_proto, "set", WebAssemblyTableSet); |
| 840 | 840 |
| 841 // Setup Memory | 841 // Setup Memory |
| 842 Handle<JSFunction> memory_constructor = | 842 Handle<JSFunction> memory_constructor = |
| 843 InstallFunc(isolate, wasm_object, "Memory", WebAssemblyMemory); | 843 InstallFunc(isolate, webassembly, "Memory", WebAssemblyMemory); |
| 844 context->set_wasm_memory_constructor(*memory_constructor); | 844 context->set_wasm_memory_constructor(*memory_constructor); |
| 845 Handle<JSObject> memory_proto = | 845 Handle<JSObject> memory_proto = |
| 846 factory->NewJSObject(memory_constructor, TENURED); | 846 factory->NewJSObject(memory_constructor, TENURED); |
| 847 map = isolate->factory()->NewMap( | 847 map = isolate->factory()->NewMap( |
| 848 i::JS_OBJECT_TYPE, i::JSObject::kHeaderSize + | 848 i::JS_OBJECT_TYPE, i::JSObject::kHeaderSize + |
| 849 kWasmMemoryInternalFieldCount * i::kPointerSize); | 849 kWasmMemoryInternalFieldCount * i::kPointerSize); |
| 850 JSFunction::SetInitialMap(memory_constructor, map, memory_proto); | 850 JSFunction::SetInitialMap(memory_constructor, map, memory_proto); |
| 851 JSObject::AddProperty(memory_proto, isolate->factory()->constructor_string(), | 851 JSObject::AddProperty(memory_proto, isolate->factory()->constructor_string(), |
| 852 memory_constructor, DONT_ENUM); | 852 memory_constructor, DONT_ENUM); |
| 853 InstallFunc(isolate, memory_proto, "grow", WebAssemblyMemoryGrow); | 853 InstallFunc(isolate, memory_proto, "grow", WebAssemblyMemoryGrow); |
| 854 InstallGetter(isolate, memory_proto, "buffer", WebAssemblyMemoryGetBuffer); | 854 InstallGetter(isolate, memory_proto, "buffer", WebAssemblyMemoryGetBuffer); |
| 855 | 855 |
| 856 // Setup errors | 856 // Setup errors |
| 857 attributes = static_cast<PropertyAttributes>(DONT_DELETE | READ_ONLY); | 857 attributes = static_cast<PropertyAttributes>(DONT_DELETE | READ_ONLY); |
| 858 Handle<JSFunction> compile_error( | 858 Handle<JSFunction> compile_error( |
| 859 isolate->native_context()->wasm_compile_error_function()); | 859 isolate->native_context()->wasm_compile_error_function()); |
| 860 JSObject::AddProperty(wasm_object, isolate->factory()->CompileError_string(), | 860 JSObject::AddProperty(webassembly, isolate->factory()->CompileError_string(), |
| 861 compile_error, attributes); | 861 compile_error, attributes); |
| 862 Handle<JSFunction> runtime_error( | 862 Handle<JSFunction> runtime_error( |
| 863 isolate->native_context()->wasm_runtime_error_function()); | 863 isolate->native_context()->wasm_runtime_error_function()); |
| 864 JSObject::AddProperty(wasm_object, isolate->factory()->RuntimeError_string(), | 864 JSObject::AddProperty(webassembly, isolate->factory()->RuntimeError_string(), |
| 865 runtime_error, attributes); | 865 runtime_error, attributes); |
| 866 } | 866 } |
| 867 | 867 |
| 868 void WasmJs::Install(Isolate* isolate, Handle<JSGlobalObject> global) { | 868 void WasmJs::Install(Isolate* isolate, Handle<JSGlobalObject> global) { |
| 869 if (!FLAG_expose_wasm && !FLAG_validate_asm) { | 869 if (!FLAG_expose_wasm && !FLAG_validate_asm) { |
| 870 return; | 870 return; |
| 871 } | 871 } |
| 872 | 872 |
| 873 Factory* factory = isolate->factory(); | 873 Factory* factory = isolate->factory(); |
| 874 | 874 |
| 875 // Setup wasm function map. | 875 // Setup wasm function map. |
| 876 Handle<Context> context(global->native_context(), isolate); | 876 Handle<Context> context(global->native_context(), isolate); |
| 877 InstallWasmMapsIfNeeded(isolate, context); | 877 InstallWasmMapsIfNeeded(isolate, context); |
| 878 | 878 |
| 879 if (!FLAG_expose_wasm) { | 879 if (!FLAG_expose_wasm) { |
| 880 return; | 880 return; |
| 881 } | 881 } |
| 882 | 882 |
| 883 // Bind the experimental WASM object. | 883 // Bind the experimental "Wasm" object. |
| 884 // TODO(rossberg, titzer): remove once it's no longer needed. | 884 // TODO(rossberg, titzer): remove once it's no longer needed. |
| 885 { | 885 { |
| 886 Handle<String> name = v8_str(isolate, "Wasm"); | 886 Handle<String> name = v8_str(isolate, "Wasm"); |
| 887 Handle<JSFunction> cons = factory->NewFunction(name); | 887 Handle<JSFunction> cons = factory->NewFunction(name); |
| 888 JSFunction::SetInstancePrototype( | 888 JSFunction::SetInstancePrototype( |
| 889 cons, Handle<Object>(context->initial_object_prototype(), isolate)); | 889 cons, Handle<Object>(context->initial_object_prototype(), isolate)); |
| 890 cons->shared()->set_instance_class_name(*name); | 890 cons->shared()->set_instance_class_name(*name); |
| 891 Handle<JSObject> wasm_object = factory->NewJSObject(cons, TENURED); | 891 Handle<JSObject> wasm_object = factory->NewJSObject(cons, TENURED); |
| 892 PropertyAttributes attributes = static_cast<PropertyAttributes>(DONT_ENUM); | 892 PropertyAttributes attributes = static_cast<PropertyAttributes>(DONT_ENUM); |
| 893 JSObject::AddProperty(global, name, wasm_object, attributes); | 893 JSObject::AddProperty(global, name, wasm_object, attributes); |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 974 if (!memory_object->IsUndefined(isolate)) { | 974 if (!memory_object->IsUndefined(isolate)) { |
| 975 DCHECK(IsWasmMemoryObject(isolate, memory_object)); | 975 DCHECK(IsWasmMemoryObject(isolate, memory_object)); |
| 976 // TODO(gdeepti): This should be a weak list of instance objects | 976 // TODO(gdeepti): This should be a weak list of instance objects |
| 977 // for instances that share memory. | 977 // for instances that share memory. |
| 978 JSObject::cast(*memory_object) | 978 JSObject::cast(*memory_object) |
| 979 ->SetInternalField(kWasmMemoryInstanceObject, *instance); | 979 ->SetInternalField(kWasmMemoryInstanceObject, *instance); |
| 980 } | 980 } |
| 981 } | 981 } |
| 982 } // namespace internal | 982 } // namespace internal |
| 983 } // namespace v8 | 983 } // namespace v8 |
| OLD | NEW |