summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lapi.c8
-rw-r--r--lobject.c6
-rw-r--r--lvm.c9
3 files changed, 9 insertions, 14 deletions
diff --git a/lapi.c b/lapi.c
index 184b8dd7..bbba88a3 100644
--- a/lapi.c
+++ b/lapi.c
@@ -1239,14 +1239,12 @@ LUA_API void lua_toclose (lua_State *L, int idx) {
LUA_API void lua_concat (lua_State *L, int n) {
lua_lock(L);
api_checknelems(L, n);
- if (n >= 2) {
+ if (n > 0)
luaV_concat(L, n);
- }
- else if (n == 0) { /* push empty string */
- setsvalue2s(L, L->top, luaS_newlstr(L, "", 0));
+ else { /* nothing to concatenate */
+ setsvalue2s(L, L->top, luaS_newlstr(L, "", 0)); /* push empty string */
api_incr_top(L);
}
- /* else n == 1; nothing to do */
luaC_checkGC(L);
lua_unlock(L);
}
diff --git a/lobject.c b/lobject.c
index 2a28ebd4..223bbd0c 100644
--- a/lobject.c
+++ b/lobject.c
@@ -402,10 +402,8 @@ static void pushstr (BuffFS *buff, const char *str, size_t l) {
setsvalue2s(L, L->top, luaS_newlstr(L, str, l));
L->top++; /* may use one extra slot */
buff->pushed++;
- if (buff->pushed > 1) {
- luaV_concat(L, buff->pushed); /* join partial results into one */
- buff->pushed = 1;
- }
+ luaV_concat(L, buff->pushed); /* join partial results into one */
+ buff->pushed = 1;
}
diff --git a/lvm.c b/lvm.c
index e7781dbf..ccbfbab5 100644
--- a/lvm.c
+++ b/lvm.c
@@ -634,7 +634,8 @@ static void copy2buff (StkId top, int n, char *buff) {
** from 'L->top - total' up to 'L->top - 1'.
*/
void luaV_concat (lua_State *L, int total) {
- lua_assert(total >= 2);
+ if (total == 1)
+ return; /* "all" values already concatenated */
do {
StkId top = L->top;
int n = 2; /* number of elements handled in this pass (at least 2) */
@@ -840,10 +841,8 @@ void luaV_finishOp (lua_State *L) {
int a = GETARG_A(inst); /* first element to concatenate */
int total = cast_int(top - 1 - (base + a)); /* yet to concatenate */
setobjs2s(L, top - 2, top); /* put TM result in proper position */
- if (total > 1) { /* are there elements to concat? */
- L->top = top - 1; /* top is one after last element (at top-2) */
- luaV_concat(L, total); /* concat them (may yield again) */
- }
+ L->top = top - 1; /* top is one after last element (at top-2) */
+ luaV_concat(L, total); /* concat them (may yield again) */
break;
}
default: {