Exemplo n.º 1
0
    def repair(self, P, Q, inter, ins=None, args=None, entryfnc=None,
               ignoreio=False, ignoreret=False):

        self.starttime = time.time()

        self.vignore = set()
        if ignoreio:
            self.vignore |= set([VAR_IN, VAR_OUT])

        # (1) Check struct match
        M = Matching(verbose=self.verbose)
        self.sm = M.match_struct(P, Q)
        if self.sm is None:
            raise StructMismatch('')

        # (2) Obtain trace of P
        self.trace = self.gettrace(P, inter, ins, args, entryfnc)

        # (3) Repair each fnc sepearately
        self.inter = inter()
        results = {}
        for fnc1 in P.getfncs():
            fnc2 = Q.getfnc(fnc1.name)
            results[fnc1.name] = (self.repair_fnc(fnc1, fnc2) +
                                  (self.sm[fnc1.name],))

        self.debug('total time: %.3f', round(time.time() - self.starttime, 3))

        return results
Exemplo n.º 2
0
    def repair(self,
               P,
               Q,
               inter,
               ins=None,
               args=None,
               entryfnc=None,
               ignoreio=False,
               ignoreret=False):

        self.starttime = time.time()

        self.vignore = set()
        if ignoreio:
            self.vignore |= set([VAR_IN, VAR_OUT])

        # (1) Check struct match
        M = Matching(verbose=self.verbose)
        self.sm = M.match_struct(P, Q)
        if self.sm is None:
            raise StructMismatch('')

        # (2) Obtain trace of P
        self.trace = self.gettrace(P, inter, ins, args, entryfnc)

        # (3) Repair each fnc sepearately
        self.inter = inter()
        results = {}
        for fnc1 in P.getfncs():
            fnc2 = Q.getfnc(fnc1.name)
            results[fnc1.name] = (self.repair_fnc(fnc1, fnc2) +
                                  (self.sm[fnc1.name], ))

        self.debug('total time: %.3f', round(time.time() - self.starttime, 3))

        return results