summaryrefslogtreecommitdiffstats
path: root/lua/llex.c
diff options
context:
space:
mode:
Diffstat (limited to 'lua/llex.c')
-rw-r--r--lua/llex.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/lua/llex.c b/lua/llex.c
index c4d8c65..c4b820e 100644
--- a/lua/llex.c
+++ b/lua/llex.c
@@ -1,5 +1,5 @@
/*
-** $Id: llex.c,v 2.61 2012/01/23 23:05:51 roberto Exp $
+** $Id: llex.c,v 2.63.1.2 2013/08/30 15:49:41 roberto Exp $
** Lexical Analyzer
** See Copyright Notice in lua.h
*/
@@ -73,16 +73,16 @@ void luaX_init (lua_State *L) {
const char *luaX_token2str (LexState *ls, int token) {
- if (token < FIRST_RESERVED) {
+ 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);
}
else {
const char *s = luaX_tokens[token - FIRST_RESERVED];
- if (token < TK_EOS)
+ if (token < TK_EOS) /* fixed format (symbols and reserved words)? */
return luaO_pushfstring(ls->L, LUA_QS, s);
- else
+ else /* names, strings, and numerals */
return s;
}
}
@@ -133,6 +133,9 @@ TString *luaX_newstring (LexState *ls, const char *str, size_t l) {
setbvalue(o, 1); /* t[string] = true */
luaC_checkGC(L);
}
+ else { /* string already present */
+ ts = rawtsvalue(keyfromval(o)); /* re-use value previously stored */
+ }
L->top--; /* remove string from stack */
return ts;
}
@@ -313,7 +316,7 @@ static int readhexaesc (LexState *ls) {
int c[3], i; /* keep input for error message */
int r = 0; /* result accumulator */
c[0] = 'x'; /* for error message */
- for (i = 1; i < 3; i++) { /* read two hexa digits */
+ for (i = 1; i < 3; i++) { /* read two hexadecimal digits */
c[i] = next(ls);
if (!lisxdigit(c[i]))
escerror(ls, c, i + 1, "hexadecimal digit expected");