20000419-12:12

This commit is contained in:
Antonio Linares
2000-04-19 10:11:18 +00:00
parent 0cb07974e4
commit 2bc7d8fcdb

View File

@@ -618,6 +618,66 @@ static void DataSegment( FILE * hObjFile, BYTE * symbol, USHORT wSymLen, USHORT
{
switch( pFunction->pCode[ w ] )
{
case HB_P_ARRAYDIM:
case HB_P_ARRAYGEN:
case HB_P_DO:
case HB_P_FUNCTION:
case HB_P_JUMP:
case HB_P_JUMPFALSE:
case HB_P_JUMPTRUE:
case HB_P_LINE:
case HB_P_POPLOCAL:
case HB_P_POPSTATIC:
case HB_P_PUSHINT:
case HB_P_PUSHLOCAL:
case HB_P_PUSHLOCALREF:
case HB_P_PUSHSTATIC:
case HB_P_PUSHSTATICREF:
{
putbyte( pFunction->pCode[ w ], hObjFile );
bCheckSum += pFunction->pCode[ w ];
putbyte( pFunction->pCode[ w + 1 ], hObjFile );
bCheckSum += pFunction->pCode[ w + 1 ];
putbyte( pFunction->pCode[ w + 2 ], hObjFile );
bCheckSum += pFunction->pCode[ w + 2 ];
w += 2;
}
break;
case HB_P_JUMPFAR:
case HB_P_JUMPFARFALSE:
case HB_P_JUMPFARTRUE:
case HB_P_SEQBEGIN:
case HB_P_SEQEND:
{
putbyte( pFunction->pCode[ w ], hObjFile );
bCheckSum += pFunction->pCode[ w ];
putbyte( pFunction->pCode[ w + 1 ], hObjFile );
bCheckSum += pFunction->pCode[ w + 1 ];
putbyte( pFunction->pCode[ w + 2 ], hObjFile );
bCheckSum += pFunction->pCode[ w + 2 ];
putbyte( pFunction->pCode[ w + 3 ], hObjFile );
bCheckSum += pFunction->pCode[ w + 3 ];
w += 3;
}
break;
case HB_P_PUSHLONG:
{
putbyte( pFunction->pCode[ w ], hObjFile );
bCheckSum += pFunction->pCode[ w ];
putbyte( pFunction->pCode[ w + 1 ], hObjFile );
bCheckSum += pFunction->pCode[ w + 1 ];
putbyte( pFunction->pCode[ w + 2 ], hObjFile );
bCheckSum += pFunction->pCode[ w + 2 ];
putbyte( pFunction->pCode[ w + 3 ], hObjFile );
bCheckSum += pFunction->pCode[ w + 3 ];
putbyte( pFunction->pCode[ w + 4 ], hObjFile );
bCheckSum += pFunction->pCode[ w + 4 ];
w += 4;
}
break;
case HB_P_FRAME:
{
BYTE bLocals = GetFunctionLocalsCount( pFunction );
@@ -635,18 +695,6 @@ static void DataSegment( FILE * hObjFile, BYTE * symbol, USHORT wSymLen, USHORT
}
break;
case HB_P_LINE:
{
putbyte( HB_P_LINE, hObjFile );
bCheckSum += HB_P_LINE;
putbyte( pFunction->pCode[ w + 1 ], hObjFile );
bCheckSum += pFunction->pCode[ w + 1 ];
putbyte( pFunction->pCode[ w + 2 ], hObjFile );
bCheckSum += pFunction->pCode[ w + 2 ];
w += 2;
}
break;
case HB_P_SFRAME:
{
if( pFunction->bFlags & FUN_USES_STATICS )
@@ -674,21 +722,52 @@ static void DataSegment( FILE * hObjFile, BYTE * symbol, USHORT wSymLen, USHORT
}
break;
case HB_P_MESSAGE:
case HB_P_POPALIASEDFIELD:
case HB_P_POPALIASEDVAR:
case HB_P_POPFIELD:
case HB_P_POPMEMVAR:
case HB_P_POPVARIABLE:
case HB_P_PUSHALIASEDFIELD:
case HB_P_PUSHALIASEDVAR:
case HB_P_PUSHFIELD:
case HB_P_PUSHMEMVAR:
case HB_P_PUSHVARIABLE:
case HB_P_PUSHMEMVARREF:
case HB_P_PUSHSYM:
{
USHORT wFixPos = pFunction->pCode[ w + 1 ] +
pFunction->pCode[ w + 2 ] * 256;
wFixPos = hb_compSymbolFixPos( wFixPos );
putbyte( HB_P_PUSHSYM, hObjFile );
bCheckSum += HB_P_PUSHSYM;
putbyte( HB_LOBYTE( wFixPos ), hObjFile );
bCheckSum += HB_LOBYTE( wFixPos );
putbyte( HB_HIBYTE( wFixPos ), hObjFile );
bCheckSum += HB_HIBYTE( wFixPos );
USHORT wPos = pFunction->pCode[ w + 1 ] +
pFunction->pCode[ w + 2 ] * 256;
wPos = hb_compSymbolFixPos( wPos );
putbyte( pFunction->pCode[ w ], hObjFile );
bCheckSum += pFunction->pCode[ w ];
putbyte( HB_LOBYTE( wPos ), hObjFile );
bCheckSum += HB_LOBYTE( wPos );
putbyte( HB_HIBYTE( wPos ), hObjFile );
bCheckSum += HB_HIBYTE( wPos );
w += 2;
}
break;
case HB_P_STATICS:
{
USHORT wPos = pFunction->pCode[ w + 1 ] +
pFunction->pCode[ w + 2 ] * 256;
wPos = hb_compSymbolFixPos( wPos );
putbyte( pFunction->pCode[ w ], hObjFile );
bCheckSum += pFunction->pCode[ w ];
putbyte( HB_LOBYTE( wPos ), hObjFile );
bCheckSum += HB_LOBYTE( wPos );
putbyte( HB_HIBYTE( wPos ), hObjFile );
bCheckSum += HB_HIBYTE( wPos );
putbyte( pFunction->pCode[ w + 3 ], hObjFile );
bCheckSum += pFunction->pCode[ w + 3 ];
putbyte( pFunction->pCode[ w + 4 ], hObjFile );
bCheckSum += pFunction->pCode[ w + 4 ];
w += 4;
}
break;
case HB_P_PUSHSTR:
{
USHORT uLen = pFunction->pCode[ w + 1 ] +
@@ -715,6 +794,105 @@ static void DataSegment( FILE * hObjFile, BYTE * symbol, USHORT wSymLen, USHORT
}
break;
case HB_P_LOCALNAME:
{
putbyte( HB_P_LOCALNAME, hObjFile );
bCheckSum += HB_P_LOCALNAME;
putbyte( pFunction->pCode[ w + 1 ], hObjFile );
bCheckSum += pFunction->pCode[ w + 1 ];
putbyte( pFunction->pCode[ w + 2 ], hObjFile );
bCheckSum += pFunction->pCode[ w + 2 ];
w += 2;
while( pFunction->pCode[ w + 1 ] )
{
w++;
putbyte( pFunction->pCode[ w ], hObjFile );
bCheckSum += pFunction->pCode[ w ];
}
w++;
putbyte( 0, hObjFile );
}
break;
case HB_P_MODULENAME:
{
putbyte( HB_P_MODULENAME, hObjFile );
bCheckSum += HB_P_MODULENAME;
while( pFunction->pCode[ w + 1 ] )
{
w++;
putbyte( pFunction->pCode[ w ], hObjFile );
bCheckSum += pFunction->pCode[ w ];
}
w++;
putbyte( 0, hObjFile );
}
break;
case HB_P_PARAMETER:
{
USHORT wPos = pFunction->pCode[ w + 1 ] +
pFunction->pCode[ w + 2 ] * 256;
wPos = hb_compSymbolFixPos( wPos );
putbyte( pFunction->pCode[ w ], hObjFile );
bCheckSum += pFunction->pCode[ w ];
putbyte( HB_LOBYTE( wPos ), hObjFile );
bCheckSum += HB_LOBYTE( wPos );
putbyte( HB_HIBYTE( wPos ), hObjFile );
bCheckSum += HB_HIBYTE( wPos );
putbyte( pFunction->pCode[ w + 3 ], hObjFile );
bCheckSum += pFunction->pCode[ w + 3 ];
w += 3;
}
break;
case HB_P_PUSHBLOCK:
{
USHORT uVars = pFunction->pCode[ w + 5 ] +
pFunction->pCode[ w + 6 ] * 256;
putbyte( pFunction->pCode[ w ], hObjFile );
bCheckSum += pFunction->pCode[ w ];
putbyte( pFunction->pCode[ w + 1 ], hObjFile );
bCheckSum += pFunction->pCode[ w + 1 ];
putbyte( pFunction->pCode[ w + 2 ], hObjFile );
bCheckSum += pFunction->pCode[ w + 2 ];
putbyte( pFunction->pCode[ w + 3 ], hObjFile );
bCheckSum += pFunction->pCode[ w + 3 ];
putbyte( pFunction->pCode[ w + 4 ], hObjFile );
bCheckSum += pFunction->pCode[ w + 4 ];
putbyte( pFunction->pCode[ w + 5 ], hObjFile );
bCheckSum += pFunction->pCode[ w + 5 ];
putbyte( pFunction->pCode[ w + 6 ], hObjFile );
bCheckSum += pFunction->pCode[ w + 6 ];
w += 6;
while( uVars-- )
{
w++;
putbyte( pFunction->pCode[ w ], hObjFile );
bCheckSum += pFunction->pCode[ w ];
w++;
putbyte( pFunction->pCode[ w ], hObjFile );
bCheckSum += pFunction->pCode[ w ];
}
}
break;
case HB_P_PUSHDOUBLE:
{
int i = 0;
putbyte( pFunction->pCode[ w ], hObjFile );
bCheckSum += pFunction->pCode[ w ];
while( i++ < sizeof( double ) + sizeof( BYTE ) )
{
w++;
putbyte( pFunction->pCode[ w ], hObjFile );
bCheckSum += pFunction->pCode[ w ];
}
}
break;
default:
{
putbyte( pFunction->pCode[ w ], hObjFile );
@@ -908,4 +1086,4 @@ static void GroupDef( FILE * hObjFile, BYTE bName, BYTE * aSegs )
putbyte( 256 - bCheckSum, hObjFile );
}
#endif /* HARBOUR_OBJ_GENERATION */
#endif /* HARBOUR_OBJ_GENERATION */