Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from pypy.translator.avm2.util import serialize_u32 as u32, Avm2Label
- from pypy.translator.avm2.constants import METHODFLAG_Activation, METHODFLAG_SetsDxns
- from decorator import decorator
- INSTRUCTIONS = {}
- @decorator
- def needs_specialized(fn, self, *args, **kwargs):
- if not self.specialized:
- raise ValueError, "Instruction needs to be specialized"
- return fn(self, *args, **kwargs)
- class _Avm2SpecializedInstruction(object):
- pass
- class _Avm2ShortInstruction(object):
- specialized=False
- def __init__(self, opcode, name, stack=0, scope=0, flags=0):
- self.opcode = opcode
- self.name = name
- self.stack = stack
- self.scope = scope
- self.flags = flags
- INSTRUCTIONS[opcode] = self
- def _repr(self):
- return "%s (0x%H)" % (self.name, self.opcode)
- def _set_assembler_props(self, asm):
- asm.flags |= self.flags
- asm.stack_depth += self.stack
- asm.scope_depth += self.scope
- def _serialize(self):
- return chr(self.opcode)
- serialize = _serialize
- set_assembler_props = _set_assembler_props
- __repr__ = _repr
- def specialize(self, **kwargs):
- return type("_Avm2_Instruction_%s" % self.name,
- (_Avm2SpecializedInstruction, self.__class__),
- dict(kwargs.items(),
- specialized=True,
- set_assembler_props=self._set_assembler_props,
Add Comment
Please, Sign In to add comment