1- /* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/preproc.y,v 1.285 2004/05/30 23:40:40 neilc Exp $*/
1+ /* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/preproc.y,v 1.286 2004/06/11 17:32:39 momjian Exp $*/
22
33/* Copyright comment*/
44%{
@@ -19,7 +19,6 @@ char*input_filename = NULL;
1919static int QueryIsRule =0 , FoundInto =0 ;
2020static int initializer =0 ;
2121static struct this_type actual_type[STRUCT_DEPTH];
22- static char *actual_storage[STRUCT_DEPTH];
2322static char *actual_startline[STRUCT_DEPTH];
2423
2524/* temporarily store struct members while creating the data structure*/
@@ -4473,6 +4472,8 @@ single_var_declaration: storage_declaration
44734472actual_type[struct_level].type_dimension =$2 .type_dimension;
44744473actual_type[struct_level].type_index =$2 .type_index;
44754474actual_type[struct_level].type_sizeof =$2 .type_sizeof;
4475+
4476+ actual_startline[struct_level] = hashline_number();
44764477}
44774478variable_list ' ;'
44784479{
@@ -4484,7 +4485,6 @@ single_var_declaration: storage_declaration
44844485actual_type[struct_level].type_dimension =$1 .type_dimension;
44854486actual_type[struct_level].type_index =$1 .type_index;
44864487actual_type[struct_level].type_sizeof =$1 .type_sizeof;
4487- actual_storage[struct_level] = EMPTY;
44884488
44894489actual_startline[struct_level] = hashline_number();
44904490}
@@ -4610,6 +4610,8 @@ var_declaration: storage_declaration
46104610actual_type[struct_level].type_dimension =$2 .type_dimension;
46114611actual_type[struct_level].type_index =$2 .type_index;
46124612actual_type[struct_level].type_sizeof =$2 .type_sizeof;
4613+
4614+ actual_startline[struct_level] = hashline_number();
46134615}
46144616variable_list ' ;'
46154617{
@@ -4621,7 +4623,6 @@ var_declaration: storage_declaration
46214623actual_type[struct_level].type_dimension =$1 .type_dimension;
46224624actual_type[struct_level].type_index =$1 .type_index;
46234625actual_type[struct_level].type_sizeof =$1 .type_sizeof;
4624- actual_storage[struct_level] = EMPTY;
46254626
46264627actual_startline[struct_level] = hashline_number();
46274628}
@@ -4637,18 +4638,15 @@ var_declaration: storage_declaration
46374638
46384639storage_declaration :storage_clause storage_modifier
46394640{
4640- actual_storage[struct_level] = cat2_str(mm_strdup($1 ), mm_strdup($2 ));
4641- actual_startline[struct_level] = hashline_number();
4641+ $$ = cat2_str ($1 ,$2 );
46424642}
46434643| storage_clause
46444644{
4645- actual_storage[struct_level] = mm_strdup($1 );
4646- actual_startline[struct_level] = hashline_number();
4645+ $$ =$1 ;
46474646}
46484647| storage_modifier
46494648{
4650- actual_storage[struct_level] = mm_strdup($1 );
4651- actual_startline[struct_level] = hashline_number();
4649+ $$ =$1 ;
46524650}
46534651;
46544652
@@ -4871,7 +4869,7 @@ struct_union_type_with_symbol: s_struct_union_symbol
48714869
48724870ECPGfree_struct_member (struct_member_list[struct_level]);
48734871struct_member_list[struct_level] =NULL ;
4874- free (actual_storage[ struct_level--]) ;
4872+ struct_level--;
48754873if (strncmp($1 .su," struct" ,sizeof (" struct" )-1 ) ==0 )
48764874su_type.type_enum = ECPGt_struct;
48774875else
@@ -4921,7 +4919,7 @@ struct_union_type: struct_union_type_with_symbol{ $$ = $1; }
49214919{
49224920ECPGfree_struct_member (struct_member_list[struct_level]);
49234921struct_member_list[struct_level] =NULL ;
4924- free (actual_storage[ struct_level--]) ;
4922+ struct_level--;
49254923$$ = cat_str(4 ,$1 , make_str(" {" ),$4 , make_str(" }" ));
49264924}
49274925;
@@ -5047,9 +5045,9 @@ variable: opt_pointer ECPGColLabel opt_array_bounds opt_initializer
50475045mmerror (PARSE_ERROR, ET_ERROR," pointer to varchar are not implemented" );
50485046
50495047if (strcmp(dimension," 0" ) ==0 )
5050- $$ = cat_str(7 , mm_strdup(actual_storage[struct_level]) , make2_str(make_str(" struct varchar_" ), mm_strdup($2 )), make_str(" { int len; char arr[" ), mm_strdup(length), make_str(" ]; } *" ), mm_strdup($2 ),$4 );
5048+ $$ = cat_str(6 , make2_str(make_str(" struct varchar_" ), mm_strdup($2 )), make_str(" { int len; char arr[" ), mm_strdup(length), make_str(" ]; } *" ), mm_strdup($2 ),$4 );
50515049else
5052- $$ = cat_str(8 , mm_strdup(actual_storage[struct_level]) , make2_str(make_str(" struct varchar_" ), mm_strdup($2 )), make_str(" { int len; char arr[" ), mm_strdup(length), make_str(" ]; }" ), mm_strdup($2 ), mm_strdup(dim),$4 );
5050+ $$ = cat_str(7 , make2_str(make_str(" struct varchar_" ), mm_strdup($2 )), make_str(" { int len; char arr[" ), mm_strdup(length), make_str(" ]; }" ), mm_strdup($2 ), mm_strdup(dim),$4 );
50535051break ;
50545052
50555053case ECPGt_char: