示例#1
0
文件: ops.py 项目: sociopath00/mypy
 def __init__(self, type: RType, src: Value, line: int = -1) -> None:
     super().__init__(line)
     self.type = type
     # TODO: for now we enforce that the src memory address should be Py_ssize_t
     #       later we should also support same width unsigned int
     assert is_pointer_rprimitive(src.type)
     self.src = src
示例#2
0
 def reg(self, reg: Value) -> str:
     if reg.name in self.const_int_regs:
         val = self.const_int_regs[reg.name]
         if val == 0 and is_pointer_rprimitive(reg.type):
             return "NULL"
         return str(val)
     else:
         return self.emitter.reg(reg)
示例#3
0
 def reg(self, reg: Value) -> str:
     if isinstance(reg, Integer):
         val = reg.value
         if val == 0 and is_pointer_rprimitive(reg.type):
             return "NULL"
         return str(val)
     else:
         return self.emitter.reg(reg)
示例#4
0
 def reg(self, reg: Value) -> str:
     if isinstance(reg, LoadInt) and reg in self.const_int_regs:
         val = self.const_int_regs[reg]
         if val == 0 and is_pointer_rprimitive(reg.type):
             return "NULL"
         return str(val)
     else:
         return self.emitter.reg(reg)
示例#5
0
 def reg(self, reg: Value) -> str:
     if isinstance(reg, Integer):
         val = reg.value
         if val == 0 and is_pointer_rprimitive(reg.type):
             return "NULL"
         s = str(val)
         if val >= (1 << 31):
             # Avoid overflowing signed 32-bit int
             s += 'U'
         return s
     else:
         return self.emitter.reg(reg)
示例#6
0
 def reg(self, reg: Value) -> str:
     if isinstance(reg, Integer):
         val = reg.value
         if val == 0 and is_pointer_rprimitive(reg.type):
             return "NULL"
         s = str(val)
         if val >= (1 << 31):
             # Avoid overflowing signed 32-bit int
             s += 'ULL'
         elif val == -(1 << 63):
             # Avoid overflowing C integer literal
             s = '(-9223372036854775807LL - 1)'
         elif val <= -(1 << 31):
             s += 'LL'
         return s
     else:
         return self.emitter.reg(reg)