From 143bdfcee6c3b3a4b688a7c9fca28a14d775c4e2 Mon Sep 17 00:00:00 2001 From: Thomas Wouters Date: Thu, 25 May 2006 11:26:25 +0000 Subject: [PATCH] Update graminit.c for the fix for #1488915, Multiple dots in relative import statement raise SyntaxError, and add testcase. --- Lib/test/test_importhooks.py | 11 ++++++++++- Python/graminit.c | 35 +++++++++++++++-------------------- 2 files changed, 25 insertions(+), 21 deletions(-) diff --git a/Lib/test/test_importhooks.py b/Lib/test/test_importhooks.py index 0693581c32d..e8b4695c7bc 100644 --- a/Lib/test/test_importhooks.py +++ b/Lib/test/test_importhooks.py @@ -14,6 +14,7 @@ def get_file(): absimp = "import sub\n" relimp = "from . import sub\n" +deeprelimp = "from .... import sub\n" futimp = "from __future__ import absolute_import\n" reload_src = test_src+"""\ @@ -26,6 +27,7 @@ reload_co = compile(reload_src, "", "exec") test2_oldabs_co = compile(absimp + test_src, "", "exec") test2_newabs_co = compile(futimp + absimp + test_src, "", "exec") test2_newrel_co = compile(relimp + test_src, "", "exec") +test2_deeprel_co = compile(deeprelimp + test_src, "", "exec") test2_futrel_co = compile(futimp + relimp + test_src, "", "exec") test_path = "!!!_test_!!!" @@ -46,10 +48,11 @@ class TestImporter: "hooktestmodule": (False, test_co), "hooktestpackage": (True, test_co), "hooktestpackage.sub": (True, test_co), - "hooktestpackage.sub.subber": (False, test_co), + "hooktestpackage.sub.subber": (True, test_co), "hooktestpackage.oldabs": (False, test2_oldabs_co), "hooktestpackage.newabs": (False, test2_newabs_co), "hooktestpackage.newrel": (False, test2_newrel_co), + "hooktestpackage.sub.subber.subest": (True, test2_deeprel_co), "hooktestpackage.futrel": (False, test2_futrel_co), "sub": (False, test_co), "reloadmodule": (False, test_co), @@ -203,6 +206,12 @@ class ImportHooksTestCase(ImportHooksBaseTestCase): self.assertEqual(hooktestpackage.newrel.sub, hooktestpackage.sub) + import hooktestpackage.sub.subber.subest as subest + self.assertEqual(subest.get_name(), + "hooktestpackage.sub.subber.subest") + self.assertEqual(subest.sub, + hooktestpackage.sub) + import hooktestpackage.futrel self.assertEqual(hooktestpackage.futrel.get_name(), "hooktestpackage.futrel") diff --git a/Python/graminit.c b/Python/graminit.c index ae367ce0636..8f20502b10a 100644 --- a/Python/graminit.c +++ b/Python/graminit.c @@ -517,41 +517,36 @@ static arc arcs_26_1[2] = { {12, 3}, }; static arc arcs_26_2[3] = { - {75, 4}, + {75, 2}, {12, 3}, - {72, 5}, + {72, 4}, }; static arc arcs_26_3[1] = { - {72, 5}, + {72, 4}, }; -static arc arcs_26_4[2] = { - {75, 4}, - {12, 3}, +static arc arcs_26_4[3] = { + {28, 5}, + {13, 6}, + {76, 5}, }; -static arc arcs_26_5[3] = { - {28, 6}, - {13, 7}, - {76, 6}, +static arc arcs_26_5[1] = { + {0, 5}, }; static arc arcs_26_6[1] = { - {0, 6}, + {76, 7}, }; static arc arcs_26_7[1] = { - {76, 8}, + {15, 5}, }; -static arc arcs_26_8[1] = { - {15, 6}, -}; -static state states_26[9] = { +static state states_26[8] = { {1, arcs_26_0}, {2, arcs_26_1}, {3, arcs_26_2}, {1, arcs_26_3}, - {2, arcs_26_4}, - {3, arcs_26_5}, + {3, arcs_26_4}, + {1, arcs_26_5}, {1, arcs_26_6}, {1, arcs_26_7}, - {1, arcs_26_8}, }; static arc arcs_27_0[1] = { {19, 1}, @@ -1839,7 +1834,7 @@ static dfa dfas[84] = { "\000\000\000\000\000\000\000\000\000\005\000\000\000\000\000\000\000\000\000\000\000"}, {281, "import_name", 0, 3, states_25, "\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000"}, - {282, "import_from", 0, 9, states_26, + {282, "import_from", 0, 8, states_26, "\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000"}, {283, "import_as_name", 0, 4, states_27, "\000\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},