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

Unified Diff: third_party/pkg/angular/lib/tools/parser_getter_setter/generator.dart

Issue 148453003: Updating Angular version (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 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
index 5d77e72331bf8d04a25667245394c92ceb2431aa..e1b4b7de5d98d51f73aa6220e2a532b01f612686 100644
--- a/third_party/pkg/angular/lib/tools/parser_getter_setter/generator.dart
+++ b/third_party/pkg/angular/lib/tools/parser_getter_setter/generator.dart
@@ -1,90 +1,101 @@
-import 'package:angular/core/parser/parser_library.dart';
+import 'package:angular/core/parser/parser.dart';
import 'package:angular/tools/reserved_dart_keywords.dart';
+import 'dart:math';
-class _AST implements ParserAST {
- bool get assignable => true;
-}
+class DartGetterSetterGen extends ParserBackend {
+ final Set<String> properties = new Set<String>();
+ final Map<String, Set<int>> calls = new Map<String, Set<int>>();
+
+ bool isAssignable(expression) => 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();
+ registerAccess(String name) {
+ if (isReserved(name)) return;
+ properties.add(name);
}
- getterSetter(String key) {
- key.split('.').forEach((i) => identifiers[i] = true);
- return new _AST();
+ registerCall(String name, List arguments) {
+ if (isReserved(name)) return;
+ Set<int> arities = calls.putIfAbsent(name, () => new Set<int>());
+ arities.add(arguments.length);
}
+
+ newAccessScope(String name)
+ => registerAccess(name);
+ newAccessMember(var object, String name)
+ => registerAccess(name);
+ newCallScope(String name, List arguments)
+ => registerCall(name, arguments);
+ newCallMember(var object, String name, List arguments)
+ => registerCall(name, arguments);
}
class ParserGetterSetter {
-
- DynamicParser parser;
- DartGetterSetterGen backend;
-
+ final Parser parser;
+ final ParserBackend backend;
ParserGetterSetter(this.parser, this.backend);
generateParser(List<String> exprs) {
exprs.forEach((expr) {
try {
parser(expr);
- } catch (e) { }
+ } catch (e) {
+ // Ignore exceptions.
+ }
});
- print(generateCode(backend.identifiers.keys.toList()));
+ DartGetterSetterGen backend = this.backend;
+ print(generateClosureMap(backend.properties, backend.calls));
}
- generateCode(Iterable<String> keys) {
- keys = keys.where((key) => !isReserved(key));
+ generateClosureMap(Set<String> properties, Map<String, Set<int>> calls) {
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);
- }
-
+class StaticClosureMap extends ClosureMap {
+ Map<String, Getter> _getters = ${generateGetterMap(properties)};
+ Map<String, Setter> _setters = ${generateSetterMap(properties)};
+ List<Map<String, Function>> _functions = ${generateFunctionMap(calls)};
+
+ Getter lookupGetter(String name)
+ => _getters[name];
+ Setter lookupSetter(String name)
+ => _setters[name];
+ lookupFunction(String name, int arity)
+ => (arity < _functions.length) ? _functions[arity][name] : null;
}
''';
}
generateGetterMap(Iterable<String> keys) {
- var lines = keys.map((key) => 'r"${key}": (s) => s.$key');
+ var lines = keys.map((key) => 'r"${key}": (o) => o.$key');
return '{\n ${lines.join(",\n ")}\n }';
}
generateSetterMap(Iterable<String> keys) {
- var lines = keys.map((key) => 'r"${key}": (s, v) => s.$key = v');
+ var lines = keys.map((key) => 'r"${key}": (o, v) => o.$key = v');
return '{\n ${lines.join(",\n ")}\n }';
}
+
+ generateFunctionMap(Map<String, Set<int>> calls) {
+ Map<int, Set<String>> arities = {};
+ calls.forEach((name, callArities) {
+ callArities.forEach((arity){
+ arities.putIfAbsent(arity, () => new Set<String>()).add(name);
+ });
+ });
+
+ var maxArity = arities.keys.reduce((x, y) => max(x, y));
+
+ var maps = new Iterable.generate(maxArity, (arity) {
+ var names = arities[arity];
+ if (names == null) {
+ return '{\n }';
+ } else {
+ var args = new List.generate(arity, (e) => "a$e").join(',');
+ var p = args.isEmpty ? '' : ', $args';
+ var lines = names.map((name) => 'r"$name": (o$p) => o.$name($args)');
+ return '{\n ${lines.join(",\n ")}\n }';
+ }
+ });
+
+ return '[${maps.join(",")}]';
+ }
}
« no previous file with comments | « third_party/pkg/angular/lib/tools/parser_generator/source.dart ('k') | third_party/pkg/angular/lib/tools/selector.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698