Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Use "%option prefix" to set API names in ecpg's lexer.
authorTom Lane <tgl@sss.pgh.pa.us>
Sun, 11 Dec 2016 23:04:28 +0000 (18:04 -0500)
committerTom Lane <tgl@sss.pgh.pa.us>
Sun, 11 Dec 2016 23:04:28 +0000 (18:04 -0500)
Back-patch commit 92fb64983 into the pre-9.6 branches.

Without this, ecpg fails to build with the latest version of flex.
It's not unreasonable that people would want to compile our old branches
with recent tools.  Per report from Дилян Палаузов.

Discussion: https://postgr.es/m/d845c1af-e18d-6651-178f-9f08cdf37e10@aegee.org

src/interfaces/ecpg/preproc/descriptor.c
src/interfaces/ecpg/preproc/ecpg.addons
src/interfaces/ecpg/preproc/ecpg.c
src/interfaces/ecpg/preproc/ecpg.header
src/interfaces/ecpg/preproc/ecpg.trailer
src/interfaces/ecpg/preproc/extern.h
src/interfaces/ecpg/preproc/output.c
src/interfaces/ecpg/preproc/parser.c
src/interfaces/ecpg/preproc/pgc.l
src/interfaces/ecpg/preproc/variable.c

index ebd95d3c4ba80cba95b282dc2a0db60a4d5673bb..8816c16178a57af33fb6402dd9164673d1ecb37d 100644 (file)
@@ -58,7 +58,7 @@ ECPGnumeric_lvalue(char *name)
        case ECPGt_unsigned_long:
        case ECPGt_unsigned_long_long:
        case ECPGt_const:
-           fputs(name, yyout);
+           fputs(name, base_yyout);
            break;
        default:
            mmerror(PARSE_ERROR, ET_ERROR, "variable \"%s\" must have a numeric type", name);
@@ -152,7 +152,7 @@ output_get_descr_header(char *desc_name)
 {
    struct assignment *results;
 
-   fprintf(yyout, "{ ECPGget_desc_header(__LINE__, %s, &(", desc_name);
+   fprintf(base_yyout, "{ ECPGget_desc_header(__LINE__, %s, &(", desc_name);
    for (results = assignments; results != NULL; results = results->next)
    {
        if (results->value == ECPGd_count)
@@ -162,7 +162,7 @@ output_get_descr_header(char *desc_name)
    }
 
    drop_assignments();
-   fprintf(yyout, "));\n");
+   fprintf(base_yyout, "));\n");
    whenever_action(3);
 }
 
@@ -171,7 +171,7 @@ output_get_descr(char *desc_name, char *index)
 {
    struct assignment *results;
 
-   fprintf(yyout, "{ ECPGget_desc(__LINE__, %s, %s,", desc_name, index);
+   fprintf(base_yyout, "{ ECPGget_desc(__LINE__, %s, %s,", desc_name, index);
    for (results = assignments; results != NULL; results = results->next)
    {
        const struct variable *v = find_variable(results->variable);
@@ -188,12 +188,13 @@ output_get_descr(char *desc_name, char *index)
            default:
                break;
        }
-       fprintf(yyout, "%s,", get_dtype(results->value));
-       ECPGdump_a_type(yyout, v->name, v->type, v->brace_level, NULL, NULL, -1, NULL, NULL, str_zero, NULL, NULL);
+       fprintf(base_yyout, "%s,", get_dtype(results->value));
+       ECPGdump_a_type(base_yyout, v->name, v->type, v->brace_level,
+                       NULL, NULL, -1, NULL, NULL, str_zero, NULL, NULL);
        free(str_zero);
    }
    drop_assignments();
-   fputs("ECPGd_EODT);\n", yyout);
+   fputs("ECPGd_EODT);\n", base_yyout);
 
    whenever_action(2 | 1);
 }
@@ -203,7 +204,7 @@ output_set_descr_header(char *desc_name)
 {
    struct assignment *results;
 
-   fprintf(yyout, "{ ECPGset_desc_header(__LINE__, %s, (int)(", desc_name);
+   fprintf(base_yyout, "{ ECPGset_desc_header(__LINE__, %s, (int)(", desc_name);
    for (results = assignments; results != NULL; results = results->next)
    {
        if (results->value == ECPGd_count)
@@ -213,7 +214,7 @@ output_set_descr_header(char *desc_name)
    }
 
    drop_assignments();
-   fprintf(yyout, "));\n");
+   fprintf(base_yyout, "));\n");
    whenever_action(3);
 }
 
@@ -264,7 +265,7 @@ output_set_descr(char *desc_name, char *index)
 {
    struct assignment *results;
 
-   fprintf(yyout, "{ ECPGset_desc(__LINE__, %s, %s,", desc_name, index);
+   fprintf(base_yyout, "{ ECPGset_desc(__LINE__, %s, %s,", desc_name, index);
    for (results = assignments; results != NULL; results = results->next)
    {
        const struct variable *v = find_variable(results->variable);
@@ -295,9 +296,11 @@ output_set_descr(char *desc_name, char *index)
            case ECPGd_length:
            case ECPGd_type:
                {
-                   char *str_zero = mm_strdup("0");
-                   fprintf(yyout, "%s,", get_dtype(results->value));
-                   ECPGdump_a_type(yyout, v->name, v->type, v->brace_level, NULL, NULL, -1, NULL, NULL, str_zero, NULL, NULL);
+                   char       *str_zero = mm_strdup("0");
+
+                   fprintf(base_yyout, "%s,", get_dtype(results->value));
+                   ECPGdump_a_type(base_yyout, v->name, v->type, v->brace_level,
+                          NULL, NULL, -1, NULL, NULL, str_zero, NULL, NULL);
                    free(str_zero);
                }
                break;
@@ -307,7 +310,7 @@ output_set_descr(char *desc_name, char *index)
        }
    }
    drop_assignments();
-   fputs("ECPGd_EODT);\n", yyout);
+   fputs("ECPGd_EODT);\n", base_yyout);
 
    whenever_action(2 | 1);
 }
index b3b36cf72da85b4fecb12df2b2b670fa366b44da..ca3efadc481f9d0d82f38279c0f07bd11c17ee63 100644 (file)
@@ -8,7 +8,7 @@ ECPG: stmtClosePortalStmt block
                if (connection)
                    mmerror(PARSE_ERROR, ET_ERROR, "AT option not allowed in CLOSE DATABASE statement");
 
-               fprintf(yyout, "{ ECPGdisconnect(__LINE__, \"CURRENT\");");
+               fprintf(base_yyout, "{ ECPGdisconnect(__LINE__, \"CURRENT\");");
                whenever_action(2);
                free($1);
                break;
@@ -42,14 +42,14 @@ ECPG: stmtPrepareStmt block
    }
 ECPG: stmtTransactionStmt block
    {
-       fprintf(yyout, "{ ECPGtrans(__LINE__, %s, \"%s\");", connection ? connection : "NULL", $1);
+       fprintf(base_yyout, "{ ECPGtrans(__LINE__, %s, \"%s\");", connection ? connection : "NULL", $1);
        whenever_action(2);
        free($1);
    }
 ECPG: stmtViewStmt rule
    | ECPGAllocateDescr
    {
-       fprintf(yyout,"ECPGallocate_desc(__LINE__, %s);",$1);
+       fprintf(base_yyout,"ECPGallocate_desc(__LINE__, %s);",$1);
        whenever_action(0);
        free($1);
    }
@@ -58,7 +58,7 @@ ECPG: stmtViewStmt rule
        if (connection)
            mmerror(PARSE_ERROR, ET_ERROR, "AT option not allowed in CONNECT statement");
 
-       fprintf(yyout, "{ ECPGconnect(__LINE__, %d, %s, %d); ", compat, $1, autocommit);
+       fprintf(base_yyout, "{ ECPGconnect(__LINE__, %d, %s, %d); ", compat, $1, autocommit);
        reset_variables();
        whenever_action(2);
        free($1);
@@ -69,7 +69,7 @@ ECPG: stmtViewStmt rule
    }
    | ECPGDeallocateDescr
    {
-       fprintf(yyout,"ECPGdeallocate_desc(__LINE__, %s);",$1);
+       fprintf(base_yyout,"ECPGdeallocate_desc(__LINE__, %s);",$1);
        whenever_action(0);
        free($1);
    }
@@ -79,10 +79,10 @@ ECPG: stmtViewStmt rule
    }
    | ECPGDescribe
    {
-       fprintf(yyout, "{ ECPGdescribe(__LINE__, %d, %s,", compat, $1);
+       fprintf(base_yyout, "{ ECPGdescribe(__LINE__, %d, %s,", compat, $1);
        dump_variables(argsresult, 1);
-       fputs("ECPGt_EORT);", yyout);
-       fprintf(yyout, "}");
+       fputs("ECPGt_EORT);", base_yyout);
+       fprintf(base_yyout, "}");
        output_line_number();
 
        free($1);
@@ -92,7 +92,7 @@ ECPG: stmtViewStmt rule
        if (connection)
            mmerror(PARSE_ERROR, ET_ERROR, "AT option not allowed in DISCONNECT statement");
 
-       fprintf(yyout, "{ ECPGdisconnect(__LINE__, %s);",
+       fprintf(base_yyout, "{ ECPGdisconnect(__LINE__, %s);",
                $1 ? $1 : "\"CURRENT\"");
        whenever_action(2);
        free($1);
@@ -103,11 +103,11 @@ ECPG: stmtViewStmt rule
        const char *con = connection ? connection : "NULL";
 
        if (strcmp($1, "all") == 0)
-           fprintf(yyout, "{ ECPGdeallocate_all(__LINE__, %d, %s);", compat, con);
+           fprintf(base_yyout, "{ ECPGdeallocate_all(__LINE__, %d, %s);", compat, con);
        else if ($1[0] == ':')
-           fprintf(yyout, "{ ECPGdeallocate(__LINE__, %d, %s, %s);", compat, con, $1+1);
+           fprintf(base_yyout, "{ ECPGdeallocate(__LINE__, %d, %s, %s);", compat, con, $1+1);
        else
-           fprintf(yyout, "{ ECPGdeallocate(__LINE__, %d, %s, \"%s\");", compat, con, $1);
+           fprintf(base_yyout, "{ ECPGdeallocate(__LINE__, %d, %s, \"%s\");", compat, con, $1);
 
        whenever_action(2);
        free($1);
@@ -138,7 +138,7 @@ ECPG: stmtViewStmt rule
    }
    | ECPGSetAutocommit
    {
-       fprintf(yyout, "{ ECPGsetcommit(__LINE__, \"%s\", %s);", $1, connection ? connection : "NULL");
+       fprintf(base_yyout, "{ ECPGsetcommit(__LINE__, \"%s\", %s);", $1, connection ? connection : "NULL");
        whenever_action(2);
        free($1);
    }
@@ -147,7 +147,7 @@ ECPG: stmtViewStmt rule
        if (connection)
            mmerror(PARSE_ERROR, ET_ERROR, "AT option not allowed in SET CONNECTION statement");
 
-       fprintf(yyout, "{ ECPGsetconn(__LINE__, %s);", $1);
+       fprintf(base_yyout, "{ ECPGsetconn(__LINE__, %s);", $1);
        whenever_action(2);
        free($1);
    }
@@ -169,7 +169,7 @@ ECPG: stmtViewStmt rule
        if (connection)
            mmerror(PARSE_ERROR, ET_ERROR, "AT option not allowed in TYPE statement");
 
-       fprintf(yyout, "%s", $1);
+       fprintf(base_yyout, "%s", $1);
        free($1);
        output_line_number();
    }
index ed01ef7f01e44af33eb5c116b2f5bbad209d3f0c..d8647b3c9d05b417b8f0f3cfdf6c611e8b14f0d6 100644 (file)
@@ -166,11 +166,11 @@ main(int argc, char *const argv[])
            case 'o':
                output_filename = mm_strdup(optarg);
                if (strcmp(output_filename, "-") == 0)
-                   yyout = stdout;
+                   base_yyout = stdout;
                else
-                   yyout = fopen(output_filename, PG_BINARY_W);
+                   base_yyout = fopen(output_filename, PG_BINARY_W);
 
-               if (yyout == NULL)
+               if (base_yyout == NULL)
                {
                    fprintf(stderr, _("%s: could not open file \"%s\": %s\n"),
                            progname, output_filename, strerror(errno));
@@ -233,7 +233,7 @@ main(int argc, char *const argv[])
                break;
            case 'd':
 #ifdef YYDEBUG
-               yydebug = 1;
+               base_yydebug = 1;
 #else
                fprintf(stderr, _("%s: parser debug support (-d) not available\n"),
                        progname);
@@ -280,7 +280,7 @@ main(int argc, char *const argv[])
            {
                input_filename = mm_alloc(strlen("stdin") + 1);
                strcpy(input_filename, "stdin");
-               yyin = stdin;
+               base_yyin = stdin;
            }
            else
            {
@@ -304,13 +304,13 @@ main(int argc, char *const argv[])
                    ptr2ext[4] = '\0';
                }
 
-               yyin = fopen(input_filename, PG_BINARY_R);
+               base_yyin = fopen(input_filename, PG_BINARY_R);
            }
 
            if (out_option == 0)    /* calculate the output name */
            {
                if (strcmp(input_filename, "stdin") == 0)
-                   yyout = stdout;
+                   base_yyout = stdout;
                else
                {
                    output_filename = mm_strdup(input_filename);
@@ -320,8 +320,8 @@ main(int argc, char *const argv[])
                    ptr2ext[1] = (header_mode == true) ? 'h' : 'c';
                    ptr2ext[2] = '\0';
 
-                   yyout = fopen(output_filename, PG_BINARY_W);
-                   if (yyout == NULL)
+                   base_yyout = fopen(output_filename, PG_BINARY_W);
+                   if (base_yyout == NULL)
                    {
                        fprintf(stderr, _("%s: could not open file \"%s\": %s\n"),
                                progname, output_filename, strerror(errno));
@@ -332,7 +332,7 @@ main(int argc, char *const argv[])
                }
            }
 
-           if (yyin == NULL)
+           if (base_yyin == NULL)
                fprintf(stderr, _("%s: could not open file \"%s\": %s\n"),
                        progname, argv[fnr], strerror(errno));
            else
@@ -427,23 +427,23 @@ main(int argc, char *const argv[])
                /* we need several includes */
                /* but not if we are in header mode */
                if (regression_mode)
-                   fprintf(yyout, "/* Processed by ecpg (regression mode) */\n");
+                   fprintf(base_yyout, "/* Processed by ecpg (regression mode) */\n");
                else
-                   fprintf(yyout, "/* Processed by ecpg (%d.%d.%d) */\n", MAJOR_VERSION, MINOR_VERSION, PATCHLEVEL);
+                   fprintf(base_yyout, "/* Processed by ecpg (%d.%d.%d) */\n", MAJOR_VERSION, MINOR_VERSION, PATCHLEVEL);
 
                if (header_mode == false)
                {
-                   fprintf(yyout, "/* These include files are added by the preprocessor */\n#include <ecpglib.h>\n#include <ecpgerrno.h>\n#include <sqlca.h>\n");
+                   fprintf(base_yyout, "/* These include files are added by the preprocessor */\n#include <ecpglib.h>\n#include <ecpgerrno.h>\n#include <sqlca.h>\n");
 
                    /* add some compatibility headers */
                    if (INFORMIX_MODE)
-                       fprintf(yyout, "/* Needed for informix compatibility */\n#include <ecpg_informix.h>\n");
+                       fprintf(base_yyout, "/* Needed for informix compatibility */\n#include <ecpg_informix.h>\n");
 
-                   fprintf(yyout, "/* End of automatic include section */\n");
+                   fprintf(base_yyout, "/* End of automatic include section */\n");
                }
 
                if (regression_mode)
-                   fprintf(yyout, "#define ECPGdebug(X,Y) ECPGdebug((X)+100,(Y))\n");
+                   fprintf(base_yyout, "#define ECPGdebug(X,Y) ECPGdebug((X)+100,(Y))\n");
 
                output_line_number();
 
@@ -458,10 +458,10 @@ main(int argc, char *const argv[])
                    if (!(ptr->opened))
                        mmerror(PARSE_ERROR, ET_WARNING, "cursor \"%s\" has been declared but not opened", ptr->name);
 
-               if (yyin != NULL && yyin != stdin)
-                   fclose(yyin);
-               if (out_option == 0 && yyout != stdout)
-                   fclose(yyout);
+               if (base_yyin != NULL && base_yyin != stdin)
+                   fclose(base_yyin);
+               if (out_option == 0 && base_yyout != stdout)
+                   fclose(base_yyout);
 
                /*
                 * If there was an error, delete the output file.
index f41999a86f10eccda98de2ed88e0b79d92b4b93d..672f0b45d48e6e207d10e0765984b0d530aff5a8 100644 (file)
@@ -72,7 +72,7 @@ vmmerror(int error_code, enum errortype type, const char *error, va_list ap)
    /* localize the error message string */
    error = _(error);
 
-   fprintf(stderr, "%s:%d: ", input_filename, yylineno);
+   fprintf(stderr, "%s:%d: ", input_filename, base_yylineno);
 
    switch(type)
    {
@@ -117,10 +117,10 @@ mmfatal(int error_code, const char *error, ...)
    vmmerror(error_code, ET_ERROR, error, ap);
    va_end(ap);
 
-   if (yyin)
-       fclose(yyin);
-   if (yyout)
-       fclose(yyout);
+   if (base_yyin)
+       fclose(base_yyin);
+   if (base_yyout)
+       fclose(base_yyout);
 
    if (strcmp(output_filename, "-") != 0 && unlink(output_filename) != 0)
        fprintf(stderr, _("could not remove output file \"%s\"\n"), output_filename);
@@ -195,7 +195,7 @@ make3_str(char *str1, char *str2, char *str3)
 static char *
 make_name(void)
 {
-   return mm_strdup(yytext);
+   return mm_strdup(base_yytext);
 }
 
 static char *
index de0df7440f0cb02a0c08dbd6ed877e8905b4d4e7..31e765ccd39ae083834e88df8e6dddaedee7fd61 100644 (file)
@@ -8,14 +8,14 @@ statement: ecpgstart at stmt ';' { connection = NULL; }
                | ecpgstart stmt ';'
                | ecpgstart ECPGVarDeclaration
                {
-                   fprintf(yyout, "%s", $2);
+                   fprintf(base_yyout, "%s", $2);
                    free($2);
                    output_line_number();
                }
                | ECPGDeclaration
-               | c_thing               { fprintf(yyout, "%s", $1); free($1); }
-               | CPP_LINE              { fprintf(yyout, "%s", $1); free($1); }
-               | '{'                   { braces_open++; fputs("{", yyout); }
+               | c_thing               { fprintf(base_yyout, "%s", $1); free($1); }
+               | CPP_LINE              { fprintf(base_yyout, "%s", $1); free($1); }
+               | '{'                   { braces_open++; fputs("{", base_yyout); }
                | '}'
        {
            remove_typedefs(braces_open);
@@ -25,7 +25,7 @@ statement: ecpgstart at stmt ';' { connection = NULL; }
                free(current_function);
                current_function = NULL;
            }
-           fputs("}", yyout);
+           fputs("}", base_yyout);
        }
        ;
 
@@ -380,10 +380,10 @@ ecpg_interval:    opt_interval    { $$ = $1; }
  * variable declaration inside exec sql declare block
  */
 ECPGDeclaration: sql_startdeclare
-       { fputs("/* exec sql begin declare section */", yyout); }
+       { fputs("/* exec sql begin declare section */", base_yyout); }
        var_type_declarations sql_enddeclare
        {
-           fprintf(yyout, "%s/* exec sql end declare section */", $3);
+           fprintf(base_yyout, "%s/* exec sql end declare section */", $3);
            free($3);
            output_line_number();
        }
@@ -417,7 +417,7 @@ type_declaration: S_TYPEDEF
    {
        add_typedef($5, $6.index1, $6.index2, $3.type_enum, $3.type_dimension, $3.type_index, initializer, *$4 ? 1 : 0);
 
-       fprintf(yyout, "typedef %s %s %s %s;\n", $3.type_str, *$4 ? "*" : "", $5, $6.str);
+       fprintf(base_yyout, "typedef %s %s %s %s;\n", $3.type_str, *$4 ? "*" : "", $5, $6.str);
        output_line_number();
        $$ = mm_strdup("");
    };
@@ -1909,7 +1909,7 @@ void base_yyerror(const char *error)
 {
    /* translator: %s is typically the translation of "syntax error" */
    mmerror(PARSE_ERROR, ET_ERROR, "%s at or near \"%s\"",
-           _(error), token_start ? token_start : yytext);
+           _(error), token_start ? token_start : base_yytext);
 }
 
 void parser_init(void)
index ea8fd8ed98c865335ec9f7228f64c1901294c9bd..b259a1b07c4dfcfa018d6e11415152878676c204 100644 (file)
@@ -34,15 +34,15 @@ extern char *descriptor_index;
 extern char *descriptor_name;
 extern char *connection;
 extern char *input_filename;
-extern char *yytext,
+extern char *base_yytext,
           *token_start;
 
 #ifdef YYDEBUG
-extern int yydebug;
+extern int base_yydebug;
 #endif
-extern int yylineno;
-extern FILE *yyin,
-          *yyout;
+extern int base_yylineno;
+extern FILE *base_yyin,
+          *base_yyout;
 extern char *output_filename;
 
 extern struct _include_path *include_paths;
index 8cac947b5a3764acb033445d9e9a439f5856d228..7e59419442e57c1a9354be09904e3bdd1fe1238a 100644 (file)
@@ -11,7 +11,7 @@ output_line_number(void)
 {
    char       *line = hashline_number();
 
-   fprintf(yyout, "%s", line);
+   fprintf(base_yyout, "%s", line);
    free(line);
 }
 
@@ -37,22 +37,22 @@ print_action(struct when * w)
    switch (w->code)
    {
        case W_SQLPRINT:
-           fprintf(yyout, "sqlprint();");
+           fprintf(base_yyout, "sqlprint();");
            break;
        case W_GOTO:
-           fprintf(yyout, "goto %s;", w->command);
+           fprintf(base_yyout, "goto %s;", w->command);
            break;
        case W_DO:
-           fprintf(yyout, "%s;", w->command);
+           fprintf(base_yyout, "%s;", w->command);
            break;
        case W_STOP:
-           fprintf(yyout, "exit (1);");
+           fprintf(base_yyout, "exit (1);");
            break;
        case W_BREAK:
-           fprintf(yyout, "break;");
+           fprintf(base_yyout, "break;");
            break;
        default:
-           fprintf(yyout, "{/* %d not implemented yet */}", w->code);
+           fprintf(base_yyout, "{/* %d not implemented yet */}", w->code);
            break;
    }
 }
@@ -63,24 +63,24 @@ whenever_action(int mode)
    if ((mode & 1) == 1 && when_nf.code != W_NOTHING)
    {
        output_line_number();
-       fprintf(yyout, "\nif (sqlca.sqlcode == ECPG_NOT_FOUND) ");
+       fprintf(base_yyout, "\nif (sqlca.sqlcode == ECPG_NOT_FOUND) ");
        print_action(&when_nf);
    }
    if (when_warn.code != W_NOTHING)
    {
        output_line_number();
-       fprintf(yyout, "\nif (sqlca.sqlwarn[0] == 'W') ");
+       fprintf(base_yyout, "\nif (sqlca.sqlwarn[0] == 'W') ");
        print_action(&when_warn);
    }
    if (when_error.code != W_NOTHING)
    {
        output_line_number();
-       fprintf(yyout, "\nif (sqlca.sqlcode < 0) ");
+       fprintf(base_yyout, "\nif (sqlca.sqlcode < 0) ");
        print_action(&when_error);
    }
 
    if ((mode & 2) == 2)
-       fputc('}', yyout);
+       fputc('}', base_yyout);
 
    output_line_number();
 }
@@ -91,7 +91,7 @@ hashline_number(void)
    /* do not print line numbers if we are in debug mode */
    if (input_filename
 #ifdef YYDEBUG
-       && !yydebug
+       && !base_yydebug
 #endif
        )
    {
@@ -100,7 +100,7 @@ hashline_number(void)
        char       *src,
                   *dest;
 
-       sprintf(line, "\n#line %d \"", yylineno);
+       sprintf(line, "\n#line %d \"", base_yylineno);
        src = input_filename;
        dest = line + strlen(line);
        while (*src)
@@ -128,27 +128,27 @@ static char *ecpg_statement_type_name[] = {
 void
 output_statement(char *stmt, int whenever_mode, enum ECPG_statement_type st)
 {
-   fprintf(yyout, "{ ECPGdo(__LINE__, %d, %d, %s, %d, ", compat, force_indicator, connection ? connection : "NULL", questionmarks);
+   fprintf(base_yyout, "{ ECPGdo(__LINE__, %d, %d, %s, %d, ", compat, force_indicator, connection ? connection : "NULL", questionmarks);
    if (st == ECPGst_execute || st == ECPGst_exec_immediate)
    {
-       fprintf(yyout, "%s, %s, ", ecpg_statement_type_name[st], stmt);
+       fprintf(base_yyout, "%s, %s, ", ecpg_statement_type_name[st], stmt);
    }
    else
    {
        if (st == ECPGst_prepnormal && auto_prepare)
-           fputs("ECPGst_prepnormal, \"", yyout);
+           fputs("ECPGst_prepnormal, \"", base_yyout);
        else
-           fputs("ECPGst_normal, \"", yyout);
+           fputs("ECPGst_normal, \"", base_yyout);
 
        output_escaped_str(stmt, false);
-       fputs("\", ", yyout);
+       fputs("\", ", base_yyout);
    }
 
    /* dump variables to C file */
    dump_variables(argsinsert, 1);
-   fputs("ECPGt_EOIT, ", yyout);
+   fputs("ECPGt_EOIT, ", base_yyout);
    dump_variables(argsresult, 1);
-   fputs("ECPGt_EORT);", yyout);
+   fputs("ECPGt_EORT);", base_yyout);
    reset_variables();
 
    whenever_action(whenever_mode | 2);
@@ -160,11 +160,11 @@ output_statement(char *stmt, int whenever_mode, enum ECPG_statement_type st)
 void
 output_prepare_statement(char *name, char *stmt)
 {
-   fprintf(yyout, "{ ECPGprepare(__LINE__, %s, %d, ", connection ? connection : "NULL", questionmarks);
+   fprintf(base_yyout, "{ ECPGprepare(__LINE__, %s, %d, ", connection ? connection : "NULL", questionmarks);
    output_escaped_str(name, true);
-   fputs(", ", yyout);
+   fputs(", ", base_yyout);
    output_escaped_str(stmt, true);
-   fputs(");", yyout);
+   fputs(");", base_yyout);
    whenever_action(2);
    free(name);
    if (connection != NULL)
@@ -178,12 +178,12 @@ output_deallocate_prepare_statement(char *name)
 
    if (strcmp(name, "all") != 0)
    {
-       fprintf(yyout, "{ ECPGdeallocate(__LINE__, %d, %s, ", compat, con);
+       fprintf(base_yyout, "{ ECPGdeallocate(__LINE__, %d, %s, ", compat, con);
        output_escaped_str(name, true);
-       fputs(");", yyout);
+       fputs(");", base_yyout);
    }
    else
-       fprintf(yyout, "{ ECPGdeallocate_all(__LINE__, %d, %s);", compat, con);
+       fprintf(base_yyout, "{ ECPGdeallocate_all(__LINE__, %d, %s);", compat, con);
 
    whenever_action(2);
    free(name);
@@ -203,16 +203,16 @@ output_escaped_str(char *str, bool quoted)
    {
        i = 1;
        len--;
-       fputs("\"", yyout);
+       fputs("\"", base_yyout);
    }
 
    /* output this char by char as we have to filter " and \n */
    for (; i < len; i++)
    {
        if (str[i] == '"')
-           fputs("\\\"", yyout);
+           fputs("\\\"", base_yyout);
        else if (str[i] == '\n')
-           fputs("\\\n", yyout);
+           fputs("\\\n", base_yyout);
        else if (str[i] == '\\')
        {
            int         j = i;
@@ -230,17 +230,17 @@ output_escaped_str(char *str, bool quoted)
 
            if ((str[j] != '\n') && (str[j] != '\r' || str[j + 1] != '\n'))     /* not followed by a
                                                                                 * newline */
-               fputs("\\\\", yyout);
+               fputs("\\\\", base_yyout);
        }
        else if (str[i] == '\r' && str[i + 1] == '\n')
        {
-           fputs("\\\r\n", yyout);
+           fputs("\\\r\n", base_yyout);
            i++;
        }
        else
-           fputc(str[i], yyout);
+           fputc(str[i], base_yyout);
    }
 
    if (quoted && str[0] == '\"' && str[len] == '\"')
-       fputs("\"", yyout);
+       fputs("\"", base_yyout);
 }
index 662a90a3f6bd311b3b8fe996e12401f4dc40b58b..75c559d26cfa31f18cd6001e00db9ab518a3ec9e 100644 (file)
@@ -60,7 +60,7 @@ filtered_base_yylex(void)
        cur_token = lookahead_token;
        base_yylval = lookahead_yylval;
        base_yylloc = lookahead_yylloc;
-       yytext = lookahead_yytext;
+       base_yytext = lookahead_yytext;
        *lookahead_end = lookahead_hold_char;
        have_lookahead = false;
    }
@@ -93,13 +93,13 @@ filtered_base_yylex(void)
     * '\0' here, and will undo that when we call it again.  We need to redo
     * it to fully revert the lookahead call for error reporting purposes.
     */
-   lookahead_end = yytext + cur_token_length;
+   lookahead_end = base_yytext + cur_token_length;
    Assert(*lookahead_end == '\0');
 
    /* Save and restore lexer output variables around the call */
    cur_yylval = base_yylval;
    cur_yylloc = base_yylloc;
-   cur_yytext = yytext;
+   cur_yytext = base_yytext;
 
    /* Get next token, saving outputs into lookahead variables */
    next_token = base_yylex();
@@ -107,11 +107,11 @@ filtered_base_yylex(void)
    lookahead_token = next_token;
    lookahead_yylval = base_yylval;
    lookahead_yylloc = base_yylloc;
-   lookahead_yytext = yytext;
+   lookahead_yytext = base_yytext;
 
    base_yylval = cur_yylval;
    base_yylloc = cur_yylloc;
-   yytext = cur_yytext;
+   base_yytext = cur_yytext;
 
    /* Now revert the un-truncation of the current token */
    lookahead_hold_char = *lookahead_end;
index e9a7859cc0f5436fec2ddcbfb059428a0dd64410..aab7ff495c303b8f5dcafcd25cfe4ac3f4394e29 100644 (file)
 
 #include "extern.h"
 #include "preproc.h"
-
-/*
- * Change symbol names as expected by preproc.y.  It'd be better to do this
- * with %option prefix="base_yy", but that affects some other names that
- * various files expect *not* to be prefixed with "base_".  Cleaning it up
- * is not worth the trouble right now.
- */
-#define yylex           base_yylex
-#define yylval          base_yylval
 }
 
 %{
-extern YYSTYPE yylval;
+extern YYSTYPE base_yylval;
 
 static int     xcdepth = 0;    /* depth of nesting in slash-star comments */
 static char       *dolqstart = NULL;   /* current $foo$ quote start string */
@@ -97,6 +88,7 @@ static struct _if_value
 %option noinput
 %option noyywrap
 %option warn
+%option prefix="base_yy"
 
 %option yylineno
 
@@ -451,7 +443,7 @@ cppline         {space}*#([^i][A-Za-z]*|{if}|{ifdef}|{ifndef}|{import})(.*\\{space})*.
                    BEGIN(SQL);
                    if (literalbuf[strspn(literalbuf, "01") + 1] != '\0')
                        mmerror(PARSE_ERROR, ET_ERROR, "invalid bit string literal");
-                   yylval.str = mm_strdup(literalbuf);
+                   base_yylval.str = mm_strdup(literalbuf);
                    return BCONST;
                }
 
@@ -471,7 +463,7 @@ cppline         {space}*#([^i][A-Za-z]*|{if}|{ifdef}|{ifndef}|{import})(.*\\{space})*.
 <xh>{quotefail}    {
                yyless(1);
                BEGIN(SQL);
-               yylval.str = mm_strdup(literalbuf);
+               base_yylval.str = mm_strdup(literalbuf);
                return XCONST;
            }
 
@@ -514,27 +506,27 @@ cppline           {space}*#([^i][A-Za-z]*|{if}|{ifdef}|{ifndef}|{import})(.*\\{space})*.
 <xq,xqc>{quotefail} {
                yyless(1);
                BEGIN(state_before);
-               yylval.str = mm_strdup(literalbuf);
+               base_yylval.str = mm_strdup(literalbuf);
                return SCONST;
            }
 <xe>{quotestop} |
 <xe>{quotefail} {
                yyless(1);
                BEGIN(state_before);
-               yylval.str = mm_strdup(literalbuf);
+               base_yylval.str = mm_strdup(literalbuf);
                return ECONST;
            }
 <xn>{quotestop} |
 <xn>{quotefail} {
                yyless(1);
                BEGIN(state_before);
-               yylval.str = mm_strdup(literalbuf);
+               base_yylval.str = mm_strdup(literalbuf);
                return NCONST;
            }
 <xus>{xusstop} {
                addlit(yytext, yyleng);
                BEGIN(state_before);
-               yylval.str = mm_strdup(literalbuf);
+               base_yylval.str = mm_strdup(literalbuf);
                return UCONST;
            }
 <xq,xe,xn,xus>{xqdouble}   { addlitchar('\''); }
@@ -575,7 +567,7 @@ cppline         {space}*#([^i][A-Za-z]*|{if}|{ifdef}|{ifndef}|{import})(.*\\{space})*.
                    addlit(yytext, yyleng);
                    free(dolqstart);
                    BEGIN(SQL);
-                   yylval.str = mm_strdup(literalbuf);
+                   base_yylval.str = mm_strdup(literalbuf);
                    return DOLCONST;
                }
                else
@@ -612,12 +604,12 @@ cppline           {space}*#([^i][A-Za-z]*|{if}|{ifdef}|{ifndef}|{import})(.*\\{space})*.
                        if (literallen == 0)
                            mmerror(PARSE_ERROR, ET_ERROR, "zero-length delimited identifier");
                        /* The backend will truncate the identifier here. We do not as it does not change the result. */
-                       yylval.str = mm_strdup(literalbuf);
+                       base_yylval.str = mm_strdup(literalbuf);
                        return CSTRING;
                    }
 <xdc>{xdstop}      {
                        BEGIN(state_before);
-                       yylval.str = mm_strdup(literalbuf);
+                       base_yylval.str = mm_strdup(literalbuf);
                        return CSTRING;
                    }
 <xui>{xuistop}     {
@@ -626,7 +618,7 @@ cppline         {space}*#([^i][A-Za-z]*|{if}|{ifdef}|{ifndef}|{import})(.*\\{space})*.
                            mmerror(PARSE_ERROR, ET_ERROR, "zero-length delimited identifier");
                        /* The backend will truncate the identifier here. We do not as it does not change the result. */
                        addlit(yytext, yyleng);
-                       yylval.str = mm_strdup(literalbuf);
+                       base_yylval.str = mm_strdup(literalbuf);
                        return UIDENT;
                    }
 <xd,xui>{xddouble}     { addlitchar('"'); }
@@ -725,11 +717,11 @@ cppline           {space}*#([^i][A-Za-z]*|{if}|{ifdef}|{ifndef}|{import})(.*\\{space})*.
                                return yytext[0];
                        }
 
-                       yylval.str = mm_strdup(yytext);
+                       base_yylval.str = mm_strdup(yytext);
                        return Op;
                    }
 <SQL>{param}       {
-                       yylval.ival = atol(yytext+1);
+                       base_yylval.ival = atol(yytext+1);
                        return PARAM;
                    }
 <C,SQL>{integer}   {
@@ -746,36 +738,36 @@ cppline           {space}*#([^i][A-Za-z]*|{if}|{ifdef}|{ifndef}|{import})(.*\\{space})*.
                            )
                        {
                            errno = 0;
-                           yylval.str = mm_strdup(yytext);
+                           base_yylval.str = mm_strdup(yytext);
                            return FCONST;
                        }
-                       yylval.ival = val;
+                       base_yylval.ival = val;
                        return ICONST;
                    }
 <SQL>{ip}          {
-                       yylval.str = mm_strdup(yytext);
+                       base_yylval.str = mm_strdup(yytext);
                        return IP;
                }
 <C,SQL>{decimal}   {
-                       yylval.str = mm_strdup(yytext);
+                       base_yylval.str = mm_strdup(yytext);
                        return FCONST;
            }
 <C,SQL>{real}      {
-                       yylval.str = mm_strdup(yytext);
+                       base_yylval.str = mm_strdup(yytext);
                        return FCONST;
            }
 <SQL>{realfail1}   {
                        yyless(yyleng-1);
-                       yylval.str = mm_strdup(yytext);
+                       base_yylval.str = mm_strdup(yytext);
                        return FCONST;
                    }
 <SQL>{realfail2}   {
                        yyless(yyleng-2);
-                       yylval.str = mm_strdup(yytext);
+                       base_yylval.str = mm_strdup(yytext);
                        return FCONST;
                    }
 <SQL>:{identifier}((("->"|\.){identifier})|(\[{array}\]))* {
-                       yylval.str = mm_strdup(yytext+1);
+                       base_yylval.str = mm_strdup(yytext+1);
                        return(CVARIABLE);
                    }
 <SQL>{identifier}  {
@@ -801,7 +793,7 @@ cppline         {space}*#([^i][A-Za-z]*|{if}|{ifdef}|{ifndef}|{import})(.*\\{space})*.
                             * to do so; that's just another way that ecpg could get
                             * out of step with the backend.
                             */
-                           yylval.str = mm_strdup(yytext);
+                           base_yylval.str = mm_strdup(yytext);
                            return IDENT;
                        }
                    }
@@ -822,11 +814,11 @@ cppline           {space}*#([^i][A-Za-z]*|{if}|{ifdef}|{ifndef}|{import})(.*\\{space})*.
                        char* endptr;
 
                        errno = 0;
-                       yylval.ival = strtoul((char *)yytext,&endptr,16);
+                       base_yylval.ival = strtoul((char *)yytext,&endptr,16);
                        if (*endptr != '\0' || errno == ERANGE)
                        {
                            errno = 0;
-                           yylval.str = mm_strdup(yytext);
+                           base_yylval.str = mm_strdup(yytext);
                            return SCONST;
                        }
                        return ICONST;
@@ -839,7 +831,7 @@ cppline         {space}*#([^i][A-Za-z]*|{if}|{ifdef}|{ifndef}|{import})(.*\\{space})*.
                        }
                        else
                        {
-                           yylval.str = mm_strdup(yytext);
+                           base_yylval.str = mm_strdup(yytext);
                            return(CPP_LINE);
                        }
                    }
@@ -851,12 +843,12 @@ cppline           {space}*#([^i][A-Za-z]*|{if}|{ifdef}|{ifndef}|{import})(.*\\{space})*.
                        }
                        else
                        {
-                           yylval.str = mm_strdup(yytext);
+                           base_yylval.str = mm_strdup(yytext);
                            return(CPP_LINE);
                        }
                    }
 <C,SQL>{cppline}   {
-                       yylval.str = mm_strdup(yytext);
+                       base_yylval.str = mm_strdup(yytext);
                        return(CPP_LINE);
                    }
 <C>{identifier}        {
@@ -881,7 +873,7 @@ cppline         {space}*#([^i][A-Za-z]*|{if}|{ifdef}|{ifndef}|{import})(.*\\{space})*.
                                return keyword->value;
                            else
                            {
-                               yylval.str = mm_strdup(yytext);
+                               base_yylval.str = mm_strdup(yytext);
                                return IDENT;
                            }
                        }
index bb4b664b859ec996d0daf86435916efb2348a713..232b9409388f8092adf315ea000a19b0ecbd4796 100644 (file)
@@ -452,7 +452,7 @@ dump_variables(struct arguments * list, int mode)
    dump_variables(list->next, mode);
 
    /* Then the current element and its indicator */
-   ECPGdump_a_type(yyout, list->variable->name, list->variable->type, list->variable->brace_level,
+   ECPGdump_a_type(base_yyout, list->variable->name, list->variable->type, list->variable->brace_level,
                    list->indicator->name, list->indicator->type, list->indicator->brace_level,
                    NULL, NULL, str_zero, NULL, NULL);