mirror of
https://git.savannah.gnu.org/git/make.git
synced 2025-02-05 22:17:05 +00:00
Speedup parsing of functions.
Use the stopchar map to quickly jump over everything that is not an open/close brace, an open/close parenthesis or a comma. This saves 1% on QEMU's noop build (from 11.23s to 11.1s). * function.c (find_next_argument, handle_function): Check with STOP_SET before comparing against individual characters. * main.c (initialize_stopchar_map): Initialize MAP_VARSEP mappings in stopchar_map. * makeint.h (MAP_VARSEP): New.
This commit is contained in:
parent
9860296198
commit
b280989ab7
3 changed files with 12 additions and 2 deletions
|
@ -329,7 +329,10 @@ find_next_argument (char startparen, char endparen,
|
|||
int count = 0;
|
||||
|
||||
for (; ptr < end; ++ptr)
|
||||
if (*ptr == startparen)
|
||||
if (!STOP_SET (*ptr, MAP_VARSEP|MAP_COMMA))
|
||||
continue;
|
||||
|
||||
else if (*ptr == startparen)
|
||||
++count;
|
||||
|
||||
else if (*ptr == endparen)
|
||||
|
@ -2458,7 +2461,9 @@ handle_function (char **op, const char **stringp)
|
|||
count might be high, but it'll never be low. */
|
||||
|
||||
for (nargs=1, end=beg; *end != '\0'; ++end)
|
||||
if (*end == ',')
|
||||
if (!STOP_SET (*end, MAP_VARSEP|MAP_COMMA))
|
||||
continue;
|
||||
else if (*end == ',')
|
||||
++nargs;
|
||||
else if (*end == openparen)
|
||||
++count;
|
||||
|
|
4
main.c
4
main.c
|
@ -635,6 +635,10 @@ initialize_stopchar_map (void)
|
|||
stopchar_map[(int)'|'] = MAP_PIPE;
|
||||
stopchar_map[(int)'.'] = MAP_DOT | MAP_USERFUNC;
|
||||
stopchar_map[(int)','] = MAP_COMMA;
|
||||
stopchar_map[(int)'('] = MAP_VARSEP;
|
||||
stopchar_map[(int)'{'] = MAP_VARSEP;
|
||||
stopchar_map[(int)'}'] = MAP_VARSEP;
|
||||
stopchar_map[(int)')'] = MAP_VARSEP;
|
||||
stopchar_map[(int)'$'] = MAP_VARIABLE;
|
||||
|
||||
stopchar_map[(int)'-'] = MAP_USERFUNC;
|
||||
|
|
|
@ -397,6 +397,7 @@ extern int unixy_shell;
|
|||
#define MAP_SEMI 0x0010
|
||||
#define MAP_EQUALS 0x0020
|
||||
#define MAP_COLON 0x0040
|
||||
#define MAP_VARSEP 0x0080
|
||||
#define MAP_PIPE 0x0100
|
||||
#define MAP_DOT 0x0200
|
||||
#define MAP_COMMA 0x0400
|
||||
|
|
Loading…
Reference in a new issue