[Python-Dev] The purpose of SETUP_LOOP, BREAK_LOOP, CONTINUE_LOOP
Antoine Pitrou
solipsis at pitrou.net
Sat Mar 12 11:59:01 CET 2011
More information about the Python-Dev mailing list
Sat Mar 12 11:59:01 CET 2011
- Previous message: [Python-Dev] The purpose of SETUP_LOOP, BREAK_LOOP, CONTINUE_LOOP
- Next message: [Python-Dev] The purpose of SETUP_LOOP, BREAK_LOOP, CONTINUE_LOOP
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Hello, > Am I missing something? Does SETUP_LOOP serve any other purpose? Not to my knowledge. > Similarly, it looks like BREAK_LOOP and CONTINUE_LOOP are just jumps > that respect try/finally blocks (i.e. jumping out of try executes > finally). Is there more semantics to them than this? There are also "with" blocks :-) (which use separate opcodes, although they are similar in principle to try/finally blocks) > 1) If not in try/finally, simply generate a direct jump outside of the > loop (break) or to the start of the loop (continue). Right. > 2) If in try/finally, generate a new instruction JUMP_FROM_TRY which > replaces both BREAK_LOOP and CONTINUE_LOOP. It behaves the same way as > CONTINUE_LOOP but without restriction to only jump backwards (could > reuse CONTINUE_LOOP, but the name would be misleading). There may be complications with nested try/finally blocks. You either need to generate separate bytecode for when the "finally" clause is entered following a given continue/break (so as to hardcode the jump offset at the end of the clause), or save the jump offsets somewhere on a stack for each finally clause to pop, IMO. (the current code does the latter with various complications, see WITH_CLEANUP for some aspects of the fun) Regards Antoine.
- Previous message: [Python-Dev] The purpose of SETUP_LOOP, BREAK_LOOP, CONTINUE_LOOP
- Next message: [Python-Dev] The purpose of SETUP_LOOP, BREAK_LOOP, CONTINUE_LOOP
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-Dev mailing list