Teach the parsermodule about floor division. Fixes
[ 676521 ] parser module validation failure
bugfix candidate.
diff --git a/Lib/test/test_parser.py b/Lib/test/test_parser.py
index c0b1bfc..81708b5 100644
--- a/Lib/test/test_parser.py
+++ b/Lib/test/test_parser.py
@@ -51,6 +51,10 @@
self.check_expr("foo(a, b, c, *args, **kw)")
self.check_expr("foo(a, b, c, **kw)")
self.check_expr("foo + bar")
+ self.check_expr("foo - bar")
+ self.check_expr("foo * bar")
+ self.check_expr("foo / bar")
+ self.check_expr("foo // bar")
self.check_expr("lambda: 0")
self.check_expr("lambda x: 0")
self.check_expr("lambda *y: 0")
@@ -85,6 +89,7 @@
self.check_suite("a -= b")
self.check_suite("a *= b")
self.check_suite("a /= b")
+ self.check_suite("a //= b")
self.check_suite("a %= b")
self.check_suite("a &= b")
self.check_suite("a |= b")
diff --git a/Modules/parsermodule.c b/Modules/parsermodule.c
index e0c7431..fd03067 100644
--- a/Modules/parsermodule.c
+++ b/Modules/parsermodule.c
@@ -1440,6 +1440,7 @@
|| strcmp(s, "-=") == 0
|| strcmp(s, "*=") == 0
|| strcmp(s, "/=") == 0
+ || strcmp(s, "//=") == 0
|| strcmp(s, "%=") == 0
|| strcmp(s, "&=") == 0
|| strcmp(s, "|=") == 0
@@ -2095,6 +2096,7 @@
for ( ; res && (pos < nch); pos += 2)
res = (((TYPE(CHILD(tree, pos)) == STAR)
|| (TYPE(CHILD(tree, pos)) == SLASH)
+ || (TYPE(CHILD(tree, pos)) == DOUBLESLASH)
|| (TYPE(CHILD(tree, pos)) == PERCENT))
&& validate_factor(CHILD(tree, pos + 1)));