- 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;
name = namealloc (name);
ptvbtyp = (struct vbtyp *) autallocheap (sizeof(struct vbtyp));
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 *DupFigure;
{
vbtyp_list *BeTyp;
{
vbtyp_list *DupTyp;
vbtyp_list *DupTypeBase;
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;
for ( DupTyp = DupFigure->BETYP;
@ -467,35 +489,30 @@ static void loc_dupvbtyp( Figure, DupFigure )
DupTypeIndex++;
}
for ( BeTyp = Figure->BETYP;
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,
DupTyp = vbh_addvbtyp( LocalDupFigure,
BeTyp->NAME, BeTyp->LEFT, BeTyp->RIGHT, BeTyp->VALUE, BeTyp->SIZE,
BeTyp->BYTE,
DupTypeBase, DupTypeIndex, (vbfun_list *)0, BeTyp->CLASS, BeTyp->LINE );
DupTyp->DYNAMIC = BeTyp->DYNAMIC;
DupTyp->DYNAMIC_LEFT = dupvexexpr( BeTyp->DYNAMIC_LEFT );
DupTyp->DYNAMIC_RIGHT = dupvexexpr( BeTyp->DYNAMIC_RIGHT );
DupTyp->DYNAMIC = BeTyp->DYNAMIC;
DupTyp->DYNAMIC_LEFT = dupvexexpr( BeTyp->DYNAMIC_LEFT );
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 );
}
}