| OLD | NEW |
| 1 // Copyright 2016 the V8 project authors. All rights reserved. | 1 // Copyright 2016 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-debug.h" | 5 #include "src/wasm/wasm-debug.h" |
| 6 | 6 |
| 7 #include "src/assert-scope.h" | 7 #include "src/assert-scope.h" |
| 8 #include "src/debug/debug.h" | 8 #include "src/debug/debug.h" |
| 9 #include "src/factory.h" | 9 #include "src/factory.h" |
| 10 #include "src/isolate.h" | 10 #include "src/isolate.h" |
| (...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 172 } | 172 } |
| 173 | 173 |
| 174 Handle<String> WasmDebugInfo::DisassembleFunction( | 174 Handle<String> WasmDebugInfo::DisassembleFunction( |
| 175 Handle<WasmDebugInfo> debug_info, int func_index) { | 175 Handle<WasmDebugInfo> debug_info, int func_index) { |
| 176 std::ostringstream disassembly_os; | 176 std::ostringstream disassembly_os; |
| 177 | 177 |
| 178 { | 178 { |
| 179 Vector<const uint8_t> bytes_vec = GetFunctionBytes(debug_info, func_index); | 179 Vector<const uint8_t> bytes_vec = GetFunctionBytes(debug_info, func_index); |
| 180 DisallowHeapAllocation no_gc; | 180 DisallowHeapAllocation no_gc; |
| 181 | 181 |
| 182 base::AccountingAllocator allocator; | 182 AccountingAllocator allocator; |
| 183 bool ok = PrintAst( | 183 bool ok = PrintAst( |
| 184 &allocator, FunctionBodyForTesting(bytes_vec.start(), bytes_vec.end()), | 184 &allocator, FunctionBodyForTesting(bytes_vec.start(), bytes_vec.end()), |
| 185 disassembly_os, nullptr); | 185 disassembly_os, nullptr); |
| 186 DCHECK(ok); | 186 DCHECK(ok); |
| 187 USE(ok); | 187 USE(ok); |
| 188 } | 188 } |
| 189 | 189 |
| 190 // Unfortunately, we have to copy the string here. | 190 // Unfortunately, we have to copy the string here. |
| 191 std::string code_str = disassembly_os.str(); | 191 std::string code_str = disassembly_os.str(); |
| 192 CHECK_LE(code_str.length(), static_cast<size_t>(kMaxInt)); | 192 CHECK_LE(code_str.length(), static_cast<size_t>(kMaxInt)); |
| 193 Factory *factory = debug_info->GetIsolate()->factory(); | 193 Factory *factory = debug_info->GetIsolate()->factory(); |
| 194 Vector<const char> code_vec(code_str.data(), | 194 Vector<const char> code_vec(code_str.data(), |
| 195 static_cast<int>(code_str.length())); | 195 static_cast<int>(code_str.length())); |
| 196 return factory->NewStringFromAscii(code_vec).ToHandleChecked(); | 196 return factory->NewStringFromAscii(code_vec).ToHandleChecked(); |
| 197 } | 197 } |
| 198 | 198 |
| 199 Handle<FixedArray> WasmDebugInfo::GetFunctionOffsetTable( | 199 Handle<FixedArray> WasmDebugInfo::GetFunctionOffsetTable( |
| 200 Handle<WasmDebugInfo> debug_info, int func_index) { | 200 Handle<WasmDebugInfo> debug_info, int func_index) { |
| 201 class NullBuf : public std::streambuf {}; | 201 class NullBuf : public std::streambuf {}; |
| 202 NullBuf null_buf; | 202 NullBuf null_buf; |
| 203 std::ostream null_stream(&null_buf); | 203 std::ostream null_stream(&null_buf); |
| 204 | 204 |
| 205 std::vector<std::tuple<uint32_t, int, int>> offset_table_vec; | 205 std::vector<std::tuple<uint32_t, int, int>> offset_table_vec; |
| 206 | 206 |
| 207 { | 207 { |
| 208 Vector<const uint8_t> bytes_vec = GetFunctionBytes(debug_info, func_index); | 208 Vector<const uint8_t> bytes_vec = GetFunctionBytes(debug_info, func_index); |
| 209 DisallowHeapAllocation no_gc; | 209 DisallowHeapAllocation no_gc; |
| 210 | 210 |
| 211 v8::base::AccountingAllocator allocator; | 211 AccountingAllocator allocator; |
| 212 bool ok = PrintAst( | 212 bool ok = PrintAst( |
| 213 &allocator, FunctionBodyForTesting(bytes_vec.start(), bytes_vec.end()), | 213 &allocator, FunctionBodyForTesting(bytes_vec.start(), bytes_vec.end()), |
| 214 null_stream, &offset_table_vec); | 214 null_stream, &offset_table_vec); |
| 215 DCHECK(ok); | 215 DCHECK(ok); |
| 216 USE(ok); | 216 USE(ok); |
| 217 } | 217 } |
| 218 | 218 |
| 219 size_t arr_size = 3 * offset_table_vec.size(); | 219 size_t arr_size = 3 * offset_table_vec.size(); |
| 220 CHECK_LE(arr_size, static_cast<size_t>(kMaxInt)); | 220 CHECK_LE(arr_size, static_cast<size_t>(kMaxInt)); |
| 221 Factory *factory = debug_info->GetIsolate()->factory(); | 221 Factory *factory = debug_info->GetIsolate()->factory(); |
| 222 Handle<FixedArray> offset_table = | 222 Handle<FixedArray> offset_table = |
| 223 factory->NewFixedArray(static_cast<int>(arr_size), TENURED); | 223 factory->NewFixedArray(static_cast<int>(arr_size), TENURED); |
| 224 | 224 |
| 225 int idx = 0; | 225 int idx = 0; |
| 226 for (std::tuple<uint32_t, int, int> elem : offset_table_vec) { | 226 for (std::tuple<uint32_t, int, int> elem : offset_table_vec) { |
| 227 offset_table->set(idx++, Smi::FromInt(std::get<0>(elem))); | 227 offset_table->set(idx++, Smi::FromInt(std::get<0>(elem))); |
| 228 offset_table->set(idx++, Smi::FromInt(std::get<1>(elem))); | 228 offset_table->set(idx++, Smi::FromInt(std::get<1>(elem))); |
| 229 offset_table->set(idx++, Smi::FromInt(std::get<2>(elem))); | 229 offset_table->set(idx++, Smi::FromInt(std::get<2>(elem))); |
| 230 } | 230 } |
| 231 DCHECK_EQ(idx, offset_table->length()); | 231 DCHECK_EQ(idx, offset_table->length()); |
| 232 | 232 |
| 233 return offset_table; | 233 return offset_table; |
| 234 } | 234 } |
| OLD | NEW |