diff options
Diffstat (limited to 'deps/v8/src/inspector/wasm-translation.h')
-rw-r--r-- | deps/v8/src/inspector/wasm-translation.h | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/deps/v8/src/inspector/wasm-translation.h b/deps/v8/src/inspector/wasm-translation.h new file mode 100644 index 0000000000..2162edee67 --- /dev/null +++ b/deps/v8/src/inspector/wasm-translation.h @@ -0,0 +1,75 @@ +// Copyright 2016 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef V8_INSPECTOR_WASMTRANSLATION_H_ +#define V8_INSPECTOR_WASMTRANSLATION_H_ + +#include <unordered_map> + +#include "include/v8.h" +#include "src/base/macros.h" +#include "src/debug/debug-interface.h" +#include "src/inspector/string-16.h" + +namespace v8_inspector { + +// Forward declarations. +class V8DebuggerAgentImpl; + +class WasmTranslation { + public: + enum Mode { Raw, Disassemble }; + + explicit WasmTranslation(v8::Isolate* isolate); + ~WasmTranslation(); + + // Set translation mode. + void SetMode(Mode mode) { mode_ = mode; } + + // Make a wasm script known to the translation. This will trigger a number of + // didParseScript calls to the given debugger agent. + // Only locations referencing a registered script will be translated by the + // Translate functions below. + void AddScript(v8::Local<v8::debug::WasmScript> script, + V8DebuggerAgentImpl* agent); + + // Clear all registered scripts. + void Clear(); + + // Translate a location as generated by V8 to a location that should be sent + // over protocol. + // Does nothing for locations referencing a script which was not registered + // before via AddScript. + // Line and column are 0-based. + // Returns true if the location was translated, false otherwise. + bool TranslateWasmScriptLocationToProtocolLocation(String16* script_id, + int* line_number, + int* column_number); + + // Translate back from protocol locations (potentially referencing artificial + // scripts for individual wasm functions) to locations that make sense to V8. + // Does nothing if the location was not generated by the translate method + // above. + // Returns true if the location was translated, false otherwise. + bool TranslateProtocolLocationToWasmScriptLocation(String16* script_id, + int* line_number, + int* column_number); + + private: + class TranslatorImpl; + friend class TranslatorImpl; + + void AddFakeScript(const String16& scriptId, TranslatorImpl* translator); + + v8::Isolate* isolate_; + std::unordered_map<int, std::unique_ptr<TranslatorImpl>> wasm_translators_; + std::unordered_map<String16, TranslatorImpl*> fake_scripts_; + Mode mode_; + + DISALLOW_COPY_AND_ASSIGN(WasmTranslation); +}; + +} // namespace v8_inspector + +#endif // V8_INSPECTOR_WASMTRANSLATION_H_ |