# HG changeset patch # User Bram Moolenaar # Date 1371049944 -7200 # Node ID 84a8d1ba81c393dcc3a45eb3b20fb6ac5f18df7b # Parent 0195e997d5a501bf8e114efa2060ff0211a59b6c updated for version 7.3.1175 Problem: Using isalpha() and isalnum() can be slow. Solution: Use range checks. (Mike Williams) diff --git a/src/ex_docmd.c b/src/ex_docmd.c --- a/src/ex_docmd.c +++ b/src/ex_docmd.c @@ -3120,7 +3120,7 @@ modifier_len(cmd) for (j = 0; p[j] != NUL; ++j) if (p[j] != cmdmods[i].name[j]) break; - if (!isalpha(p[j]) && j >= cmdmods[i].minlen + if (!ASCII_ISALPHA(p[j]) && j >= cmdmods[i].minlen && (p == cmd || cmdmods[i].has_count)) return j + (int)(p - cmd); } diff --git a/src/macros.h b/src/macros.h --- a/src/macros.h +++ b/src/macros.h @@ -99,6 +99,11 @@ # define MB_TOUPPER(c) TOUPPER_LOC(c) #endif +/* Use our own isdigit() replacement, because on MS-Windows isdigit() returns + * non-zero for superscript 1. Also avoids that isdigit() crashes for numbers + * below 0 and above 255. */ +#define VIM_ISDIGIT(c) ((unsigned)(c) - '0' < 10) + /* Like isalpha() but reject non-ASCII characters. Can't be used with a * special key (negative value). */ #ifdef EBCDIC @@ -107,17 +112,12 @@ # define ASCII_ISLOWER(c) islower(c) # define ASCII_ISUPPER(c) isupper(c) #else -# define ASCII_ISALPHA(c) ((c) < 0x7f && isalpha(c)) -# define ASCII_ISALNUM(c) ((c) < 0x7f && isalnum(c)) # define ASCII_ISLOWER(c) ((unsigned)(c) - 'a' < 26) # define ASCII_ISUPPER(c) ((unsigned)(c) - 'A' < 26) +# define ASCII_ISALPHA(c) (ASCII_ISUPPER(c) || ASCII_ISLOWER(c)) +# define ASCII_ISALNUM(c) (ASCII_ISALPHA(c) || VIM_ISDIGIT(c)) #endif -/* Use our own isdigit() replacement, because on MS-Windows isdigit() returns - * non-zero for superscript 1. Also avoids that isdigit() crashes for numbers - * below 0 and above 255. */ -#define VIM_ISDIGIT(c) ((unsigned)(c) - '0' < 10) - /* macro version of chartab(). * Only works with values 0-255! * Doesn't work for UTF-8 mode with chars >= 0x80. */ diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -729,6 +729,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1175, +/**/ 1174, /**/ 1173,