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

Side by Side Diff: test/codegen/expect/stack_trace/stack_trace.js

Issue 1956513004: Switch to actual unittest, stack trace, and path packages. Tag tests as failing that were ignored d… (Closed) Base URL: git@github.com:dart-lang/dev_compiler.git@master
Patch Set: Created 4 years, 7 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
OLDNEW
(Empty)
1 dart_library.library('stack_trace', null, /* Imports */[
2 'dart_sdk',
3 'path'
4 ], function(exports, dart_sdk, path) {
5 'use strict';
6 const core = dart_sdk.core;
7 const collection = dart_sdk.collection;
8 const math = dart_sdk.math;
9 const async = dart_sdk.async;
10 const dart = dart_sdk.dart;
11 const dartx = dart_sdk.dartx;
12 const path$ = path.path;
13 const src__trace = Object.create(null);
14 const src__chain = Object.create(null);
15 const src__vm_trace = Object.create(null);
16 const src__lazy_trace = Object.create(null);
17 const src__utils = Object.create(null);
18 const src__frame = Object.create(null);
19 const src__stack_zone_specification = Object.create(null);
20 const src__unparsed_frame = Object.create(null);
21 const stack_trace = Object.create(null);
22 dart.defineLazy(src__trace, {
23 get _terseRegExp() {
24 return core.RegExp.new("(-patch)?([/\\\\].*)?$");
25 }
26 });
27 dart.defineLazy(src__trace, {
28 get _v8Trace() {
29 return core.RegExp.new("\\n ?at ");
30 }
31 });
32 dart.defineLazy(src__trace, {
33 get _v8TraceLine() {
34 return core.RegExp.new(" ?at ");
35 }
36 });
37 dart.defineLazy(src__trace, {
38 get _firefoxSafariTrace() {
39 return core.RegExp.new("^" + "(" + "([.0-9A-Za-z_$/<]|\\(.*\\))*" + "@" + ")?" + "[^\\s]*" + ":\\d*" + "$", {multiLine: true});
40 }
41 });
42 dart.defineLazy(src__trace, {
43 get _friendlyTrace() {
44 return core.RegExp.new("^[^\\s]+( \\d+(:\\d+)?)?[ \\t]+[^\\s]+$", {multiLi ne: true});
45 }
46 });
47 src__trace.Trace = class Trace extends core.Object {
48 static format(stackTrace, opts) {
49 let terse = opts && 'terse' in opts ? opts.terse : true;
50 let trace = src__trace.Trace.from(stackTrace);
51 if (dart.notNull(terse)) trace = trace.terse;
52 return dart.toString(trace);
53 }
54 static current(level) {
55 if (level === void 0) level = 0;
56 if (dart.notNull(level) < 0) {
57 dart.throw(new core.ArgumentError("Argument [level] must be greater than or equal " + "to 0."));
58 }
59 let trace = src__trace.Trace.from(core.StackTrace.current);
60 return new src__lazy_trace.LazyTrace(dart.fn(() => new src__trace.Trace(tr ace.frames[dartx.skip](dart.notNull(level) + 1)), src__trace.Trace, []));
61 }
62 static from(trace) {
63 if (trace == null) {
64 dart.throw(new core.ArgumentError("Cannot create a Trace from null."));
65 }
66 if (dart.is(trace, src__trace.Trace)) return trace;
67 if (dart.is(trace, src__chain.Chain)) return trace.toTrace();
68 return new src__lazy_trace.LazyTrace(dart.fn(() => src__trace.Trace.parse( dart.toString(trace)), src__trace.Trace, []));
69 }
70 static parse(trace) {
71 try {
72 if (dart.notNull(trace[dartx.isEmpty])) return new src__trace.Trace(dart .list([], src__frame.Frame));
73 if (dart.notNull(trace[dartx.contains](src__trace._v8Trace))) return new src__trace.Trace.parseV8(trace);
74 if (dart.notNull(trace[dartx.contains]("\tat "))) return new src__trace. Trace.parseJSCore(trace);
75 if (dart.notNull(trace[dartx.contains](src__trace._firefoxSafariTrace))) {
76 return new src__trace.Trace.parseFirefox(trace);
77 }
78 if (dart.notNull(trace[dartx.contains](src__utils.chainGap))) return src __chain.Chain.parse(trace).toTrace();
79 if (dart.notNull(trace[dartx.contains](src__trace._friendlyTrace))) {
80 return new src__trace.Trace.parseFriendly(trace);
81 }
82 return new src__trace.Trace.parseVM(trace);
83 } catch (error) {
84 if (dart.is(error, core.FormatException)) {
85 dart.throw(new core.FormatException(`${error.message}\nStack trace:\n$ {trace}`));
86 } else
87 throw error;
88 }
89
90 }
91 parseVM(trace) {
92 this.Trace(src__trace.Trace._parseVM(trace));
93 }
94 static _parseVM(trace) {
95 let lines = trace[dartx.trim]()[dartx.split]("\n");
96 let frames = lines[dartx.take](dart.notNull(lines[dartx.length]) - 1)[dart x.map](src__frame.Frame)(dart.fn(line => src__frame.Frame.parseVM(line), src__fr ame.Frame, [core.String]))[dartx.toList]();
97 if (!dart.notNull(lines[dartx.last][dartx.endsWith](".da"))) {
98 frames[dartx.add](src__frame.Frame.parseVM(lines[dartx.last]));
99 }
100 return frames;
101 }
102 parseV8(trace) {
103 this.Trace(trace[dartx.split]("\n")[dartx.skip](1)[dartx.skipWhile](dart.f n(line => !dart.notNull(line[dartx.startsWith](src__trace._v8TraceLine)), core.b ool, [core.String]))[dartx.map](src__frame.Frame)(dart.fn(line => src__frame.Fra me.parseV8(line), src__frame.Frame, [core.String])));
104 }
105 parseJSCore(trace) {
106 this.Trace(trace[dartx.split]("\n")[dartx.where](dart.fn(line => line != " \tat ", core.bool, [core.String]))[dartx.map](src__frame.Frame)(dart.fn(line => src__frame.Frame.parseV8(line), src__frame.Frame, [core.String])));
107 }
108 parseIE(trace) {
109 this.parseV8(trace);
110 }
111 parseFirefox(trace) {
112 this.Trace(trace[dartx.trim]()[dartx.split]("\n")[dartx.where](dart.fn(lin e => dart.notNull(line[dartx.isNotEmpty]) && line != '[native code]', core.bool, [core.String]))[dartx.map](src__frame.Frame)(dart.fn(line => src__frame.Frame.p arseFirefox(line), src__frame.Frame, [core.String])));
113 }
114 parseSafari(trace) {
115 this.parseFirefox(trace);
116 }
117 parseSafari6_1(trace) {
118 this.parseSafari(trace);
119 }
120 parseSafari6_0(trace) {
121 this.Trace(trace[dartx.trim]()[dartx.split]("\n")[dartx.where](dart.fn(lin e => line != '[native code]', core.bool, [core.String]))[dartx.map](src__frame.F rame)(dart.fn(line => src__frame.Frame.parseFirefox(line), src__frame.Frame, [co re.String])));
122 }
123 parseFriendly(trace) {
124 this.Trace(dart.notNull(trace[dartx.isEmpty]) ? dart.list([], src__frame.F rame) : trace[dartx.trim]()[dartx.split]("\n")[dartx.where](dart.fn(line => !dar t.notNull(line[dartx.startsWith]('=====')), core.bool, [core.String]))[dartx.map ](src__frame.Frame)(dart.fn(line => src__frame.Frame.parseFriendly(line), src__f rame.Frame, [core.String])));
125 }
126 Trace(frames) {
127 this.frames = new (collection.UnmodifiableListView$(src__frame.Frame))(fra mes[dartx.toList]());
128 }
129 get vmTrace() {
130 return new src__vm_trace.VMTrace(this.frames);
131 }
132 get terse() {
133 return this.foldFrames(dart.fn(_ => false, core.bool, [src__frame.Frame]), {terse: true});
134 }
135 foldFrames(predicate, opts) {
136 let terse = opts && 'terse' in opts ? opts.terse : false;
137 if (dart.notNull(terse)) {
138 let oldPredicate = predicate;
139 predicate = dart.fn(frame => {
140 if (dart.notNull(oldPredicate(frame))) return true;
141 if (dart.notNull(frame.isCore)) return true;
142 if (frame.package == 'stack_trace') return true;
143 if (!dart.notNull(frame.member[dartx.contains]('<async>'))) return fal se;
144 return frame.line == null;
145 }, core.bool, [src__frame.Frame]);
146 }
147 let newFrames = dart.list([], src__frame.Frame);
148 for (let frame of this.frames[dartx.reversed]) {
149 if (dart.is(frame, src__unparsed_frame.UnparsedFrame) || !dart.notNull(p redicate(frame))) {
150 newFrames[dartx.add](frame);
151 } else if (dart.notNull(newFrames[dartx.isEmpty]) || !dart.notNull(predi cate(newFrames[dartx.last]))) {
152 newFrames[dartx.add](new src__frame.Frame(frame.uri, frame.line, frame .column, frame.member));
153 }
154 }
155 if (dart.notNull(terse)) {
156 newFrames = newFrames[dartx.map](src__frame.Frame)(dart.fn(frame => {
157 if (dart.is(frame, src__unparsed_frame.UnparsedFrame) || !dart.notNull (predicate(frame))) return frame;
158 let library = frame.library[dartx.replaceAll](src__trace._terseRegExp, '');
159 return new src__frame.Frame(core.Uri.parse(library), null, null, frame .member);
160 }, src__frame.Frame, [src__frame.Frame]))[dartx.toList]();
161 if (dart.notNull(newFrames[dartx.length]) > 1 && dart.notNull(newFrames[ dartx.first].isCore)) newFrames[dartx.removeAt](0);
162 }
163 return new src__trace.Trace(newFrames[dartx.reversed]);
164 }
165 toString() {
166 let longest = this.frames[dartx.map](core.int)(dart.fn(frame => frame.loca tion[dartx.length], core.int, [src__frame.Frame]))[dartx.fold](core.int)(0, dart .gbind(math.max, core.int));
167 return this.frames[dartx.map](core.String)(dart.fn(frame => {
168 if (dart.is(frame, src__unparsed_frame.UnparsedFrame)) return `${frame}\ n`;
169 return `${src__utils.padRight(frame.location, longest)} ${frame.member} \n`;
170 }, core.String, [src__frame.Frame]))[dartx.join]();
171 }
172 };
173 dart.defineNamedConstructor(src__trace.Trace, 'parseVM');
174 dart.defineNamedConstructor(src__trace.Trace, 'parseV8');
175 dart.defineNamedConstructor(src__trace.Trace, 'parseJSCore');
176 dart.defineNamedConstructor(src__trace.Trace, 'parseIE');
177 dart.defineNamedConstructor(src__trace.Trace, 'parseFirefox');
178 dart.defineNamedConstructor(src__trace.Trace, 'parseSafari');
179 dart.defineNamedConstructor(src__trace.Trace, 'parseSafari6_1');
180 dart.defineNamedConstructor(src__trace.Trace, 'parseSafari6_0');
181 dart.defineNamedConstructor(src__trace.Trace, 'parseFriendly');
182 src__trace.Trace[dart.implements] = () => [core.StackTrace];
183 dart.setSignature(src__trace.Trace, {
184 constructors: () => ({
185 current: [src__trace.Trace, [], [core.int]],
186 from: [src__trace.Trace, [core.StackTrace]],
187 parse: [src__trace.Trace, [core.String]],
188 parseVM: [src__trace.Trace, [core.String]],
189 parseV8: [src__trace.Trace, [core.String]],
190 parseJSCore: [src__trace.Trace, [core.String]],
191 parseIE: [src__trace.Trace, [core.String]],
192 parseFirefox: [src__trace.Trace, [core.String]],
193 parseSafari: [src__trace.Trace, [core.String]],
194 parseSafari6_1: [src__trace.Trace, [core.String]],
195 parseSafari6_0: [src__trace.Trace, [core.String]],
196 parseFriendly: [src__trace.Trace, [core.String]],
197 Trace: [src__trace.Trace, [core.Iterable$(src__frame.Frame)]]
198 }),
199 methods: () => ({foldFrames: [src__trace.Trace, [dart.functionType(core.bool , [src__frame.Frame])], {terse: core.bool}]}),
200 statics: () => ({
201 format: [core.String, [core.StackTrace], {terse: core.bool}],
202 _parseVM: [core.List$(src__frame.Frame), [core.String]]
203 }),
204 names: ['format', '_parseVM']
205 });
206 src__chain.ChainHandler = dart.typedef('ChainHandler', () => dart.functionType (dart.void, [dart.dynamic, src__chain.Chain]));
207 src__chain.Chain = class Chain extends core.Object {
208 static get _currentSpec() {
209 return dart.as(async.Zone.current.get(dart.const(core.Symbol.new('stack_tr ace.stack_zone.spec'))), src__stack_zone_specification.StackZoneSpecification);
210 }
211 static capture(T) {
212 return (callback, opts) => {
213 let onError = opts && 'onError' in opts ? opts.onError : null;
214 let when = opts && 'when' in opts ? opts.when : true;
215 if (!dart.notNull(when)) {
216 let newOnError = null;
217 if (onError != null) {
218 newOnError = dart.fn((error, stackTrace) => {
219 dart.dcall(onError, error, src__chain.Chain.forTrace(dart.as(stack Trace, core.StackTrace)));
220 });
221 }
222 return async.runZoned(T)(callback, {onError: dart.as(newOnError, core. Function)});
223 }
224 let spec = new src__stack_zone_specification.StackZoneSpecification(onEr ror);
225 return async.runZoned(T)(dart.fn(() => {
226 try {
227 return callback();
228 } catch (error) {
229 let stackTrace = dart.stackTrace(error);
230 return async.Zone.current.handleUncaughtError(T)(error, stackTrace);
231 }
232
233 }, T, []), {zoneSpecification: spec.toSpec(), zoneValues: dart.map([dart .const(core.Symbol.new('stack_trace.stack_zone.spec')), spec])});
234 };
235 }
236 static track(futureOrStream) {
237 return futureOrStream;
238 }
239 static current(level) {
240 if (level === void 0) level = 0;
241 if (src__chain.Chain._currentSpec != null) return src__chain.Chain._curren tSpec.currentChain(dart.notNull(level) + 1);
242 return new src__chain.Chain(dart.list([src__trace.Trace.current(dart.notNu ll(level) + 1)], src__trace.Trace));
243 }
244 static forTrace(trace) {
245 if (dart.is(trace, src__chain.Chain)) return trace;
246 if (src__chain.Chain._currentSpec == null) return new src__chain.Chain(dar t.list([src__trace.Trace.from(trace)], src__trace.Trace));
247 return src__chain.Chain._currentSpec.chainFor(trace);
248 }
249 static parse(chain) {
250 if (dart.notNull(chain[dartx.isEmpty])) return new src__chain.Chain(dart.l ist([], src__trace.Trace));
251 if (!dart.notNull(chain[dartx.contains](src__utils.chainGap))) return new src__chain.Chain(dart.list([src__trace.Trace.parse(chain)], src__trace.Trace));
252 return new src__chain.Chain(chain[dartx.split](src__utils.chainGap)[dartx. map](src__trace.Trace)(dart.fn(trace => new src__trace.Trace.parseFriendly(trace ), src__trace.Trace, [core.String])));
253 }
254 Chain(traces) {
255 this.traces = new (collection.UnmodifiableListView$(src__trace.Trace))(tra ces[dartx.toList]());
256 }
257 get terse() {
258 return this.foldFrames(dart.fn(_ => false, core.bool, [src__frame.Frame]), {terse: true});
259 }
260 foldFrames(predicate, opts) {
261 let terse = opts && 'terse' in opts ? opts.terse : false;
262 let foldedTraces = this.traces[dartx.map](src__trace.Trace)(dart.fn(trace => trace.foldFrames(predicate, {terse: terse}), src__trace.Trace, [src__trace.Tr ace]));
263 let nonEmptyTraces = foldedTraces[dartx.where](dart.fn(trace => {
264 if (dart.notNull(trace.frames[dartx.length]) > 1) return true;
265 if (dart.notNull(trace.frames[dartx.isEmpty])) return false;
266 if (!dart.notNull(terse)) return false;
267 return trace.frames[dartx.single].line != null;
268 }, core.bool, [src__trace.Trace]));
269 if (dart.notNull(nonEmptyTraces[dartx.isEmpty]) && dart.notNull(foldedTrac es[dartx.isNotEmpty])) {
270 return new src__chain.Chain(dart.list([foldedTraces[dartx.last]], src__t race.Trace));
271 }
272 return new src__chain.Chain(nonEmptyTraces);
273 }
274 toTrace() {
275 return new src__trace.Trace(this.traces[dartx.expand](src__frame.Frame)(da rt.fn(trace => trace.frames, core.List$(src__frame.Frame), [src__trace.Trace]))) ;
276 }
277 toString() {
278 let longest = this.traces[dartx.map](core.int)(dart.fn(trace => trace.fram es[dartx.map](core.int)(dart.fn(frame => frame.location[dartx.length], core.int, [src__frame.Frame]))[dartx.fold](core.int)(0, dart.gbind(math.max, core.int)), core.int, [src__trace.Trace]))[dartx.fold](core.int)(0, dart.gbind(math.max, cor e.int));
279 return this.traces[dartx.map](core.String)(dart.fn(trace => trace.frames[d artx.map](core.String)(dart.fn(frame => `${src__utils.padRight(frame.location, l ongest)} ${frame.member}\n`, core.String, [src__frame.Frame]))[dartx.join](), c ore.String, [src__trace.Trace]))[dartx.join](src__utils.chainGap);
280 }
281 };
282 src__chain.Chain[dart.implements] = () => [core.StackTrace];
283 dart.setSignature(src__chain.Chain, {
284 constructors: () => ({
285 current: [src__chain.Chain, [], [core.int]],
286 forTrace: [src__chain.Chain, [core.StackTrace]],
287 parse: [src__chain.Chain, [core.String]],
288 Chain: [src__chain.Chain, [core.Iterable$(src__trace.Trace)]]
289 }),
290 methods: () => ({
291 foldFrames: [src__chain.Chain, [dart.functionType(core.bool, [src__frame.F rame])], {terse: core.bool}],
292 toTrace: [src__trace.Trace, []]
293 }),
294 statics: () => ({
295 capture: [T => [T, [dart.functionType(T, [])], {onError: dart.functionType (dart.void, [dart.dynamic, src__chain.Chain]), when: core.bool}]],
296 track: [dart.dynamic, [dart.dynamic]]
297 }),
298 names: ['capture', 'track']
299 });
300 src__vm_trace.VMTrace = class VMTrace extends core.Object {
301 VMTrace(frames) {
302 this.frames = frames;
303 }
304 toString() {
305 let i = 1;
306 return this.frames[dartx.map](core.String)(dart.fn(frame => {
307 let number = src__utils.padRight(`#${i++}`, 8);
308 let member = frame.member[dartx.replaceAllMapped](core.RegExp.new("[^.]+ \\.<async>"), dart.fn(match => `${match.get(1)}.<${match.get(1)}_async_body>`, c ore.String, [core.Match]))[dartx.replaceAll]("<fn>", "<anonymous closure>");
309 let line = frame.line == null ? 0 : frame.line;
310 let column = frame.column == null ? 0 : frame.column;
311 return `${number}${member} (${frame.uri}:${line}:${column})\n`;
312 }, core.String, [src__frame.Frame]))[dartx.join]();
313 }
314 };
315 src__vm_trace.VMTrace[dart.implements] = () => [core.StackTrace];
316 dart.setSignature(src__vm_trace.VMTrace, {
317 constructors: () => ({VMTrace: [src__vm_trace.VMTrace, [core.List$(src__fram e.Frame)]]})
318 });
319 src__lazy_trace.TraceThunk = dart.typedef('TraceThunk', () => dart.functionTyp e(src__trace.Trace, []));
320 const _thunk = Symbol('_thunk');
321 const _inner = Symbol('_inner');
322 const _trace = Symbol('_trace');
323 src__lazy_trace.LazyTrace = class LazyTrace extends core.Object {
324 LazyTrace(thunk) {
325 this[_thunk] = thunk;
326 this[_inner] = null;
327 }
328 get [_trace]() {
329 if (this[_inner] == null) this[_inner] = this[_thunk]();
330 return this[_inner];
331 }
332 get frames() {
333 return this[_trace].frames;
334 }
335 get vmTrace() {
336 return this[_trace].vmTrace;
337 }
338 get terse() {
339 return new src__lazy_trace.LazyTrace(dart.fn(() => this[_trace].terse, src __trace.Trace, []));
340 }
341 foldFrames(predicate, opts) {
342 let terse = opts && 'terse' in opts ? opts.terse : false;
343 return new src__lazy_trace.LazyTrace(dart.fn(() => this[_trace].foldFrames (predicate, {terse: terse}), src__trace.Trace, []));
344 }
345 toString() {
346 return dart.toString(this[_trace]);
347 }
348 set frames(_) {
349 return dart.throw(new core.UnimplementedError());
350 }
351 };
352 src__lazy_trace.LazyTrace[dart.implements] = () => [src__trace.Trace];
353 dart.setSignature(src__lazy_trace.LazyTrace, {
354 constructors: () => ({LazyTrace: [src__lazy_trace.LazyTrace, [src__lazy_trac e.TraceThunk]]}),
355 methods: () => ({foldFrames: [src__trace.Trace, [dart.functionType(core.bool , [src__frame.Frame])], {terse: core.bool}]})
356 });
357 src__utils.chainGap = '===== asynchronous gap ===========================\n';
358 src__utils.padRight = function(string, length) {
359 if (dart.notNull(string[dartx.length]) >= dart.notNull(length)) return strin g;
360 let result = new core.StringBuffer();
361 result.write(string);
362 for (let i = 0; i < dart.notNull(length) - dart.notNull(string[dartx.length] ); i++) {
363 result.write(' ');
364 }
365 return result.toString();
366 };
367 dart.fn(src__utils.padRight, core.String, [core.String, core.int]);
368 dart.defineLazy(src__frame, {
369 get _vmFrame() {
370 return core.RegExp.new('^#\\d+\\s+(\\S.*) \\((.+?)((?::\\d+){0,2})\\)$');
371 }
372 });
373 dart.defineLazy(src__frame, {
374 get _v8Frame() {
375 return core.RegExp.new('^\\s*at (?:(\\S.*?)(?: \\[as [^\\]]+\\])? \\((.*)\ \)|(.*))$');
376 }
377 });
378 dart.defineLazy(src__frame, {
379 get _v8UrlLocation() {
380 return core.RegExp.new('^(.*):(\\d+):(\\d+)|native$');
381 }
382 });
383 dart.defineLazy(src__frame, {
384 get _v8EvalLocation() {
385 return core.RegExp.new('^eval at (?:\\S.*?) \\((.*)\\)(?:, .*?:\\d+:\\d+)? $');
386 }
387 });
388 dart.defineLazy(src__frame, {
389 get _firefoxSafariFrame() {
390 return core.RegExp.new('^' + '(?:' + '([^@(/]*)' + '(?:\\(.*\\))?' + '((?: /[^/]*)*)' + '(?:\\(.*\\))?' + '@' + ')?' + '(.*?)' + ':' + '(\\d*)' + '(?::(\\d *))?' + '$');
391 }
392 });
393 dart.defineLazy(src__frame, {
394 get _friendlyFrame() {
395 return core.RegExp.new('^(\\S+)(?: (\\d+)(?::(\\d+))?)?\\s+([^\\d]\\S*)$') ;
396 }
397 });
398 dart.defineLazy(src__frame, {
399 get _asyncBody() {
400 return core.RegExp.new('<(<anonymous closure>|[^>]+)_async_body>');
401 }
402 });
403 dart.defineLazy(src__frame, {
404 get _initialDot() {
405 return core.RegExp.new("^\\.");
406 }
407 });
408 src__frame.Frame = class Frame extends core.Object {
409 get isCore() {
410 return this.uri.scheme == 'dart';
411 }
412 get library() {
413 if (this.uri.scheme == 'data') return "data:...";
414 return path$.prettyUri(this.uri);
415 }
416 get package() {
417 if (this.uri.scheme != 'package') return null;
418 return this.uri.path[dartx.split]('/')[dartx.first];
419 }
420 get location() {
421 if (this.line == null) return this.library;
422 if (this.column == null) return `${this.library} ${this.line}`;
423 return `${this.library} ${this.line}:${this.column}`;
424 }
425 static caller(level) {
426 if (level === void 0) level = 1;
427 if (dart.notNull(level) < 0) {
428 dart.throw(new core.ArgumentError("Argument [level] must be greater than or equal " + "to 0."));
429 }
430 return src__trace.Trace.current(dart.notNull(level) + 1).frames[dartx.firs t];
431 }
432 static parseVM(frame) {
433 return src__frame.Frame._catchFormatException(frame, dart.fn(() => {
434 if (frame == '...') {
435 return new src__frame.Frame(core.Uri.new(), null, null, '...');
436 }
437 let match = src__frame._vmFrame.firstMatch(frame);
438 if (match == null) return new src__unparsed_frame.UnparsedFrame(frame);
439 let member = match.get(1)[dartx.replaceAll](src__frame._asyncBody, "<asy nc>")[dartx.replaceAll]("<anonymous closure>", "<fn>");
440 let uri = core.Uri.parse(match.get(2));
441 let lineAndColumn = match.get(3)[dartx.split](':');
442 let line = dart.notNull(lineAndColumn[dartx.length]) > 1 ? core.int.pars e(lineAndColumn[dartx.get](1)) : null;
443 let column = dart.notNull(lineAndColumn[dartx.length]) > 2 ? core.int.pa rse(lineAndColumn[dartx.get](2)) : null;
444 return new src__frame.Frame(uri, line, column, member);
445 }, src__frame.Frame, []));
446 }
447 static parseV8(frame) {
448 return src__frame.Frame._catchFormatException(frame, dart.fn(() => {
449 let match = src__frame._v8Frame.firstMatch(frame);
450 if (match == null) return new src__unparsed_frame.UnparsedFrame(frame);
451 function parseLocation(location, member) {
452 let evalMatch = src__frame._v8EvalLocation.firstMatch(dart.as(location , core.String));
453 while (evalMatch != null) {
454 location = evalMatch.get(1);
455 evalMatch = src__frame._v8EvalLocation.firstMatch(dart.as(location, core.String));
456 }
457 if (dart.equals(location, 'native')) {
458 return new src__frame.Frame(core.Uri.parse('native'), null, null, da rt.as(member, core.String));
459 }
460 let urlMatch = src__frame._v8UrlLocation.firstMatch(dart.as(location, core.String));
461 if (urlMatch == null) return new src__unparsed_frame.UnparsedFrame(fra me);
462 return new src__frame.Frame(src__frame.Frame._uriOrPathToUri(urlMatch. get(1)), core.int.parse(urlMatch.get(2)), core.int.parse(urlMatch.get(3)), dart. as(member, core.String));
463 }
464 dart.fn(parseLocation);
465 if (match.get(2) != null) {
466 return dart.as(parseLocation(match.get(2), match.get(1)[dartx.replaceA ll]("<anonymous>", "<fn>")[dartx.replaceAll]("Anonymous function", "<fn>")), src __frame.Frame);
467 } else {
468 return dart.as(parseLocation(match.get(3), "<fn>"), src__frame.Frame);
469 }
470 }, src__frame.Frame, []));
471 }
472 static parseJSCore(frame) {
473 return src__frame.Frame.parseV8(frame);
474 }
475 static parseIE(frame) {
476 return src__frame.Frame.parseV8(frame);
477 }
478 static parseFirefox(frame) {
479 return src__frame.Frame._catchFormatException(frame, dart.fn(() => {
480 let match = src__frame._firefoxSafariFrame.firstMatch(frame);
481 if (match == null) return new src__unparsed_frame.UnparsedFrame(frame);
482 let uri = src__frame.Frame._uriOrPathToUri(match.get(3));
483 let member = null;
484 if (match.get(1) != null) {
485 member = match.get(1);
486 member = dart.dsend(member, '+', core.List.filled('/'[dartx.allMatches ](match.get(2))[dartx.length], ".<fn>")[dartx.join]());
487 if (dart.equals(member, '')) member = '<fn>';
488 member = dart.dsend(member, 'replaceFirst', src__frame._initialDot, '' );
489 } else {
490 member = '<fn>';
491 }
492 let line = match.get(4) == '' ? null : core.int.parse(match.get(4));
493 let column = match.get(5) == null || match.get(5) == '' ? null : core.in t.parse(match.get(5));
494 return new src__frame.Frame(uri, line, column, dart.as(member, core.Stri ng));
495 }, src__frame.Frame, []));
496 }
497 static parseSafari6_0(frame) {
498 return src__frame.Frame.parseFirefox(frame);
499 }
500 static parseSafari6_1(frame) {
501 return src__frame.Frame.parseFirefox(frame);
502 }
503 static parseSafari(frame) {
504 return src__frame.Frame.parseFirefox(frame);
505 }
506 static parseFriendly(frame) {
507 return src__frame.Frame._catchFormatException(frame, dart.fn(() => {
508 let match = src__frame._friendlyFrame.firstMatch(frame);
509 if (match == null) {
510 dart.throw(new core.FormatException(`Couldn't parse package:stack_trac e stack trace line '${frame}'.`));
511 }
512 let uri = core.Uri.parse(match.get(1));
513 if (uri.scheme == '') {
514 uri = path$.toUri(path$.absolute(path$.fromUri(uri)));
515 }
516 let line = match.get(2) == null ? null : core.int.parse(match.get(2));
517 let column = match.get(3) == null ? null : core.int.parse(match.get(3));
518 return new src__frame.Frame(uri, line, column, match.get(4));
519 }, src__frame.Frame, []));
520 }
521 static _uriOrPathToUri(uriOrPath) {
522 if (dart.notNull(uriOrPath[dartx.contains](src__frame.Frame._uriRegExp))) {
523 return core.Uri.parse(uriOrPath);
524 } else if (dart.notNull(uriOrPath[dartx.contains](src__frame.Frame._window sRegExp))) {
525 return core.Uri.file(uriOrPath, {windows: true});
526 } else if (dart.notNull(uriOrPath[dartx.startsWith]('/'))) {
527 return core.Uri.file(uriOrPath, {windows: false});
528 }
529 if (dart.notNull(uriOrPath[dartx.contains]('\\'))) return path$.windows.to Uri(uriOrPath);
530 return core.Uri.parse(uriOrPath);
531 }
532 static _catchFormatException(text, body) {
533 try {
534 return body();
535 } catch (_) {
536 if (dart.is(_, core.FormatException)) {
537 return new src__unparsed_frame.UnparsedFrame(text);
538 } else
539 throw _;
540 }
541
542 }
543 Frame(uri, line, column, member) {
544 this.uri = uri;
545 this.line = line;
546 this.column = column;
547 this.member = member;
548 }
549 toString() {
550 return `${this.location} in ${this.member}`;
551 }
552 };
553 dart.setSignature(src__frame.Frame, {
554 constructors: () => ({
555 caller: [src__frame.Frame, [], [core.int]],
556 parseVM: [src__frame.Frame, [core.String]],
557 parseV8: [src__frame.Frame, [core.String]],
558 parseJSCore: [src__frame.Frame, [core.String]],
559 parseIE: [src__frame.Frame, [core.String]],
560 parseFirefox: [src__frame.Frame, [core.String]],
561 parseSafari6_0: [src__frame.Frame, [core.String]],
562 parseSafari6_1: [src__frame.Frame, [core.String]],
563 parseSafari: [src__frame.Frame, [core.String]],
564 parseFriendly: [src__frame.Frame, [core.String]],
565 Frame: [src__frame.Frame, [core.Uri, core.int, core.int, core.String]]
566 }),
567 statics: () => ({
568 _uriOrPathToUri: [core.Uri, [core.String]],
569 _catchFormatException: [src__frame.Frame, [core.String, dart.functionType( src__frame.Frame, [])]]
570 }),
571 names: ['_uriOrPathToUri', '_catchFormatException']
572 });
573 dart.defineLazy(src__frame.Frame, {
574 get _uriRegExp() {
575 return core.RegExp.new('^[a-zA-Z][-+.a-zA-Z\\d]*://');
576 },
577 get _windowsRegExp() {
578 return core.RegExp.new('^([a-zA-Z]:[\\\\/]|\\\\\\\\)');
579 }
580 });
581 src__stack_zone_specification._ChainHandler = dart.typedef('_ChainHandler', () => dart.functionType(dart.void, [dart.dynamic, src__chain.Chain]));
582 const _chains = Symbol('_chains');
583 const _onError = Symbol('_onError');
584 const _currentNode = Symbol('_currentNode');
585 const _createNode = Symbol('_createNode');
586 const _run = Symbol('_run');
587 src__stack_zone_specification.StackZoneSpecification = class StackZoneSpecific ation extends core.Object {
588 StackZoneSpecification(onError) {
589 if (onError === void 0) onError = null;
590 this[_chains] = new (core.Expando$(src__stack_zone_specification._Node))(" stack chains");
591 this[_onError] = onError;
592 this[_currentNode] = null;
593 }
594 toSpec() {
595 return async.ZoneSpecification.new({handleUncaughtError: dart.bind(this, ' handleUncaughtError'), registerCallback: dart.bind(this, 'registerCallback'), re gisterUnaryCallback: dart.bind(this, 'registerUnaryCallback'), registerBinaryCal lback: dart.bind(this, 'registerBinaryCallback'), errorCallback: dart.bind(this, 'errorCallback')});
596 }
597 currentChain(level) {
598 if (level === void 0) level = 0;
599 return this[_createNode](dart.notNull(level) + 1).toChain();
600 }
601 chainFor(trace) {
602 if (dart.is(trace, src__chain.Chain)) return trace;
603 let previous = trace == null ? null : this[_chains].get(trace);
604 return new src__stack_zone_specification._Node(trace, previous).toChain();
605 }
606 trackFuture(future, level) {
607 if (level === void 0) level = 0;
608 let completer = async.Completer.sync();
609 let node = this[_createNode](dart.notNull(level) + 1);
610 future.then(dart.dynamic)(dart.bind(completer, 'complete')).catchError(dar t.fn((e, stackTrace) => {
611 if (stackTrace == null) stackTrace = src__trace.Trace.current();
612 if (!dart.is(stackTrace, src__chain.Chain) && this[_chains].get(stackTra ce) == null) {
613 this[_chains].set(stackTrace, node);
614 }
615 completer.completeError(e, dart.as(stackTrace, core.StackTrace));
616 }));
617 return completer.future;
618 }
619 trackStream(stream, level) {
620 if (level === void 0) level = 0;
621 let node = this[_createNode](dart.notNull(level) + 1);
622 return stream.transform(dart.dynamic)(async.StreamTransformer.fromHandlers ({handleError: dart.fn((error, stackTrace, sink) => {
623 if (stackTrace == null) stackTrace = src__trace.Trace.current();
624 if (!dart.is(stackTrace, src__chain.Chain) && this[_chains].get(stackT race) == null) {
625 this[_chains].set(stackTrace, node);
626 }
627 sink.addError(error, stackTrace);
628 }, dart.void, [core.Object, core.StackTrace, async.EventSink])}));
629 }
630 registerCallback(self, parent, zone, f) {
631 if (f == null) return parent.registerCallback(dart.dynamic)(zone, null);
632 let node = this[_createNode](1);
633 return parent.registerCallback(dart.dynamic)(zone, dart.fn(() => this[_run ](f, node)));
634 }
635 registerUnaryCallback(self, parent, zone, f) {
636 if (f == null) return parent.registerUnaryCallback(dart.dynamic, dart.dyna mic)(zone, null);
637 let node = this[_createNode](1);
638 return parent.registerUnaryCallback(dart.dynamic, dart.dynamic)(zone, dart .fn(arg => this[_run](dart.fn(() => dart.dcall(f, arg)), node)));
639 }
640 registerBinaryCallback(self, parent, zone, f) {
641 if (f == null) return parent.registerBinaryCallback(dart.dynamic, dart.dyn amic, dart.dynamic)(zone, null);
642 let node = this[_createNode](1);
643 return parent.registerBinaryCallback(dart.dynamic, dart.dynamic, dart.dyna mic)(zone, dart.fn((arg1, arg2) => this[_run](dart.fn(() => dart.dcall(f, arg1, arg2)), node)));
644 }
645 handleUncaughtError(self, parent, zone, error, stackTrace) {
646 let stackChain = this.chainFor(stackTrace);
647 if (this[_onError] == null) {
648 return parent.handleUncaughtError(dart.dynamic)(zone, error, stackChain) ;
649 }
650 try {
651 return parent.runBinary(dart.dynamic, dart.dynamic, src__chain.Chain)(zo ne, this[_onError], error, stackChain);
652 } catch (newError) {
653 let newStackTrace = dart.stackTrace(newError);
654 if (core.identical(newError, error)) {
655 return parent.handleUncaughtError(dart.dynamic)(zone, error, stackChai n);
656 } else {
657 return parent.handleUncaughtError(dart.dynamic)(zone, newError, newSta ckTrace);
658 }
659 }
660
661 }
662 errorCallback(self, parent, zone, error, stackTrace) {
663 if (stackTrace == null) {
664 stackTrace = this[_createNode](2).toChain();
665 } else {
666 if (this[_chains].get(stackTrace) == null) this[_chains].set(stackTrace, this[_createNode](2));
667 }
668 let asyncError = parent.errorCallback(zone, error, stackTrace);
669 return asyncError == null ? new async.AsyncError(error, stackTrace) : asyn cError;
670 }
671 [_createNode](level) {
672 if (level === void 0) level = 0;
673 return new src__stack_zone_specification._Node(src__trace.Trace.current(da rt.notNull(level) + 1), this[_currentNode]);
674 }
675 [_run](f, node) {
676 let previousNode = this[_currentNode];
677 this[_currentNode] = node;
678 try {
679 return dart.dcall(f);
680 } catch (e) {
681 let stackTrace = dart.stackTrace(e);
682 this[_chains].set(stackTrace, node);
683 throw e;
684 }
685 finally {
686 this[_currentNode] = previousNode;
687 }
688 }
689 };
690 dart.setSignature(src__stack_zone_specification.StackZoneSpecification, {
691 constructors: () => ({StackZoneSpecification: [src__stack_zone_specification .StackZoneSpecification, [], [src__stack_zone_specification._ChainHandler]]}),
692 methods: () => ({
693 toSpec: [async.ZoneSpecification, []],
694 currentChain: [src__chain.Chain, [], [core.int]],
695 chainFor: [src__chain.Chain, [core.StackTrace]],
696 trackFuture: [async.Future, [async.Future], [core.int]],
697 trackStream: [async.Stream, [async.Stream], [core.int]],
698 registerCallback: [async.ZoneCallback, [async.Zone, async.ZoneDelegate, as ync.Zone, core.Function]],
699 registerUnaryCallback: [async.ZoneUnaryCallback, [async.Zone, async.ZoneDe legate, async.Zone, core.Function]],
700 registerBinaryCallback: [async.ZoneBinaryCallback, [async.Zone, async.Zone Delegate, async.Zone, core.Function]],
701 handleUncaughtError: [dart.dynamic, [async.Zone, async.ZoneDelegate, async .Zone, dart.dynamic, core.StackTrace]],
702 errorCallback: [async.AsyncError, [async.Zone, async.ZoneDelegate, async.Z one, core.Object, core.StackTrace]],
703 [_createNode]: [src__stack_zone_specification._Node, [], [core.int]],
704 [_run]: [dart.dynamic, [core.Function, src__stack_zone_specification._Node ]]
705 })
706 });
707 src__stack_zone_specification._Node = class _Node extends core.Object {
708 _Node(trace, previous) {
709 if (previous === void 0) previous = null;
710 this.previous = previous;
711 this.trace = trace == null ? src__trace.Trace.current() : src__trace.Trace .from(trace);
712 }
713 toChain() {
714 let nodes = dart.list([], src__trace.Trace);
715 let node = this;
716 while (node != null) {
717 nodes[dartx.add](node.trace);
718 node = node.previous;
719 }
720 return new src__chain.Chain(nodes);
721 }
722 };
723 dart.setSignature(src__stack_zone_specification._Node, {
724 constructors: () => ({_Node: [src__stack_zone_specification._Node, [core.Sta ckTrace], [src__stack_zone_specification._Node]]}),
725 methods: () => ({toChain: [src__chain.Chain, []]})
726 });
727 src__unparsed_frame.UnparsedFrame = class UnparsedFrame extends core.Object {
728 UnparsedFrame(member) {
729 this.uri = core.Uri.new({path: "unparsed"});
730 this.member = member;
731 this.line = null;
732 this.column = null;
733 this.isCore = false;
734 this.library = "unparsed";
735 this.package = null;
736 this.location = "unparsed";
737 }
738 toString() {
739 return this.member;
740 }
741 };
742 src__unparsed_frame.UnparsedFrame[dart.implements] = () => [src__frame.Frame];
743 dart.setSignature(src__unparsed_frame.UnparsedFrame, {
744 constructors: () => ({UnparsedFrame: [src__unparsed_frame.UnparsedFrame, [co re.String]]})
745 });
746 stack_trace.ChainHandler = src__chain.ChainHandler;
747 stack_trace.Chain = src__chain.Chain;
748 stack_trace.Frame = src__frame.Frame;
749 stack_trace.Trace = src__trace.Trace;
750 stack_trace.UnparsedFrame = src__unparsed_frame.UnparsedFrame;
751 // Exports:
752 exports.src__trace = src__trace;
753 exports.src__chain = src__chain;
754 exports.src__vm_trace = src__vm_trace;
755 exports.src__lazy_trace = src__lazy_trace;
756 exports.src__utils = src__utils;
757 exports.src__frame = src__frame;
758 exports.src__stack_zone_specification = src__stack_zone_specification;
759 exports.src__unparsed_frame = src__unparsed_frame;
760 exports.stack_trace = stack_trace;
761 });
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698