| To: vim_dev@googlegroups.com |
| Subject: Patch 7.3.1175 |
| Fcc: outbox |
| From: Bram Moolenaar <Bram@moolenaar.net> |
| Mime-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| |
| Patch 7.3.1175 |
| Problem: Using isalpha() and isalnum() can be slow. |
| Solution: Use range checks. (Mike Williams) |
| Files: src/ex_docmd.c, src/macros.h |
| |
| |
| |
| |
| |
| *** 3120,3126 **** |
| for (j = 0; p[j] != NUL; ++j) |
| if (p[j] != cmdmods[i].name[j]) |
| break; |
| ! if (!isalpha(p[j]) && j >= cmdmods[i].minlen |
| && (p == cmd || cmdmods[i].has_count)) |
| return j + (int)(p - cmd); |
| } |
| --- 3120,3126 ---- |
| for (j = 0; p[j] != NUL; ++j) |
| if (p[j] != cmdmods[i].name[j]) |
| break; |
| ! if (!ASCII_ISALPHA(p[j]) && j >= cmdmods[i].minlen |
| && (p == cmd || cmdmods[i].has_count)) |
| return j + (int)(p - cmd); |
| } |
| |
| |
| |
| *** 99,104 **** |
| --- 99,109 ---- |
| # 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,123 **** |
| # 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) |
| #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. */ |
| --- 112,123 ---- |
| # define ASCII_ISLOWER(c) islower(c) |
| # define ASCII_ISUPPER(c) isupper(c) |
| #else |
| # 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 |
| |
| /* macro version of chartab(). |
| * Only works with values 0-255! |
| * Doesn't work for UTF-8 mode with chars >= 0x80. */ |
| |
| |
| |
| *** 730,731 **** |
| --- 730,733 ---- |
| { /* Add new patch number below this line */ |
| + /**/ |
| + 1175, |
| /**/ |
| |
| -- |
| "Hit any key to continue" is a lie. |
| |
| /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ |
| /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ |
| \\\ an exciting new programming language -- http://www.Zimbu.org /// |
| \\\ help me help AIDS victims -- http://ICCF-Holland.org /// |