Discussion:
[PEAK] BUILD_CLASS has wrong stack effect
Marc 'BlackJack' Rintsch
2017-02-22 10:32:26 UTC
Permalink
Hi,

The stack effect of BUILD_CLASS is given as (3, 0) in the
`peak.util.assembler` module, but it is actually (3, 1) as it leaves the
newly built class object on the stack.

Currently I'm using this monkey patch in my code::

from peak.util.assembler import (
BUILD_CLASS as BUILD_CLASS_OPCODE, Code, stack_effects
)

if stack_effects[BUILD_CLASS_OPCODE] == (3, 0):
#
# Patch in BUILD_CLASS method with correct stack effect.
#
def BUILD_CLASS(self, op=BUILD_CLASS_OPCODE, se=(3, 1)):
self.stackchange(se); self.emit(op)

setattr(Code, 'BUILD_CLASS', BUILD_CLASS)

Ciao,
Marc 'BlackJack' Rintsch
--
Calm down. It's only ones and zeros.
PJ Eby
2017-02-22 16:14:48 UTC
Permalink
Fixed and released. Took me several times longer to get a release
uploaded than it did to actually make the change; I'm a bit befuddled
by all this new, "yeah, documented ways to do things don't work any
more, you just have to use this other package to do things that are
also not documented" rubbish you have to go through to use PyPI any
more.

On Wed, Feb 22, 2017 at 5:32 AM, Marc 'BlackJack' Rintsch
Post by Marc 'BlackJack' Rintsch
Hi,
The stack effect of BUILD_CLASS is given as (3, 0) in the
`peak.util.assembler` module, but it is actually (3, 1) as it leaves the
newly built class object on the stack.
from peak.util.assembler import (
BUILD_CLASS as BUILD_CLASS_OPCODE, Code, stack_effects
)
#
# Patch in BUILD_CLASS method with correct stack effect.
#
self.stackchange(se); self.emit(op)
setattr(Code, 'BUILD_CLASS', BUILD_CLASS)
Ciao,
Marc 'BlackJack' Rintsch
--
Calm down. It's only ones and zeros.
_______________________________________________
PEAK mailing list
http://www.eby-sarna.com/mailman/listinfo/peak
Loading...