From 08ea5c514c20ec5cb53495ed4057a24b46429fba Mon Sep 17 00:00:00 2001 From: Antonio Linares Date: Wed, 3 Nov 1999 06:28:03 +0000 Subject: [PATCH] *** empty log message *** --- harbour/source/rtl/classes.c | 25 ++++++------------------- harbour/source/vm/hvm.c | 9 ++++----- 2 files changed, 10 insertions(+), 24 deletions(-) diff --git a/harbour/source/rtl/classes.c b/harbour/source/rtl/classes.c index 1a411b7c50..51b18d23a7 100644 --- a/harbour/source/rtl/classes.c +++ b/harbour/source/rtl/classes.c @@ -628,7 +628,8 @@ HARBOUR HB___CLSINST( void ) PMETHOD pMeth = pClass->pMethods; /* Initialize DATA */ hb_arrayNew( &hb_stack.Return, pClass->uiDatas ); - hb_stack.Return.item.asArray.value->uiClass = uiClass; + hb_stack.Return.item.asArray.value->uiClass = uiClass; + hb_stack.Return.item.asArray.value->uiPrevCls = NULL; for( uiAt = 0; uiAt < uiLimit; uiAt++, pMeth++ ) { @@ -1145,27 +1146,14 @@ static HARBOUR hb___msgGetData( void ) */ static HARBOUR hb___msgSuper( void ) { - PHB_ITEM pObject = hb_stack.pBase + 1; - PHB_ITEM pSuper = ( PHB_ITEM ) hb_xgrab( sizeof( HB_ITEM ) ); - PHB_BASEARRAY pNewBase = ( PHB_BASEARRAY ) hb_xgrab( sizeof( HB_BASEARRAY ) ); - USHORT uiSuperCls = s_pMethod->uiData; /* Get handle of superclass */ + PHB_ITEM pObject = hb_stack.pBase + 1; - memcpy( pSuper, pObject, sizeof( HB_ITEM ) ); /* Allocate new structures */ - memcpy( pNewBase, pObject->item.asArray.value, sizeof( HB_BASEARRAY ) ); + pObject->item.asArray.value->uiPrevCls = pObject->item.asArray.value->uiClass; + pObject->item.asArray.value->uiClass = s_pMethod->uiData; - pSuper->item.asArray.value = pNewBase; - - pNewBase->uiPrevCls = pNewBase->uiClass; - pNewBase->uiPrevHolders = pNewBase->uiHolders; - pNewBase->uiClass = uiSuperCls; - pNewBase->uiHolders = 1; /* New item is returned */ - pNewBase->bSuperCast = TRUE; /* Do not dispose pItems !! */ - /* A bit dirty, but KISS. */ - hb_itemCopy( &hb_stack.Return, pSuper ); - hb_itemRelease( pSuper ); + hb_itemCopy( &hb_stack.Return, pObject ); } - /* * __msgSetClsData() * @@ -1212,4 +1200,3 @@ static HARBOUR hb___msgVirtual( void ) /* hb_ret(); */ /* NOTE: It's safe to comment this out */ ; } - diff --git a/harbour/source/vm/hvm.c b/harbour/source/vm/hvm.c index 031033d4ca..a0c1cf1df3 100644 --- a/harbour/source/vm/hvm.c +++ b/harbour/source/vm/hvm.c @@ -2342,11 +2342,10 @@ void hb_vmDo( USHORT uiParams ) if( IS_OBJECT( pSelf ) ) /* Object passed */ { pSelfBase = pSelf->item.asArray.value; - if( pSelfBase->bSuperCast ) + if( pSelfBase->uiPrevCls ) /* Is is a Super cast ? */ { - pSelfBase->bSuperCast = FALSE; - pSelfBase->uiClass = pSelfBase->uiPrevCls; - pSelfBase->uiHolders = pSelfBase->uiPrevHolders; + pSelfBase->uiClass = pSelfBase->uiPrevCls; + pSelfBase->uiPrevCls = NULL; } } } @@ -3713,4 +3712,4 @@ HARBOUR HB___VMVARSGET( void ) { hb_itemReturn( s_aStatics.item.asArray.value->pItems + hb_stack.iStatics + hb_parni( 1 ) - 1 ); -} +} \ No newline at end of file