示例#1
0
 def visitCompare(self, node):
     lhs = node.expr
     op, rhs = node.ops[0]
     if len(node.ops)==1:
         self.start(compare_map[op])
         self.visit(lhs)
         self.visit(rhs)
         self.end()
         return
     n = ast.And([ast.Compare(lhs, node.ops[:1]),
                  ast.Compare(rhs, node.ops[1:])])
     self.visit(n)
示例#2
0
 def _do_BinaryExpression(self, node):
     operator = node.Operator.Symbol
     left = self.transform(node.Left)
     right = self.transform(node.Right)
     if node.IsComparison():
         return ast.Compare(left, [(operator, right)])
     else:
         cls = _binary_mapping[operator]
         return cls((left, right))
示例#3
0
 def _not(self, x, elem=None, **kw):
     if 'in' in kw:
         assertResult(x, "test for membership")
         assertResult(elem, "test for membership")
         return ast.Compare(topy(elem), [('not in', topy(x))])
     else:
         assertResult(x, "negate")
         if elem != None:
             raise CompileError("invalid 'not'")
         return ast.Not(topy(x))
示例#4
0
文件: query.py 项目: jier38/TracSite
 def _generate(node):
     if node.type == node.TERM:
         return ast.Compare(ast.Const(node.value),
                            [('in', ast.Name('text'))])
     elif node.type == node.AND:
         return ast.And([_generate(node.left), _generate(node.right)])
     elif node.type == node.OR:
         return ast.Or([_generate(node.left), _generate(node.right)])
     elif node.type == node.NOT:
         return ast.Not(_generate(node.left))
     elif node.type == node.ATTR:
         raise NotImplementedError
示例#5
0
 def visitAugAssign(self, node):
     if isinstance(node.node, ast.Name) and (
             not self.locals or node.node.name not in flatten(self.locals)):
         name = node.node.name
         node.node = ast.Subscript(ast.Name('data'), 'OP_APPLY',
                                   [ast.Const(name)])
         node.expr = self.visit(node.expr)
         return ast.If(
             [(ast.Compare(ast.Const(name),
                           [('in', ast.Name('data'))]), ast.Stmt([node]))],
             ast.Stmt([
                 ast.Raise(
                     ast.CallFunc(ast.Name('UndefinedError'),
                                  [ast.Const(name)]), None, None)
             ]))
     else:
         return ASTTransformer.visitAugAssign(self, node)
示例#6
0
def make_eq_compare((left, right)):
    return ast.Compare(left, [('==', right), ])
示例#7
0
def make_gt_compare((left, right)):
    return ast.Compare(left, [('>', right), ])
示例#8
0
 def _is(self, l, r, **kw):
     assertResult(l, "use in is")
     assertResult(r, "use in is")
     op = kw.get('not') and 'is not' or 'is'
     return ast.Compare(topy(l), [(op, topy(r))])
示例#9
0
 def makeAST(op, l,r):
     assertResult(l, "use in " + o)
     assertResult(r, "use in " + o)
     op = o == '<>' and '!=' or o
     return ast.Compare(topy(l), [(op, topy(r))])
示例#10
0
def greater_compare((left, right)):
    return ast.Compare(left, [
        ('>', right),
    ])
示例#11
0
def not_compare((left, right)):
    return ast.Compare(left, [
        ('!=', right),
    ])
示例#12
0
def less_compare((left, right)):
    return ast.Compare(left, [
        ('<', right),
    ])
示例#13
0
def less_equal_compare((left, right)):
    return ast.Compare(left, [
        ('<=', right),
    ])
示例#14
0
def equals_compare((left, right)):
    return ast.Compare(left, [
        ('==', right),
    ])
示例#15
0
 def COMPARE_OP(decompiler, op):
     oper2 = decompiler.stack.pop()
     oper1 = decompiler.stack.pop()
     return ast.Compare(oper1, [(op, oper2)])