From 7abf520d6c8c820f42332d51c58a192db658ac29 Mon Sep 17 00:00:00 2001 From: Jeremy Hylton Date: Wed, 29 Aug 2001 18:12:30 +0000 Subject: 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. --- Lib/compiler/transformer.py | 21 ++++++++++++++++----- Tools/compiler/compiler/transformer.py | 21 ++++++++++++++++----- 2 files changed, 32 insertions(+), 10 deletions(-) diff --git a/Lib/compiler/transformer.py b/Lib/compiler/transformer.py index 7f61595..323aa20 100644 --- a/Lib/compiler/transformer.py +++ b/Lib/compiler/transformer.py @@ -588,9 +588,11 @@ class Transformer: if nodelist[i-1][0] == token.LEFTSHIFT: node = LeftShift([node, right]) node.lineno = nodelist[1][2] - else: + elif nodelist[i-1][0] == token.RIGHTSHIFT: node = RightShift([node, right]) node.lineno = nodelist[1][2] + else: + raise ValueError, "unexpected token: %s" % nodelist[i-1][0] return node def arith_expr(self, nodelist): @@ -600,9 +602,11 @@ class Transformer: if nodelist[i-1][0] == token.PLUS: node = Add([node, right]) node.lineno = nodelist[1][2] - else: + elif nodelist[i-1][0] == token.MINUS: node = Sub([node, right]) node.lineno = nodelist[1][2] + else: + raise ValueError, "unexpected token: %s" % nodelist[i-1][0] return node def term(self, nodelist): @@ -614,8 +618,12 @@ class Transformer: node = Mul([node, right]) elif t == token.SLASH: node = Div([node, right]) - else: + elif t == token.PERCENT: node = Mod([node, right]) + elif t == token.DOUBLESLASH: + node = FloorDiv([node, right]) + else: + raise ValueError, "unexpected token: %s" % t node.lineno = nodelist[1][2] return node @@ -750,10 +758,13 @@ class Transformer: if i < len(nodelist): # should be DOUBLESTAR or STAR STAR - if nodelist[i][0] == token.DOUBLESTAR: + t = nodelist[i][0] + if t == token.DOUBLESTAR: node = nodelist[i+1] - else: + elif t == token.STARSTAR: node = nodelist[i+2] + else: + raise ValueError, "unexpected token: %s" % t names.append(node[1]) flags = flags | CO_VARKEYWORDS diff --git a/Tools/compiler/compiler/transformer.py b/Tools/compiler/compiler/transformer.py index 7f61595..323aa20 100644 --- a/Tools/compiler/compiler/transformer.py +++ b/Tools/compiler/compiler/transformer.py @@ -588,9 +588,11 @@ class Transformer: if nodelist[i-1][0] == token.LEFTSHIFT: node = LeftShift([node, right]) node.lineno = nodelist[1][2] - else: + elif nodelist[i-1][0] == token.RIGHTSHIFT: node = RightShift([node, right]) node.lineno = nodelist[1][2] + else: + raise ValueError, "unexpected token: %s" % nodelist[i-1][0] return node def arith_expr(self, nodelist): @@ -600,9 +602,11 @@ class Transformer: if nodelist[i-1][0] == token.PLUS: node = Add([node, right]) node.lineno = nodelist[1][2] - else: + elif nodelist[i-1][0] == token.MINUS: node = Sub([node, right]) node.lineno = nodelist[1][2] + else: + raise ValueError, "unexpected token: %s" % nodelist[i-1][0] return node def term(self, nodelist): @@ -614,8 +618,12 @@ class Transformer: node = Mul([node, right]) elif t == token.SLASH: node = Div([node, right]) - else: + elif t == token.PERCENT: node = Mod([node, right]) + elif t == token.DOUBLESLASH: + node = FloorDiv([node, right]) + else: + raise ValueError, "unexpected token: %s" % t node.lineno = nodelist[1][2] return node @@ -750,10 +758,13 @@ class Transformer: if i < len(nodelist): # should be DOUBLESTAR or STAR STAR - if nodelist[i][0] == token.DOUBLESTAR: + t = nodelist[i][0] + if t == token.DOUBLESTAR: node = nodelist[i+1] - else: + elif t == token.STARSTAR: node = nodelist[i+2] + else: + raise ValueError, "unexpected token: %s" % t names.append(node[1]) flags = flags | CO_VARKEYWORDS -- cgit v0.12