anchor.diff:          }
         }
         if (matchedRoute != null) {
  -        treePath.add(matchedRoute);
           var match = _getMatch(matchedRoute, path);
  +        treePath.add(new _Match(matchedRoute, match));
           baseRoute = matchedRoute;
           path = match.tail;
         }
  
positive.code:     return res;
    }
  }
  
negative.code:     });
    }
  
    List<Future<bool>> _preEnter(String tail, Iterable<_Match> treePath) {
      List<Future<bool>> preEnterFutures = <Future<bool>>[];
      treePath.forEach((_Match matchedRoute) {
        tail = matchedRoute.urlMatch.tail;
        var preEnterEvent = new RoutePreEnterEvent(tail, matchedRoute.urlMatch.parameters, matchedRoute.route);
        matchedRoute.route._onPreEnterController.add(preEnterEvent);
        preEnterFutures.addAll(preEnterEvent._allowEnterFutures);
      });
      return preEnterFutures;
    }
  
    Future<bool> _processNewRoute(Route startingFrom, Iterable<_Match> treePath, String path) {
      return _leaveOldRoutes(startingFrom, treePath).then((bool allowed) {
        if (allowed) {
          var base = startingFrom;
          var tail = path;
          treePath.forEach((_Match matchedRoute) {
            tail = matchedRoute.urlMatch.tail;
            var event = new RouteEnterEvent(matchedRoute.urlMatch.match,
                matchedRoute.urlMatch.parameters, matchedRoute.route);
            _unsetAllCurrentRoutes(base);
            base._currentRoute = matchedRoute.route;
            base._currentRoute._lastEvent = event;
            matchedRoute.route._onEnterController.add(event);
            base = matchedRoute.route;
          });
          return true;
        }
  