From 04da2fb8dfa20f119c2b84c3f487f168a7b8564e Mon Sep 17 00:00:00 2001 From: rocky Date: Sat, 13 Jul 2024 22:29:58 -0400 Subject: [PATCH] Improve 3.4 ifelse inside a lambda Fixes #426 --- test/bytecode_3.3/03_ifelse_in_lambda.pyc | Bin 0 -> 577 bytes test/bytecode_3.4/03_ifelse_in_lambda.pyc | Bin 0 -> 414 bytes test/bytecode_3.5/03_ifelse_in_lambda.pyc | Bin 0 -> 414 bytes test/simple_source/bug34/03_ifelse_in_lambda.py | 4 ++++ uncompyle6/parsers/parse34.py | 4 ++++ uncompyle6/parsers/parse35.py | 1 - 6 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 test/bytecode_3.3/03_ifelse_in_lambda.pyc create mode 100644 test/bytecode_3.4/03_ifelse_in_lambda.pyc create mode 100644 test/bytecode_3.5/03_ifelse_in_lambda.pyc create mode 100644 test/simple_source/bug34/03_ifelse_in_lambda.py diff --git a/test/bytecode_3.3/03_ifelse_in_lambda.pyc b/test/bytecode_3.3/03_ifelse_in_lambda.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7628206f9671abb45bfe1574cabaff24d936783a GIT binary patch literal 577 zcmb7AO-sZu5S?sAMHB>a4||Zkh{eOMP>-ef3wr6zOX)|t6w;m88omjWhXHUzp9#cNjW{vc*lf4F* zy6KcmjkbLum$_X9x67L#tt+XFOzSpPS(BI9qIqGG!tp y?nLA~w!q!x_X4|m^JBn;CpD}=VqdryMll{|`=M+(GH+KSH)Nwrt7PQdSY!j+266WQ literal 0 HcmV?d00001 diff --git a/test/bytecode_3.4/03_ifelse_in_lambda.pyc b/test/bytecode_3.4/03_ifelse_in_lambda.pyc new file mode 100644 index 0000000000000000000000000000000000000000..01df985d072edbf0d3d7ac709b8d9c9d1bd1be54 GIT binary patch literal 414 zcmYLF%SyvQ6ur}lHHd;BcF~1&BN7*_P?sV21=(cRO~_+X0y9mRNw5|-qWD<*75-AT z?)?B)o=K&>%sKaP=bXzhKgTCW_w&!|T@9e_0CNh;aTvW2Eg%LIc|5~(R~*X1 zj6pDd5WNu<%zAT9uS5(RBF_mIJWX`Q{*$&lz!_jJK#xRvOieGa=bdPT70;ZaKF`C= z$k$?7nnvi!rMWVbtWv6Mg3b|Zk$J2;#Go#vfMjcsvr3fsqTg#%s#=QJRISd$ENz$b z+u6-LE(;-zh|5(h6P4!4w0`JZf2#xgHUrS+yr`)LJvV5 hN5cN0u_Izbrd{+99^3b!t?DDLud2M2BIt8A_6KC@Qds~1 literal 0 HcmV?d00001 diff --git a/test/bytecode_3.5/03_ifelse_in_lambda.pyc b/test/bytecode_3.5/03_ifelse_in_lambda.pyc new file mode 100644 index 0000000000000000000000000000000000000000..33b8757f6958d6caf66ebe5534b3a39cf98d75f9 GIT binary patch literal 414 zcmYLF%SyvQ6ur}lwFm`4tk8vYBN7*_5SJnN1=(cRO~_+X0+UXdNw5|-qWD<*75-AT z{)H>gq|#pIoO`%)&SjX3@%ZGy`zoG^=m*%>0O}qvr=T2%(JRpsVnC70Gfelzp)AZ4 z1mh>sJ5j-`H|O+5#IPZ9op8z1L}% zxb@<)5YmXaT*or0(ma{hkKM@M>A=3t0JJ?Xl$!feWr;KaMDGps5$+D;GHnxj2k literal 0 HcmV?d00001 diff --git a/test/simple_source/bug34/03_ifelse_in_lambda.py b/test/simple_source/bug34/03_ifelse_in_lambda.py new file mode 100644 index 00000000..b498a009 --- /dev/null +++ b/test/simple_source/bug34/03_ifelse_in_lambda.py @@ -0,0 +1,4 @@ +# Next line is 1164 +def foo(): + name = "bar" + lambda x: compile(x, "" % name, "exec") if x else None diff --git a/uncompyle6/parsers/parse34.py b/uncompyle6/parsers/parse34.py index caae5e2e..a381448a 100644 --- a/uncompyle6/parsers/parse34.py +++ b/uncompyle6/parsers/parse34.py @@ -53,6 +53,10 @@ class Python34Parser(Python33Parser): _ifstmts_jump ::= c_stmts_opt JUMP_ABSOLUTE JUMP_FORWARD COME_FROM genexpr_func ::= LOAD_ARG _come_froms FOR_ITER store comp_iter JUMP_BACK + + if_exp_lambda ::= expr jmp_false expr return_if_lambda return_stmt_lambda LAMBDA_MARKER + return_if_lambda ::= RETURN_END_IF_LAMBDA come_froms + return_if_stmt ::= return_expr RETURN_END_IF POP_BLOCK """ def customize_grammar_rules(self, tokens, customize): diff --git a/uncompyle6/parsers/parse35.py b/uncompyle6/parsers/parse35.py index e5bc9b10..929d920d 100644 --- a/uncompyle6/parsers/parse35.py +++ b/uncompyle6/parsers/parse35.py @@ -108,7 +108,6 @@ class Python35Parser(Python34Parser): # Python 3.5+ does jump optimization # In <.3.5 the below is a JUMP_FORWARD to a JUMP_ABSOLUTE. - return_if_stmt ::= return_expr RETURN_END_IF POP_BLOCK return_if_lambda ::= RETURN_END_IF_LAMBDA COME_FROM return ::= return_expr RETURN_END_IF