Frame.parseFirefox constructor
- String frame
Parses a string representation of a Firefox or Safari stack frame.
Implementation
factory Frame.parseFirefox(String frame) => _catchFormatException(frame, () {
var match = _firefoxSafariJSFrame.firstMatch(frame);
if (match != null) {
if (match[3]!.contains(' line ')) {
return Frame._parseFirefoxEval(frame);
}
// Normally this is a URI, but in a jsshell trace it can be a path.
var uri = _uriOrPathToUri(match[3]!);
var member = match[1];
if (member != null) {
member +=
List.filled('/'.allMatches(match[2]!).length, '.<fn>').join();
if (member == '') member = '<fn>';
// Some Firefox members have initial dots. We remove them for
// consistency with other platforms.
member = member.replaceFirst(_initialDot, '');
} else {
member = '<fn>';
}
var line = match[4] == '' ? null : int.parse(match[4]!);
var column =
match[5] == null || match[5] == '' ? null : int.parse(match[5]!);
return Frame(uri, line, column, member);
}
match = _firefoxWasmFrame.firstMatch(frame);
if (match != null) {
final member = match.namedGroup('member')!;
final uri = _uriOrPathToUri(match.namedGroup('uri')!);
final functionIndex = match.namedGroup('index')!;
final functionOffset =
int.parse(match.namedGroup('offset')!, radix: 16);
return Frame(uri, 1, functionOffset + 1,
member.isNotEmpty ? member : functionIndex);
}
match = _safariWasmFrame.firstMatch(frame);
if (match != null) {
final member = match.namedGroup('member')!;
return Frame(Uri(path: 'wasm code'), null, null, member);
}
return UnparsedFrame(frame);
});