diff --git a/src/interfaces/ecpg/preproc/descriptor.c b/src/interfaces/ecpg/preproc/descriptor.c index 9b4eb630a9a..c6442c18058 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); @@ -297,8 +298,9 @@ output_set_descr(char *desc_name, char *index) { 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); + 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; @@ -308,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 b3b36cf72da..ca3efadc481 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 5922603c929..dbf89fcae32 100644 --- a/src/interfaces/ecpg/preproc/ecpg.c +++ b/src/interfaces/ecpg/preproc/ecpg.c @@ -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 \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(); @@ -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. diff --git a/src/interfaces/ecpg/preproc/ecpg.header b/src/interfaces/ecpg/preproc/ecpg.header index f41999a86f1..672f0b45d48 100644 --- a/src/interfaces/ecpg/preproc/ecpg.header +++ b/src/interfaces/ecpg/preproc/ecpg.header @@ -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 * diff --git a/src/interfaces/ecpg/preproc/ecpg.trailer b/src/interfaces/ecpg/preproc/ecpg.trailer index de0df7440f0..31e765ccd39 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(""); }; @@ -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) diff --git a/src/interfaces/ecpg/preproc/extern.h b/src/interfaces/ecpg/preproc/extern.h index f6841726e4a..0ce3a6e4248 100644 --- a/src/interfaces/ecpg/preproc/extern.h +++ b/src/interfaces/ecpg/preproc/extern.h @@ -35,15 +35,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 c1ba55d5170..59d5d30df4a 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/parser.c b/src/interfaces/ecpg/preproc/parser.c index 40830f62267..94aee0d0dea 100644 --- a/src/interfaces/ecpg/preproc/parser.c +++ b/src/interfaces/ecpg/preproc/parser.c @@ -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; diff --git a/src/interfaces/ecpg/preproc/pgc.l b/src/interfaces/ecpg/preproc/pgc.l index 222049624d7..283343d8228 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 @@ -451,7 +443,7 @@ cppline {space}*#([^i][A-Za-z]*|{if}|{ifdef}|{ifndef}|{import})((\/\*[^*/]*\*+ 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})((\/\*[^*/]*\*+ {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})((\/\*[^*/]*\*+ {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('\''); } @@ -575,7 +567,7 @@ cppline {space}*#([^i][A-Za-z]*|{if}|{ifdef}|{ifndef}|{import})((\/\*[^*/]*\*+ 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})((\/\*[^*/]*\*+ 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} { @@ -626,7 +618,7 @@ cppline {space}*#([^i][A-Za-z]*|{if}|{ifdef}|{ifndef}|{import})((\/\*[^*/]*\*+ 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('"'); } @@ -725,11 +717,11 @@ cppline {space}*#([^i][A-Za-z]*|{if}|{ifdef}|{ifndef}|{import})((\/\*[^*/]*\*+ return yytext[0]; } - 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} { @@ -746,36 +738,36 @@ cppline {space}*#([^i][A-Za-z]*|{if}|{ifdef}|{ifndef}|{import})((\/\*[^*/]*\*+ ) { 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} { @@ -801,7 +793,7 @@ cppline {space}*#([^i][A-Za-z]*|{if}|{ifdef}|{ifndef}|{import})((\/\*[^*/]*\*+ * 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})((\/\*[^*/]*\*+ 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})((\/\*[^*/]*\*+ } 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})((\/\*[^*/]*\*+ } 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} { @@ -881,7 +873,7 @@ cppline {space}*#([^i][A-Za-z]*|{if}|{ifdef}|{ifndef}|{import})((\/\*[^*/]*\*+ 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 bb4b664b859..232b9409388 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);