I am seeing the following plpgsql compile failure in CVS:

        #$ gmake
        bison -y -d  gram.y
        NONE:0: /usr/contrib/bin/gm4: ERROR: EOF in string
        sed -e 's/yy/plpgsql_yy/g' -e 's/YY/PLPGSQL_YY/g' < y.tab.c >
        ./pl_gram.c
        /bin/sh: cannot open y.tab.c: no such file
        gmake: *** [pl.tab.h] Error 2

I believe it is related to this commit:
        
        revision 1.41
        date: 2003/03/25 03:16:40;  author: tgl;  state: Exp;  lines: +29 -6
        plpgsql can assign to subscripted variables now, e.g.
                x[42] := whatever;
        The facility is pretty primitive because it doesn't do array slicing and
        it has the same semantics as array update in SQL (array must already
        be non-null, etc).  But it's a start.

I have attached the change --- anyone see the cause?  I have bison 1.75.

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  [EMAIL PROTECTED]               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073
Index: gram.y
===================================================================
RCS file: /cvsroot/pgsql-server/src/pl/plpgsql/src/gram.y,v
retrieving revision 1.40
retrieving revision 1.41
diff -c -c -r1.40 -r1.41
*** gram.y      10 Nov 2002 00:35:58 -0000      1.40
--- gram.y      25 Mar 2003 03:16:40 -0000      1.41
***************
*** 4,10 ****
   *                                              procedural language
   *
   * IDENTIFICATION
!  *      $Header: /cvsroot/pgsql-server/src/pl/plpgsql/src/gram.y,v 1.40 2002/11/10 
00:35:58 momjian Exp $
   *
   *      This software is copyrighted by Jan Wieck - Hamburg.
   *
--- 4,10 ----
   *                                              procedural language
   *
   * IDENTIFICATION
!  *      $Header: /cvsroot/pgsql-server/src/pl/plpgsql/src/gram.y,v 1.41 2003/03/25 
03:16:40 tgl Exp $
   *
   *      This software is copyrighted by Jan Wieck - Hamburg.
   *
***************
*** 105,111 ****
  %type <nsitem>        decl_aliasitem
  %type <str>           decl_stmts decl_stmt
  
! %type <expr>  expr_until_semi expr_until_then expr_until_loop
  %type <expr>  opt_exitcond
  
  %type <ival>  assign_var cursor_variable
--- 105,112 ----
  %type <nsitem>        decl_aliasitem
  %type <str>           decl_stmts decl_stmt
  
! %type <expr>  expr_until_semi expr_until_rightbracket
! %type <expr>  expr_until_then expr_until_loop
  %type <expr>  opt_exitcond
  
  %type <ival>  assign_var cursor_variable
***************
*** 822,827 ****
--- 823,843 ----
                                                check_assignable(yylval.variable);
                                                $$ = yylval.variable->dno;
                                        }
+                               | assign_var '[' expr_until_rightbracket
+                                       {
+                                               PLpgSQL_arrayelem       *new;
+ 
+                                               new = 
malloc(sizeof(PLpgSQL_arrayelem));
+                                               memset(new, 0, 
sizeof(PLpgSQL_arrayelem));
+ 
+                                               new->dtype              = 
PLPGSQL_DTYPE_ARRAYELEM;
+                                               new->subscript  = $3;
+                                               new->arrayparentno = $1;
+ 
+                                               plpgsql_adddatum((PLpgSQL_datum *)new);
+ 
+                                               $$ = new->dno;
+                                       }
                                ;
  
  stmt_if                       : K_IF lno expr_until_then proc_sect stmt_else K_END 
K_IF ';'
***************
*** 1491,1496 ****
--- 1507,1516 ----
                                        { $$ = plpgsql_read_expression(';', ";"); }
                                ;
  
+ expr_until_rightbracket :
+                                       { $$ = plpgsql_read_expression(']', "]"); }
+                               ;
+ 
  expr_until_then :
                                        { $$ = plpgsql_read_expression(K_THEN, 
"THEN"); }
                                ;
***************
*** 1577,1592 ****
        for (;;)
        {
                tok = yylex();
!               if (tok == '(')
                        parenlevel++;
!               else if (tok == ')')
                {
                        parenlevel--;
                        if (parenlevel < 0)
                                elog(ERROR, "mismatched parentheses");
                }
-               else if (parenlevel == 0 && tok == until)
-                       break;
                /*
                 * End of function definition is an error, and we don't expect to
                 * hit a semicolon either (unless it's the until symbol, in which
--- 1597,1612 ----
        for (;;)
        {
                tok = yylex();
!               if (tok == until && parenlevel == 0)
!                       break;
!               if (tok == '(' || tok == '[')
                        parenlevel++;
!               else if (tok == ')' || tok == ']')
                {
                        parenlevel--;
                        if (parenlevel < 0)
                                elog(ERROR, "mismatched parentheses");
                }
                /*
                 * End of function definition is an error, and we don't expect to
                 * hit a semicolon either (unless it's the until symbol, in which
***************
*** 1986,1991 ****
--- 2006,2014 ----
                        }
                        break;
                case PLPGSQL_DTYPE_RECFIELD:
+                       /* always assignable? */
+                       break;
+               case PLPGSQL_DTYPE_ARRAYELEM:
                        /* always assignable? */
                        break;
                case PLPGSQL_DTYPE_TRIGARG:
---------------------------(end of broadcast)---------------------------
TIP 6: Have you searched our list archives?

http://archives.postgresql.org

Reply via email to