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

Unified 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, 12 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
Index: third_party/pkg/angular/lib/tools/parser_getter_setter/generator.dart
diff --git a/third_party/pkg/angular/lib/tools/parser_getter_setter/generator.dart b/third_party/pkg/angular/lib/tools/parser_getter_setter/generator.dart
new file mode 100644
index 0000000000000000000000000000000000000000..5d77e72331bf8d04a25667245394c92ceb2431aa
--- /dev/null
+++ b/third_party/pkg/angular/lib/tools/parser_getter_setter/generator.dart
@@ -0,0 +1,90 @@
+import 'package:angular/core/parser/parser_library.dart';
+import 'package:angular/tools/reserved_dart_keywords.dart';
+
+class _AST implements ParserAST {
+ bool get assignable => true;
+}
+
+class DartGetterSetterGen implements ParserBackend {
+ Map<String, bool> identifiers = {};
+
+ profiled(value, perf, text) => new _AST();
+
+ binaryFn(left, String fn, right) => new _AST();
+ unaryFn(String fn, right) => new _AST();
+ ternaryFn(Expression cond, Expression _true, Expression _false) => new _AST();
+ assignment(left, right, evalError) => new _AST();
+ multipleStatements(List statements) => new _AST();
+ arrayDeclaration(List elementFns) => new _AST();
+ objectIndex(obj, indexFn, evalError) => new _AST();
+ object(List keyValues) => new _AST();
+ fromOperator(String op) => new _AST();
+ value(v) => new _AST();
+ zero() => new _AST();
+ functionCall(fn, fnName, List argsFn, evalError) => new _AST();
+ filter(String filterName,
+ Expression leftHandSide,
+ List<Expression> parameters,
+ Function evalError) => new _AST();
+
+ setter(String path) => throw new UnimplementedError();
+ getter(String path) => throw new UnimplementedError();
+
+
+ fieldAccess(object, String field) {
+ identifiers[field] = true;
+ return new _AST();
+ }
+
+ getterSetter(String key) {
+ key.split('.').forEach((i) => identifiers[i] = true);
+ return new _AST();
+ }
+}
+
+class ParserGetterSetter {
+
+ DynamicParser parser;
+ DartGetterSetterGen backend;
+
+ ParserGetterSetter(this.parser, this.backend);
+
+ generateParser(List<String> exprs) {
+ exprs.forEach((expr) {
+ try {
+ parser(expr);
+ } catch (e) { }
+ });
+
+ print(generateCode(backend.identifiers.keys.toList()));
+ }
+
+ generateCode(Iterable<String> keys) {
+ keys = keys.where((key) => !isReserved(key));
+ return '''
+class StaticGetterSetter extends GetterSetter {
+ Map<String, Function> _getters = ${generateGetterMap(keys)};
+ Map<String, Function> _setters = ${generateSetterMap(keys)};
+
+ Function getter(String key) {
+ return _getters.containsKey(key) ? _getters[key] : super.getter(key);
+ }
+
+ Function setter(String key) {
+ return _setters.containsKey(key) ? _setters[key] : super.setter(key);
+ }
+
+}
+''';
+ }
+
+ generateGetterMap(Iterable<String> keys) {
+ var lines = keys.map((key) => 'r"${key}": (s) => s.$key');
+ return '{\n ${lines.join(",\n ")}\n }';
+ }
+
+ generateSetterMap(Iterable<String> keys) {
+ var lines = keys.map((key) => 'r"${key}": (s, v) => s.$key = v');
+ return '{\n ${lines.join(",\n ")}\n }';
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698