diff options
author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2000-03-17 11:46:04 -0300 |
---|---|---|
committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2000-03-17 11:46:04 -0300 |
commit | da7eb34cd621325066df3e99a9af39fa0d036a85 (patch) | |
tree | a7652217aa194c5c5f21b9fa6f102ea96a162638 | |
parent | 2c8e28d75a09fb6de3c3b16a64561a0103866cea (diff) | |
download | lua-da7eb34cd621325066df3e99a9af39fa0d036a85.tar.gz lua-da7eb34cd621325066df3e99a9af39fa0d036a85.tar.bz2 lua-da7eb34cd621325066df3e99a9af39fa0d036a85.zip |
optimization for "while 1" and "repeat until nil"
-rw-r--r-- | lcode.c | 21 |
1 files changed, 18 insertions, 3 deletions
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | ** $Id: lcode.c,v 1.13 2000/03/16 18:03:09 roberto Exp roberto $ | 2 | ** $Id: lcode.c,v 1.14 2000/03/17 13:09:46 roberto Exp roberto $ |
3 | ** Code generator for Lua | 3 | ** Code generator for Lua |
4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
5 | */ | 5 | */ |
@@ -337,8 +337,23 @@ static OpCode invertjump (OpCode op) { | |||
337 | 337 | ||
338 | static void luaK_jump (FuncState *fs, OpCode jump) { | 338 | static void luaK_jump (FuncState *fs, OpCode jump) { |
339 | Instruction previous = prepare(fs, CREATE_S(jump, 0), -1); | 339 | Instruction previous = prepare(fs, CREATE_S(jump, 0), -1); |
340 | if (previous == CREATE_0(OP_NOT)) | 340 | switch (GET_OPCODE(previous)) { |
341 | setprevious(fs, CREATE_S(invertjump(jump), 0)); | 341 | case OP_NOT: previous = CREATE_S(invertjump(jump), 0); break; |
342 | case OP_PUSHINT: | ||
343 | if (jump == OP_IFTJMP) { | ||
344 | previous = CREATE_S(OP_JMP, 0); | ||
345 | break; | ||
346 | } | ||
347 | else return; /* do not set previous */ | ||
348 | case OP_PUSHNIL: | ||
349 | if (jump == OP_IFFJMP) { | ||
350 | previous = CREATE_S(OP_JMP, 0); | ||
351 | break; | ||
352 | } | ||
353 | else return; /* do not set previous */ | ||
354 | default: return; | ||
355 | } | ||
356 | setprevious(fs, previous); | ||
342 | } | 357 | } |
343 | 358 | ||
344 | 359 | ||