On 3 July 2013 20:06, Victor Stinner <victor.stin...@gmail.com> wrote:

> Hi,
>
> For my registervm project (fork of CPython using register-based
> bytecode, instead of stack-based bytecode), I implemented a
> Instruction.use_stack() method which just checks if the stack is
> "used": read the stack, exchange values in the stack (like "ROT"
> instruction), push or pop a value.
>
> Instruction.use_stack():
>
> http://hg.python.org/sandbox/registervm/file/ff24dfecc27d/Lib/registervm.py#l546
>
> The method uses a dummy heuristic, just because it was quick to
> implement it, and it's enough for my use case.
>
> To answer your question: yes, I would like a opcode_stack_effect()
> function.
>
> registervm has its own disassembler which creates objects, rather than
> just generating a text representation of the bytecode. I'm using
> objects because I rewrite most instructions and I need more
> information and functions:
>
> * disassembler (raw bytes => list of instructions)
> * assembler (list of instructions => raw bytes)
> * format an instruction (human readable assembler)
>
* is_terminal(): last instruction of a block
> * is_cond_jump(): the instruction is a conditional jump? hesitate to
> move this disassembler to CPython directly. I'm not sure that it would
> be useful, its API is maybe too specific to my registervm project.
> * is_reg_used(), is_reg_replaced(), is_reg_modified(), etc.: checks on
> registers
> * etc.
>
> Would it be useful to have such high-level API in Python?
>

I finally committed a longstanding patch to add something like that a while
ago for 3.4: http://docs.python.org/dev/library/dis#bytecode-analysis

It's still fairly low level, but already far more programmatically useful
than the old disassembler text.

I'm still inclined to push higher level stuff out to external libraries -
this patch was mostly about making some of our compiler tests a bit more
maintainable, as well as giving third party libraries better building
blocks without changing the dis module too much.

To get back to Larry's question, though, I think exposing the stack effects
through dis.Instruction would be a good idea (since that will have access
to the oparg to calculate the variable effects).

As far as how to expose the data to Python goes, I suggest adding an
_opcode C module to back opcode.py and eliminate the manual duplication of
the opcode values while you're at it.

Cheers,
Nick.

-- 
Nick Coghlan   |   ncogh...@gmail.com   |   Brisbane, Australia
_______________________________________________
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

Reply via email to