lua

A copy of the Lua development repository
Log | Files | Refs | README

commit b1e1c15ced1f02becf578efb12dbeea6a9f01eee
parent 3dbf30540892b4b9c86e0cb663069cd478a0c900
Author: Roberto Ierusalimschy <roberto@inf.puc-rio.br>
Date:   Thu, 26 Mar 2009 15:53:28 -0300

small bug: EOZ is a valid character to be tested

Diffstat:
Mlctype.c | 5+++--
Mlctype.h | 28++++++++++++++++++----------
2 files changed, 21 insertions(+), 12 deletions(-)

diff --git a/lctype.c b/lctype.c @@ -1,5 +1,5 @@ /* -** $Id: lctype.c,v 1.3 2009/03/10 17:42:33 roberto Exp roberto $ +** $Id: lctype.c,v 1.4 2009/03/11 13:27:32 roberto Exp roberto $ ** 'ctype' functions for Lua ** See Copyright Notice in lua.h */ @@ -8,7 +8,8 @@ #include "lctype.h" -const char luai_ctype_[UCHAR_MAX + 1] = { +const char luai_ctype_[UCHAR_MAX + 2] = { + 0x00, /* EOZ */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, diff --git a/lctype.h b/lctype.h @@ -1,5 +1,5 @@ /* -** $Id: lctype.h,v 1.3 2009/03/10 17:42:33 roberto Exp roberto $ +** $Id: lctype.h,v 1.4 2009/03/11 13:27:32 roberto Exp roberto $ ** 'ctype' functions for Lua ** See Copyright Notice in lua.h */ @@ -23,16 +23,24 @@ #define MASK(B) (1 << (B)) -/* 'lalpha' (Lua alphabetic) includes '_' */ -#define lislalpha(x) (luai_ctype_[x] & MASK(ALPHABIT)) -/* ditto */ -#define lislalnum(x) (luai_ctype_[x] & (MASK(ALPHABIT) | MASK(DIGITBIT))) -#define lisdigit(x) (luai_ctype_[x] & MASK(DIGITBIT)) -#define lisspace(x) (luai_ctype_[x] & MASK(SPACEBIT)) -#define lisprint(x) (luai_ctype_[x] & MASK(PRINTBIT)) -#define lisxdigit(x) (luai_ctype_[x] & MASK(XDIGITBIT)) +/* +** add 1 to char to allow index -1 (EOZ) +*/ +#define testprop(c,p) (luai_ctype_[(c)+1] & (p)) + +/* +** 'lalpha' (Lua alphabetic) and 'lalnum' (Lua alphanumeric) both include '_' +*/ +#define lislalpha(c) testprop(c, MASK(ALPHABIT)) +#define lislalnum(c) testprop(c, (MASK(ALPHABIT) | MASK(DIGITBIT))) +#define lisdigit(c) testprop(c, MASK(DIGITBIT)) +#define lisspace(c) testprop(c, MASK(SPACEBIT)) +#define lisprint(c) testprop(c, MASK(PRINTBIT)) +#define lisxdigit(c) testprop(c, MASK(XDIGITBIT)) + -LUAI_DATA const char luai_ctype_[UCHAR_MAX + 1]; +/* one more entry for 0 and one more for -1 (EOZ) */ +LUAI_DATA const char luai_ctype_[UCHAR_MAX + 2]; #endif