Files
harbour-core/harbour/tests/clsdata.prg
Viktor Szakats 175f05df56 2013-02-26 14:41 UTC+0100 Viktor Szakats (harbour syenar.net)
* utils/hbmk2/hbmk2.*.po
  * utils/hbmk2/hbmk2.prg
    + do not share plugin variables (hbmk[ "vars" ])
      between different plugins. It avoids potentially nasty
      issues with plugins stepping onto each other's toes.
      [INCOMPATIBLE - though it's unlikely anyone is
      affected. If you must communicate between plugins,
      use public function or variable.]
    + clarified in help that -icon might not work on all
      platforms/compilers and detailed Windows implementation
      (in particular it's disabled on bcc/bcc64 and on
      mingw it won't work when a manual .rc is specified,
      also on some (old?) msvc versions. Consult your
      C compiler's Windows resource handling limitations.)
    + clarified in help the syntax of filters
    + clarified in help that .hbp references are handled as
      sub-projects
    + clarification to command substitution macro
    + clarification to filter syntax note
    ! strict parameter checks in all public shell APIs to
      avoid RTEs inside hbmk2 due to faulty API usage by scripts

  * utils/hbmk2/examples/plug_bis.hb
    * updated according to latest plugin changes

  * include/harbour.hbx
  * include/hbapi.h
  * src/vm/debug.c
  * src/vm/hvm.c
    + added internal function hb_vmInternalsEnabled()
      to query whether potentially sensitive internals
      are allowed to be accessed by public Harbour APIs
    + added .prg level function __vmNoInternals()
      to disable potentially sensitive internals
      by default accessible via public APIs.
      Intentionally a one-way function: once disabled,
      it cannot be reenabled from .prg or .c level.
      NOTE: It will break Harbour debug functionality,
      so it'd will be useful for hbrun scripts and
      release (non-debug) builds.
    + modified internal __dbg*() functions to return
      dummy values when internals are disabled via
      __vmNoInternals() functions. While the function
      return types are kept, apps relying on their
      specific values and certain relationships between
      them might break.
    ; NOTE: In the future, some more internals might
      be protected by this setting (f.e. low-level
      object and class functions and some API from
      hbdebug lib)
    ; Please review

  * tests/debugtst.prg
    ! fixed to compile warning-free without lowering
      warning level
    ! fixed to run RTE-free with internals disabled

  * bin/3rdpatch.hb
  * bin/commit.hb
  * config/postinst.hb
  * contrib/make.hb
  * contrib/hbtest/hbtest.ch
  * src/debug/*.prg
  * src/rtl/tclass.prg
  * utils/hbmk2/examples/plug_bis.hb
  * utils/hbmk2/examples/plug_tpl.hb
    * use short form #pragmas (the ones identical
      to Harbour options)
    ; NOTE: Except -l which works reversed compared
      to cmdline -l option. TOFIX? (I tried and failed)

  * src/rtl/hbi18n2.prg
  * contrib/xhb/tfile.prg
    * use F_ERROR instead of -1 literal

  * contrib/xhb/xhbtedit.prg
    ! replaced dirty xhb extension with std SubStr() call
      Reported by Tony Quick
      [pls report such bugs on Harbour devl list]

  * contrib/hbodbc/todbc.prg
    ! Don't continue ::Open() when SQLExecDir() have error
      Fix from xhb via Vicente Guerra, with cleanups.

  * tests/multifnc/multifnc.hbp
    + added comment
    + support for watcom

  * tests/multifnc/t1.prg
    ! missing file ending EOL

  * tests/*.prg
  * extras/gtwvw/tests/wvwtest9.prg
    * formatting
2013-02-26 13:44:10 +00:00

115 lines
2.0 KiB
Plaintext

/*
* $Id$
*/
PROCEDURE Main()
LOCAL o := HBObject():New()
? "o:Data1 => ", o:Data1
? "o:ClassData1 => ", o:ClassData1
? "o:Data2 => ", o:Data2
? "o:ClassData2 => ", o:ClassData2
o:Test()
RETURN
FUNCTION TBaseObject()
STATIC s_oClass
IF s_oClass == NIL
s_oClass := HBClass():New( "TBaseObject" )
s_oClass:AddData( "Data1" )
s_oClass:AddClassData( "ClassData1" )
s_oClass:AddMethod( "NewBase", @NewBase() )
s_oClass:AddMethod( "Test", @Test() )
s_oClass:AddMethod( "Method1", @Method1Base() )
s_oClass:AddMethod( "Method2", @Method2Base() )
s_oClass:Create()
ENDIF
RETURN s_oClass:Instance()
STATIC FUNCTION NewBase()
LOCAL self := QSelf()
::Data1 := 1
::ClassData1 := "A"
RETURN self
STATIC FUNCTION Test()
LOCAL self := QSelf()
? "Inside ::Test()"
? "calling ::Method1()"
::Method1()
RETURN self
STATIC FUNCTION Method1Base()
LOCAL self := QSelf()
? "I am Method1 from TBaseObject"
::Method2()
RETURN self
STATIC FUNCTION Method2Base()
LOCAL self := QSelf()
? "I am Method2 from TBaseObject"
RETURN self
FUNCTION HBObject()
STATIC s_oClass
IF s_oClass == NIL
s_oClass := HBClass():New( "HBObject", "TBaseObject" )
s_oClass:AddData( "Data2" )
s_oClass:AddClassData( "ClassData2" )
s_oClass:AddMethod( "New", @New() )
s_oClass:AddMethod( "Method1", @Method1() )
s_oClass:AddMethod( "Method2", @Method2() )
s_oClass:Create()
ENDIF
RETURN s_oClass:Instance()
STATIC FUNCTION New()
LOCAL self := QSelf()
::TBaseObject:NewBase()
::Data1 := 1
::ClassData1 := "A"
::Data2 := 2
// ClassData2 override ClassData1
::ClassData2 := "B"
RETURN self
STATIC FUNCTION Method1()
LOCAL self := QSelf()
? "I am Method1 from HBObject"
::TBaseObject:Method1()
RETURN self
STATIC FUNCTION Method2()
LOCAL self := QSelf()
? "I am Method2 from HBObject"
RETURN self