Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 7abf520

Browse files
committed
Add support for // and //=.
Avoid if/elif/elif/else tests where the final else is supposed to handle exactly one case instead of all other cases. When the list of operators is extended, the catchall else treats all new operators as the last operator in the set of tests. Instead, raise an exception if an unexpected operator occurs.
1 parent d4be10d commit 7abf520

2 files changed

Lines changed: 32 additions & 10 deletions

File tree

Lib/compiler/transformer.py

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -588,9 +588,11 @@ def shift_expr(self, nodelist):
588588
if nodelist[i-1][0] == token.LEFTSHIFT:
589589
node = LeftShift([node, right])
590590
node.lineno = nodelist[1][2]
591-
else:
591+
elif nodelist[i-1][0] == token.RIGHTSHIFT:
592592
node = RightShift([node, right])
593593
node.lineno = nodelist[1][2]
594+
else:
595+
raise ValueError, "unexpected token: %s" % nodelist[i-1][0]
594596
return node
595597

596598
def arith_expr(self, nodelist):
@@ -600,9 +602,11 @@ def arith_expr(self, nodelist):
600602
if nodelist[i-1][0] == token.PLUS:
601603
node = Add([node, right])
602604
node.lineno = nodelist[1][2]
603-
else:
605+
elif nodelist[i-1][0] == token.MINUS:
604606
node = Sub([node, right])
605607
node.lineno = nodelist[1][2]
608+
else:
609+
raise ValueError, "unexpected token: %s" % nodelist[i-1][0]
606610
return node
607611

608612
def term(self, nodelist):
@@ -614,8 +618,12 @@ def term(self, nodelist):
614618
node = Mul([node, right])
615619
elif t == token.SLASH:
616620
node = Div([node, right])
617-
else:
621+
elif t == token.PERCENT:
618622
node = Mod([node, right])
623+
elif t == token.DOUBLESLASH:
624+
node = FloorDiv([node, right])
625+
else:
626+
raise ValueError, "unexpected token: %s" % t
619627
node.lineno = nodelist[1][2]
620628
return node
621629

@@ -750,10 +758,13 @@ def com_arglist(self, nodelist):
750758

751759
if i < len(nodelist):
752760
# should be DOUBLESTAR or STAR STAR
753-
if nodelist[i][0] == token.DOUBLESTAR:
761+
t = nodelist[i][0]
762+
if t == token.DOUBLESTAR:
754763
node = nodelist[i+1]
755-
else:
764+
elif t == token.STARSTAR:
756765
node = nodelist[i+2]
766+
else:
767+
raise ValueError, "unexpected token: %s" % t
757768
names.append(node[1])
758769
flags = flags | CO_VARKEYWORDS
759770

Tools/compiler/compiler/transformer.py

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -588,9 +588,11 @@ def shift_expr(self, nodelist):
588588
if nodelist[i-1][0] == token.LEFTSHIFT:
589589
node = LeftShift([node, right])
590590
node.lineno = nodelist[1][2]
591-
else:
591+
elif nodelist[i-1][0] == token.RIGHTSHIFT:
592592
node = RightShift([node, right])
593593
node.lineno = nodelist[1][2]
594+
else:
595+
raise ValueError, "unexpected token: %s" % nodelist[i-1][0]
594596
return node
595597

596598
def arith_expr(self, nodelist):
@@ -600,9 +602,11 @@ def arith_expr(self, nodelist):
600602
if nodelist[i-1][0] == token.PLUS:
601603
node = Add([node, right])
602604
node.lineno = nodelist[1][2]
603-
else:
605+
elif nodelist[i-1][0] == token.MINUS:
604606
node = Sub([node, right])
605607
node.lineno = nodelist[1][2]
608+
else:
609+
raise ValueError, "unexpected token: %s" % nodelist[i-1][0]
606610
return node
607611

608612
def term(self, nodelist):
@@ -614,8 +618,12 @@ def term(self, nodelist):
614618
node = Mul([node, right])
615619
elif t == token.SLASH:
616620
node = Div([node, right])
617-
else:
621+
elif t == token.PERCENT:
618622
node = Mod([node, right])
623+
elif t == token.DOUBLESLASH:
624+
node = FloorDiv([node, right])
625+
else:
626+
raise ValueError, "unexpected token: %s" % t
619627
node.lineno = nodelist[1][2]
620628
return node
621629

@@ -750,10 +758,13 @@ def com_arglist(self, nodelist):
750758

751759
if i < len(nodelist):
752760
# should be DOUBLESTAR or STAR STAR
753-
if nodelist[i][0] == token.DOUBLESTAR:
761+
t = nodelist[i][0]
762+
if t == token.DOUBLESTAR:
754763
node = nodelist[i+1]
755-
else:
764+
elif t == token.STARSTAR:
756765
node = nodelist[i+2]
766+
else:
767+
raise ValueError, "unexpected token: %s" % t
757768
names.append(node[1])
758769
flags = flags | CO_VARKEYWORDS
759770

0 commit comments

Comments
 (0)