From 0280407fc54f9b6225139c5ac27326f98f0cf043 Mon Sep 17 00:00:00 2001 From: Roberto Ierusalimschy Date: Fri, 3 Jul 2020 13:02:41 -0300 Subject: [PATCH] Details Comments in makefile and function 'l_str2d'. --- lobject.c | 21 +++++++++++++-------- makefile | 19 ++++++++++--------- 2 files changed, 23 insertions(+), 17 deletions(-) diff --git a/lobject.c b/lobject.c index 223bbd0c..f8ea917a 100644 --- a/lobject.c +++ b/lobject.c @@ -220,32 +220,37 @@ static lua_Number lua_strx2number (const char *s, char **endptr) { #define L_MAXLENNUM 200 #endif +/* +** Convert string 's' to a Lua number (put in 'result'). Return NULL on +** fail or the address of the ending '\0' on success. ('mode' == 'x') +** means a hexadecimal numeral. +*/ static const char *l_str2dloc (const char *s, lua_Number *result, int mode) { char *endptr; *result = (mode == 'x') ? lua_strx2number(s, &endptr) /* try to convert */ : lua_str2number(s, &endptr); if (endptr == s) return NULL; /* nothing recognized? */ while (lisspace(cast_uchar(*endptr))) endptr++; /* skip trailing spaces */ - return (*endptr == '\0') ? endptr : NULL; /* OK if no trailing characters */ + return (*endptr == '\0') ? endptr : NULL; /* OK iff no trailing chars */ } /* -** Convert string 's' to a Lua number (put in 'result'). Return NULL -** on fail or the address of the ending '\0' on success. -** 'pmode' points to (and 'mode' contains) special things in the string: -** - 'x'/'X' means a hexadecimal numeral -** - 'n'/'N' means 'inf' or 'nan' (which should be rejected) -** - '.' just optimizes the search for the common case (nothing special) +** Convert string 's' to a Lua number (put in 'result') handling the +** current locale. ** This function accepts both the current locale or a dot as the radix ** mark. If the conversion fails, it may mean number has a dot but ** locale accepts something else. In that case, the code copies 's' ** to a buffer (because 's' is read-only), changes the dot to the ** current locale radix mark, and tries to convert again. +** The variable 'mode' checks for special characters in the string: +** - 'n' means 'inf' or 'nan' (which should be rejected) +** - 'x' means a hexadecimal numeral +** - '.' just optimizes the search for the common case (no special chars) */ static const char *l_str2d (const char *s, lua_Number *result) { const char *endptr; - const char *pmode = strpbrk(s, ".xXnN"); + const char *pmode = strpbrk(s, ".xXnN"); /* look for special chars */ int mode = pmode ? ltolower(cast_uchar(*pmode)) : 0; if (mode == 'n') /* reject 'inf' and 'nan' */ return NULL; diff --git a/makefile b/makefile index 9be23925..baa6e673 100644 --- a/makefile +++ b/makefile @@ -37,10 +37,15 @@ CWARNSC= -Wdeclaration-after-statement \ CWARNS= $(CWARNSCPP) $(CWARNSC) +# Some useful compiler options for internal tests: +# -DHARDSTACKTESTS forces a reallocation of the stack at every point where +# the stack can be reallocated. +# -DHARDMEMTESTS forces an emergency collection at every single allocation. +# -DEXTERNMEMCHECK removes internal consistency checking of blocks being +# deallocated (useful when an external tool like valgrind does the check). +# -DMAXINDEXRK=k limits range of constants in RK instruction operands. +# -DLUA_COMPAT_5_3 -# -DEXTERNMEMCHECK -DHARDSTACKTESTS -DHARDMEMTESTS -DTRACEMEM='"tempmem"' -# -DMAXINDEXRK=1 -DLUA_COMPAT_5_3 -# -g -DLUA_USER_H='"ltests.h"' # -pg -malign-double # -DLUA_USE_CTYPE -DLUA_USE_APICHECK # ('-ftrapv' for runtime checks of integer overflows) @@ -81,11 +86,9 @@ LIB_O= lbaselib.o ldblib.o liolib.o lmathlib.o loslib.o ltablib.o lstrlib.o \ LUA_T= lua LUA_O= lua.o -# LUAC_T= luac -# LUAC_O= luac.o print.o -ALL_T= $(CORE_T) $(LUA_T) $(LUAC_T) -ALL_O= $(CORE_O) $(LUA_O) $(LUAC_O) $(AUX_O) $(LIB_O) +ALL_T= $(CORE_T) $(LUA_T) +ALL_O= $(CORE_O) $(LUA_O) $(AUX_O) $(LIB_O) ALL_A= $(CORE_T) all: $(ALL_T) @@ -102,8 +105,6 @@ $(CORE_T): $(CORE_O) $(AUX_O) $(LIB_O) $(LUA_T): $(LUA_O) $(CORE_T) $(CC) -o $@ $(MYLDFLAGS) $(LUA_O) $(CORE_T) $(LIBS) $(MYLIBS) $(DL) -$(LUAC_T): $(LUAC_O) $(CORE_T) - $(CC) -o $@ $(MYLDFLAGS) $(LUAC_O) $(CORE_T) $(LIBS) $(MYLIBS) llex.o: $(CC) $(CFLAGS) -Os -c llex.c