]> granicus.if.org Git - python/commitdiff
Merged revisions 82555 via svnmerge from
authorMark Dickinson <dickinsm@gmail.com>
Sun, 4 Jul 2010 18:39:48 +0000 (18:39 +0000)
committerMark Dickinson <dickinsm@gmail.com>
Sun, 4 Jul 2010 18:39:48 +0000 (18:39 +0000)
svn+ssh://pythondev@svn.python.org/python/branches/py3k

........
  r82555 | mark.dickinson | 2010-07-04 19:38:57 +0100 (Sun, 04 Jul 2010) | 2 lines

  Issue #9130: Validate ellipsis tokens in relative imports.
........

Lib/test/test_parser.py
Modules/parsermodule.c

index 17111b07ae75300393f899499083273bd559a9d1..04b45be0aeab61f613d2ff1a26d1ef0611fc5e66 100644 (file)
@@ -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"
index c9150d943167c18ee2d1fe132fc9ea4a8338f109..77b890a284b843eb9171ff890cb4ae8a6e5e93da 100644 (file)
@@ -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 | '.'+)