Synced parser and keyword list.

Fixed handling of cyclic defines.
This commit is contained in:
Michael Meskes 2004-07-20 18:06:41 +00:00
parent 45995219a0
commit 5420ed3a81
6 changed files with 47 additions and 36 deletions

View File

@ -1845,6 +1845,11 @@ Mon, 5 Jul 2004 10:41:54 +0200
Mon Jul 5 20:50:09 CEST 2004
- Added free() calls against memory leak in interval.c.
Tue Jul 20 09:15:21 CEST 2004
- Synced parser and keyword list.
- Fixed handling of cyclic defines.
- Set pgtypes library version to 1.2.
- Set ecpg version to 3.2.0.
- Set compat library version to 1.2.

View File

@ -1,4 +1,4 @@
/* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/ecpg.c,v 1.88 2004/06/10 22:26:23 momjian Exp $ */
/* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/ecpg.c,v 1.89 2004/07/20 18:06:41 meskes Exp $ */
/* New main for ecpg, the PostgreSQL embedded SQL precompiler. */
/* (C) Michael Meskes <meskes@postgresql.org> Feb 5th, 1998 */
@ -96,7 +96,7 @@ add_preprocessor_define(char *define)
{
char *tmp;
/* symbol gets a value */
/* symbol has a value */
for (tmp = ptr - 1; *tmp == ' '; tmp--);
tmp[1] = '\0';
defines->old = define_copy;
@ -105,9 +105,10 @@ add_preprocessor_define(char *define)
else
{
defines->old = define_copy;
defines->new = mm_strdup("");
defines->new = mm_strdup("1");
}
defines->pertinent = true;
defines->used = NULL;
defines->next = pd;
}

View File

@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/keywords.c,v 1.63 2004/06/20 10:45:47 meskes Exp $
* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/keywords.c,v 1.64 2004/07/20 18:06:41 meskes Exp $
*
*-------------------------------------------------------------------------
*/
@ -233,8 +233,6 @@ static ScanKeyword ScanKeywords[] = {
{"owner", OWNER},
{"partial", PARTIAL},
{"password", PASSWORD},
{"path", PATH_P},
{"pendant", PENDANT},
{"position", POSITION},
{"precision", PRECISION},
{"prepare", PREPARE},
@ -327,7 +325,6 @@ static ScanKeyword ScanKeywords[] = {
{"varchar", VARCHAR},
{"varying", VARYING},
{"verbose", VERBOSE},
{"version", VERSION},
{"view", VIEW},
{"volatile", VOLATILE},
{"when", WHEN},

View File

@ -12,7 +12,7 @@
*
*
* IDENTIFICATION
* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/pgc.l,v 1.129 2004/06/30 15:01:57 meskes Exp $
* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/pgc.l,v 1.130 2004/07/20 18:06:41 meskes Exp $
*
*-------------------------------------------------------------------------
*/
@ -598,11 +598,11 @@ cppline {space}*#(.*\\{space})+.*
<SQL>{identifier} {
ScanKeyword *keyword;
struct _defines *ptr;
/* How about a DEFINE? */
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;
@ -611,15 +611,14 @@ cppline {space}*#(.*\\{space})+.*
yb->buffer = YY_CURRENT_BUFFER;
yb->lineno = yylineno;
yb->filename = mm_strdup(input_filename);
yb->next = yy_buffer;
ptr->used = yb->next = yy_buffer;
yy_buffer = yb;
yy_scan_string(ptr->new);
break;
}
}
if (ptr == NULL)
{
/* Is it an SQL keyword? */
@ -640,16 +639,13 @@ cppline {space}*#(.*\\{space})+.*
/*
* None of the above. Return it as an identifier.
*
* The backend would attempt to truncate and case-fold
* The backend will attempt to truncate and case-fold
* the identifier, but I see no good reason for ecpg
* to do so; that's just another way that ecpg could get
* out of step with the backend.
*/
if (ptr == NULL)
{
yylval.str = mm_strdup(yytext);
return IDENT;
}
yylval.str = mm_strdup(yytext);
return IDENT;
}
}
<SQL>{other} { return yytext[0]; }
@ -700,7 +696,7 @@ cppline {space}*#(.*\\{space})+.*
/* is it a define? */
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;
@ -709,7 +705,7 @@ cppline {space}*#(.*\\{space})+.*
yb->buffer = YY_CURRENT_BUFFER;
yb->lineno = yylineno;
yb->filename = mm_strdup(input_filename);
yb->next = yy_buffer;
ptr->used = yb->next = yy_buffer;
yy_buffer = yb;
@ -739,7 +735,7 @@ cppline {space}*#(.*\\{space})+.*
<C>"-" { return('-'); }
<C>"(" { return('('); }
<C>")" { return(')'); }
<C>{space} { ECHO; }
<C,xskip>{space} { ECHO; }
<C>\{ { return('{'); }
<C>\} { return('}'); }
<C>\[ { return('['); }
@ -975,12 +971,13 @@ cppline {space}*#(.*\\{space})+.*
}
if (ptr == NULL)
{
this = (struct _defines *) mm_alloc(sizeof(struct _defines));
this = (struct _defines *) mm_alloc(sizeof(struct _defines));
/* initial definition */
this->old = old;
this->new = mm_strdup(literalbuf);
/* initial definition */
this->old = old;
this->new = mm_strdup(literalbuf);
this->next = defines;
this->used = NULL;
defines = this;
}
@ -993,7 +990,7 @@ cppline {space}*#(.*\\{space})+.*
<incl>[^;\<\>\"]+";" { parse_include(); }
<<EOF>> {
if (yy_buffer == NULL) {
if (yy_buffer == NULL) {
if ( preproc_tos > 0 )
{
preproc_tos = 0;
@ -1005,7 +1002,15 @@ cppline {space}*#(.*\\{space})+.*
{
struct _yy_buffer *yb = yy_buffer;
int i;
struct _defines *ptr;
for (ptr = defines; ptr; ptr = ptr->next)
if (ptr->used == yy_buffer)
{
ptr->used = NULL;
break;
}
if (yyin != NULL)
fclose(yyin);
@ -1025,6 +1030,7 @@ cppline {space}*#(.*\\{space})+.*
if (i != 0)
output_line_number();
}
}
%%

View File

@ -1,4 +1,4 @@
/* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/preproc.y,v 1.292 2004/07/05 09:45:53 meskes Exp $ */
/* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/preproc.y,v 1.293 2004/07/20 18:06:41 meskes Exp $ */
/* Copyright comment */
%{
@ -385,7 +385,7 @@ add_additional_variables(char *name, bool insert)
OBJECT_P OF OFF OFFSET OIDS OLD ON ONLY OPERATOR OPTION OR ORDER
OUT_P OUTER_P OVERLAPS OVERLAY OWNER
PARTIAL PASSWORD PATH_P PENDANT PLACING POSITION
PARTIAL PASSWORD PLACING POSITION
PRECISION PRESERVE PREPARE PRIMARY PRIOR PRIVILEGES PROCEDURAL PROCEDURE
QUOTE
@ -403,7 +403,7 @@ add_additional_variables(char *name, bool insert)
UNCOMMITTED UNENCRYPTED UNION UNIQUE UNKNOWN UNLISTEN UNTIL UPDATE USAGE
USER USING
VACUUM VALID VALUES VARCHAR VARYING VERBOSE VERSION VIEW VOLATILE
VACUUM VALID VALUES VARCHAR VARYING VERBOSE VIEW VOLATILE
WHEN WHERE WITH WITHOUT WORK WRITE
YEAR_P
ZONE
@ -414,7 +414,7 @@ add_additional_variables(char *name, bool insert)
*/
%token UNIONJOIN
/* Special keywords, not in the query language - see the "lex" file */
/* Special token types, not actually keywords - see the "lex" file */
%token <str> IDENT SCONST Op CSTRING CVARIABLE CPP_LINE IP BCONST XCONST
%token <ival> ICONST PARAM
%token <dval> FCONST
@ -1232,6 +1232,9 @@ alter_table_cmd:
/* ALTER TABLE <name> SET WITHOUT CLUSTER */
| SET WITHOUT CLUSTER
{ $$ = make_str("set without cluster"); }
/* ALTER TABLE <name> SET TABLESPACE <tablespacename> */
| SET TABLESPACE name
{ $$ = cat_str(2, make_str("set tablespace"), $3); }
;
alter_column_default:
@ -1590,8 +1593,8 @@ CreateAsElement: ColId { $$ = $1; }
*
*****************************************************************************/
CreateSeqStmt: CREATE OptTemp SEQUENCE qualified_name OptSeqList OptTableSpace
{ $$ = cat_str(5, make_str("create"), $2, make_str("sequence"), $4, $5, $6); }
CreateSeqStmt: CREATE OptTemp SEQUENCE qualified_name OptSeqList
{ $$ = cat_str(4, make_str("create"), $2, make_str("sequence"), $4, $5); }
;
AlterSeqStmt: ALTER SEQUENCE qualified_name OptSeqList
@ -5857,6 +5860,7 @@ ECPGunreserved: ABORT_P { $$ = make_str("abort"); }
| ADD { $$ = make_str("add"); }
| AFTER { $$ = make_str("after"); }
| AGGREGATE { $$ = make_str("aggregate"); }
| ALSO { $$ = make_str("also"); }
| ALTER { $$ = make_str("alter"); }
| ASSERTION { $$ = make_str("assertion"); }
| ASSIGNMENT { $$ = make_str("assignment"); }
@ -5957,8 +5961,6 @@ ECPGunreserved: ABORT_P { $$ = make_str("abort"); }
| OWNER { $$ = make_str("owner"); }
| PARTIAL { $$ = make_str("partial"); }
| PASSWORD { $$ = make_str("password"); }
| PATH_P { $$ = make_str("path"); }
| PENDANT { $$ = make_str("pendant"); }
| PREPARE { $$ = make_str("prepare"); }
| PRESERVE { $$ = make_str("preserver"); }
| PRIOR { $$ = make_str("prior"); }
@ -6021,7 +6023,6 @@ ECPGunreserved: ABORT_P { $$ = make_str("abort"); }
| VALID { $$ = make_str("valid"); }
| VALUES { $$ = make_str("values"); }
| VARYING { $$ = make_str("varying"); }
| VERSION { $$ = make_str("version"); }
| VIEW { $$ = make_str("view"); }
| WITH { $$ = make_str("with"); }
| WITHOUT { $$ = make_str("without"); }

View File

@ -135,6 +135,7 @@ struct _defines
char *old;
char *new;
int pertinent;
void *used;
struct _defines *next;
};