Index: third_party/pkg/angular/lib/tools/parser_generator/dart_code_gen.dart |
diff --git a/third_party/pkg/angular/lib/tools/parser_generator/dart_code_gen.dart b/third_party/pkg/angular/lib/tools/parser_generator/dart_code_gen.dart |
deleted file mode 100644 |
index 5bac0003cc392c259382017d0d31ec10cf9b57d3..0000000000000000000000000000000000000000 |
--- a/third_party/pkg/angular/lib/tools/parser_generator/dart_code_gen.dart |
+++ /dev/null |
@@ -1,308 +0,0 @@ |
-library dart_code_gen; |
- |
-import 'package:angular/utils.dart' show isReservedWord; |
-import 'package:angular/core/parser/syntax.dart'; |
- |
-escape(String s) => s.replaceAllMapped(new RegExp(r'(\"|\$|\n)'), (m) { |
- var char = m[1]; |
- if (char == '\n') char = 'n'; |
- return "\\$char"; |
-}); |
- |
-class DartCodeGen { |
- final HelperMap getters = new HelperMap('_', |
- getterTemplate, getterTemplateForReserved); |
- final HelperMap holders = new HelperMap('_ensure\$', |
- holderTemplate, holderTemplateForReserved); |
- final HelperMap setters = new HelperMap('_set\$', |
- setterTemplate, setterTemplateForReserved); |
- |
- String generate(Expression expression, bool assign) { |
- var v = new DartCodeGenVisitor(getters, holders, setters); |
- return assign ? v.assign(expression)('value') : v.evaluate(expression); |
- } |
-} |
- |
-class DartCodeGenVisitor extends Visitor { |
- static const int STATE_EVAL = 0; |
- static const int STATE_EVAL_HOLDER = 1; |
- static const int STATE_ASSIGN = 2; |
- int state = STATE_EVAL; |
- |
- final HelperMap getters; |
- final HelperMap holders; |
- final HelperMap setters; |
- |
- DartCodeGenVisitor(this.getters, this.holders, this.setters); |
- |
- bool get isEvaluating => state == STATE_EVAL; |
- bool get isEvaluatingHolder => state == STATE_EVAL_HOLDER; |
- bool get isAssigning => state == STATE_ASSIGN; |
- |
- String lookupGetter(String key) => getters.lookup(key); |
- String lookupHolder(String key) => holders.lookup(key); |
- String lookupSetter(String key) => setters.lookup(key); |
- |
- String lookupAccessor(String key) { |
- if (state == STATE_EVAL) { |
- return lookupGetter(key); |
- } else if (state == STATE_EVAL_HOLDER) { |
- return lookupHolder(key); |
- } else { |
- assert(state == STATE_ASSIGN); |
- return lookupSetter(key); |
- } |
- } |
- |
- String toBool(String value) |
- => 'toBool($value)'; |
- String safeCallFunction(String function, String name, String arguments) |
- => 'ensureFunction($function, "$name")($arguments)'; |
- |
- String evaluate(Expression expression, {bool convertToBool: false}) { |
- int old = state; |
- try { |
- state = STATE_EVAL; |
- String result = visit(expression); |
- if (convertToBool) result = toBool(result); |
- return result; |
- } finally { |
- state = old; |
- } |
- } |
- |
- String evaluateHolder(Expression expression) { |
- int old = state; |
- try { |
- state = STATE_EVAL_HOLDER; |
- return visit(expression); |
- } finally { |
- state = old; |
- } |
- } |
- |
- Function assign(Expression target) { |
- int old = state; |
- try { |
- state = STATE_ASSIGN; |
- return visit(target); |
- } finally { |
- state = old; |
- } |
- } |
- |
- visitChain(Chain chain) { |
- StringBuffer buffer = new StringBuffer(); |
- buffer.writeln("var result, last;"); |
- for (int i = 0; i < chain.expressions.length; i++) { |
- String expression = evaluate(chain.expressions[i]); |
- buffer.writeln('last = $expression;'); |
- buffer.writeln('if (last != null) result = last;'); |
- } |
- buffer.write('return result;'); |
- return "$buffer"; |
- } |
- |
- visitFilter(Filter filter) { |
- List expressions = [ filter.expression ]..addAll(filter.arguments); |
- String arguments = expressions.map((e) => evaluate(e)).join(', '); |
- String name = escape(filter.name); |
- return 'filters("$name")($arguments)'; |
- } |
- |
- visitAssign(Assign expression) { |
- String value = evaluate(expression.value); |
- return assign(expression.target)(value); |
- } |
- |
- visitConditional(Conditional conditional) { |
- String condition = evaluate(conditional.condition, convertToBool: true); |
- String yes = evaluate(conditional.yes); |
- String no = evaluate(conditional.no); |
- return "$condition ? $yes : $no"; |
- } |
- |
- visitAccessScope(AccessScope access) { |
- String accessor = lookupAccessor(access.name); |
- return isAssigning |
- ? (value) => '$accessor(scope, $value)' |
- : '$accessor(scope)'; |
- } |
- |
- visitAccessMember(AccessMember access) { |
- String object = !isEvaluating |
- ? evaluateHolder(access.object) |
- : evaluate(access.object); |
- String accessor = lookupAccessor(access.name); |
- return isAssigning |
- ? (value) => '$accessor($object, $value)' |
- : '$accessor($object)'; |
- } |
- |
- visitAccessKeyed(AccessKeyed access) { |
- String object = evaluate(access.object); |
- String key = evaluate(access.key); |
- return (isAssigning) |
- ? (value) => 'setKeyed($object, $key, $value)' |
- : 'getKeyed($object, $key)'; |
- } |
- |
- visitCallScope(CallScope call) { |
- String arguments = call.arguments.map((e) => evaluate(e)).join(', '); |
- String getter = lookupGetter(call.name); |
- return safeCallFunction('$getter(scope)', call.name, arguments); |
- } |
- |
- visitCallFunction(CallFunction call) { |
- String function = evaluate(call.function); |
- String arguments = call.arguments.map((e) => evaluate(e)).join(', '); |
- return safeCallFunction(function, "${call.function}", arguments); |
- } |
- |
- visitCallMember(CallMember call) { |
- String object = evaluate(call.object); |
- String arguments = call.arguments.map((e) => evaluate(e)).join(', '); |
- String getter = lookupGetter(call.name); |
- return safeCallFunction('$getter($object)', call.name, arguments); |
- } |
- |
- visitBinary(Binary binary) { |
- String operation = binary.operation; |
- bool logical = (operation == '||') || (operation == '&&'); |
- String left = evaluate(binary.left, convertToBool: logical); |
- String right = evaluate(binary.right, convertToBool: logical); |
- if (operation == '+') { |
- return 'autoConvertAdd($left, $right)'; |
- } else { |
- return '($left $operation $right)'; |
- } |
- } |
- |
- visitPrefix(Prefix prefix) { |
- String operation = prefix.operation; |
- bool logical = (operation == '!'); |
- String expression = evaluate(prefix.expression, convertToBool: logical); |
- return '$operation$expression'; |
- } |
- |
- visitLiteral(Literal literal) { |
- return '$literal'; |
- } |
- |
- visitLiteralString(LiteralString literal) { |
- return 'r$literal'; |
- } |
- |
- visitLiteralArray(LiteralArray literal) { |
- if (literal.elements.isEmpty) return '[]'; |
- StringBuffer buffer = new StringBuffer(); |
- for (int i = 0; i < literal.elements.length; i++) { |
- if (i != 0) buffer.write(', '); |
- buffer.write(evaluate(literal.elements[i])); |
- } |
- return "[ $buffer ]"; |
- } |
- |
- visitLiteralObject(LiteralObject literal) { |
- if (literal.keys.isEmpty) return '{}'; |
- StringBuffer buffer = new StringBuffer(); |
- List<String> keys = literal.keys; |
- for (int i = 0; i < keys.length; i++) { |
- if (i != 0) buffer.write(', '); |
- buffer.write("'${keys[i]}': "); |
- buffer.write(evaluate(literal.values[i])); |
- } |
- return "{ $buffer }"; |
- } |
-} |
- |
-class HelperMap { |
- final Map<String, String> helpers = new Map<String, String>(); |
- final Map<String, String> names = new Map<String, String>(); |
- |
- final String prefix; |
- final Function template; |
- final Function templateForReserved; |
- |
- HelperMap(this.prefix, this.template, this.templateForReserved); |
- |
- String lookup(String key) { |
- String name = _computeName(key); |
- if (helpers.containsKey(key)) return name; |
- helpers[key] = isReservedWord(key) |
- ? templateForReserved(name, key) |
- : template(name, key); |
- return name; |
- } |
- |
- String _computeName(String key) { |
- String result = names[key]; |
- if (result != null) return result; |
- return names[key] = "$prefix$key"; |
- } |
-} |
- |
- |
- |
-// ------------------------------------------------------------------ |
-// Templates for generated getters. |
-// ------------------------------------------------------------------ |
-String getterTemplate(String name, String key) => """ |
-$name(o) { |
- if (o == null) return null; |
- return (o is Map) ? o["${escape(key)}"] : o.$key; |
-} |
-"""; |
- |
-String getterTemplateForReserved(String name, String key) => """ |
-$name(o) { |
- if (o == null) return null; |
- return (o is Map) ? o["${escape(key)}"] : null; |
-} |
-"""; |
- |
- |
-// ------------------------------------------------------------------ |
-// Templates for generated holders (getters for assignment). |
-// ------------------------------------------------------------------ |
-String holderTemplate(String name, String key) => """ |
-$name(o) { |
- if (o == null) return null; |
- if (o is Map) { |
- var key = "${escape(key)}"; |
- var result = o[key]; |
- return (result == null) ? result = o[key] = {} : result; |
- } else { |
- var result = o.$key; |
- return (result == null) ? result = o.$key = {} : result; |
- } |
-} |
-"""; |
- |
-String holderTemplateForReserved(String name, String key) => """ |
-$name(o) { |
- if (o == null) return null; |
- if (o is !Map) return {}; |
- var key = "${escape(key)}"; |
- var result = o[key]; |
- return (result == null) ? result = o[key] = {} : result; |
-} |
-"""; |
- |
- |
-// ------------------------------------------------------------------ |
-// Templates for generated setters. |
-// ------------------------------------------------------------------ |
-String setterTemplate(String name, String key) => """ |
-$name(o, v) { |
- if (o is Map) o["${escape(key)}"] = v; else o.$key = v; |
- return v; |
-} |
-"""; |
- |
-String setterTemplateForReserved(String name, String key) => """ |
-$name(o, v) { |
- if (o is Map) o["${escape(key)}"] = v; |
- return v; |
-} |
-"""; |