Index: src/liveedit-debugger.js |
diff --git a/src/liveedit-debugger.js b/src/liveedit-debugger.js |
index cfcdb818c97e0287a9dd2d0ea37917f0912588ae..451b146bde798e4b4c81b62c39d0adcb1b158630 100644 |
--- a/src/liveedit-debugger.js |
+++ b/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); |