Skip to content

Commit

Permalink
Merge pull request #4047 from masatake/revise---list-languages-option
Browse files Browse the repository at this point in the history
main: make the implementation of --list-languages=_CATEGORY efficient
  • Loading branch information
masatake authored Aug 8, 2024
2 parents 5f06997 + daf78bd commit 030eca1
Showing 1 changed file with 9 additions and 9 deletions.
18 changes: 9 additions & 9 deletions main/parse.c
Original file line number Diff line number Diff line change
Expand Up @@ -105,8 +105,8 @@ typedef struct sParserObject {
is set here if this parser is OLDLANG.
LANG_IGNORE is set if no being pretended. */

enum parserCategory category; /* Used when --languages=_CATEGORY is specified. */

parserDefinitionFunc *parserDefFunc; /* Used when --languages=_CATEGORY
is specified. */
} parserObject;

/*
Expand Down Expand Up @@ -1974,7 +1974,7 @@ static void linkDependenciesAtInitializeParsing (parserDefinition *const parser)

/* Used in both builtin and optlib parsers. */
static void initializeParsingCommon (parserDefinition *def, bool is_builtin,
enum parserCategory category)
parserDefinitionFunc* parserDefFunc)
{
parserObject *parser;

Expand All @@ -1986,7 +1986,7 @@ static void initializeParsingCommon (parserDefinition *def, bool is_builtin,
def->id = LanguageCount++;
parser = LanguageTable + def->id;
parser->def = def;
parser->category = category;
parser->parserDefFunc = parserDefFunc;

hashTablePutItem (LanguageHTable, def->name, def);

Expand Down Expand Up @@ -2061,7 +2061,6 @@ extern void initializeParsing (void)
verbose ("Installing parsers: ");
for (i = 0 ; i < builtInCount ; ++i)
{
enum parserCategory category = getCategoryForParserFunc(BuiltInParsers [i]);
parserDefinition* const def = (*BuiltInParsers [i]) ();
if (def != NULL)
{
Expand All @@ -2076,7 +2075,7 @@ extern void initializeParsing (void)
/* parser definition must define one and only one parsing routine */
Assert ((!!def->parser) + (!!def->parser2) == 1);

initializeParsingCommon (def, true, category);
initializeParsingCommon (def, true, BuiltInParsers [i]);
}
}
verbose ("\n");
Expand Down Expand Up @@ -2450,7 +2449,7 @@ extern void processLanguageDefineOption (
def->versionCurrent = data.versionCurrent;
def->versionAge = data.versionAge;

initializeParsingCommon (def, false, PARSER_CATEGORY_NONE);
initializeParsingCommon (def, false, NULL);
linkDependenciesAtInitializeParsing (def);

LanguageTable [def->id].currentPatterns = stringListNew ();
Expand Down Expand Up @@ -3911,12 +3910,13 @@ extern void printLanguageList (enum parserCategory category)
ltable = xMalloc (LanguageCount, parserDefinition*);
for (i = 0, n = 0 ; i < LanguageCount ; ++i)
{
parserObject *pobj = LanguageTable + i;
if (category != PARSER_CATEGORY_NONE)
{
if (LanguageTable[i].category != category)
if (getCategoryForParserFunc(pobj->parserDefFunc) != category)
continue;
}
ltable[n] = LanguageTable[i].def;
ltable[n] = pobj->def;
++n;
}
qsort (ltable, n, sizeof (parserDefinition*), compareParsersByName);
Expand Down

0 comments on commit 030eca1

Please sign in to comment.