def specialize(self, node, dst):
		if node.type == dst:
			return
		elif node.type == types.anyint() and dst is None:
			node.type = self.mod.type('int')
		elif node.type == types.anyfloat() and dst is None:
			node.type = self.mod.type('float')
		elif dst is None:
			return
		elif node.type == types.anyint() and types.unwrap(dst) in types.INTS:
			if isinstance(node, ast.Int):
				dst = types.unwrap(dst)
				node.type = dst
				if not dst.signed:
					assert int(node.val) >= 0
			else:
				assert False, (node.type, dst)
		elif node.type == types.anyfloat() and types.unwrap(dst) in types.FLOATS:
			if isinstance(node, ast.Float):
				node.type = types.unwrap(dst)
			else:
				assert False, (node.type, dst)
		elif isinstance(dst, types.concrete):
			ttypes = []
			for i, e in enumerate(node.type.params):
				assert types.compat(e, dst.params[i])
				ttypes.append(dst.params[i])
			node.type = self.mod.type(('tuple', ttypes))
		elif isinstance(types.unwrap(dst), types.trait):
			if node.type == types.anyint():
				node.type = self.mod.type('int')
			elif node.type == types.anyfloat():
				node.type = self.mod.type('float')
			else:
				assert False, 'specialize %s to trait' % node.type
		else:
			assert False, (node.type, dst) % '%s -> %s'
dataset/ETHPy150Open djc/runa/runac/specialize.py/Specializer.specialize/swapped operands of `%`