function getLocaleSupportInfo(Constructor) {
    var constructorName = getConstructorName(Constructor);
    if (localeSupportInfo[constructorName] !== undefined) {
        return localeSupportInfo[constructorName];
    }

    var allTags = [];
    var i, j, k;
    var language, script, country;
    for (i = 0; i < languages.length; i++) {
        language = languages[i];
        allTags.push(language);
        for (j = 0; j < scripts.length; j++) {
            script = scripts[j];
            allTags.push(language + "-" + script);
            for (k = 0; k < countries.length; k++) {
                country = countries[k];
                allTags.push(language + "-" + script + "-" + country);
            }
        }
        for (k = 0; k < countries.length; k++) {
            country = countries[k];
            allTags.push(language + "-" + country);
        }
    }
    
    var supported = [];
    var byFallback = [];
    var unsupported = [];
    for (i = 0; i < allTags.length; i++) {
        var request = allTags[i];
        var result = new Constructor([request], {localeMatcher: "lookup"}).resolvedOptions().locale;
         if (request === result) {
            supported.push(request);
        } else if (request.indexOf(result) === 0) {
            byFallback.push(request);
        } else {
            unsupported.push(request);
        }
    }
    
    localeSupportInfo[constructorName] = {
        supported: supported,
        byFallback: byFallback,
        unsupported: unsupported
    };
    
    return localeSupportInfo[constructorName];
}
Gets locale support info for the given constructor object, which must be one
of Intl.Collator, Intl.NumberFormat, Intl.DateTimeFormat.
@param {object} Constructor the constructor for which to get locale support info
@return {object} locale support info with the following properties:
    supported: array of fully supported language tags
    byFallback: array of language tags that are supported through fallbacks
    unsupported: array of unsupported language tags