def Compare(self, initExpr, xxx_todo_changeme1):
        ((op, other), ) = xxx_todo_changeme1
        left = build(self.expr_builder, initExpr)
        right = build(self.expr_builder, other)

        if isinstance(left, Const) and op in self._mirror_ops:
            left, right, op = right, left, self._mirror_ops[op]

        if isinstance(right, Const):
            if not self.mode.truth:
                op = self._rev_ops[op]

            if op == 'in' or op == 'not in':
                cond = compileIn(left, right.value, op == 'in')
                if cond is not None:
                    return cond
            else:
                if op == 'is' or op == 'is not':
                    if right.value is None:
                        right = ICriterion(NoneType)
                    else:
                        right = ICriterion(Pointer(right.value))
                    if op == 'is not':
                        right = ~right
                else:
                    right = Inequality(op, right.value)
                return Signature([(left, right)])

        # Both sides involve variables or an un-optimizable constant,
        #  so it's a generic boolean criterion  :(
        return expressionSignature(
            self.expr_builder.Compare(initExpr, ((op, other), )), self.mode)
    def Compare(self,initExpr, xxx_todo_changeme1):
        ((op,other),) = xxx_todo_changeme1
        left = build(self.expr_builder,initExpr)
        right = build(self.expr_builder,other)

        if isinstance(left,Const) and op in self._mirror_ops:
            left,right,op = right,left,self._mirror_ops[op]

        if isinstance(right,Const):
            if not self.mode.truth:
                op = self._rev_ops[op]

            if op=='in' or op=='not in':
                cond = compileIn(left,right.value,op=='in')
                if cond is not None:
                    return cond
            else:
                if op=='is' or op=='is not':
                    if right.value is None:
                        right = ICriterion(NoneType)
                    else:
                        right = ICriterion(Pointer(right.value))
                    if op=='is not':
                        right = ~right
                else:
                    right = Inequality(op,right.value)
                return Signature([(left, right)])

        # Both sides involve variables or an un-optimizable constant,
        #  so it's a generic boolean criterion  :(
        return expressionSignature(
            self.expr_builder.Compare(initExpr,((op,other),)), self.mode
        )
Example #3
0
    def CallFunc(self,funcExpr,args,kw,star,dstar):

        func = build(self,funcExpr)

        if isinstance(func,Const) and not kw and not star and not dstar:
            return Call(func.value, *[build(self,arg) for arg in args])

        elif kw or dstar or args or star:

            if args:
                args = Tuple(tuple,*[build(self,arg) for arg in args])
                if star:
                    args = Call(
                        operator.add, args, Call(tuple,build(self,star))
                    )

            elif star:
                args = build(self,star)

            if kw or dstar:

                args = args or Const(())

                if kw:
                    kw = self.Dict(kw)
                    if dstar:
                        kw = Call(add_dict, kw, build(self,dstar))
                elif dstar:
                    kw = build(self,dstar)

                return Call(apply, func, args, kw)

            else:
                return Call(apply, func, args)

        else:
            return Call(apply,func)
    def CallFunc(self, funcExpr, args, kw, star, dstar):

        func = build(self, funcExpr)

        if isinstance(func, Const) and not kw and not star and not dstar:
            return Call(func.value, *[build(self, arg) for arg in args])

        elif kw or dstar or args or star:

            if args:
                args = Tuple(tuple, *[build(self, arg) for arg in args])
                if star:
                    args = Call(operator.add, args,
                                Call(tuple, build(self, star)))

            elif star:
                args = build(self, star)

            if kw or dstar:

                args = args or Const(())

                if kw:
                    kw = self.Dict(kw)
                    if dstar:
                        kw = Call(add_dict, kw, build(self, dstar))
                elif dstar:
                    kw = build(self, dstar)

                return Call(apply, func, args, kw)

            else:
                return Call(apply, func, args)

        else:
            return Call(apply, func)
Example #5
0
 def method(self,left,right):
     return Call(op, build(self,left), build(self,right))
 def Dict(self, items):
     keys = Tuple(tuple, *[build(self, k) for k, v in items])
     vals = Tuple(tuple, *[build(self, v) for k, v in items])
     return Call(dict, Call(zip, keys, vals))
Example #7
0
 def Or(self,items):
     return OrExpr(*[build(self,expr) for expr in items])
Example #8
0
 def Getattr(self,expr,attr):
     expr = build(self,expr)
     if isinstance(expr,Const):
         return Const(getattr(expr.value,attr))
     return Getattr(expr,attr)
Example #9
0
 def Slice(self,start,stop):
     return build(self,start), build(self,stop)
Example #10
0
 def Dict(self, items):
     keys = Tuple(tuple, *[build(self,k) for k,v in items])
     vals = Tuple(tuple, *[build(self,v) for k,v in items])
     return Call(dict, Call(zip, keys, vals))
Example #11
0
 def method(self,expr):
     return Call(op, build(self,expr))
 def Or(self, items):
     return OrExpr(*[build(self, expr) for expr in items])
 def And(self, items):
     return AndExpr(*[build(self, expr) for expr in items])
 def Getattr(self, expr, attr):
     expr = build(self, expr)
     if isinstance(expr, Const):
         return Const(getattr(expr.value, attr))
     return Getattr(expr, attr)
 def Sliceobj(self, *args):
     return Call(slice, *[build(self, arg) for arg in args])
 def Slice(self, start, stop):
     return build(self, start), build(self, stop)
 def Subscript(self, left, right):
     left, right = build(self, left), build(self, right)
     if isinstance(right, tuple):
         return Call(operator.getslice, left, *right)
     else:
         return Call(operator.getitem, left, right)
 def method(self, items):
     result = build(self, items[0])
     for item in items[1:]:
         result = Call(op, result, build(self, item))
     return result
 def Compare(self,initExpr, xxx_todo_changeme):
     ((op,other),) = xxx_todo_changeme
     return Call(
         self._cmp_ops[op], build(self,initExpr), build(self,other)
     )
 def method(self, expr):
     return Call(op, build(self, expr))
Example #21
0
 def method(self,items):
     return Tuple(op,*[build(self,item) for item in items])
 def And(self, items):
     return reduce(operator.and_, [build(self, expr) for expr in items])
Example #23
0
 def Subscript(self,left,right):
     left, right = build(self,left), build(self,right)
     if isinstance(right,tuple):
         return Call(operator.getslice,left,*right)
     else:
         return Call(operator.getitem,left,right)
 def Or(self, items):
     return reduce(operator.or_, [build(self, expr) for expr in items])
Example #25
0
 def Sliceobj(self,*args):
     return Call(slice,*[build(self,arg) for arg in args])
Example #26
0
 def And(self,items):
     return reduce(operator.and_,[build(self,expr) for expr in items])
Example #27
0
 def And(self,items):
     return AndExpr(*[build(self,expr) for expr in items])
Example #28
0
 def Not(self,expr):
     try:
         self.__class__ = CriteriaBuilder
         return build(self,expr)
     finally:
         self.__class__ = NotBuilder
 def Not(self, expr):
     try:
         self.__class__ = CriteriaBuilder
         return build(self, expr)
     finally:
         self.__class__ = NotBuilder
 def method(self, items):
     return Tuple(op, *[build(self, item) for item in items])
Example #31
0
 def Or(self,items):
     return reduce(operator.or_,[build(self,expr) for expr in items])
 def Compare(self, initExpr, xxx_todo_changeme):
     ((op, other), ) = xxx_todo_changeme
     return Call(self._cmp_ops[op], build(self, initExpr),
                 build(self, other))
Example #33
0
 def IfElse(self, tval, cond, fval):
     return IfElse(build(self,tval), build(self,cond), build(self,fval))
 def IfElse(self, tval, cond, fval):
     return IfElse(build(self, tval), build(self, cond), build(self, fval))
Example #35
0
 def method(self,items):
     result = build(self,items[0])
     for item in items[1:]:
         result = Call(op, result, build(self,item))
     return result
 def method(self, left, right):
     return Call(op, build(self, left), build(self, right))