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

Side by Side Diff: third_party/pkg/angular/lib/tools/parser_getter_setter/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 import 'package:angular/core/parser/parser_library.dart';
2 import 'package:angular/tools/reserved_dart_keywords.dart';
3
4 class _AST implements ParserAST {
5 bool get assignable => true;
6 }
7
8 class DartGetterSetterGen implements ParserBackend {
9 Map<String, bool> identifiers = {};
10
11 profiled(value, perf, text) => new _AST();
12
13 binaryFn(left, String fn, right) => new _AST();
14 unaryFn(String fn, right) => new _AST();
15 ternaryFn(Expression cond, Expression _true, Expression _false) => new _AST();
16 assignment(left, right, evalError) => new _AST();
17 multipleStatements(List statements) => new _AST();
18 arrayDeclaration(List elementFns) => new _AST();
19 objectIndex(obj, indexFn, evalError) => new _AST();
20 object(List keyValues) => new _AST();
21 fromOperator(String op) => new _AST();
22 value(v) => new _AST();
23 zero() => new _AST();
24 functionCall(fn, fnName, List argsFn, evalError) => new _AST();
25 filter(String filterName,
26 Expression leftHandSide,
27 List<Expression> parameters,
28 Function evalError) => new _AST();
29
30 setter(String path) => throw new UnimplementedError();
31 getter(String path) => throw new UnimplementedError();
32
33
34 fieldAccess(object, String field) {
35 identifiers[field] = true;
36 return new _AST();
37 }
38
39 getterSetter(String key) {
40 key.split('.').forEach((i) => identifiers[i] = true);
41 return new _AST();
42 }
43 }
44
45 class ParserGetterSetter {
46
47 DynamicParser parser;
48 DartGetterSetterGen backend;
49
50 ParserGetterSetter(this.parser, this.backend);
51
52 generateParser(List<String> exprs) {
53 exprs.forEach((expr) {
54 try {
55 parser(expr);
56 } catch (e) { }
57 });
58
59 print(generateCode(backend.identifiers.keys.toList()));
60 }
61
62 generateCode(Iterable<String> keys) {
63 keys = keys.where((key) => !isReserved(key));
64 return '''
65 class StaticGetterSetter extends GetterSetter {
66 Map<String, Function> _getters = ${generateGetterMap(keys)};
67 Map<String, Function> _setters = ${generateSetterMap(keys)};
68
69 Function getter(String key) {
70 return _getters.containsKey(key) ? _getters[key] : super.getter(key);
71 }
72
73 Function setter(String key) {
74 return _setters.containsKey(key) ? _setters[key] : super.setter(key);
75 }
76
77 }
78 ''';
79 }
80
81 generateGetterMap(Iterable<String> keys) {
82 var lines = keys.map((key) => 'r"${key}": (s) => s.$key');
83 return '{\n ${lines.join(",\n ")}\n }';
84 }
85
86 generateSetterMap(Iterable<String> keys) {
87 var lines = keys.map((key) => 'r"${key}": (s, v) => s.$key = v');
88 return '{\n ${lines.join(",\n ")}\n }';
89 }
90 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698