OLD | NEW |
1 // Copyright 2017 the V8 project authors. All rights reserved. | 1 // Copyright 2017 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/module-compiler.h> | 5 #include <src/wasm/module-compiler.h> |
6 | 6 |
7 #include <atomic> | 7 #include <atomic> |
8 | 8 |
9 #include "src/asmjs/asm-js.h" | 9 #include "src/asmjs/asm-js.h" |
10 #include "src/assembler-inl.h" | 10 #include "src/assembler-inl.h" |
(...skipping 1300 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1311 ReportLinkError("imported function does not match the expected type", | 1311 ReportLinkError("imported function does not match the expected type", |
1312 index, module_name, import_name); | 1312 index, module_name, import_name); |
1313 return -1; | 1313 return -1; |
1314 } | 1314 } |
1315 code_table->set(num_imported_functions, *import_wrapper); | 1315 code_table->set(num_imported_functions, *import_wrapper); |
1316 RecordStats(*import_wrapper, counters()); | 1316 RecordStats(*import_wrapper, counters()); |
1317 num_imported_functions++; | 1317 num_imported_functions++; |
1318 break; | 1318 break; |
1319 } | 1319 } |
1320 case kExternalTable: { | 1320 case kExternalTable: { |
1321 if (!WasmJs::IsWasmTableObject(isolate_, value)) { | 1321 if (!value->IsWasmTableObject()) { |
1322 ReportLinkError("table import requires a WebAssembly.Table", index, | 1322 ReportLinkError("table import requires a WebAssembly.Table", index, |
1323 module_name, import_name); | 1323 module_name, import_name); |
1324 return -1; | 1324 return -1; |
1325 } | 1325 } |
1326 WasmIndirectFunctionTable& table = | 1326 WasmIndirectFunctionTable& table = |
1327 module_->function_tables[num_imported_tables]; | 1327 module_->function_tables[num_imported_tables]; |
1328 TableInstance& table_instance = table_instances_[num_imported_tables]; | 1328 TableInstance& table_instance = table_instances_[num_imported_tables]; |
1329 table_instance.table_object = Handle<WasmTableObject>::cast(value); | 1329 table_instance.table_object = Handle<WasmTableObject>::cast(value); |
1330 table_instance.js_wrappers = Handle<FixedArray>( | 1330 table_instance.js_wrappers = Handle<FixedArray>( |
1331 table_instance.table_object->functions(), isolate_); | 1331 table_instance.table_object->functions(), isolate_); |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1383 table_instance.function_table->set(i, *UnwrapImportWrapper(val)); | 1383 table_instance.function_table->set(i, *UnwrapImportWrapper(val)); |
1384 } | 1384 } |
1385 | 1385 |
1386 num_imported_tables++; | 1386 num_imported_tables++; |
1387 break; | 1387 break; |
1388 } | 1388 } |
1389 case kExternalMemory: { | 1389 case kExternalMemory: { |
1390 // Validation should have failed if more than one memory object was | 1390 // Validation should have failed if more than one memory object was |
1391 // provided. | 1391 // provided. |
1392 DCHECK(!instance->has_memory_object()); | 1392 DCHECK(!instance->has_memory_object()); |
1393 if (!WasmJs::IsWasmMemoryObject(isolate_, value)) { | 1393 if (!value->IsWasmMemoryObject()) { |
1394 ReportLinkError("memory import must be a WebAssembly.Memory object", | 1394 ReportLinkError("memory import must be a WebAssembly.Memory object", |
1395 index, module_name, import_name); | 1395 index, module_name, import_name); |
1396 return -1; | 1396 return -1; |
1397 } | 1397 } |
1398 auto memory = Handle<WasmMemoryObject>::cast(value); | 1398 auto memory = Handle<WasmMemoryObject>::cast(value); |
1399 DCHECK(WasmJs::IsWasmMemoryObject(isolate_, memory)); | |
1400 instance->set_memory_object(*memory); | 1399 instance->set_memory_object(*memory); |
1401 memory_ = Handle<JSArrayBuffer>(memory->array_buffer(), isolate_); | 1400 memory_ = Handle<JSArrayBuffer>(memory->array_buffer(), isolate_); |
1402 uint32_t imported_cur_pages = static_cast<uint32_t>( | 1401 uint32_t imported_cur_pages = static_cast<uint32_t>( |
1403 memory_->byte_length()->Number() / WasmModule::kPageSize); | 1402 memory_->byte_length()->Number() / WasmModule::kPageSize); |
1404 if (imported_cur_pages < module_->min_mem_pages) { | 1403 if (imported_cur_pages < module_->min_mem_pages) { |
1405 thrower_->LinkError( | 1404 thrower_->LinkError( |
1406 "memory import %d is smaller than maximum %u, got %u", index, | 1405 "memory import %d is smaller than maximum %u, got %u", index, |
1407 module_->min_mem_pages, imported_cur_pages); | 1406 module_->min_mem_pages, imported_cur_pages); |
1408 } | 1407 } |
1409 int32_t imported_max_pages = memory->maximum_pages(); | 1408 int32_t imported_max_pages = memory->maximum_pages(); |
(...skipping 945 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2355 HandleScope scope(job_->isolate_); | 2354 HandleScope scope(job_->isolate_); |
2356 Handle<WasmModuleObject> result = | 2355 Handle<WasmModuleObject> result = |
2357 WasmModuleObject::New(job_->isolate_, job_->compiled_module_); | 2356 WasmModuleObject::New(job_->isolate_, job_->compiled_module_); |
2358 // {job_} is deleted in AsyncCompileSucceeded, therefore the {return}. | 2357 // {job_} is deleted in AsyncCompileSucceeded, therefore the {return}. |
2359 return job_->AsyncCompileSucceeded(result); | 2358 return job_->AsyncCompileSucceeded(result); |
2360 } | 2359 } |
2361 }; | 2360 }; |
2362 } // namespace wasm | 2361 } // namespace wasm |
2363 } // namespace internal | 2362 } // namespace internal |
2364 } // namespace v8 | 2363 } // namespace v8 |
OLD | NEW |