From 31413be7a11e8d3f5befb080aedcec23f3b0ac66 Mon Sep 17 00:00:00 2001 From: rocky Date: Tue, 16 Aug 2016 12:45:43 -0400 Subject: [PATCH] Python 2.2 doesn't have opcode LIST_APPEND --- test/bytecode_2.2/05_test_yield.pyc | Bin 0 -> 924 bytes test/simple_source/bug22/05_test_yield.py | 24 ++++++++++++++++++++++ uncompyle6/scanners/scanner2.py | 3 ++- 3 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 test/bytecode_2.2/05_test_yield.pyc create mode 100644 test/simple_source/bug22/05_test_yield.py diff --git a/test/bytecode_2.2/05_test_yield.pyc b/test/bytecode_2.2/05_test_yield.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8395d44bcd453b754e43e6c7524af768d858f4f7 GIT binary patch literal 924 zcmbVKU2D`p6g`tn((V_VvPFFozaH|UTM9n;Ac)XDEl6P(7E9P}rt4su?Pg{nh01{S z7x-8FUH%8}ooscrAZQ3TcXIEUIrp4-{=L`!{N~$a4tfG0F<&Wh^h)HwN1zax3J4b? z7x)591Gql&z~>>{0QEzt5P66jfw#0i?O`h6_Ms$>R5M!x!_2JNp{UDcm8;4~ z$_sUFeW^APFK1_}@L8o7A8bl`V}oRTol<}g<{6jt#bu!~vs_nmH9T7{4iAS1FEgu* z&91a6@)ws^+egMQ3Bf|q76Y_ICuqK2p^z0CQkA@O3F;@X;IX}B2~PLCD0@63*}Okq z4KVRDGRG0AN5n!34f|QSP@Z_{qy9C??GI}G*GYN=+4!n5U0TzJVb?>E&@`F_)J$QN zvdsP(WZC)Jt}B&gf82^~S 2.3 we do. + +from __future__ import generators + +def inorder(t): + if t: + for x in inorder(t.left): + yield x + + yield t.label + for x in inorder(t.right): + yield x + +def generate_ints(n): + for i in range(n): + yield i * 2 + +for i in generate_ints(5): + print i, + +print +gen = generate_ints(3) +print gen.next(), gen.next(), gen.next(), gen.next() diff --git a/uncompyle6/scanners/scanner2.py b/uncompyle6/scanners/scanner2.py index 0d7c7645..c14f51c2 100755 --- a/uncompyle6/scanners/scanner2.py +++ b/uncompyle6/scanners/scanner2.py @@ -381,7 +381,8 @@ class Scanner2(scan.Scanner): j = self.prev[s] while code[j] == self.opc.JUMP_ABSOLUTE: j = self.prev[j] - if code[j] == self.opc.LIST_APPEND: # list comprehension + if (self.version >= 2.3 and + code[j] == self.opc.LIST_APPEND): # list comprehension stmts.remove(s) continue elif code[s] == self.opc.POP_TOP and code[self.prev[s]] == self.opc.ROT_TWO: