On Sat, Jun 28, 2014 at 3:00 PM,
On Sun, Jun 22, 2014, at 16:18, Terry Reedy wrote:
2. Write pyu.py. It should first translate x.pyu to the equivalent x.py.
What is the equivalent x.py for "BUILD_SET 0" rather than "LOAD_GLOBAL (set), CALL_FUNCTION 0"?
Is there any reason that it has to be normal-looking source code? def empty_set_literal(): # line 123 of somefile.pyu print("I'm an empty set!", ∅) # becomes empty_set_literal = type(lambda:0)(type((lambda:0).__code__)(0,0,0,3,67,b't\x00\x00d\x01\x00h\x00\x00\x83\x02\x00\x01d\x00\x00S',(None,"I'm an empty set!",{}),('print',),(),"somefile.pyu","empty_set_literal",123,b"\x00\x01"),globals(),"empty_set_literal") I got most of the args for the code() constructor by disassembling the function, using a one-element set, and then manually edited the code afterward. It does appear to work:
dis.dis(empty_set_literal) 124 0 LOAD_GLOBAL 0 (print) 3 LOAD_CONST 1 ("I'm an empty set!") 6 BUILD_SET 0 9 CALL_FUNCTION 2 (2 positional, 0 keyword pair) 12 POP_TOP 13 LOAD_CONST 0 (None) 16 RETURN_VALUE empty_set_literal() I'm an empty set! set()
Given that the purpose of this is to make something executable, not something readable (in contrast to, say, 2to3), I don't think it would be a problem to have nightmare-level code in there occasionally. That said, I'm not particularly in favour of the proposal - I just felt like answering this part of it :) ChrisA