mirror of https://github.com/m-labs/artiq.git
py2llvm: factor repr/same_type/merge for values
This commit is contained in:
parent
60368aa9e2
commit
9eb2a2441d
|
@ -4,19 +4,9 @@ from artiq.py2llvm.values import VGeneric
|
|||
|
||||
|
||||
class VNone(VGeneric):
|
||||
def __repr__(self):
|
||||
return "<VNone>"
|
||||
|
||||
def get_llvm_type(self):
|
||||
return lc.Type.void()
|
||||
|
||||
def same_type(self, other):
|
||||
return isinstance(other, VNone)
|
||||
|
||||
def merge(self, other):
|
||||
if not isinstance(other, VNone):
|
||||
raise TypeError
|
||||
|
||||
def alloca(self, builder, name):
|
||||
pass
|
||||
|
||||
|
@ -52,7 +42,8 @@ class VInt(VGeneric):
|
|||
if other.nbits > self.nbits:
|
||||
self.nbits = other.nbits
|
||||
else:
|
||||
raise TypeError
|
||||
raise TypeError("Incompatible types: {} and {}"
|
||||
.format(repr(self), repr(other)))
|
||||
|
||||
def set_value(self, builder, n):
|
||||
self.set_ssa_value(
|
||||
|
@ -160,15 +151,9 @@ class VBool(VInt):
|
|||
def __init__(self):
|
||||
VInt.__init__(self, 1)
|
||||
|
||||
def __repr__(self):
|
||||
return "<VBool>"
|
||||
|
||||
def same_type(self, other):
|
||||
return isinstance(other, VBool)
|
||||
|
||||
def merge(self, other):
|
||||
if not isinstance(other, VBool):
|
||||
raise TypeError
|
||||
__repr__ = VGeneric.__repr__
|
||||
same_type = VGeneric.same_type
|
||||
merge = VGeneric.merge
|
||||
|
||||
def set_const_value(self, builder, b):
|
||||
VInt.set_const_value(self, builder, int(b))
|
||||
|
|
|
@ -70,16 +70,6 @@ class VFraction(VGeneric):
|
|||
def get_llvm_type(self):
|
||||
return lc.Type.vector(lc.Type.int(64), 2)
|
||||
|
||||
def __repr__(self):
|
||||
return "<VFraction>"
|
||||
|
||||
def same_type(self, other):
|
||||
return isinstance(other, VFraction)
|
||||
|
||||
def merge(self, other):
|
||||
if not isinstance(other, VFraction):
|
||||
raise TypeError
|
||||
|
||||
def _nd(self, builder):
|
||||
ssa_value = self.get_ssa_value(builder)
|
||||
a = builder.extract_element(
|
||||
|
|
|
@ -7,6 +7,17 @@ class VGeneric:
|
|||
def __init__(self):
|
||||
self._llvm_value = None
|
||||
|
||||
def __repr__(self):
|
||||
return "<" + self.__class__.__name__ + ">"
|
||||
|
||||
def same_type(self, other):
|
||||
return isinstance(other, self.__class__)
|
||||
|
||||
def merge(self, other):
|
||||
if not self.same_type(other):
|
||||
raise TypeError("Incompatible types: {} and {}"
|
||||
.format(repr(self), repr(other)))
|
||||
|
||||
def get_ssa_value(self, builder):
|
||||
if isinstance(self._llvm_value, lc.AllocaInstruction):
|
||||
return builder.load(self._llvm_value)
|
||||
|
|
Loading…
Reference in New Issue