[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;
                  }
              }