예제 #1
0
 def record(self, opnum, argboxes, value, descr=None):
     op = ResOperation(opnum, argboxes, descr)
     if value is None:
         assert op.type == 'v'
     elif isinstance(value, bool):
         assert op.type == 'i'
         op.setint(int(value))
     elif lltype.typeOf(value) == lltype.Signed:
         assert op.type == 'i'
         op.setint(value)
     elif lltype.typeOf(value) is longlong.FLOATSTORAGE:
         assert op.type == 'f'
         op.setfloatstorage(value)
     else:
         assert lltype.typeOf(value) == llmemory.GCREF
         assert op.type == 'r'
         op.setref_base(value)
     self.operations.append(op)
     return op
예제 #2
0
파일: rewrite.py 프로젝트: cimarieta/usp
 def remove_tested_failarg(self, op):
     opnum = op.getopnum()
     if not (opnum == rop.GUARD_TRUE or opnum == rop.GUARD_FALSE):
         return
     if op.getarg(0).is_vector():
         return
     try:
         i = op.getfailargs().index(op.getarg(0))
     except ValueError:
         return
     # The checked value is also in the failargs.  The front-end
     # tries not to produce it, but doesn't always succeed (and
     # it's hard to test all cases).  Rewrite it away.
     value = int(opnum == rop.GUARD_FALSE)
     op1 = ResOperation(rop.SAME_AS_I, [ConstInt(value)])
     op1.setint(value)
     self.emit_op(op1)
     lst = op.getfailargs()[:]
     lst[i] = op1
     newop = op.copy_and_change(opnum)
     newop.setfailargs(lst)
     self._changed_op = op
     self._changed_op_to = newop