Fix problems with validation of import statement parse trees.

This closes SF bug #127271.
This commit is contained in:
Fred Drake 2001-01-07 05:59:59 +00:00
parent 1109db443e
commit 711370831a
1 changed files with 24 additions and 5 deletions

View File

@ -1558,6 +1558,25 @@ validate_import_as_name(node *tree)
}
/* dotted_name: NAME ("." NAME)*
*/
static int
validate_dotted_name(node *tree)
{
int nch = NCH(tree);
int res = (validate_ntype(tree, dotted_name)
&& is_odd(nch)
&& validate_name(CHILD(tree, 0), NULL));
int i;
for (i = 1; res && (i < nch); i += 2) {
res = (validate_dot(CHILD(tree, i))
&& validate_name(CHILD(tree, i+1), NULL));
}
return res;
}
/* dotted_as_name: dotted_name [NAME NAME]
*/
static int
@ -1568,9 +1587,9 @@ validate_dotted_as_name(node *tree)
if (res) {
if (nch == 1)
res = validate_ntype(CHILD(tree, 0), dotted_name);
res = validate_dotted_name(CHILD(tree, 0));
else if (nch == 3)
res = (validate_ntype(CHILD(tree, 0), dotted_name)
res = (validate_dotted_name(CHILD(tree, 0))
&& validate_name(CHILD(tree, 1), "as")
&& validate_name(CHILD(tree, 2), NULL));
else {
@ -1601,12 +1620,12 @@ validate_import_stmt(node *tree)
res = validate_dotted_as_name(CHILD(tree, 1));
for (j = 2; res && (j < nch); j += 2)
res = (validate_comma(CHILD(tree, j))
&& validate_ntype(CHILD(tree, j + 1), dotted_name));
&& validate_dotted_as_name(CHILD(tree, j + 1)));
}
else if (res && (res = validate_name(CHILD(tree, 0), "from"))) {
res = ((nch >= 4) && is_even(nch)
&& validate_name(CHILD(tree, 2), "import")
&& validate_dotted_as_name(CHILD(tree, 1)));
&& validate_dotted_name(CHILD(tree, 1))
&& validate_name(CHILD(tree, 2), "import"));
if (nch == 4) {
if (TYPE(CHILD(tree, 3)) == import_as_name)
res = validate_import_as_name(CHILD(tree, 3));