OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // ------------------------------------------------------------------- | 5 // ------------------------------------------------------------------- |
6 | 6 |
7 var $errorToString; | 7 var $errorToString; |
| 8 var $getStackTraceLine; |
8 var $internalErrorSymbol; | 9 var $internalErrorSymbol; |
| 10 var $messageGetPositionInLine; |
| 11 var $messageGetLineNumber; |
| 12 var $messageGetSourceLine; |
| 13 var $stackOverflowBoilerplate; |
9 var $stackTraceSymbol; | 14 var $stackTraceSymbol; |
10 var MakeError; | 15 var MakeError; |
11 var MakeEvalError; | 16 var MakeEvalError; |
12 var MakeRangeError; | 17 var MakeRangeError; |
13 var MakeReferenceError; | 18 var MakeReferenceError; |
14 var MakeSyntaxError; | 19 var MakeSyntaxError; |
15 var MakeTypeError; | 20 var MakeTypeError; |
16 var MakeURIError; | 21 var MakeURIError; |
17 | 22 |
18 (function(global, utils) { | 23 (function(global, utils) { |
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
201 function GetLineNumber(message) { | 206 function GetLineNumber(message) { |
202 var start_position = %MessageGetStartPosition(message); | 207 var start_position = %MessageGetStartPosition(message); |
203 if (start_position == -1) return kNoLineNumberInfo; | 208 if (start_position == -1) return kNoLineNumberInfo; |
204 var script = %MessageGetScript(message); | 209 var script = %MessageGetScript(message); |
205 var location = script.locationFromPosition(start_position, true); | 210 var location = script.locationFromPosition(start_position, true); |
206 if (location == null) return kNoLineNumberInfo; | 211 if (location == null) return kNoLineNumberInfo; |
207 return location.line + 1; | 212 return location.line + 1; |
208 } | 213 } |
209 | 214 |
210 | 215 |
211 //Returns the offset of the given position within the containing line. | |
212 function GetColumnNumber(message) { | |
213 var script = %MessageGetScript(message); | |
214 var start_position = %MessageGetStartPosition(message); | |
215 var location = script.locationFromPosition(start_position, true); | |
216 if (location == null) return -1; | |
217 return location.column; | |
218 } | |
219 | |
220 | |
221 // Returns the source code line containing the given source | 216 // Returns the source code line containing the given source |
222 // position, or the empty string if the position is invalid. | 217 // position, or the empty string if the position is invalid. |
223 function GetSourceLine(message) { | 218 function GetSourceLine(message) { |
224 var script = %MessageGetScript(message); | 219 var script = %MessageGetScript(message); |
225 var start_position = %MessageGetStartPosition(message); | 220 var start_position = %MessageGetStartPosition(message); |
226 var location = script.locationFromPosition(start_position, true); | 221 var location = script.locationFromPosition(start_position, true); |
227 if (location == null) return ""; | 222 if (location == null) return ""; |
228 return location.sourceText(); | 223 return location.sourceText(); |
229 } | 224 } |
230 | 225 |
231 | |
232 /** | 226 /** |
233 * Find a line number given a specific source position. | 227 * Find a line number given a specific source position. |
234 * @param {number} position The source position. | 228 * @param {number} position The source position. |
235 * @return {number} 0 if input too small, -1 if input too large, | 229 * @return {number} 0 if input too small, -1 if input too large, |
236 else the line number. | 230 else the line number. |
237 */ | 231 */ |
238 function ScriptLineFromPosition(position) { | 232 function ScriptLineFromPosition(position) { |
239 var lower = 0; | 233 var lower = 0; |
240 var upper = this.lineCount() - 1; | 234 var upper = this.lineCount() - 1; |
241 var line_ends = this.line_ends; | 235 var line_ends = this.line_ends; |
(...skipping 313 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
555 this.to_position, | 549 this.to_position, |
556 StringSubstring); | 550 StringSubstring); |
557 } | 551 } |
558 | 552 |
559 utils.SetUpLockedPrototype(SourceSlice, | 553 utils.SetUpLockedPrototype(SourceSlice, |
560 ["script", "from_line", "to_line", "from_position", "to_position"], | 554 ["script", "from_line", "to_line", "from_position", "to_position"], |
561 ["sourceText", SourceSliceSourceText] | 555 ["sourceText", SourceSliceSourceText] |
562 ); | 556 ); |
563 | 557 |
564 | 558 |
| 559 // Returns the offset of the given position within the containing |
| 560 // line. |
| 561 function GetPositionInLine(message) { |
| 562 var script = %MessageGetScript(message); |
| 563 var start_position = %MessageGetStartPosition(message); |
| 564 var location = script.locationFromPosition(start_position, true); |
| 565 if (location == null) return -1; |
| 566 return location.column; |
| 567 } |
| 568 |
| 569 |
565 function GetStackTraceLine(recv, fun, pos, isGlobal) { | 570 function GetStackTraceLine(recv, fun, pos, isGlobal) { |
566 return new CallSite(recv, fun, pos, false).toString(); | 571 return new CallSite(recv, fun, pos, false).toString(); |
567 } | 572 } |
568 | 573 |
569 // ---------------------------------------------------------------------------- | 574 // ---------------------------------------------------------------------------- |
570 // Error implementation | 575 // Error implementation |
571 | 576 |
572 var CallSiteReceiverKey = NEW_PRIVATE("CallSite#receiver"); | 577 var CallSiteReceiverKey = NEW_PRIVATE("CallSite#receiver"); |
573 var CallSiteFunctionKey = NEW_PRIVATE("CallSite#function"); | 578 var CallSiteFunctionKey = NEW_PRIVATE("CallSite#function"); |
574 var CallSitePositionKey = NEW_PRIVATE("CallSite#position"); | 579 var CallSitePositionKey = NEW_PRIVATE("CallSite#position"); |
(...skipping 418 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
993 throw MakeTypeError(kCalledOnNonObject, "Error.prototype.toString"); | 998 throw MakeTypeError(kCalledOnNonObject, "Error.prototype.toString"); |
994 } | 999 } |
995 | 1000 |
996 return %ErrorToStringRT(this); | 1001 return %ErrorToStringRT(this); |
997 } | 1002 } |
998 | 1003 |
999 utils.InstallFunctions(GlobalError.prototype, DONT_ENUM, | 1004 utils.InstallFunctions(GlobalError.prototype, DONT_ENUM, |
1000 ['toString', ErrorToString]); | 1005 ['toString', ErrorToString]); |
1001 | 1006 |
1002 $errorToString = ErrorToString; | 1007 $errorToString = ErrorToString; |
| 1008 $messageGetPositionInLine = GetPositionInLine; |
| 1009 $messageGetLineNumber = GetLineNumber; |
| 1010 $messageGetSourceLine = GetSourceLine; |
1003 | 1011 |
1004 MakeError = function(type, arg0, arg1, arg2) { | 1012 MakeError = function(type, arg0, arg1, arg2) { |
1005 return MakeGenericError(GlobalError, type, arg0, arg1, arg2); | 1013 return MakeGenericError(GlobalError, type, arg0, arg1, arg2); |
1006 } | 1014 } |
1007 | 1015 |
1008 MakeRangeError = function(type, arg0, arg1, arg2) { | 1016 MakeRangeError = function(type, arg0, arg1, arg2) { |
1009 return MakeGenericError(GlobalRangeError, type, arg0, arg1, arg2); | 1017 return MakeGenericError(GlobalRangeError, type, arg0, arg1, arg2); |
1010 } | 1018 } |
1011 | 1019 |
1012 MakeSyntaxError = function(type, arg0, arg1, arg2) { | 1020 MakeSyntaxError = function(type, arg0, arg1, arg2) { |
1013 return MakeGenericError(GlobalSyntaxError, type, arg0, arg1, arg2); | 1021 return MakeGenericError(GlobalSyntaxError, type, arg0, arg1, arg2); |
1014 } | 1022 } |
1015 | 1023 |
1016 MakeTypeError = function(type, arg0, arg1, arg2) { | 1024 MakeTypeError = function(type, arg0, arg1, arg2) { |
1017 return MakeGenericError(GlobalTypeError, type, arg0, arg1, arg2); | 1025 return MakeGenericError(GlobalTypeError, type, arg0, arg1, arg2); |
1018 } | 1026 } |
1019 | 1027 |
1020 MakeURIError = function() { | 1028 MakeURIError = function() { |
1021 return MakeGenericError(GlobalURIError, kURIMalformed); | 1029 return MakeGenericError(GlobalURIError, kURIMalformed); |
1022 } | 1030 } |
1023 | 1031 |
1024 // Boilerplate for exceptions for stack overflows. Used from | 1032 // Boilerplate for exceptions for stack overflows. Used from |
1025 // Isolate::StackOverflow(). | 1033 // Isolate::StackOverflow(). |
1026 var StackOverflowBoilerplate = MakeRangeError(kStackOverflow); | 1034 $stackOverflowBoilerplate = MakeRangeError(kStackOverflow); |
1027 %DefineAccessorPropertyUnchecked(StackOverflowBoilerplate, 'stack', | 1035 %DefineAccessorPropertyUnchecked($stackOverflowBoilerplate, 'stack', |
1028 StackTraceGetter, StackTraceSetter, | 1036 StackTraceGetter, StackTraceSetter, |
1029 DONT_ENUM); | 1037 DONT_ENUM); |
1030 | 1038 |
1031 // Define actual captureStackTrace function after everything has been set up. | 1039 // Define actual captureStackTrace function after everything has been set up. |
1032 captureStackTrace = function captureStackTrace(obj, cons_opt) { | 1040 captureStackTrace = function captureStackTrace(obj, cons_opt) { |
1033 // Define accessors first, as this may fail and throw. | 1041 // Define accessors first, as this may fail and throw. |
1034 ObjectDefineProperty(obj, 'stack', { get: StackTraceGetter, | 1042 ObjectDefineProperty(obj, 'stack', { get: StackTraceGetter, |
1035 set: StackTraceSetter, | 1043 set: StackTraceSetter, |
1036 configurable: true }); | 1044 configurable: true }); |
1037 %CollectStackTrace(obj, cons_opt ? cons_opt : captureStackTrace); | 1045 %CollectStackTrace(obj, cons_opt ? cons_opt : captureStackTrace); |
1038 }; | 1046 }; |
1039 | 1047 |
1040 GlobalError.captureStackTrace = captureStackTrace; | 1048 GlobalError.captureStackTrace = captureStackTrace; |
1041 | 1049 |
1042 utils.ExportToRuntime(function(to) { | 1050 utils.ExportToRuntime(function(to) { |
1043 to.Error = GlobalError; | 1051 to.Error = GlobalError; |
1044 to.EvalError = GlobalEvalError; | 1052 to.EvalError = GlobalEvalError; |
1045 to.RangeError = GlobalRangeError; | 1053 to.RangeError = GlobalRangeError; |
1046 to.ReferenceError = GlobalReferenceError; | 1054 to.ReferenceError = GlobalReferenceError; |
1047 to.SyntaxError = GlobalSyntaxError; | 1055 to.SyntaxError = GlobalSyntaxError; |
1048 to.TypeError = GlobalTypeError; | 1056 to.TypeError = GlobalTypeError; |
1049 to.URIError = GlobalURIError; | 1057 to.URIError = GlobalURIError; |
1050 to.GetStackTraceLine = GetStackTraceLine; | 1058 to.GetStackTraceLine = GetStackTraceLine; |
1051 to.NoSideEffectToString = NoSideEffectToString; | 1059 to.NoSideEffectToString = NoSideEffectToString; |
1052 to.ToDetailString = ToDetailString; | 1060 to.ToDetailString = ToDetailString; |
1053 to.MakeError = MakeGenericError; | 1061 to.MakeError = MakeGenericError; |
1054 to.MessageGetLineNumber = GetLineNumber; | |
1055 to.MessageGetColumnNumber = GetColumnNumber; | |
1056 to.MessageGetSourceLine = GetSourceLine; | |
1057 to.StackOverflowBoilerplate = StackOverflowBoilerplate; | |
1058 }); | 1062 }); |
1059 | 1063 |
1060 }); | 1064 }); |
OLD | NEW |