Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
57404891
Commit
57404891
authored
Apr 29, 2012
by
Mark Dickinson
Browse files
Options
Browse Files
Download
Plain Diff
Issue #14696: Merge from 3.2
parents
53c6651a
407b3bd8
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
48 additions
and
5 deletions
+48
-5
Lib/test/test_parser.py
Lib/test/test_parser.py
+10
-0
Misc/NEWS
Misc/NEWS
+2
-0
Modules/parsermodule.c
Modules/parsermodule.c
+36
-5
No files found.
Lib/test/test_parser.py
View file @
57404891
...
...
@@ -61,6 +61,16 @@ class RoundtripLegalSyntaxTestCase(unittest.TestCase):
" if (yield):
\
n
"
" yield x
\
n
"
)
def
test_nonlocal_statement
(
self
):
self
.
check_suite
(
"def f():
\
n
"
" x = 0
\
n
"
" def g():
\
n
"
" nonlocal x
\
n
"
)
self
.
check_suite
(
"def f():
\
n
"
" x = y = 0
\
n
"
" def g():
\
n
"
" nonlocal x, y
\
n
"
)
def
test_expressions
(
self
):
self
.
check_expr
(
"foo(1)"
)
self
.
check_expr
(
"[1, 2, 3]"
)
...
...
Misc/NEWS
View file @
57404891
...
...
@@ -84,6 +84,8 @@ Core and Builtins
Library
-------
- Issue #14696: Fix parser module to understand '
nonlocal
' declarations.
- Issue #10941: Fix imaplib.Internaldate2tuple to produce correct result near
the DST transition. Patch by Joe Peterson.
...
...
Modules/parsermodule.c
View file @
57404891
...
...
@@ -956,7 +956,8 @@ VALIDATER(del_stmt);
VALIDATER
(
return_stmt
);
VALIDATER
(
raise_stmt
);
VALIDATER
(
import_stmt
);
VALIDATER
(
import_stmt
);
VALIDATER
(
import_name
);
VALIDATER
(
yield_stmt
);
VALIDATER
(
global_stmt
);
VALIDATER
(
assert_stmt
);
VALIDATER
(
global_stmt
);
VALIDATER
(
nonlocal_stmt
);
VALIDATER
(
assert_stmt
);
VALIDATER
(
compound_stmt
);
VALIDATER
(
test_or_star_expr
);
VALIDATER
(
while
);
VALIDATER
(
for
);
VALIDATER
(
try
);
VALIDATER
(
except_clause
);
...
...
@@ -1480,6 +1481,7 @@ validate_small_stmt(node *tree)
||
(
ntype
==
flow_stmt
)
||
(
ntype
==
import_stmt
)
||
(
ntype
==
global_stmt
)
||
(
ntype
==
nonlocal_stmt
)
||
(
ntype
==
assert_stmt
))
res
=
validate_node
(
CHILD
(
tree
,
0
));
else
{
...
...
@@ -1864,8 +1866,10 @@ validate_import_stmt(node *tree)
}
/* global_stmt:
*
* 'global' NAME (',' NAME)*
*/
static
int
validate_global_stmt
(
node
*
tree
)
{
...
...
@@ -1887,6 +1891,30 @@ validate_global_stmt(node *tree)
return
(
res
);
}
/* nonlocal_stmt:
*
* 'nonlocal' NAME (',' NAME)*
*/
static
int
validate_nonlocal_stmt
(
node
*
tree
)
{
int
j
;
int
nch
=
NCH
(
tree
);
int
res
=
(
validate_ntype
(
tree
,
nonlocal_stmt
)
&&
is_even
(
nch
)
&&
(
nch
>=
2
));
if
(
!
res
&&
!
PyErr_Occurred
())
err_string
(
"illegal nonlocal statement"
);
if
(
res
)
res
=
(
validate_name
(
CHILD
(
tree
,
0
),
"nonlocal"
)
&&
validate_ntype
(
CHILD
(
tree
,
1
),
NAME
));
for
(
j
=
2
;
res
&&
(
j
<
nch
);
j
+=
2
)
res
=
(
validate_comma
(
CHILD
(
tree
,
j
))
&&
validate_ntype
(
CHILD
(
tree
,
j
+
1
),
NAME
));
return
res
;
}
/* assert_stmt:
*
...
...
@@ -2951,8 +2979,8 @@ validate_node(node *tree)
break
;
case
small_stmt
:
/*
* expr_stmt | del_stmt | pass_stmt | flow_stmt
*
| import_stmt | glob
al_stmt | assert_stmt
* expr_stmt | del_stmt | pass_stmt | flow_stmt
|
*
import_stmt | global_stmt | nonloc
al_stmt | assert_stmt
*/
res
=
validate_small_stmt
(
tree
);
break
;
...
...
@@ -3019,6 +3047,9 @@ validate_node(node *tree)
case
global_stmt
:
res
=
validate_global_stmt
(
tree
);
break
;
case
nonlocal_stmt
:
res
=
validate_nonlocal_stmt
(
tree
);
break
;
case
assert_stmt
:
res
=
validate_assert_stmt
(
tree
);
break
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment