diff --git a/src/lj_meta.c b/src/lj_meta.c index c72673cbee..69071454b2 100644 --- a/src/lj_meta.c +++ b/src/lj_meta.c @@ -246,14 +246,14 @@ TValue *lj_meta_cat(lua_State *L, TValue *top, int left) if (left < 0) { left = -left; fromc = 1; } #if LJ_HASFFI && defined(LJMAD_RANGE_SYNTAX) /* LD: 2016.05.14 */ if (tvisnumber(top) && tvisnumber(top-1) && - (left == 2 || (left == 3 && tvisnumber(top-2)))) { + (left == 1 || (left == 2 && tvisnumber(top-2)))) { /* Convert 2-3 concatenated numbers into a range, see also rec_cat. */ if (!ljmad_range_id) { GCstr *name = lj_str_newlit(L, "range"); CTState *cts = ctype_cts(L); CType *ct; CTypeID id = lj_ctype_getname(cts, &ct, name, 1u<info)); // fprintf(stderr, "**** id=%d, ctinfo=0x%x, is_struct=%d, name=%s\n",id, // ct->info, ctype_isstruct(ct->info), strdata(gcrefp(cts->tab[id].name,GCstr))); @@ -262,10 +262,10 @@ TValue *lj_meta_cat(lua_State *L, TValue *top, int left) /* Allocate cdata struct range. */ GCcdata *cd = lj_cdata_new(ctype_cts(L), ljmad_range_id, 3*sizeof(double)); /* Copy start, stop[, step], default step is 1. */ - top -= left-1; + top -= left; ((double *)cdataptr(cd))[0] = numV(top); ((double *)cdataptr(cd))[1] = numV(top+1); - ((double *)cdataptr(cd))[2] = left == 2 ? 1 : numV(top+2); + ((double *)cdataptr(cd))[2] = left == 1 ? 1 : numV(top+2); setcdataV(L, top, cd); } else #endif