def do_comp(self, x, compares, tmps): False = jast.GetStaticAttribute("Py", "Zero") op, other = compares[0] y = self.visit(other) if len(compares) > 1: ytmp = self.frame.gettemp("PyObject") tmps.append(ytmp) gety = self.factory.makePyObject(jast.Set(ytmp, y.asAny())) else: gety = y ops = { ast.Compare.Eq: "_eq", ast.Compare.NotEq: "_ne", ast.Compare.Lt: "_lt", ast.Compare.LtE: "_le", ast.Compare.Gt: "_gt", ast.Compare.GtE: "_ge", ast.Compare.Is: "_is", ast.Compare.IsNot: "_isnot", ast.Compare.In: "_in", ast.Compare.NotIn: "_notin", } test = x.compop(ops[op], gety) if len(compares) == 1: return test.asAny() rest = self.do_comp(self.factory.makePyObject(ytmp), compares[1:], tmps) return jast.TriTest(test.nonzero(), rest, False)
def bool_op(self, x, y, swap=0): tmp = self.frame.gettemp("PyObject") test = jast.Invoke(jast.Set(tmp, self.visit(x).asAny()), "__nonzero__", []) yes, no = tmp, self.visit(y).asAny() if swap: yes, no = no, yes op = self.factory.makePyObject(jast.TriTest(test, yes, no)) self.frame.freetemp(tmp) return op
def bool_op(self, x, y, op): tmp = self.frame.gettemp("PyObject") test = jast.Invoke(jast.Set(tmp, x.asAny()), "__nonzero__", []) if op == ast.BoolOp.Or: yes, no = tmp, y.asAny() else: no, yes = tmp, y.asAny() op = self.factory.makePyObject(jast.TriTest(test, yes, no)) self.frame.freetemp(tmp) return op
def do_comp(self, x, compares, tmps): False = jast.GetStaticAttribute("Py", "Zero") op, other = compares[0] y = self.visit(other) if len(compares) > 1: ytmp = self.frame.gettemp("PyObject") tmps.append(ytmp) gety = self.factory.makePyObject(jast.Set(ytmp, y.asAny())) else: gety = y test = x.compop(op, gety) if len(compares) == 1: return test.asAny() rest = self.do_comp(self.factory.makePyObject(ytmp), compares[1:], tmps) return jast.TriTest(test.nonzero(), rest, False)