commit 56d45378796b881b638671655164a16bb8ad8a57
parent 18014ef2fdffc6b7a1418ce3accecb273acc4b6d
Author: Roberto Ierusalimschy <roberto@inf.puc-rio.br>
Date: Fri, 10 Oct 2014 19:22:39 -0300
'$c' in 'lua_pushfstring' prints non-printable characters with
their codes
Diffstat:
2 files changed, 8 insertions(+), 6 deletions(-)
diff --git a/llex.c b/llex.c
@@ -1,5 +1,5 @@
/*
-** $Id: llex.c,v 2.80 2014/07/18 13:36:14 roberto Exp roberto $
+** $Id: llex.c,v 2.81 2014/10/01 11:52:33 roberto Exp roberto $
** Lexical Analyzer
** See Copyright Notice in lua.h
*/
@@ -78,9 +78,8 @@ void luaX_init (lua_State *L) {
const char *luaX_token2str (LexState *ls, int token) {
if (token < FIRST_RESERVED) { /* single-byte symbols? */
- lua_assert(token == cast(unsigned char, token));
- return (lisprint(token)) ? luaO_pushfstring(ls->L, LUA_QL("%c"), token) :
- luaO_pushfstring(ls->L, "char(%d)", token);
+ lua_assert(token == cast_uchar(token));
+ return luaO_pushfstring(ls->L, LUA_QL("%c"), token);
}
else {
const char *s = luaX_tokens[token - FIRST_RESERVED];
diff --git a/lobject.c b/lobject.c
@@ -1,5 +1,5 @@
/*
-** $Id: lobject.c,v 2.90 2014/10/01 11:52:33 roberto Exp roberto $
+** $Id: lobject.c,v 2.91 2014/10/04 22:57:10 roberto Exp roberto $
** Some generic functions over Lua objects
** See Copyright Notice in lua.h
*/
@@ -377,7 +377,10 @@ const char *luaO_pushvfstring (lua_State *L, const char *fmt, va_list argp) {
}
case 'c': {
char buff = cast(char, va_arg(argp, int));
- pushstr(L, &buff, 1);
+ if (lisprint(cast_uchar(buff)))
+ pushstr(L, &buff, 1);
+ else /* non-printable character; print its code */
+ luaO_pushfstring(L, "<\\%d>", cast_uchar(buff));
break;
}
case 'd': {