By ref problem
This commit is contained in:
@@ -1,3 +1,12 @@
|
||||
19990523-12:20 CET Eddie Runia
|
||||
* include/types.h
|
||||
modified the IS_* to work for reference passed variables
|
||||
* source/vm/hvm.c
|
||||
Changed ->wType to IS_* if possible else added & ~IT_BYREF
|
||||
* source/rtl/strings.c
|
||||
Strings also modified
|
||||
|
||||
|
||||
19990523-11:36 CET Manuel Ruiz
|
||||
* source/rtl/files.c
|
||||
Add HAVE_POSIX_IO for Borland and GCC compilers
|
||||
|
||||
@@ -69,9 +69,9 @@ typedef HARBOUR ( * HARBOURFUNC )( void );
|
||||
#define _POSIX_PATH_MAX 255
|
||||
#endif
|
||||
|
||||
#define IS_OF_TYPE( p, t ) ( ( p )->wType == t )
|
||||
#define IS_BYREF( p ) ( ( p )->wType & IT_BYREF )
|
||||
#define IS_OF_TYPE( p, t ) ( ( ( p )->wType & ~IT_BYREF ) == t )
|
||||
#define IS_ARRAY( p ) IS_OF_TYPE( p, IT_ARRAY )
|
||||
#define IS_BYREF( p ) IS_OF_TYPE( p, IT_BYREF )
|
||||
#define IS_NIL( p ) IS_OF_TYPE( p, IT_NIL )
|
||||
#define IS_BLOCK( p ) IS_OF_TYPE( p, IT_BLOCK )
|
||||
#define IS_DATE( p ) IS_OF_TYPE( p, IT_DATE )
|
||||
|
||||
@@ -310,7 +310,7 @@ HARBOUR AT( void )
|
||||
|
||||
if( pText && pSub )
|
||||
{
|
||||
if( pText->wType == IT_STRING && pSub->wType == IT_STRING )
|
||||
if( IS_STRING( pText ) && IS_STRING( pSub ) )
|
||||
{
|
||||
_retnl( hb_strAt(pSub->value.szText, pSub->wLength, pText->value.szText, pText->wLength) );
|
||||
}
|
||||
@@ -1046,7 +1046,7 @@ char * hb_str( PITEM pNumber, PITEM pWidth, PITEM pDec )
|
||||
/* Be paranoid and use a large amount of padding */
|
||||
szResult = (char *)_xgrab( iWidth + iDec + 64 );
|
||||
|
||||
if( pNumber->wType == IT_DOUBLE || iDec != 0 )
|
||||
if( IS_DOUBLE( pNumber ) || iDec != 0 )
|
||||
{
|
||||
double dNumber = _parnd( 1 );
|
||||
if( iDec > 0 )
|
||||
@@ -1054,7 +1054,7 @@ char * hb_str( PITEM pNumber, PITEM pWidth, PITEM pDec )
|
||||
else
|
||||
iBytes = sprintf( szResult, "%*ld", iWidth, (long)dNumber );
|
||||
}
|
||||
else switch( pNumber->wType )
|
||||
else switch( pNumber->wType & ~IT_BYREF )
|
||||
{
|
||||
case IT_LONG:
|
||||
iBytes = sprintf( szResult, "%*li", iWidth, pNumber->value.lNumber );
|
||||
|
||||
@@ -1058,11 +1058,13 @@ void Instring( void )
|
||||
PITEM pItem1 = stack.pPos - 2;
|
||||
PITEM pItem2 = stack.pPos - 1;
|
||||
int iResult;
|
||||
ULONG ul;
|
||||
|
||||
if( IS_STRING( pItem1 ) && IS_STRING( pItem2 ) )
|
||||
{
|
||||
iResult = hb_strAt( pItem1->value.szText, pItem1->wLength,
|
||||
pItem2->value.szText, pItem2->wLength );
|
||||
for( iResult = 0, ul = 0; !iResult && ul < (ULONG) pItem1->wLength; ul++ )
|
||||
iResult = hb_strAt( pItem1->value.szText + ul, 1,
|
||||
pItem2->value.szText, pItem2->wLength );
|
||||
StackPop();
|
||||
StackPop();
|
||||
PushLogical( iResult == 0 ? 0 : 1 );
|
||||
@@ -1464,7 +1466,7 @@ double PopDouble( void )
|
||||
|
||||
StackPop();
|
||||
|
||||
switch( stack.pPos->wType )
|
||||
switch( stack.pPos->wType & ~IT_BYREF )
|
||||
{
|
||||
case IT_INTEGER:
|
||||
d = stack.pPos->value.iNumber;
|
||||
@@ -1535,7 +1537,7 @@ double PopNumber( void )
|
||||
|
||||
StackPop();
|
||||
|
||||
switch( pItem->wType )
|
||||
switch( pItem->wType & ~IT_BYREF )
|
||||
{
|
||||
case IT_INTEGER:
|
||||
dNumber = ( double ) pItem->value.iNumber;
|
||||
@@ -1593,9 +1595,17 @@ void PushLogical( int iTrueFalse )
|
||||
|
||||
void PushLocal( SHORT iLocal )
|
||||
{
|
||||
PITEM pLocal;
|
||||
|
||||
if( iLocal >= 0 )
|
||||
{
|
||||
/* local variable or local parameter */
|
||||
ItemCopy( stack.pPos, stack.pBase + 1 + iLocal );
|
||||
pLocal = stack.pBase + 1 + iLocal;
|
||||
if( IS_BYREF( pLocal ) )
|
||||
ItemCopy( stack.pPos, stack.pItems + pLocal->value.wItem );
|
||||
else
|
||||
ItemCopy( stack.pPos, pLocal );
|
||||
}
|
||||
else
|
||||
/* local variable referenced in a codeblock */
|
||||
ItemCopy( stack.pPos, CodeblockGetVar( stack.pBase + 1, iLocal ) );
|
||||
@@ -2039,7 +2049,7 @@ HARBOUR EMPTY()
|
||||
|
||||
if( pItem )
|
||||
{
|
||||
switch( pItem->wType )
|
||||
switch( pItem->wType & ~IT_BYREF )
|
||||
{
|
||||
case IT_ARRAY:
|
||||
_retl( ( ( PBASEARRAY ) pItem->value.pBaseArray )->ulLen == 0 );
|
||||
@@ -2091,7 +2101,7 @@ HARBOUR VALTYPE( void )
|
||||
{
|
||||
pItem = _param( 1, IT_ANY );
|
||||
|
||||
switch( pItem->wType )
|
||||
switch( pItem->wType & ~IT_BYREF )
|
||||
{
|
||||
case IT_ARRAY:
|
||||
if( ( ( PBASEARRAY ) pItem->value.pBaseArray )->wClass )
|
||||
|
||||
Reference in New Issue
Block a user