编译没有常量折叠优化的python源代码

时间:2017-01-06 10:57:27

标签: python-2.7 bytecode compiler-optimization constant-expression constantfolding

我有一个python片段如下

5 + 6 * 8

将此编译为AST会产生:

>>> ast.dump(compile('5+6*8', '', 'eval', ast.PyCF_ONLY_AST))    
Expression(body=BinOp(left=Num(n=5), op=Add(), right=BinOp(left=Num(n=6), op=Mult(), right=Num(n=8))))

请注意,在生成的AST中6 * 8 优化为48。

但是,如果我编译此生成的AST并进行反汇编,6 * 8将替换为48

>>> astree = compile('5+6*8', '', 'eval', ast.PyCF_ONLY_AST)
>>> dis.disco(compile(astree, '', 'eval'))
  1           0 LOAD_CONST               0 (5)
              3 LOAD_CONST               3 (48)
              6 BINARY_ADD          
              7 RETURN_VALUE 

我的问题

如何在没有常量折叠优化的情况下将代码编译为字节码?我需要这样做来开发一个混淆器。

0 个答案:

没有答案