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. _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com