diff --git a/parso/python/normalizer.py b/parso/python/normalizer.py index cb5d80e..ba52848 100644 --- a/parso/python/normalizer.py +++ b/parso/python/normalizer.py @@ -128,7 +128,20 @@ class Context(object): self._analyze_names(self._global_names, 'global') self._analyze_names(self._nonlocal_names, 'nonlocal') - #for self.global_names + # Python2.6 doesn't have dict comprehensions. + nonlocal_name_strs = dict((n.value, n) for n in self._nonlocal_names) + for global_name in self._global_names: + try: + nonlocal_name = nonlocal_name_strs[global_name.value] + except KeyError: + continue + + message = "name '%s' is nonlocal and global" % global_name.value + if global_name.start_pos < nonlocal_name.start_pos: + error_name = global_name + else: + error_name = nonlocal_name + self._add_syntax_error(message, error_name) def _analyze_names(self, globals_or_nonlocals, type_): def raise_(message): diff --git a/test/test_python_errors.py b/test/test_python_errors.py index 26976b4..eb355ed 100644 --- a/test/test_python_errors.py +++ b/test/test_python_errors.py @@ -220,6 +220,11 @@ def test_indentation_errors(code, positions): a = 3 nonlocal a '''), + dedent(''' + def x(): + global a + nonlocal a + '''), # IndentationError