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 /lcode.c | |
| parent | 2c8e28d75a09fb6de3c3b16a64561a0103866cea (diff) | |
| download | lua-da7eb34cd621325066df3e99a9af39fa0d036a85.tar.gz lua-da7eb34cd621325066df3e99a9af39fa0d036a85.tar.bz2 lua-da7eb34cd621325066df3e99a9af39fa0d036a85.zip | |
optimization for "while 1" and "repeat until nil"
Diffstat (limited to 'lcode.c')
| -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 | ||
