- bug fix in vbh_dupvbtyp ! (pb with array types declaration in packages)

This commit is contained in:
Ludovic Jacomme 2004-09-17 19:01:11 +00:00
parent 68b602fe65
commit 7470d8e8a1
2 changed files with 43 additions and 27 deletions

View File

@ -690,7 +690,6 @@ long line;
struct vbtyp *ptvbtyp; struct vbtyp *ptvbtyp;
name = namealloc (name); name = namealloc (name);
ptvbtyp = (struct vbtyp *) autallocheap (sizeof(struct vbtyp)); ptvbtyp = (struct vbtyp *) autallocheap (sizeof(struct vbtyp));
ptvbtyp->CLASS = class; ptvbtyp->CLASS = class;

View File

@ -448,16 +448,38 @@ static ptype_list *loc_dupvbinst( Instruction )
| | | |
\------------------------------------------------------------*/ \------------------------------------------------------------*/
static void loc_dupvbtyp( Figure, DupFigure ) static vbtyp_list *
loc_duponevbtyp( Figure, DupFigure, BeTyp )
vbfig_list *Figure; vbfig_list *Figure;
vbfig_list *DupFigure; vbfig_list *DupFigure;
{
vbtyp_list *BeTyp; vbtyp_list *BeTyp;
{
vbtyp_list *DupTyp; vbtyp_list *DupTyp;
vbtyp_list *DupTypeBase; vbtyp_list *DupTypeBase;
int DupTypeIndex; int DupTypeIndex;
if ( BeTyp->INDEX < VBH_MAX_TYPE ) return( NULL );
DupTyp = vbh_getvbtyp( DupFigure, BeTyp->NAME );
if ( DupTyp != (vbtyp_list *)0 ) return( DupTyp );
if ( BeTyp->BASE != (vbtyp_list *)0 )
{
DupTypeBase = vbh_getvbtyp( DupFigure, BeTyp->BASE->NAME );
if ( DupTypeBase == (vbtyp_list *)0 )
{
DupTypeBase = loc_duponevbtyp( Figure, DupFigure, BeTyp->BASE );
}
}
else
{
DupTypeBase = (vbtyp_list *)0;
}
DupTypeIndex = 0; DupTypeIndex = 0;
for ( DupTyp = DupFigure->BETYP; for ( DupTyp = DupFigure->BETYP;
@ -467,35 +489,30 @@ static void loc_dupvbtyp( Figure, DupFigure )
DupTypeIndex++; DupTypeIndex++;
} }
for ( BeTyp = Figure->BETYP; DupTyp = vbh_addvbtyp( LocalDupFigure,
BeTyp != (vbtyp_list *)0;
BeTyp = BeTyp->NEXT )
{
if ( BeTyp->INDEX < VBH_MAX_TYPE ) continue;
DupTyp = vbh_getvbtyp( DupFigure, BeTyp->NAME );
if ( DupTyp != (vbtyp_list *)0 ) continue;
if ( BeTyp->BASE != (vbtyp_list *)0 )
{
DupTypeBase = vbh_getvbtyp( DupFigure, BeTyp->BASE->NAME );
}
else
{
DupTypeBase = (vbtyp_list *)0;
}
DupTyp = vbh_addvbtyp( LocalDupFigure,
BeTyp->NAME, BeTyp->LEFT, BeTyp->RIGHT, BeTyp->VALUE, BeTyp->SIZE, BeTyp->NAME, BeTyp->LEFT, BeTyp->RIGHT, BeTyp->VALUE, BeTyp->SIZE,
BeTyp->BYTE, BeTyp->BYTE,
DupTypeBase, DupTypeIndex, (vbfun_list *)0, BeTyp->CLASS, BeTyp->LINE ); DupTypeBase, DupTypeIndex, (vbfun_list *)0, BeTyp->CLASS, BeTyp->LINE );
DupTyp->DYNAMIC = BeTyp->DYNAMIC; DupTyp->DYNAMIC = BeTyp->DYNAMIC;
DupTyp->DYNAMIC_LEFT = dupvexexpr( BeTyp->DYNAMIC_LEFT ); DupTyp->DYNAMIC_LEFT = dupvexexpr( BeTyp->DYNAMIC_LEFT );
DupTyp->DYNAMIC_RIGHT = dupvexexpr( BeTyp->DYNAMIC_RIGHT ); DupTyp->DYNAMIC_RIGHT = dupvexexpr( BeTyp->DYNAMIC_RIGHT );
DupTypeIndex++; return( DupTyp );
}
static void loc_dupvbtyp( Figure, DupFigure )
vbfig_list *Figure;
vbfig_list *DupFigure;
{
vbtyp_list *BeTyp;
for ( BeTyp = Figure->BETYP;
BeTyp != (vbtyp_list *)0;
BeTyp = BeTyp->NEXT )
{
loc_duponevbtyp( Figure, DupFigure, BeTyp );
} }
} }