def visit_SetUpdate(self, node): if isinstance(node.target, MSymbol): return if dha.isfixset(node.target): return op = dha.UpAdd() if dha.isAddUpdate(node) else dha.UpRemove() cont = dha.Name(node.target) elem = self.visit(node.value) return dha.SetUpdate(self.getMemSym(elem._t), op, dha.Tuple([cont, elem]))
def visit_PatMatch(self, node): self.generic_visit(node) if (dka.hasnodetype(node.iter, dha.Name) and dha.isfixset(node.iter.id)): elem = self.visit(node.target) return dha.PatMatchName(elem, node.iter.id) cont = dha.valueToPattern(node.iter, dha.P_BOUND) elem = self.visit(node.target) return dha.PatMatchName(dha.PatTuple([cont, elem]), self.getMemSym(elem._t))
def visit_AttrEnum(self, node): dka.assertnodetype(node.iter, dha.SelName) ssym = node.iter.id et = dha.Enum if dha.isPosEnum(node) else dha.NegEnum if (isinstance(ssym, MSymbol) or dha.isfixset(ssym)): return et(node.target, ssym) iter = dha.genBoundVar(ssym) target = self.visit(node.target) return et(dha.PatTuple([iter, target]), self.getMemSym(target._t))