diff options
author | Mike Pall <mike> | 2010-11-09 12:09:54 +0100 |
---|---|---|
committer | Mike Pall <mike> | 2010-11-09 12:09:54 +0100 |
commit | ad29c1f39feb55d4d443b9352448a12a1be8ee23 (patch) | |
tree | 685adbbcad3f65cacf636dda30bf1785191d9c6e | |
parent | fe21a42a92546416cc235511c4e1949d850c0139 (diff) | |
download | luajit-ad29c1f39feb55d4d443b9352448a12a1be8ee23.tar.gz luajit-ad29c1f39feb55d4d443b9352448a12a1be8ee23.tar.bz2 luajit-ad29c1f39feb55d4d443b9352448a12a1be8ee23.zip |
Rename character type handling from lj_ctype* to lj_char*.
-rw-r--r-- | src/Makefile | 2 | ||||
-rw-r--r-- | src/Makefile.dep | 32 | ||||
-rw-r--r-- | src/lib_base.c | 4 | ||||
-rw-r--r-- | src/lib_string.c | 24 | ||||
-rw-r--r-- | src/lj_char.c (renamed from src/lj_ctype.c) | 21 | ||||
-rw-r--r-- | src/lj_char.h | 40 | ||||
-rw-r--r-- | src/lj_ctype.h | 40 | ||||
-rw-r--r-- | src/lj_lex.c | 20 | ||||
-rw-r--r-- | src/lj_str.c | 14 | ||||
-rw-r--r-- | src/ljamalg.c | 2 |
10 files changed, 99 insertions, 100 deletions
diff --git a/src/Makefile b/src/Makefile index 4e18d796..bae6691e 100644 --- a/src/Makefile +++ b/src/Makefile | |||
@@ -289,7 +289,7 @@ LJLIB_O= lib_base.o lib_math.o lib_bit.o lib_string.o lib_table.o \ | |||
289 | lib_io.o lib_os.o lib_package.o lib_debug.o lib_jit.o | 289 | lib_io.o lib_os.o lib_package.o lib_debug.o lib_jit.o |
290 | LJLIB_C= $(LJLIB_O:.o=.c) | 290 | LJLIB_C= $(LJLIB_O:.o=.c) |
291 | 291 | ||
292 | LJCORE_O= lj_gc.o lj_err.o lj_ctype.o lj_bc.o lj_obj.o \ | 292 | LJCORE_O= lj_gc.o lj_err.o lj_char.o lj_bc.o lj_obj.o \ |
293 | lj_str.o lj_tab.o lj_func.o lj_udata.o lj_meta.o \ | 293 | lj_str.o lj_tab.o lj_func.o lj_udata.o lj_meta.o \ |
294 | lj_state.o lj_dispatch.o lj_vmevent.o lj_api.o \ | 294 | lj_state.o lj_dispatch.o lj_vmevent.o lj_api.o \ |
295 | lj_lex.o lj_parse.o \ | 295 | lj_lex.o lj_parse.o \ |
diff --git a/src/Makefile.dep b/src/Makefile.dep index f2914d6d..b30086d9 100644 --- a/src/Makefile.dep +++ b/src/Makefile.dep | |||
@@ -15,7 +15,7 @@ lib_aux.o: lib_aux.c lua.h luaconf.h lauxlib.h lj_obj.h lj_def.h \ | |||
15 | lib_base.o: lib_base.c lua.h luaconf.h lauxlib.h lualib.h lj_obj.h \ | 15 | lib_base.o: lib_base.c lua.h luaconf.h lauxlib.h lualib.h lj_obj.h \ |
16 | lj_def.h lj_arch.h lj_gc.h lj_err.h lj_errmsg.h lj_str.h lj_tab.h \ | 16 | lj_def.h lj_arch.h lj_gc.h lj_err.h lj_errmsg.h lj_str.h lj_tab.h \ |
17 | lj_meta.h lj_state.h lj_bc.h lj_ff.h lj_ffdef.h lj_dispatch.h lj_jit.h \ | 17 | lj_meta.h lj_state.h lj_bc.h lj_ff.h lj_ffdef.h lj_dispatch.h lj_jit.h \ |
18 | lj_ir.h lj_ctype.h lj_lib.h lj_libdef.h | 18 | lj_ir.h lj_char.h lj_lib.h lj_libdef.h |
19 | lib_bit.o: lib_bit.c lua.h luaconf.h lauxlib.h lualib.h lj_obj.h lj_def.h \ | 19 | lib_bit.o: lib_bit.c lua.h luaconf.h lauxlib.h lualib.h lj_obj.h lj_def.h \ |
20 | lj_arch.h lj_err.h lj_errmsg.h lj_str.h lj_lib.h lj_libdef.h | 20 | lj_arch.h lj_err.h lj_errmsg.h lj_str.h lj_lib.h lj_libdef.h |
21 | lib_debug.o: lib_debug.c lua.h luaconf.h lauxlib.h lualib.h lj_obj.h \ | 21 | lib_debug.o: lib_debug.c lua.h luaconf.h lauxlib.h lualib.h lj_obj.h \ |
@@ -37,7 +37,7 @@ lib_package.o: lib_package.c lua.h luaconf.h lauxlib.h lualib.h lj_obj.h \ | |||
37 | lj_def.h lj_arch.h lj_err.h lj_errmsg.h lj_lib.h | 37 | lj_def.h lj_arch.h lj_err.h lj_errmsg.h lj_lib.h |
38 | lib_string.o: lib_string.c lua.h luaconf.h lauxlib.h lualib.h lj_obj.h \ | 38 | lib_string.o: lib_string.c lua.h luaconf.h lauxlib.h lualib.h lj_obj.h \ |
39 | lj_def.h lj_arch.h lj_gc.h lj_err.h lj_errmsg.h lj_str.h lj_tab.h \ | 39 | lj_def.h lj_arch.h lj_gc.h lj_err.h lj_errmsg.h lj_str.h lj_tab.h \ |
40 | lj_state.h lj_ff.h lj_ffdef.h lj_ctype.h lj_lib.h lj_libdef.h | 40 | lj_state.h lj_ff.h lj_ffdef.h lj_char.h lj_lib.h lj_libdef.h |
41 | lib_table.o: lib_table.c lua.h luaconf.h lauxlib.h lualib.h lj_obj.h \ | 41 | lib_table.o: lib_table.c lua.h luaconf.h lauxlib.h lualib.h lj_obj.h \ |
42 | lj_def.h lj_arch.h lj_gc.h lj_err.h lj_errmsg.h lj_tab.h lj_lib.h \ | 42 | lj_def.h lj_arch.h lj_gc.h lj_err.h lj_errmsg.h lj_tab.h lj_lib.h \ |
43 | lj_libdef.h | 43 | lj_libdef.h |
@@ -52,7 +52,7 @@ lj_asm.o: lj_asm.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h lj_gc.h \ | |||
52 | lj_vm.h lj_target.h lj_target_*.h | 52 | lj_vm.h lj_target.h lj_target_*.h |
53 | lj_bc.o: lj_bc.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h lj_bc.h \ | 53 | lj_bc.o: lj_bc.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h lj_bc.h \ |
54 | lj_bcdef.h | 54 | lj_bcdef.h |
55 | lj_ctype.o: lj_ctype.c lj_ctype.h lj_def.h lua.h luaconf.h | 55 | lj_char.o: lj_char.c lj_char.h lj_def.h lua.h luaconf.h |
56 | lj_dispatch.o: lj_dispatch.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ | 56 | lj_dispatch.o: lj_dispatch.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ |
57 | lj_err.h lj_errmsg.h lj_state.h lj_frame.h lj_bc.h lj_ff.h lj_ffdef.h \ | 57 | lj_err.h lj_errmsg.h lj_state.h lj_frame.h lj_bc.h lj_ff.h lj_ffdef.h \ |
58 | lj_jit.h lj_ir.h lj_trace.h lj_dispatch.h lj_traceerr.h lj_vm.h luajit.h | 58 | lj_jit.h lj_ir.h lj_trace.h lj_dispatch.h lj_traceerr.h lj_vm.h luajit.h |
@@ -73,7 +73,7 @@ lj_ir.o: lj_ir.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h lj_gc.h \ | |||
73 | lj_str.h lj_tab.h lj_ir.h lj_jit.h lj_iropt.h lj_trace.h lj_dispatch.h \ | 73 | lj_str.h lj_tab.h lj_ir.h lj_jit.h lj_iropt.h lj_trace.h lj_dispatch.h \ |
74 | lj_bc.h lj_traceerr.h lj_lib.h | 74 | lj_bc.h lj_traceerr.h lj_lib.h |
75 | lj_lex.o: lj_lex.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h lj_gc.h \ | 75 | lj_lex.o: lj_lex.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h lj_gc.h \ |
76 | lj_err.h lj_errmsg.h lj_str.h lj_lex.h lj_parse.h lj_ctype.h | 76 | lj_err.h lj_errmsg.h lj_str.h lj_lex.h lj_parse.h lj_char.h |
77 | lj_lib.o: lj_lib.c lauxlib.h lua.h luaconf.h lj_obj.h lj_def.h lj_arch.h \ | 77 | lj_lib.o: lj_lib.c lauxlib.h lua.h luaconf.h lj_obj.h lj_def.h lj_arch.h \ |
78 | lj_gc.h lj_err.h lj_errmsg.h lj_str.h lj_tab.h lj_func.h lj_bc.h \ | 78 | lj_gc.h lj_err.h lj_errmsg.h lj_str.h lj_tab.h lj_func.h lj_bc.h \ |
79 | lj_dispatch.h lj_jit.h lj_ir.h lj_vm.h lj_lib.h | 79 | lj_dispatch.h lj_jit.h lj_ir.h lj_vm.h lj_lib.h |
@@ -112,7 +112,7 @@ lj_state.o: lj_state.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ | |||
112 | lj_state.h lj_frame.h lj_bc.h lj_mcode.h lj_jit.h lj_ir.h lj_trace.h \ | 112 | lj_state.h lj_frame.h lj_bc.h lj_mcode.h lj_jit.h lj_ir.h lj_trace.h \ |
113 | lj_dispatch.h lj_traceerr.h lj_vm.h lj_lex.h lj_alloc.h | 113 | lj_dispatch.h lj_traceerr.h lj_vm.h lj_lex.h lj_alloc.h |
114 | lj_str.o: lj_str.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h lj_gc.h \ | 114 | lj_str.o: lj_str.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h lj_gc.h \ |
115 | lj_err.h lj_errmsg.h lj_str.h lj_state.h lj_ctype.h | 115 | lj_err.h lj_errmsg.h lj_str.h lj_state.h lj_char.h |
116 | lj_tab.o: lj_tab.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h lj_gc.h \ | 116 | lj_tab.o: lj_tab.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h lj_gc.h \ |
117 | lj_err.h lj_errmsg.h lj_tab.h | 117 | lj_err.h lj_errmsg.h lj_tab.h |
118 | lj_trace.o: lj_trace.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ | 118 | lj_trace.o: lj_trace.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ |
@@ -128,15 +128,15 @@ lj_vmevent.o: lj_vmevent.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ | |||
128 | ljamalg.o: ljamalg.c lua.h luaconf.h lauxlib.h lj_gc.c lj_obj.h lj_def.h \ | 128 | ljamalg.o: ljamalg.c lua.h luaconf.h lauxlib.h lj_gc.c lj_obj.h lj_def.h \ |
129 | lj_arch.h lj_gc.h lj_err.h lj_errmsg.h lj_str.h lj_tab.h lj_func.h \ | 129 | lj_arch.h lj_gc.h lj_err.h lj_errmsg.h lj_str.h lj_tab.h lj_func.h \ |
130 | lj_udata.h lj_meta.h lj_state.h lj_frame.h lj_bc.h lj_trace.h lj_jit.h \ | 130 | lj_udata.h lj_meta.h lj_state.h lj_frame.h lj_bc.h lj_trace.h lj_jit.h \ |
131 | lj_ir.h lj_dispatch.h lj_traceerr.h lj_vm.h lj_err.c lj_ctype.c \ | 131 | lj_ir.h lj_dispatch.h lj_traceerr.h lj_vm.h lj_err.c lj_char.c lj_char.h \ |
132 | lj_ctype.h lj_bc.c lj_bcdef.h lj_obj.c lj_str.c lj_tab.c lj_func.c \ | 132 | lj_bc.c lj_bcdef.h lj_obj.c lj_str.c lj_tab.c lj_func.c lj_udata.c \ |
133 | lj_udata.c lj_meta.c lj_state.c lj_mcode.h lj_lex.h lj_alloc.h \ | 133 | lj_meta.c lj_state.c lj_mcode.h lj_lex.h lj_alloc.h lj_dispatch.c \ |
134 | lj_dispatch.c lj_ff.h lj_ffdef.h luajit.h lj_vmevent.c lj_vmevent.h \ | 134 | lj_ff.h lj_ffdef.h luajit.h lj_vmevent.c lj_vmevent.h lj_api.c \ |
135 | lj_api.c lj_parse.h lj_lex.c lj_parse.c lj_lib.c lj_lib.h lj_ir.c \ | 135 | lj_parse.h lj_lex.c lj_parse.c lj_lib.c lj_lib.h lj_ir.c lj_iropt.h \ |
136 | lj_iropt.h lj_opt_mem.c lj_opt_fold.c lj_folddef.h lj_opt_narrow.c \ | 136 | lj_opt_mem.c lj_opt_fold.c lj_folddef.h lj_opt_narrow.c lj_opt_dce.c \ |
137 | lj_opt_dce.c lj_opt_loop.c lj_snap.h lj_mcode.c lj_snap.c lj_target.h \ | 137 | lj_opt_loop.c lj_snap.h lj_mcode.c lj_snap.c lj_target.h lj_target_*.h \ |
138 | lj_target_*.h lj_record.c lj_record.h lj_asm.h lj_recdef.h lj_asm.c \ | 138 | lj_record.c lj_record.h lj_asm.h lj_recdef.h lj_asm.c lj_trace.c \ |
139 | lj_trace.c lj_gdbjit.h lj_gdbjit.c lj_alloc.c lib_aux.c lib_base.c \ | 139 | lj_gdbjit.h lj_gdbjit.c lj_alloc.c lib_aux.c lib_base.c lualib.h \ |
140 | lualib.h lj_libdef.h lib_math.c lib_string.c lib_table.c lib_io.c \ | 140 | lj_libdef.h lib_math.c lib_string.c lib_table.c lib_io.c lib_os.c \ |
141 | lib_os.c lib_package.c lib_debug.c lib_bit.c lib_jit.c lib_init.c | 141 | lib_package.c lib_debug.c lib_bit.c lib_jit.c lib_init.c |
142 | luajit.o: luajit.c lua.h luaconf.h lauxlib.h lualib.h luajit.h | 142 | luajit.o: luajit.c lua.h luaconf.h lauxlib.h lualib.h luajit.h |
diff --git a/src/lib_base.c b/src/lib_base.c index 0a13f36b..6a842d2c 100644 --- a/src/lib_base.c +++ b/src/lib_base.c | |||
@@ -25,7 +25,7 @@ | |||
25 | #include "lj_bc.h" | 25 | #include "lj_bc.h" |
26 | #include "lj_ff.h" | 26 | #include "lj_ff.h" |
27 | #include "lj_dispatch.h" | 27 | #include "lj_dispatch.h" |
28 | #include "lj_ctype.h" | 28 | #include "lj_char.h" |
29 | #include "lj_lib.h" | 29 | #include "lj_lib.h" |
30 | 30 | ||
31 | /* -- Base library: checks ------------------------------------------------ */ | 31 | /* -- Base library: checks ------------------------------------------------ */ |
@@ -197,7 +197,7 @@ LJLIB_ASM(tonumber) LJLIB_REC(.) | |||
197 | lj_err_arg(L, 2, LJ_ERR_BASERNG); | 197 | lj_err_arg(L, 2, LJ_ERR_BASERNG); |
198 | ul = strtoul(p, &ep, base); | 198 | ul = strtoul(p, &ep, base); |
199 | if (p != ep) { | 199 | if (p != ep) { |
200 | while (lj_ctype_isspace((unsigned char)(*ep))) ep++; | 200 | while (lj_char_isspace((unsigned char)(*ep))) ep++; |
201 | if (*ep == '\0') { | 201 | if (*ep == '\0') { |
202 | setnumV(L->base-1, cast_num(ul)); | 202 | setnumV(L->base-1, cast_num(ul)); |
203 | return FFH_RES(1); | 203 | return FFH_RES(1); |
diff --git a/src/lib_string.c b/src/lib_string.c index 8ca9ef01..73a09583 100644 --- a/src/lib_string.c +++ b/src/lib_string.c | |||
@@ -22,7 +22,7 @@ | |||
22 | #include "lj_tab.h" | 22 | #include "lj_tab.h" |
23 | #include "lj_state.h" | 23 | #include "lj_state.h" |
24 | #include "lj_ff.h" | 24 | #include "lj_ff.h" |
25 | #include "lj_ctype.h" | 25 | #include "lj_char.h" |
26 | #include "lj_lib.h" | 26 | #include "lj_lib.h" |
27 | 27 | ||
28 | /* ------------------------------------------------------------------------ */ | 28 | /* ------------------------------------------------------------------------ */ |
@@ -181,9 +181,9 @@ static const char *classend(MatchState *ms, const char *p) | |||
181 | } | 181 | } |
182 | 182 | ||
183 | static const unsigned char match_class_map[32] = { | 183 | static const unsigned char match_class_map[32] = { |
184 | 0, LJ_CTYPE_ALPHA, 0, LJ_CTYPE_CNTRL, LJ_CTYPE_DIGIT, 0,0,0,0,0,0,0, | 184 | 0, LJ_CHAR_ALPHA, 0, LJ_CHAR_CNTRL, LJ_CHAR_DIGIT, 0,0,0,0,0,0,0, |
185 | LJ_CTYPE_LOWER, 0,0,0, LJ_CTYPE_PUNCT, 0,0, LJ_CTYPE_SPACE, 0, | 185 | LJ_CHAR_LOWER, 0,0,0, LJ_CHAR_PUNCT, 0,0, LJ_CHAR_SPACE, 0, |
186 | LJ_CTYPE_UPPER, 0, LJ_CTYPE_ALNUM, LJ_CTYPE_XDIGIT, 0,0,0,0,0,0,0 | 186 | LJ_CHAR_UPPER, 0, LJ_CHAR_ALNUM, LJ_CHAR_XDIGIT, 0,0,0,0,0,0,0 |
187 | }; | 187 | }; |
188 | 188 | ||
189 | static int match_class(int c, int cl) | 189 | static int match_class(int c, int cl) |
@@ -191,7 +191,7 @@ static int match_class(int c, int cl) | |||
191 | if ((cl & 0xc0) == 0x40) { | 191 | if ((cl & 0xc0) == 0x40) { |
192 | int t = match_class_map[(cl&0x1f)]; | 192 | int t = match_class_map[(cl&0x1f)]; |
193 | if (t) { | 193 | if (t) { |
194 | t = lj_ctype_isa(c, t); | 194 | t = lj_char_isa(c, t); |
195 | return (cl & 0x20) ? t : !t; | 195 | return (cl & 0x20) ? t : !t; |
196 | } | 196 | } |
197 | if (cl == 'z') return c == 0; | 197 | if (cl == 'z') return c == 0; |
@@ -353,7 +353,7 @@ static const char *match(MatchState *ms, const char *s, const char *p) | |||
353 | goto init; /* else return match(ms, s, ep); */ | 353 | goto init; /* else return match(ms, s, ep); */ |
354 | } | 354 | } |
355 | default: | 355 | default: |
356 | if (lj_ctype_isdigit(uchar(*(p+1)))) { /* capture results (%0-%9)? */ | 356 | if (lj_char_isdigit(uchar(*(p+1)))) { /* capture results (%0-%9)? */ |
357 | s = match_capture(ms, s, uchar(*(p+1))); | 357 | s = match_capture(ms, s, uchar(*(p+1))); |
358 | if (s == NULL) return NULL; | 358 | if (s == NULL) return NULL; |
359 | p+=2; | 359 | p+=2; |
@@ -549,7 +549,7 @@ static void add_s(MatchState *ms, luaL_Buffer *b, const char *s, const char *e) | |||
549 | luaL_addchar(b, news[i]); | 549 | luaL_addchar(b, news[i]); |
550 | } else { | 550 | } else { |
551 | i++; /* skip ESC */ | 551 | i++; /* skip ESC */ |
552 | if (!lj_ctype_isdigit(uchar(news[i]))) { | 552 | if (!lj_char_isdigit(uchar(news[i]))) { |
553 | luaL_addchar(b, news[i]); | 553 | luaL_addchar(b, news[i]); |
554 | } else if (news[i] == '0') { | 554 | } else if (news[i] == '0') { |
555 | luaL_addlstring(b, s, (size_t)(e - s)); | 555 | luaL_addlstring(b, s, (size_t)(e - s)); |
@@ -679,14 +679,14 @@ static const char *scanformat(lua_State *L, const char *strfrmt, char *form) | |||
679 | while (*p != '\0' && strchr(FMT_FLAGS, *p) != NULL) p++; /* skip flags */ | 679 | while (*p != '\0' && strchr(FMT_FLAGS, *p) != NULL) p++; /* skip flags */ |
680 | if ((size_t)(p - strfrmt) >= sizeof(FMT_FLAGS)) | 680 | if ((size_t)(p - strfrmt) >= sizeof(FMT_FLAGS)) |
681 | lj_err_caller(L, LJ_ERR_STRFMTR); | 681 | lj_err_caller(L, LJ_ERR_STRFMTR); |
682 | if (lj_ctype_isdigit(uchar(*p))) p++; /* skip width */ | 682 | if (lj_char_isdigit(uchar(*p))) p++; /* skip width */ |
683 | if (lj_ctype_isdigit(uchar(*p))) p++; /* (2 digits at most) */ | 683 | if (lj_char_isdigit(uchar(*p))) p++; /* (2 digits at most) */ |
684 | if (*p == '.') { | 684 | if (*p == '.') { |
685 | p++; | 685 | p++; |
686 | if (lj_ctype_isdigit(uchar(*p))) p++; /* skip precision */ | 686 | if (lj_char_isdigit(uchar(*p))) p++; /* skip precision */ |
687 | if (lj_ctype_isdigit(uchar(*p))) p++; /* (2 digits at most) */ | 687 | if (lj_char_isdigit(uchar(*p))) p++; /* (2 digits at most) */ |
688 | } | 688 | } |
689 | if (lj_ctype_isdigit(uchar(*p))) | 689 | if (lj_char_isdigit(uchar(*p))) |
690 | lj_err_caller(L, LJ_ERR_STRFMTW); | 690 | lj_err_caller(L, LJ_ERR_STRFMTW); |
691 | *(form++) = '%'; | 691 | *(form++) = '%'; |
692 | strncpy(form, strfrmt, (size_t)(p - strfrmt + 1)); | 692 | strncpy(form, strfrmt, (size_t)(p - strfrmt + 1)); |
diff --git a/src/lj_ctype.c b/src/lj_char.c index 9f19b879..11f23efe 100644 --- a/src/lj_ctype.c +++ b/src/lj_char.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | ** Internal CTYPE replacement. | 2 | ** Character types. |
3 | ** Donated to the public domain. | 3 | ** Donated to the public domain. |
4 | ** | 4 | ** |
5 | ** This is intended to replace the problematic libc single-byte NLS functions. | 5 | ** This is intended to replace the problematic libc single-byte NLS functions. |
@@ -7,22 +7,21 @@ | |||
7 | ** on POSIX systems. It never worked too well on Windows systems since hardly | 7 | ** on POSIX systems. It never worked too well on Windows systems since hardly |
8 | ** anyone bothered to call setlocale(). | 8 | ** anyone bothered to call setlocale(). |
9 | ** | 9 | ** |
10 | ** Instead this table is hardcoded for ASCII, except for identifiers. These | 10 | ** This table is hardcoded for ASCII. Identifiers include the characters |
11 | ** include the characters 128-255, too. This allows for the use of all | 11 | ** 128-255, too. This allows for the use of all non-ASCII chars as identifiers |
12 | ** non-ASCII chars as identifiers in the lexer. This is a broad definition, | 12 | ** in the lexer. This is a broad definition, but works well in practice |
13 | ** but works well in practice for both UTF-8 locales and most single-byte | 13 | ** for both UTF-8 locales and most single-byte locales (such as ISO-8859-*). |
14 | ** locales (such as ISO-8859-*). | ||
15 | ** | 14 | ** |
16 | ** If you really need proper ctypes for UTF-8 strings, please use an add-on | 15 | ** If you really need proper character types for UTF-8 strings, please use |
17 | ** library such as slnunicode: http://luaforge.net/projects/sln/ | 16 | ** an add-on library such as slnunicode: http://luaforge.net/projects/sln/ |
18 | */ | 17 | */ |
19 | 18 | ||
20 | #define lj_ctype_c | 19 | #define lj_char_c |
21 | #define LUA_CORE | 20 | #define LUA_CORE |
22 | 21 | ||
23 | #include "lj_ctype.h" | 22 | #include "lj_char.h" |
24 | 23 | ||
25 | LJ_DATADEF const uint8_t lj_ctype_bits[257] = { | 24 | LJ_DATADEF const uint8_t lj_char_bits[257] = { |
26 | 0, | 25 | 0, |
27 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 1, 1, | 26 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 1, 1, |
28 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, | 27 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, |
diff --git a/src/lj_char.h b/src/lj_char.h new file mode 100644 index 00000000..d474285c --- /dev/null +++ b/src/lj_char.h | |||
@@ -0,0 +1,40 @@ | |||
1 | /* | ||
2 | ** Character types. | ||
3 | ** Donated to the public domain. | ||
4 | */ | ||
5 | |||
6 | #ifndef _LJ_CHAR_H | ||
7 | #define _LJ_CHAR_H | ||
8 | |||
9 | #include "lj_def.h" | ||
10 | |||
11 | #define LJ_CHAR_CNTRL 0x01 | ||
12 | #define LJ_CHAR_SPACE 0x02 | ||
13 | #define LJ_CHAR_PUNCT 0x04 | ||
14 | #define LJ_CHAR_DIGIT 0x08 | ||
15 | #define LJ_CHAR_XDIGIT 0x10 | ||
16 | #define LJ_CHAR_UPPER 0x20 | ||
17 | #define LJ_CHAR_LOWER 0x40 | ||
18 | #define LJ_CHAR_IDENT 0x80 | ||
19 | #define LJ_CHAR_ALPHA (LJ_CHAR_LOWER|LJ_CHAR_UPPER) | ||
20 | #define LJ_CHAR_ALNUM (LJ_CHAR_ALPHA|LJ_CHAR_DIGIT) | ||
21 | |||
22 | /* Only pass -1 or 0..255 to these macros. Never pass a signed char! */ | ||
23 | #define lj_char_isa(c, t) (lj_char_bits[(c)+1] & t) | ||
24 | #define lj_char_iscntrl(c) lj_char_isa((c), LJ_CHAR_CNTRL) | ||
25 | #define lj_char_isspace(c) lj_char_isa((c), LJ_CHAR_SPACE) | ||
26 | #define lj_char_ispunct(c) lj_char_isa((c), LJ_CHAR_PUNCT) | ||
27 | #define lj_char_isdigit(c) lj_char_isa((c), LJ_CHAR_DIGIT) | ||
28 | #define lj_char_isxdigit(c) lj_char_isa((c), LJ_CHAR_XDIGIT) | ||
29 | #define lj_char_isupper(c) lj_char_isa((c), LJ_CHAR_UPPER) | ||
30 | #define lj_char_islower(c) lj_char_isa((c), LJ_CHAR_LOWER) | ||
31 | #define lj_char_isident(c) lj_char_isa((c), LJ_CHAR_IDENT) | ||
32 | #define lj_char_isalpha(c) lj_char_isa((c), LJ_CHAR_ALPHA) | ||
33 | #define lj_char_isalnum(c) lj_char_isa((c), LJ_CHAR_ALNUM) | ||
34 | |||
35 | #define lj_char_toupper(c) ((c) - (lj_char_islower(c) >> 1)) | ||
36 | #define lj_char_tolower(c) ((c) + lj_char_isupper(c)) | ||
37 | |||
38 | LJ_DATA const uint8_t lj_char_bits[257]; | ||
39 | |||
40 | #endif | ||
diff --git a/src/lj_ctype.h b/src/lj_ctype.h deleted file mode 100644 index c4cdff84..00000000 --- a/src/lj_ctype.h +++ /dev/null | |||
@@ -1,40 +0,0 @@ | |||
1 | /* | ||
2 | ** Internal CTYPE replacement. | ||
3 | ** Donated to the public domain. | ||
4 | */ | ||
5 | |||
6 | #ifndef _LJ_CTYPE_H | ||
7 | #define _LJ_CTYPE_H | ||
8 | |||
9 | #include "lj_def.h" | ||
10 | |||
11 | #define LJ_CTYPE_CNTRL 0x01 | ||
12 | #define LJ_CTYPE_SPACE 0x02 | ||
13 | #define LJ_CTYPE_PUNCT 0x04 | ||
14 | #define LJ_CTYPE_DIGIT 0x08 | ||
15 | #define LJ_CTYPE_XDIGIT 0x10 | ||
16 | #define LJ_CTYPE_UPPER 0x20 | ||
17 | #define LJ_CTYPE_LOWER 0x40 | ||
18 | #define LJ_CTYPE_IDENT 0x80 | ||
19 | #define LJ_CTYPE_ALPHA (LJ_CTYPE_LOWER|LJ_CTYPE_UPPER) | ||
20 | #define LJ_CTYPE_ALNUM (LJ_CTYPE_ALPHA|LJ_CTYPE_DIGIT) | ||
21 | |||
22 | /* Only pass -1 or 0..255 to these macros. Never pass a signed char! */ | ||
23 | #define lj_ctype_isa(c, t) (lj_ctype_bits[(c)+1] & t) | ||
24 | #define lj_ctype_iscntrl(c) lj_ctype_isa((c), LJ_CTYPE_CNTRL) | ||
25 | #define lj_ctype_isspace(c) lj_ctype_isa((c), LJ_CTYPE_SPACE) | ||
26 | #define lj_ctype_ispunct(c) lj_ctype_isa((c), LJ_CTYPE_PUNCT) | ||
27 | #define lj_ctype_isdigit(c) lj_ctype_isa((c), LJ_CTYPE_DIGIT) | ||
28 | #define lj_ctype_isxdigit(c) lj_ctype_isa((c), LJ_CTYPE_XDIGIT) | ||
29 | #define lj_ctype_isupper(c) lj_ctype_isa((c), LJ_CTYPE_UPPER) | ||
30 | #define lj_ctype_islower(c) lj_ctype_isa((c), LJ_CTYPE_LOWER) | ||
31 | #define lj_ctype_isident(c) lj_ctype_isa((c), LJ_CTYPE_IDENT) | ||
32 | #define lj_ctype_isalpha(c) lj_ctype_isa((c), LJ_CTYPE_ALPHA) | ||
33 | #define lj_ctype_isalnum(c) lj_ctype_isa((c), LJ_CTYPE_ALNUM) | ||
34 | |||
35 | #define lj_ctype_toupper(c) ((c) - (lj_ctype_islower(c) >> 1)) | ||
36 | #define lj_ctype_tolower(c) ((c) + lj_ctype_isupper(c)) | ||
37 | |||
38 | LJ_DATA const uint8_t lj_ctype_bits[257]; | ||
39 | |||
40 | #endif | ||
diff --git a/src/lj_lex.c b/src/lj_lex.c index d02ae849..d3544e8e 100644 --- a/src/lj_lex.c +++ b/src/lj_lex.c | |||
@@ -15,7 +15,7 @@ | |||
15 | #include "lj_str.h" | 15 | #include "lj_str.h" |
16 | #include "lj_lex.h" | 16 | #include "lj_lex.h" |
17 | #include "lj_parse.h" | 17 | #include "lj_parse.h" |
18 | #include "lj_ctype.h" | 18 | #include "lj_char.h" |
19 | 19 | ||
20 | /* Lua lexer token names. */ | 20 | /* Lua lexer token names. */ |
21 | static const char *const tokennames[] = { | 21 | static const char *const tokennames[] = { |
@@ -80,11 +80,11 @@ static void inclinenumber(LexState *ls) | |||
80 | static void read_numeral(LexState *ls, TValue *tv) | 80 | static void read_numeral(LexState *ls, TValue *tv) |
81 | { | 81 | { |
82 | int c; | 82 | int c; |
83 | lua_assert(lj_ctype_isdigit(ls->current)); | 83 | lua_assert(lj_char_isdigit(ls->current)); |
84 | do { | 84 | do { |
85 | c = ls->current; | 85 | c = ls->current; |
86 | save_and_next(ls); | 86 | save_and_next(ls); |
87 | } while (lj_ctype_isident(ls->current) || ls->current == '.' || | 87 | } while (lj_char_isident(ls->current) || ls->current == '.' || |
88 | ((ls->current == '-' || ls->current == '+') && | 88 | ((ls->current == '-' || ls->current == '+') && |
89 | ((c & ~0x20) == 'E' || (c & ~0x20) == 'P'))); | 89 | ((c & ~0x20) == 'E' || (c & ~0x20) == 'P'))); |
90 | save(ls, '\0'); | 90 | save(ls, '\0'); |
@@ -166,7 +166,7 @@ static void read_string(LexState *ls, int delim, TValue *tv) | |||
166 | case '\n': case '\r': save(ls, '\n'); inclinenumber(ls); continue; | 166 | case '\n': case '\r': save(ls, '\n'); inclinenumber(ls); continue; |
167 | case END_OF_STREAM: continue; /* will raise an error next loop */ | 167 | case END_OF_STREAM: continue; /* will raise an error next loop */ |
168 | default: | 168 | default: |
169 | if (!lj_ctype_isdigit(ls->current)) { | 169 | if (!lj_char_isdigit(ls->current)) { |
170 | save_and_next(ls); /* handles \\, \", \', and \? */ | 170 | save_and_next(ls); /* handles \\, \", \', and \? */ |
171 | } else { /* \xxx */ | 171 | } else { /* \xxx */ |
172 | int i = 0; | 172 | int i = 0; |
@@ -174,7 +174,7 @@ static void read_string(LexState *ls, int delim, TValue *tv) | |||
174 | do { | 174 | do { |
175 | c = 10*c + (ls->current-'0'); | 175 | c = 10*c + (ls->current-'0'); |
176 | next(ls); | 176 | next(ls); |
177 | } while (++i<3 && lj_ctype_isdigit(ls->current)); | 177 | } while (++i<3 && lj_char_isdigit(ls->current)); |
178 | if (c > 255) | 178 | if (c > 255) |
179 | lj_lex_error(ls, TK_string, LJ_ERR_XESC); | 179 | lj_lex_error(ls, TK_string, LJ_ERR_XESC); |
180 | save(ls, c); | 180 | save(ls, c); |
@@ -200,16 +200,16 @@ static int llex(LexState *ls, TValue *tv) | |||
200 | { | 200 | { |
201 | lj_str_resetbuf(&ls->sb); | 201 | lj_str_resetbuf(&ls->sb); |
202 | for (;;) { | 202 | for (;;) { |
203 | if (lj_ctype_isident(ls->current)) { | 203 | if (lj_char_isident(ls->current)) { |
204 | GCstr *s; | 204 | GCstr *s; |
205 | if (lj_ctype_isdigit(ls->current)) { /* Numeric literal. */ | 205 | if (lj_char_isdigit(ls->current)) { /* Numeric literal. */ |
206 | read_numeral(ls, tv); | 206 | read_numeral(ls, tv); |
207 | return TK_number; | 207 | return TK_number; |
208 | } | 208 | } |
209 | /* Identifier or reserved word. */ | 209 | /* Identifier or reserved word. */ |
210 | do { | 210 | do { |
211 | save_and_next(ls); | 211 | save_and_next(ls); |
212 | } while (lj_ctype_isident(ls->current)); | 212 | } while (lj_char_isident(ls->current)); |
213 | s = lj_parse_keepstr(ls, ls->sb.buf, ls->sb.n); | 213 | s = lj_parse_keepstr(ls, ls->sb.buf, ls->sb.n); |
214 | if (s->reserved > 0) /* Reserved word? */ | 214 | if (s->reserved > 0) /* Reserved word? */ |
215 | return TK_OFS + s->reserved; | 215 | return TK_OFS + s->reserved; |
@@ -282,7 +282,7 @@ static int llex(LexState *ls, TValue *tv) | |||
282 | return TK_dots; /* ... */ | 282 | return TK_dots; /* ... */ |
283 | } | 283 | } |
284 | return TK_concat; /* .. */ | 284 | return TK_concat; /* .. */ |
285 | } else if (!lj_ctype_isdigit(ls->current)) { | 285 | } else if (!lj_char_isdigit(ls->current)) { |
286 | return '.'; | 286 | return '.'; |
287 | } else { | 287 | } else { |
288 | read_numeral(ls, tv); | 288 | read_numeral(ls, tv); |
@@ -369,7 +369,7 @@ const char *lj_lex_token2str(LexState *ls, LexToken token) | |||
369 | { | 369 | { |
370 | if (token > TK_OFS) | 370 | if (token > TK_OFS) |
371 | return tokennames[token-TK_OFS-1]; | 371 | return tokennames[token-TK_OFS-1]; |
372 | else if (!lj_ctype_iscntrl(token)) | 372 | else if (!lj_char_iscntrl(token)) |
373 | return lj_str_pushf(ls->L, "%c", token); | 373 | return lj_str_pushf(ls->L, "%c", token); |
374 | else | 374 | else |
375 | return lj_str_pushf(ls->L, "char(%d)", token); | 375 | return lj_str_pushf(ls->L, "char(%d)", token); |
diff --git a/src/lj_str.c b/src/lj_str.c index 618687f5..5e69ed0d 100644 --- a/src/lj_str.c +++ b/src/lj_str.c | |||
@@ -16,7 +16,7 @@ | |||
16 | #include "lj_err.h" | 16 | #include "lj_err.h" |
17 | #include "lj_str.h" | 17 | #include "lj_str.h" |
18 | #include "lj_state.h" | 18 | #include "lj_state.h" |
19 | #include "lj_ctype.h" | 19 | #include "lj_char.h" |
20 | 20 | ||
21 | /* -- String interning ---------------------------------------------------- */ | 21 | /* -- String interning ---------------------------------------------------- */ |
22 | 22 | ||
@@ -180,27 +180,27 @@ int LJ_FASTCALL lj_str_numconv(const char *s, TValue *n) | |||
180 | { | 180 | { |
181 | lua_Number sign = 1; | 181 | lua_Number sign = 1; |
182 | const uint8_t *p = (const uint8_t *)s; | 182 | const uint8_t *p = (const uint8_t *)s; |
183 | while (lj_ctype_isspace(*p)) p++; | 183 | while (lj_char_isspace(*p)) p++; |
184 | if (*p == '-') { p++; sign = -1; } else if (*p == '+') { p++; } | 184 | if (*p == '-') { p++; sign = -1; } else if (*p == '+') { p++; } |
185 | if ((uint32_t)(*p - '0') < 10) { | 185 | if ((uint32_t)(*p - '0') < 10) { |
186 | uint32_t k = (uint32_t)(*p++ - '0'); | 186 | uint32_t k = (uint32_t)(*p++ - '0'); |
187 | if (k == 0 && ((*p & ~0x20) == 'X')) { | 187 | if (k == 0 && ((*p & ~0x20) == 'X')) { |
188 | p++; | 188 | p++; |
189 | if (!lj_ctype_isxdigit(*p)) | 189 | if (!lj_char_isxdigit(*p)) |
190 | return 0; /* Don't accept '0x' without hex digits. */ | 190 | return 0; /* Don't accept '0x' without hex digits. */ |
191 | do { | 191 | do { |
192 | if (k >= 0x10000000) goto parsedbl; | 192 | if (k >= 0x10000000) goto parsedbl; |
193 | k = (k << 4) + (*p & 15u); | 193 | k = (k << 4) + (*p & 15u); |
194 | if (!lj_ctype_isdigit(*p)) k += 9; | 194 | if (!lj_char_isdigit(*p)) k += 9; |
195 | p++; | 195 | p++; |
196 | } while (lj_ctype_isxdigit(*p)); | 196 | } while (lj_char_isxdigit(*p)); |
197 | } else { | 197 | } else { |
198 | while ((uint32_t)(*p - '0') < 10) { | 198 | while ((uint32_t)(*p - '0') < 10) { |
199 | if (k >= 0x19999999) goto parsedbl; | 199 | if (k >= 0x19999999) goto parsedbl; |
200 | k = k * 10u + (uint32_t)(*p++ - '0'); | 200 | k = k * 10u + (uint32_t)(*p++ - '0'); |
201 | } | 201 | } |
202 | } | 202 | } |
203 | while (LJ_UNLIKELY(lj_ctype_isspace(*p))) p++; | 203 | while (LJ_UNLIKELY(lj_char_isspace(*p))) p++; |
204 | if (LJ_LIKELY(*p == '\0')) { | 204 | if (LJ_LIKELY(*p == '\0')) { |
205 | setnumV(n, sign * cast_num(k)); | 205 | setnumV(n, sign * cast_num(k)); |
206 | return 1; | 206 | return 1; |
@@ -213,7 +213,7 @@ parsedbl: | |||
213 | setnumV(&tv, lua_str2number(s, &endptr)); | 213 | setnumV(&tv, lua_str2number(s, &endptr)); |
214 | if (endptr == s) return 0; /* Conversion failed. */ | 214 | if (endptr == s) return 0; /* Conversion failed. */ |
215 | if (LJ_UNLIKELY(*endptr != '\0')) { | 215 | if (LJ_UNLIKELY(*endptr != '\0')) { |
216 | while (lj_ctype_isspace((uint8_t)*endptr)) endptr++; | 216 | while (lj_char_isspace((uint8_t)*endptr)) endptr++; |
217 | if (*endptr != '\0') return 0; /* Invalid trailing characters? */ | 217 | if (*endptr != '\0') return 0; /* Invalid trailing characters? */ |
218 | } | 218 | } |
219 | if (LJ_LIKELY(!tvisnan(&tv))) | 219 | if (LJ_LIKELY(!tvisnan(&tv))) |
diff --git a/src/ljamalg.c b/src/ljamalg.c index 5d66a9eb..4f3b5025 100644 --- a/src/ljamalg.c +++ b/src/ljamalg.c | |||
@@ -26,7 +26,7 @@ | |||
26 | 26 | ||
27 | #include "lj_gc.c" | 27 | #include "lj_gc.c" |
28 | #include "lj_err.c" | 28 | #include "lj_err.c" |
29 | #include "lj_ctype.c" | 29 | #include "lj_char.c" |
30 | #include "lj_bc.c" | 30 | #include "lj_bc.c" |
31 | #include "lj_obj.c" | 31 | #include "lj_obj.c" |
32 | #include "lj_str.c" | 32 | #include "lj_str.c" |