Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(661)

Unified Diff: src/inspector/v8-debugger-script.cc

Issue 2532433003: [inspector] Split V8DebuggerScript implementation for wasm (Closed)
Patch Set: Refactor a bit Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/inspector/v8-debugger-script.h ('k') | src/inspector/wasm-translation.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/inspector/v8-debugger-script.cc
diff --git a/src/inspector/v8-debugger-script.cc b/src/inspector/v8-debugger-script.cc
index 229c32a38895df4ed0badd5b06f1c9d79944571f..3f304323366ace1eaa4277af07c2ec5407639a33 100644
--- a/src/inspector/v8-debugger-script.cc
+++ b/src/inspector/v8-debugger-script.cc
@@ -66,37 +66,134 @@ static String16 calculateHash(const String16& str) {
return hash.toString();
}
-V8DebuggerScript::V8DebuggerScript(v8::Isolate* isolate,
- v8::Local<v8::DebugInterface::Script> script,
- bool isLiveEdit) {
- m_isolate = script->GetIsolate();
- m_id = String16::fromInteger(script->Id());
+namespace {
+
+class ActualScript : public V8DebuggerScript {
+ friend class V8DebuggerScript;
+
+ public:
+ ActualScript(v8::Local<v8::DebugInterface::Script> script, String16 url)
+ : V8DebuggerScript(script->GetIsolate(),
+ String16::fromInteger(script->Id()), std::move(url)) {}
+
+ bool isLiveEdit() const override { return m_isLiveEdit; }
+
+ const String16& executionContextAuxData() const override {
+ return m_executionContextAuxData;
+ }
+
+ const String16& sourceMappingURL() const override {
+ return m_sourceMappingURL;
+ }
+
+ String16 source(v8::Isolate* isolate) const override {
+ if (!m_sourceObj.IsEmpty())
+ return toProtocolString(m_sourceObj.Get(isolate));
+ return V8DebuggerScript::source(isolate);
+ }
+
+ void setSourceMappingURL(const String16& sourceMappingURL) override {
+ m_sourceMappingURL = sourceMappingURL;
+ }
+
+ void setSource(v8::Local<v8::String> source) override {
+ m_source = String16();
+ m_sourceObj.Reset(m_isolate, source);
+ m_hash = String16();
jgruber 2016/11/24 15:54:50 m_hash is duplicated in ActualScript and V8Debugge
Clemens Hammacher 2016/11/24 17:57:02 Wow, good catch. I remember that I wanted to check
+ }
+
+ bool getPossibleBreakpoints(
+ const v8::DebugInterface::Location& start,
+ const v8::DebugInterface::Location& end,
+ std::vector<v8::DebugInterface::Location>* locations) override {
+ v8::HandleScope scope(m_isolate);
+ v8::Local<v8::DebugInterface::Script> script = m_script.Get(m_isolate);
+ return script->GetPossibleBreakpoints(start, end, locations);
+ }
+
+ private:
+ String16 m_sourceMappingURL;
+ v8::Global<v8::String> m_sourceObj;
+ String16 m_source;
jgruber 2016/11/24 15:54:50 Likewise for m_source.
Clemens Hammacher 2016/11/24 17:57:02 Done.
+ mutable String16 m_hash;
+ String16 m_executionContextAuxData;
+ bool m_isLiveEdit = false;
+ v8::Global<v8::DebugInterface::Script> m_script;
+};
+
+class WasmVirtualScript : public V8DebuggerScript {
+ friend class V8DebuggerScript;
+
+ public:
+ WasmVirtualScript(v8::Local<v8::DebugInterface::Script> script, String16 id,
+ String16 url, String16 source)
+ : V8DebuggerScript(script->GetIsolate(), std::move(id), std::move(url)),
+ m_script(script->GetIsolate(), script) {
+ m_source = std::move(source);
+ }
+
+ const String16& sourceMappingURL() const override { return emptyString(); }
+ const String16& executionContextAuxData() const override {
+ return emptyString();
+ }
+ bool isLiveEdit() const override { return false; }
+
+ bool getPossibleBreakpoints(
+ const v8::DebugInterface::Location& start,
+ const v8::DebugInterface::Location& end,
+ std::vector<v8::DebugInterface::Location>* locations) override {
+ // TODO(clemensh): Returning false produces the protocol error "Internal
+ // error". Implement and fix expected output of
+ // wasm-get-breakable-locations.js.
+ return false;
+ }
+
+ private:
+ static const String16& emptyString() {
+ static const String16 singleEmptyString;
+ return singleEmptyString;
+ }
+
+ // TODO(clemensh): Move away from using scripts for wasm (bug 667767).
+ v8::Global<v8::DebugInterface::Script> m_script;
+};
+
+} // namespace
+
+std::unique_ptr<V8DebuggerScript> V8DebuggerScript::Create(
+ v8::Isolate* isolate, v8::Local<v8::DebugInterface::Script> scriptObj,
+ bool isLiveEdit) {
+ String16 url;
+ String16 sourceUrl;
v8::Local<v8::String> tmp;
- if (script->Name().ToLocal(&tmp)) m_url = toProtocolString(tmp);
- if (script->SourceURL().ToLocal(&tmp)) {
- m_sourceURL = toProtocolString(tmp);
- if (m_url.isEmpty()) m_url = toProtocolString(tmp);
- }
- if (script->SourceMappingURL().ToLocal(&tmp))
- m_sourceMappingURL = toProtocolString(tmp);
- m_startLine = script->LineOffset();
- m_startColumn = script->ColumnOffset();
- std::vector<int> lineEnds = script->LineEnds();
+ if (scriptObj->Name().ToLocal(&tmp)) url = toProtocolString(tmp);
+ if (scriptObj->SourceURL().ToLocal(&tmp)) {
+ sourceUrl = toProtocolString(tmp);
+ if (url.isEmpty()) url = sourceUrl;
+ }
+ std::unique_ptr<ActualScript> script(new ActualScript(scriptObj, url));
+ script->m_sourceURL = std::move(sourceUrl);
+ if (scriptObj->SourceMappingURL().ToLocal(&tmp))
+ script->m_sourceMappingURL = toProtocolString(tmp);
+ script->m_startLine = scriptObj->LineOffset();
+ script->m_startColumn = scriptObj->ColumnOffset();
+ std::vector<int> lineEnds = scriptObj->LineEnds();
CHECK(lineEnds.size());
int source_length = lineEnds[lineEnds.size() - 1];
if (lineEnds.size()) {
- m_endLine = static_cast<int>(lineEnds.size()) + m_startLine - 1;
+ script->m_endLine =
+ static_cast<int>(lineEnds.size()) + script->m_startLine - 1;
if (lineEnds.size() > 1) {
- m_endColumn = source_length - lineEnds[lineEnds.size() - 2] - 1;
+ script->m_endColumn = source_length - lineEnds[lineEnds.size() - 2] - 1;
} else {
- m_endColumn = source_length + m_startColumn;
+ script->m_endColumn = source_length + script->m_startColumn;
}
} else {
- m_endLine = m_startLine;
- m_endColumn = m_startColumn;
+ script->m_endLine = script->m_startLine;
+ script->m_endColumn = script->m_startColumn;
}
- if (script->ContextData().ToLocal(&tmp)) {
+ if (scriptObj->ContextData().ToLocal(&tmp)) {
String16 contextData = toProtocolString(tmp);
size_t firstComma = contextData.find(",", 0);
size_t secondComma = firstComma != String16::kNotFound
@@ -106,39 +203,44 @@ V8DebuggerScript::V8DebuggerScript(v8::Isolate* isolate,
String16 executionContextId =
contextData.substring(firstComma + 1, secondComma - firstComma - 1);
bool isOk = false;
- m_executionContextId = executionContextId.toInteger(&isOk);
- if (!isOk) m_executionContextId = 0;
- m_executionContextAuxData = contextData.substring(secondComma + 1);
+ script->m_executionContextId = executionContextId.toInteger(&isOk);
+ if (!isOk) script->m_executionContextId = 0;
+ script->m_executionContextAuxData =
+ contextData.substring(secondComma + 1);
}
}
- m_isLiveEdit = isLiveEdit;
+ script->m_isLiveEdit = isLiveEdit;
- if (script->Source().ToLocal(&tmp)) {
- m_sourceObj.Reset(m_isolate, tmp);
+ if (scriptObj->Source().ToLocal(&tmp)) {
+ script->m_sourceObj.Reset(script->m_isolate, tmp);
String16 source = toProtocolString(tmp);
// V8 will not count last line if script source ends with \n.
if (source.length() > 1 && source[source.length() - 1] == '\n') {
- m_endLine++;
- m_endColumn = 0;
+ script->m_endLine++;
+ script->m_endColumn = 0;
}
}
- m_script.Reset(m_isolate, script);
+ script->m_script.Reset(script->m_isolate, scriptObj);
+ return std::move(script);
}
-V8DebuggerScript::V8DebuggerScript(String16 id, String16 url, String16 source)
- : m_id(std::move(id)), m_url(std::move(url)), m_source(std::move(source)) {
+std::unique_ptr<V8DebuggerScript> V8DebuggerScript::CreateWasm(
+ v8::Local<v8::DebugInterface::Script> script, String16 id, String16 url,
+ String16 source) {
int num_lines = 0;
int last_newline = -1;
- size_t next_newline = m_source.find('\n', last_newline + 1);
+ size_t next_newline = source.find('\n', last_newline + 1);
while (next_newline != String16::kNotFound) {
last_newline = static_cast<int>(next_newline);
- next_newline = m_source.find('\n', last_newline + 1);
+ next_newline = source.find('\n', last_newline + 1);
++num_lines;
}
- m_endLine = num_lines;
- m_endColumn = static_cast<int>(m_source.length()) - last_newline - 1;
+ int m_endLine = num_lines;
+ int m_endColumn = static_cast<int>(source.length()) - last_newline - 1;
+ return std::unique_ptr<WasmVirtualScript>(new WasmVirtualScript(
+ script, std::move(id), std::move(url), std::move(source)));
}
V8DebuggerScript::~V8DebuggerScript() {}
@@ -147,11 +249,6 @@ const String16& V8DebuggerScript::sourceURL() const {
return m_sourceURL.isEmpty() ? m_url : m_sourceURL;
}
-String16 V8DebuggerScript::source(v8::Isolate* isolate) const {
- if (m_sourceObj.IsEmpty()) return m_source;
- return toProtocolString(m_sourceObj.Get(isolate));
-}
-
const String16& V8DebuggerScript::hash(v8::Isolate* isolate) const {
if (m_hash.isEmpty()) m_hash = calculateHash(source(isolate));
DCHECK(!m_hash.isEmpty());
@@ -162,23 +259,8 @@ void V8DebuggerScript::setSourceURL(const String16& sourceURL) {
m_sourceURL = sourceURL;
}
-void V8DebuggerScript::setSourceMappingURL(const String16& sourceMappingURL) {
- m_sourceMappingURL = sourceMappingURL;
-}
-
-void V8DebuggerScript::setSource(v8::Local<v8::String> source) {
- m_source = String16();
- m_sourceObj.Reset(m_isolate, source);
- m_hash = String16();
-}
-
-bool V8DebuggerScript::getPossibleBreakpoints(
- const v8::DebugInterface::Location& start,
- const v8::DebugInterface::Location& end,
- std::vector<v8::DebugInterface::Location>* locations) {
- v8::HandleScope scope(m_isolate);
- v8::Local<v8::DebugInterface::Script> script = m_script.Get(m_isolate);
- return script->GetPossibleBreakpoints(start, end, locations);
-}
+V8DebuggerScript::V8DebuggerScript(v8::Isolate* isolate, String16 id,
+ String16 url)
+ : m_id(std::move(id)), m_url(std::move(url)), m_isolate(isolate) {}
} // namespace v8_inspector
« no previous file with comments | « src/inspector/v8-debugger-script.h ('k') | src/inspector/wasm-translation.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698