* harbour/include/hbcompdf.h
* harbour/src/vm/macro.c
% changed HB_PCODE_INFO structure to eliminate one memory allocation
in macro compiler
* harbour/include/hbapi.h
* harbour/include/hbvm.h
* harbour/src/vm/codebloc.c
* harbour/src/vm/itemapi.c
* harbour/src/vm/hvm.c
* changed second parameter in hb_codeblockGet*() function to 'int'
* merged codeblock execution context setting into one function
hb_vmDoBlock() and removed hb_codeblockEvaluate()
+ added new internal function hb_vmEval()
* harbour/src/vm/arrays.c
% use hb_vmEval()
* harbour/src/macro/macrolex.c
* added missing const to maro text declaration
* harbour/tests/speedtst.prg
! fixed to work with CLIP and xHarbour after we changed
SECONDSCPU() to HB_SECONDSCPU() - all these compilers and FlagShip
have SECONDSCPU() function
* include/hbsetup.ch
* src/common/hbverdsp.c
- Deleted HB_COMPAT_FLAGSHIP, HB_COMPAT_FOXPRO.
* include/hbextern.ch
* src/rtl/seconds.c
+ Added HB_SECONDSCPU()
(native Harbour version of FlagShip specific SECONDSCPU())
* tests/memtst.prg
* tests/speedold.prg
* tests/speedtst.prg
* tests/vidtest.prg
* Changed to use HB_SECONDSCPU().
+ Added translation from SECONDSCPU() to HB_SECONDSCPU() when
built for FlagShip (where applicable).
* include/hbextern.ch
* src/rtl/Makefile
- src/rtl/strpeek.c
- src/rtl/secondfs.c
* contrib/Makefile
+ contrib/hbfship
+ contrib/hbfship/Makefile
+ contrib/hbfship/hbfship.hbc
+ contrib/hbfship/secondfs.c
+ contrib/hbfship/strpeek.c
- Moved FlagShip specific function from core to new hbfship lib.
* Changed SECONDSCPU() to be just a wrapper over core HB_SECONDSCPU().
; INCOMPATIBLE: If you used SECONDSCPU() function, change it to
HB_SECONDSCPU(), or add hbfship to your lib list.
If you used STRPEEK() or STRPOKE() functions,
add hbfship to your lib list.
* utils/hbmk2/examples/contribf.hbc
+ Added hbfship.
* harbour/src/vm/garbage.c
! fixed hb_gcGripDrop() to work well with unlocked items and
items freed by GC
* harbour/tests/speedtst.prg
! typo in comment
* harbour/include/hbsetup.h
+ added HB_RESTRICT macro which can be used in some declarations
to reach better code optimization
* harbour/include/hbclass.ch
+ added support for xbase++ compatible method declaration by:
METHOD <methodName1> [ , <methodNameN> ]
* harbour/source/rtl/tthreadx.prg
* redirect parameters passed to ::new() method to ::init() method
as emulation for class object new method
+ added basic support for ::setInterval in xbasee++ THREAD class
* harbour/tests/speedtst.prg
! removed unused variable cDir
* contrib/xhb/Makefile
+ contrib/xhb/bkgtsks.c
+ Added background tasks functions. My only current goal
was to make it compile under Harbour, plus did some
optimizations along the way.
(borrowed from xhb, work of Francesco Saverio Giudice)
; TODO: Adapt to Harbour: MT mode, Set() replacement,
attach it to VM possibly without modifying
the VM itself.
* source/rtl/mlcfunc.c
+ Reenabled for default builds the parameter extension
in memo functions (now guarded with HB_C52_STRICT).
This breaks our effort to not introduce such extensions,
but since was no better idea I've made an exception,
but I personally still don't like it and this practice
stays forbidden.
Talking about the last parameter of these functions:
MEMOLINE(), MLCOUNT(), MLPOS(), MLCTOPOS(), MPOSTOLC()
* source/codepage/cphr437.c
* source/codepage/cphr852.c
* source/codepage/cphrwin.c
* Fixed wrongly ordered accented chars.
* Fixed missing accented chars in Windows CP.
; Submitted by Vladimir Miholic on sf.net.
* contrib/xhb/xhb.h
+ Added hb_seconds() compatibility macro.
* tests/speedtst.prg
+ Added SET DATE ANSI and SET CENTURY ON.
* tests/Makefile
+ tests/brwpos.prg
+ Added TBrowse() :rowPos test submitted by Xavi to the list.
* utils/hbmk2/hbmk2.hbp
* utils/hbrun/hbrun.hbp
% Minor opt to prev.
* tests/rto_tb.prg
+ Added hb_SToD() compatibility function to make it link
with xhb.
+ Added forced define of HB_COMPAT_C53 in xhb mode, but
commented because it makes it RTE.
* INSTALL
! Term changed to be consistent with rest of doc.
* include/hbapi.h
! Typo in comment.
* tests/speedtst.prg
! Fixed missing hb_progname() for non-Harbour compilers.
* include/hbextern.ch
+ Added time related new functions.
* utils/hbmk2/hbmk2.prg
+ Added -runflag: option to pass flags to target executable.
+ Started -inc (incremental link) support. It's very early
stage, don't expect it to work yet and please don't report
any problems with this feature yet.
* source/vm/asort.c
! Fixed to return Clipper compatible results when non-logical
non-numeric value is returned from ASORT() codeblock.
* utils/hbtest/rt_array.prg
* Cleaned ASORT() tests when sorting block returns constant value.
Now Clipper results aren't bent anymore, instead I've added
different expected results for Harbour and Clipper. The
difference is due to different sorting algorithms used,
here the point is to get similar *pattern* for different
invalid values.
* source/rtl/philes.c
% HB_FGETDATETIME(): Removed double call to hb_stortdt().
* contrib/hbqt/tests/hbqt.hbp
* Removed extra line at EOL.
* contrib/gtqtc/tests/hbqt.hbp
! Removed environment dependent 'libspath=' line.
Please don't add such path to Harbour SVN, since these
can differ from system to system and is also non-portable.
The correct name of the directive is: 'libpaths='.
* contrib/gtqtc/Makefile
% Removed double SVN ID.
This file needs to be updated according to hbqt latest
Makefile portability changes.
* contrib/rddads/ads1.c
* Minor formatting.
* tests/bnch_win.bat
* tests/speedtst.prg
+ Added --stdout option to restore old feature to redirect output
to a file. Needed for bnch_win.bat.
+ In normal mode output will be saved in a file with the same name
of the executable with .txt extension. Makes it easier to make
side-by-side tests.
! Fixed SVN EOL.
* harbour/tests/speedtst.prg
* redirect output to file using SET ALTERNATE ... instead of stdout()
* harbour/contrib/hbole/olecore.c
* updated to compile with C and C++ OLE interface.
Please make some tests with different compilers.
* harbour/tests/speedtst.prg
* simplified xHarbour MT test - use mutexes as internal thread IDs
as workarounds for race conditions in xHarbour .prg MT API.
* harbour/include/hbclass.ch
+ added support for xBase++ method code declaration by
METHOD <clasName>:<methodName>[ ( <parameters,...> ) ]
f.e.:
METHOD TBrowse:Configure( nMode )
* harbour/source/rtl/tthreadx.prg
* harbour/source/rtl/thfuncx.prg
! fixed 0 timeout parameter in some xBase++ compatible functions
In xBase++ timeout 0 means wait forever
* harbour/tests/speedtst.prg
* update to compile with MT support using xBase++ MT .prg API.
I tested it only using Harbour by compiling this code with
-D__XPP__ macro and it works using only xBase++ MT .prg API
we are emulating.
Please make some tests with real xBase++ compiler.
* harbour/tests/speedtst.prg
+ added new tests of dynamic code blocks performance
* modified to compile by __XPP__ and __CLIP__ - now for single
thread only
* harbour/source/common/expropt1.c
* harbour/source/common/expropt2.c
! fixed wrongly modified expression during optimization for
( <numConst> / 0.0 )
* cleaned bDec/bWidth updating in compile time optimizations
* harbour/tests/speedtst.prg
! fixed possible race condition in initialization
+ added set workarea private for xHarbour builds - thanks to Phil
* harbour/doc/cmpopt.txt
* small cleanup
* harbour/include/hbvmpub.h
* harbour/source/vm/hvm.c
% some optimizations mostly for MT mode or compilers which do
not support function autoinline optimization
* harbour/include/hbsetup.h
* temporary disabled noreturn function attributes - we have some
code which puts references to some functions after hb_errInternal()
call to force link bindings which is fully optimized if hb_errInternal
is declared with noreturn attribute so we cannot use it as long as we
will not clean them.
* harbour/tests/speedtst.prg
* build default xHarbour binaries without support.
xHarbour needs separated version for MT and ST mode
because standard MT functions are not available in
ST libraries.
* harbour/source/vm/runner.c
* harbour/source/vm/codebloc.c
* harbour/source/vm/itemapi.c
* minor casting modification
* harbour/tests/speedtst.prg
* added workaround for timeout parameter not working in xHb Subscribe()
when 3-rd parameter is passed
* harbour/tests/speedtst.prg
* marked T054 as memory tests
* harbour/source/vm/hvm.c
* harbour/source/vm/thread.c
* added hb_threadOnce( @<onceControl> [, <bAction> ] ) -> <lFirstCall>
This function allow to execute some code only once. It's usefull in
MT environment for initialization.
<onceControl> is variable which holds the execution status and have
to be initialized to NIL. In most of cases it will be simple static
variable in user code.
<bAction> is optional codeblock which is executed only once (on 1-st
call with given <onceControl>)
* harbour/source/rtl/filesys.c
! do not make any file name conversions in hb_fsNameConv() if HVM stack
is not allocated
* harbour/source/rtl/gtcrs/gtcrs.c
* casting
* harbour/tests/speedtst.prg
+ added support for --scale switch - it enables special mode
which compare scalability, f.e.:
./speedtst --thread=4 --scale
executes each test loop 4 times by single thread then
by 4 simultaneous threads, counts total real times in both
cases and presents them with the scale factor.
Please note that exactly the same loop tests are executed
simultaneously so this test should well show all places which
are not well scalable.
This test allows me to locate yet another memory variable written by
each thread on each function call just like uiPolls in main HVM loop.
It's s_bDebugging which is not used in MT mode because we do not have
any MT debugger yet but is was effectively killing the scalability
in my hardware.
If possible I would like to see some Windows results from multi CPU
machine with --scale parameter, f.e.:
speedtst --thread=8 --scale > speedtst.log
Please make some tests.
* harbour/source/vm/hvm.c
% do not assign s_bDebugging in hb_vmDo()/hb_vmSend() when debugger
is not linked
* harbour/source/vm/garbage.c
% enabled spinlocks in all x86 GCC builds
* harbour/tests/speedtst.prg
+ added support for multiple usage of --exclude parameter
+ added support for --thread[=<num>] parameter which allows to set how
many threads will be used to execute speed test. When =<num> is not
given then each test loop is executed by separate thread, f.e.:
./speedtst --thread=3
Now you can make tests looking for optimal for your system values.
Please only remember that the total results shown by speedtst
can be highly bound with the most expensive test loop which is
finished only on one CPU
+ added support for --only=<testnums,...> parameter which allows to
chose requested tests
+ added restricted parameter validation and syntax info
* harbour/source/vm/fm.c
! do not build DL-MM when HB_FM_WIN32_ALLOC is set
* harbour/tests/speedtst.prg
+ added support for --exclude=<tests,...> option to exclude some tests,
f.e.:
./speetest --exclude=029.030.023.025.027.040.041.043.052.053.019.022.031.032
disables all tests which allocates memory. The same tests can be also
excluded by --exclude=mem
- harbour/tests/speedtst.prg
+ harbour/tests/speedold.prg
* renamed old speed test - I left it because some other xbase compiler
cannot compiple the new one due to not Clipper compatible PP
+ harbour/tests/speedtst.prg
* added new speed test which can also measure mutlithread performance.
When linked with MT HVM version then it can be executed with optional
parameter which causes that each test loop is executed by separate
thread. Please make such tests on different platforms.
* make_b32.mak
* make_gcc.mak
* make_vc.mak
* harbour.spec
* source/rtl/hbgtcore.c
* source/rtl/Makefile
* source/rtl/gtsys.c
* config/w32/poccce.cf
* config/w32/xcc.cf
* config/w32/pocc.cf
% Removed HB_GT_DEFAULT envvar, which was the exact synonym
of HB_GT_LIB. Please use HB_GT_LIB instead, if you - by any
chance - want to change the default GT at Harbour build-time.
* tests/speedtst.prg
! Fixed to delete temp .dbf files before exiting.
+ harbour/tests/memtst.prg
+ added some simple tests for memory manager
* harbour/tests/speedtst.prg
* reduced the size of allocated block size to not test C-RTL
memory manager but HVM speed
* harbour/include/hbthread.h
* added for x86@32 PTHREADS builds HB_ATOM_GET() and HB_ATOM_SET()
so they can be used together with HB_ATOM_INC()/HB_ATOM_DEC()
also for x86@64 but with reduced to 32bit reference counter.
* harbour/tests/speedtst.prg
* small update in speedtst.prg. It should be enough to make test and
compare MT and ST mode speed.
Please make test with different C compiler and send results to
devel list.
* harbour/bin/hb-func.sh
+ pass GTK paths to GCC in hb* scripts when -xbgtk switch is used
* harbour/contrib/rdd_ads/rddads.h
* harbour/contrib/rdd_ads/adsfunc.c
* indenting and casting
* harbour/source/rdd/dbfcdx/dbfcdx1.c
* cleaned typos in comments
+ harbour/tests/speedtst.prg
+ added speed test
* harbour/include/hbpp.h
* harbour/source/pp/ppcore.c
+ added HB_PP_TOKEN_ISNEUTRAL() macro to make code a little bit more
readable
* harbour/include/std.ch
+ added some missing old PP commands
* harbour/source/Makefile
* minor modification in order of compiled libraries
* harbour/source/pp/pplib.c
* changed the PP interface for .prg code.
Now following functions are supported:
__PP_INIT( [<cIncludePath>] [, <cStdChFile> ] ) -> <pPP>
initialize new PP context and return pointer to it.
when <cStdChFile> is empty string ("") then no default rules are
used only the dynamically created #defines like __HARBOUR__,
__DATE__, __TIME__, __PLATFORM__*
__PP_FREE( <pPP> )
free PP context.
__PP_PATH( <pPP>, <cPath> [, <lClearPrev>] )
add new (or replace previous) include paths.
__PP_RESET( <pPP> )
reset the PP context (remove all rules added by user or
preprocessed code)
__PP_ADDRULE( <pPP>, <cDirective> )
preprocess and execute new preprocessor directive
__PREPROCESS( <pPP>, <cCode> ) -> <cPreprocessedCode>
preprocess given code and return result
User can create more then one PP context and then use each of them
separately. Any modification in one context have no effect in other.