| Index: packages/polymer_expressions/lib/expression.dart | 
| diff --git a/packages/polymer_expressions/lib/expression.dart b/packages/polymer_expressions/lib/expression.dart | 
| deleted file mode 100644 | 
| index ac36c8bbe785a49f30505e15db67782463220b6d..0000000000000000000000000000000000000000 | 
| --- a/packages/polymer_expressions/lib/expression.dart | 
| +++ /dev/null | 
| @@ -1,368 +0,0 @@ | 
| -// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file | 
| -// for details. All rights reserved. Use of this source code is governed by a | 
| -// BSD-style license that can be found in the LICENSE file. | 
| - | 
| -library polymer_expressions.expression; | 
| - | 
| -import 'visitor.dart'; | 
| - | 
| -// Helper functions for building expression trees programmatically | 
| - | 
| -EmptyExpression empty() => const EmptyExpression(); | 
| -Literal literal(v) => new Literal(v); | 
| -ListLiteral listLiteral(List<Expression> items) => new ListLiteral(items); | 
| -MapLiteral mapLiteral(List<MapLiteralEntry> entries) => new MapLiteral(entries); | 
| -MapLiteralEntry mapLiteralEntry(Literal key, Expression value) => | 
| -    new MapLiteralEntry(key, value); | 
| -Identifier ident(String v) => new Identifier(v); | 
| -ParenthesizedExpression paren(Expression e) => new ParenthesizedExpression(e); | 
| -UnaryOperator unary(String op, Expression e) => new UnaryOperator(op, e); | 
| -BinaryOperator binary(Expression l, String op, Expression r) => | 
| -    new BinaryOperator(l, op, r); | 
| -Getter getter(Expression e, String m) => new Getter(e, m); | 
| -Index index(Expression e, Expression a) => new Index(e, a); | 
| -Invoke invoke(Expression e, String m, List<Expression> a) => | 
| -    new Invoke(e, m, a); | 
| -InExpression inExpr(Expression l, Expression r) => new InExpression(l, r); | 
| -AsExpression asExpr(Expression l, Expression r) => new AsExpression(l, r); | 
| -TernaryOperator ternary(Expression c, Expression t, Expression f) => | 
| -    new TernaryOperator(c, t, f); | 
| - | 
| -class AstFactory { | 
| -  EmptyExpression empty() => const EmptyExpression(); | 
| - | 
| -  Literal literal(v) => new Literal(v); | 
| - | 
| -  MapLiteral mapLiteral(List<MapLiteralEntry> entries) => | 
| -      new MapLiteral(entries); | 
| - | 
| -  MapLiteralEntry mapLiteralEntry(Literal key, Expression value) => | 
| -      new MapLiteralEntry(key, value); | 
| - | 
| -  Identifier identifier(String v) => new Identifier(v); | 
| - | 
| -  ParenthesizedExpression parenthesized(Expression e) => | 
| -      new ParenthesizedExpression(e); | 
| - | 
| -  UnaryOperator unary(String op, Expression e) => new UnaryOperator(op, e); | 
| - | 
| -  BinaryOperator binary(Expression l, String op, Expression r) => | 
| -      new BinaryOperator(l, op, r); | 
| - | 
| -  TernaryOperator ternary(Expression c, Expression t, Expression f) => | 
| -      new TernaryOperator(c, t, f); | 
| - | 
| -  Getter getter(Expression g, String n) => new Getter(g, n); | 
| - | 
| -  Index index(Expression e, Expression a) => new Index(e, a); | 
| - | 
| -  Invoke invoke(Expression e, String m, List<Expression> a) => | 
| -      new Invoke(e, m, a); | 
| - | 
| -  InExpression inExpr(Expression l, Expression r) => new InExpression(l, r); | 
| - | 
| -  AsExpression asExpr(Expression l, Expression r) => new AsExpression(l, r); | 
| -} | 
| - | 
| -/// Base class for all expressions | 
| -abstract class Expression { | 
| -  const Expression(); | 
| -  accept(Visitor v); | 
| -} | 
| - | 
| -abstract class HasIdentifier { | 
| -  String get identifier; | 
| -  Expression get expr; | 
| -} | 
| - | 
| -class EmptyExpression extends Expression { | 
| -  const EmptyExpression(); | 
| -  accept(Visitor v) => v.visitEmptyExpression(this); | 
| -} | 
| - | 
| -class Literal<T> extends Expression { | 
| -  final T value; | 
| - | 
| -  Literal(this.value); | 
| - | 
| -  accept(Visitor v) => v.visitLiteral(this); | 
| - | 
| -  String toString() => (value is String) ? '"$value"' : '$value'; | 
| - | 
| -  bool operator ==(o) => o is Literal<T> && o.value == value; | 
| - | 
| -  int get hashCode => value.hashCode; | 
| -} | 
| - | 
| -class ListLiteral extends Expression { | 
| -  final List<Expression> items; | 
| - | 
| -  ListLiteral(this.items); | 
| - | 
| -  accept(Visitor v) => v.visitListLiteral(this); | 
| - | 
| -  String toString() => "$items"; | 
| - | 
| -  bool operator ==(o) => o is ListLiteral && _listEquals(o.items, items); | 
| - | 
| -  int get hashCode => _hashList(items); | 
| -} | 
| - | 
| -class MapLiteral extends Expression { | 
| -  final List<MapLiteralEntry> entries; | 
| - | 
| -  MapLiteral(this.entries); | 
| - | 
| -  accept(Visitor v) => v.visitMapLiteral(this); | 
| - | 
| -  String toString() => "{$entries}"; | 
| - | 
| -  bool operator ==(o) => o is MapLiteral && _listEquals(o.entries, entries); | 
| - | 
| -  int get hashCode => _hashList(entries); | 
| -} | 
| - | 
| -class MapLiteralEntry extends Expression { | 
| -  final Literal key; | 
| -  final Expression entryValue; | 
| - | 
| -  MapLiteralEntry(this.key, this.entryValue); | 
| - | 
| -  accept(Visitor v) => v.visitMapLiteralEntry(this); | 
| - | 
| -  String toString() => "$key: $entryValue"; | 
| - | 
| -  bool operator ==(o) => o is MapLiteralEntry && o.key == key | 
| -      && o.entryValue == entryValue; | 
| - | 
| -  int get hashCode => _JenkinsSmiHash.hash2(key.hashCode, entryValue.hashCode); | 
| -} | 
| - | 
| -class ParenthesizedExpression extends Expression { | 
| -  final Expression child; | 
| - | 
| -  ParenthesizedExpression(this.child); | 
| - | 
| -  accept(Visitor v) => v.visitParenthesizedExpression(this); | 
| - | 
| -  String toString() => '($child)'; | 
| - | 
| -  bool operator ==(o) => o is ParenthesizedExpression && o.child == child; | 
| - | 
| -  int get hashCode => child.hashCode; | 
| -} | 
| - | 
| -class Identifier extends Expression { | 
| -  final String value; | 
| - | 
| -  Identifier(this.value); | 
| - | 
| -  accept(Visitor v) => v.visitIdentifier(this); | 
| - | 
| -  String toString() => value; | 
| - | 
| -  bool operator ==(o) => o is Identifier && o.value == value; | 
| - | 
| -  int get hashCode => value.hashCode; | 
| -} | 
| - | 
| -class UnaryOperator extends Expression { | 
| -  final String operator; | 
| -  final Expression child; | 
| - | 
| -  UnaryOperator(this.operator, this.child); | 
| - | 
| -  accept(Visitor v) => v.visitUnaryOperator(this); | 
| - | 
| -  String toString() => '$operator $child'; | 
| - | 
| -  bool operator ==(o) => o is UnaryOperator && o.operator == operator | 
| -      && o.child == child; | 
| - | 
| -  int get hashCode => _JenkinsSmiHash.hash2(operator.hashCode, child.hashCode); | 
| -} | 
| - | 
| -class BinaryOperator extends Expression { | 
| -  final String operator; | 
| -  final Expression left; | 
| -  final Expression right; | 
| - | 
| -  BinaryOperator(this.left, this.operator, this.right); | 
| - | 
| -  accept(Visitor v) => v.visitBinaryOperator(this); | 
| - | 
| -  String toString() => '($left $operator $right)'; | 
| - | 
| -  bool operator ==(o) => o is BinaryOperator && o.operator == operator | 
| -      && o.left == left && o.right == right; | 
| - | 
| -  int get hashCode => _JenkinsSmiHash.hash3(operator.hashCode, left.hashCode, | 
| -      right.hashCode); | 
| -} | 
| - | 
| -class TernaryOperator extends Expression { | 
| -  final Expression condition; | 
| -  final Expression trueExpr; | 
| -  final Expression falseExpr; | 
| - | 
| -  TernaryOperator(this.condition, this.trueExpr, this.falseExpr); | 
| - | 
| -  accept(Visitor v) => v.visitTernaryOperator(this); | 
| - | 
| -  String toString() => '($condition ? $trueExpr : $falseExpr)'; | 
| - | 
| -  bool operator ==(o) => o is TernaryOperator | 
| -      && o.condition == condition | 
| -      && o.trueExpr == trueExpr | 
| -      && o.falseExpr == falseExpr; | 
| - | 
| -  int get hashCode => _JenkinsSmiHash.hash3(condition.hashCode, | 
| -      trueExpr.hashCode, falseExpr.hashCode); | 
| -} | 
| - | 
| -class InExpression extends Expression implements HasIdentifier { | 
| -  final Identifier left; | 
| -  final Expression right; | 
| - | 
| -  InExpression(this.left, this.right); | 
| - | 
| -  accept(Visitor v) => v.visitInExpression(this); | 
| - | 
| -  String get identifier => left.value; | 
| - | 
| -  Expression get expr => right; | 
| - | 
| -  String toString() => '($left in $right)'; | 
| - | 
| -  bool operator ==(o) => o is InExpression && o.left == left | 
| -      && o.right == right; | 
| - | 
| -  int get hashCode => _JenkinsSmiHash.hash2(left.hashCode, right.hashCode); | 
| -} | 
| - | 
| -class AsExpression extends Expression implements HasIdentifier { | 
| -  final Expression left; | 
| -  final Identifier right; | 
| - | 
| -  AsExpression(this.left, this.right); | 
| - | 
| -  accept(Visitor v) => v.visitAsExpression(this); | 
| - | 
| -  String get identifier => right.value; | 
| - | 
| -  Expression get expr => left; | 
| - | 
| -  String toString() => '($left as $right)'; | 
| - | 
| -  bool operator ==(o) => o is AsExpression && o.left == left | 
| -      && o.right == right; | 
| - | 
| -  int get hashCode => _JenkinsSmiHash.hash2(left.hashCode, right.hashCode); | 
| -} | 
| - | 
| -class Index extends Expression { | 
| -  final Expression receiver; | 
| -  final Expression argument; | 
| - | 
| -  Index(this.receiver, this.argument); | 
| - | 
| -  accept(Visitor v) => v.visitIndex(this); | 
| - | 
| -  String toString() => '$receiver[$argument]'; | 
| - | 
| -  bool operator ==(o) => | 
| -      o is Index | 
| -      && o.receiver == receiver | 
| -      && o.argument == argument; | 
| - | 
| -  int get hashCode => | 
| -      _JenkinsSmiHash.hash2(receiver.hashCode, argument.hashCode); | 
| -} | 
| - | 
| -class Getter extends Expression { | 
| -  final Expression receiver; | 
| -  final String name; | 
| - | 
| -  Getter(this.receiver, this.name); | 
| - | 
| -  accept(Visitor v) => v.visitGetter(this); | 
| - | 
| -  String toString() => '$receiver.$name'; | 
| - | 
| -  bool operator ==(o) => | 
| -      o is Getter | 
| -      && o.receiver == receiver | 
| -      && o.name == name; | 
| - | 
| -  int get hashCode => _JenkinsSmiHash.hash2(receiver.hashCode, name.hashCode); | 
| - | 
| -} | 
| - | 
| -/** | 
| - * Represents a function or method invocation. If [method] is null, then | 
| - * [receiver] is an expression that should evaluate to a function. If [method] | 
| - * is not null, then [receiver] is an expression that should evaluate to an | 
| - * object that has an appropriate method. | 
| - */ | 
| -class Invoke extends Expression { | 
| -  final Expression receiver; | 
| -  final String method; | 
| -  final List<Expression> arguments; | 
| - | 
| -  Invoke(this.receiver, this.method, this.arguments) { | 
| -    assert(arguments != null); | 
| -  } | 
| - | 
| -  accept(Visitor v) => v.visitInvoke(this); | 
| - | 
| -  String toString() => '$receiver.$method($arguments)'; | 
| - | 
| -  bool operator ==(o) => | 
| -      o is Invoke | 
| -      && o.receiver == receiver | 
| -      && o.method == method | 
| -      && _listEquals(o.arguments, arguments); | 
| - | 
| -  int get hashCode => _JenkinsSmiHash.hash3(receiver.hashCode, method.hashCode, | 
| -      _hashList(arguments)); | 
| -} | 
| - | 
| -bool _listEquals(List a, List b) { | 
| -  if (a == b) return true; | 
| -  if (a == null || b == null) return false; | 
| -  if (a.length != b.length) return false; | 
| -  for (int i = 0; i < a.length; i++) { | 
| -    if (a[i] != b[i]) return false; | 
| -  } | 
| -  return true; | 
| -} | 
| - | 
| -int _hashList(List l) { | 
| -  var hash = l.fold(0, | 
| -      (h, item) => _JenkinsSmiHash.combine(h, item.hashCode)); | 
| -  return _JenkinsSmiHash.finish(hash); | 
| -} | 
| - | 
| -class _JenkinsSmiHash { | 
| -  // TODO: Bug 11617- This class should be optimized and standardized elsewhere. | 
| - | 
| -  static int combine(int hash, int value) { | 
| -    hash = 0x1fffffff & (hash + value); | 
| -    hash = 0x1fffffff & (hash + ((0x0007ffff & hash) << 10)); | 
| -    return hash ^ (hash >> 6); | 
| -  } | 
| - | 
| -  static int finish(int hash) { | 
| -    hash = 0x1fffffff & (hash + ((0x03ffffff & hash) <<  3)); | 
| -    hash = hash ^ (hash >> 11); | 
| -    return 0x1fffffff & (hash + ((0x00003fff & hash) << 15)); | 
| -  } | 
| - | 
| -  static int hash2(int a, int b) => finish(combine(combine(0, a), b)); | 
| - | 
| -  static int hash3(int a, int b, int c) => | 
| -      finish(combine(combine(combine(0, a), b), c)); | 
| - | 
| -  static int hash4(int a, int b, int c, int d) => | 
| -      finish(combine(combine(combine(combine(0, a), b), c), d)); | 
| -} | 
|  |