mirror of
https://git.savannah.gnu.org/git/gperf.git
synced 2025-12-02 13:09:22 +00:00
Small optimization.
This commit is contained in:
@@ -1,5 +1,9 @@
|
|||||||
2000-08-19 Bruno Haible <bruno@linuix.math.u-bordeaux.fr>
|
2000-08-19 Bruno Haible <bruno@linuix.math.u-bordeaux.fr>
|
||||||
|
|
||||||
|
* src/key-list.cc (Key_List::output_lookup_function_body): Avoid
|
||||||
|
emitting the loop for dealing with duplicates if
|
||||||
|
total_duplicates == 0.
|
||||||
|
|
||||||
* src/key-list.cc (Key_List::read_keys): Don't accept an empty key.
|
* src/key-list.cc (Key_List::read_keys): Don't accept an empty key.
|
||||||
|
|
||||||
* src/Makefile.in (install, installdirs, uninstall): Respect
|
* src/Makefile.in (install, installdirs, uninstall): Respect
|
||||||
|
|||||||
106
src/key-list.cc
106
src/key-list.cc
@@ -1675,60 +1675,64 @@ Key_List::output_lookup_function_body (const Output_Compare& comparison)
|
|||||||
indent -= 4;
|
indent -= 4;
|
||||||
printf ("%*s }\n", indent, "");
|
printf ("%*s }\n", indent, "");
|
||||||
}
|
}
|
||||||
printf ("%*s else if (index < -TOTAL_KEYWORDS)\n"
|
if (total_duplicates > 0)
|
||||||
"%*s {\n"
|
|
||||||
"%*s register int offset = - 1 - TOTAL_KEYWORDS - index;\n",
|
|
||||||
indent, "", indent, "", indent, "");
|
|
||||||
if (option[LENTABLE])
|
|
||||||
printf ("%*s register %s%s *lengthptr = &lengthtable[TOTAL_KEYWORDS + lookup[offset]];\n",
|
|
||||||
indent, "", const_always, smallest_integral_type (max_key_len));
|
|
||||||
printf ("%*s register ",
|
|
||||||
indent, "");
|
|
||||||
output_const_type (const_readonly_array, struct_tag);
|
|
||||||
printf ("*wordptr = &%s[TOTAL_KEYWORDS + lookup[offset]];\n",
|
|
||||||
option.get_wordlist_name ());
|
|
||||||
printf ("%*s register ",
|
|
||||||
indent, "");
|
|
||||||
output_const_type (const_readonly_array, struct_tag);
|
|
||||||
printf ("*wordendptr = wordptr + -lookup[offset + 1];\n\n");
|
|
||||||
printf ("%*s while (wordptr < wordendptr)\n"
|
|
||||||
"%*s {\n",
|
|
||||||
indent, "", indent, "");
|
|
||||||
if (option[LENTABLE])
|
|
||||||
{
|
{
|
||||||
printf ("%*s if (len == *lengthptr)\n"
|
printf ("%*s else if (index < -TOTAL_KEYWORDS)\n"
|
||||||
"%*s {\n",
|
"%*s {\n"
|
||||||
indent, "", indent, "");
|
"%*s register int offset = - 1 - TOTAL_KEYWORDS - index;\n",
|
||||||
indent += 4;
|
indent, "", indent, "", indent, "");
|
||||||
}
|
if (option[LENTABLE])
|
||||||
printf ("%*s register %schar *s = ",
|
printf ("%*s register %s%s *lengthptr = &lengthtable[TOTAL_KEYWORDS + lookup[offset]];\n",
|
||||||
indent, "", const_always);
|
indent, "", const_always, smallest_integral_type (max_key_len));
|
||||||
if (option[TYPE])
|
printf ("%*s register ",
|
||||||
printf ("wordptr->%s", option.get_key_name ());
|
|
||||||
else
|
|
||||||
printf ("*wordptr");
|
|
||||||
printf (";\n\n"
|
|
||||||
"%*s if (",
|
|
||||||
indent, "");
|
|
||||||
comparison.output_comparison (Output_Expr1 ("str"), Output_Expr1 ("s"));
|
|
||||||
printf (")\n"
|
|
||||||
"%*s return %s;\n",
|
|
||||||
indent, "",
|
|
||||||
option[TYPE] ? "wordptr" : "s");
|
|
||||||
if (option[LENTABLE])
|
|
||||||
{
|
|
||||||
indent -= 4;
|
|
||||||
printf ("%*s }\n",
|
|
||||||
indent, "");
|
indent, "");
|
||||||
|
output_const_type (const_readonly_array, struct_tag);
|
||||||
|
printf ("*wordptr = &%s[TOTAL_KEYWORDS + lookup[offset]];\n",
|
||||||
|
option.get_wordlist_name ());
|
||||||
|
printf ("%*s register ",
|
||||||
|
indent, "");
|
||||||
|
output_const_type (const_readonly_array, struct_tag);
|
||||||
|
printf ("*wordendptr = wordptr + -lookup[offset + 1];\n\n");
|
||||||
|
printf ("%*s while (wordptr < wordendptr)\n"
|
||||||
|
"%*s {\n",
|
||||||
|
indent, "", indent, "");
|
||||||
|
if (option[LENTABLE])
|
||||||
|
{
|
||||||
|
printf ("%*s if (len == *lengthptr)\n"
|
||||||
|
"%*s {\n",
|
||||||
|
indent, "", indent, "");
|
||||||
|
indent += 4;
|
||||||
|
}
|
||||||
|
printf ("%*s register %schar *s = ",
|
||||||
|
indent, "", const_always);
|
||||||
|
if (option[TYPE])
|
||||||
|
printf ("wordptr->%s", option.get_key_name ());
|
||||||
|
else
|
||||||
|
printf ("*wordptr");
|
||||||
|
printf (";\n\n"
|
||||||
|
"%*s if (",
|
||||||
|
indent, "");
|
||||||
|
comparison.output_comparison (Output_Expr1 ("str"), Output_Expr1 ("s"));
|
||||||
|
printf (")\n"
|
||||||
|
"%*s return %s;\n",
|
||||||
|
indent, "",
|
||||||
|
option[TYPE] ? "wordptr" : "s");
|
||||||
|
if (option[LENTABLE])
|
||||||
|
{
|
||||||
|
indent -= 4;
|
||||||
|
printf ("%*s }\n",
|
||||||
|
indent, "");
|
||||||
|
}
|
||||||
|
if (option[LENTABLE])
|
||||||
|
printf ("%*s lengthptr++;\n",
|
||||||
|
indent, "");
|
||||||
|
printf ("%*s wordptr++;\n"
|
||||||
|
"%*s }\n"
|
||||||
|
"%*s }\n",
|
||||||
|
indent, "", indent, "", indent, "");
|
||||||
}
|
}
|
||||||
if (option[LENTABLE])
|
printf ("%*s}\n",
|
||||||
printf ("%*s lengthptr++;\n",
|
indent, "");
|
||||||
indent, "");
|
|
||||||
printf ("%*s wordptr++;\n"
|
|
||||||
"%*s }\n"
|
|
||||||
"%*s }\n"
|
|
||||||
"%*s}\n",
|
|
||||||
indent, "", indent, "", indent, "", indent, "");
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user