whole_func_string: function supportedLocalesOf(service, locales, options) {
    if (IS_NULL(InternalRegExpMatch(GetServiceRE(), service))) {
      throw MakeError(kWrongServiceType, service);
    }
  
    // Provide defaults if matcher was not specified.
    if (IS_UNDEFINED(options)) {
      options = {};
    } else {
      options = TO_OBJECT(options);
    }
  
    var matcher = options.localeMatcher;
    if (!IS_UNDEFINED(matcher)) {
      matcher = TO_STRING(matcher);
      if (matcher !== 'lookup' && matcher !== 'best fit') {
        throw MakeRangeError(kLocaleMatcher, matcher);
      }
    } else {
      matcher = 'best fit';
    }
  
    var requestedLocales = initializeLocaleList(locales);
  
    // Cache these, they don't ever change per service.
    if (IS_UNDEFINED(AVAILABLE_LOCALES[service])) {
      AVAILABLE_LOCALES[service] = getAvailableLocalesOf(service);
    }
  
    // Use either best fit or lookup algorithm to match locales.
    if (matcher === 'best fit') {
      return initializeLocaleList(bestFitSupportedLocalesOf(
          requestedLocales, AVAILABLE_LOCALES[service]));
    }
  
    return initializeLocaleList(lookupSupportedLocalesOf(
        requestedLocales, AVAILABLE_LOCALES[service]));
  }
func_code_string: function supportedLocalesOf(service, locales, options) {
    if (IS_NULL(InternalRegExpMatch(GetServiceRE(), service))) {
      throw MakeError(kWrongServiceType, service);
    }
  
    // Provide defaults if matcher was not specified.
    if (IS_UNDEFINED(options)) {
      options = {};
    } else {
      options = TO_OBJECT(options);
    }
  
    var matcher = options.localeMatcher;
    if (!IS_UNDEFINED(matcher)) {
      matcher = TO_STRING(matcher);
      if (matcher !== 'lookup' && matcher !== 'best fit') {
        throw MakeRangeError(kLocaleMatcher, matcher);
      }
    } else {
      matcher = 'best fit';
    }
  
    var requestedLocales = initializeLocaleList(locales);
  
    // Cache these, they don't ever change per service.
    if (IS_UNDEFINED(AVAILABLE_LOCALES[service])) {
      AVAILABLE_LOCALES[service] = getAvailableLocalesOf(service);
    }
  
    // Use either best fit or lookup algorithm to match locales.
    if (matcher === 'best fit') {
      return initializeLocaleList(bestFitSupportedLocalesOf(
          requestedLocales, AVAILABLE_LOCALES[service]));
    }
  
    return initializeLocaleList(lookupSupportedLocalesOf(
        requestedLocales, AVAILABLE_LOCALES[service]));
  }
func_documentation_string: Returns an intersection of locales and service supported locales.
  Parameter locales is treated as a priority list.