2009-04-23 14:42 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)

* harbour/source/vm/hvm.c
    % optimized memory allocation in cloned symbol tables to store
      whole symbol table with all symbol names in single memory block
This commit is contained in:
Przemyslaw Czerpak
2009-04-23 12:34:42 +00:00
parent a171bc3a00
commit bf856da86f
2 changed files with 17 additions and 19 deletions

View File

@@ -8,6 +8,11 @@
2009-12-31 13:59 UTC+0100 Foo Bar (foo.bar foobar.org)
*/
2009-04-23 14:42 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/source/vm/hvm.c
% optimized memory allocation in cloned symbol tables to store
whole symbol table with all symbol names in single memory block
2009-04-23 11:53 UTC+0200 Viktor Szakats (harbour.01 syenar hu)
* contrib/hbqt/tests/hbqt.hbp
* Minor adjustment to supc++ lib inclusion filter.

View File

@@ -7523,13 +7523,21 @@ PHB_SYMBOLS hb_vmRegisterSymbols( PHB_SYMB pModuleSymbols, USHORT uiSymbols,
if( fClone )
{
PHB_SYMB pSymbols = ( PHB_SYMB ) hb_xgrab( uiSymbols * sizeof( HB_SYMB ) );
memcpy( pSymbols, pModuleSymbols, uiSymbols * sizeof( HB_SYMB ) );
ULONG ulSymSize = ( ULONG ) uiSymbols * sizeof( HB_SYMB ), ulSize;
char * buffer;
ulSize = ulSymSize;
for( ui = 0; ui < uiSymbols; ui++ )
ulSize += ( ULONG ) strlen( pModuleSymbols[ ui ].szName ) + 1;
buffer = ( char * ) memcpy( hb_xgrab( ulSize ), pModuleSymbols, ulSymSize );
pModuleSymbols = ( PHB_SYMB ) buffer;
for( ui = 0; ui < uiSymbols; ui++ )
{
pSymbols[ ui ].szName = hb_strdup( pSymbols[ ui ].szName );
buffer += ulSymSize;
ulSymSize = ( ULONG ) strlen( pModuleSymbols[ ui ].szName ) + 1;
memcpy( buffer, pModuleSymbols[ ui ].szName, ulSymSize );
pModuleSymbols[ ui ].szName = buffer;
}
pModuleSymbols = pSymbols;
}
pNewSymbols = ( PHB_SYMBOLS ) hb_xgrab( sizeof( HB_SYMBOLS ) );
@@ -7725,25 +7733,10 @@ static void hb_vmReleaseLocalSymbols( void )
pDestroy = s_pSymbols;
s_pSymbols = s_pSymbols->pNext;
if( pDestroy->szModuleName )
{
hb_xfree( pDestroy->szModuleName );
}
if( pDestroy->fAllocated )
{
USHORT ui;
for( ui = 0; ui < pDestroy->uiModuleSymbols; ++ui )
{
PHB_SYMB pSymbol = pDestroy->pModuleSymbols + ui;
if( pSymbol->pDynSym && pSymbol->pDynSym->pSymbol == pSymbol )
{
pSymbol->pDynSym->pSymbol = NULL;
}
hb_xfree( ( void * ) pSymbol->szName );
}
hb_xfree( pDestroy->pModuleSymbols );
}
hb_xfree( pDestroy );
}
}