Commit Graph

130 Commits

Author SHA1 Message Date
Przemyslaw Czerpak
9aaaadbc6f 2006-09-28 00:40 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/make_rpm.sh
    * check for rpmbuild also when BUGGY_RPM is set

  * harbour/make_tgz.sh
    * removed rebuild hbpptest with shared libraries

  * harbour/include/hbapicls.h
    + added definitions for hb_clsCreate(), hb_clsAdd(), hb_clsAssociate()

  * harbour/include/hbapierr.h
  * harbour/source/rtl/errorapi.c
    + added hb_errFuncName - pseudo function name which can be used as
      operation description in new error object. It should help to simplify
      some code and fix function names when RT error is generated from C
      function which can be executed from different .prg functions.

  * harbour/include/hbclass.ch
    + added some missing Classy(y) compatible object variable type
      descriptions: Int, Integer, Block

  * harbour/source/rdd/dbfcdx/dbfcdx1.c
    ! disabled early retrieving from the cache key position and key count

  * harbour/include/hbvm.h
  * harbour/source/vm/hvm.c
    + added: void hb_vmPushEvalSym( void ) for the code which do not
      want to access any [P]HB_SYMB structures
    * changed symbol name in hb_symEval from __EVAL to EVAL and modified
      hb_symEval registration method to not register hb_vmDoBlock as global
      function. Having PHB_DYNS address for "EVAL" in hb_symEval.pDynSym
      allows to eliminate some strcmp() when we are looking for EVAL public
      symbol.
    ! fixed symbol table updating in PCODE functions for future multi module
      .hrb files

  * harbour/source/vm/proc.c
    * use hb_symEval.pDynSym instead of strcmp()

  * harbour/source/vm/arrays.c
  * harbour/source/vm/debug.c
    * minor code cleanup

  * harbour/source/rtl/tclass.prg
  * harbour/source/vm/classes.c
    % separate message hash table from methods table - it will cause farther
      reduction of allocated memory - many thanks to all people who send
      me statistics about number of used classes and symbols from their code.
    % use hb_symEval.pDynSym
    + added support for object variable type scope checking like in Class(y).
    ! fixed typo in pushing object class variables by reference
    % s_pClasses is now indexed directly by class handle
    % some other optimiztions
    ! make hidden and non virtual invisible in child classes if it overloaded
      some other non hidden method. In such case the overloaded method is used
      and can be accessed.
    ! make friend functions real method class oriented not (super)object for
      hidden messages
2006-09-27 22:39:06 +00:00
Przemyslaw Czerpak
1202be4471 2006-09-22 23:00 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/hbclass.ch
  * harbour/include/hbvm.h
  * harbour/source/rtl/tclass.prg
  * harbour/source/vm/classes.c
  * harbour/source/vm/hvm.c
    ! fixed bug in real codeblock scoping which was exploited by
      dictionary resizing
    * changed ACCESS messages to ASSIGN ones when object item
      reference is created for proper READONLY scope checking.
      The reference to object variable can be created only when
      caller has sufficient ASSIGN privileges.
    + added FRIEND CLASS and FRIEND FUNCTION support.
      It's enough to add class definition:
         FRIEND CLASS <classFunc1> [, <classFuncN> ]
      and/or:
         FRIEND FUNCTION <FuncName1> [, <FuncNameN> ]
      and all methods of given class or given function will be able
      to access private variables.
      Warning!!! Friends cannot access overloaded non virtual methods.
                 This feature is available _ONLY_ for real class members.
    + added MODULE FRIENDLY to class definition. It causes that all other
      functions and classes defined in the same .prg module will have
      friend privileges. In such way works xHarbour and there is now way
      to disable this "feature" what is IMHO bug. In Harbour programmer
      has to explicitly enable it (until he will not change / add new
      preprocessor rule and set it as default ;-)). Syntax:
         CREATE CLASS .... MODULE FRIENDLY
            ...
         END CLASS

  * harbour/source/vm/proc.c
  * harbour/source/vm/runner.c
    * updated function symbols processing

  * harbour/source/compiler/harbour.c
    * added note in hb_compOptimizeFrames() about exceeding maximum number
      of local variables (255). We should add new pcode(s) HB_P_LARGE[V]FRAME
      or generate compile time error.

  * harbour/source/vm/macro.c
    % minor optimizations
2006-09-22 21:02:17 +00:00
Przemyslaw Czerpak
7e4609cff3 2006-09-18 03:12 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/hbclass.ch
    + added MESSAGE ... INLINE ... rule

  * harbour/tests/clsccast.prg
  * harbour/tests/clsicast.prg
  * harbour/tests/clsnv.prg
  * harbour/tests/clsscast.prg
  * harbour/tests/clsscope.prg
    - removed some unnecessary definitions
2006-09-18 01:13:18 +00:00
Przemyslaw Czerpak
a35053003b 2006-09-15 04:55 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
+ harbour/doc/destruct.txt
    + added description for object destructors in Harbour

  * harbour/include/error.ch
    + added new error code EG_DESTRUCTOR

  * harbour/source/lang/msgpl852.c
  * harbour/source/lang/msgpliso.c
  * harbour/source/lang/msgplmaz.c
  * harbour/source/lang/msgplwin.c
  * harbour/source/rtl/langapi.c
    + added desription for new error code - other language modules
      have to be updated

  * harbour/include/hbapi.h
    + added hb_gcRefCheck() and cover some hb_gc* functions by
      _HB_API_INTERNAL_ macro

  * harbour/source/vm/itemapi.c
    ! fixed possible RT error generation when some exception is active

  * harbour/include/hbapicls.h
  * harbour/include/hbclass.ch
  * harbour/include/hboo.ch
  * harbour/source/rtl/tclass.prg
  * harbour/source/vm/arrays.c
  * harbour/source/vm/classes.c
    + added support for object destructors

  * harbour/source/vm/garbage.c
    + added support for object destructors
    + added logic to detect buggu .prg code which uses destructors
      see doc/destruct.txt for more info.
      It's also possible that this code will exploit some bugs
      in other code which uses GC allocated memory blocks.
2006-09-15 03:10:38 +00:00
Przemyslaw Czerpak
43d20b8eb6 2006-09-10 13:05 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/hbapi.h
  * harbour/source/vm/hvm.c
  * harbour/source/vm/codebloc.c
  * harbour/source/vm/arrays.c
    * moved static base offset from hb_struBlock structure
      to HB_CODEBLOCK structure
    + added hclass member to hb_struBlock - it will be used in
      the future for checking codeblock scope in classy so we will
      real scope checking also for messages sent from codeblocks.
    - removed supercast and superoffset members from hb_struArray
      structure.

  * harbour/include/hbclass.ch
    * added class(y) like
         @:<MessageName>([<MsgParams,...>])
      send operator. It's not exactly the same as in class(y) where
      this operator is hardcoded to executing function directly,
      needs method name instead of message name and is linked statically.
      In Harbour this operator uses message name so can be used also for
      instance variables and make dynamic casting to the class from which
      current method is inherited. In short words sending messages to @:
      instead of :: causes that they work like non-virtual messages in
      C++ mode.
      If you do not use the same method body in different classes
      then you can also use explicitly self casting:
         ::<myclass>:<msgname>[(...)]
      and it will be a little bit faster

  * harbour/include/hboo.ch
    + added: HB_OO_MSG_ASSIGN, HB_OO_MSG_ACCESS,
             HB_OO_MSG_CLSASSIGN, HB_OO_MSG_CLSACCESS
      They should be used insted of HB_OO_MSG_DATA and HB_OO_MSG_CLSDATA
      This resolves problems with name conflicts when we were detecting
      type of message (ACCESS/ASSIGN) by checking the first character
      in message name. F.e. now it's possible to create exported instance
      variable called __WithObject and it will be used in all WITH OBJECT
      statement instead of the base object value. It's simple and effective
      WITH OBJECT overloading.
      I kept backward compatibility for HB_OO_MSG_DATA and HB_OO_MSG_CLSDATA
      but I strongly suggest to update code to use new constants.
    + added HB_OO_MSG_REALCLASS

  * harbour/source/rtl/objfunc.prg
  * harbour/source/rtl/tobject.prg
  * harbour/source/rtl/tclass.prg
    * use HB_OO_MSG_[CLS]{ASSIGN,ACCESS} instead of HB_OO_MSG_[CLS]DATA

  * harbour/source/rtl/tclass.prg
    + added REALCLASS message to creted classes - it's used for @: operator

  * harbour/source/vm/classes.c
    * updated for above modifications
    * calculate instance area offset in supercasting dynamically - it
      will allow to eliminate multiple instance area allocating when
      in the inheritance tree the same class exists more then once and
      also quite easy add support for non-virtual messages.
    ! fixed GPF in __CLSINSTSUPER() class function generate HVM exception
    % do not inherit unaccessible inline blocks
    * some other minor optimization, fixes and code cleanups

  * harbour/source/rdd/usrrdd/usrrdd.c
    ! fixed HB_TRACE message

  * harbour/source/rtl/errorapi.c
    ! generate internal error if ErrorNew() function does not return an object
2006-09-10 11:16:43 +00:00
Antonio Linares
9216acd612 Added a previous #undef _HB_CLS_FUNCNAME for multiple classes definitions on the same PRG 2004-07-27 18:37:21 +00:00
Antonio Linares
7a05c3be1e Added optional clause FUNCTION to class definition, based on Class(y) implementation 2004-07-27 09:02:37 +00:00
Antonio Carlos Pantaglione
ef5bcf5cee Added support for PROCEDURE <ProcName> CLASS <ClassName> syntax 2003-07-07 14:17:45 +00:00
Jean-Francois Lefebvre
249912aaea 2002-04-02 21:12 UTC+0200 JF Lefebvre (Mafact) <jfl@mafact.com> 2002-04-02 19:16:42 +00:00
Jean-Francois Lefebvre
7620d41c8b 2001-11-28 22:45 GMT+1 JFL (mafact) <jfl@mafact.com> 2001-11-28 22:19:14 +00:00
Jean-Francois Lefebvre
891690234d 2001-11-18 22:15 GMT+1 JFL (mafact) <jfl@mafact.com> 2001-11-18 21:20:09 +00:00
Viktor Szakats
869067ee70 2001-09-10 23:53 UTC+0100 Viktor Szakats <viktor.szakats@syenar.hu> 2001-09-10 22:04:29 +00:00
Jean-Francois Lefebvre
20c316b350 2001-09-04 22:50 GMT +1 JFL (mafact) <jfl@mafact.com> 2001-09-04 21:24:58 +00:00
Antonio Linares
06f0d34cb0 Added new clause PERSISTENT or PROPERTY to both datas and methods 2001-09-02 12:27:53 +00:00
Jean-Francois Lefebvre
3ef4c3c4f9 2001-07-17 00:25 UTC+1 JFL (mafact) <jfl@mafact.com> 2001-07-16 22:23:35 +00:00
Jean-Francois Lefebvre
5e42eeb160 2001-07-10 00:15 UTC+1 JFL (mafact) <jfl@mafact.com> 2001-07-09 22:40:33 +00:00
Ron Pinkas
c57f209fda 2001-06-22 07:30 UTC-0800 Ron Pinkas <ron@profit-master.com>
* source/pp/ppcore.c
     + Added logic for new Idenitifier Match Marker <!AnyId!> which will only match Identifiers.
     + Added static BOOL IsIdentifier( char *szProspect )

   * include/hbclass.ch
     ! Changed <name> to <!name!> in 3 VO OO compatibility rules, where regular match marker was TOO generic.
     ! Reinstated default #define HB_CLS_VO
2001-06-22 14:31:24 +00:00
Ron Pinkas
6a4f162322 2001-06-22 06:10 UTC-0800 Ron Pinkas <ron@profit-master.com>
* include/hbclass.ch
     ! Un-Commented out 3 rules used for VO OO and #undefed HB_CLS_VO instead.
2001-06-22 13:12:54 +00:00
Ron Pinkas
e49056d419 2001-06-21 22:20 UTC-0800 Ron Pinkas <ron@profit-master.com>
* contrib/dot/pp.prg
     * Added support fort '|' as a continuation token (as in Clipper).

   * include/hbclass.ch
     - Commented out 3 rules used for VO OO compatibility that are TOO generic, and match unexpected input.

   * source/pp/ppcore.c
     - Recommented out test for continuation token at the end of an Expression in isExpres() (after correcting cause for prior reinstatment).
2001-06-22 05:22:42 +00:00
Jean-Francois Lefebvre
c8398e01a3 2001-06-15 23:35 UTC+1 JFL (mafact) <jfl@mafact.com> 2001-06-15 21:37:14 +00:00
Ron Pinkas
59346e6bf8 2001-05-23 21:15 UTC-0800 Ron Pinkas <ron@profit-master.com>
* include/hbclass.ch
     ! Corrected few minor typos.

   * source/compiler/harbour.slx
   * source/macro/macro.slx
     - Commented few unused lines.

   * contrib/dot/pp.prg
     % Rewrote NextToken() and NextExp().
     + Added NextIdentifier()
     ! Found that Clipper PP is not processing tokens read by NextToken() and NextExp() so removed recursive support,
       and changed logic in ProcessLine() to linear process:
         #defines against all valid Identifiers - Expansion forces a resacn from top.
         #[x]translates against all tokens - Expansion forces a resacn from top of #defines.
         #[x]command agains the first token - Expansion forces a resacn from top of #defines.
     ! Corrected and refined many aspects of Interpreter mode.
     + Added ExecuteMethod() and support for OO syntax.
     + Added support for -I<includepaths...> command line switch.

   * contrib/dot/rp_run.ch
     + Added support for OO syntax.

   * contrib/dot/pp.txt
     * Updated documentation.
2001-05-24 04:52:09 +00:00
Jean-Francois Lefebvre
df0469310e 2001-05-21 21:35 UTC+1 JFL (mafact) <jfl@mafact.com> 2001-05-21 19:48:54 +00:00
Jean-Francois Lefebvre
bcf30692fc 2001-05-20 23:15 UTC+1 JFL (mafact) <jfl@mafact.com> 2001-05-20 21:19:12 +00:00
Ron Pinkas
77b2ea6255 2001-05-16 09:00 UTC-0800 Ron Pinkas <ron@profit-master.com>
* include/hbclass.ch
     * Refined #error messages for OO compile time inegrity checks, as per input from Antonio and Dave.
2001-05-16 16:06:58 +00:00
Ron Pinkas
94596e571d 2001-05-13 09:40 UTC-0800 Ron Pinkas <ron@profit-master.com>
* include/hbclass.ch
     % Removed many redundant rules (recently added for OO integrity checks).

     /* Found the PP problem that stopped me from implementing this optimized form before.
        It seems the PP has a problem with "[" follwing a an identifier without a space prefix like:
        #command TEST[([<param,...>])]

        It seems to work OK like this:
        #command TEST [([<param,...>])]
     */
2001-05-13 16:44:24 +00:00
Ron Pinkas
0a4e3d34ff 2001-05-11 14:15 UTC-0800 Ron Pinkas <ron@profit-master.com>
* include/hbclass.ch
     + Added syntax declaration support for METHOD ... OPERATOR ...
2001-05-11 21:16:22 +00:00
Ron Pinkas
49c45dda27 2001-05-11 09:00 UTC-0800 Ron Pinkas <ron@profit-master.com>
* include/hbclass.ch
     ! Fixed declaration support for OnError() METHODS
     ! Fixed support for Methods having space prefixing the "( ... )" in the method implementation.
     + Refined #error messages to report the Class Name .

   * source/pp/ppcore.c
     * Removed recently added but not required support of #define expansion in #error directive.
2001-05-11 16:06:37 +00:00
Ron Pinkas
48e605cbee 2001-05-10 22:10 UTC-0800 Ron Pinkas <ron@profit-master.com>
* source/rtl/tclass.prg
     + Added logic to dispose of posibble "(...)" suffix to Method Name in AddInline()
2001-05-11 05:08:59 +00:00
Ron Pinkas
00edd906cf 2001-05-10 15:30 UTC-0800 Ron Pinkas <ron@profit-master.com>
* include/hbclass.ch
     + Added logic for NO Checking of OO Syntax (#ifdef NO_OO_ERR) - Use /dNO_OO_ERR to disable OO Syntax Checking.

   * source/pp/ppcore.c
     * Temporarily disabled support of #define expansion in #error directive.
2001-05-11 00:32:43 +00:00
Ron Pinkas
88d6d4ea34 2001-05-10 14:40 UTC-0800 Ron Pinkas <ron@profit-master.com> 2001-05-10 22:05:54 +00:00
Jean-Francois Lefebvre
82c577cfe2 2001-05-09 22:10 UTC+1 JFL (mafact) <jfl@mafact.com> 2001-05-09 20:11:44 +00:00
Ron Pinkas
ac58f869ba removed 1 more redundant rule 2001-05-08 21:58:34 +00:00
Ron Pinkas
3f91829caf 2001-05-08 14:50 UTC-0800 Ron Pinkas <ron@profit-master.com>
* include/hbclass.ch
     % Removed numerous redundant rules.
     + Added logic to detect and raise #error on implementation of NON Declared method.

   * source/rtl/tclass.prg
     + Added logic to dispose of posibble "(...)" suffix to Method Name in AddVirtual(), AddMethod(), and AddClsMethod().
2001-05-08 21:50:09 +00:00
Ron Pinkas
196044b21f 2001-05-07 11:40 UTC-0800 Ron Pinkas <ron@profit-master.com>
* include/hbclass.ch
     ! Added missing parameter to declaration of AddMultiData()

   * source/compiler/harbour.c
     ! Corrected broken Linked-List links in hb_compDeclaredInit()

   * source/compiler/hbpcode.c
     * Minor correction declared parameters checking.

   * source/vm/hvm.c
     + Added complete call stack display to hb_vmRequestCancel()
       /* Cancelling will now show the complete call stack, rather than the not very helpful just current procedure. */
2001-05-07 18:45:55 +00:00
Ron Pinkas
e9fda3ebb9 2001-05-04 17:10 UTC-0800 Ron Pinkas <ron@profit-master.com>
* contrib/dot/pp.prg
   * contrib/dot/rp_run.ch
     ! Few corrections to Pre Processor, and Interpreter.

   * include/hbclass.ch
     + Added support for METHOD implementations without requiring the CLASS Clause.
     + Added support for METHOD implementations without requiring the "()" if no parameters needed.
2001-05-05 00:12:14 +00:00
David G. Holm
0e07837322 See ChangeLog entry 2001-04-12 15:00 UTC-0400 David G. Holm <dholm@jsd-llc.com> 2001-04-12 18:56:30 +00:00
Antonio Linares
5f748b1566 minor fix on line 172 2001-03-01 14:09:42 +00:00
Jean-Francois Lefebvre
c5b537afaa 2001-28-02 23:41 GMT+1 JFL (Mafact) <jfl@mafact.com> 2001-02-28 22:45:51 +00:00
Jean-Francois Lefebvre
77a9b26ade 2001-01-18 00:18 GMT+1 JFL (Mafact) <jfl@mafact.com> 2001-01-17 23:20:57 +00:00
Jean-Francois Lefebvre
a929635f89 2000-12-02 01:13 UTC+0100 jfl (mafact) <jfl@mafact.com> 2000-12-02 00:16:11 +00:00
Jean-Francois Lefebvre
4a0aa45b5f 2000-11-29 23:30 UTC+0100 jfl (mafact) <jfl@mafact.com> 2000-11-29 22:32:56 +00:00
Ron Pinkas
f83f7d5134 2000-10-19 19:40 UTC+0800 Ron Pinkas <ron@profit-master.com>
* contrib/dot/pp.prg
     ! Added logic to support multi-word stoppers needed by multi-word restricted list, like
      [ <lClick: ON CLICK, ON LEFT CLICK> <uLClick> ]
      /* Only 1 known error remains in processing of fwh/samples/fwbrow.prg */

   * include/hbclass.ch
     * Temprarily removed \ preceding < of not existing match markers, in nested # directive in result.
       /* Need to be readded once PP is fixed. */
2000-10-20 02:41:53 +00:00
Ron Pinkas
b0277b2fbc 2000-10-18 01:30 UTC+0800 Ron Pinkas <ron@profit-master.com>
* contrib/dot/pp.prg
      ! More corrections and refinments in pre-processing
      * Improved handling of command line parameters (no longer requires -P, -CCH doesn't require -U)
      ! Corrected handling of file extension.

    * include/hbclass.ch
      * Corrected <MethodName> to \<MethodName> when result marker not a match marker.
      * Corrected <params,...> to <param> (result marker used match marker format).
2000-10-18 08:29:28 +00:00
Jean-Francois Lefebvre
3ce6cc25d2 2000-10-17 21:15 UTC+0200 JFL (mafact) <jfl@mafact.com> 2000-10-17 19:08:46 +00:00
Jean-Francois Lefebvre
5901d1d3c8 2000-10-09 22:15 UTC+0200 JFL (mafact) <jfl@mafact.com> 2000-10-09 20:10:32 +00:00
Jean-Francois Lefebvre
905df3feae 2000-10-03 23:45 UTC+0100 JFL <jfl@mafact.com> 2000-10-03 21:42:24 +00:00
Ron Pinkas
cb52798e45 2000-09-23 10:00 UTC+0800 Ron Pinkas <ron@profit-master.com>
* include/hbclass.ch
     * Changed AS ... from ALL CAPS to Capitalized, to avoid conflict with FWH #defines, for those not using modified DLL.CH
2000-09-23 16:56:36 +00:00
Jean-Francois Lefebvre
97f459c7d3 2000-09-20 00:52 UTC+0200 JFL (mafact) <jfl@mafact.com> 2000-09-19 22:57:06 +00:00
Ron Pinkas
b1658bda6d 2000-09-07 00:10 UTC+0800 Ron Pinkas <ron@profit-master.com>
* include/hbcomp.h
   * source/compiler/harbour.c
     + Added: char hb_comp_cCastType

   * source/compiler/harbour.y
     ! Optimized AsType
     + Added: support for type casting like: Var := FunCal() AS ... and, return Var AS ...
     /* Todo: add support for Array[n] := ... AS ..., and oVar:Data := ... AS ... */

   * source/compiler/hbpcode.c
     + Added type casting support to:
       HB_P_POPLOCAL
       HB_P_POPLOCALNEAR
       HB_P_POPMEMVAR
       HB_P_POPSTATIC
       HB_P_RETVALUE

   * include/hbclass.ch
     + Added type casting to resolve Strong Type warnings:
       return s_oClass:Instance() AS CLASS _CLASS_NAME_
       local Self AS CLASS <ClassName> := QSelf() AS CLASS <ClassName>

   /* Note: Strong Type code, and Class code, should compile with upto -w4, without [invalid] Strong Type warnings. */
2000-09-07 07:31:31 +00:00
Ron Pinkas
c201844c39 2000-09-06 12:40 UTC+0800 Ron Pinkas <ron@profit-master.com>
* source/compiler/harbour.l
     + Added AS CHAR[ACTER] for compatibility with FW (FW can't use #translate AS CHAR => AS STRING, because FW also uses AS CHAR
       in DLL calls where AS CHAR referes to *native* char type).
     ! Correted AS ... to allow multiple space/tab, and support abbreviations.

   * source/compiler/simplex.c
     + Added KEYWORD_ACTION() and WORD_ACTION() macros.

   * source/macro/macro.slx
     ! Optimized numerous HB_*_ID to a single HB_IDENTIFIER.

   * source/compiler/harbour.slx
     + Added AS CHAR[ACTER] for compatibility with FW (FW can't use #translate AS CHAR => AS STRING, because FW also uses AS CHAR
       in DLL calls where AS CHAR referes to *native* char type.
     ! Optimized numerous HB_*_ID to a single HB_IDENTIFIER.

   * include/hbclass.ch
     * Changed _<AssignName> to <AssignName> in HB_MEMBER directives.
     + Added AS CLASS <ClassName> to LOCAL Self := QSelf()

   * tests/testdecl.prg
     + Added code to demonstrate missing support for class memeber RT type protection (AS ...)
2000-09-06 19:53:10 +00:00