Esempio n. 1
0
 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]))
Esempio n. 2
0
 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))
Esempio n. 3
0
 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))