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:     return null;
    }
  
    void pushNamed(String name, { Set<Key> mostValuableKeys }) {
      assert(name != null);
      NamedRouteSettings settings = new NamedRouteSettings(
        name: name,
  
negative.code: import 'overlay.dart';
  
  abstract class Route<T> {
    /// The navigator that the route is in, if any.
    NavigatorState get navigator => _navigator;
    NavigatorState _navigator;
  
    List<OverlayEntry> get overlayEntries;
    void didPush(OverlayState overlay, OverlayEntry insertionPoint) { }
    void didPop(T result) { }
  