_specific_post_parse,
InterpretCompilerDirectives(self, self.pragma_overrides),
_align_function_definitions,
-# FlattenInListTransform(),
+ FlattenInListTransform(),
WithTransform(self),
DecoratorTransform(self),
AnalyseDeclarationsTransform(self),
args = node.operand2.args
if len(args) == 0:
return ExprNodes.BoolNode(pos = node.pos, value = node.operator == 'not_in')
+
+ if node.operand1.is_temp or node.operand1.is_simple():
+ lhs = node.operand1
else:
- lhs = ExprNodes.PersistentNode(node.operand1, len(args))
- conds = []
- for arg in args:
- cond = ExprNodes.PrimaryCmpNode(
- pos = node.pos,
- operand1 = lhs,
- operator = eq_or_neq,
- operand2 = arg,
- cascade = None)
- conds.append(ExprNodes.TypecastNode(
- pos = node.pos,
- operand = cond,
- type = PyrexTypes.c_bint_type))
- def concat(left, right):
- return ExprNodes.BoolBinopNode(
- pos = node.pos,
- operator = conjunction,
- operand1 = left,
- operand2 = right)
- return reduce(concat, conds)
+ # FIXME: allocate temp for evaluated node.operand1
+ return node
+
+ conds = []
+ for arg in args:
+ cond = ExprNodes.PrimaryCmpNode(
+ pos = node.pos,
+ operand1 = lhs,
+ operator = eq_or_neq,
+ operand2 = arg,
+ cascade = None)
+ conds.append(ExprNodes.TypecastNode(
+ pos = node.pos,
+ operand = cond,
+ type = PyrexTypes.c_bint_type))
+ def concat(left, right):
+ return ExprNodes.BoolBinopNode(
+ pos = node.pos,
+ operator = conjunction,
+ operand1 = left,
+ operand2 = right)
+
+ return reduce(concat, conds)
else:
return node