| OLD | NEW |
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 library polymer_expressions.eval; | 5 library polymer_expressions.eval; |
| 6 | 6 |
| 7 import 'dart:async'; | 7 import 'dart:async'; |
| 8 import 'dart:collection'; | 8 import 'dart:collection'; |
| 9 | 9 |
| 10 @MirrorsUsed(metaTargets: const [Reflectable, ObservableProperty], | 10 @MirrorsUsed(metaTargets: const [Reflectable, ObservableProperty], |
| (...skipping 571 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 582 | 582 |
| 583 _updateSelf(Scope scope) { | 583 _updateSelf(Scope scope) { |
| 584 Identifier identifier = left; | 584 Identifier identifier = left; |
| 585 var iterable = right._value; | 585 var iterable = right._value; |
| 586 | 586 |
| 587 if (iterable is! Iterable && iterable != null) { | 587 if (iterable is! Iterable && iterable != null) { |
| 588 throw new EvalException("right side of 'in' is not an iterator"); | 588 throw new EvalException("right side of 'in' is not an iterator"); |
| 589 } | 589 } |
| 590 | 590 |
| 591 if (iterable is ObservableList) { | 591 if (iterable is ObservableList) { |
| 592 _subscription = (iterable as ObservableList).changes.listen( | 592 _subscription = iterable.listChanges.listen((_) => _invalidate(scope)); |
| 593 (List<ChangeRecord> changes) { | |
| 594 if (changes.any((c) => c is ListChangeRecord)) { | |
| 595 _invalidate(scope); | |
| 596 } | |
| 597 }); | |
| 598 } | 593 } |
| 599 | 594 |
| 600 // TODO: make Comprehension observable and update it | 595 // TODO: make Comprehension observable and update it |
| 601 _value = new Comprehension(identifier.value, iterable); | 596 _value = new Comprehension(identifier.value, iterable); |
| 602 } | 597 } |
| 603 | 598 |
| 604 accept(Visitor v) => v.visitInExpression(this); | 599 accept(Visitor v) => v.visitInExpression(this); |
| 605 } | 600 } |
| 606 | 601 |
| 607 _toBool(v) => (v == null) ? false : v; | 602 _toBool(v) => (v == null) ? false : v; |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 645 * This does not work for calls that need to pass more than one argument. | 640 * This does not work for calls that need to pass more than one argument. |
| 646 */ | 641 */ |
| 647 call(arg0) => mirror.invoke(symbol, [arg0], null).reflectee; | 642 call(arg0) => mirror.invoke(symbol, [arg0], null).reflectee; |
| 648 } | 643 } |
| 649 | 644 |
| 650 class EvalException implements Exception { | 645 class EvalException implements Exception { |
| 651 final String message; | 646 final String message; |
| 652 EvalException(this.message); | 647 EvalException(this.message); |
| 653 String toString() => "EvalException: $message"; | 648 String toString() => "EvalException: $message"; |
| 654 } | 649 } |
| OLD | NEW |