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:
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