anchor.diff:    /// The type of the result argument, if provided, must match the type argument
     /// of the class of the given route. (In practice, this is usually "dynamic".)
     void remove(Route route, [dynamic result]) {
  +    assert(!_debugLocked);
       assert(_history.contains(route));
       assert(route.overlayEntries.isEmpty);
       if (_history.last == route) {
         pop(result);
       } else {
  +      assert(() { _debugLocked = true; return true; });
  +      assert(route._navigator == this);
         setState(() {
           _history.remove(route);
           route.didPop(result);
  +        route._navigator = null;
         });
  +      assert(() { _debugLocked = false; return true; });
       }
     }
   
  
positive.code:     return null;
    }
  
    void pushNamed(String name, { Set<Key> mostValuableKeys }) {
      assert(name != null);
      NamedRouteSettings settings = new NamedRouteSettings(
        name: name,
  
negative.code: typedef Route RouteFactory(NamedRouteSettings settings);
  
  class NavigatorObserver {
    /// The navigator that the observer is observing, if any.
    NavigatorState get navigator => _navigator;
    NavigatorState _navigator;
    void didPush(Route route, Route previousRoute) { }
    void didPop(Route route, Route previousRoute) { }
  }
  