| Index: pkg/observe/lib/src/path_observer.dart
 | 
| ===================================================================
 | 
| --- pkg/observe/lib/src/path_observer.dart	(revision 37373)
 | 
| +++ pkg/observe/lib/src/path_observer.dart	(working copy)
 | 
| @@ -41,6 +41,7 @@
 | 
|    /// Sets the value at this path.
 | 
|    void set value(Object newValue) {
 | 
|      if (_path != null) _path.setValueFrom(_object, newValue);
 | 
| +    _discardChanges();
 | 
|    }
 | 
|  
 | 
|    int get _reportArgumentCount => 2;
 | 
| @@ -431,7 +432,7 @@
 | 
|        throw new StateError('Cannot add observers once started.');
 | 
|      }
 | 
|  
 | 
| -    observer.open(_deliver);
 | 
| +    observer.open((_) => deliver());
 | 
|      _observed..add(_observerSentinel)..add(observer);
 | 
|    }
 | 
|  
 | 
| @@ -532,10 +533,7 @@
 | 
|      return _value;
 | 
|    }
 | 
|  
 | 
| -  get value {
 | 
| -    _check(skipChanges: true);
 | 
| -    return _value;
 | 
| -  }
 | 
| +  get value => _discardChanges();
 | 
|  
 | 
|    void close() {
 | 
|      if (!_isOpen) return;
 | 
| @@ -545,10 +543,13 @@
 | 
|      _notifyCallback = null;
 | 
|    }
 | 
|  
 | 
| -  void _deliver(_) {
 | 
| -    if (_isOpen) _dirtyCheck();
 | 
| +  _discardChanges() {
 | 
| +    _check(skipChanges: true);
 | 
| +    return _value;
 | 
|    }
 | 
|  
 | 
| +  bool deliver() => _isOpen ? _dirtyCheck() : false;
 | 
| +
 | 
|    bool _dirtyCheck() {
 | 
|      var cycles = 0;
 | 
|      while (cycles < _MAX_DIRTY_CHECK_CYCLES && _check()) {
 | 
| 
 |