2013-01-10 23:25 UTC+0100 Przemyslaw Czerpak (druzus/at/poczta.onet.pl)

* harbour/include/hbapicls.h
  * harbour/src/vm/classes.c
    + added new internal C function:
         void hb_objCloneTo( PHB_ITEM pDest, PHB_ITEM pSource,
                             PHB_NESTED_CLONED pClonedList );
      it copies object or clone it if class overloaded clone operation.
    ; TODO: add support for user defined class clone operation

  * harbour/include/hbapiitm.h
  * harbour/src/vm/itemapi.c
    * changed returned type of hb_itemCloneTo() to void

  * harbour/src/vm/itemapi.c
    * use hb_objCloneTo() in hb_itemClone*() functions.

  * harbour/src/vm/arrays.c
    * use hb_objCloneTo() in array/hash clone code.

  * harbour/src/vm/arrayshb.c
    ! fixed return values in AEVAL() and ACOPY() when array
      is passed by reference.

  * harbour/src/rtl/tclass.prg
  * harbour/src/vm/classes.c
    * declare :SUPER and :__SUPER messages as non virtual ones.
      Now ::SUPER and ::__SUPER messages executed in object method
      returns casting to 1-st super object of the class in which
      executed method was defined.

  * harbour/include/hbclass.ch
    * removed xtranslations for SUPER(): - this workaround for
      missing non virtual messages in some Clipper OOP implementations
      was breaking valid code which tried to use real :SUPER message
      and made SUPER reserved word, i.e. it was not possible to create
      code like:
         LOCAL super := ::parent2
         ? super:v1, super:v2
      Now this hack is not longer necessary and :SUPER is non virtual
      massage in Harbour.
      INCOMPATIBLE: If someone has some code like:
         SUPER():MSG()
         SUPER( PARENT ):MSG()
      then please change it to:
         ::SUPER:MSG()
         ::PARENT:MSG()

  * harbour/contrib/hbmysql/tmysql.prg
  * harbour/contrib/hbmysql/tsqlbrw.prg
    ! fixed to use ::super() instead of super()

  * harbour/src/rdd/usrrdd/rdds/arrayrdd.prg
    + added GOCOLD() method - this method is necessary for WAs
      passed to HB_DBDETACH()

  * harbour/doc/xhb-diff.txt
    * small update

  * harbour/contrib/*/*.hbx
    * regenerated
This commit is contained in:
Przemyslaw Czerpak
2013-01-10 22:27:11 +00:00
parent af3c47f30e
commit 1cc8e1e88c
70 changed files with 201 additions and 108 deletions

View File

@@ -10,6 +10,67 @@
* Change, ! Fix, % Optimization, + Addition, - Removal, ; Comment
*/
2013-01-10 23:25 UTC+0100 Przemyslaw Czerpak (druzus/at/poczta.onet.pl)
* harbour/include/hbapicls.h
* harbour/src/vm/classes.c
+ added new internal C function:
void hb_objCloneTo( PHB_ITEM pDest, PHB_ITEM pSource,
PHB_NESTED_CLONED pClonedList );
it copies object or clone it if class overloaded clone operation.
; TODO: add support for user defined class clone operation
* harbour/include/hbapiitm.h
* harbour/src/vm/itemapi.c
* changed returned type of hb_itemCloneTo() to void
* harbour/src/vm/itemapi.c
* use hb_objCloneTo() in hb_itemClone*() functions.
* harbour/src/vm/arrays.c
* use hb_objCloneTo() in array/hash clone code.
* harbour/src/vm/arrayshb.c
! fixed return values in AEVAL() and ACOPY() when array
is passed by reference.
* harbour/src/rtl/tclass.prg
* harbour/src/vm/classes.c
* declare :SUPER and :__SUPER messages as non virtual ones.
Now ::SUPER and ::__SUPER messages executed in object method
returns casting to 1-st super object of the class in which
executed method was defined.
* harbour/include/hbclass.ch
* removed xtranslations for SUPER(): - this workaround for
missing non virtual messages in some Clipper OOP implementations
was breaking valid code which tried to use real :SUPER message
and made SUPER reserved word, i.e. it was not possible to create
code like:
LOCAL super := ::parent2
? super:v1, super:v2
Now this hack is not longer necessary and :SUPER is non virtual
massage in Harbour.
INCOMPATIBLE: If someone has some code like:
SUPER():MSG()
SUPER( PARENT ):MSG()
then please change it to:
::SUPER:MSG()
::PARENT:MSG()
* harbour/contrib/hbmysql/tmysql.prg
* harbour/contrib/hbmysql/tsqlbrw.prg
! fixed to use ::super() instead of super()
* harbour/src/rdd/usrrdd/rdds/arrayrdd.prg
+ added GOCOLD() method - this method is necessary for WAs
passed to HB_DBDETACH()
* harbour/doc/xhb-diff.txt
* small update
* harbour/contrib/*/*.hbx
* regenerated
2013-01-10 16:21 UTC+0100 Viktor Szakats (harbour syenar.net)
* contrib/hbmysql/tmysql.prg
! commented code converted to #if 0 block

View File

@@ -6,7 +6,7 @@
*/
/* --------------------------------------------------------------------
* WARNING: Automatically generated code below. DO NOT EDIT!
* WARNING: Automatically generated code below. DO NOT EDIT! (except casing)
* Regenerate using hbmk2 '-hbx=' option.
*/

View File

@@ -6,7 +6,7 @@
*/
/* --------------------------------------------------------------------
* WARNING: Automatically generated code below. DO NOT EDIT!
* WARNING: Automatically generated code below. DO NOT EDIT! (except casing)
* Regenerate using hbmk2 '-hbx=' option.
*/

View File

@@ -6,7 +6,7 @@
*/
/* --------------------------------------------------------------------
* WARNING: Automatically generated code below. DO NOT EDIT!
* WARNING: Automatically generated code below. DO NOT EDIT! (except casing)
* Regenerate using hbmk2 '-hbx=' option.
*/

View File

@@ -6,7 +6,7 @@
*/
/* --------------------------------------------------------------------
* WARNING: Automatically generated code below. DO NOT EDIT!
* WARNING: Automatically generated code below. DO NOT EDIT! (except casing)
* Regenerate using hbmk2 '-hbx=' option.
*/

View File

@@ -6,7 +6,7 @@
*/
/* --------------------------------------------------------------------
* WARNING: Automatically generated code below. DO NOT EDIT!
* WARNING: Automatically generated code below. DO NOT EDIT! (except casing)
* Regenerate using hbmk2 '-hbx=' option.
*/

View File

@@ -6,7 +6,7 @@
*/
/* --------------------------------------------------------------------
* WARNING: Automatically generated code below. DO NOT EDIT!
* WARNING: Automatically generated code below. DO NOT EDIT! (except casing)
* Regenerate using hbmk2 '-hbx=' option.
*/

View File

@@ -6,7 +6,7 @@
*/
/* --------------------------------------------------------------------
* WARNING: Automatically generated code below. DO NOT EDIT!
* WARNING: Automatically generated code below. DO NOT EDIT! (except casing)
* Regenerate using hbmk2 '-hbx=' option.
*/

View File

@@ -6,7 +6,7 @@
*/
/* --------------------------------------------------------------------
* WARNING: Automatically generated code below. DO NOT EDIT!
* WARNING: Automatically generated code below. DO NOT EDIT! (except casing)
* Regenerate using hbmk2 '-hbx=' option.
*/

View File

@@ -8,7 +8,7 @@
// HB_FUNC_EXCLUDE HB_GT_*
/* --------------------------------------------------------------------
* WARNING: Automatically generated code below. DO NOT EDIT!
* WARNING: Automatically generated code below. DO NOT EDIT! (except casing)
* Regenerate using hbmk2 '-hbx=' option.
*/

View File

@@ -6,7 +6,7 @@
*/
/* --------------------------------------------------------------------
* WARNING: Automatically generated code below. DO NOT EDIT!
* WARNING: Automatically generated code below. DO NOT EDIT! (except casing)
* Regenerate using hbmk2 '-hbx=' option.
*/

View File

@@ -6,7 +6,7 @@
*/
/* --------------------------------------------------------------------
* WARNING: Automatically generated code below. DO NOT EDIT!
* WARNING: Automatically generated code below. DO NOT EDIT! (except casing)
* Regenerate using hbmk2 '-hbx=' option.
*/

View File

@@ -6,7 +6,7 @@
*/
/* --------------------------------------------------------------------
* WARNING: Automatically generated code below. DO NOT EDIT!
* WARNING: Automatically generated code below. DO NOT EDIT! (except casing)
* Regenerate using hbmk2 '-hbx=' option.
*/

View File

@@ -6,7 +6,7 @@
*/
/* --------------------------------------------------------------------
* WARNING: Automatically generated code below. DO NOT EDIT!
* WARNING: Automatically generated code below. DO NOT EDIT! (except casing)
* Regenerate using hbmk2 '-hbx=' option.
*/

View File

@@ -6,7 +6,7 @@
*/
/* --------------------------------------------------------------------
* WARNING: Automatically generated code below. DO NOT EDIT!
* WARNING: Automatically generated code below. DO NOT EDIT! (except casing)
* Regenerate using hbmk2 '-hbx=' option.
*/

View File

@@ -6,7 +6,7 @@
*/
/* --------------------------------------------------------------------
* WARNING: Automatically generated code below. DO NOT EDIT!
* WARNING: Automatically generated code below. DO NOT EDIT! (except casing)
* Regenerate using hbmk2 '-hbx=' option.
*/

View File

@@ -6,7 +6,7 @@
*/
/* --------------------------------------------------------------------
* WARNING: Automatically generated code below. DO NOT EDIT!
* WARNING: Automatically generated code below. DO NOT EDIT! (except casing)
* Regenerate using hbmk2 '-hbx=' option.
*/

View File

@@ -6,7 +6,7 @@
*/
/* --------------------------------------------------------------------
* WARNING: Automatically generated code below. DO NOT EDIT!
* WARNING: Automatically generated code below. DO NOT EDIT! (except casing)
* Regenerate using hbmk2 '-hbx=' option.
*/

View File

@@ -6,7 +6,7 @@
*/
/* --------------------------------------------------------------------
* WARNING: Automatically generated code below. DO NOT EDIT!
* WARNING: Automatically generated code below. DO NOT EDIT! (except casing)
* Regenerate using hbmk2 '-hbx=' option.
*/

View File

@@ -6,7 +6,7 @@
*/
/* --------------------------------------------------------------------
* WARNING: Automatically generated code below. DO NOT EDIT!
* WARNING: Automatically generated code below. DO NOT EDIT! (except casing)
* Regenerate using hbmk2 '-hbx=' option.
*/

View File

@@ -6,7 +6,7 @@
*/
/* --------------------------------------------------------------------
* WARNING: Automatically generated code below. DO NOT EDIT!
* WARNING: Automatically generated code below. DO NOT EDIT! (except casing)
* Regenerate using hbmk2 '-hbx=' option.
*/

View File

@@ -6,7 +6,7 @@
*/
/* --------------------------------------------------------------------
* WARNING: Automatically generated code below. DO NOT EDIT!
* WARNING: Automatically generated code below. DO NOT EDIT! (except casing)
* Regenerate using hbmk2 '-hbx=' option.
*/

View File

@@ -6,7 +6,7 @@
*/
/* --------------------------------------------------------------------
* WARNING: Automatically generated code below. DO NOT EDIT!
* WARNING: Automatically generated code below. DO NOT EDIT! (except casing)
* Regenerate using hbmk2 '-hbx=' option.
*/

View File

@@ -6,7 +6,7 @@
*/
/* --------------------------------------------------------------------
* WARNING: Automatically generated code below. DO NOT EDIT!
* WARNING: Automatically generated code below. DO NOT EDIT! (except casing)
* Regenerate using hbmk2 '-hbx=' option.
*/

View File

@@ -6,7 +6,7 @@
*/
/* --------------------------------------------------------------------
* WARNING: Automatically generated code below. DO NOT EDIT!
* WARNING: Automatically generated code below. DO NOT EDIT! (except casing)
* Regenerate using hbmk2 '-hbx=' option.
*/

View File

@@ -6,7 +6,7 @@
*/
/* --------------------------------------------------------------------
* WARNING: Automatically generated code below. DO NOT EDIT!
* WARNING: Automatically generated code below. DO NOT EDIT! (except casing)
* Regenerate using hbmk2 '-hbx=' option.
*/

View File

@@ -6,7 +6,7 @@
*/
/* --------------------------------------------------------------------
* WARNING: Automatically generated code below. DO NOT EDIT!
* WARNING: Automatically generated code below. DO NOT EDIT! (except casing)
* Regenerate using hbmk2 '-hbx=' option.
*/

View File

@@ -6,7 +6,7 @@
*/
/* --------------------------------------------------------------------
* WARNING: Automatically generated code below. DO NOT EDIT!
* WARNING: Automatically generated code below. DO NOT EDIT! (except casing)
* Regenerate using hbmk2 '-hbx=' option.
*/

View File

@@ -6,7 +6,7 @@
*/
/* --------------------------------------------------------------------
* WARNING: Automatically generated code below. DO NOT EDIT!
* WARNING: Automatically generated code below. DO NOT EDIT! (except casing)
* Regenerate using hbmk2 '-hbx=' option.
*/

View File

@@ -6,7 +6,7 @@
*/
/* --------------------------------------------------------------------
* WARNING: Automatically generated code below. DO NOT EDIT!
* WARNING: Automatically generated code below. DO NOT EDIT! (except casing)
* Regenerate using hbmk2 '-hbx=' option.
*/

View File

@@ -726,7 +726,7 @@ METHOD New( nSocket, cQuery, cTableName ) CLASS TMySQLTable
LOCAL i
super:New( nSocket, AllTrim( cQuery ) )
::super:New( nSocket, AllTrim( cQuery ) )
::cTable := Lower( cTableName )
::aOldValue := {}
@@ -740,7 +740,7 @@ METHOD New( nSocket, cQuery, cTableName ) CLASS TMySQLTable
METHOD GetRow( nRow ) CLASS TMySQLTable
LOCAL oRow := super:GetRow( nRow ), i
LOCAL oRow := ::super:GetRow( nRow ), i
IF oRow != NIL
oRow:cTable := ::cTable
@@ -759,7 +759,7 @@ METHOD Skip( nRow ) CLASS TMySQLTable
LOCAL i
super:skip( nRow )
::super:skip( nRow )
FOR i := 1 TO ::nNumFields
::aOldValue[ i ] := ::FieldGet( i )

View File

@@ -93,7 +93,7 @@ ENDCLASS
METHOD New( cHeading, bBlock, oBrw ) CLASS TBColumnSQL
super:New( cHeading, bBlock )
::super:New( cHeading, bBlock )
::oBrw := oBrw
RETURN Self
@@ -163,7 +163,7 @@ METHOD New( nTop, nLeft, nBottom, nRight, oServer, oQuery, cTable ) CLASS TBrows
HB_SYMBOL_UNUSED( oServer )
HB_SYMBOL_UNUSED( cTable )
super:New( nTop, nLeft, nBottom, nRight )
::super:New( nTop, nLeft, nBottom, nRight )
::oQuery := oQuery

View File

@@ -6,7 +6,7 @@
*/
/* --------------------------------------------------------------------
* WARNING: Automatically generated code below. DO NOT EDIT!
* WARNING: Automatically generated code below. DO NOT EDIT! (except casing)
* Regenerate using hbmk2 '-hbx=' option.
*/

View File

@@ -6,7 +6,7 @@
*/
/* --------------------------------------------------------------------
* WARNING: Automatically generated code below. DO NOT EDIT!
* WARNING: Automatically generated code below. DO NOT EDIT! (except casing)
* Regenerate using hbmk2 '-hbx=' option.
*/

View File

@@ -6,7 +6,7 @@
*/
/* --------------------------------------------------------------------
* WARNING: Automatically generated code below. DO NOT EDIT!
* WARNING: Automatically generated code below. DO NOT EDIT! (except casing)
* Regenerate using hbmk2 '-hbx=' option.
*/

View File

@@ -6,7 +6,7 @@
*/
/* --------------------------------------------------------------------
* WARNING: Automatically generated code below. DO NOT EDIT!
* WARNING: Automatically generated code below. DO NOT EDIT! (except casing)
* Regenerate using hbmk2 '-hbx=' option.
*/

View File

@@ -6,7 +6,7 @@
*/
/* --------------------------------------------------------------------
* WARNING: Automatically generated code below. DO NOT EDIT!
* WARNING: Automatically generated code below. DO NOT EDIT! (except casing)
* Regenerate using hbmk2 '-hbx=' option.
*/

View File

@@ -6,7 +6,7 @@
*/
/* --------------------------------------------------------------------
* WARNING: Automatically generated code below. DO NOT EDIT!
* WARNING: Automatically generated code below. DO NOT EDIT! (except casing)
* Regenerate using hbmk2 '-hbx=' option.
*/

View File

@@ -6,7 +6,7 @@
*/
/* --------------------------------------------------------------------
* WARNING: Automatically generated code below. DO NOT EDIT!
* WARNING: Automatically generated code below. DO NOT EDIT! (except casing)
* Regenerate using hbmk2 '-hbx=' option.
*/

View File

@@ -6,7 +6,7 @@
*/
/* --------------------------------------------------------------------
* WARNING: Automatically generated code below. DO NOT EDIT!
* WARNING: Automatically generated code below. DO NOT EDIT! (except casing)
* Regenerate using hbmk2 '-hbx=' option.
*/

View File

@@ -6,7 +6,7 @@
*/
/* --------------------------------------------------------------------
* WARNING: Automatically generated code below. DO NOT EDIT!
* WARNING: Automatically generated code below. DO NOT EDIT! (except casing)
* Regenerate using hbmk2 '-hbx=' option.
*/

View File

@@ -6,7 +6,7 @@
*/
/* --------------------------------------------------------------------
* WARNING: Automatically generated code below. DO NOT EDIT!
* WARNING: Automatically generated code below. DO NOT EDIT! (except casing)
* Regenerate using hbmk2 '-hbx=' option.
*/

View File

@@ -6,7 +6,7 @@
*/
/* --------------------------------------------------------------------
* WARNING: Automatically generated code below. DO NOT EDIT!
* WARNING: Automatically generated code below. DO NOT EDIT! (except casing)
* Regenerate using hbmk2 '-hbx=' option.
*/

View File

@@ -6,7 +6,7 @@
*/
/* --------------------------------------------------------------------
* WARNING: Automatically generated code below. DO NOT EDIT!
* WARNING: Automatically generated code below. DO NOT EDIT! (except casing)
* Regenerate using hbmk2 '-hbx=' option.
*/

View File

@@ -6,7 +6,7 @@
*/
/* --------------------------------------------------------------------
* WARNING: Automatically generated code below. DO NOT EDIT!
* WARNING: Automatically generated code below. DO NOT EDIT! (except casing)
* Regenerate using hbmk2 '-hbx=' option.
*/

View File

@@ -6,7 +6,7 @@
*/
/* --------------------------------------------------------------------
* WARNING: Automatically generated code below. DO NOT EDIT!
* WARNING: Automatically generated code below. DO NOT EDIT! (except casing)
* Regenerate using hbmk2 '-hbx=' option.
*/

View File

@@ -8,7 +8,7 @@
// HB_FUNC_EXCLUDE win_oleServerInit
/* --------------------------------------------------------------------
* WARNING: Automatically generated code below. DO NOT EDIT!
* WARNING: Automatically generated code below. DO NOT EDIT! (except casing)
* Regenerate using hbmk2 '-hbx=' option.
*/

View File

@@ -6,7 +6,7 @@
*/
/* --------------------------------------------------------------------
* WARNING: Automatically generated code below. DO NOT EDIT!
* WARNING: Automatically generated code below. DO NOT EDIT! (except casing)
* Regenerate using hbmk2 '-hbx=' option.
*/

View File

@@ -6,7 +6,7 @@
*/
/* --------------------------------------------------------------------
* WARNING: Automatically generated code below. DO NOT EDIT!
* WARNING: Automatically generated code below. DO NOT EDIT! (except casing)
* Regenerate using hbmk2 '-hbx=' option.
*/

View File

@@ -6,7 +6,7 @@
*/
/* --------------------------------------------------------------------
* WARNING: Automatically generated code below. DO NOT EDIT!
* WARNING: Automatically generated code below. DO NOT EDIT! (except casing)
* Regenerate using hbmk2 '-hbx=' option.
*/

View File

@@ -6,7 +6,7 @@
*/
/* --------------------------------------------------------------------
* WARNING: Automatically generated code below. DO NOT EDIT!
* WARNING: Automatically generated code below. DO NOT EDIT! (except casing)
* Regenerate using hbmk2 '-hbx=' option.
*/

View File

@@ -6,7 +6,7 @@
*/
/* --------------------------------------------------------------------
* WARNING: Automatically generated code below. DO NOT EDIT!
* WARNING: Automatically generated code below. DO NOT EDIT! (except casing)
* Regenerate using hbmk2 '-hbx=' option.
*/

View File

@@ -6,7 +6,7 @@
*/
/* --------------------------------------------------------------------
* WARNING: Automatically generated code below. DO NOT EDIT!
* WARNING: Automatically generated code below. DO NOT EDIT! (except casing)
* Regenerate using hbmk2 '-hbx=' option.
*/

View File

@@ -6,7 +6,7 @@
*/
/* --------------------------------------------------------------------
* WARNING: Automatically generated code below. DO NOT EDIT!
* WARNING: Automatically generated code below. DO NOT EDIT! (except casing)
* Regenerate using hbmk2 '-hbx=' option.
*/

View File

@@ -6,7 +6,7 @@
*/
/* --------------------------------------------------------------------
* WARNING: Automatically generated code below. DO NOT EDIT!
* WARNING: Automatically generated code below. DO NOT EDIT! (except casing)
* Regenerate using hbmk2 '-hbx=' option.
*/

View File

@@ -6,7 +6,7 @@
*/
/* --------------------------------------------------------------------
* WARNING: Automatically generated code below. DO NOT EDIT!
* WARNING: Automatically generated code below. DO NOT EDIT! (except casing)
* Regenerate using hbmk2 '-hbx=' option.
*/

View File

@@ -6,7 +6,7 @@
*/
/* --------------------------------------------------------------------
* WARNING: Automatically generated code below. DO NOT EDIT!
* WARNING: Automatically generated code below. DO NOT EDIT! (except casing)
* Regenerate using hbmk2 '-hbx=' option.
*/

View File

@@ -6,7 +6,7 @@
*/
/* --------------------------------------------------------------------
* WARNING: Automatically generated code below. DO NOT EDIT!
* WARNING: Automatically generated code below. DO NOT EDIT! (except casing)
* Regenerate using hbmk2 '-hbx=' option.
*/

View File

@@ -6,7 +6,7 @@
*/
/* --------------------------------------------------------------------
* WARNING: Automatically generated code below. DO NOT EDIT!
* WARNING: Automatically generated code below. DO NOT EDIT! (except casing)
* Regenerate using hbmk2 '-hbx=' option.
*/

View File

@@ -6,7 +6,7 @@
*/
/* --------------------------------------------------------------------
* WARNING: Automatically generated code below. DO NOT EDIT!
* WARNING: Automatically generated code below. DO NOT EDIT! (except casing)
* Regenerate using hbmk2 '-hbx=' option.
*/

View File

@@ -2084,15 +2084,19 @@ In xHarbour by default work areas are global to the application and there
is no protection mechanism against concurrent access so if two threads try
to access the same work area in the same time they can corrupt internal
RDD data. It means that for safe concurrent WA access in xHarbour user have
to create his own protection mechanism (some different version of LOCAL
WORKAREA / UNLOCK WORKAREA commands using some other synchronization
methods available in xHarbour, i.e. mutexes).
to create his own protection mechanism (different version of LOCK WORKAREA/
UNLOCK WORKAREA commands using some other synchronization methods available
in xHarbour, i.e. mutexes).
Later support for thread local work areas was added to xHarbour but
without any mechanism which allows to move work area from one thread to
another. This can be controlled by global SET (SETs are global in xHarbour)
_SET_WORKAREAS_SHARED
Setting it to .T. disables global work areas and switches to thread local
ones.
without any mechanism which allows to move work area from one thread
to another. This can be controlled by global SET:
SET( _SET_WORKAREAS_SHARED, <lOnOff> )
or commands:
SET WORKAREAS SHARED => SET( _SET_WORKAREAS_SHARED, .T. )
SET WORKAREAS PRIVATE => SET( _SET_WORKAREAS_SHARED, .F. )
(SETs are global not thread local in xHarbour MT model)
Setting _SET_WORKAREAS_SHARED to .F. disables global work areas and
switches to thread local ones.
There is no technical or mathematical reason to keep such strange
implementation because it does not give any new functionality to
programmer in comparison to xBase++ and Harbour but allows to easy

View File

@@ -102,6 +102,7 @@ extern HB_BOOL hb_objGetVarRef( PHB_ITEM pObject, PHB_SYMB pMessage, PHB_STAC
extern HB_BOOL hb_objHasOperator( PHB_ITEM pObject, HB_USHORT uiOperator );
extern HB_BOOL hb_objOperatorCall( HB_USHORT uiOperator, PHB_ITEM pResult, PHB_ITEM pObject, PHB_ITEM pMsgArg1, PHB_ITEM pMsgArg2 );
extern void hb_objDestructorCall( PHB_ITEM pObject );
extern void hb_objCloneTo( PHB_ITEM pDest, PHB_ITEM pSource, PHB_NESTED_CLONED pClonedList );
#ifndef HB_NO_PROFILER
/* profiler for object management */

View File

@@ -174,7 +174,7 @@ extern HB_EXPORT PHB_ITEM hb_itemUnShareString( PHB_ITEM pItem ); /* un-shar
extern HB_EXPORT PHB_ITEM hb_itemReSizeString( PHB_ITEM pItem, HB_SIZE nSize ); /* Resize string buffer of given string item - the pItem have to be valid unrefed string item */
extern HB_EXPORT HB_BOOL hb_itemGetWriteCL( PHB_ITEM pItem, char ** pszValue, HB_SIZE * pnLen );
extern HB_EXPORT PHB_ITEM hb_itemClone ( PHB_ITEM pItem ); /* clone the given item */
extern HB_EXPORT PHB_ITEM hb_itemCloneTo ( PHB_ITEM pDest, PHB_ITEM pSource ); /* clone the given item */
extern HB_EXPORT void hb_itemCloneTo ( PHB_ITEM pDest, PHB_ITEM pSource ); /* clone the given item */
extern HB_EXPORT char * hb_itemStr ( PHB_ITEM pNumber, PHB_ITEM pWidth, PHB_ITEM pDec ); /* convert a number to a string */
extern HB_EXPORT char * hb_itemString ( PHB_ITEM pItem, HB_SIZE * nLen, HB_BOOL * bFreeReq ); /* Convert any scalar to a string */
extern HB_EXPORT HB_BOOL hb_itemStrBuf ( char *szResult, PHB_ITEM pNumber, int iSize, int iDec ); /* convert a number to a string */

View File

@@ -216,7 +216,7 @@ DECLARE HBClass ;
::realclass:<MessageName>([ <MsgParams>])
/* Indirect super casting translation */
#xtranslate :Super( <SuperClass> ): => :<SuperClass>:
#xtranslate :Super( <!SuperClass!> ): => :<SuperClass>:
#xtranslate __HB_CLS_OPT(<a>,<b>) => <a>
@@ -260,12 +260,7 @@ DECLARE HBClass ;
nScope := HB_OO_CLSTP_EXPORTED ; HB_SYMBOL_UNUSED( nScope ) ;;
oClass := iif( <.metaClass.>, <(metaClass)>, HBClass():new( <(ClassName)>, __HB_CLS_PAR( [ @<SuperClass1>() ] [ , @<SuperClassN>() ] ), @__HB_CLS_OPT([__HB_CLS_ASID(<FuncName>),] <ClassName>)() [, <.modulfriend.> ] ) ) ;;
#undef _CLASS_NAME_ ; #define _CLASS_NAME_ <ClassName> ;;
#undef _CLASS_MODE_ ; #define _CLASS_MODE_ _CLASS_DECLARATION_ ;
[ ; #translate Super( <SuperClassN> ): => ::<SuperClassN>: ] ;
[ ; #translate Super( <SuperClass1> ): => ::<SuperClass1>: ] ;
[ ; #translate Super(): => ::<SuperClass1>: ] ;
[ ; #translate Super: => ::<SuperClass1>: ] ;
[ ; #translate ::Super : => ::<SuperClass1>: ]
#undef _CLASS_MODE_ ; #define _CLASS_MODE_ _CLASS_DECLARATION_
#xcommand ENDCLASS [<lck: LOCK, LOCKED>] => ;
oClass:Create() ; [<-lck-> __clsLock( oClass:hClass ) ] ;;

View File

@@ -1109,6 +1109,12 @@ STATIC FUNCTION AR_ZAP( nWA )
RETURN HB_SUCCESS
STATIC FUNCTION AR_GOCOLD( nWA )
HB_SYMBOL_UNUSED( nWA )
RETURN HB_SUCCESS
STATIC FUNCTION AR_FOUND( nWa, lFound )
HB_TRACE( HB_TR_DEBUG, hb_StrFormat( "nWA = %1$d, lFound = %2$s", nWa, hb_ValToExp( lFound ) ) )
@@ -1473,6 +1479,7 @@ FUNCTION ARRAYRDD_GETFUNCTABLE( pFuncCount, pFuncTable, pSuperTable, nRddID, pSu
aMyFunc[ UR_PUTVALUE ] := ( @AR_PUTVALUE() )
aMyFunc[ UR_PACK ] := ( @AR_PACK() )
aMyFunc[ UR_ZAP ] := ( @AR_ZAP() )
aMyFunc[ UR_GOCOLD ] := ( @AR_GOCOLD() )
aMyFunc[ UR_FOUND ] := ( @AR_FOUND() )
aMyFunc[ UR_SEEK ] := ( @AR_SEEK() )
aMyFunc[ UR_INFO ] := ( @AR_INFO() )

View File

@@ -233,8 +233,8 @@ STATIC PROCEDURE Create( /* MetaClass */ )
IF ! Empty( ahSuper )
IF ahSuper[ 1 ] != 0
__clsAddMsg( hClass, "SUPER" , 0, HB_OO_MSG_SUPER, ahSuper[ 1 ], HB_OO_CLSTP_EXPORTED )
__clsAddMsg( hClass, "__SUPER", 0, HB_OO_MSG_SUPER, ahSuper[ 1 ], HB_OO_CLSTP_EXPORTED )
__clsAddMsg( hClass, "SUPER" , 0, HB_OO_MSG_SUPER, ahSuper[ 1 ], HB_OO_CLSTP_EXPORTED + HB_OO_CLSTP_NONVIRTUAL )
__clsAddMsg( hClass, "__SUPER", 0, HB_OO_MSG_SUPER, ahSuper[ 1 ], HB_OO_CLSTP_EXPORTED + HB_OO_CLSTP_NONVIRTUAL )
ENDIF
ENDIF
__clsAddMsg( hClass, "REALCLASS", 0, HB_OO_MSG_REALCLASS, 0, HB_OO_CLSTP_EXPORTED )

View File

@@ -1465,7 +1465,7 @@ static void hb_arrayCloneBody( PHB_BASEARRAY pSrcBaseArray, PHB_BASEARRAY pDstBa
void hb_cloneNested( PHB_ITEM pDstItem, PHB_ITEM pSrcItem, PHB_NESTED_CLONED pClonedList )
{
/* Clipper clones nested array ONLY if NOT an Object!!! */
if( HB_IS_ARRAY( pSrcItem ) && pSrcItem->item.asArray.value->uiClass == 0 )
if( HB_IS_ARRAY( pSrcItem ) )
{
PHB_NESTED_CLONED pCloned = pClonedList;
PHB_BASEARRAY pBaseArray = pSrcItem->item.asArray.value;
@@ -1480,6 +1480,8 @@ void hb_cloneNested( PHB_ITEM pDstItem, PHB_ITEM pSrcItem, PHB_NESTED_CLONED pCl
if( pCloned )
hb_itemCopy( pDstItem, pCloned->pDest );
else if( pSrcItem->item.asArray.value->uiClass != 0 )
hb_objCloneTo( pDstItem, pSrcItem, pClonedList );
else
{
hb_arrayNew( pDstItem, pBaseArray->nLen );

View File

@@ -374,7 +374,7 @@ HB_FUNC( AEVAL )
HB_ISNUM( 3 ) ? &nStart : NULL,
HB_ISNUM( 4 ) ? &nCount : NULL );
hb_itemReturn( hb_stackItemFromBase( 1 ) ); /* AEval() returns the array itself */
hb_itemReturn( pArray ); /* AEval() returns the array itself */
}
else
hb_errRT_BASE( EG_ARG, 2017, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );
@@ -401,7 +401,7 @@ HB_FUNC( ACOPY )
HB_ISNUM( 5 ) ? &nTarget : NULL );
}
hb_itemReturn( hb_stackItemFromBase( 2 ) ); /* ACopy() returns the target array */
hb_itemReturn( pDstArray ); /* ACopy() returns the target array */
}
}

View File

@@ -169,7 +169,7 @@ typedef struct
HB_TYPE itemType; /* Type of item in restricted assignment */
HB_USHORT uiSprClass; /* Originalclass'handel (super or current class'handel if not herited). */ /*Added by RAC&JF*/
HB_USHORT uiScope; /* Scoping value */
HB_USHORT uiData; /* Item position for instance data, class data and shared data (Harbour like, begin from 1) or delegated message index object */
HB_USHORT uiData; /* Item position for instance data, class data and shared data (Harbour like, begin from 1), supercast class or delegated message index object */
HB_USHORT uiOffset; /* position in pInitData for class datas (from 1) or offset to instance area in inherited instance data and supercast messages (from 0) */
HB_USHORT uiPrevCls;
HB_USHORT uiPrevMth;
@@ -1431,8 +1431,7 @@ HB_SIZE hb_clsGetVarIndex( HB_USHORT uiClass, PHB_DYNS pVarSym )
if( pFuncSym == &s___msgSync || pFuncSym == &s___msgSyncClass )
pFuncSym = pMethod->pRealSym;
if( pFuncSym->value.pFunPtr == HB_FUNCNAME( msgSetData ) ||
pFuncSym->value.pFunPtr == HB_FUNCNAME( msgGetData ) )
if( pFuncSym == &s___msgSetData || pFuncSym == &s___msgGetData )
return pMethod->uiData + pMethod->uiOffset;
}
}
@@ -2126,7 +2125,7 @@ HB_BOOL hb_objGetVarRef( PHB_ITEM pObject, PHB_SYMB pMessage,
if( pExecSym )
{
HB_STACK_TLS_PRELOAD
if( pExecSym->value.pFunPtr == HB_FUNCNAME( msgSetData ) )
if( pExecSym == &s___msgSetData )
{
HB_USHORT uiObjClass = pObject->item.asArray.value->uiClass;
PCLASS pClass = s_pClasses[ pStack->uiClass ];
@@ -2145,7 +2144,7 @@ HB_BOOL hb_objGetVarRef( PHB_ITEM pObject, PHB_SYMB pMessage,
return hb_arrayGetItemRef( pObject, nIndex, hb_stackReturnItem() );
}
else if( pExecSym->value.pFunPtr == HB_FUNCNAME( msgSetClsData ) )
else if( pExecSym == &s___msgSetClsData )
{
PCLASS pClass = s_pClasses[ pStack->uiClass ];
PMETHOD pMethod = pClass->pMethods + pStack->uiMethod;
@@ -2153,7 +2152,7 @@ HB_BOOL hb_objGetVarRef( PHB_ITEM pObject, PHB_SYMB pMessage,
return hb_arrayGetItemRef( pClass->pClassDatas, pMethod->uiData,
hb_stackReturnItem() );
}
else if( pExecSym->value.pFunPtr == HB_FUNCNAME( msgSetShrData ) )
else if( pExecSym == &s___msgSetShrData )
{
PCLASS pClass = s_pClasses[ pStack->uiClass ];
PMETHOD pMethod = pClass->pMethods + pStack->uiMethod;
@@ -2161,7 +2160,7 @@ HB_BOOL hb_objGetVarRef( PHB_ITEM pObject, PHB_SYMB pMessage,
return hb_arrayGetItemRef( s_pClasses[ pMethod->uiSprClass ]->pSharedDatas,
pMethod->uiData, hb_stackReturnItem() );
}
else if( pExecSym->value.pFunPtr == HB_FUNCNAME( msgScopeErr ) )
else if( pExecSym == &s___msgScopeErr )
{
pExecSym->value.pFunPtr();
}
@@ -2214,9 +2213,9 @@ static void hb_objSupperDestructorCall( PHB_ITEM pObject, PCLASS pClass )
{
if( pMethod->pFuncSym == &s___msgSuper )
{
PCLASS pSupperClass = s_pClasses[ pMethod->uiSprClass ];
PCLASS pSupperClass = s_pClasses[ pMethod->uiData ];
if( pSupperClass->fHasDestructor && pSupperClass != pClass )
pcClasses[ pMethod->uiSprClass ] |= 1;
pcClasses[ pMethod->uiData ] |= 1;
}
else if( pMethod->pMessage == s___msgDestructor.pDynSym )
pcClasses[ pMethod->uiSprClass ] |= 2;
@@ -2426,8 +2425,7 @@ PHB_ITEM hb_objGetVarPtr( PHB_ITEM pObject, PHB_DYNS pVarMsg )
if( pFuncSym == &s___msgSync || pFuncSym == &s___msgSyncClass )
pFuncSym = pMethod->pRealSym;
if( pFuncSym->value.pFunPtr == HB_FUNCNAME( msgSetData ) ||
pFuncSym->value.pFunPtr == HB_FUNCNAME( msgGetData ) )
if( pFuncSym == &s___msgSetData || pFuncSym == &s___msgGetData )
{
HB_SIZE nIndex = pMethod->uiData + pMethod->uiOffset;
if( pObject->item.asArray.value->uiPrevCls )
@@ -2489,6 +2487,18 @@ static PHB_SYMB hb_objGetFuncSym( PHB_ITEM pItem )
return NULL;
}
/* clone object if user defined clone method or copy it */
void hb_objCloneTo( PHB_ITEM pDest, PHB_ITEM pSource, PHB_NESTED_CLONED pClonedList )
{
HB_TRACE( HB_TR_DEBUG, ( "hb_objCloneTo(%p,%p,%p)", pDest, pSource, pClonedList ) );
HB_SYMBOL_UNUSED( pClonedList );
/* TODO: add support for user defined clone operation */
hb_itemCopy( pDest, pSource );
}
/* send message which allows to set execution context for debugger */
void hb_dbg_objSendMessage( int iProcLevel, PHB_ITEM pObject, PHB_ITEM pMessage, int iParamOffset )
{
@@ -3035,7 +3045,7 @@ static HB_BOOL hb_clsAddMsg( HB_USHORT uiClass, const char * szMessage,
case HB_OO_MSG_SUPER:
pNewMeth->uiSprClass = uiSprClass; /* store the super handel */
pNewMeth->uiData = uiSprClass; /* store the super handel */
pNewMeth->uiOffset = uiIndex; /* offset to instance area */
pNewMeth->uiScope = uiScope;
pNewMeth->pFuncSym = &s___msgSuper;
@@ -3297,7 +3307,7 @@ static HB_USHORT hb_clsNew( const char * szClassName, HB_USHORT uiDatas,
if( pSprCls->pMethods[ n ].pMessage &&
pSprCls->pMethods[ n ].pFuncSym == &s___msgSuper )
{
PCLASS pCls = s_pClasses[ pSprCls->pMethods[ n ].uiSprClass ];
PCLASS pCls = s_pClasses[ pSprCls->pMethods[ n ].uiData ];
pMethod = hb_clsAllocMsg( pNewCls,
pSprCls->pMethods[ n ].pMessage );
@@ -3321,7 +3331,8 @@ static HB_USHORT hb_clsNew( const char * szClassName, HB_USHORT uiDatas,
{
pNewCls->uiMethods++;
pMethod->pMessage = pSprCls->pClassSym;
pMethod->uiSprClass = uiSuperCls;
pMethod->uiSprClass = pNewCls->uiClass;
pMethod->uiData = uiSuperCls;
pMethod->uiScope = HB_OO_CLSTP_EXPORTED;
pMethod->pFuncSym = &s___msgSuper;
pMethod->uiOffset = pNewCls->uiDatas;
@@ -3445,7 +3456,8 @@ static HB_USHORT hb_clsNew( const char * szClassName, HB_USHORT uiDatas,
{
pNewCls->uiMethods++;
pMethod->pMessage = pNewCls->pClassSym;
pMethod->uiSprClass = s_uiClasses;
pMethod->uiSprClass = pNewCls->uiClass;
pMethod->uiData = s_uiClasses;
pMethod->uiScope = HB_OO_CLSTP_EXPORTED;
pMethod->pFuncSym = &s___msgSuper;
pMethod->uiOffset = pNewCls->uiDatas;
@@ -4658,7 +4670,7 @@ HB_FUNC_STATIC( msgSuper )
PHB_STACK_STATE pStack = hb_stackBaseItem()->item.asSymbol.stackstate;
hb_clsMakeSuperObject( hb_stackReturnItem(), hb_stackSelfItem(),
s_pClasses[ pStack->uiClass ]->pMethods[ pStack->uiMethod ].uiSprClass );
s_pClasses[ pStack->uiClass ]->pMethods[ pStack->uiMethod ].uiData );
}
/*

View File

@@ -2133,27 +2133,38 @@ PHB_ITEM hb_itemClone( PHB_ITEM pItem )
HB_TRACE( HB_TR_DEBUG, ( "hb_itemClone(%p)", pItem ) );
if( HB_IS_ARRAY( pItem ) )
return hb_arrayClone( pItem );
{
if( HB_IS_OBJECT( pItem ) )
{
PHB_ITEM pResult = hb_itemNew( NULL );
hb_objCloneTo( pResult, pItem, NULL );
return pResult;
}
else
return hb_arrayClone( pItem );
}
else if( HB_IS_HASH( pItem ) )
return hb_hashClone( pItem );
else
return hb_itemNew( pItem );
}
PHB_ITEM hb_itemCloneTo( PHB_ITEM pDest, PHB_ITEM pSource )
void hb_itemCloneTo( PHB_ITEM pDest, PHB_ITEM pSource )
{
HB_TRACE( HB_TR_DEBUG, ( "hb_itemCloneTo(%p,%p)", pDest, pSource ) );
if( HB_IS_ARRAY( pSource ) )
return hb_arrayCloneTo( pDest, pSource );
{
if( HB_IS_OBJECT( pSource ) )
hb_objCloneTo( pDest, pSource, NULL );
else
hb_arrayCloneTo( pDest, pSource );
}
else if( HB_IS_HASH( pSource ) )
return hb_hashCloneTo( pDest, pSource );
hb_itemCopy( pDest, pSource );
return pDest;
hb_hashCloneTo( pDest, pSource );
else
hb_itemCopy( pDest, pSource );
}