162ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch// Copyright 2016 the V8 project authors. All rights reserved. 262ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch// Use of this source code is governed by a BSD-style license that can be 362ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch// found in the LICENSE file. 462ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch 562ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch#ifndef V8_INSPECTOR_WASMTRANSLATION_H_ 662ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch#define V8_INSPECTOR_WASMTRANSLATION_H_ 762ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch 862ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch#include <unordered_map> 962ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch 1062ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch#include "include/v8.h" 1162ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch#include "src/base/macros.h" 1262ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch#include "src/debug/debug-interface.h" 1362ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch#include "src/inspector/string-16.h" 1462ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch 1562ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdochnamespace v8_inspector { 1662ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch 1762ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch// Forward declarations. 1862ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdochclass V8DebuggerAgentImpl; 1962ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch 2062ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdochclass WasmTranslation { 2162ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch public: 2262ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch enum Mode { Raw, Disassemble }; 2362ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch 2462ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch explicit WasmTranslation(v8::Isolate* isolate); 2562ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch ~WasmTranslation(); 2662ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch 2762ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch // Set translation mode. 2862ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch void SetMode(Mode mode) { mode_ = mode; } 2962ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch 3062ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch // Make a wasm script known to the translation. This will trigger a number of 3162ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch // didParseScript calls to the given debugger agent. 3262ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch // Only locations referencing a registered script will be translated by the 3362ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch // Translate functions below. 3462ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch void AddScript(v8::Local<v8::debug::WasmScript> script, 3562ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch V8DebuggerAgentImpl* agent); 3662ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch 3762ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch // Clear all registered scripts. 3862ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch void Clear(); 3962ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch 4062ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch // Translate a location as generated by V8 to a location that should be sent 4162ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch // over protocol. 4262ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch // Does nothing for locations referencing a script which was not registered 4362ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch // before via AddScript. 4462ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch // Line and column are 0-based. 4562ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch // Returns true if the location was translated, false otherwise. 4662ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch bool TranslateWasmScriptLocationToProtocolLocation(String16* script_id, 4762ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch int* line_number, 4862ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch int* column_number); 4962ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch 5062ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch // Translate back from protocol locations (potentially referencing artificial 5162ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch // scripts for individual wasm functions) to locations that make sense to V8. 5262ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch // Does nothing if the location was not generated by the translate method 5362ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch // above. 5462ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch // Returns true if the location was translated, false otherwise. 5562ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch bool TranslateProtocolLocationToWasmScriptLocation(String16* script_id, 5662ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch int* line_number, 5762ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch int* column_number); 5862ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch 5962ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch private: 6062ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch class TranslatorImpl; 6162ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch friend class TranslatorImpl; 6262ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch 6362ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch void AddFakeScript(const String16& scriptId, TranslatorImpl* translator); 6462ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch 6562ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch v8::Isolate* isolate_; 6662ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch std::unordered_map<int, std::unique_ptr<TranslatorImpl>> wasm_translators_; 6762ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch std::unordered_map<String16, TranslatorImpl*> fake_scripts_; 6862ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch Mode mode_; 6962ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch 7062ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch DISALLOW_COPY_AND_ASSIGN(WasmTranslation); 7162ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch}; 7262ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch 7362ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch} // namespace v8_inspector 7462ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch 7562ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch#endif // V8_INSPECTOR_WASMTRANSLATION_H_ 76