faster-cpython / ideas

1.69k stars 49 forks source link

Stack effect of jumping -- how to express in DSL #481

Closed gvanrossum closed 1 year ago

gvanrossum commented 2 years ago

Our new DSL can express variadic stack effects using array[oparg] and even caters for conditions (foo if (C-expression)). But four opcodes (SEND, JUMP_IF_FALSE_OR_POP, JUMP_IF_TRUE_OR_POP, FOR_ITER) have different stack effects depending on whether they jump. How should we express that? New syntax or a magic constant in C-expression above?

@markshannon

markshannon commented 2 years ago

The short term answer is "don't worry about". It is simple enough to workaround in the tooling for now.

In the longer term we'll need to add JUMP_AND_POP() macros (or something like that) to complement the JUMPBY() macros we currently have. Plus the tools will need to understand these macros.

gvanrossum commented 1 year ago

I suppose we could just special-case an output stack effect of the form res if (jump) or res if (!jump).

iritkatriel commented 1 year ago

I think this is resolved.