diff options
Diffstat (limited to 'deps/v8/src/liveedit-debugger.js')
-rw-r--r-- | deps/v8/src/liveedit-debugger.js | 37 |
1 files changed, 36 insertions, 1 deletions
diff --git a/deps/v8/src/liveedit-debugger.js b/deps/v8/src/liveedit-debugger.js index cfcdb818c9..451b146bde 100644 --- a/deps/v8/src/liveedit-debugger.js +++ b/deps/v8/src/liveedit-debugger.js @@ -76,7 +76,17 @@ Debug.LiveEdit = new function() { try { new_compile_info = GatherCompileInfo(new_source, script); } catch (e) { - throw new Failure("Failed to compile new version of script: " + e); + var failure = + new Failure("Failed to compile new version of script: " + e); + if (e instanceof SyntaxError) { + var details = { + type: "liveedit_compile_error", + syntaxErrorMessage: e.message + }; + CopyErrorPositionToDetails(e, details); + failure.details = details; + } + throw failure; } var root_new_node = BuildCodeInfoTree(new_compile_info); @@ -978,6 +988,31 @@ Debug.LiveEdit = new function() { return "LiveEdit Failure: " + this.message; }; + function CopyErrorPositionToDetails(e, details) { + function createPositionStruct(script, position) { + if (position == -1) return; + var location = script.locationFromPosition(position, true); + if (location == null) return; + return { + line: location.line + 1, + column: location.column + 1, + position: position + }; + } + + if (!("scriptObject" in e) || !("startPosition" in e)) { + return; + } + + var script = e.scriptObject; + + var position_struct = { + start: createPositionStruct(script, e.startPosition), + end: createPositionStruct(script, e.endPosition) + }; + details.position = position_struct; + } + // A testing entry. function GetPcFromSourcePos(func, source_pos) { return %GetFunctionCodePositionFromSource(func, source_pos); |