| Index: src/messages.js
|
| diff --git a/src/messages.js b/src/messages.js
|
| index e9a88ece74f78660f4d8d59ed2eee8a31682cf62..4c3d1e70e07ad11736f2dbcf3065fc221c305754 100644
|
| --- a/src/messages.js
|
| +++ b/src/messages.js
|
| @@ -55,7 +55,8 @@ var kMessages = 0;
|
| var kReplacementMarkers =
|
| [ "%0", "%1", "%2", "%3" ]
|
|
|
| -function FormatString(format, args) {
|
| +function FormatString(format, message) {
|
| + var args = %MessageGetArguments(message);
|
| var result = "";
|
| var arg_num = 0;
|
| for (var i = 0; i < format.length; i++) {
|
| @@ -227,15 +228,18 @@ function FormatMessage(message) {
|
| strict_lhs_prefix: ["Prefix increment/decrement may not have eval or arguments operand in strict mode"],
|
| };
|
| }
|
| - var format = kMessages[message.type];
|
| - if (!format) return "<unknown message " + message.type + ">";
|
| - return FormatString(format, message.args);
|
| + var message_type = %MessageGetType(message);
|
| + var format = kMessages[message_type];
|
| + if (!format) return "<unknown message " + message_type + ">";
|
| + return FormatString(format, message);
|
| }
|
|
|
|
|
| function GetLineNumber(message) {
|
| - if (message.startPos == -1) return kNoLineNumberInfo;
|
| - var location = message.script.locationFromPosition(message.startPos, true);
|
| + var start_position = %MessageGetStartPosition(message);
|
| + if (start_position == -1) return kNoLineNumberInfo;
|
| + var script = %MessageGetScript(message);
|
| + var location = script.locationFromPosition(start_position, true);
|
| if (location == null) return kNoLineNumberInfo;
|
| return location.line + 1;
|
| }
|
| @@ -244,7 +248,9 @@ function GetLineNumber(message) {
|
| // Returns the source code line containing the given source
|
| // position, or the empty string if the position is invalid.
|
| function GetSourceLine(message) {
|
| - var location = message.script.locationFromPosition(message.startPos, true);
|
| + var script = %MessageGetScript(message);
|
| + var start_position = %MessageGetStartPosition(message);
|
| + var location = script.locationFromPosition(start_position, true);
|
| if (location == null) return "";
|
| location.restrict();
|
| return location.sourceText();
|
| @@ -623,29 +629,12 @@ SourceSlice.prototype.sourceText = function () {
|
| // Returns the offset of the given position within the containing
|
| // line.
|
| function GetPositionInLine(message) {
|
| - var location = message.script.locationFromPosition(message.startPos, false);
|
| + var script = %MessageGetScript(message);
|
| + var start_position = %MessageGetStartPosition(message);
|
| + var location = script.locationFromPosition(start_position, false);
|
| if (location == null) return -1;
|
| location.restrict();
|
| - return message.startPos - location.start;
|
| -}
|
| -
|
| -
|
| -function ErrorMessage(type, args, startPos, endPos, script, stackTrace,
|
| - stackFrames) {
|
| - this.startPos = startPos;
|
| - this.endPos = endPos;
|
| - this.type = type;
|
| - this.args = args;
|
| - this.script = script;
|
| - this.stackTrace = stackTrace;
|
| - this.stackFrames = stackFrames;
|
| -}
|
| -
|
| -
|
| -function MakeMessage(type, args, startPos, endPos, script, stackTrace,
|
| - stackFrames) {
|
| - return new ErrorMessage(type, args, startPos, endPos, script, stackTrace,
|
| - stackFrames);
|
| + return start_position - location.start;
|
| }
|
|
|
|
|
| @@ -992,7 +981,7 @@ function DefineError(f) {
|
| // DefineOneShotAccessor always inserts a message property and
|
| // ignores setters.
|
| DefineOneShotAccessor(this, 'message', function (obj) {
|
| - return FormatMessage({type: obj.type, args: obj.arguments});
|
| + return FormatMessage(%NewMessageObject(obj.type, obj.arguments));
|
| });
|
| } else if (!IS_UNDEFINED(m)) {
|
| %IgnoreAttributesAndSetProperty(this, 'message', ToString(m));
|
| @@ -1006,11 +995,12 @@ function DefineError(f) {
|
|
|
| function captureStackTrace(obj, cons_opt) {
|
| var stackTraceLimit = $Error.stackTraceLimit;
|
| - if (!stackTraceLimit) return;
|
| + if (!stackTraceLimit || !IS_NUMBER(stackTraceLimit)) return;
|
| if (stackTraceLimit < 0 || stackTraceLimit > 10000)
|
| stackTraceLimit = 10000;
|
| - var raw_stack = %CollectStackTrace(cons_opt ? cons_opt : captureStackTrace,
|
| - stackTraceLimit);
|
| + var raw_stack = %CollectStackTrace(cons_opt
|
| + ? cons_opt
|
| + : captureStackTrace, stackTraceLimit);
|
| DefineOneShotAccessor(obj, 'stack', function (obj) {
|
| return FormatRawStackTrace(obj, raw_stack);
|
| });
|
| @@ -1041,7 +1031,7 @@ function errorToStringDetectCycle() {
|
| try {
|
| var type = this.type;
|
| if (type && !%_CallFunction(this, "message", ObjectHasOwnProperty)) {
|
| - var formatted = FormatMessage({ type: type, args: this.arguments });
|
| + var formatted = FormatMessage(%NewMessageObject(type, this.arguments));
|
| return this.name + ": " + formatted;
|
| }
|
| var message = %_CallFunction(this, "message", ObjectHasOwnProperty)
|
|
|