mirror of
https://github.com/LuaJIT/LuaJIT.git
synced 2025-02-07 23:24:09 +00:00
Rename character type handling from lj_ctype* to lj_char*.
This commit is contained in:
parent
fe21a42a92
commit
ad29c1f39f
@ -289,7 +289,7 @@ LJLIB_O= lib_base.o lib_math.o lib_bit.o lib_string.o lib_table.o \
|
|||||||
lib_io.o lib_os.o lib_package.o lib_debug.o lib_jit.o
|
lib_io.o lib_os.o lib_package.o lib_debug.o lib_jit.o
|
||||||
LJLIB_C= $(LJLIB_O:.o=.c)
|
LJLIB_C= $(LJLIB_O:.o=.c)
|
||||||
|
|
||||||
LJCORE_O= lj_gc.o lj_err.o lj_ctype.o lj_bc.o lj_obj.o \
|
LJCORE_O= lj_gc.o lj_err.o lj_char.o lj_bc.o lj_obj.o \
|
||||||
lj_str.o lj_tab.o lj_func.o lj_udata.o lj_meta.o \
|
lj_str.o lj_tab.o lj_func.o lj_udata.o lj_meta.o \
|
||||||
lj_state.o lj_dispatch.o lj_vmevent.o lj_api.o \
|
lj_state.o lj_dispatch.o lj_vmevent.o lj_api.o \
|
||||||
lj_lex.o lj_parse.o \
|
lj_lex.o lj_parse.o \
|
||||||
|
@ -15,7 +15,7 @@ lib_aux.o: lib_aux.c lua.h luaconf.h lauxlib.h lj_obj.h lj_def.h \
|
|||||||
lib_base.o: lib_base.c lua.h luaconf.h lauxlib.h lualib.h lj_obj.h \
|
lib_base.o: lib_base.c lua.h luaconf.h lauxlib.h lualib.h lj_obj.h \
|
||||||
lj_def.h lj_arch.h lj_gc.h lj_err.h lj_errmsg.h lj_str.h lj_tab.h \
|
lj_def.h lj_arch.h lj_gc.h lj_err.h lj_errmsg.h lj_str.h lj_tab.h \
|
||||||
lj_meta.h lj_state.h lj_bc.h lj_ff.h lj_ffdef.h lj_dispatch.h lj_jit.h \
|
lj_meta.h lj_state.h lj_bc.h lj_ff.h lj_ffdef.h lj_dispatch.h lj_jit.h \
|
||||||
lj_ir.h lj_ctype.h lj_lib.h lj_libdef.h
|
lj_ir.h lj_char.h lj_lib.h lj_libdef.h
|
||||||
lib_bit.o: lib_bit.c lua.h luaconf.h lauxlib.h lualib.h lj_obj.h lj_def.h \
|
lib_bit.o: lib_bit.c lua.h luaconf.h lauxlib.h lualib.h lj_obj.h lj_def.h \
|
||||||
lj_arch.h lj_err.h lj_errmsg.h lj_str.h lj_lib.h lj_libdef.h
|
lj_arch.h lj_err.h lj_errmsg.h lj_str.h lj_lib.h lj_libdef.h
|
||||||
lib_debug.o: lib_debug.c lua.h luaconf.h lauxlib.h lualib.h lj_obj.h \
|
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 \
|
|||||||
lj_def.h lj_arch.h lj_err.h lj_errmsg.h lj_lib.h
|
lj_def.h lj_arch.h lj_err.h lj_errmsg.h lj_lib.h
|
||||||
lib_string.o: lib_string.c lua.h luaconf.h lauxlib.h lualib.h lj_obj.h \
|
lib_string.o: lib_string.c lua.h luaconf.h lauxlib.h lualib.h lj_obj.h \
|
||||||
lj_def.h lj_arch.h lj_gc.h lj_err.h lj_errmsg.h lj_str.h lj_tab.h \
|
lj_def.h lj_arch.h lj_gc.h lj_err.h lj_errmsg.h lj_str.h lj_tab.h \
|
||||||
lj_state.h lj_ff.h lj_ffdef.h lj_ctype.h lj_lib.h lj_libdef.h
|
lj_state.h lj_ff.h lj_ffdef.h lj_char.h lj_lib.h lj_libdef.h
|
||||||
lib_table.o: lib_table.c lua.h luaconf.h lauxlib.h lualib.h lj_obj.h \
|
lib_table.o: lib_table.c lua.h luaconf.h lauxlib.h lualib.h lj_obj.h \
|
||||||
lj_def.h lj_arch.h lj_gc.h lj_err.h lj_errmsg.h lj_tab.h lj_lib.h \
|
lj_def.h lj_arch.h lj_gc.h lj_err.h lj_errmsg.h lj_tab.h lj_lib.h \
|
||||||
lj_libdef.h
|
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 \
|
|||||||
lj_vm.h lj_target.h lj_target_*.h
|
lj_vm.h lj_target.h lj_target_*.h
|
||||||
lj_bc.o: lj_bc.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h lj_bc.h \
|
lj_bc.o: lj_bc.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h lj_bc.h \
|
||||||
lj_bcdef.h
|
lj_bcdef.h
|
||||||
lj_ctype.o: lj_ctype.c lj_ctype.h lj_def.h lua.h luaconf.h
|
lj_char.o: lj_char.c lj_char.h lj_def.h lua.h luaconf.h
|
||||||
lj_dispatch.o: lj_dispatch.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \
|
lj_dispatch.o: lj_dispatch.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \
|
||||||
lj_err.h lj_errmsg.h lj_state.h lj_frame.h lj_bc.h lj_ff.h lj_ffdef.h \
|
lj_err.h lj_errmsg.h lj_state.h lj_frame.h lj_bc.h lj_ff.h lj_ffdef.h \
|
||||||
lj_jit.h lj_ir.h lj_trace.h lj_dispatch.h lj_traceerr.h lj_vm.h luajit.h
|
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 \
|
|||||||
lj_str.h lj_tab.h lj_ir.h lj_jit.h lj_iropt.h lj_trace.h lj_dispatch.h \
|
lj_str.h lj_tab.h lj_ir.h lj_jit.h lj_iropt.h lj_trace.h lj_dispatch.h \
|
||||||
lj_bc.h lj_traceerr.h lj_lib.h
|
lj_bc.h lj_traceerr.h lj_lib.h
|
||||||
lj_lex.o: lj_lex.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h lj_gc.h \
|
lj_lex.o: lj_lex.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h lj_gc.h \
|
||||||
lj_err.h lj_errmsg.h lj_str.h lj_lex.h lj_parse.h lj_ctype.h
|
lj_err.h lj_errmsg.h lj_str.h lj_lex.h lj_parse.h lj_char.h
|
||||||
lj_lib.o: lj_lib.c lauxlib.h lua.h luaconf.h lj_obj.h lj_def.h lj_arch.h \
|
lj_lib.o: lj_lib.c lauxlib.h lua.h luaconf.h lj_obj.h lj_def.h lj_arch.h \
|
||||||
lj_gc.h lj_err.h lj_errmsg.h lj_str.h lj_tab.h lj_func.h lj_bc.h \
|
lj_gc.h lj_err.h lj_errmsg.h lj_str.h lj_tab.h lj_func.h lj_bc.h \
|
||||||
lj_dispatch.h lj_jit.h lj_ir.h lj_vm.h lj_lib.h
|
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 \
|
|||||||
lj_state.h lj_frame.h lj_bc.h lj_mcode.h lj_jit.h lj_ir.h lj_trace.h \
|
lj_state.h lj_frame.h lj_bc.h lj_mcode.h lj_jit.h lj_ir.h lj_trace.h \
|
||||||
lj_dispatch.h lj_traceerr.h lj_vm.h lj_lex.h lj_alloc.h
|
lj_dispatch.h lj_traceerr.h lj_vm.h lj_lex.h lj_alloc.h
|
||||||
lj_str.o: lj_str.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h lj_gc.h \
|
lj_str.o: lj_str.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h lj_gc.h \
|
||||||
lj_err.h lj_errmsg.h lj_str.h lj_state.h lj_ctype.h
|
lj_err.h lj_errmsg.h lj_str.h lj_state.h lj_char.h
|
||||||
lj_tab.o: lj_tab.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h lj_gc.h \
|
lj_tab.o: lj_tab.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h lj_gc.h \
|
||||||
lj_err.h lj_errmsg.h lj_tab.h
|
lj_err.h lj_errmsg.h lj_tab.h
|
||||||
lj_trace.o: lj_trace.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \
|
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 \
|
|||||||
ljamalg.o: ljamalg.c lua.h luaconf.h lauxlib.h lj_gc.c lj_obj.h lj_def.h \
|
ljamalg.o: ljamalg.c lua.h luaconf.h lauxlib.h lj_gc.c lj_obj.h lj_def.h \
|
||||||
lj_arch.h lj_gc.h lj_err.h lj_errmsg.h lj_str.h lj_tab.h lj_func.h \
|
lj_arch.h lj_gc.h lj_err.h lj_errmsg.h lj_str.h lj_tab.h lj_func.h \
|
||||||
lj_udata.h lj_meta.h lj_state.h lj_frame.h lj_bc.h lj_trace.h lj_jit.h \
|
lj_udata.h lj_meta.h lj_state.h lj_frame.h lj_bc.h lj_trace.h lj_jit.h \
|
||||||
lj_ir.h lj_dispatch.h lj_traceerr.h lj_vm.h lj_err.c lj_ctype.c \
|
lj_ir.h lj_dispatch.h lj_traceerr.h lj_vm.h lj_err.c lj_char.c lj_char.h \
|
||||||
lj_ctype.h lj_bc.c lj_bcdef.h lj_obj.c lj_str.c lj_tab.c lj_func.c \
|
lj_bc.c lj_bcdef.h lj_obj.c lj_str.c lj_tab.c lj_func.c lj_udata.c \
|
||||||
lj_udata.c lj_meta.c lj_state.c lj_mcode.h lj_lex.h lj_alloc.h \
|
lj_meta.c lj_state.c lj_mcode.h lj_lex.h lj_alloc.h lj_dispatch.c \
|
||||||
lj_dispatch.c lj_ff.h lj_ffdef.h luajit.h lj_vmevent.c lj_vmevent.h \
|
lj_ff.h lj_ffdef.h luajit.h lj_vmevent.c lj_vmevent.h lj_api.c \
|
||||||
lj_api.c lj_parse.h lj_lex.c lj_parse.c lj_lib.c lj_lib.h lj_ir.c \
|
lj_parse.h lj_lex.c lj_parse.c lj_lib.c lj_lib.h lj_ir.c lj_iropt.h \
|
||||||
lj_iropt.h lj_opt_mem.c lj_opt_fold.c lj_folddef.h lj_opt_narrow.c \
|
lj_opt_mem.c lj_opt_fold.c lj_folddef.h lj_opt_narrow.c lj_opt_dce.c \
|
||||||
lj_opt_dce.c lj_opt_loop.c lj_snap.h lj_mcode.c lj_snap.c lj_target.h \
|
lj_opt_loop.c lj_snap.h lj_mcode.c lj_snap.c lj_target.h lj_target_*.h \
|
||||||
lj_target_*.h lj_record.c lj_record.h lj_asm.h lj_recdef.h lj_asm.c \
|
lj_record.c lj_record.h lj_asm.h lj_recdef.h lj_asm.c lj_trace.c \
|
||||||
lj_trace.c lj_gdbjit.h lj_gdbjit.c lj_alloc.c lib_aux.c lib_base.c \
|
lj_gdbjit.h lj_gdbjit.c lj_alloc.c lib_aux.c lib_base.c lualib.h \
|
||||||
lualib.h lj_libdef.h lib_math.c lib_string.c lib_table.c lib_io.c \
|
lj_libdef.h lib_math.c lib_string.c lib_table.c lib_io.c lib_os.c \
|
||||||
lib_os.c lib_package.c lib_debug.c lib_bit.c lib_jit.c lib_init.c
|
lib_package.c lib_debug.c lib_bit.c lib_jit.c lib_init.c
|
||||||
luajit.o: luajit.c lua.h luaconf.h lauxlib.h lualib.h luajit.h
|
luajit.o: luajit.c lua.h luaconf.h lauxlib.h lualib.h luajit.h
|
||||||
|
@ -25,7 +25,7 @@
|
|||||||
#include "lj_bc.h"
|
#include "lj_bc.h"
|
||||||
#include "lj_ff.h"
|
#include "lj_ff.h"
|
||||||
#include "lj_dispatch.h"
|
#include "lj_dispatch.h"
|
||||||
#include "lj_ctype.h"
|
#include "lj_char.h"
|
||||||
#include "lj_lib.h"
|
#include "lj_lib.h"
|
||||||
|
|
||||||
/* -- Base library: checks ------------------------------------------------ */
|
/* -- Base library: checks ------------------------------------------------ */
|
||||||
@ -197,7 +197,7 @@ LJLIB_ASM(tonumber) LJLIB_REC(.)
|
|||||||
lj_err_arg(L, 2, LJ_ERR_BASERNG);
|
lj_err_arg(L, 2, LJ_ERR_BASERNG);
|
||||||
ul = strtoul(p, &ep, base);
|
ul = strtoul(p, &ep, base);
|
||||||
if (p != ep) {
|
if (p != ep) {
|
||||||
while (lj_ctype_isspace((unsigned char)(*ep))) ep++;
|
while (lj_char_isspace((unsigned char)(*ep))) ep++;
|
||||||
if (*ep == '\0') {
|
if (*ep == '\0') {
|
||||||
setnumV(L->base-1, cast_num(ul));
|
setnumV(L->base-1, cast_num(ul));
|
||||||
return FFH_RES(1);
|
return FFH_RES(1);
|
||||||
|
@ -22,7 +22,7 @@
|
|||||||
#include "lj_tab.h"
|
#include "lj_tab.h"
|
||||||
#include "lj_state.h"
|
#include "lj_state.h"
|
||||||
#include "lj_ff.h"
|
#include "lj_ff.h"
|
||||||
#include "lj_ctype.h"
|
#include "lj_char.h"
|
||||||
#include "lj_lib.h"
|
#include "lj_lib.h"
|
||||||
|
|
||||||
/* ------------------------------------------------------------------------ */
|
/* ------------------------------------------------------------------------ */
|
||||||
@ -181,9 +181,9 @@ static const char *classend(MatchState *ms, const char *p)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static const unsigned char match_class_map[32] = {
|
static const unsigned char match_class_map[32] = {
|
||||||
0, LJ_CTYPE_ALPHA, 0, LJ_CTYPE_CNTRL, LJ_CTYPE_DIGIT, 0,0,0,0,0,0,0,
|
0, LJ_CHAR_ALPHA, 0, LJ_CHAR_CNTRL, LJ_CHAR_DIGIT, 0,0,0,0,0,0,0,
|
||||||
LJ_CTYPE_LOWER, 0,0,0, LJ_CTYPE_PUNCT, 0,0, LJ_CTYPE_SPACE, 0,
|
LJ_CHAR_LOWER, 0,0,0, LJ_CHAR_PUNCT, 0,0, LJ_CHAR_SPACE, 0,
|
||||||
LJ_CTYPE_UPPER, 0, LJ_CTYPE_ALNUM, LJ_CTYPE_XDIGIT, 0,0,0,0,0,0,0
|
LJ_CHAR_UPPER, 0, LJ_CHAR_ALNUM, LJ_CHAR_XDIGIT, 0,0,0,0,0,0,0
|
||||||
};
|
};
|
||||||
|
|
||||||
static int match_class(int c, int cl)
|
static int match_class(int c, int cl)
|
||||||
@ -191,7 +191,7 @@ static int match_class(int c, int cl)
|
|||||||
if ((cl & 0xc0) == 0x40) {
|
if ((cl & 0xc0) == 0x40) {
|
||||||
int t = match_class_map[(cl&0x1f)];
|
int t = match_class_map[(cl&0x1f)];
|
||||||
if (t) {
|
if (t) {
|
||||||
t = lj_ctype_isa(c, t);
|
t = lj_char_isa(c, t);
|
||||||
return (cl & 0x20) ? t : !t;
|
return (cl & 0x20) ? t : !t;
|
||||||
}
|
}
|
||||||
if (cl == 'z') return c == 0;
|
if (cl == 'z') return c == 0;
|
||||||
@ -353,7 +353,7 @@ static const char *match(MatchState *ms, const char *s, const char *p)
|
|||||||
goto init; /* else return match(ms, s, ep); */
|
goto init; /* else return match(ms, s, ep); */
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
if (lj_ctype_isdigit(uchar(*(p+1)))) { /* capture results (%0-%9)? */
|
if (lj_char_isdigit(uchar(*(p+1)))) { /* capture results (%0-%9)? */
|
||||||
s = match_capture(ms, s, uchar(*(p+1)));
|
s = match_capture(ms, s, uchar(*(p+1)));
|
||||||
if (s == NULL) return NULL;
|
if (s == NULL) return NULL;
|
||||||
p+=2;
|
p+=2;
|
||||||
@ -549,7 +549,7 @@ static void add_s(MatchState *ms, luaL_Buffer *b, const char *s, const char *e)
|
|||||||
luaL_addchar(b, news[i]);
|
luaL_addchar(b, news[i]);
|
||||||
} else {
|
} else {
|
||||||
i++; /* skip ESC */
|
i++; /* skip ESC */
|
||||||
if (!lj_ctype_isdigit(uchar(news[i]))) {
|
if (!lj_char_isdigit(uchar(news[i]))) {
|
||||||
luaL_addchar(b, news[i]);
|
luaL_addchar(b, news[i]);
|
||||||
} else if (news[i] == '0') {
|
} else if (news[i] == '0') {
|
||||||
luaL_addlstring(b, s, (size_t)(e - s));
|
luaL_addlstring(b, s, (size_t)(e - s));
|
||||||
@ -679,14 +679,14 @@ static const char *scanformat(lua_State *L, const char *strfrmt, char *form)
|
|||||||
while (*p != '\0' && strchr(FMT_FLAGS, *p) != NULL) p++; /* skip flags */
|
while (*p != '\0' && strchr(FMT_FLAGS, *p) != NULL) p++; /* skip flags */
|
||||||
if ((size_t)(p - strfrmt) >= sizeof(FMT_FLAGS))
|
if ((size_t)(p - strfrmt) >= sizeof(FMT_FLAGS))
|
||||||
lj_err_caller(L, LJ_ERR_STRFMTR);
|
lj_err_caller(L, LJ_ERR_STRFMTR);
|
||||||
if (lj_ctype_isdigit(uchar(*p))) p++; /* skip width */
|
if (lj_char_isdigit(uchar(*p))) p++; /* skip width */
|
||||||
if (lj_ctype_isdigit(uchar(*p))) p++; /* (2 digits at most) */
|
if (lj_char_isdigit(uchar(*p))) p++; /* (2 digits at most) */
|
||||||
if (*p == '.') {
|
if (*p == '.') {
|
||||||
p++;
|
p++;
|
||||||
if (lj_ctype_isdigit(uchar(*p))) p++; /* skip precision */
|
if (lj_char_isdigit(uchar(*p))) p++; /* skip precision */
|
||||||
if (lj_ctype_isdigit(uchar(*p))) p++; /* (2 digits at most) */
|
if (lj_char_isdigit(uchar(*p))) p++; /* (2 digits at most) */
|
||||||
}
|
}
|
||||||
if (lj_ctype_isdigit(uchar(*p)))
|
if (lj_char_isdigit(uchar(*p)))
|
||||||
lj_err_caller(L, LJ_ERR_STRFMTW);
|
lj_err_caller(L, LJ_ERR_STRFMTW);
|
||||||
*(form++) = '%';
|
*(form++) = '%';
|
||||||
strncpy(form, strfrmt, (size_t)(p - strfrmt + 1));
|
strncpy(form, strfrmt, (size_t)(p - strfrmt + 1));
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
** Internal CTYPE replacement.
|
** Character types.
|
||||||
** Donated to the public domain.
|
** Donated to the public domain.
|
||||||
**
|
**
|
||||||
** This is intended to replace the problematic libc single-byte NLS functions.
|
** This is intended to replace the problematic libc single-byte NLS functions.
|
||||||
@ -7,22 +7,21 @@
|
|||||||
** on POSIX systems. It never worked too well on Windows systems since hardly
|
** on POSIX systems. It never worked too well on Windows systems since hardly
|
||||||
** anyone bothered to call setlocale().
|
** anyone bothered to call setlocale().
|
||||||
**
|
**
|
||||||
** Instead this table is hardcoded for ASCII, except for identifiers. These
|
** This table is hardcoded for ASCII. Identifiers include the characters
|
||||||
** include the characters 128-255, too. This allows for the use of all
|
** 128-255, too. This allows for the use of all non-ASCII chars as identifiers
|
||||||
** non-ASCII chars as identifiers in the lexer. This is a broad definition,
|
** in the lexer. This is a broad definition, but works well in practice
|
||||||
** but works well in practice for both UTF-8 locales and most single-byte
|
** for both UTF-8 locales and most single-byte locales (such as ISO-8859-*).
|
||||||
** locales (such as ISO-8859-*).
|
|
||||||
**
|
**
|
||||||
** If you really need proper ctypes for UTF-8 strings, please use an add-on
|
** If you really need proper character types for UTF-8 strings, please use
|
||||||
** library such as slnunicode: http://luaforge.net/projects/sln/
|
** an add-on library such as slnunicode: http://luaforge.net/projects/sln/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define lj_ctype_c
|
#define lj_char_c
|
||||||
#define LUA_CORE
|
#define LUA_CORE
|
||||||
|
|
||||||
#include "lj_ctype.h"
|
#include "lj_char.h"
|
||||||
|
|
||||||
LJ_DATADEF const uint8_t lj_ctype_bits[257] = {
|
LJ_DATADEF const uint8_t lj_char_bits[257] = {
|
||||||
0,
|
0,
|
||||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 1, 1,
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 1, 1,
|
||||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
40
src/lj_char.h
Normal file
40
src/lj_char.h
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
/*
|
||||||
|
** Character types.
|
||||||
|
** Donated to the public domain.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _LJ_CHAR_H
|
||||||
|
#define _LJ_CHAR_H
|
||||||
|
|
||||||
|
#include "lj_def.h"
|
||||||
|
|
||||||
|
#define LJ_CHAR_CNTRL 0x01
|
||||||
|
#define LJ_CHAR_SPACE 0x02
|
||||||
|
#define LJ_CHAR_PUNCT 0x04
|
||||||
|
#define LJ_CHAR_DIGIT 0x08
|
||||||
|
#define LJ_CHAR_XDIGIT 0x10
|
||||||
|
#define LJ_CHAR_UPPER 0x20
|
||||||
|
#define LJ_CHAR_LOWER 0x40
|
||||||
|
#define LJ_CHAR_IDENT 0x80
|
||||||
|
#define LJ_CHAR_ALPHA (LJ_CHAR_LOWER|LJ_CHAR_UPPER)
|
||||||
|
#define LJ_CHAR_ALNUM (LJ_CHAR_ALPHA|LJ_CHAR_DIGIT)
|
||||||
|
|
||||||
|
/* Only pass -1 or 0..255 to these macros. Never pass a signed char! */
|
||||||
|
#define lj_char_isa(c, t) (lj_char_bits[(c)+1] & t)
|
||||||
|
#define lj_char_iscntrl(c) lj_char_isa((c), LJ_CHAR_CNTRL)
|
||||||
|
#define lj_char_isspace(c) lj_char_isa((c), LJ_CHAR_SPACE)
|
||||||
|
#define lj_char_ispunct(c) lj_char_isa((c), LJ_CHAR_PUNCT)
|
||||||
|
#define lj_char_isdigit(c) lj_char_isa((c), LJ_CHAR_DIGIT)
|
||||||
|
#define lj_char_isxdigit(c) lj_char_isa((c), LJ_CHAR_XDIGIT)
|
||||||
|
#define lj_char_isupper(c) lj_char_isa((c), LJ_CHAR_UPPER)
|
||||||
|
#define lj_char_islower(c) lj_char_isa((c), LJ_CHAR_LOWER)
|
||||||
|
#define lj_char_isident(c) lj_char_isa((c), LJ_CHAR_IDENT)
|
||||||
|
#define lj_char_isalpha(c) lj_char_isa((c), LJ_CHAR_ALPHA)
|
||||||
|
#define lj_char_isalnum(c) lj_char_isa((c), LJ_CHAR_ALNUM)
|
||||||
|
|
||||||
|
#define lj_char_toupper(c) ((c) - (lj_char_islower(c) >> 1))
|
||||||
|
#define lj_char_tolower(c) ((c) + lj_char_isupper(c))
|
||||||
|
|
||||||
|
LJ_DATA const uint8_t lj_char_bits[257];
|
||||||
|
|
||||||
|
#endif
|
@ -1,40 +0,0 @@
|
|||||||
/*
|
|
||||||
** Internal CTYPE replacement.
|
|
||||||
** Donated to the public domain.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef _LJ_CTYPE_H
|
|
||||||
#define _LJ_CTYPE_H
|
|
||||||
|
|
||||||
#include "lj_def.h"
|
|
||||||
|
|
||||||
#define LJ_CTYPE_CNTRL 0x01
|
|
||||||
#define LJ_CTYPE_SPACE 0x02
|
|
||||||
#define LJ_CTYPE_PUNCT 0x04
|
|
||||||
#define LJ_CTYPE_DIGIT 0x08
|
|
||||||
#define LJ_CTYPE_XDIGIT 0x10
|
|
||||||
#define LJ_CTYPE_UPPER 0x20
|
|
||||||
#define LJ_CTYPE_LOWER 0x40
|
|
||||||
#define LJ_CTYPE_IDENT 0x80
|
|
||||||
#define LJ_CTYPE_ALPHA (LJ_CTYPE_LOWER|LJ_CTYPE_UPPER)
|
|
||||||
#define LJ_CTYPE_ALNUM (LJ_CTYPE_ALPHA|LJ_CTYPE_DIGIT)
|
|
||||||
|
|
||||||
/* Only pass -1 or 0..255 to these macros. Never pass a signed char! */
|
|
||||||
#define lj_ctype_isa(c, t) (lj_ctype_bits[(c)+1] & t)
|
|
||||||
#define lj_ctype_iscntrl(c) lj_ctype_isa((c), LJ_CTYPE_CNTRL)
|
|
||||||
#define lj_ctype_isspace(c) lj_ctype_isa((c), LJ_CTYPE_SPACE)
|
|
||||||
#define lj_ctype_ispunct(c) lj_ctype_isa((c), LJ_CTYPE_PUNCT)
|
|
||||||
#define lj_ctype_isdigit(c) lj_ctype_isa((c), LJ_CTYPE_DIGIT)
|
|
||||||
#define lj_ctype_isxdigit(c) lj_ctype_isa((c), LJ_CTYPE_XDIGIT)
|
|
||||||
#define lj_ctype_isupper(c) lj_ctype_isa((c), LJ_CTYPE_UPPER)
|
|
||||||
#define lj_ctype_islower(c) lj_ctype_isa((c), LJ_CTYPE_LOWER)
|
|
||||||
#define lj_ctype_isident(c) lj_ctype_isa((c), LJ_CTYPE_IDENT)
|
|
||||||
#define lj_ctype_isalpha(c) lj_ctype_isa((c), LJ_CTYPE_ALPHA)
|
|
||||||
#define lj_ctype_isalnum(c) lj_ctype_isa((c), LJ_CTYPE_ALNUM)
|
|
||||||
|
|
||||||
#define lj_ctype_toupper(c) ((c) - (lj_ctype_islower(c) >> 1))
|
|
||||||
#define lj_ctype_tolower(c) ((c) + lj_ctype_isupper(c))
|
|
||||||
|
|
||||||
LJ_DATA const uint8_t lj_ctype_bits[257];
|
|
||||||
|
|
||||||
#endif
|
|
20
src/lj_lex.c
20
src/lj_lex.c
@ -15,7 +15,7 @@
|
|||||||
#include "lj_str.h"
|
#include "lj_str.h"
|
||||||
#include "lj_lex.h"
|
#include "lj_lex.h"
|
||||||
#include "lj_parse.h"
|
#include "lj_parse.h"
|
||||||
#include "lj_ctype.h"
|
#include "lj_char.h"
|
||||||
|
|
||||||
/* Lua lexer token names. */
|
/* Lua lexer token names. */
|
||||||
static const char *const tokennames[] = {
|
static const char *const tokennames[] = {
|
||||||
@ -80,11 +80,11 @@ static void inclinenumber(LexState *ls)
|
|||||||
static void read_numeral(LexState *ls, TValue *tv)
|
static void read_numeral(LexState *ls, TValue *tv)
|
||||||
{
|
{
|
||||||
int c;
|
int c;
|
||||||
lua_assert(lj_ctype_isdigit(ls->current));
|
lua_assert(lj_char_isdigit(ls->current));
|
||||||
do {
|
do {
|
||||||
c = ls->current;
|
c = ls->current;
|
||||||
save_and_next(ls);
|
save_and_next(ls);
|
||||||
} while (lj_ctype_isident(ls->current) || ls->current == '.' ||
|
} while (lj_char_isident(ls->current) || ls->current == '.' ||
|
||||||
((ls->current == '-' || ls->current == '+') &&
|
((ls->current == '-' || ls->current == '+') &&
|
||||||
((c & ~0x20) == 'E' || (c & ~0x20) == 'P')));
|
((c & ~0x20) == 'E' || (c & ~0x20) == 'P')));
|
||||||
save(ls, '\0');
|
save(ls, '\0');
|
||||||
@ -166,7 +166,7 @@ static void read_string(LexState *ls, int delim, TValue *tv)
|
|||||||
case '\n': case '\r': save(ls, '\n'); inclinenumber(ls); continue;
|
case '\n': case '\r': save(ls, '\n'); inclinenumber(ls); continue;
|
||||||
case END_OF_STREAM: continue; /* will raise an error next loop */
|
case END_OF_STREAM: continue; /* will raise an error next loop */
|
||||||
default:
|
default:
|
||||||
if (!lj_ctype_isdigit(ls->current)) {
|
if (!lj_char_isdigit(ls->current)) {
|
||||||
save_and_next(ls); /* handles \\, \", \', and \? */
|
save_and_next(ls); /* handles \\, \", \', and \? */
|
||||||
} else { /* \xxx */
|
} else { /* \xxx */
|
||||||
int i = 0;
|
int i = 0;
|
||||||
@ -174,7 +174,7 @@ static void read_string(LexState *ls, int delim, TValue *tv)
|
|||||||
do {
|
do {
|
||||||
c = 10*c + (ls->current-'0');
|
c = 10*c + (ls->current-'0');
|
||||||
next(ls);
|
next(ls);
|
||||||
} while (++i<3 && lj_ctype_isdigit(ls->current));
|
} while (++i<3 && lj_char_isdigit(ls->current));
|
||||||
if (c > 255)
|
if (c > 255)
|
||||||
lj_lex_error(ls, TK_string, LJ_ERR_XESC);
|
lj_lex_error(ls, TK_string, LJ_ERR_XESC);
|
||||||
save(ls, c);
|
save(ls, c);
|
||||||
@ -200,16 +200,16 @@ static int llex(LexState *ls, TValue *tv)
|
|||||||
{
|
{
|
||||||
lj_str_resetbuf(&ls->sb);
|
lj_str_resetbuf(&ls->sb);
|
||||||
for (;;) {
|
for (;;) {
|
||||||
if (lj_ctype_isident(ls->current)) {
|
if (lj_char_isident(ls->current)) {
|
||||||
GCstr *s;
|
GCstr *s;
|
||||||
if (lj_ctype_isdigit(ls->current)) { /* Numeric literal. */
|
if (lj_char_isdigit(ls->current)) { /* Numeric literal. */
|
||||||
read_numeral(ls, tv);
|
read_numeral(ls, tv);
|
||||||
return TK_number;
|
return TK_number;
|
||||||
}
|
}
|
||||||
/* Identifier or reserved word. */
|
/* Identifier or reserved word. */
|
||||||
do {
|
do {
|
||||||
save_and_next(ls);
|
save_and_next(ls);
|
||||||
} while (lj_ctype_isident(ls->current));
|
} while (lj_char_isident(ls->current));
|
||||||
s = lj_parse_keepstr(ls, ls->sb.buf, ls->sb.n);
|
s = lj_parse_keepstr(ls, ls->sb.buf, ls->sb.n);
|
||||||
if (s->reserved > 0) /* Reserved word? */
|
if (s->reserved > 0) /* Reserved word? */
|
||||||
return TK_OFS + s->reserved;
|
return TK_OFS + s->reserved;
|
||||||
@ -282,7 +282,7 @@ static int llex(LexState *ls, TValue *tv)
|
|||||||
return TK_dots; /* ... */
|
return TK_dots; /* ... */
|
||||||
}
|
}
|
||||||
return TK_concat; /* .. */
|
return TK_concat; /* .. */
|
||||||
} else if (!lj_ctype_isdigit(ls->current)) {
|
} else if (!lj_char_isdigit(ls->current)) {
|
||||||
return '.';
|
return '.';
|
||||||
} else {
|
} else {
|
||||||
read_numeral(ls, tv);
|
read_numeral(ls, tv);
|
||||||
@ -369,7 +369,7 @@ const char *lj_lex_token2str(LexState *ls, LexToken token)
|
|||||||
{
|
{
|
||||||
if (token > TK_OFS)
|
if (token > TK_OFS)
|
||||||
return tokennames[token-TK_OFS-1];
|
return tokennames[token-TK_OFS-1];
|
||||||
else if (!lj_ctype_iscntrl(token))
|
else if (!lj_char_iscntrl(token))
|
||||||
return lj_str_pushf(ls->L, "%c", token);
|
return lj_str_pushf(ls->L, "%c", token);
|
||||||
else
|
else
|
||||||
return lj_str_pushf(ls->L, "char(%d)", token);
|
return lj_str_pushf(ls->L, "char(%d)", token);
|
||||||
|
14
src/lj_str.c
14
src/lj_str.c
@ -16,7 +16,7 @@
|
|||||||
#include "lj_err.h"
|
#include "lj_err.h"
|
||||||
#include "lj_str.h"
|
#include "lj_str.h"
|
||||||
#include "lj_state.h"
|
#include "lj_state.h"
|
||||||
#include "lj_ctype.h"
|
#include "lj_char.h"
|
||||||
|
|
||||||
/* -- String interning ---------------------------------------------------- */
|
/* -- String interning ---------------------------------------------------- */
|
||||||
|
|
||||||
@ -180,27 +180,27 @@ int LJ_FASTCALL lj_str_numconv(const char *s, TValue *n)
|
|||||||
{
|
{
|
||||||
lua_Number sign = 1;
|
lua_Number sign = 1;
|
||||||
const uint8_t *p = (const uint8_t *)s;
|
const uint8_t *p = (const uint8_t *)s;
|
||||||
while (lj_ctype_isspace(*p)) p++;
|
while (lj_char_isspace(*p)) p++;
|
||||||
if (*p == '-') { p++; sign = -1; } else if (*p == '+') { p++; }
|
if (*p == '-') { p++; sign = -1; } else if (*p == '+') { p++; }
|
||||||
if ((uint32_t)(*p - '0') < 10) {
|
if ((uint32_t)(*p - '0') < 10) {
|
||||||
uint32_t k = (uint32_t)(*p++ - '0');
|
uint32_t k = (uint32_t)(*p++ - '0');
|
||||||
if (k == 0 && ((*p & ~0x20) == 'X')) {
|
if (k == 0 && ((*p & ~0x20) == 'X')) {
|
||||||
p++;
|
p++;
|
||||||
if (!lj_ctype_isxdigit(*p))
|
if (!lj_char_isxdigit(*p))
|
||||||
return 0; /* Don't accept '0x' without hex digits. */
|
return 0; /* Don't accept '0x' without hex digits. */
|
||||||
do {
|
do {
|
||||||
if (k >= 0x10000000) goto parsedbl;
|
if (k >= 0x10000000) goto parsedbl;
|
||||||
k = (k << 4) + (*p & 15u);
|
k = (k << 4) + (*p & 15u);
|
||||||
if (!lj_ctype_isdigit(*p)) k += 9;
|
if (!lj_char_isdigit(*p)) k += 9;
|
||||||
p++;
|
p++;
|
||||||
} while (lj_ctype_isxdigit(*p));
|
} while (lj_char_isxdigit(*p));
|
||||||
} else {
|
} else {
|
||||||
while ((uint32_t)(*p - '0') < 10) {
|
while ((uint32_t)(*p - '0') < 10) {
|
||||||
if (k >= 0x19999999) goto parsedbl;
|
if (k >= 0x19999999) goto parsedbl;
|
||||||
k = k * 10u + (uint32_t)(*p++ - '0');
|
k = k * 10u + (uint32_t)(*p++ - '0');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
while (LJ_UNLIKELY(lj_ctype_isspace(*p))) p++;
|
while (LJ_UNLIKELY(lj_char_isspace(*p))) p++;
|
||||||
if (LJ_LIKELY(*p == '\0')) {
|
if (LJ_LIKELY(*p == '\0')) {
|
||||||
setnumV(n, sign * cast_num(k));
|
setnumV(n, sign * cast_num(k));
|
||||||
return 1;
|
return 1;
|
||||||
@ -213,7 +213,7 @@ parsedbl:
|
|||||||
setnumV(&tv, lua_str2number(s, &endptr));
|
setnumV(&tv, lua_str2number(s, &endptr));
|
||||||
if (endptr == s) return 0; /* Conversion failed. */
|
if (endptr == s) return 0; /* Conversion failed. */
|
||||||
if (LJ_UNLIKELY(*endptr != '\0')) {
|
if (LJ_UNLIKELY(*endptr != '\0')) {
|
||||||
while (lj_ctype_isspace((uint8_t)*endptr)) endptr++;
|
while (lj_char_isspace((uint8_t)*endptr)) endptr++;
|
||||||
if (*endptr != '\0') return 0; /* Invalid trailing characters? */
|
if (*endptr != '\0') return 0; /* Invalid trailing characters? */
|
||||||
}
|
}
|
||||||
if (LJ_LIKELY(!tvisnan(&tv)))
|
if (LJ_LIKELY(!tvisnan(&tv)))
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
|
|
||||||
#include "lj_gc.c"
|
#include "lj_gc.c"
|
||||||
#include "lj_err.c"
|
#include "lj_err.c"
|
||||||
#include "lj_ctype.c"
|
#include "lj_char.c"
|
||||||
#include "lj_bc.c"
|
#include "lj_bc.c"
|
||||||
#include "lj_obj.c"
|
#include "lj_obj.c"
|
||||||
#include "lj_str.c"
|
#include "lj_str.c"
|
||||||
|
Loading…
Reference in New Issue
Block a user