Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(379)

Side by Side Diff: pkg/stack_trace/lib/src/frame.dart

Issue 28783006: Properly parse friendly stack traces without columns. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Firefox fixes Created 7 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | pkg/stack_trace/lib/src/trace.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library frame; 5 library frame;
6 6
7 7
8 import 'package:path/path.dart' as path; 8 import 'package:path/path.dart' as path;
9 9
10 import 'trace.dart'; 10 import 'trace.dart';
11 11
12 // #1 Foo._bar (file:///home/nweiz/code/stuff.dart:42:21) 12 // #1 Foo._bar (file:///home/nweiz/code/stuff.dart:42:21)
13 final _vmFrame = new RegExp( 13 final _vmFrame = new RegExp(
14 r'^#\d+\s+([^\s].*) \((.+?):(\d+)(?::(\d+))?\)$'); 14 r'^#\d+\s+([^\s].*) \((.+?):(\d+)(?::(\d+))?\)$');
15 15
16 // at VW.call$0 (http://pub.dartlang.org/stuff.dart.js:560:28) 16 // at VW.call$0 (http://pub.dartlang.org/stuff.dart.js:560:28)
17 // at http://pub.dartlang.org/stuff.dart.js:560:28 17 // at http://pub.dartlang.org/stuff.dart.js:560:28
18 final _v8Frame = new RegExp( 18 final _v8Frame = new RegExp(
19 r'^\s*at (?:([^\s].*?)(?: \[as [^\]]+\])? ' 19 r'^\s*at (?:([^\s].*?)(?: \[as [^\]]+\])? '
20 r'\((.+):(\d+):(\d+)\)|(.+):(\d+):(\d+))$'); 20 r'\((.+):(\d+):(\d+)\)|(.+):(\d+):(\d+))$');
21 21
22 // .VW.call$0@http://pub.dartlang.org/stuff.dart.js:560 22 // .VW.call$0@http://pub.dartlang.org/stuff.dart.js:560
23 // .VW.call$0("arg")@http://pub.dartlang.org/stuff.dart.js:560 23 // .VW.call$0("arg")@http://pub.dartlang.org/stuff.dart.js:560
24 // .VW.call$0/name<@http://pub.dartlang.org/stuff.dart.js:560 24 // .VW.call$0/name<@http://pub.dartlang.org/stuff.dart.js:560
25 final _firefoxFrame = new RegExp( 25 final _firefoxFrame = new RegExp(
26 r'^([^@(/]*)(?:\(.*\))?(/[^<]*<?)?(?:\(.*\))?@(.*):(\d+)$'); 26 r'^([^@(/]*)(?:\(.*\))?((?:/[^/]*)*)(?:\(.*\))?@(.*):(\d+)$');
27 27
28 // foo/bar.dart 10:11 in Foo._bar 28 // foo/bar.dart 10:11 in Foo._bar
29 // http://dartlang.org/foo/bar.dart in Foo._bar 29 // http://dartlang.org/foo/bar.dart in Foo._bar
30 final _friendlyFrame = new RegExp( 30 final _friendlyFrame = new RegExp(
31 r'^([^\s]+)(?: (\d+):(\d+))?\s+([^\d][^\s]*)$'); 31 r'^([^\s]+)(?: (\d+):(\d+))?\s+([^\d][^\s]*)$');
32 32
33 final _initialDot = new RegExp(r"^\."); 33 final _initialDot = new RegExp(r"^\.");
34 34
35 /// A single stack frame. Each frame points to a precise location in Dart code. 35 /// A single stack frame. Each frame points to a precise location in Dart code.
36 class Frame { 36 class Frame {
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
152 /// Parses a string representation of a Firefox stack frame. 152 /// Parses a string representation of a Firefox stack frame.
153 factory Frame.parseFirefox(String frame) { 153 factory Frame.parseFirefox(String frame) {
154 var match = _firefoxFrame.firstMatch(frame); 154 var match = _firefoxFrame.firstMatch(frame);
155 if (match == null) { 155 if (match == null) {
156 throw new FormatException( 156 throw new FormatException(
157 "Couldn't parse Firefox stack trace line '$frame'."); 157 "Couldn't parse Firefox stack trace line '$frame'.");
158 } 158 }
159 159
160 var uri = Uri.parse(match[3]); 160 var uri = Uri.parse(match[3]);
161 var member = match[1]; 161 var member = match[1];
162 if (member == "") { 162 member += new List.filled('/'.allMatches(match[2]).length, ".<fn>").join();
163 member = "<fn>"; 163 if (member == '') member = '<fn>';
164 } else if (match[2] != null) { 164
165 member = "$member.<fn>";
166 }
167 // Some Firefox members have initial dots. We remove them for consistency 165 // Some Firefox members have initial dots. We remove them for consistency
168 // with other platforms. 166 // with other platforms.
169 member = member.replaceFirst(_initialDot, ''); 167 member = member.replaceFirst(_initialDot, '');
170 return new Frame(uri, int.parse(match[4]), null, member); 168 return new Frame(uri, int.parse(match[4]), null, member);
171 } 169 }
172 170
173 /// Parses a string representation of a Safari stack frame. 171 /// Parses a string representation of a Safari stack frame.
174 /// 172 ///
175 /// Safari 6+ frames look just like Firefox frames. Prior to Safari 6, stack 173 /// Safari 6+ frames look just like Firefox frames. Prior to Safari 6, stack
176 /// traces can't be retrieved. 174 /// traces can't be retrieved.
(...skipping 16 matching lines...) Expand all
193 191
194 var line = match[2] == null ? null : int.parse(match[2]); 192 var line = match[2] == null ? null : int.parse(match[2]);
195 var column = match[3] == null ? null : int.parse(match[3]); 193 var column = match[3] == null ? null : int.parse(match[3]);
196 return new Frame(uri, line, column, match[4]); 194 return new Frame(uri, line, column, match[4]);
197 } 195 }
198 196
199 Frame(this.uri, this.line, this.column, this.member); 197 Frame(this.uri, this.line, this.column, this.member);
200 198
201 String toString() => '$location in $member'; 199 String toString() => '$location in $member';
202 } 200 }
OLDNEW
« no previous file with comments | « no previous file | pkg/stack_trace/lib/src/trace.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698