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

Side by Side Diff: third_party/pkg/angular/lib/tools/parser_generator/generator.dart

Issue 124053002: Adding Angular and dependent packages for testing (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 11 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
OLDNEW
(Empty)
1 library generator;
2
3 import 'dart_code_gen.dart';
4 import '../../core/parser/parser_library.dart';
5 import 'source.dart';
6
7 class SourcePrinter {
8 printSrc(src) {
9 print(src);
10 }
11 }
12
13 class ParserGenerator {
14 DynamicParser _parser;
15 Map<String, bool> _printedFunctions = {};
16 GetterSetterGenerator _getters;
17 SourceBuilder _ = new SourceBuilder();
18 SourcePrinter _prt;
19
20 ParserGenerator(this._parser, this._getters, this._prt);
21
22 generateParser(Iterable<String> expressions) {
23 _prt..printSrc("genEvalError(msg) { throw msg; }")
24 ..printSrc("functions(FilterLookup filters) => "
25 "new StaticParserFunctions(buildExpressions(filters));")
26 ..printSrc('var evalError = (text, [s]) => text;')
27 ..printSrc("");
28 BodySource body = new BodySource();
29 MapSource map = new MapSource();
30
31 // deterimine the order.
32 expressions.forEach((exp) {
33 var code = safeCode(exp);
34 map('${_.str(exp)}: ${_.ref(code)}');
35 });
36 // now do it in actual order
37 _.codeRefs.forEach((code) {
38 body(_.stmt('Expression ${_.ref(code)} = ', code.toSource(_)));
39 });
40 body(_.stmt('return ', map));
41 _prt..printSrc("Map<String, Expression> buildExpressions(FilterLookup filter s) ${body}")
42 ..printSrc("\n")
43 ..printSrc(_getters.functions);
44 }
45
46 Code safeCode(String exp) {
47 try {
48 return _parser(exp);
49 } catch (e) {
50 if ("$e".contains('Parser Error') ||
51 "$e".contains('Lexer Error') ||
52 "$e".contains('Unexpected end of expression')) {
53 return new ThrowCode("'${escape(e.toString())}';");
54 } else {
55 rethrow;
56 }
57 }
58 }
59
60 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698