Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit5a5f0a6

Browse files
author
Michael Meskes
committed
- Changed struct definition handling so "struct foo {}" always gets defined.
1 parent2ec8ee0 commit5a5f0a6

File tree

2 files changed

+45
-64
lines changed

2 files changed

+45
-64
lines changed

‎src/interfaces/ecpg/ChangeLog

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1651,6 +1651,11 @@ Mon Sep 22 15:13:02 CEST 2003
16511651
- Fixed order mismatch in processing "using" arguments.
16521652
- Fixed some minor things in test cases.
16531653
- Use defines for Informix error codes.
1654+
1655+
Tue Sep 23 14:50:45 CEST 2003
1656+
1657+
- Changed struct definition handling so "struct foo {}" always gets
1658+
defined.
16541659
- Set ecpg version to 3.0.0
16551660
- Set ecpg library to 4.0.0
16561661
- Set pgtypes library to 1.0.0

‎src/interfaces/ecpg/preproc/preproc.y

Lines changed: 40 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/Attic/preproc.y,v 1.258 2003/09/22 13:19:39 meskes Exp $*/
1+
/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/Attic/preproc.y,v 1.259 2003/09/23 12:56:35 meskes Exp $*/
22

33
/* Copyright comment*/
44
%{
@@ -540,7 +540,7 @@ add_additional_variables(char *name, bool insert)
540540
%type<str>col_name_keywordfunc_name_keywordprecisionopt_scale
541541
%type<str>ECPGTypeNameusing_listECPGColLabelCommonUsingConst
542542
%type<str>inf_val_listinf_col_listusing_descriptorinto_descriptor
543-
%type<str>ecpg_into_usingprepared_name
543+
%type<str>ecpg_into_usingprepared_namestruct_union_type_with_symbol
544544

545545
%type<struct_union>s_struct_union_symbol
546546

@@ -551,7 +551,6 @@ add_additional_variables(char *name, bool insert)
551551
%type<dtype_enum>descriptor_itemdesc_header_item
552552

553553
%type<type>var_typecommon_typesingle_vt_type
554-
%type<type>struct_union_type_with_symbol
555554

556555
%type<action>action
557556

@@ -4441,34 +4440,7 @@ single_var_declaration: storage_declaration
44414440
}
44424441
|struct_union_type_with_symbol';'
44434442
{
4444-
/* this is essantially a typedef but needs the keyword struct/union as well*/
4445-
structtypedefs *ptr, *this;
4446-
4447-
for (ptr = types; ptr !=NULL; ptr = ptr->next)
4448-
{
4449-
if (strcmp($1.type_str, ptr->name) ==0)
4450-
{
4451-
/* re-definition is a bug*/
4452-
snprintf(errortext,sizeof(errortext), "Type %s already defined", $1.type_str);
4453-
mmerror(PARSE_ERROR, ET_ERROR, errortext);
4454-
}
4455-
}
4456-
4457-
this = (structtypedefs *) mm_alloc(sizeof(structtypedefs));
4458-
4459-
/* initial definition*/
4460-
this->next = types;
4461-
this->name =$1.type_str;
4462-
this->type = (structthis_type *) mm_alloc(sizeof(structthis_type));
4463-
this->type->type_enum =$1.type_enum;
4464-
this->type->type_str = mm_strdup($1.type_str);
4465-
this->type->type_dimension = make_str("-1");/* dimension of array*/
4466-
this->type->type_index = make_str("-1");/* length of string*/
4467-
this->type->type_sizeof = ECPGstruct_sizeof;
4468-
this->struct_member_list = struct_member_list[struct_level];
4469-
4470-
types =this;
4471-
$$ = cat2_str($1.type_sizeof, make_str(";"));
4443+
$$ = cat2_str($1, make_str(";"));
44724444
}
44734445
;
44744446

@@ -4658,6 +4630,7 @@ type_declaration: S_TYPEDEF
46584630
char * dimension =$6.index1;
46594631
char * length =$6.index2;
46604632

4633+
printf("MM: %s\n", $5);
46614634
if (($3.type_enum == ECPGt_struct ||
46624635
$3.type_enum == ECPGt_union) &&
46634636
initializer ==1)
@@ -4735,34 +4708,7 @@ var_declaration: storage_declaration
47354708
}
47364709
|struct_union_type_with_symbol';'
47374710
{
4738-
/* this is essantially a typedef but needs the keyword struct/union as well*/
4739-
structtypedefs *ptr, *this;
4740-
4741-
for (ptr = types; ptr !=NULL; ptr = ptr->next)
4742-
{
4743-
if (strcmp($1.type_str, ptr->name) ==0)
4744-
{
4745-
/* re-definition is a bug*/
4746-
snprintf(errortext,sizeof(errortext), "Type %s already defined", $1.type_str);
4747-
mmerror(PARSE_ERROR, ET_ERROR, errortext);
4748-
}
4749-
}
4750-
4751-
this = (structtypedefs *) mm_alloc(sizeof(structtypedefs));
4752-
4753-
/* initial definition*/
4754-
this->next = types;
4755-
this->name =$1.type_str;
4756-
this->type = (structthis_type *) mm_alloc(sizeof(structthis_type));
4757-
this->type->type_enum =$1.type_enum;
4758-
this->type->type_str = mm_strdup($1.type_str);
4759-
this->type->type_dimension = make_str("-1");/* dimension of array*/
4760-
this->type->type_index = make_str("-1");/* length of string*/
4761-
this->type->type_sizeof = ECPGstruct_sizeof;
4762-
this->struct_member_list = struct_member_list[struct_level];
4763-
4764-
types =this;
4765-
$$ = cat2_str($1.type_sizeof, make_str(";"));
4711+
$$ = cat2_str($1, make_str(";"));
47664712
}
47674713
;
47684714

@@ -4996,21 +4942,51 @@ struct_union_type_with_symbol: s_struct_union_symbol
49964942
}
49974943
'{'variable_declarations'}'
49984944
{
4945+
structtypedefs *ptr, *this;
4946+
structthis_type su_type;
4947+
49994948
ECPGfree_struct_member(struct_member_list[struct_level]);
50004949
struct_member_list[struct_level] =NULL;
50014950
free(actual_storage[struct_level--]);
50024951
if (strncmp($1.su,"struct",sizeof("struct")-1) ==0)
5003-
$$.type_enum = ECPGt_struct;
4952+
su_type.type_enum = ECPGt_struct;
50044953
else
5005-
$$.type_enum = ECPGt_union;
5006-
$$.type_str = cat2_str($1.su,$1.symbol);
5007-
$$.type_sizeof = cat_str(4, mm_strdup($$.type_str), make_str("{"),$4, make_str("}"));
4954+
su_type.type_enum = ECPGt_union;
4955+
su_type.type_str = cat2_str($1.su,$1.symbol);
50084956
free(forward_name);
50094957
forward_name =NULL;
4958+
4959+
/* This is essantially a typedef but needs the keyword struct/union as well.
4960+
* So we create the typedef for each struct definition with symbol*/
4961+
for (ptr = types; ptr !=NULL; ptr = ptr->next)
4962+
{
4963+
if (strcmp(su_type.type_str, ptr->name) ==0)
4964+
{
4965+
/* re-definition is a bug*/
4966+
snprintf(errortext,sizeof(errortext), "Type %s already defined", su_type.type_str);
4967+
mmerror(PARSE_ERROR, ET_ERROR, errortext);
4968+
}
4969+
}
4970+
4971+
this = (structtypedefs *) mm_alloc(sizeof(structtypedefs));
4972+
4973+
/* initial definition*/
4974+
this->next = types;
4975+
this->name = mm_strdup(su_type.type_str);
4976+
this->type = (structthis_type *) mm_alloc(sizeof(structthis_type));
4977+
this->type->type_enum = su_type.type_enum;
4978+
this->type->type_str = mm_strdup(su_type.type_str);
4979+
this->type->type_dimension = make_str("-1");/* dimension of array*/
4980+
this->type->type_index = make_str("-1");/* length of string*/
4981+
this->type->type_sizeof = ECPGstruct_sizeof;
4982+
this->struct_member_list = struct_member_list[struct_level];
4983+
4984+
types =this;
4985+
$$ = cat_str(4, su_type.type_str, make_str("{"),$4, make_str("}"));
50104986
}
50114987
;
50124988

5013-
struct_union_type:struct_union_type_with_symbol{$$ =$1.type_sizeof; }
4989+
struct_union_type:struct_union_type_with_symbol{$$ =$1; }
50144990
|s_struct_union
50154991
{
50164992
struct_member_list[struct_level++] =NULL;

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp