From 9200f3ba9e7ae3695f039fb9fa089773e7fad136 Mon Sep 17 00:00:00 2001 From: "peter.rybin@gmail.com" Date: Fri, 30 Oct 2009 16:38:37 +0000 Subject: [PATCH] Report function source position via JSON protocol Review URL: http://codereview.chromium.org/341024 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@3189 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/mirror-delay.js | 65 +++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 56 insertions(+), 9 deletions(-) diff --git a/src/mirror-delay.js b/src/mirror-delay.js index cde5534..82fb9c2 100644 --- a/src/mirror-delay.js +++ b/src/mirror-delay.js @@ -849,6 +849,33 @@ FunctionMirror.prototype.script = function() { /** + * Returns the script source position for the function. Only makes sense + * for functions which has a script defined. + * @return {Number or undefined} in-script position for the function + */ +FunctionMirror.prototype.sourcePosition_ = function() { + // Return script if function is resolved. Otherwise just fall through + // to return undefined. + if (this.resolved()) { + return %FunctionGetScriptSourcePosition(this.value_); + } +}; + + +/** + * Returns the script source location object for the function. Only makes sense + * for functions which has a script defined. + * @return {Location or undefined} in-script location for the function begin + */ +FunctionMirror.prototype.sourceLocation = function() { + if (this.resolved() && this.script()) { + return this.script().locationFromPosition(this.sourcePosition_(), + true); + } +}; + + +/** * Returns objects constructed by this function. * @param {number} opt_max_instances Optional parameter specifying the maximum * number of instances to return. @@ -2119,6 +2146,9 @@ JSONProtocolSerializer.prototype.serializeObject_ = function(mirror, content, } if (mirror.script()) { content.script = this.serializeReference(mirror.script()); + content.scriptId = mirror.script().id(); + + serializeLocationFields(mirror.sourceLocation(), content); } } @@ -2151,6 +2181,31 @@ JSONProtocolSerializer.prototype.serializeObject_ = function(mirror, content, /** + * Serialize location information to the following JSON format: + * + * "position":"", + * "line":"", + * "column":"", + * + * @param {SourceLocation} location The location to serialize, may be undefined. + */ +function serializeLocationFields (location, content) { + if (!location) { + return; + } + content.position = location.position; + var line = location.line; + if (!IS_UNDEFINED(line)) { + content.line = line; + } + var column = location.column; + if (!IS_UNDEFINED(column)) { + content.column = column; + } +} + + +/** * Serialize property information to the following JSON format for building the * array of properties. * @@ -2218,15 +2273,7 @@ JSONProtocolSerializer.prototype.serializeFrame_ = function(mirror, content) { x[i] = local; } content.locals = x; - content.position = mirror.sourcePosition(); - var line = mirror.sourceLine(); - if (!IS_UNDEFINED(line)) { - content.line = line; - } - var column = mirror.sourceColumn(); - if (!IS_UNDEFINED(column)) { - content.column = column; - } + serializeLocationFields(mirror.sourceLocation(), content); var source_line_text = mirror.sourceLineText(); if (!IS_UNDEFINED(source_line_text)) { content.sourceLineText = source_line_text; -- 2.7.4