Example #1
0
 def rewrite_cps(self, cont):
     fst, snd, trd = self.fst, self.snd, self.trd
     if isinstance(cont, Var):
         if fst.is_cpsatom():
             return If(fst.to_cpsatom(), snd.rewrite_cps(cont),
                       trd.rewrite_cps(cont))
         else:
             fstval = newvar('$PredRv_')
             fstcont = Lambda(
                 [fstval],
                 [If(fstval, snd.rewrite_cps(cont), trd.rewrite_cps(cont))])
             fstcont.name = gensym('$PredCont_').sval
             return fst.rewrite_cps(fstcont)
     else:
         contval = newvar('$Cont_')
         contdef = Def(contval, cont)
         if fst.is_cpsatom():
             return Seq([
                 contdef,
                 If(fst.to_cpsatom(), snd.rewrite_cps(contval),
                    trd.rewrite_cps(contval))
             ])
         else:
             fstval = newvar('$PredRv_')
             fstcont = Lambda([fstval], [
                 If(fstval, snd.rewrite_cps(contval),
                    trd.rewrite_cps(contval))
             ])
             fstcont.name = gensym('$PredCont_').sval
             return Seq([contdef, fst.rewrite_cps(fstcont)])
Example #2
0
 def rewrite_cps(self, cont):
     fst, snd, trd = self.fst, self.snd, self.trd
     if isinstance(cont, Var):
         if fst.is_cpsatom():
             return If(fst.to_cpsatom(), snd.rewrite_cps(cont),
                                         trd.rewrite_cps(cont))
         else:
             fstval = newvar('$PredRv_')
             fstcont = Lambda([fstval],
                              [If(fstval, snd.rewrite_cps(cont),
                                          trd.rewrite_cps(cont))])
             fstcont.name = gensym('$PredCont_').sval
             return fst.rewrite_cps(fstcont)
     else:
         contval = newvar('$Cont_')
         contdef = Def(contval, cont)
         if fst.is_cpsatom():
             return Seq([contdef, If(fst.to_cpsatom(),
                                     snd.rewrite_cps(contval),
                                     trd.rewrite_cps(contval))])
         else:
             fstval = newvar('$PredRv_')
             fstcont = Lambda([fstval],
                              [If(fstval, snd.rewrite_cps(contval),
                                          trd.rewrite_cps(contval))])
             fstcont.name = gensym('$PredCont_').sval
             return Seq([contdef, fst.rewrite_cps(fstcont)])
Example #3
0
 def rewrite_cps(self, cont):
     formrv = newvar('$FormRv_')
     newdef = Def(self.name, formrv)
     newdef.toplevel = self.toplevel
     formcont = Lambda([formrv], [Apply(cont, [newdef])])
     formcont.name = gensym('$FormCont_').sval
     return self.form.rewrite_cps(formcont)
Example #4
0
 def rewrite_cps(self, cont):
     formrv = newvar('$FormRv_')
     newdef = Def(self.name, formrv)
     newdef.toplevel = self.toplevel
     formcont = Lambda([formrv], [Apply(cont, [newdef])])
     formcont.name = gensym('$FormCont_').sval
     return self.form.rewrite_cps(formcont)
Example #5
0
    def rewrite_cps(self, cont):
        proc, args = self.proc, self.args
        if proc.is_cpsatom():
            proc = proc.to_cpsatom()
        else:
            procrv = newvar('$ProcRv_')
            proccont = Lambda([procrv],
                              [Apply(procrv, args).rewrite_cps(cont)])
            proccont.name = gensym('$ProcCont_').sval
            return proc.rewrite_cps(proccont)

        atom_args = []
        for i in xrange(len(args)):  # XXX pypy hack
            arg = args[i]
            if not arg.is_cpsatom():
                argrv = newvar('$ArgRv_')
                newapply = Apply(proc, args[:i] + [argrv] + args[i + 1:])
                argcont = Lambda([argrv], [newapply.rewrite_cps(cont)])
                argcont.name = gensym('$ArgCont_').sval
                return arg.rewrite_cps(argcont)
            else:
                atom_args.append(arg.to_cpsatom())
        return Apply(proc, atom_args + [cont])
Example #6
0
    def rewrite_cps(self, cont):
        proc, args = self.proc, self.args
        if proc.is_cpsatom():
            proc = proc.to_cpsatom()
        else:
            procrv = newvar('$ProcRv_')
            proccont = Lambda([procrv],
                              [Apply(procrv, args).rewrite_cps(cont)])
            proccont.name = gensym('$ProcCont_').sval
            return proc.rewrite_cps(proccont)

        atom_args = []
        for i in xrange(len(args)): # XXX pypy hack
            arg = args[i]
            if not arg.is_cpsatom():
                argrv = newvar('$ArgRv_')
                newapply = Apply(proc, args[:i] + [argrv] + args[i + 1:])
                argcont = Lambda([argrv],
                                 [newapply.rewrite_cps(cont)])
                argcont.name = gensym('$ArgCont_').sval
                return arg.rewrite_cps(argcont)
            else:
                atom_args.append(arg.to_cpsatom())
        return Apply(proc, atom_args + [cont])
Example #7
0
 def run(self):
     if len(self.nodelist) == 0:
         return Const(w_unspec).rewrite_cps(self.lastcont)
     cont = self.lastcont
     nodelist_copy = self.nodelist[1:]
     nodelist_copy.reverse()
     for node in nodelist_copy:  # XXX: maybe we have atomic op here
         if self.toplevel and isinstance(node, Def):
             node.toplevel = True
         ignore = newvar('$Ignore_')
         cont = Lambda([ignore], [node.rewrite_cps(cont)])
         cont.name = gensym('$SeqCont_').sval
     firstnode = self.nodelist[0]
     if self.toplevel and isinstance(firstnode, Def):
         firstnode.toplevel = True
     self.cpsform = self.nodelist[0].rewrite_cps(cont)
     return self.cpsform
Example #8
0
 def run(self):
     if len(self.nodelist) == 0:
         return Const(w_unspec).rewrite_cps(self.lastcont)
     cont = self.lastcont
     nodelist_copy = self.nodelist[1:]
     nodelist_copy.reverse()
     for node in nodelist_copy: # XXX: maybe we have atomic op here
         if self.toplevel and isinstance(node, Def):
             node.toplevel = True
         ignore = newvar('$Ignore_')
         cont = Lambda([ignore],
                       [node.rewrite_cps(cont)])
         cont.name = gensym('$SeqCont_').sval
     firstnode = self.nodelist[0]
     if self.toplevel and isinstance(firstnode, Def):
         firstnode.toplevel = True
     self.cpsform = self.nodelist[0].rewrite_cps(cont)
     return self.cpsform
Example #9
0
def newvar(prefix='$Var_'):
    return Var(gensym(prefix))
Example #10
0
 def rewrite_cps(self, cont):
     formrv = newvar('$FormRv_')
     formcont = Lambda([formrv],
                       [Apply(cont, [Sete(self.name, formrv)])])
     formcont.name = gensym('$FormCont_').sval
     return self.form.rewrite_cps(formcont)
Example #11
0
def newvar(prefix='$Var_'):
    return Var(gensym(prefix))
Example #12
0
 def rewrite_cps(self, cont):
     formrv = newvar('$FormRv_')
     formcont = Lambda([formrv], [Apply(cont, [Sete(self.name, formrv)])])
     formcont.name = gensym('$FormCont_').sval
     return self.form.rewrite_cps(formcont)