whole_func_string: function setOptions(inOptions, extensionMap, keyValues, getOption, outOptions) {
    var extension = '';
  
    var updateExtension = function updateExtension(key, value) {
      return '-' + key + '-' + TO_STRING(value);
    }
  
    var updateProperty = function updateProperty(property, type, value) {
      if (type === 'boolean' && (typeof value === 'string')) {
        value = (value === 'true') ? true : false;
      }
  
      if (!IS_UNDEFINED(property)) {
        defineWEProperty(outOptions, property, value);
      }
    }
  
    for (var key in keyValues) {
      if (HAS_OWN_PROPERTY(keyValues, key)) {
        var value = UNDEFINED;
        var map = keyValues[key];
        if (!IS_UNDEFINED(map.property)) {
          // This may return true if user specifies numeric: 'false', since
          // Boolean('nonempty') === true.
          value = getOption(map.property, map.type, map.values);
        }
        if (!IS_UNDEFINED(value)) {
          updateProperty(map.property, map.type, value);
          extension += updateExtension(key, value);
          continue;
        }
        // User options didn't have it, check Unicode extension.
        // Here we want to convert strings 'true', 'false' into proper Boolean
        // values (not a user error).
        if (HAS_OWN_PROPERTY(extensionMap, key)) {
          value = extensionMap[key];
          if (!IS_UNDEFINED(value)) {
            updateProperty(map.property, map.type, value);
            extension += updateExtension(key, value);
          } else if (map.type === 'boolean') {
            // Boolean keys are allowed not to have values in Unicode extension.
            // Those default to true.
            updateProperty(map.property, map.type, true);
            extension += updateExtension(key, true);
          }
        }
      }
    }
  
    return extension === ''? '' : '-u' + extension;
  }
func_code_string: function setOptions(inOptions, extensionMap, keyValues, getOption, outOptions) {
    var extension = '';
  
    var updateExtension = function updateExtension(key, value) {
      return '-' + key + '-' + TO_STRING(value);
    }
  
    var updateProperty = function updateProperty(property, type, value) {
      if (type === 'boolean' && (typeof value === 'string')) {
        value = (value === 'true') ? true : false;
      }
  
      if (!IS_UNDEFINED(property)) {
        defineWEProperty(outOptions, property, value);
      }
    }
  
    for (var key in keyValues) {
      if (HAS_OWN_PROPERTY(keyValues, key)) {
        var value = UNDEFINED;
        var map = keyValues[key];
        if (!IS_UNDEFINED(map.property)) {
          // This may return true if user specifies numeric: 'false', since
          // Boolean('nonempty') === true.
          value = getOption(map.property, map.type, map.values);
        }
        if (!IS_UNDEFINED(value)) {
          updateProperty(map.property, map.type, value);
          extension += updateExtension(key, value);
          continue;
        }
        // User options didn't have it, check Unicode extension.
        // Here we want to convert strings 'true', 'false' into proper Boolean
        // values (not a user error).
        if (HAS_OWN_PROPERTY(extensionMap, key)) {
          value = extensionMap[key];
          if (!IS_UNDEFINED(value)) {
            updateProperty(map.property, map.type, value);
            extension += updateExtension(key, value);
          } else if (map.type === 'boolean') {
            // Boolean keys are allowed not to have values in Unicode extension.
            // Those default to true.
            updateProperty(map.property, map.type, true);
            extension += updateExtension(key, true);
          }
        }
      }
    }
  
    return extension === ''? '' : '-u' + extension;
  }
func_documentation_string: Populates internalOptions object with boolean key-value pairs
  from extensionMap and options.
  Returns filtered extension (number and date format constructors use
  Unicode extensions for passing parameters to ICU).
  It's used for extension-option pairs only, e.g. kn-normalization, but not
  for 'sensitivity' since it doesn't have extension equivalent.
  Extensions like nu and ca don't have options equivalent, so we place
  undefined in the map.property to denote that.