Beispiel #1
0
 def visit_AttrAssign(self, node):
     if node.attr not in self.objrels.Fs:
         return
     
     pair = L.Tuple([node.obj, node.value])
     var = next(self.fresh_vars)
     return (L.Assign(var, pair),
             L.RelUpdate(N.F(node.attr), L.SetAdd(), var))
Beispiel #2
0
 def visit_DictAssign(self, node):
     if not self.objrels.MAP:
         return
     
     triple = L.Tuple([node.target, node.key, node.value])
     var = next(self.fresh_vars)
     return (L.Assign(var, triple),
             L.RelUpdate(N.MAP, L.SetAdd(), var))
Beispiel #3
0
    def visit_MapAssign(self, node):
        sfm = self.setfrommaps_by_map.get(node.map, None)
        if sfm is None:
            return node

        code = (node, )
        func_name = sfm.get_maint_func_name('assign')
        call_code = (L.Expr(
            L.Call(func_name,
                   [L.Name(node.key), L.Name(node.value)])), )
        code = L.insert_rel_maint(code, call_code, L.SetAdd())
        return code
Beispiel #4
0
    def visit_Module(self, node):
        node = self.generic_visit(node)

        funcs = []
        for auxmaps in self.auxmaps_by_rel.values():
            for auxmap in auxmaps:
                for op in [L.SetAdd(), L.SetRemove()]:
                    func = make_auxmap_maint_func(self.fresh_vars, auxmap, op)
                    funcs.append(func)
        for sfm in self.setfrommaps_by_map.values():
            for op in ['assign', 'delete']:
                func = make_setfrommap_maint_func(self.fresh_vars, sfm, op)
                funcs.append(func)
        for wraps in self.wraps_by_rel.values():
            for wrap in wraps:
                for op in [L.SetAdd(), L.SetRemove()]:
                    func = make_wrap_maint_func(self.fresh_vars, wrap, op)
                    funcs.append(func)

        func_names = L.get_defined_functions(tuple(funcs))
        self.maint_funcs.update(func_names)

        node = node._replace(body=tuple(funcs) + node.body)
        return node
Beispiel #5
0
    def visit_Module(self, node):
        node = self.generic_visit(node)

        fv = self.fresh_vars
        ops = [L.SetAdd(), L.SetRemove()]
        funcs = []
        for op in ops:
            func = make_aggr_oper_maint_func(fv, self.aggrinv, op)
            funcs.append(func)
        if self.aggrinv.uses_demand:
            for op in ops:
                func = make_aggr_restr_maint_func(fv, self.aggrinv, op)
                funcs.append(func)

        func_names = L.get_defined_functions(tuple(funcs))
        self.maint_funcs.update(func_names)

        node = node._replace(body=tuple(funcs) + node.body)
        return node
Beispiel #6
0
    def visit_Module(self, node):
        ct = self.clausetools

        node = self.generic_visit(node)

        funcs = []
        for rel in self.rels:
            for op in [L.SetAdd(), L.SetRemove()]:
                fresh_var_prefix = next(self.fresh_vars)
                func = make_comp_maint_func(ct,
                                            fresh_var_prefix,
                                            self.fresh_join_names,
                                            self.comp,
                                            self.result_var,
                                            rel,
                                            op,
                                            counted=self.counted)
                funcs.append(func)

        func_names = L.get_defined_functions(tuple(funcs))
        self.maint_funcs.update(func_names)

        node = node._replace(body=tuple(funcs) + node.body)
        return node