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

Unified Diff: packages/petitparser/lib/src/debug/progress.dart

Issue 1400473008: Roll Observatory packages and add a roll script (Closed) Base URL: git@github.com:dart-lang/observatory_pub_packages.git@master
Patch Set: Created 5 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « packages/petitparser/lib/src/debug/profile.dart ('k') | packages/petitparser/lib/src/debug/trace.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: packages/petitparser/lib/src/debug/progress.dart
diff --git a/packages/petitparser/lib/src/debug/progress.dart b/packages/petitparser/lib/src/debug/progress.dart
new file mode 100644
index 0000000000000000000000000000000000000000..022e085fa5c611baba3610374e106dbf7400b63e
--- /dev/null
+++ b/packages/petitparser/lib/src/debug/progress.dart
@@ -0,0 +1,30 @@
+part of petitparser.debug;
+
+/// Returns a transformed [parser] that when being used to read input
+/// visually prints its progress while progressing.
+///
+/// For example, the snippet
+///
+/// var parser = letter() & word().star();
+/// progress(parser).parse('f123');
+///
+/// produces the following output:
+///
+/// * Instance of 'SequenceParser'
+/// * Instance of 'CharacterParser'[letter expected]
+/// ** Instance of 'PossessiveRepeatingParser'[0..*]
+/// ** Instance of 'CharacterParser'[letter or digit expected]
+/// *** Instance of 'CharacterParser'[letter or digit expected]
+/// **** Instance of 'CharacterParser'[letter or digit expected]
+/// ***** Instance of 'CharacterParser'[letter or digit expected]
+///
+/// Jumps backwards mean that the parser is back-tracking. Often choices can
+/// be reordered to such expensive parses.
+Parser progress(Parser parser, [OutputHandler output = print]) {
+ return transformParser(parser, (each) {
+ return new ContinuationParser(each, (continuation, context) {
+ output('${_repeat(1 + context.position, '*')} $each');
+ return continuation(context);
+ });
+ });
+}
« no previous file with comments | « packages/petitparser/lib/src/debug/profile.dart ('k') | packages/petitparser/lib/src/debug/trace.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698