From 9b37a4695ebf50b37b5b4fb279ae948f23b5b6a0 Mon Sep 17 00:00:00 2001 From: Roberto Ierusalimschy Date: Tue, 19 Mar 2019 10:53:18 -0300 Subject: New semantics for the integer 'for' loop The numerical 'for' loop over integers now uses a precomputed counter to control its number of iteractions. This change eliminates several weird cases caused by overflows (wrap-around) in the control variable. (It also ensures that every integer loop halts.) Also, the special opcodes for the usual case of step==1 were removed. (The new code is already somewhat complex for the usual case, but efficient.) --- lopcodes.c | 2 -- 1 file changed, 2 deletions(-) (limited to 'lopcodes.c') diff --git a/lopcodes.c b/lopcodes.c index 3f0d551a..c35a0aaf 100644 --- a/lopcodes.c +++ b/lopcodes.c @@ -93,8 +93,6 @@ LUAI_DDEF const lu_byte luaP_opmodes[NUM_OPCODES] = { ,opmode(0, 1, 0, 0, iABC) /* OP_RETURN */ ,opmode(0, 0, 0, 0, iABC) /* OP_RETURN0 */ ,opmode(0, 0, 0, 0, iABC) /* OP_RETURN1 */ - ,opmode(0, 0, 0, 1, iABx) /* OP_FORLOOP1 */ - ,opmode(0, 0, 0, 1, iABx) /* OP_FORPREP1 */ ,opmode(0, 0, 0, 1, iABx) /* OP_FORLOOP */ ,opmode(0, 0, 0, 1, iABx) /* OP_FORPREP */ ,opmode(0, 0, 0, 0, iABx) /* OP_TFORPREP */ -- cgit v1.2.3-55-g6feb