From: Michael Meskes
authorMarc G. Fournier
Sun, 31 Jan 1999 19:56:28 +0000 (19:56 +0000)
committerMarc G. Fournier
Sun, 31 Jan 1999 19:56:28 +0000 (19:56 +0000)
+
+ Wed Jan 27 12:42:22 CET 1999
+
+       - Fixed bug that caused ecpg to lose 'goto' information.
+       - Set ecpg version to 2.4.7
+
+ Fri Jan 29 18:03:52 CET 1999
+
+       - Fixed bug that caused 'enum' to be rejected in pure C code.
+       - Fixed bug that caused function names to be translated to lower case.
+       - Set ecpg version to 2.4.8
+

src/interfaces/ecpg/ChangeLog
src/interfaces/ecpg/preproc/Makefile
src/interfaces/ecpg/preproc/pgc.l
src/interfaces/ecpg/preproc/preproc.y
src/interfaces/ecpg/test/header_test.h

index 9675f4822728417e230a1959306d953aecfb1a91..9e4389dac27d666935510498687f46bb871ee984 100644 (file)
@@ -383,3 +383,15 @@ Thu Jan 21 21:29:00 CET 1999
    - Set library version to 2.6.3
    - Added 'exec sql whenever sqlwarning'.
    - Set ecpg version to 2.4.6
+
+Wed Jan 27 12:42:22 CET 1999
+
+   - Fixed bug that caused ecpg to lose 'goto' information.
+   - Set ecpg version to 2.4.7
+
+Fri Jan 29 18:03:52 CET 1999
+
+   - Fixed bug that caused 'enum' to be rejected in pure C code.
+   - Fixed bug that caused function names to be translated to lower case.
+   - Set ecpg version to 2.4.8
index 2a3f5b26335be9f50f772ede6230fc6bbdb11919..7d13a7a98ad813aca25e6ce6af3beb4292bf6d40 100644 (file)
@@ -3,7 +3,7 @@ include $(SRCDIR)/Makefile.global
 
 MAJOR_VERSION=2
 MINOR_VERSION=4
-PATCHLEVEL=6
+PATCHLEVEL=8
 
 CFLAGS+=-I../include -DMAJOR_VERSION=$(MAJOR_VERSION) \
    -DMINOR_VERSION=$(MINOR_VERSION) -DPATCHLEVEL=$(PATCHLEVEL) \
index 2af1e3e522befd03a2fea0062ee24f2bb2b2861f..e6ef819a595821df005ed8deea562917ca98ac3d 100644 (file)
@@ -333,22 +333,23 @@ cppline       {space}*#.*(\\{space}*\n)*\n*
 {identifier}/{space}*-{number}    {
                    int i;
                    ScanKeyword     *keyword;
+                   char lower_text[NAMEDATALEN];
 
                    BEGIN(xm);
-                   for(i = 0; yytext[i]; i++)
-                       if (isascii((unsigned char)yytext[i]) && isupper(yytext[i]))
-                           yytext[i] = tolower(yytext[i]);
-
-                   if (i >= NAMEDATALEN)
-                       yytext[NAMEDATALEN-1] = '\0';
-
-                   keyword = ScanKeywordLookup((char*)yytext);
+                   /* this should leave the last byte set to '\0' */
+                   strncpy(lower_text, yytext, NAMEDATALEN-1);
+                   for(i = 0; lower_text[i]; i++)
+                       if (isascii((unsigned char)lower_text[i]) && isupper(lower_text[i]))
+                           lower_text[i] = tolower(lower_text[i]);
+
+printf("yyt= %s, lt = %s\n", yytext, lower_text);
+                   keyword = ScanKeywordLookup((char*)lower_text);
                    if (keyword != NULL) {
                        return keyword->value;
                    }
                    else
                    {
-                       keyword = ScanECPGKeywordLookup((char*)yytext);
+                       keyword = ScanECPGKeywordLookup((char*)lower_text);
                        if (keyword != NULL) {
                            return keyword->value;
                        }
@@ -475,21 +476,22 @@ cppline       {space}*#.*(\\{space}*\n)*\n*
 {identifier}  {
                    int i;
                    ScanKeyword     *keyword;
+                   char lower_text[NAMEDATALEN];
 
-                   for(i = 0; yytext[i]; i++)
-                       if (isascii((unsigned char)yytext[i]) && isupper(yytext[i]))
-                           yytext[i] = tolower(yytext[i]);
-
-                   if (i >= NAMEDATALEN)
-                       yytext[NAMEDATALEN-1] = '\0';
+                   /* this should leave the last byte set to '\0' */
+                   strncpy(lower_text, yytext, NAMEDATALEN-1);
+                   for(i = 0; lower_text[i]; i++)
+                       if (isascii((unsigned char)lower_text[i]) && isupper(lower_text[i]))
+                           lower_text[i] = tolower(lower_text[i]);
 
-                   keyword = ScanKeywordLookup((char*)yytext);
+printf("yyt= %s, lt = %s\n", yytext, lower_text);
+                   keyword = ScanKeywordLookup((char*)lower_text);
                    if (keyword != NULL) {
                        return keyword->value;
                    }
                    else
                    {
-                       keyword = ScanECPGKeywordLookup((char*)yytext);
+                       keyword = ScanECPGKeywordLookup((char*)lower_text);
                        if (keyword != NULL) {
                            return keyword->value;
                        }
index 0e34aa36dcdb7eba0ca08efe27a1cd1df1baafcf..cda77f5281c4d7c21a567ab54b1c67f3314167fc 100644 (file)
@@ -521,7 +521,8 @@ output_statement(char * stmt, int mode)
 /* special embedded SQL token */
 %token     SQL_BREAK SQL_CALL SQL_CONNECT SQL_CONNECTION SQL_CONTINUE
 %token     SQL_DISCONNECT SQL_FOUND SQL_GO SQL_GOTO
-%token     SQL_IDENTIFIED SQL_IMMEDIATE SQL_INDICATOR SQL_OPEN SQL_RELEASE
+%token     SQL_IDENTIFIED SQL_IMMEDIATE SQL_INDICATOR SQL_OPEN 
+%token     SQL_PREPARE SQL_RELEASE
 %token     SQL_SECTION SQL_SEMI SQL_SQLERROR SQL_SQLPRINT SQL_START
 %token     SQL_STOP SQL_WHENEVER SQL_SQLWARNING
 
@@ -813,6 +814,9 @@ stmt:  AddAttrStmt          { output_statement($1, 0); }
                        output_line_number();
                        free($1);
                    }
+       | ECPGPrepare       {
+                       yyerror("PREPARE is not supported yet.");
+                   }
 
 /*
  * We start with a lot of stuff that's very similar to the backend's parsing
@@ -4671,12 +4675,12 @@ action : SQL_CONTINUE {
 }
        | SQL_GOTO name {
         $$.code = W_GOTO;
-        $$.command = $2;
+        $$.command = strdup($2);
    $$.str = cat2_str(make1_str("goto "), $2);
 }
        | SQL_GO TO name {
         $$.code = W_GOTO;
-        $$.command = $3;
+        $$.command = strdup($3);
    $$.str = cat2_str(make1_str("goto "), $3);
 }
        | DO name '(' dotext ')' {
@@ -4695,8 +4699,15 @@ action : SQL_CONTINUE {
    $$.str = cat2_str(make1_str("call"), mm_strdup($$.command));
 }
 
-/* some other stuff for ecpg */
+/*
+ * As long as the prepare statement in not supported by the backend, we will
+ * try to simulate it here so we get dynamic SQL 
+ */
+ECPGPrepare: SQL_PREPARE name FROM name
+   {
+   }
 
+/* some other stuff for ecpg */
 ecpg_expr:  attr opt_indirection
                {
                    $$ = cat2_str($1, $2);
@@ -5032,6 +5043,7 @@ c_anything:  IDENT    { $$ = $1; }
    | S_CHAR    { $$ = make1_str("char"); }
    | S_CONST   { $$ = make1_str("const"); }
    | S_DOUBLE  { $$ = make1_str("double"); }
+   | S_ENUM    { $$ = make1_str("enum"); }
    | S_EXTERN  { $$ = make1_str("extern"); }
    | S_FLOAT   { $$ = make1_str("float"); }
         | S_INT        { $$ = make1_str("int"); }
index 5050113e1844d502eab558de77744c67c9f18b9f..d6a84322b175a40e94e1ae13708d5b7f656474a2 100644 (file)
@@ -1,9 +1,9 @@
 exec sql include sqlca;
 
-exec sql whenever sqlerror do print_and_stop();
+exec sql whenever sqlerror do PrintAndStop();
 exec sql whenever sqlwarning do warn();
 
-void print_and_stop(void)
+void PrintAndStop(void)
 {
    sqlprint();
    exit(-1);