anchor.diff:    /// of the class of the current route. (In practice, this is usually
     /// "dynamic".)
     void pop([dynamic result]) {
  +    assert(!_debugLocked);
  +    assert(() { _debugLocked = true; return true; });
       setState(() {
         // We use setState to guarantee that we'll rebuild, since the routes can't
         // do that for themselves, even if they have changed their own state (e.g.
         // ModalScope.isCurrent).
         assert(_history.length > 1);
         Route route = _history.removeLast();
  +      assert(route._navigator == this);
         route.didPop(result);
         int index = _history.length-1;
         while (index >= 0 && _history[index].didPopNext(route))
           index -= 1;
         config.observer?.didPop(route, index >= 0 ? _history[index] : null);
  +      route._navigator = null;
       });
  +    assert(() { _debugLocked = false; return true; });
     }
   
     Widget build(BuildContext context) {
  +    assert(!_debugLocked);
       assert(_history.isNotEmpty);
       return new Overlay(
         key: _overlayKey,
  
positive.code:   }
  
    void push(Route route, { Set<Key> mostValuableKeys }) {
      setState(() {
        int index = _history.length-1;
        while (index >= 0 && _history[index].willPushNext(route))
          index -= 1;
        route.didPush(overlay, _currentOverlay);
        config.observer?.didPush(route, index >= 0 ? _history[index] : null);
        _history.add(route);
      });
    }
  
    /// Pops the given route, if it's the current route. If it's not the current
  
negative.code:   /// 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; });
      }
    }
  
  