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 <stdlib.h> | 5 #include <stdlib.h> |
6 #include <string.h> | 6 #include <string.h> |
7 | 7 |
8 #include "src/objects-inl.h" | 8 #include "src/objects-inl.h" |
9 #include "src/snapshot/code-serializer.h" | 9 #include "src/snapshot/code-serializer.h" |
10 #include "src/version.h" | 10 #include "src/version.h" |
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
264 { | 264 { |
265 DisallowHeapAllocation assume_no_gc; | 265 DisallowHeapAllocation assume_no_gc; |
266 Handle<WasmCompiledModule> compiled_part( | 266 Handle<WasmCompiledModule> compiled_part( |
267 WasmCompiledModule::cast(module_object->GetInternalField(0)), | 267 WasmCompiledModule::cast(module_object->GetInternalField(0)), |
268 current_isolate()); | 268 current_isolate()); |
269 CHECK_EQ(memcmp(compiled_part->module_bytes()->GetCharsAddress(), | 269 CHECK_EQ(memcmp(compiled_part->module_bytes()->GetCharsAddress(), |
270 wire_bytes().first, wire_bytes().second), | 270 wire_bytes().first, wire_bytes().second), |
271 0); | 271 0); |
272 } | 272 } |
273 Handle<JSObject> instance = | 273 Handle<JSObject> instance = |
274 WasmModule::Instantiate(current_isolate(), &thrower, module_object, | 274 SyncInstantiate(current_isolate(), &thrower, module_object, |
275 Handle<JSReceiver>::null(), | 275 Handle<JSReceiver>::null(), |
276 Handle<JSArrayBuffer>::null()) | 276 MaybeHandle<JSArrayBuffer>()) |
277 .ToHandleChecked(); | 277 .ToHandleChecked(); |
278 Handle<Object> params[1] = { | 278 Handle<Object> params[1] = { |
279 Handle<Object>(Smi::FromInt(41), current_isolate())}; | 279 Handle<Object>(Smi::FromInt(41), current_isolate())}; |
280 int32_t result = testing::CallWasmFunctionForTesting( | 280 int32_t result = testing::CallWasmFunctionForTesting( |
281 current_isolate(), instance, &thrower, kFunctionName, 1, params, | 281 current_isolate(), instance, &thrower, kFunctionName, 1, params, |
282 ModuleOrigin::kWasmOrigin); | 282 ModuleOrigin::kWasmOrigin); |
283 CHECK(result == 42); | 283 CHECK(result == 42); |
284 } | 284 } |
285 | 285 |
286 Isolate* current_isolate() { | 286 Isolate* current_isolate() { |
(...skipping 24 matching lines...) Expand all Loading... |
311 WasmSerializationTest::BuildWireBytes(zone(), &buffer); | 311 WasmSerializationTest::BuildWireBytes(zone(), &buffer); |
312 | 312 |
313 Isolate* serialization_isolate = CcTest::InitIsolateOnce(); | 313 Isolate* serialization_isolate = CcTest::InitIsolateOnce(); |
314 ErrorThrower thrower(serialization_isolate, ""); | 314 ErrorThrower thrower(serialization_isolate, ""); |
315 uint8_t* bytes = nullptr; | 315 uint8_t* bytes = nullptr; |
316 size_t bytes_size = 0; | 316 size_t bytes_size = 0; |
317 { | 317 { |
318 HandleScope scope(serialization_isolate); | 318 HandleScope scope(serialization_isolate); |
319 testing::SetupIsolateForWasmModule(serialization_isolate); | 319 testing::SetupIsolateForWasmModule(serialization_isolate); |
320 | 320 |
321 ModuleResult decoding_result = | 321 MaybeHandle<WasmModuleObject> module_object = |
322 DecodeWasmModule(serialization_isolate, buffer.begin(), buffer.end(), | 322 SyncCompile(serialization_isolate, &thrower, |
323 false, kWasmOrigin); | 323 ModuleWireBytes(buffer.begin(), buffer.end())); |
324 CHECK(!decoding_result.failed()); | |
325 | 324 |
326 Handle<WasmModuleWrapper> module_wrapper = WasmModuleWrapper::New( | 325 MaybeHandle<WasmCompiledModule> compiled_module( |
327 serialization_isolate, const_cast<WasmModule*>(decoding_result.val)); | 326 module_object.ToHandleChecked()->compiled_module(), |
328 | 327 serialization_isolate); |
329 MaybeHandle<WasmCompiledModule> compiled_module = | |
330 decoding_result.val->CompileFunctions( | |
331 serialization_isolate, module_wrapper, &thrower, | |
332 ModuleWireBytes(buffer.begin(), buffer.end()), | |
333 Handle<Script>::null(), Vector<const byte>::empty()); | |
334 CHECK(!compiled_module.is_null()); | 328 CHECK(!compiled_module.is_null()); |
335 Handle<JSObject> module_obj = WasmModuleObject::New( | 329 Handle<JSObject> module_obj = WasmModuleObject::New( |
336 serialization_isolate, compiled_module.ToHandleChecked()); | 330 serialization_isolate, compiled_module.ToHandleChecked()); |
337 v8::Local<v8::Object> v8_module_obj = v8::Utils::ToLocal(module_obj); | 331 v8::Local<v8::Object> v8_module_obj = v8::Utils::ToLocal(module_obj); |
338 CHECK(v8_module_obj->IsWebAssemblyCompiledModule()); | 332 CHECK(v8_module_obj->IsWebAssemblyCompiledModule()); |
339 | 333 |
340 v8::Local<v8::WasmCompiledModule> v8_compiled_module = | 334 v8::Local<v8::WasmCompiledModule> v8_compiled_module = |
341 v8_module_obj.As<v8::WasmCompiledModule>(); | 335 v8_module_obj.As<v8::WasmCompiledModule>(); |
342 v8::Local<v8::String> uncompiled_bytes = | 336 v8::Local<v8::String> uncompiled_bytes = |
343 v8_compiled_module->GetWasmWireBytes(); | 337 v8_compiled_module->GetWasmWireBytes(); |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
430 v8::internal::AccountingAllocator allocator; | 424 v8::internal::AccountingAllocator allocator; |
431 Zone zone(&allocator, ZONE_NAME); | 425 Zone zone(&allocator, ZONE_NAME); |
432 ZoneBuffer buffer(&zone); | 426 ZoneBuffer buffer(&zone); |
433 WasmSerializationTest::BuildWireBytes(&zone, &buffer); | 427 WasmSerializationTest::BuildWireBytes(&zone, &buffer); |
434 Isolate* isolate = CcTest::InitIsolateOnce(); | 428 Isolate* isolate = CcTest::InitIsolateOnce(); |
435 HandleScope scope(isolate); | 429 HandleScope scope(isolate); |
436 testing::SetupIsolateForWasmModule(isolate); | 430 testing::SetupIsolateForWasmModule(isolate); |
437 CcTest::isolate()->SetAllowCodeGenerationFromStringsCallback(False); | 431 CcTest::isolate()->SetAllowCodeGenerationFromStringsCallback(False); |
438 | 432 |
439 ErrorThrower thrower(isolate, "block codegen"); | 433 ErrorThrower thrower(isolate, "block codegen"); |
440 MaybeHandle<WasmModuleObject> ret = wasm::CreateModuleObjectFromBytes( | 434 MaybeHandle<WasmModuleObject> ret = wasm::SyncCompile( |
441 isolate, buffer.begin(), buffer.end(), &thrower, | 435 isolate, &thrower, ModuleWireBytes(buffer.begin(), buffer.end())); |
442 wasm::ModuleOrigin::kWasmOrigin, Handle<v8::internal::Script>::null(), | |
443 Vector<const byte>::empty()); | |
444 CcTest::isolate()->SetAllowCodeGenerationFromStringsCallback(nullptr); | 436 CcTest::isolate()->SetAllowCodeGenerationFromStringsCallback(nullptr); |
445 CHECK(ret.is_null()); | 437 CHECK(ret.is_null()); |
446 CHECK(thrower.error()); | 438 CHECK(thrower.error()); |
447 } | 439 } |
448 | 440 |
449 TEST(BlockWasmCodeGenAtDeserialization) { | 441 TEST(BlockWasmCodeGenAtDeserialization) { |
450 WasmSerializationTest test; | 442 WasmSerializationTest test; |
451 { | 443 { |
452 HandleScope scope(test.current_isolate()); | 444 HandleScope scope(test.current_isolate()); |
453 test.current_isolate_v8()->SetAllowCodeGenerationFromStringsCallback(False); | 445 test.current_isolate_v8()->SetAllowCodeGenerationFromStringsCallback(False); |
(...skipping 502 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
956 }; | 948 }; |
957 | 949 |
958 testing::CompileInstantiateWasmModuleForTesting(isolate, &thrower, data, | 950 testing::CompileInstantiateWasmModuleForTesting(isolate, &thrower, data, |
959 data + arraysize(data), | 951 data + arraysize(data), |
960 ModuleOrigin::kWasmOrigin); | 952 ModuleOrigin::kWasmOrigin); |
961 // It should not be possible to instantiate this module. | 953 // It should not be possible to instantiate this module. |
962 CHECK(thrower.error()); | 954 CHECK(thrower.error()); |
963 } | 955 } |
964 Cleanup(); | 956 Cleanup(); |
965 } | 957 } |
OLD | NEW |