diff options
-rw-r--r-- | Lib/test/test_parser.py | 6 | ||||
-rw-r--r-- | Modules/parsermodule.c | 12 |
2 files changed, 12 insertions, 6 deletions
diff --git a/Lib/test/test_parser.py b/Lib/test/test_parser.py index 17111b0..04b45be 100644 --- a/Lib/test/test_parser.py +++ b/Lib/test/test_parser.py @@ -193,8 +193,14 @@ class RoundtripLegalSyntaxTestCase(unittest.TestCase): def test_relative_imports(self): self.check_suite("from . import name") self.check_suite("from .. import name") + # check all the way up to '....', since '...' is tokenized + # differently from '.' (it's an ellipsis token). + self.check_suite("from ... import name") + self.check_suite("from .... import name") self.check_suite("from .pkg import name") self.check_suite("from ..pkg import name") + self.check_suite("from ...pkg import name") + self.check_suite("from ....pkg import name") def test_pep263(self): self.check_suite("# -*- coding: iso-8859-1 -*-\n" diff --git a/Modules/parsermodule.c b/Modules/parsermodule.c index c9150d9..77b890a 100644 --- a/Modules/parsermodule.c +++ b/Modules/parsermodule.c @@ -1750,17 +1750,17 @@ validate_import_name(node *tree) && validate_dotted_as_names(CHILD(tree, 1))); } -/* Helper function to count the number of leading dots in +/* Helper function to count the number of leading dots (or ellipsis tokens) in * 'from ...module import name' */ static int count_from_dots(node *tree) { - int i; - for (i = 1; i < NCH(tree); i++) - if (TYPE(CHILD(tree, i)) != DOT) - break; - return i-1; + int i; + for (i = 1; i < NCH(tree); i++) + if (TYPE(CHILD(tree, i)) != DOT && TYPE(CHILD(tree, i)) != ELLIPSIS) + break; + return i - 1; } /* import_from: ('from' ('.'* dotted_name | '.'+) |