From b1e1c15ced1f02becf578efb12dbeea6a9f01eee Mon Sep 17 00:00:00 2001 From: Roberto Ierusalimschy Date: Thu, 26 Mar 2009 15:53:52 -0300 Subject: small bug: EOZ is a valid character to be tested --- lctype.h | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) (limited to 'lctype.h') diff --git a/lctype.h b/lctype.h index db233b87..4569ec28 100644 --- 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 -- cgit v1.2.3-55-g6feb