Commit a5e49f6e authored by Stefan Behnel's avatar Stefan Behnel

fix switch transform for in-list tests

parent 7997dd38
...@@ -11,13 +11,9 @@ from StringEncoding import EncodedString ...@@ -11,13 +11,9 @@ from StringEncoding import EncodedString
from ParseTreeTransforms import SkipDeclarations from ParseTreeTransforms import SkipDeclarations
#def unwrap_node(node):
# while isinstance(node, ExprNodes.PersistentNode):
# node = node.arg
# return node
# Temporary hack while PersistentNode is out of order
def unwrap_node(node): def unwrap_node(node):
while isinstance(node, UtilNodes.ResultRefNode):
node = node.expression
return node return node
def is_common_value(a, b): def is_common_value(a, b):
...@@ -301,13 +297,17 @@ class SwitchTransform(Visitor.VisitorTransform): ...@@ -301,13 +297,17 @@ class SwitchTransform(Visitor.VisitorTransform):
is common among all clauses and both var and value are ints. is common among all clauses and both var and value are ints.
""" """
def extract_conditions(self, cond): def extract_conditions(self, cond):
while True:
if isinstance(cond, ExprNodes.CoerceToTempNode): if isinstance(cond, ExprNodes.CoerceToTempNode):
cond = cond.arg cond = cond.arg
elif isinstance(cond, UtilNodes.EvalWithTempExprNode):
# this is what we get from the FlattenInListTransform
cond = cond.subexpression
elif isinstance(cond, ExprNodes.TypecastNode):
cond = cond.operand
else:
break
if isinstance(cond, ExprNodes.TypecastNode):
cond = cond.operand
if (isinstance(cond, ExprNodes.PrimaryCmpNode) if (isinstance(cond, ExprNodes.PrimaryCmpNode)
and cond.cascade is None and cond.cascade is None
and cond.operator == '==' and cond.operator == '=='
......
...@@ -74,6 +74,17 @@ __doc__ = u""" ...@@ -74,6 +74,17 @@ __doc__ = u"""
>>> switch_or(4) >>> switch_or(4)
0 0
>>> switch_in(0)
0
>>> switch_in(1)
1
>>> switch_in(2)
0
>>> switch_in(7)
1
>>> switch_in(8)
0
>>> switch_short(0) >>> switch_short(0)
0 0
>>> switch_short(1) >>> switch_short(1)
...@@ -161,6 +172,11 @@ def switch_or(int x): ...@@ -161,6 +172,11 @@ def switch_or(int x):
return 0 return 0
return -1 return -1
def switch_in(int X):
if X in (1,3,5,7):
return 1
return 0
def switch_short(int x): def switch_short(int x):
if x == 1: if x == 1:
return 1 return 1
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment