Better error messages for invalid operands in numeric 'for'

"Better" and similar to error messages for invalid function arguments.
  *old message: 'for' limit must be a number
  *new message: bad 'for' limit (number expected, got table)
This commit is contained in:
Roberto Ierusalimschy
2018-10-30 15:46:56 -03:00
parent 2316ec4c24
commit e073cbc2e5
4 changed files with 22 additions and 4 deletions

8
lvm.c
View File

@@ -1681,7 +1681,7 @@ void luaV_execute (lua_State *L, CallInfo *ci) {
int stopnow;
if (unlikely(!forlimit(plimit, &ilimit, 1, &stopnow))) {
savestate(L, ci); /* for the error message */
luaG_runerror(L, "'for' limit must be a number");
luaG_forerror(L, plimit, "limit");
}
initv = (stopnow ? 0 : ivalue(init));
setivalue(plimit, ilimit);
@@ -1732,13 +1732,13 @@ void luaV_execute (lua_State *L, CallInfo *ci) {
lua_Number ninit; lua_Number nlimit; lua_Number nstep;
savestate(L, ci); /* in case of errors */
if (unlikely(!tonumber(plimit, &nlimit)))
luaG_runerror(L, "'for' limit must be a number");
luaG_forerror(L, plimit, "limit");
setfltvalue(plimit, nlimit);
if (unlikely(!tonumber(pstep, &nstep)))
luaG_runerror(L, "'for' step must be a number");
luaG_forerror(L, pstep, "step");
setfltvalue(pstep, nstep);
if (unlikely(!tonumber(init, &ninit)))
luaG_runerror(L, "'for' initial value must be a number");
luaG_forerror(L, init, "initial value");
setfltvalue(init, luai_numsub(L, ninit, nstep));
}
pc += GETARG_Bx(i);