anchor.diff:    /// Return true if we have a message lookup for [localeName].
     bool localeExists(localeName) => availableMessages.containsKey(localeName);
   
  +  /// The last locale in which we looked up messages.
  +  ///
  +  ///  If this locale matches the new one then we can skip looking up the
  +  ///  messages and assume they will be the same as last time.
  +  String _lastLocale;
  +
  +  /// Caches the last messages that we found
  +  MessageLookupByLibrary _lastLookup;
  +
     /// Look up the message with the given [name] and [locale] and return
     /// the translated version with the values in [args] interpolated.
     /// If nothing is found, return [message_str]. The [desc] and [examples]
     /// parameters are ignored
  -  String lookupMessage(String message_str, String locale,
  -      String name, List args) {
  -    var verifiedLocale = findLocale(locale);
  -    var messages = availableMessages[verifiedLocale];
  +  String lookupMessage(
  +      String message_str, String locale, String name, List args) {
  +    // If passed null, use the default.
  +    var knownLocale = locale ?? Intl.getCurrentLocale();
  +    var messages = (knownLocale == _lastLocale)
  +        ? _lastLookup
  +        : _lookupMessageCatalog(knownLocale);
  +    // If we didn't find any messages for this locale, use the original string.
       if (messages == null) return message_str;
  -    return messages.
  -        lookupMessage(message_str, locale, name, args);
  +    return messages.lookupMessage(message_str, locale, name, args);
     }
   
  -  /// Given an initial locale or null, returns the locale that will be used
  -  /// for messages.
  -  String findLocale(String locale) {
  -    var actualLocale = locale ?? Intl.getCurrentLocale();
  -    // For this usage, if the locale doesn't exist for messages, just return
  -    // it and we'll fall back to the original version.
  -    var verifiedLocale = Intl.verifiedLocale(actualLocale, localeExists,
  +  /// Find the right message lookup for [locale].
  +  MessageLookupByLibrary _lookupMessageCatalog(String locale) {
  +    var verifiedLocale = Intl.verifiedLocale(locale, localeExists,
           onFailure: (locale) => locale);
  -    return verifiedLocale;
  +    _lastLocale = locale;
  +    _lastLookup = availableMessages[verifiedLocale];
  +    return _lastLookup;
     }
   
     /// If we do not already have a locale for [localeName] then
  
positive.code:     if (newLocale != null) {
        availableMessages[localeName] = newLocale;
        availableMessages[canonical] = newLocale;
      }
    }
  }
  
negative.code:   /// Ultimately, the information about the enclosing function and its arguments
    /// will be extracted automatically but for the time being it must be passed
    /// explicitly in the [name] and [args] arguments.
    String lookupMessage(
        String message_str, String locale, String name, List args) {
      if (name == null) return message_str;
      var function = this[name];
      return function == null ? message_str : Function.apply(function, args);
  