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 <memory> | 5 #include <memory> |
6 | 6 |
7 #include "src/assembler-inl.h" | 7 #include "src/assembler-inl.h" |
8 #include "src/base/adapters.h" | 8 #include "src/base/adapters.h" |
9 #include "src/base/atomic-utils.h" | 9 #include "src/base/atomic-utils.h" |
10 #include "src/code-stubs.h" | 10 #include "src/code-stubs.h" |
(...skipping 2165 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2176 bool wasm::IsWasmInstance(Object* object) { | 2176 bool wasm::IsWasmInstance(Object* object) { |
2177 return WasmInstanceObject::IsWasmInstanceObject(object); | 2177 return WasmInstanceObject::IsWasmInstanceObject(object); |
2178 } | 2178 } |
2179 | 2179 |
2180 Handle<Script> wasm::GetScript(Handle<JSObject> instance) { | 2180 Handle<Script> wasm::GetScript(Handle<JSObject> instance) { |
2181 WasmCompiledModule* compiled_module = | 2181 WasmCompiledModule* compiled_module = |
2182 WasmInstanceObject::cast(*instance)->compiled_module(); | 2182 WasmInstanceObject::cast(*instance)->compiled_module(); |
2183 return handle(compiled_module->script()); | 2183 return handle(compiled_module->script()); |
2184 } | 2184 } |
2185 | 2185 |
| 2186 bool wasm::IsWasmCodegenAllowed(Isolate* isolate, Handle<Context> context) { |
| 2187 return isolate->allow_code_gen_callback() == nullptr || |
| 2188 isolate->allow_code_gen_callback()(v8::Utils::ToLocal(context)); |
| 2189 } |
| 2190 |
2186 // TODO(clemensh): origin can be inferred from asm_js_script; remove it. | 2191 // TODO(clemensh): origin can be inferred from asm_js_script; remove it. |
2187 MaybeHandle<WasmModuleObject> wasm::CreateModuleObjectFromBytes( | 2192 MaybeHandle<WasmModuleObject> wasm::CreateModuleObjectFromBytes( |
2188 Isolate* isolate, const byte* start, const byte* end, ErrorThrower* thrower, | 2193 Isolate* isolate, const byte* start, const byte* end, ErrorThrower* thrower, |
2189 ModuleOrigin origin, Handle<Script> asm_js_script, | 2194 ModuleOrigin origin, Handle<Script> asm_js_script, |
2190 Vector<const byte> asm_js_offset_table_bytes) { | 2195 Vector<const byte> asm_js_offset_table_bytes) { |
2191 MaybeHandle<WasmModuleObject> nothing; | 2196 MaybeHandle<WasmModuleObject> nothing; |
| 2197 |
| 2198 if (!IsWasmCodegenAllowed(isolate, isolate->native_context())) { |
| 2199 thrower->CompileError("Wasm code generation disallowed in this context"); |
| 2200 return nothing; |
| 2201 } |
| 2202 |
2192 ModuleResult result = DecodeWasmModule(isolate, start, end, false, origin); | 2203 ModuleResult result = DecodeWasmModule(isolate, start, end, false, origin); |
2193 if (result.failed()) { | 2204 if (result.failed()) { |
2194 if (result.val) delete result.val; | 2205 if (result.val) delete result.val; |
2195 thrower->CompileFailed("Wasm decoding failed", result); | 2206 thrower->CompileFailed("Wasm decoding failed", result); |
2196 return nothing; | 2207 return nothing; |
2197 } | 2208 } |
2198 | 2209 |
2199 // The {module_wrapper} will take ownership of the {WasmModule} object, | 2210 // The {module_wrapper} will take ownership of the {WasmModule} object, |
2200 // and it will be destroyed when the GC reclaims the wrapper object. | 2211 // and it will be destroyed when the GC reclaims the wrapper object. |
2201 Handle<WasmModuleWrapper> module_wrapper = | 2212 Handle<WasmModuleWrapper> module_wrapper = |
(...skipping 426 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2628 | 2639 |
2629 JSObject::AddProperty(entry, name_string, export_name.ToHandleChecked(), | 2640 JSObject::AddProperty(entry, name_string, export_name.ToHandleChecked(), |
2630 NONE); | 2641 NONE); |
2631 JSObject::AddProperty(entry, kind_string, export_kind, NONE); | 2642 JSObject::AddProperty(entry, kind_string, export_kind, NONE); |
2632 | 2643 |
2633 storage->set(index, *entry); | 2644 storage->set(index, *entry); |
2634 } | 2645 } |
2635 | 2646 |
2636 return array_object; | 2647 return array_object; |
2637 } | 2648 } |
OLD | NEW |