whole_func_string: function initializeDateTimeFormat(dateFormat, locales, options) {
  
    if (%IsInitializedIntlObject(dateFormat)) {
      throw MakeTypeError(kReinitializeIntl, "DateTimeFormat");
    }
  
    if (IS_UNDEFINED(options)) {
      options = {};
    }
  
    var locale = resolveLocale('dateformat', locales, options);
  
    options = toDateTimeOptions(options, 'any', 'date');
  
    var getOption = getGetOption(options, 'dateformat');
  
    // We implement only best fit algorithm, but still need to check
    // if the formatMatcher values are in range.
    var matcher = getOption('formatMatcher', 'string',
                            ['basic', 'best fit'], 'best fit');
  
    // Build LDML string for the skeleton that we pass to the formatter.
    var ldmlString = toLDMLString(options);
  
    // Filter out supported extension keys so we know what to put in resolved
    // section later on.
    // We need to pass calendar and number system to the method.
    var tz = canonicalizeTimeZoneID(options.timeZone);
  
    // ICU prefers options to be passed using -u- extension key/values, so
    // we need to build that.
    var internalOptions = {};
    var extensionMap = parseExtension(locale.extension);
  
    /**
     * Map of Unicode extensions to option properties, and their values and types,
     * for a date/time format.
     */
    var DATETIME_FORMAT_KEY_MAP = {
      'ca': {'property': UNDEFINED, 'type': 'string'},
      'nu': {'property': UNDEFINED, 'type': 'string'}
    };
  
    var extension = setOptions(options, extensionMap, DATETIME_FORMAT_KEY_MAP,
                               getOption, internalOptions);
  
    var requestedLocale = locale.locale + extension;
    var resolved = %object_define_properties({}, {
      calendar: {writable: true},
      day: {writable: true},
      era: {writable: true},
      hour12: {writable: true},
      hour: {writable: true},
      locale: {writable: true},
      minute: {writable: true},
      month: {writable: true},
      numberingSystem: {writable: true},
      [patternSymbol]: {writable: true},
      requestedLocale: {value: requestedLocale, writable: true},
      second: {writable: true},
      timeZone: {writable: true},
      timeZoneName: {writable: true},
      tz: {value: tz, writable: true},
      weekday: {writable: true},
      year: {writable: true}
    });
  
    var formatter = %CreateDateTimeFormat(
      requestedLocale, {skeleton: ldmlString, timeZone: tz}, resolved);
  
    if (resolved.timeZone === "Etc/Unknown") {
      throw MakeRangeError(kUnsupportedTimeZone, tz);
    }
  
    %MarkAsInitializedIntlObjectOfType(dateFormat, 'dateformat', formatter);
    dateFormat[resolvedSymbol] = resolved;
    if (FLAG_intl_extra) {
      %object_define_property(resolved, 'pattern', patternAccessor);
      %object_define_property(dateFormat, 'resolved', resolvedAccessor);
    }
  
    return dateFormat;
  }
func_code_string: function initializeDateTimeFormat(dateFormat, locales, options) {
  
    if (%IsInitializedIntlObject(dateFormat)) {
      throw MakeTypeError(kReinitializeIntl, "DateTimeFormat");
    }
  
    if (IS_UNDEFINED(options)) {
      options = {};
    }
  
    var locale = resolveLocale('dateformat', locales, options);
  
    options = toDateTimeOptions(options, 'any', 'date');
  
    var getOption = getGetOption(options, 'dateformat');
  
    // We implement only best fit algorithm, but still need to check
    // if the formatMatcher values are in range.
    var matcher = getOption('formatMatcher', 'string',
                            ['basic', 'best fit'], 'best fit');
  
    // Build LDML string for the skeleton that we pass to the formatter.
    var ldmlString = toLDMLString(options);
  
    // Filter out supported extension keys so we know what to put in resolved
    // section later on.
    // We need to pass calendar and number system to the method.
    var tz = canonicalizeTimeZoneID(options.timeZone);
  
    // ICU prefers options to be passed using -u- extension key/values, so
    // we need to build that.
    var internalOptions = {};
    var extensionMap = parseExtension(locale.extension);
  
    /**
     * Map of Unicode extensions to option properties, and their values and types,
     * for a date/time format.
     */
    var DATETIME_FORMAT_KEY_MAP = {
      'ca': {'property': UNDEFINED, 'type': 'string'},
      'nu': {'property': UNDEFINED, 'type': 'string'}
    };
  
    var extension = setOptions(options, extensionMap, DATETIME_FORMAT_KEY_MAP,
                               getOption, internalOptions);
  
    var requestedLocale = locale.locale + extension;
    var resolved = %object_define_properties({}, {
      calendar: {writable: true},
      day: {writable: true},
      era: {writable: true},
      hour12: {writable: true},
      hour: {writable: true},
      locale: {writable: true},
      minute: {writable: true},
      month: {writable: true},
      numberingSystem: {writable: true},
      [patternSymbol]: {writable: true},
      requestedLocale: {value: requestedLocale, writable: true},
      second: {writable: true},
      timeZone: {writable: true},
      timeZoneName: {writable: true},
      tz: {value: tz, writable: true},
      weekday: {writable: true},
      year: {writable: true}
    });
  
    var formatter = %CreateDateTimeFormat(
      requestedLocale, {skeleton: ldmlString, timeZone: tz}, resolved);
  
    if (resolved.timeZone === "Etc/Unknown") {
      throw MakeRangeError(kUnsupportedTimeZone, tz);
    }
  
    %MarkAsInitializedIntlObjectOfType(dateFormat, 'dateformat', formatter);
    dateFormat[resolvedSymbol] = resolved;
    if (FLAG_intl_extra) {
      %object_define_property(resolved, 'pattern', patternAccessor);
      %object_define_property(dateFormat, 'resolved', resolvedAccessor);
    }
  
    return dateFormat;
  }
func_documentation_string: Initializes the given object so it's a valid DateTimeFormat instance.
  Useful for subclassing.