* harbour/source/common/hbver.c
* extended C compiler information
* harbour/source/compiler/genc.c
* use hb_verHarbour() and hb_verCompiler() to for information
about Harbour build in generated .c files' headers
* harbour/source/rdd/dbfcdx/dbfcdx1.c
* harbour/source/rdd/dbfntx/dbfntx1.c
! fixed typo in my last commit - additional dummy evaluations of
EVAL block
* harbour/include/hbdefs.h
* use extern "C" as default for HB_FUNC() declaration in C++ mode.
I know that this modification will interact with binary compatibility
but current state is worser because we were not binary compatible
between C and C++ mode. Now the problem should gone with some
reasonable for me cost. If your compiler uses the same ABI for C and
C++ mode then the backward binary compatibility problem can be resolved
by small tools which can strip C++ decoration from binary libraries or
maybe even linker has necessary switches to ignore them.
* harbour/include/hbexprb.c
* cleaned BCC warning
* harbour/source/rdd/nulsys/nulsys.c
+ added missing hb_rddGetAliasNumber(), thanks to Ron.
* source/compiler/genc.c
* source/compiler/gencli.c
* source/compiler/harbour.c
* generate an empty .c file if there is no valid function
in prg code (when -n is used)
(this fixes error during compilation of browdbx.prg)
* fixed a warning in hb_compStaticGetName
* harbour/source/rtl/dbedit.prg
! Previous non-strict compatible part made fully compatible by
dropping an Eval() on the field value block. Strict branch
and NOTE removed.
* harbour/include/hbapi.h
* harbour/include/hbexpra.c
* harbour/include/hbexprb.c
* harbour/include/hbexprop.h
* harbour/include/hbpcode.h
* harbour/include/hbxvm.h
* harbour/source/common/expropt1.c
* harbour/source/compiler/genc.c
* harbour/source/compiler/gencc.c
* harbour/source/compiler/gencli.c
* harbour/source/compiler/hbdead.c
* harbour/source/compiler/hbfix.c
* harbour/source/compiler/hblbl.c
* harbour/source/compiler/hbpcode.c
* harbour/source/compiler/hbstripl.c
* harbour/source/vm/hvm.c
* harbour/source/vm/macro.c
* changed support for XBASE++ extended syntax in expressions like:
v:="1,2,3"
x := a[ &v ]
a := { &v }
f( &v )
Now all data is stored on HV * stack without any external registers
which have to be saved/restored or updated in chosen operation.
This modification was necessary to make HV * reentrant safe and it
also eliminated some small overhead caused by old code.
I hope I haven't break anything in compiler - Ryszard please fix me
if I made sth wrong.
* harbour/source/vm/hvm.c
* harbour/source/compiler/harbour.y
* revert FOR/NEXT stop condition to be Clipper compatible
PCODE table has been updated and all .prg code which used modified PCODEs
has to be recompiled
* harbour/include/hbapirdd.h
* harbour/source/rdd/dbcmd.c
* harbour/source/vm/hvm.c
* do not generate RT errors "Alias does not exist" in constructions
like: ("NOT_EXISTING_ALIAS")->(...)
Clipper compatible modifications. I do not like it but current
previous behavior made problems for people who have code like:
if ("NOT_EXISTING_ALIAS")->(used())
...
else
? "Table not open..."
endif
! fixed some other RT errors to be Clipper compatible
* source/compiler/gencli.c
! .NET IL implementation for HB_P_POPLOCALNEAR and HB_P_PUSHLOCALNEAR
Notice: These opcodes are responsable for loading the values on the locals and
also for pushing the locals contents onto the virtual machine stack.
You can already run tests like this:
function Main()
local c := "Hello world from Harbour.NET !"
? c
return nil
Remember the process to build a .NET app:
Harbour.exe -gi -n hello.prg --> hello.il
ilasm.exe hello.il --> hello.elude/hbcomp.h
* harbour/include/hbstack.h
* harbour/include/hbxvm.h
* harbour/source/compiler/gencc.c
* harbour/source/compiler/hblbl.c
* harbour/source/vm/classes.c
* harbour/source/vm/estack.c
* harbour/source/vm/hvm.c
* harbour/source/vm/itemapi.c
* added automatic destructors for FOR EACH and WITH OBJECT statement
* s_lWithObjectBase changed to lWithObjectBase hb_stack membera
* added hb_stackWithObject*() functions/macros to manipulate
WITH OBJECT offset/item
* removed setting/restoring lForEach and lWithObject in functions
preamble/postamble
! fixed restoring s_lRecoverBase on HB_QUIT_REQUESTED
! fixed possible GPF on enumerators copping
* moved FOR EACH / WITH OBJECT massages suport from HVM to classy.c
! fixed access to first stack item in hb_vmIsLocalRef()
* harbour/TODO
- removed note about hb_objGetMethod() - it's already addressed
* harbour/contrib/rdd_ads/ads1.c
! make GOTOP() when new index is open and is set as control one
* harbour/include/hbcomp.h
* harbour/include/hbstack.h
* harbour/include/hbxvm.h
* harbour/source/compiler/gencc.c
* harbour/source/compiler/hblbl.c
* harbour/source/vm/classes.c
* harbour/source/vm/estack.c
* harbour/source/vm/hvm.c
* harbour/source/vm/itemapi.c
* added automatic destructors for FOR EACH and WITH OBJECT statement
* s_lWithObjectBase changed to lWithObjectBase hb_stack membera
* added hb_stackWithObject*() functions/macros to manipulate
WITH OBJECT offset/item
* removed setting/restoring lForEach and lWithObject in functions
preamble/postamble
! fixed restoring s_lRecoverBase on HB_QUIT_REQUESTED
! fixed possible GPF on enumerators copping
* moved FOR EACH / WITH OBJECT massages suport from HVM to classy.c
! fixed access to first stack item in hb_vmIsLocalRef()
* harbour/TODO
- removed note about hb_objGetMethod() - it's already addressed
* source/pp/ppcore.c
* source/pp/pptable.c
* utils/hbpptest/pp_test.prg
* fixed to be more Clipper compatible
* fixed access to unallocated memory
* added more test cases
* source/pp/ppcore.c
* source/pp/pptable.c
* utils/hbpptest/pp_test.prg
* fixed to be more Clipper compatible
* fixed access to unallocated memory
* added more test cases
* harbour/source/rdd/dbcmd.c
* harbour/source/rdd/dbf1.c
* harbour/source/rdd/delim1.c
* harbour/source/rdd/sdf1.c
* harbour/source/rdd/workarea.c
* code cleanup
* harbour/source/rdd/dbfcdx/dbfcdx1.c
* harbour/source/rdd/dbfntx/dbfntx1.c
! do not interrupt subindexing when new record is concurrently added by
other station
* harbour/source/rtl/gtpca/gtpca.c
* harbour/source/rtl/gtstd/gtstd.c
! redirect STDOUT() to console only when stdout is a tty device.
* source/pp/ppcore.c
* fixed bugs which I introduced
* utils/hbpptest/pretest.prg
* added more test cases
+ utils/hbpptest/pp_test.prg
* new file to test preprocessor Preprocess both with Clipper
and harbour and next use diff utility to compare outputs -
ignore the number of white spaces (use diff -w -u ...)
* harbour/source/vm/hvm.c
! fixed executing EXIT procedures after external to BEGIN SEQUENCE / END
BREAK - now by default we are taking the same action as after QUIT
what seems to be intention of Clipper authors. When HVM is compiled
with HB_C52_STRICT macro then we will try to emulate real Clipper
behavior.
* harbour/include/hbapi.h
* harbour/source/vm/itemapi.c
+ added single member to hb_struPointer structure for internal HVM use.
The reference counter for GC collectible HB_IT_POINTER items which have
'single' member set to TRUE is not updated in hb_itemCopy().
* harbour/source/rdd/workarea.c
* code cleanup
* harbour/source/vm/mainwin.c
! Fixed compilation in C mode under Msvc
* harbour/include/hbapi.h
* Added HB_EXPORT to hb_symbolNew()
* harbour/makefile.bc
* harbour/makefile.vc
* harbour/make_b32.bat
* harbour/make_vc.bat
* harbour/Common.mak
! Fixed compilation of Harbour DLL
! Fixed compilation of HbPPTest.exe
% Improved building of customized Harbour DLL
% Some more minor fixes and improvements
* harbour/doc/en/hb_vm.txt
* harbour/doc/es/hb_vm.txt
* harbour/include/hbvm.h
* harbour/contrib/hgf/gtk/mainlgtk.c
* harbour/source/compiler/gencc.c
* harbour/source/rtl/errorapi.c
* harbour/source/rtl/gtalleg/gtalleg.c
* harbour/source/vm/maindll.c
* harbour/source/vm/mainpm.c
* harbour/source/vm/mainstd.c
* harbour/source/vm/mainwin.c
* harbour/source/vm/hvm.c
* changed hb_vmQuit() to not execute EXIT() but return s_nErrorLevel
! execute EXIT procedures in hb_vmRequestQuit() - Clipper compatible
behavior
* do not exit immediately in RT errors but return from all executed
functions - some internal parts of RDD code will have to be fixed.
* harbour/source/vm/proc.c
! fixed procname for codeblocks. Seems that we are not fully Clipper
compatible yet. I'll look at it closer soon.
* harbour/TODO
+ added new item: Clean RDD code to be safe for return from RT errors
assigned to me
* harbour/make_tgz.sh
* added hbpptest to list of tools rebuilt with shared library
* harbour/source/rdd/dbcmd.c
! fixed possible access to uninitialized variable in __dbApp()/__dbCopy()
* harbour/source/rtl/dbedit.prg
% Optimized codeblock creation.
+ Restores 100% compatible codeblock creation for STRICT mode.
- Removed a strange extension which looked like a mistake
(besides not being CA-Cl*pper compatible).
* Comments reviewed/changed/added.
; Review done, now 100% compatible.
* harbour/common.mak
* harbour/makefile.bc
* harbour/makefile.vc
* harbour/utils/Makefile
+ Added hbpptest
* harbour/utils/hbpptest/pretest.prg
+ Output now goes to STDOUT.
* harbour/source/compiler/harbour.c
! Possible memory leak fixed.
* harbour/source/rtl/Makefile
! Fixed tabs (readded them).
- harbour/source/rtl/dbdelim.prg
+ harbour/source/rdd/dbdelim.prg
- harbour/source/rtl/dbjoin.prg
+ harbour/source/rdd/dbjoin.prg
- harbour/source/rtl/dbsdf.prg
+ harbour/source/rdd/dbsdf.prg
* harbour/source/rtl/Makefile
* harbour/source/rdd/Makefile
* harbour/common.mak
* Moved three RDD related internal function source files
to the RDD library. (They did depend on each other
anyway.)
* harbour/source/rdd/dbcmd.c
* harbour/source/rdd/dbfuncs.prg
* harbour/source/rdd/dblist.prg
* harbour/source/rdd/dbsort.prg
* harbour/source/rdd/dbstrux.prg
* harbour/source/rdd/dbtotal.prg
* harbour/source/rdd/dbupdat.prg
* harbour/source/rdd/rddord.prg
* harbour/source/rtl/dbdelim.prg
* harbour/source/rtl/dbedit.prg
* harbour/source/rtl/dbjoin.prg
% Cleanups, minor optimizations.
! __dbApp(), __dbCopy() to return LOGICAL.
! Problem where error condition was not detected if BREAK didn't
set the error object.
! __dbTotal() lRest handling fixed.
! __dbTotal() ErrorBlock overriding removed.
! __dbCreate() now generating default alias.
% __dbCreate() using dbCreate() undoc param to open the tables.
! __dbDelim() return value.
! __dbSDF() return value.
+ CA-Cl*pper undocumented call added: _dtxCondSet()
+ XBase++ compatible calls implemented:
dbJoin(), dbList(), dbSort(), dbTotal(), dbUpdate(), _dbExport()
dbCopyStruct(), dbCopyExtStruct()
+ Added some more 10 chars call stubs:
__dbCopySt(), __dbCopyXS(), __dbOpenSD(), __dbArrang()
+ Comments.
+ Formatting.
; All high-level db functions seems to be compatible now.
DBEDIT() is left TODO for review (refix).
* harbour/source/rtl/tbrowse.prg
* Minor cleanup.
* harbour/include/hbexpra.c
* harbour/source/vm/arrayshb.c
* harbour/source/rdd/dblist.prg
- Removed compiler+RTL __dbList() hack which
made it incompatible with CA-Cl*pper. The
hack targeted an XBase++ extension, but it's
compatible even without the hack. Tested with
XBase++ 1.82.294.
* harbour/source/rtl/typefile.prg
% FUNCTION -> PROCEDURE
+ _TypeFile() XBase++ internal function added.
* harbour/ChangeLog
! fixed typo in date
* harbour/doc/gtapi.txt
* harbour/include/hbgtcore.h
* harbour/source/rtl/hbgtcore.c
* harbour/source/rtl/gtgui/gtdef.c
* changed HB_GT_DEFAULT_<name> to HB_GT_<name>_DEFAULT and added
REQUEST posibilities so now the GT drivers can be REQUESTed and
the default one set in similar way.
F.e.:
REQUEST HB_GT_WIN
REQUEST HB_GT_WVT_DEFAULT
REQUEST HB_GT_STD
I think that it will be much easier and also using _DEFAULT as suffix
does not resolve fully 10 character symbol but will work if GT name
is not longer then 3 characters
* harbour/source/compiler/harbour.c
! fixed typo in binary or - || was used instead of |
* reenabled frame optimization for compilation without -n switch
* harbour/source/compiler/genc.c
- removed debug message I left by mistake
* harbour/bin/hb-func.sh
* use by default -gc0 output when compiled as temporary workaround
for GPF in -gc2
* harbour/source/compiler/genc.c
* harbour/source/compiler/gencc.c
! fixed .prg file name stored in generated .c files
* harbour/source/compiler/harbour.c
! update function counter when startup function is removed
It fixes compilation of empty .prg files in C++ mode
* harbour/source/rtl/dbjoin.prg
- removed unused variable
* include/hbcomp.h
* include/hberrors.h
* include/hbexpra.c
* include/hbexprb.c
* include/hbexprc.c
* include/hbmacro.h
* include/hbpcode.h
* include/hbpp.h
* include/hbxvm.h
* source/common/expropt1.c
* source/compiler/cmdcheck.c
* source/compiler/expropta.c
* source/compiler/exproptb.c
* source/compiler/exproptc.c
* source/compiler/genc.c
* source/compiler/gencc.c
* source/compiler/gencli.c
* source/compiler/genhrb.c
* source/compiler/genjava.c
* source/compiler/genobj32.c
* source/compiler/harbour.c
* source/compiler/harbour.l
* source/compiler/harbour.y
* source/compiler/hbdead.c
* source/compiler/hbfix.c
* source/compiler/hbfunchk.c
* source/compiler/hbgenerr.c
* source/compiler/hblbl.c
* source/compiler/hbpcode.c
* source/compiler/hbstripl.c
* source/macro/macroa.c
* source/macro/macrob.c
* source/macro/macroc.c
* source/vm/hvm.c
* source/vm/macro.c
* fixed compilation of code that uses '@' pass by
reference. The following syntax is no longer supported:
var := IIF( .T., @var, var )
however you can still use the following:
funcall( IIF( bPassbyRef, @someVar, someVar ) )
+added support for the following statement:
WITH OBJECT <objexpression>
...
END
inside this statement you can use simplified form of sending
messages to the object specified by <objexpression>
:message( ) instead objexpression:message()
:property instead objexpression:property
The runtime error will be generated at the time of message
sending (or property access/assign) if <objexpression>
is not a value of type object.
You can use the reserved property:
:__withobject
to access/assign the controlling object.
*fixed support for command line response file (@file.clp)
to be compatible with Clipper (Clipper genertes a single
obj file)
*fixed memory leaks when there is a fatal error in autoopened
module (using DO ... statement)
*implicit startup functions are removed from the list of
functions before generation of output code
* source/pp/ppcomp.c
* source/pp/pplib.c
* source/pp/ppcore.c
* redefinition of #define no longer causes a memory leak
* fixed repeatable optional clauses
#xcommand SET <var1> [, <varN>] WITH <val> =>
<var1>:=<val>[; <varN>:=<val>]
* fixed compilation of optional clauses (when used in different
order then declared) -this fixes the following long
waiting bug:
#command MYCOMMAND [<mylist,...>] [MYCLAUSE <myval>] => ;
MyFunction( {<mylist>} [, <myval>] )
MYCOMMAND MYCLAUSE 321 "HELLO"
* fixed restricted macro match marker <x:&>
* tests/Makefile
- tests/pretest.prg
+ utils/hbpptest
+ utils/hbpptest/Makefile
+ utils/hbpptest/pretest.prg
* moved file 'pretest.prg' from tests to separate directory
to make easier validation of the preprocessor
* TODO
* added note to fix hb_objGetMethod() so it will not generate
error if there is no method
* doc/en/clipper.txt
* added documentation for WITH OBJECT usage
* harbour/source/rdd/dbtotal.prg
% Unused variable removed, one other optimized out, other minor optimizations.
! Fixed not resetting the error block when used on a table containing
Memo fields only.
! Fixed error when passing xFor parameter as a string.
! Set(_SET_CANCEL...) calls removed.
+ Formatting, added few comments, CA-Cl*pper differences.
* harbour/common.mak
* harbour/source/rtl/Makefile
+ harbour/source/rtl/dbjoin.prg
+ added __dbJoin() - code by Pavel Tsarenko borrowed from xHarbour
* harbour/source/rdd/dbtotal.prg
+ added __dbTransRec() and updated to use it like in Clipper
Can someone tell me why we have Set( _SET_CANCEL, .f. ) in this
function?
* harbour/source/rtl/dummy.prg
- removed __dbJoin() and __dbTransRec()
Now only one function is defined here: __dbFList()
I have no idea what it does - if someone knows then please
implement it.
* harbour/include/hbvm.h
* harbour/source/vm/hvm.c
* formatting
* harbour/source/rdd/dbcmd.c
* keep strict Clipper compatibility in DBCREATE() parameters
* harbour/source/rdd/dbsort.prg
* harbour/source/rdd/dbstrux.prg
* harbour/source/rtl/dbdelim.prg
* updated for strict Clipper DBCREATE() parameters
* harbour/include/hbextern.ch
- removed ORDCOND() - it's not normal function
* harbour/include/ord.ch
+ added documented by CL5.3 NG but not implemented in Clipper
pseudofunction ORDCOND()
* harbour/source/rdd/dbcmd.c
+ added __dbOpenSDF() function
In Clipper dbCreate() can receive also 6-th undocumented
parameter: cDelim. In [x]Harbour this parameter is used
for code page ID. I'd like you decide if we should move
it and keep exact Clipper parameters. I'm also not sure
if __dbOpenSDF() is the exact Clipper's name. In Clipper
the name has only 10 characters __dbOpenSD() and this
function is used to open for import DELIMITED and SDF
files so maybe SD is not from SDF. Can anyone confirm
it's valid name. Maybe we should remove the last F.
* harbour/source/rdd/dbstrux.prg
* small speed optimization
* harbour/source/rtl/dbdelim.prg
* added alternatice Clipper like version of __dbDelim(). It executes
internally the same functions as Clipper - if someone has a while
and can check if it works correctly giving the same as Clipper
results then I'll be helpfull.
* harbour/source/rtl/dummy.prg
- removed ORDCOND() and __dbOpenSDF()
* harbour/source/vm/arrays.c
* minor optimization
* harbour/source/vm/cmdarg.c
* harbour/source/vm/itemapi.c
* formatting