nesting of long strings only in compatibility mode
This commit is contained in:
33
llex.c
33
llex.c
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
** $Id: llex.c,v 2.8 2004/12/03 20:44:19 roberto Exp roberto $
|
** $Id: llex.c,v 2.9 2004/12/03 20:54:12 roberto Exp roberto $
|
||||||
** Lexical Analyzer
|
** Lexical Analyzer
|
||||||
** See Copyright Notice in lua.h
|
** See Copyright Notice in lua.h
|
||||||
*/
|
*/
|
||||||
@@ -202,6 +202,7 @@ static int skip_sep (LexState *ls) {
|
|||||||
|
|
||||||
static void read_long_string (LexState *ls, SemInfo *seminfo, int sep) {
|
static void read_long_string (LexState *ls, SemInfo *seminfo, int sep) {
|
||||||
int cont = 0;
|
int cont = 0;
|
||||||
|
(void)(cont); /* avoid warnings when `cont' is not used */
|
||||||
save_and_next(ls); /* skip 2nd `[' */
|
save_and_next(ls); /* skip 2nd `[' */
|
||||||
if (currIsNewline(ls)) /* string starts with a newline? */
|
if (currIsNewline(ls)) /* string starts with a newline? */
|
||||||
inclinenumber(ls); /* skip it */
|
inclinenumber(ls); /* skip it */
|
||||||
@@ -211,28 +212,42 @@ static void read_long_string (LexState *ls, SemInfo *seminfo, int sep) {
|
|||||||
luaX_lexerror(ls, (seminfo) ? "unfinished long string" :
|
luaX_lexerror(ls, (seminfo) ? "unfinished long string" :
|
||||||
"unfinished long comment", TK_EOS);
|
"unfinished long comment", TK_EOS);
|
||||||
break; /* to avoid warnings */
|
break; /* to avoid warnings */
|
||||||
case '[':
|
#if defined(LUA_COMPAT_LSTR)
|
||||||
|
case '[': {
|
||||||
if (skip_sep(ls) == sep) {
|
if (skip_sep(ls) == sep) {
|
||||||
save_and_next(ls); /* skip 2nd `[' */
|
save_and_next(ls); /* skip 2nd `[' */
|
||||||
cont++;
|
cont++;
|
||||||
|
#if LUA_COMPAT_LSTR == 1
|
||||||
|
if (sep == 0)
|
||||||
|
luaX_lexerror(ls, "nesting of [[...]] is deprecated", '[');
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
continue;
|
break;
|
||||||
case ']':
|
}
|
||||||
|
#endif
|
||||||
|
case ']': {
|
||||||
if (skip_sep(ls) == sep) {
|
if (skip_sep(ls) == sep) {
|
||||||
save_and_next(ls); /* skip 2nd `]' */
|
save_and_next(ls); /* skip 2nd `]' */
|
||||||
if (cont-- == 0) goto endloop;
|
#if defined(LUA_COMPAT_LSTR) && LUA_COMPAT_LSTR == 2
|
||||||
|
cont--;
|
||||||
|
if (sep == 0 && cont >= 0) break;
|
||||||
|
#endif
|
||||||
|
goto endloop;
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
continue;
|
|
||||||
case '\n':
|
case '\n':
|
||||||
case '\r':
|
case '\r': {
|
||||||
save(ls, '\n');
|
save(ls, '\n');
|
||||||
inclinenumber(ls);
|
inclinenumber(ls);
|
||||||
if (!seminfo) luaZ_resetbuffer(ls->buff); /* avoid wasting space */
|
if (!seminfo) luaZ_resetbuffer(ls->buff); /* avoid wasting space */
|
||||||
continue;
|
break;
|
||||||
default:
|
}
|
||||||
|
default: {
|
||||||
if (seminfo) save_and_next(ls);
|
if (seminfo) save_and_next(ls);
|
||||||
else next(ls);
|
else next(ls);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
} endloop:
|
} endloop:
|
||||||
if (seminfo)
|
if (seminfo)
|
||||||
seminfo->ts = luaX_newstring(ls, luaZ_buffer(ls->buff) + (2 + sep),
|
seminfo->ts = luaX_newstring(ls, luaZ_buffer(ls->buff) + (2 + sep),
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
** $Id: luaconf.h,v 1.43 2005/04/07 13:52:45 roberto Exp roberto $
|
** $Id: luaconf.h,v 1.44 2005/04/25 19:24:10 roberto Exp roberto $
|
||||||
** Configuration file for Lua
|
** Configuration file for Lua
|
||||||
** See Copyright Notice in lua.h
|
** See Copyright Notice in lua.h
|
||||||
*/
|
*/
|
||||||
@@ -267,6 +267,13 @@
|
|||||||
*/
|
*/
|
||||||
#define LUA_COMPAT_VARARG 1
|
#define LUA_COMPAT_VARARG 1
|
||||||
|
|
||||||
|
/*
|
||||||
|
@@ LUA_COMPAT_LSTR controls compatibility with old long string nesting
|
||||||
|
@* facility.
|
||||||
|
** CHANGE it to 2 if you want the old behaviour, or undefine it to turn
|
||||||
|
** off the advisory error when nesting [[...]].
|
||||||
|
*/
|
||||||
|
#define LUA_COMPAT_LSTR 1
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ luai_apicheck is the assert macro used by the Lua-C API.
|
@@ luai_apicheck is the assert macro used by the Lua-C API.
|
||||||
|
|||||||
Reference in New Issue
Block a user