diff --git a/harbour/ChangeLog b/harbour/ChangeLog index b52a137ab1..8054521ef6 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -1,3 +1,7 @@ +19990515-19:40 CET Eddie Runia + * source/rtl/classes.c, source/rtl/arrays.c + oClone added (actually : aClone can handle both :-) + 19990515-16:20 CET Eddie Runia * source/compiler/harbour.y Jump optimalization caused return to fail. Optimalization removed. diff --git a/harbour/source/rtl/arrays.c b/harbour/source/rtl/arrays.c index 3febc64bba..fcd4c48f2f 100644 --- a/harbour/source/rtl/arrays.c +++ b/harbour/source/rtl/arrays.c @@ -535,6 +535,7 @@ PITEM hb_arrayClone( PITEM pSrcArray ) pSrcBaseArray = ( PBASEARRAY )pSrcArray->value.pBaseArray; pDstBaseArray = ( PBASEARRAY )pDstArray->value.pBaseArray; + pDstBaseArray->wClass = pSrcBaseArray->wClass; for ( ulCount = 0; ulCount < ulSrcLen; ulCount ++ ) { diff --git a/harbour/source/rtl/classes.c b/harbour/source/rtl/classes.c index 8715802ac5..cf353b56a0 100644 --- a/harbour/source/rtl/classes.c +++ b/harbour/source/rtl/classes.c @@ -11,6 +11,7 @@ void PushSymbol( PSYMBOL ); void Message( PSYMBOL ); void Do( WORD wParams ); void hb_arrayDel( PITEM, ULONG ); +PITEM hb_arrayClone( PITEM ); #define MET_METHOD 0 #define MET_DATA 1 @@ -637,3 +638,16 @@ HARBOUR CLASSDEL() /* Delete message (only for INLINE and METHOD) */ } } +HARBOUR OCLONE( void ) +{ + PITEM pSrcObject = _param( 1, IT_OBJECT ); + + if ( pSrcObject ) + { + PITEM pDstObject = hb_arrayClone( pSrcObject ); + ItemCopy( &stack.Return, pDstObject ); /* OClone() returns the new object */ + } + else + _ret(); +} +