diff --git a/src/interfaces/ecpg/preproc/descriptor.c b/src/interfaces/ecpg/preproc/descriptor.c index 22ee6bf2049..2f3799fdf0c 100644 --- a/src/interfaces/ecpg/preproc/descriptor.c +++ b/src/interfaces/ecpg/preproc/descriptor.c @@ -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); } diff --git a/src/interfaces/ecpg/preproc/ecpg.addons b/src/interfaces/ecpg/preproc/ecpg.addons index 73a008c0db9..be1dcb77d47 100644 --- a/src/interfaces/ecpg/preproc/ecpg.addons +++ b/src/interfaces/ecpg/preproc/ecpg.addons @@ -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(); } diff --git a/src/interfaces/ecpg/preproc/ecpg.c b/src/interfaces/ecpg/preproc/ecpg.c index 55ae30c534c..25e7d121bd3 100644 --- a/src/interfaces/ecpg/preproc/ecpg.c +++ b/src/interfaces/ecpg/preproc/ecpg.c @@ -162,11 +162,11 @@ main(int argc, char *const argv[]) case 'o': output_filename = 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)); @@ -229,7 +229,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); @@ -276,7 +276,7 @@ main(int argc, char *const argv[]) { input_filename = mm_alloc(strlen("stdin") + 1); strcpy(input_filename, "stdin"); - yyin = stdin; + base_yyin = stdin; } else { @@ -300,13 +300,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 = strdup(input_filename); @@ -316,8 +316,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)); @@ -328,7 +328,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 @@ -423,23 +423,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 \n#include \n#include \n"); + fprintf(base_yyout, "/* These include files are added by the preprocessor */\n#include \n#include \n#include \n"); /* add some compatibility headers */ if (INFORMIX_MODE) - fprintf(yyout, "/* Needed for informix compatibility */\n#include \n"); + fprintf(base_yyout, "/* Needed for informix compatibility */\n#include \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(); @@ -454,10 +454,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. diff --git a/src/interfaces/ecpg/preproc/ecpg.header b/src/interfaces/ecpg/preproc/ecpg.header index 75538e3bd96..6f08aeb3b73 100644 --- a/src/interfaces/ecpg/preproc/ecpg.header +++ b/src/interfaces/ecpg/preproc/ecpg.header @@ -72,7 +72,7 @@ mmerror(int error_code, enum errortype type, const char *error, ...) /* internationalize the error message string */ error = _(error); - fprintf(stderr, "%s:%d: ", input_filename, yylineno); + fprintf(stderr, "%s:%d: ", input_filename, base_yylineno); switch(type) { @@ -99,10 +99,10 @@ mmerror(int error_code, enum errortype type, const char *error, ...) ret_value = error_code; break; case ET_FATAL: - 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); @@ -178,7 +178,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 * diff --git a/src/interfaces/ecpg/preproc/ecpg.trailer b/src/interfaces/ecpg/preproc/ecpg.trailer index 8ed2eb48612..42c2f3901e1 100644 --- a/src/interfaces/ecpg/preproc/ecpg.trailer +++ b/src/interfaces/ecpg/preproc/ecpg.trailer @@ -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(""); }; @@ -1905,7 +1905,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) diff --git a/src/interfaces/ecpg/preproc/extern.h b/src/interfaces/ecpg/preproc/extern.h index ccf5548f577..04af864aa1f 100644 --- a/src/interfaces/ecpg/preproc/extern.h +++ b/src/interfaces/ecpg/preproc/extern.h @@ -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; diff --git a/src/interfaces/ecpg/preproc/output.c b/src/interfaces/ecpg/preproc/output.c index 007c07c0342..fffcda7cde9 100644 --- a/src/interfaces/ecpg/preproc/output.c +++ b/src/interfaces/ecpg/preproc/output.c @@ -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); } diff --git a/src/interfaces/ecpg/preproc/pgc.l b/src/interfaces/ecpg/preproc/pgc.l index d104f601efc..3aa63ae2c13 100644 --- a/src/interfaces/ecpg/preproc/pgc.l +++ b/src/interfaces/ecpg/preproc/pgc.l @@ -24,19 +24,10 @@ #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 @@ -426,7 +418,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; } @@ -446,7 +438,7 @@ cppline {space}*#([^i][A-Za-z]*|{if}|{ifdef}|{ifndef}|{import})(.*\\{space})*. {quotefail} { yyless(1); BEGIN(SQL); - yylval.str = mm_strdup(literalbuf); + base_yylval.str = mm_strdup(literalbuf); return XCONST; } @@ -489,27 +481,27 @@ cppline {space}*#([^i][A-Za-z]*|{if}|{ifdef}|{ifndef}|{import})(.*\\{space})*. {quotefail} { yyless(1); BEGIN(state_before); - yylval.str = mm_strdup(literalbuf); + base_yylval.str = mm_strdup(literalbuf); return SCONST; } {quotestop} | {quotefail} { yyless(1); BEGIN(state_before); - yylval.str = mm_strdup(literalbuf); + base_yylval.str = mm_strdup(literalbuf); return ECONST; } {quotestop} | {quotefail} { yyless(1); BEGIN(state_before); - yylval.str = mm_strdup(literalbuf); + base_yylval.str = mm_strdup(literalbuf); return NCONST; } {xusstop} { addlit(yytext, yyleng); BEGIN(state_before); - yylval.str = mm_strdup(literalbuf); + base_yylval.str = mm_strdup(literalbuf); return UCONST; } {xqdouble} { addlitchar('\''); } @@ -550,7 +542,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 @@ -587,12 +579,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; } {xdstop} { BEGIN(state_before); - yylval.str = mm_strdup(literalbuf); + base_yylval.str = mm_strdup(literalbuf); return CSTRING; } {xuistop} { @@ -601,7 +593,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; } {xddouble} { addlitchar('"'); } @@ -697,13 +689,13 @@ cppline {space}*#([^i][A-Za-z]*|{if}|{ifdef}|{ifndef}|{import})(.*\\{space})*. /* Convert "!=" operator to "<>" for compatibility */ if (strcmp(yytext, "!=") == 0) - yylval.str = mm_strdup("<>"); + base_yylval.str = mm_strdup("<>"); else - yylval.str = mm_strdup(yytext); + base_yylval.str = mm_strdup(yytext); return Op; } {param} { - yylval.ival = atol(yytext+1); + base_yylval.ival = atol(yytext+1); return PARAM; } {integer} { @@ -720,36 +712,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; } {ip} { - yylval.str = mm_strdup(yytext); + base_yylval.str = mm_strdup(yytext); return IP; } {decimal} { - yylval.str = mm_strdup(yytext); + base_yylval.str = mm_strdup(yytext); return FCONST; } {real} { - yylval.str = mm_strdup(yytext); + base_yylval.str = mm_strdup(yytext); return FCONST; } {realfail1} { yyless(yyleng-1); - yylval.str = mm_strdup(yytext); + base_yylval.str = mm_strdup(yytext); return FCONST; } {realfail2} { yyless(yyleng-2); - yylval.str = mm_strdup(yytext); + base_yylval.str = mm_strdup(yytext); return FCONST; } :{identifier}((("->"|\.){identifier})|(\[{array}\]))* { - yylval.str = mm_strdup(yytext+1); + base_yylval.str = mm_strdup(yytext+1); return(CVARIABLE); } {identifier} { @@ -775,7 +767,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; } } @@ -796,11 +788,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; @@ -813,7 +805,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); } } @@ -825,12 +817,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); } } {cppline} { - yylval.str = mm_strdup(yytext); + base_yylval.str = mm_strdup(yytext); return(CPP_LINE); } {identifier} { @@ -855,7 +847,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; } } diff --git a/src/interfaces/ecpg/preproc/variable.c b/src/interfaces/ecpg/preproc/variable.c index 1b181b9dd41..8e66e4122bf 100644 --- a/src/interfaces/ecpg/preproc/variable.c +++ b/src/interfaces/ecpg/preproc/variable.c @@ -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);