[Python-checkins] CVS: python/dist/src/Modules parsermodule.c,2.57,2.57.2.1
Moshe Zadka
moshez@users.sourceforge.net
Sat, 31 Mar 2001 02:29:05 -0800
Update of /cvsroot/python/python/dist/src/Modules
In directory usw-pr-cvs1:/tmp/cvs-serv19544/Modules
Modified Files:
Tag: release20-maint
parsermodule.c
Log Message:
#125375 - parsermodule.c - fix parser.tuple2ast() failure on valid parse tree
Index: parsermodule.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Modules/parsermodule.c,v
retrieving revision 2.57
retrieving revision 2.57.2.1
diff -C2 -r2.57 -r2.57.2.1
*** parsermodule.c 2000/09/12 21:58:06 2.57
--- parsermodule.c 2001/03/31 10:29:03 2.57.2.1
***************
*** 1099,1102 ****
--- 1099,1104 ----
int sym;
+ if (!res)
+ return 0;
if (nch < 1) {
err_string("varargslist missing child nodes");
***************
*** 1105,1108 ****
--- 1107,1113 ----
sym = TYPE(CHILD(tree, 0));
if (sym == STAR || sym == DOUBLESTAR)
+ /* whole thing matches:
+ * '*' NAME [',' '**' NAME] | '**' NAME
+ */
res = validate_varargslist_trailer(tree, 0);
else if (sym == fpdef) {
***************
*** 1128,1136 ****
if (res && i < nch) {
res = validate_comma(CHILD(tree, i));
! if (res)
! ++i;
}
}
! /* handle '*' NAME [',' '**' NAME] | '**' NAME */
if (res)
res = validate_varargslist_trailer(tree, i);
--- 1133,1146 ----
if (res && i < nch) {
res = validate_comma(CHILD(tree, i));
! ++i;
! if (res && i < nch
! && (TYPE(CHILD(tree, i)) == DOUBLESTAR
! || TYPE(CHILD(tree, i)) == STAR))
! break;
}
}
! /* ... '*' NAME [',' '**' NAME] | '**' NAME
! * i --^^^
! */
if (res)
res = validate_varargslist_trailer(tree, i);
***************
*** 1140,1143 ****
--- 1150,1154 ----
* fpdef ['=' test] (',' fpdef ['=' test])* [',']
*/
+ /* strip trailing comma node */
if (sym == COMMA) {
res = validate_comma(CHILD(tree, nch-1));
***************
*** 1151,1157 ****
res = validate_fpdef(CHILD(tree, 0));
++i;
! if (res && (i+2 < nch) && TYPE(CHILD(tree, 1)) == EQUAL) {
! res = (validate_equal(CHILD(tree, 1))
! && validate_test(CHILD(tree, 2)));
i += 2;
}
--- 1162,1168 ----
res = validate_fpdef(CHILD(tree, 0));
++i;
! if (res && (i+2 <= nch) && TYPE(CHILD(tree, i)) == EQUAL) {
! res = (validate_equal(CHILD(tree, i))
! && validate_test(CHILD(tree, i+1)));
i += 2;
}
***************
*** 1164,1173 ****
&& validate_fpdef(CHILD(tree, i+1)));
i += 2;
! if (res && (nch - i) >= 2
! && TYPE(CHILD(tree, i)) == COMMA) {
! res = (validate_comma(CHILD(tree, i))
&& validate_test(CHILD(tree, i+1)));
! if (res)
! i += 2;
}
}
--- 1175,1182 ----
&& validate_fpdef(CHILD(tree, i+1)));
i += 2;
! if (res && (nch - i) >= 2 && TYPE(CHILD(tree, i)) == EQUAL) {
! res = (validate_equal(CHILD(tree, i))
&& validate_test(CHILD(tree, i+1)));
! i += 2;
}
}