| 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/wasm/wasm-objects.h" | 5 #include "src/wasm/wasm-objects.h" |
| 6 #include "src/wasm/wasm-module.h" | 6 #include "src/wasm/wasm-module.h" |
| 7 | 7 |
| 8 #define TRACE(...) \ | 8 #define TRACE(...) \ |
| 9 do { \ | 9 do { \ |
| 10 if (FLAG_trace_wasm_instances) PrintF(__VA_ARGS__); \ | 10 if (FLAG_trace_wasm_instances) PrintF(__VA_ARGS__); \ |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 42 | 42 |
| 43 static uint32_t SafeUint32(Object* value) { | 43 static uint32_t SafeUint32(Object* value) { |
| 44 if (value->IsSmi()) { | 44 if (value->IsSmi()) { |
| 45 int32_t val = Smi::cast(value)->value(); | 45 int32_t val = Smi::cast(value)->value(); |
| 46 CHECK_GE(val, 0); | 46 CHECK_GE(val, 0); |
| 47 return static_cast<uint32_t>(val); | 47 return static_cast<uint32_t>(val); |
| 48 } | 48 } |
| 49 DCHECK(value->IsHeapNumber()); | 49 DCHECK(value->IsHeapNumber()); |
| 50 HeapNumber* num = HeapNumber::cast(value); | 50 HeapNumber* num = HeapNumber::cast(value); |
| 51 CHECK_GE(num->value(), 0.0); | 51 CHECK_GE(num->value(), 0.0); |
| 52 CHECK_LE(num->value(), static_cast<double>(kMaxUInt32)); | 52 CHECK_LE(num->value(), kMaxUInt32); |
| 53 return static_cast<uint32_t>(num->value()); | 53 return static_cast<uint32_t>(num->value()); |
| 54 } | 54 } |
| 55 | 55 |
| 56 static int32_t SafeInt32(Object* value) { | 56 static int32_t SafeInt32(Object* value) { |
| 57 if (value->IsSmi()) { | 57 if (value->IsSmi()) { |
| 58 return Smi::cast(value)->value(); | 58 return Smi::cast(value)->value(); |
| 59 } | 59 } |
| 60 DCHECK(value->IsHeapNumber()); | 60 DCHECK(value->IsHeapNumber()); |
| 61 HeapNumber* num = HeapNumber::cast(value); | 61 HeapNumber* num = HeapNumber::cast(value); |
| 62 CHECK_GE(num->value(), static_cast<double>(Smi::kMinValue)); | 62 CHECK_GE(num->value(), Smi::kMinValue); |
| 63 CHECK_LE(num->value(), static_cast<double>(Smi::kMaxValue)); | 63 CHECK_LE(num->value(), Smi::kMaxValue); |
| 64 return static_cast<int32_t>(num->value()); | 64 return static_cast<int32_t>(num->value()); |
| 65 } | 65 } |
| 66 | 66 |
| 67 Handle<WasmModuleObject> WasmModuleObject::New( | 67 Handle<WasmModuleObject> WasmModuleObject::New( |
| 68 Isolate* isolate, Handle<WasmCompiledModule> compiled_module) { | 68 Isolate* isolate, Handle<WasmCompiledModule> compiled_module) { |
| 69 ModuleOrigin origin = compiled_module->module()->origin; | 69 ModuleOrigin origin = compiled_module->module()->origin; |
| 70 | 70 |
| 71 Handle<JSObject> module_object; | 71 Handle<JSObject> module_object; |
| 72 if (origin == ModuleOrigin::kWasmOrigin) { | 72 if (origin == ModuleOrigin::kWasmOrigin) { |
| 73 Handle<JSFunction> module_cons( | 73 Handle<JSFunction> module_cons( |
| (...skipping 290 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 364 | 364 |
| 365 uint32_t WasmCompiledModule::default_mem_size() const { | 365 uint32_t WasmCompiledModule::default_mem_size() const { |
| 366 return min_mem_pages() * WasmModule::kPageSize; | 366 return min_mem_pages() * WasmModule::kPageSize; |
| 367 } | 367 } |
| 368 | 368 |
| 369 Vector<const uint8_t> WasmCompiledModule::GetRawFunctionName( | 369 Vector<const uint8_t> WasmCompiledModule::GetRawFunctionName( |
| 370 uint32_t func_index) { | 370 uint32_t func_index) { |
| 371 DCHECK_GT(module()->functions.size(), func_index); | 371 DCHECK_GT(module()->functions.size(), func_index); |
| 372 WasmFunction& function = module()->functions[func_index]; | 372 WasmFunction& function = module()->functions[func_index]; |
| 373 SeqOneByteString* bytes = ptr_to_module_bytes(); | 373 SeqOneByteString* bytes = ptr_to_module_bytes(); |
| 374 DCHECK_GE(static_cast<size_t>(bytes->length()), function.name_offset); | 374 DCHECK_GE(bytes->length(), function.name_offset); |
| 375 DCHECK_GE(static_cast<size_t>(bytes->length() - function.name_offset), | 375 DCHECK_GE(bytes->length() - function.name_offset, function.name_length); |
| 376 function.name_length); | |
| 377 return Vector<const uint8_t>(bytes->GetCharsAddress() + function.name_offset, | 376 return Vector<const uint8_t>(bytes->GetCharsAddress() + function.name_offset, |
| 378 function.name_length); | 377 function.name_length); |
| 379 } | 378 } |
| 380 | 379 |
| 381 int WasmCompiledModule::GetFunctionOffset(uint32_t func_index) const { | 380 int WasmCompiledModule::GetFunctionOffset(uint32_t func_index) const { |
| 382 std::vector<WasmFunction>& functions = module()->functions; | 381 std::vector<WasmFunction>& functions = module()->functions; |
| 383 if (static_cast<uint32_t>(func_index) >= functions.size()) return -1; | 382 if (static_cast<uint32_t>(func_index) >= functions.size()) return -1; |
| 384 DCHECK_GE(static_cast<uint32_t>(kMaxInt), | 383 DCHECK_GE(kMaxInt, functions[func_index].code_start_offset); |
| 385 functions[func_index].code_start_offset); | |
| 386 return static_cast<int>(functions[func_index].code_start_offset); | 384 return static_cast<int>(functions[func_index].code_start_offset); |
| 387 } | 385 } |
| 388 | 386 |
| 389 int WasmCompiledModule::GetContainingFunction(uint32_t byte_offset) const { | 387 int WasmCompiledModule::GetContainingFunction(uint32_t byte_offset) const { |
| 390 std::vector<WasmFunction>& functions = module()->functions; | 388 std::vector<WasmFunction>& functions = module()->functions; |
| 391 | 389 |
| 392 // Binary search for a function containing the given position. | 390 // Binary search for a function containing the given position. |
| 393 int left = 0; // inclusive | 391 int left = 0; // inclusive |
| 394 int right = static_cast<int>(functions.size()); // exclusive | 392 int right = static_cast<int>(functions.size()); // exclusive |
| 395 if (right == 0) return false; | 393 if (right == 0) return false; |
| (...skipping 21 matching lines...) Expand all Loading... |
| 417 if (func_index < 0) return false; | 415 if (func_index < 0) return false; |
| 418 | 416 |
| 419 WasmFunction& function = module()->functions[func_index]; | 417 WasmFunction& function = module()->functions[func_index]; |
| 420 | 418 |
| 421 info->line = func_index; | 419 info->line = func_index; |
| 422 info->column = position - function.code_start_offset; | 420 info->column = position - function.code_start_offset; |
| 423 info->line_start = function.code_start_offset; | 421 info->line_start = function.code_start_offset; |
| 424 info->line_end = function.code_end_offset; | 422 info->line_end = function.code_end_offset; |
| 425 return true; | 423 return true; |
| 426 } | 424 } |
| OLD | NEW |