mirror of
https://github.com/postgres/postgres.git
synced 2025-05-18 17:41:14 +03:00
Fixed handling of cyclic defines.
This commit is contained in:
parent
ab50cb14a4
commit
a7d68b42f0
@ -1,4 +1,4 @@
|
|||||||
/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/ecpg.c,v 1.81.2.1 2003/12/18 18:55:06 petere Exp $ */
|
/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/ecpg.c,v 1.81.2.2 2004/07/20 18:22:53 meskes Exp $ */
|
||||||
|
|
||||||
/* New main for ecpg, the PostgreSQL embedded SQL precompiler. */
|
/* New main for ecpg, the PostgreSQL embedded SQL precompiler. */
|
||||||
/* (C) Michael Meskes <meskes@postgresql.org> Feb 5th, 1998 */
|
/* (C) Michael Meskes <meskes@postgresql.org> Feb 5th, 1998 */
|
||||||
@ -103,9 +103,10 @@ add_preprocessor_define(char *define)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
defines->old = define_copy;
|
defines->old = define_copy;
|
||||||
defines->new = mm_strdup("");
|
defines->new = mm_strdup("1");
|
||||||
}
|
}
|
||||||
defines->pertinent = true;
|
defines->pertinent = true;
|
||||||
|
defines->used = NULL;
|
||||||
defines->next = pd;
|
defines->next = pd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/pgc.l,v 1.122.2.2 2004/02/15 13:50:02 meskes Exp $
|
* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/pgc.l,v 1.122.2.3 2004/07/20 18:22:53 meskes Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -550,7 +550,7 @@ cppline {space}*#(.*\\{space})+.*
|
|||||||
/* How about a DEFINE? */
|
/* How about a DEFINE? */
|
||||||
for (ptr = defines; ptr; ptr = ptr->next)
|
for (ptr = defines; ptr; ptr = ptr->next)
|
||||||
{
|
{
|
||||||
if (strcmp(yytext, ptr->old) == 0)
|
if (strcmp(yytext, ptr->old) == 0 && ptr->used == NULL)
|
||||||
{
|
{
|
||||||
struct _yy_buffer *yb;
|
struct _yy_buffer *yb;
|
||||||
|
|
||||||
@ -559,7 +559,7 @@ cppline {space}*#(.*\\{space})+.*
|
|||||||
yb->buffer = YY_CURRENT_BUFFER;
|
yb->buffer = YY_CURRENT_BUFFER;
|
||||||
yb->lineno = yylineno;
|
yb->lineno = yylineno;
|
||||||
yb->filename = mm_strdup(input_filename);
|
yb->filename = mm_strdup(input_filename);
|
||||||
yb->next = yy_buffer;
|
ptr->used = yb->next = yy_buffer;
|
||||||
|
|
||||||
yy_buffer = yb;
|
yy_buffer = yb;
|
||||||
|
|
||||||
@ -648,7 +648,7 @@ cppline {space}*#(.*\\{space})+.*
|
|||||||
/* is it a define? */
|
/* is it a define? */
|
||||||
for (ptr = defines; ptr; ptr = ptr->next)
|
for (ptr = defines; ptr; ptr = ptr->next)
|
||||||
{
|
{
|
||||||
if (strcmp(yytext, ptr->old) == 0)
|
if (strcmp(yytext, ptr->old) == 0 && ptr->used == NULL)
|
||||||
{
|
{
|
||||||
struct _yy_buffer *yb;
|
struct _yy_buffer *yb;
|
||||||
|
|
||||||
@ -657,7 +657,7 @@ cppline {space}*#(.*\\{space})+.*
|
|||||||
yb->buffer = YY_CURRENT_BUFFER;
|
yb->buffer = YY_CURRENT_BUFFER;
|
||||||
yb->lineno = yylineno;
|
yb->lineno = yylineno;
|
||||||
yb->filename = mm_strdup(input_filename);
|
yb->filename = mm_strdup(input_filename);
|
||||||
yb->next = yy_buffer;
|
ptr->used = yb->next = yy_buffer;
|
||||||
|
|
||||||
yy_buffer = yb;
|
yy_buffer = yb;
|
||||||
|
|
||||||
@ -687,7 +687,7 @@ cppline {space}*#(.*\\{space})+.*
|
|||||||
<C>"-" { return('-'); }
|
<C>"-" { return('-'); }
|
||||||
<C>"(" { return('('); }
|
<C>"(" { return('('); }
|
||||||
<C>")" { return(')'); }
|
<C>")" { return(')'); }
|
||||||
<C>{space} { ECHO; }
|
<C,xskip>{space} { ECHO; }
|
||||||
<C>\{ { return('{'); }
|
<C>\{ { return('{'); }
|
||||||
<C>\} { return('}'); }
|
<C>\} { return('}'); }
|
||||||
<C>\[ { return('['); }
|
<C>\[ { return('['); }
|
||||||
@ -923,12 +923,13 @@ cppline {space}*#(.*\\{space})+.*
|
|||||||
}
|
}
|
||||||
if (ptr == NULL)
|
if (ptr == NULL)
|
||||||
{
|
{
|
||||||
this = (struct _defines *) mm_alloc(sizeof(struct _defines));
|
this = (struct _defines *) mm_alloc(sizeof(struct _defines));
|
||||||
|
|
||||||
/* initial definition */
|
/* initial definition */
|
||||||
this->old = old;
|
this->old = old;
|
||||||
this->new = mm_strdup(literalbuf);
|
this->new = mm_strdup(literalbuf);
|
||||||
this->next = defines;
|
this->next = defines;
|
||||||
|
this->used = NULL;
|
||||||
defines = this;
|
defines = this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -953,7 +954,15 @@ cppline {space}*#(.*\\{space})+.*
|
|||||||
{
|
{
|
||||||
struct _yy_buffer *yb = yy_buffer;
|
struct _yy_buffer *yb = yy_buffer;
|
||||||
int i;
|
int i;
|
||||||
|
struct _defines *ptr;
|
||||||
|
|
||||||
|
for (ptr = defines; ptr; ptr = ptr->next)
|
||||||
|
if (ptr->used == yy_buffer)
|
||||||
|
{
|
||||||
|
ptr->used = NULL;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if (yyin != NULL)
|
if (yyin != NULL)
|
||||||
fclose(yyin);
|
fclose(yyin);
|
||||||
|
|
||||||
|
@ -134,6 +134,7 @@ struct _defines
|
|||||||
char *old;
|
char *old;
|
||||||
char *new;
|
char *new;
|
||||||
int pertinent;
|
int pertinent;
|
||||||
|
void *used;
|
||||||
struct _defines *next;
|
struct _defines *next;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user