* harbour/source/compiler/Makefile
* commented out YACC_FLAGS = -p hb_comp
this should not be committed, it will be used in the future.
1956 lines
81 KiB
Plaintext
1956 lines
81 KiB
Plaintext
/*
|
|
* $Id$
|
|
*/
|
|
|
|
/* Use this format for the entry headers:
|
|
YYYY-MM-DD HH:MM UTC[-|+]hhmm Your Full Name <your_email@address>
|
|
For example:
|
|
2002-12-01 13:30 UTC+0100 Foo Bar <foo.bar@foobar.org>
|
|
*/
|
|
|
|
* harbour/make_gnu.sh
|
|
* harbour/make_rpm.sh
|
|
* harbour/make_tgz.shrser.
|
|
* indenting
|
|
|
|
2006-11-24 03:25 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
|
* harbour/source/compiler/Makefile
|
|
* commented out YACC_FLAGS = -p hb_comp
|
|
this should not/hbgtcore.c
|
|
* include/hbapigt.h
|
|
* source/rtl/gtpca/gtpca.c
|
|
* source/rtl/gtstd/gtstd.c
|
|
! Fixed recent compiler warnings.
|
|
|
|
2006-02-05 09:47 UTC+0200 Chen Kedem <niki@actcom.co.il>
|
|
* source/rtl/gtos2/gtos2.c
|
|
* Restore my copyright notice for functions used to be in mouseos2.c
|
|
|
|
2006-02-04 17:05 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
|
* harbour/harbour.spec
|
|
* harbour/make_bsd.sh
|
|
* harbour/make_drw.sh
|
|
* harbour/make_gnu.sh
|
|
* harbour/make_rpm.sh
|
|
* harbour/make_tgz.sh.c
|
|
* harbour/source/compiler/Makefile
|
|
* harbour/source/compiler/cmdcheck.c
|
|
* harbour/source/compiler/complex.c
|
|
* harbour/source/compiler/genc.c
|
|
* harbour/source/compiler/gencc.c
|
|
* harbour/source/compiler/gencli.c
|
|
* harbour/source/compiler/gencobj.c
|
|
* harbour/source/compiler/genhrb.c
|
|
* harbour/source/compiler/genjava.c
|
|
* harbour/source/compiler/genobj32.c
|
|
* harbour/source/compiler/harbour.c
|
|
* harbour/source/compiler/harbour.l
|
|
* harbour/source/compiler/harbour.y
|
|
* harbour/source/compiler/hbcomp.c
|
|
* harbour/source/compiler/hbdead.c
|
|
* harbour/source/compiler/hbfix.c
|
|
* harbour/source/compiler/hbfunchk.c
|
|
* harbour/source/compiler/hbgenerr.c
|
|
* harbour/source/compiler/hbident.c
|
|
* harbour/source/compiler/hbpcode.c
|
|
* harbour/source/compiler/ppcomp.c
|
|
* harbour/source/macro/macro.y
|
|
* harbour/source/pp/ppcore.c
|
|
* harbour/source/pp/ppgen.c
|
|
* harbour/source/pp/pplib.c
|
|
* harbour/source/vm/cmdarg.c
|
|
* harbour/source/vm/estack.c
|
|
* harbour/source/vm/fm.c
|
|
* harbour/source/vm/macro.c
|
|
* harbour/utils/hbpp/hbpp.c
|
|
* harbour/utils/hbpp/hbpp.h
|
|
* harbour/utils/hbpp/hbppcomp.c
|
|
* harbour/utils/hbpp/hbppcore.c
|
|
* harbour/utils/hbpp/hbpplib.c
|
|
* harbour/utils/hbpp/pragma.c
|
|
* changed the internal compiler API to be MT safe.
|
|
All global and static non constant variables replaced by
|
|
HB_COMP structure which have all compiler context settings.
|
|
It's possible to allocate simultaneously many compiler contexts
|
|
and compile code. Only constant/read only variables are shared.
|
|
In macro compiler HB_COMP is replaced by HB_MACRO.
|
|
In source code I everywhere used to macros: HB_COMP_DECL and
|
|
HB_COMP_PARAM which are equivalents of old HB_MACRO_DECL and
|
|
HB_MACRO_PARAM definitions.
|
|
We will only have to change compiler FATAL errors support to
|
|
not execute exit() for non batch systems.
|
|
* make macro compiler fully MT safe
|
|
* removed not longer used definitions and variables
|
|
! add direct accessing to PP line number information - it fixes missing
|
|
line numbers reported recently
|
|
! added generating .ppo files when tokens are teken directly by compiler
|
|
- it fixes empty .ppo file problem
|
|
! clear hb_stack internall variables after removing hb_stack to avoid
|
|
possible GPF if application still works and try to access unexsiting
|
|
hb_stack
|
|
! do not allocate new memory block when final FM statistic report is
|
|
generated - it fixes problem with GPF when application compiled with
|
|
FM statistic exits and CLIPPER envvar is set.
|
|
! fixed memory leak hb_cmdargCheck()
|
|
! added to harbour.y symbol destructors - it should fixes memory leaks
|
|
in syntax errors but it uses quite new bison feature which is not
|
|
fully supported yet. Unfortunately it's also not MT safe and the
|
|
destructors implementation in 1.875c does not respect %parse-param.
|
|
Bison documentation says that it should so I hope it will be fixed
|
|
soon (or maybe even already is in the newest bison versions) before
|
|
I'll add multi context compilation support. If not then I will have
|
|
to add some workaround. I can pass compiler context pointer inside
|
|
YYSTYPE using hack in a lexer but it will force really huge number
|
|
modifications in existing bison rules so probably it will be much
|
|
easier to fix bison or write a small tool to update generated parser.
|
|
* other modifications - the total size of patch is nearly 1MB and
|
|
detail description will have to take me few days.
|
|
|
|
2006-11-21 14:35 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
|
* harbour/common.mak
|
|
+ added missing compiler/hbcomp.c file
|
|
|
|
2006-11-21 05:05 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
|
* harbour/source/compiler/complex.c
|
|
+ harbour/source/compiler/hbcomp.c
|
|
* added missing header and file in my previous commit
|
|
|
|
2006-11-21 03:30 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
|
* harbour/common.mak
|
|
* harbour/source/compiler/Makefile
|
|
* harbour/include/hbcomp.h
|
|
* harbour/include/hbexprb.c
|
|
* harbour/include/hbexprc.c
|
|
* harbour/source/compiler/cmdcheck.c
|
|
* harbour/source/compiler/genc.c
|
|
* harbour/source/compiler/harbour.c
|
|
* harbour/source/compiler/harbour.l
|
|
* harbour/source/compiler/harbour.slx
|
|
* harbour/source/compiler/harbour.y
|
|
* harbour/source/compiler/hbgenerr.c
|
|
* harbour/source/compiler/hbident.c
|
|
* harbour/source/compiler/ppcomp.c
|
|
+ harbour/source/compiler/complex.c
|
|
+ added new PP based compiler lexer - it's smaller, MT safe and a
|
|
little bit faster then then the FLEX version.
|
|
+ added HB_COMP structure to hold compiler data in future MT version
|
|
+ added global variable HB_COMP_PTR hb_comp_data to make conversion
|
|
to MT easier - now it holds only PP and lexer data.
|
|
* update PP related code in compiler to be MT safe
|
|
+ added %pure-parser, %parse-param and %lex-param for bison to generate
|
|
MT safe grammar parser.
|
|
* updated FLEX to work with recent compiler modifications and pure-parser
|
|
bison API
|
|
|
|
* harbour/makefile.bc
|
|
* harbour/makefile.vc
|
|
* harbour/source/macro/Makefile
|
|
* harbour/source/macro/macro.l
|
|
* harbour/source/macro/macro.y
|
|
* harbour/source/macro/macrolex.c
|
|
* use hb_macro prefix instead of hb_comp in bison/flex parser/lexer
|
|
used in macro compiler to avoid possible conflicts in the future
|
|
* separated lexer data
|
|
|
|
* harbour/include/hbapi.h
|
|
* harbour/include/hbpp.h
|
|
* harbour/source/pp/ppcore.c
|
|
* harbour/source/pp/ppgen.c
|
|
* harbour/source/pp/pplib.c
|
|
* harbour/source/vm/macro.c
|
|
* removed not used members from HB_MACRO structure to make it
|
|
cleaner before creating common to compiler and macro compiler
|
|
structure
|
|
+ added new token HB_PP_TOKEN_EPSILON
|
|
+ added void * cargo parameters passed to executed user functions
|
|
+ hb_pp_tokenGet(), hb_pp_tokenToString(), hb_pp_tokenBlockString()
|
|
functions for new PP based compiler lexer
|
|
|
|
* harbour/utils/hbpp/hbpp.c
|
|
* harbour/utils/hbpp/hbpp.h
|
|
* harbour/utils/hbpp/hbppcomp.c
|
|
* harbour/utils/hbpp/hbppcore.c
|
|
* harbour/utils/hbpp/hbpplib.c
|
|
* harbour/utils/hbpp/pragma.c
|
|
* updated to compile with recent compiler header file modifications
|
|
|
|
|
|
PP, new lexer and most of grammar parser should be MT safe. Now we should
|
|
update all compiler functions to pass pointer to HB_COMP data structure
|
|
where we should all current global variables. This structure as first
|
|
member should have HB_CMPCOMMON structure which will hold common to
|
|
compiler and macro compiler data. Ryszard I think you are the best person
|
|
to define this structure.
|
|
|
|
We have new lexer which is MT safe but please note that it has to be
|
|
extensively tested so I would like to ask everybody to compile as much
|
|
as possible different code and check if the final programs work as
|
|
expected. Working on new code I removed some limitations existing in
|
|
FLEX though not all. At the beginning I tried to replicate the exact
|
|
FLEX behavior but I've found that in few places it does not work as
|
|
it should so I begin to encode rules in a way which remove some
|
|
limitations. In fact now it's much easier to control some things.
|
|
I kept the FLEX code working and made all necessary modifications
|
|
so it still can be used but keeping FLEX working cost us IMHO too
|
|
much. It's not possible to introduce some improvements to grammar
|
|
parser. All identifiers, keyword and macros returned by new lexer
|
|
are converted to upper letters, do not have to be freed by hb_xfree()
|
|
and is guarantied that will be always accessible. So from grammar file
|
|
we can remove all hb_compIdentifierNew( hb_strupr($1), TRUE ) what
|
|
should give noticeable speed improvement but will break the FLEX code.
|
|
Ryszard and other you will have to decide if we will support FLEX in
|
|
the future. We can also clean the code and remove most of other
|
|
redundant hb_strupr() and hb_strdup() used in many places. BTW only
|
|
one terminal symbol can be returned with lower letters: DOIDENT
|
|
and I make it intentionally so it's possible to use:
|
|
DO prog1 WITH "sth"
|
|
on case sensitive file systems so this symbol should be cloned in
|
|
upper cases as function symbol but used without modification as
|
|
file name. It's current behavior but I'm not sure you will want
|
|
to keep it. Maybe compiler switch to always convert file names
|
|
created from
|
|
DO <id> [WITH <params,...>]
|
|
to lower cases will be better. Please think about it.
|
|
|
|
2006-11-20 15:20 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
|
* harbour/source/macro/macrolex.c
|
|
! fixed bad typo in NIL, IIF, .AND., .NOT. tokens parsing
|
|
|
|
2006-11-18 15:35 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
|
* harbour/include/hbexpra.c
|
|
* harbour/include/hbexprb.c
|
|
* harbour/include/hbexprc.c
|
|
* harbour/source/macro/macro.y
|
|
* harbour/source/macro/macrolex.c
|
|
* do not allocate separate memory in macro compiler for terminal
|
|
symbols which needs string representation - it fixes some set
|
|
of memory leaks and increase a little bit macro compilation
|
|
! fixed accessing freed memory in:
|
|
private cMacro := "cEarly", cEarly := {"Early"}
|
|
@ 12,10 GET &cMacro[1]
|
|
! fixed GPF in:
|
|
p:=@left()
|
|
and similar expressions
|
|
|
|
* harbour/source/common/expropt2.c
|
|
% minor modification
|
|
|
|
* harbour/source/compiler/harbour.c
|
|
! fixed HB_TRACE message
|
|
|
|
2006-11-17 22:55 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
|
* harbour/source/pp/ppcore.c
|
|
! fixed casting - it resolves problem reported by Alexander with
|
|
preprocessing chr(255) from static buffer (PP used by .prg code)
|
|
|
|
* harbour/source/macro/macro.y
|
|
+ added some comments
|
|
|
|
* harbour/source/macro/Makefile
|
|
* commented out compilation of FLEX based lexer for macro compiler and
|
|
added compilation of new small lexer written in pure .c
|
|
|
|
* harbour/common.mak
|
|
* replaced macrol.obj by macrolex.obj
|
|
|
|
+ harbour/source/macro/macrolex.c
|
|
+ new small lexer written in pure .c. The code is much smaller,
|
|
MT safe and more friendly for grammar parser. I think it should
|
|
be also faster but I haven't made any tests yet. When we update
|
|
grammar parser to not free string representation of terminal
|
|
symbols then we should expect some farther speed improvement,
|
|
it will also resolve some set of memory leaks like in:
|
|
type("user input")
|
|
and will allow to make some parts of grammar parser common to
|
|
compiler and macro compiler by removing #if[n]def HB_MACRO_SUPPORT
|
|
|
|
2006-11-17 14:55 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
|
* harbour/source/common/hbstr.c
|
|
! fixed decoding strings without trailing ASCII NUL character in
|
|
hb_strRemEscSeq()
|
|
|
|
* harbour/source/pp/ppcore.c
|
|
+ added decoding C escaped strings (e"...") to PP so they can be
|
|
preprocessed like a normal strings, it's not enabled when
|
|
HB_C52_STRICT macro is set
|
|
|
|
2006-11-17 13:30 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
|
* harbour/include/hbapi.h
|
|
* harbour/source/common/hbstr.c
|
|
* harbour/source/compiler/harbour.l
|
|
* harbour/source/macro/macro.l
|
|
* harbour/source/macro/macro.slx
|
|
* harbour/source/compiler/harbour.slx
|
|
* changed parameters in function: hb_compStrToNum() now the string
|
|
size is passed explicitly so it can work with strings which does
|
|
not have trailing ASCII NUL character.
|
|
|
|
* harbour/source/macro/macro.y
|
|
* indenting
|
|
|
|
* harbour/include/hbmacro.h
|
|
* harbour/source/common/hbstr.c
|
|
* harbour/source/macro/macro.l
|
|
* harbour/source/macro/macro.y
|
|
* added two new functions for macro compiler: hb_macroLexNew() and
|
|
hb_macroLexDelete() to clearly separate lexer from grammar parser.
|
|
|
|
* harbour/source/compiler/harbour.l
|
|
* harbour/source/common/hbstr.c
|
|
* harbour/source/pp/ppcore.c
|
|
* added error generation for wrong e"..." strings and fixed \" quoting
|
|
* removed \q quoting
|
|
|
|
* harbour/source/pp/ppcore.c
|
|
* harbour/source/pp/ppgen.c
|
|
* added small description in headers
|
|
|
|
* harbour/common.mak
|
|
* harbour/source/pp/Makefile
|
|
* harbour/source/pp/pplib.c
|
|
+ harbour/source/pp/pplib2.c
|
|
* harbour/include/hbextern.ch
|
|
+ added auto destructor for allocated PP context, it's not longer
|
|
necessary to execute __PP_FREE() so this function was moved from
|
|
the standard .prg API to file with backward compatible functions
|
|
* changed __PREPROCESS() to __PP_PROCESS()
|
|
* moved setting std rules to separate file so now if user uses PP
|
|
with only his own rules we are not forcing linking static tables
|
|
which are quite huge (over 100kb)
|
|
To include stdandard rules in static binaries user should add
|
|
to his code:
|
|
REQUEST __PP_STDRULES
|
|
|
|
+ harbour/source/pp/pplib3.c
|
|
* old PP functions for backward compatibility:
|
|
__PPADDRULE(), __PREPROCESS(), __PP_FREE()
|
|
Please note that using this function is not MT safe. They should
|
|
work like with old PP code. Using any of this function automatically
|
|
forces linking __PP_STDRULES
|
|
|
|
2006-11-15 14:20 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
|
* harbour/include/hbapi.h
|
|
+ added
|
|
void * pLex;
|
|
member to HB_MACRO structure - it will be necessary for MT safe
|
|
macro parser
|
|
|
|
* harbour/include/set.ch
|
|
* harbour/include/hbexprb.c
|
|
* harbour/source/macro/macro.l
|
|
* harbour/source/macro/macro.y
|
|
* indenting, formatting and converting tabs to spaces
|
|
|
|
* harbour/include/hbpp.h
|
|
* harbour/source/compiler/ppcomp.c
|
|
* harbour/source/pp/ppcore.c
|
|
* harbour/source/pp/ppgen.c
|
|
* harbour/source/pp/pplib.c
|
|
* make HB_PP_TOKEN structure public for other code and changed
|
|
public PP API to not force including static rules by programs
|
|
which does not need them.
|
|
+ added basic API for using PP as lexer
|
|
* divided HB_PP_TOKEN_MACRO to HB_PP_TOKEN_MACROVAR and
|
|
HB_PP_TOKEN_MACROTEXT and mark
|
|
[<keyword>][&<keyword>[.[<nextidchars>]]]+
|
|
as HB_PP_TOKEN_MACROTEXT not pair HB_PP_TOKEN_KEYWORD and
|
|
HB_PP_TOKEN_MACRO
|
|
It allows easier integration PP as (macro)compiler lexer and
|
|
fixes preprocessing [<keyword>][&<keyword>[.[<nextidchars>]]]+
|
|
in some patterns.
|
|
|
|
* harbour/utils/hbtest/Makefile
|
|
+ added PP library to linked library list
|
|
|
|
* harbour/source/macro/macro.y
|
|
+ added seaport to use PP as lexer. It's disabled by default and
|
|
can be enabled using by defining HB_PP_MACROLEX. It eliminates
|
|
using FLEX or SIMPLEX lexer in macro compiler. Now it emulates
|
|
the behavior of FLEX lexer because I wanted to minimize the
|
|
modification but in fact because parsed token are freed when
|
|
macro compiler finish its job then we can resolve RT memory
|
|
leaks which apear during parsing wrong expressions. It will be
|
|
enough to drop allocating memory for new terminal symbols and
|
|
using them as is like in compiler. It will also quite nice
|
|
simplify include/hbexpr*.c code and will allow to move some
|
|
functions to COMMON library. I want to make also pure compiler
|
|
code MT safe so I will have to add passing pointer to a structure
|
|
with compiler context just like in macro compiler. It means that
|
|
if we define a structure which will be common to compiler and macro
|
|
compiler with local (not common) data stored in other structure for
|
|
which will will keep only a pointer then we will be able to move most
|
|
of include/hbexpr*.c code to common library. But I do not want to
|
|
make farther modification without consultation without Ryszard.
|
|
Also to make PP default lexer some farther modifications should
|
|
be done in core PP code and include/hbexpr*.c files to not reduce
|
|
the speed. Now using HB_PP_MACROLEX for sure will have to cause
|
|
speed reduction in macro compiler. But if we make necessary
|
|
modifications then we should keep at least the same speed or
|
|
probably reach noticeable better results.
|
|
|
|
2006-11-14 16:35 UTC+0300 Alexander Kresin <alex@belacy.belgorod.su>
|
|
* common.mak
|
|
* Reverted a change of 2006-10-04 09:02
|
|
|
|
2006-11-14 13:50 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
|
* harbour/TODO
|
|
* removed to resolved problems from TODO/TOFIX list
|
|
|
|
* harbour/include/hbexprb.c
|
|
* indenting and tab to spaces conversion
|
|
|
|
* harbour/source/compiler/ppcomp.c
|
|
! fixed typo which cased that dump buffer was not ended
|
|
with \0 character
|
|
|
|
2006-11-13 20:50 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
|
* harbour/include/hbpp.h
|
|
* harbour/source/pp/ppcore.c
|
|
! fixed the problem reported by Enrico in code like:
|
|
IF ["] $ var
|
|
Unfortuantelly this fix also breaks some valid expressions like:
|
|
x := a[ f("]") ] $ "test"
|
|
x := a[ f( "'" ) ] $ "test"
|
|
what is also Clipper compatible anyhow I think that in the future
|
|
we may want to break Clipper compatibility and allow compilation
|
|
of such code.
|
|
|
|
* harbour/doc/pp.txt
|
|
* updated documentation for the above modification
|
|
|
|
2006-11-13 11:22 UTC+0200 Chen Kedem <niki@actcom.co.il>
|
|
* TODO
|
|
- Remove one TOFIX item with was fixed (PP of a long line).
|
|
+ Add 3 TOFIX items (these are all that I know of).
|
|
|
|
+ doc/pp.txt
|
|
* PP description by Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
|
|
|
2006-11-13 03:40 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
|
* 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.
|
|
|
|
2006-11-12 09:30 UTC+0100 Marek Paliwoda (mpaliwoda at interia pl)
|
|
* harbour/makefile.bc
|
|
* harbour/makefile.vc
|
|
* Fixed pptable.c dependencies
|
|
|
|
2006-11-10 17:40 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
|
* harbour/contrib/rdd_ads/rddads.h
|
|
+ added #define WIN32 when HB_OS_WIN_32 is set to not force -DWIN32
|
|
compiler switch
|
|
|
|
* harbour/source/pp/ppcore.c
|
|
* cleaned BCC warnings
|
|
|
|
* harbour/source/rdd/dbfcdx/dbfcdx1.c
|
|
! fixed ordKeyGoto() positioning when active filter is set and no
|
|
controlling order
|
|
|
|
2006-11-10 12:00 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
|
* harbour/bin/hb-mkslib.sh
|
|
+ added ${L_USR} to gcc parameters
|
|
|
|
* harbour/source/pp/ppgen.c
|
|
! fixed minor typo in printf() format
|
|
|
|
2006-11-10 02:05 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
|
* harbour/include/hbcomp.h
|
|
* harbour/include/hbpp.h
|
|
* harbour/source/compiler/cmdcheck.c
|
|
* harbour/source/compiler/hbusage.c
|
|
* harbour/source/compiler/ppcomp.c
|
|
* harbour/source/pp/ppcore.c
|
|
* harbour/source/pp/ppgen.c
|
|
* harbour/source/pp/pplib.c
|
|
* restored support for old hb_inLine() syntax
|
|
+ added support for hb_inLine() to new PP. It can be enabled by
|
|
-kI compiler switch. It's disabled by default.
|
|
The new hb_inLine{} syntax is:
|
|
[ <exp> ] hb_inLine [ ( [<params,...>] ) ] { [ <c_code> ] } [ <exp> ]
|
|
<c_code> can contain new line characters.
|
|
Nested hb_inLine{} in <params,...> is not supported. If you think
|
|
it's important I can add it in few lines.
|
|
This version does not break any valid Clipper syntax, hb_inLine is
|
|
not reserved word and hb_inLine can be repeated many times in the
|
|
same line. F.e. this code can be properly preprocessed and compied if
|
|
you disable in compiler old hb_inLine() syntax and enable the new one
|
|
by -kcI Harbour compiler switch:
|
|
|
|
proc main()
|
|
local hb_inLine := " (var) "
|
|
? hb_inLine{ hb_retc("inLine"); } + hb_inLine(" parameter ") {
|
|
hb_retc( hb_parc( 1 ) );
|
|
} + "!" + hb_inLine + hb_inLine() { hb_retc( ":-)" ); } + ;
|
|
hb_inLine() + "{}"
|
|
return
|
|
function hb_inLine()
|
|
return " func() "
|
|
|
|
So from user point of view this version have real "inline" syntax.
|
|
To be clear: I'm not a fun of any C inline extensions. They works
|
|
only when we use .c code as compiler backend so the code which uses
|
|
them cannot be used in .hrb files and any other format we will add
|
|
in the future which do not support later C code compilation. F.e it
|
|
will not work in compiler integrated with HVM or with .NET
|
|
Anyhow if someone finds it useful then I think that it should be
|
|
properly implemented. This is the reason I added the new version.
|
|
The old one I left only for backward compatibility. It breaks any
|
|
code which uses hb_inLine keyword can be used only once in a line
|
|
and it does not have "inline" so IMHO it should not be enabled by
|
|
default.
|
|
I would like to hear your opinion about default compiler switches:
|
|
1. should we disable both: hb_inLine() and hb_inLine {}
|
|
2. should we disable hb_inLine() and enable hb_inLine {}
|
|
3. should we disable hb_inLine {} and enable hb_inLine()
|
|
4. should we enable both: hb_inLine() and hb_inLine {}
|
|
|
|
+ harbour/tests/hbinline.prg
|
|
+ added test code for new hb_inLine{} syntax
|
|
|
|
* harbour/tests/inline_c.prg
|
|
! replaced direct access to HB_ITEM body by API function calls
|
|
|
|
2006-11-09 22:00 UTC+0100 Marek Paliwoda (mpaliwoda at interia pl)
|
|
* harbour/include/hbstack.h
|
|
* Added HB_EXPORT to hb_stackReturnItem()
|
|
|
|
2006-11-09 14:00 UTC+0100 Marek Paliwoda (mpaliwoda at interia pl)
|
|
- harbour/utils/hbpp/hbpptable.c
|
|
+ harbour/utils/hbpp/hbpptbl.c
|
|
* harbour/utils/hbpp/Makefile
|
|
* harbour/common.mak
|
|
* Renamed hbpptable.c->hbpptbl.c to follow 8.3 naming convention
|
|
|
|
2006-11-09 09:45 UTC+0100 Marek Paliwoda (mpaliwoda at interia pl)
|
|
* harbour/makefile.bc
|
|
* Adapted to the new Preprocessor utility ppgen.exe
|
|
* Cleaned hbpp.exe dependecies due to recent changes
|
|
* harbour/makefile.vc
|
|
* harbour/common.mak
|
|
* Cleaned hbpp.exe dependecies due to recent changes
|
|
* harbour/include/hbapi.h
|
|
* Added HB_EXPORT to hb_gcAlloc()
|
|
* harbour/include/hbstack.h
|
|
* Added HB_EXPORT to hb_stackSelfItem()
|
|
* harbour/source/vm/fm.c
|
|
* Added dipslaying contents of unreleased blocks at
|
|
program exit, together with logging unreleased memory
|
|
blocks report to fm.log file. Borrowed from xharbour.
|
|
- harbour/utils/hbpp/ppcomp.c
|
|
- harbour/utils/hbpp/ppcore.c
|
|
- harbour/utils/hbpp/pplib.c
|
|
- harbour/utils/hbpp/pptable.c
|
|
+ harbour/utils/hbpp/hbppcomp.c
|
|
+ harbour/utils/hbpp/hbppcore.c
|
|
+ harbour/utils/hbpp/hbpplib.c
|
|
+ harbour/utils/hbpp/hbpptable.c
|
|
* Rename harbour/utils/hbpp/pp*.c to harbour/utils/hbpp/hbpp*.c
|
|
|
|
2006-11-08 00:39 UTC+0200 JF Lefebvre (jflefebv at mafact com)
|
|
* harbour/makefile.vc
|
|
* harbour/common.mak
|
|
* Adapted to the new Preprocessor utility ppgen.exe
|
|
Someone should rename the following files into utils/hbpp
|
|
ppcomp.c -> hbppcomp.c
|
|
pplib.c -> hbpplib.c
|
|
ppcore.c -> hbppcore.c
|
|
pptable.c -> hbpptable.c
|
|
|
|
2006-11-08 17:20 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
|
* harbour/source/vm/classes.c
|
|
! fixed type checking for "string" type. It should be translate
|
|
to character not symbol item type.
|
|
|
|
2006-11-08 13:40 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
|
* harbour/source/pp/ppcore.c
|
|
* cleaned two warnings generated by old GCC versions
|
|
|
|
2006-11-08 12:55 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
|
* harbour/bin/hb-func.sh
|
|
+ added linker parametrs to hbcc
|
|
|
|
* harbour/include/hbapi.h
|
|
+ added hb_retclenAdoptRaw()
|
|
|
|
* harbour/include/hbapifs.h
|
|
* harbour/source/common/hbfsapi.c
|
|
* changed first parameters of hb_fsAddSearchPath() to const char *
|
|
|
|
* harbour/include/hbclass.ch
|
|
* update for new PP. I think that now we can try to create final
|
|
version of our OOP rules.
|
|
|
|
* harbour/include/hbdefs.h
|
|
+ added UCHAR and SCHAR typedefs
|
|
|
|
* harbour/include/hbrddcdx.h
|
|
* indenting
|
|
|
|
* harbour/source/rdd/workarea.c
|
|
! fixed minor typo
|
|
|
|
* harbour/source/common/hbdate.c
|
|
* harbour/source/rtl/dates.c
|
|
* moved hb_dateToday() and hb_dateTimeStr() from RTL to COMMON library
|
|
|
|
- harbour/include/hbpp.h
|
|
- harbour/source/pp/ppcomp.c
|
|
- harbour/source/pp/ppcore.c
|
|
- harbour/source/pp/pplib.c
|
|
- harbour/source/pp/pptable.c
|
|
- harbour/source/pp/pragma.c
|
|
* harbour/utils/hbpp/Makefile
|
|
* harbour/utils/hbpp/hbpp.c
|
|
+ harbour/utils/hbpp/hbpp.h
|
|
+ harbour/utils/hbpp/ppcomp.c
|
|
+ harbour/utils/hbpp/ppcore.c
|
|
+ harbour/utils/hbpp/pplib.c
|
|
+ harbour/utils/hbpp/pptable.c
|
|
+ harbour/utils/hbpp/pragma.c
|
|
* moved all PP code to harbour/utils/hbpp
|
|
It's interesting and working preprocessor and the code can be
|
|
usable for some other things so I do not want to remove it.
|
|
Probablly we should move it to contrib/hbpptext
|
|
|
|
* harbour/include/hbcomp.h
|
|
* harbour/include/hberrors.h
|
|
* harbour/include/hbsetup.ch
|
|
+ harbour/include/hbpp.h
|
|
+ harbour/include/hbstdgen.ch
|
|
* harbour/source/common/hbstr.c
|
|
* harbour/source/compiler/Makefile
|
|
* harbour/source/compiler/cmdcheck.c
|
|
* harbour/source/compiler/harbour.c
|
|
* harbour/source/compiler/harbour.l
|
|
* harbour/source/compiler/hbgenerr.c
|
|
+ harbour/source/compiler/ppcomp.c
|
|
* harbour/source/pp/Makefile
|
|
+ harbour/source/pp/ppcore.c
|
|
+ harbour/source/pp/pplib.c
|
|
+ harbour/source/pp/ppgen.c
|
|
+ New PP code written from scratch. It works in similar way to
|
|
Clipper PP even the error codes are replicated. The code is MT
|
|
safe does not have any limitation on size of preprocessed code,
|
|
line, etc. It's also Clipper compatible lexer. It means that
|
|
we do not longer need FLEX or SIMPLEX which can be replaced
|
|
by new PP after some small modifications. Anyhow I haven't
|
|
decided to make it myself. I would like to agree with with the
|
|
rest of developers. I will be very happy if such modifications
|
|
will be done by someone else, Ryszard?
|
|
Meanwhile I h may no flush data in PreExt()
|
|
|
|
* harbour/source/rtl/gtwin/gtwin.c
|
|
! fixed Init() code by adding missing SUPER_INIT()
|
|
* modified a little bit PreExt() and PostExt() methods
|
|
|
|
2006-02-08 20:23 UTC+0100 Antonio Linares <alinares@fivetechsoft.com>
|
|
* makefile.nt
|
|
* makefile64.nt
|
|
* updated with recent changes
|
|
|
|
2006-02-08 18:02 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
|
* harbour/source/rtl/gtwin/gtwin.c
|
|
+ added PreExt() and PostExt() methods
|
|
|
|
2006-02-08 15:17 UTC+0100 PrzemyslawI chose
|
|
modified version of xHarbour extension with escaped strings e"<sting>"
|
|
so now FLEX understand such strings and decode them like C escaped
|
|
strings. It means that you can use them also in the .prg code f.e.:
|
|
outstd( e"Hello\n\rWorld" )
|
|
The new PP is also noticeable faster. You should see the difference
|
|
compiling long files. The build in PP rules are generated automatically
|
|
by ppgen program created from source/pp/ppgen.c
|
|
I had to add to GNU source/pp/Makefile these two lines:
|
|
pptable.c : ppgen$(EXE_EXT)
|
|
./ppgen$(EXE_EXT) $(TOP)$(ROOT)include/hbstdgen.ch -opptable.c -q
|
|
Sth like that will have to be done also in non GNU make system.
|
|
Now Harbour can be compiled only using GNU make.
|
|
Marek can you update non GNU make files? I would like to leave this
|
|
modification to you or other developers who can test it.
|
|
It was quite big modification and I do not believe that I haven't
|
|
make any mistakes but I hope that in few weeks I'll fix any reported
|
|
bugs and it will resolve any PP problems.
|
|
TODO:
|
|
* error messages
|
|
create one common list of errors and warnings and keep it
|
|
in common library. PP and compiler can still generate different
|
|
errors with the same number. It can be confusing for the users
|
|
and hard to document and add i18n translations.
|
|
If possible we should also try to keep Clipper error numbers.
|
|
In new PP code I added Clipper error numbers but I cannot use
|
|
them until compiler code is not updated.
|
|
We should aslo remove the ctype passed to error functions and
|
|
hack with first character in warning messages and use only
|
|
error number. The codes from 1000 to 1999 should be warnings
|
|
where range 1000:1099 is activated by -w, 1100:1199 by -w1,
|
|
1200:1299 by -w2, etc. 2000:2999 are errors and 3000:3999
|
|
fatal errors. All compiler functions which generate an error
|
|
should expect that error function will not stop the compiler
|
|
but return and cleanly finished their job. It's necessary for
|
|
MT support in compiler and making compiler part of some other
|
|
programs which may still work and compile different source code.
|
|
* FLEX/SIMPLEX
|
|
remove them at all and add some final pass to PP to create
|
|
more precise tokens for grammar parser or at least add better
|
|
integration to remove some redundant code and existing limits.
|
|
* hb_inLine() support - it's broken in new PP but as I can see
|
|
it was never working correctly. I can add a hack to PP to support
|
|
hb_inLine() but I'm not sure it's worth to do. Maybe in few days.
|
|
|
|
+ harbour/include/std.ch
|
|
+ added new std.ch. It was created without using Clipper's std.ch.
|
|
It's quite possible that some rules are wrong and should be fixed
|
|
so please help. Anyhow I created a set of programs based on new PP
|
|
code generating all possible combinations of different commands I
|
|
collected from different source code, documentation and match patterns
|
|
of rules I was adding to new std.ch and then I was comparing .ppo
|
|
files generated by Clipper and Harbour so I do not expect any bigger
|
|
problems then some minor typos. I had to introduce some modifications
|
|
in spacing as workaround for FLEX/SIMPLEX which cannot properly decode
|
|
text preprocessed by Clipper after stringify.
|
|
|
|
* harbour/utils/hbpptest/pretest.prg
|
|
* updated for new PP
|
|
It reports 16 wrong translations but some of them are valid
|
|
and some others are caused by escaped string e"..." (one of hack
|
|
for FLEX/SIMPLEX support)
|
|
I also had to remove all spaces in comparison the results
|
|
because they were not Clipper ocmpatible at all. Ryszard please
|
|
look at it.
|
|
|
|
2006-11-07 21:23 UTC+0200 JF Lefebvre (jflefebv at mafact com)
|
|
* harbour/include/hbclass.ch
|
|
* added one rule to support inline method with local var separated from <code> by a coma
|
|
Working and into the classy compatibility block
|
|
|
|
2006-11-07 20:36 UTC+0200 JF Lefebvre (jflefebv at mafact com)
|
|
* harbour/include/hbclass.ch
|
|
* added one rule to support inline method with local var separated from <code> by a coma
|
|
|
|
2006-11-03 22:00 UTC+0100 Marek Paliwoda (mpaliwoda at interia pl)
|
|
* harbour/makefile.bc
|
|
* Updated comment section about environment variables used by makefile
|
|
* harbour/makefile.vc
|
|
* Updated comment section about environment variables used by makefile
|
|
* Cleaned compilation under Visual C++ 8.0 (VS2005 compiler), including
|
|
64 bit platforms. To properly compile under Visual C++ 8.0 you have
|
|
set a new environment variable HB_VISUALC_VER to 80 before running
|
|
make_vc.bat.
|
|
|
|
2006-10-07 04:25 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
|
* harbour/include/hbclass.ch
|
|
+ added validation for class data names. As additional preprocessor
|
|
rule to not use <!marker!>
|
|
|
|
* harbour/include/hboo.ch
|
|
* harbour/source/rtl/tclass.prg
|
|
* harbour/source/vm/classes.c
|
|
+ added delegate messages
|
|
|
|
* harbour/include/hbstack.h
|
|
* harbour/source/vm/arrays.c
|
|
* harbour/source/vm/estack.c
|
|
* harbour/source/vm/hvm.c
|
|
* harbour/source/vm/proc.c
|
|
+ added startup symbol to hb_stack. It gives very good stop
|
|
condition for all procedures which trace stack calls and
|
|
resolves the problem with hb_stack.pBase which was never
|
|
pointing to valid function/procedure symbol when no symbol
|
|
was put on HVM stack. Now after hb_stackInit() the first
|
|
item is allocated for "hb_stackInit()" symbol so hb_stack.pBase
|
|
is always a pointer to valid function/procedure symbol.
|
|
* changed the guard condition for buggy code in hb_stackPop()
|
|
and similar code from:
|
|
hb_stack.pPos < hb_stack.pItems
|
|
to:
|
|
hb_stack.pPos <= hb_stack.pBase
|
|
The old condition was generating usable error message only in the
|
|
startup function. In deeply called functions it was only waste of
|
|
CPU time on one of the most often call functions. Before it was
|
|
activated internal stack structures were corrupted.
|
|
If we were leaving for many years without really working stack
|
|
underflow protection then maybe we should think about disabling
|
|
it at when HB_STACK_MACROS are used and keep it only in real
|
|
stack functions for HVM developers. Single protection in
|
|
hb_stackOldFrame() I've just added is enough for basic C code
|
|
validation.
|
|
I created the second version of stack macros without it in
|
|
hbstack.h but I would like to hear other developers opinion.
|
|
|
|
2006-10-05 01:40 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
|
* harbour/include/hbexprc.c
|
|
* Temporary disabled optimization with references to object variables
|
|
until we will not have extended reference items in our HVM.
|
|
It can be enabled by compiling with HB_USE_OBJMSG_REF
|
|
|
|
* harbour/include/hbclass.h
|
|
* restored previous CLASSDATA behavior which ignores SHARED clause
|
|
and always create shared class variables
|
|
|
|
2006-10-04 15:20 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
|
* harbour/include/hbexprc.c
|
|
* translate HB_P_INC / HB_P_DEC in (pre|post)(inc|dec)rementation
|
|
to HB_P_[PLUS|MINUS]EQ
|
|
|
|
* harbour/source/vm/hvm.c
|
|
- removed not necessary now hb_itemUnRef() in hb_vmInc()/hb_vmDec()
|
|
|
|
2006-10-04 09:02 UTC+0100 Antonio Linares (alinares@fivetechsoft.com)
|
|
* common.mak
|
|
main.c has to be used instead of mainstd.c or mainwin.c
|
|
as main.c select the right entry point function based on the used defines
|
|
|
|
2006-10-04 02:30 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
|
* harbour/include/hbclass.ch
|
|
* most of the rules rewritten
|
|
! fixed some wrong rules and general cleanup
|
|
+ added additional code validation
|
|
! fixed compilation of more then one class in single file.
|
|
Now it's even possible to declare all classes at beginning of
|
|
single file and then implementing their methods in any order
|
|
! fixed using static classes and classes
|
|
! fixed compilation without <ClassName>_ prefix in method names
|
|
+ added support for HB_CLS_NO_DECORATION macro which disable
|
|
adding <ClassName>_ prefix to method names - this macro is
|
|
set by default when HB_SHORTNAMES is set.
|
|
+ added support for declared parameters validation - it can be
|
|
disabled with HB_CLS_NO_PARAMS_ERR and I had to disable it
|
|
by default due to problems with our preprocessor.
|
|
Ryszard seems that our PP has serious problems with decoding
|
|
directives when there is no space between symbol and some other
|
|
non symbol character. I had to add some workarounds and even
|
|
introduce buggy rules to make it working. Please look at it.
|
|
You can remove #define HB_CLS_NO_PARAMS_ERR from hbclass.ch
|
|
and try to rebuild Harbour core code to see the problem.
|
|
|
|
* harbour/include/hboo.ch
|
|
* harbour/source/vm/classes.c
|
|
+ added support for new primitive message: HB_OO_MSG_PERFORM
|
|
|
|
* harbour/source/rtl/tclass.prg
|
|
- removed <lPersistent> parameter from HBClass messages and
|
|
internals data. Persistent is supported as scope bit and
|
|
separate variable was redundant.
|
|
- removed stripping of () from message names. Here is not a place
|
|
to fix wrong preprocessor rules.
|
|
|
|
* harbour/utils/hbtest/rt_class.prg
|
|
* use: METHOD PROCEDURE ... CALSS ...
|
|
instead of: PROCEDURE ... CALSS ...
|
|
The first version is preferable syntax.
|
|
|
|
* harbour/source/debug/dbgtmenu.prg
|
|
* harbour/source/rtl/checkbox.prg
|
|
! fixed some parameters in method declaration - global cleanup
|
|
will have to wait for preprocessor fixes
|
|
|
|
Hi all,
|
|
Please make test with current hbclass.ch code.
|
|
I hope that I haven't broken too much things ;-) but I rewrite
|
|
from scratch most rules and it's possible that I missed sth or
|
|
made some stupid typos. Current version is much shorter and should
|
|
be easier to updated. For sure I've intentionally changed one thing.
|
|
CLASSDATA was ignoring SHARED attribute and always created shared
|
|
class variables. Seems that it was long existing typo but the fix
|
|
may interact with already existing code which needs SHARED class
|
|
variables but does not use SHARED clause in CLASSDATA declaration.
|
|
In such case please update it and add missing SHARED.
|
|
Also in the end of CLASS declaration we have:
|
|
[ ; #translate Super( <SuperClassN> ): => ::<SuperClassN>: ] ;
|
|
[ ; #translate Super( <SuperClass1> ): => ::<SuperClass1>: ] ;
|
|
[ ; #translate Super(): => ::<SuperClass1>: ] ;
|
|
[ ; #translate Super: => ::<SuperClass1>: ] ;
|
|
[ ; #translate ::Super : => ::<SuperClass1>: ]
|
|
These rules introduce very serious bug - they are breaking supercasting
|
|
in code which makes sth like:
|
|
::super:super:super:msg
|
|
or in any other code which sends SUPER message to some other class
|
|
objects. I will have to remove them. At least the last three ones.
|
|
There were some other things I wanted to write about but it's too late
|
|
and I'm to tired - sorry. If you will have any question please ask. if
|
|
you will notice some problems with current rules please inform me.
|
|
|
|
2006-09-29 22:50 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
|
* harbour/source/vm/classes.c
|
|
* allow to access object variables using assign messages without
|
|
parameter. I do not want to add symmetric behavior for access messages
|
|
though it's technically possible but such things should be controlled
|
|
by programmer because access messages can have less restricted scoping
|
|
then assign ones (READONLY) so I'll add new rule for it in hbclass.ch
|
|
|
|
* harbour/source/vm/hvm.c
|
|
* fixed warning message when object variable reference is
|
|
generated using macro compiler without '_' as prefix.
|
|
|
|
2006-09-29 21:05 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
|
* harbour/contrib/rdd_ads/ads1.c
|
|
* harbour/contrib/rdd_ads/adsfunc.c
|
|
* synced with Brian fixes in xHarbour
|
|
|
|
* harbour/source/rdd/workarea.c
|
|
* minor modification
|
|
|
|
* harbour/source/rdd/dbfcdx/dbfcdx1.c
|
|
* minor Clipper compatibility update
|
|
|
|
2006-09-29 11:20 UTC+0100 Ryszard Glab <rglab//imid.med.pl>
|
|
* tests/Makefile
|
|
+ added omacro.prg and varparam.prg
|
|
* ChangeLog
|
|
* fixed date in previous commit
|
|
|
|
2006-09-29 11:10 UTC+0100 Ryszard Glab <rglab//imid.med.pl>
|
|
* include/hbexpra.c
|
|
* include/hbexprb.c
|
|
* include/hbexprc.c
|
|
* include/hbexprop.h
|
|
* source/common/expropt1.c
|
|
* source/compiler/expropta.c
|
|
* source/compiler/exproptb.c
|
|
* source/compiler/exproptc.c
|
|
* source/compiler/harbour.c
|
|
* source/compiler/harbour.y
|
|
* source/macro/macro.y
|
|
* source/macro/macroa.c
|
|
* source/macro/macrob.c
|
|
* source/macro/macroc.c
|
|
* source/vm/hvm.c
|
|
+ added support for passing methods as macro
|
|
eg:
|
|
o:&send()
|
|
o:&send.end()
|
|
o:&(expr)()
|
|
o:&var++
|
|
o:&var := 0
|
|
o:&(expr)++
|
|
WITH OBJECT obj
|
|
++:&var
|
|
:&var += :&(var2+"oo")
|
|
END
|
|
|
|
+ tests/omacro.prg
|
|
+ sample file to test the new syntax
|
|
|
|
NOTICE:
|
|
For simple assigments (=,:=), compound assignments (+=,-=,*=,/=)
|
|
and for pre/post increment operators( ++,--) the macro should
|
|
evaluate to a symbol that starts with underscore '_'.
|
|
To access a variable the macro should evaluate to a symbol
|
|
with no '_' char.
|
|
|
|
2006-09-28 23:55 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
|
* harbour/include/common.ch
|
|
- removed ISSYMBOL()
|
|
* harbour/source/rtl/tclass.prg
|
|
* use valtype() instead of IS*()
|
|
* some minor modifications
|
|
|
|
* harbour/source/vm/hvm.c
|
|
* minor modification
|
|
|
|
2006-09-28 14:40 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
|
* harbour/include/hbclass.ch
|
|
* updated some not enabled by default rules to use function pointers
|
|
instead of function names which I forgot to update in previous
|
|
commit
|
|
|
|
2006-09-28 14:30 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
|
* harbour/include/common.ch
|
|
+ added ISSYMBOL()
|
|
|
|
* harbour/include/hbextern.ch
|
|
- removed __CLS_PARAM()
|
|
|
|
* harbour/include/hbclass.ch
|
|
* harbour/source/rtl/tclass.prg
|
|
* harbour/source/vm/classes.c
|
|
* replaced __CLS_PAR00() and __CLS_PARAM() functions by preprocessor
|
|
rules. These functions are not longer necessary though I left them
|
|
in classes.c for backward binary compatibility. Probably they will
|
|
be removed in the future.
|
|
! use function pointers (@<funcname>()) instead of function names
|
|
with REQUEST for super classes ID. It fixes using STATIC class
|
|
functions.
|
|
|
|
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-26 17:00 UTC+0100 Ryszard Glab <rglab//imid.med.pl>
|
|
* include/hbexprb.c
|
|
* source/compiler/exproptb.c
|
|
* source/compiler/harbour.y
|
|
*added support for passing the reference to object's variable
|
|
e.g.
|
|
foo( @obj:var )
|
|
|
|
2006-09-24 21:10 UTC+0300 Alexander Kresin <alex@belacy.belgorod.su>
|
|
* source/rtl/cdpapi.c
|
|
* Restored hb_CdpList(), deleted accidentally while last commit.
|
|
|
|
2006-09-23 19:58 UTC+0300 Alexander Kresin <alex@belacy.belgorod.su>
|
|
* source/rtl/cdpapi.c
|
|
! Bugs fixed in hb_cdpcmp()
|
|
|
|
2006-09-23 14:35 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
|
* harbour/source/vm/itemapi.c
|
|
* minor modification in function order to group together the ones
|
|
which can operate on reference counters
|
|
+ added additional stop condition in hb_itemUnRef() - we will have
|
|
to make some modifications for the code which execute hb_itemUnRef()
|
|
to resolve some possible conflicts with operators overloading and
|
|
compiler optimizations
|
|
|
|
* harbour/source/vm/classes.c
|
|
* do not inherit friends - seems that our classes code was too
|
|
friendly ;-)
|
|
It also effectively resolves logical problem with accessing
|
|
overloaded non virtual methods from friends.
|
|
+ added __clsLock( <hClass> ) - it locks any farther class
|
|
modifications and can be used if programmer wants to be sure
|
|
that no one will try to hack his class definition. It's very
|
|
important when programmers work in a team on bigger project.
|
|
Please do not add to CVS any __clsUnLock() functions - if someone
|
|
needs it then he can create his own custom HVM build.
|
|
* code cleanup
|
|
|
|
* harbour/source/vm/eval.c
|
|
+ added hb_execFromArray() - idea and syntax borrowed from xHarbour's
|
|
HB_ExecFromArray() by Giancarlo Niccolai though it's independent
|
|
implementation. Now when we have support for functions with variable
|
|
number of parameters then we need sth like this function to fully
|
|
benefit from new feature. The following syntax is supported:
|
|
hb_execFromArray( <cFuncName> [, <aParams> ] )
|
|
hb_execFromArray( @<funcName>() [, <aParams> ] )
|
|
hb_execFromArray( <bCodeBlock> [, <aParams> ] )
|
|
hb_execFromArray( <oObject> , <cMethodName> [, <aParams> ] )
|
|
hb_execFromArray( <oObject> , @<msgName>() [, <aParams> ] )
|
|
or:
|
|
hb_execFromArray( <aExecArray> )
|
|
where <aExecArray> is in one of the following format:
|
|
{ <cFuncName> [, <params,...>] }
|
|
{ @<funcName>() [, <params,...>] }
|
|
{ <bCodeBlock> [, <params,...>] }
|
|
{ <oObject> , <cMethodName> [, <params,...>] }
|
|
{ <oObject> , @<msgName>() [, <params,...>] }
|
|
|
|
* harbour/source/rtl/symbol.prg
|
|
* removed C code inside #pragma BEGINDUMP/ENDDUMP
|
|
now it's only .prg code which uses variable parameters function
|
|
and hb_execFromArray()
|
|
|
|
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-21 12:05 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
|
* harbour/source/vm/itemapi.c
|
|
% minor optimization in hb_itemParam()
|
|
! fixed enumerator variable clearing in hb_itemCopy()
|
|
|
|
2006-09-21 09:52 UTC+0100 Viktor Szakats (viktor.szakats syenar.hu)
|
|
* harbour/source/common/expropt2.c
|
|
! Fixed leak introduced in previous commit.
|
|
|
|
2006-09-20 23:17 UTC+0100 Viktor Szakats (viktor.szakats syenar.hu)
|
|
* harbour/include/hbexprb.c
|
|
* harbour/include/hbexprop.h
|
|
* harbour/source/common/expropt2.c
|
|
% Compile-time optimization added for expressions below:
|
|
SToD(""), SToD(), HB_SToD(<cDate>), HB_SToD(""), HB_SToD()
|
|
! Tabs converted to spaces.
|
|
|
|
* harbour/source/common/hbdate.c
|
|
* harbour/source/rtl/dates.c
|
|
* Copyright cosmetic cleanup.
|
|
|
|
2006-09-20 21:02 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
|
* harbour/source/vm/codebloc.c
|
|
! fixed detaching locals in variable parameters functions
|
|
|
|
2006-09-20 20:22 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
|
* harbour/contrib/rdd_ads/ads1.c
|
|
! fixed casting for C++ compilation
|
|
|
|
* harbour/source/compiler/harbour.c
|
|
! fixed removing locals frame - bSkipFrame was not initialized
|
|
|
|
* harbour/include/hbapi.h
|
|
* harbour/source/vm/estack.c
|
|
* harbour/source/vm/hvm.c
|
|
* harbour/source/vm/itemapi.c
|
|
* harbour/source/vm/proc.c
|
|
* moved current line number information from hb_struSymbol
|
|
to current stack state to keep 16 bytes size for HB_ITEM
|
|
on 32bit systems with 4 bytes alignment
|
|
|
|
2006-09-20 18:40 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
|
* harbour/contrib/rdd_ads/ads1.c
|
|
* synced with recent xHarbour fixes
|
|
|
|
* harbour/include/hbdefs.h
|
|
* indenting
|
|
|
|
* harbour/include/hbexprb.c
|
|
* harbour/include/hbexprop.h
|
|
* harbour/source/common/expropt2.c
|
|
+ added compile time optimization for STOD(cConstDateString)
|
|
covered by -kh compiler extension (default)
|
|
It allows to keep the same source code for Clipper and
|
|
Harbour and benefits from data constants without using
|
|
0dYYYYMMDD values
|
|
|
|
* harbour/source/vm/classes.c
|
|
* restored the original 3-rd parameter in hb_clsAdd to void(void) -
|
|
PHB_FUNC - and added translation for PHB_SYMB to not force using
|
|
[P]HB_SYMB in 3-rd party code
|
|
|
|
* harbour/source/vm/estack.c
|
|
* added protection against possible GPF after executing
|
|
hb_stackBaseProcOffset() when first item on the stack
|
|
was not HB_IT_SYMBOL - it can happen in some seldom
|
|
cases. Probably some more general solution like leaving
|
|
first dummy item on HVM stack for breaking stack scan
|
|
loops will be better. I'll think about it.
|
|
|
|
* harbour/source/vm/itemapi.c
|
|
! fixed clearing enumerators
|
|
|
|
2006-09-20 14:15 UTC+0100 Ryszard Glab <rglab//imid.med.pl>
|
|
* include/hbpcode.h
|
|
+ added new pcode HB_P_VFRAME
|
|
|
|
* include/hbapi.h
|
|
+ added USHORT paramdeclcnt to asSymbol structure
|
|
|
|
* include/hbstack.h
|
|
* source/vm/estack.c
|
|
+ added hb_stackLocalVariable() to acces local variables
|
|
|
|
* source/compiler/genc.c
|
|
* source/compiler/gencc.c
|
|
* source/compiler/harbour.c
|
|
* source/compiler/harbour.l
|
|
* source/compiler/harbour.y
|
|
* source/compiler/hbdead.c
|
|
* source/compiler/hbfix.c
|
|
* source/compiler/hblbl.c
|
|
* source/compiler/hbpcode.c
|
|
* source/compiler/hbstripl.c
|
|
* source/vm/hvm.c
|
|
+ added support for variable number of parameters in
|
|
functions/procedures
|
|
|
|
+ tests/varparam.prg
|
|
* example usage of new syntax for variable number of
|
|
parameters
|
|
|
|
* source/vm/arrayshb.c
|
|
* changed HB_APARAMS() to use current stack frame if no
|
|
arguments are passed ( HB_APARAMS() == HB_APARAMS(0) )
|
|
|
|
SYNTAX for variable number of parameters
|
|
1) [FUNCTION|PROCEDURE] name( ... )
|
|
or
|
|
2) [FUNCTION|PROCEDURE] name( var1, var2, varN, ... )
|
|
|
|
To access passed parameters use the following:
|
|
PCOUNT() - returns number of passed parameters
|
|
HB_PVALUE( iParamNum ) - returns <iParamNum> parameter
|
|
HB_APARAMS() - returns array with all passed parameters
|
|
or usual name of parameter variable in case of syntax 2)
|
|
|
|
|
|
2006-09-19 18:40 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
|
* harbour/include/hbexprb.c
|
|
* harbour/source/vm/hvm.c
|
|
+ added support to compiler for sending messages with multi
|
|
parameters resolved by macro operator: s:="1,2,3"; o:msg(&s)
|
|
It works just like for functions and it also needs XBASE extension
|
|
support enabled during compilation, -kx switch in compiler, it's
|
|
enabled by default.
|
|
|
|
* harbour/source/rdd/usrrdd/usrrdd.c
|
|
! added missing DBOI_* index in parameters passed to user ORDINFO()
|
|
method.
|
|
|
|
2006-09-19 11:50 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
|
* harbour/include/hbapi.h
|
|
* harbour/include/hbapicls.h
|
|
* harbour/include/hbpcode.h
|
|
* harbour/include/hbxvm.h
|
|
* harbour/source/compiler/genc.c
|
|
* harbour/source/compiler/gencc.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/arrays.c
|
|
* harbour/source/vm/classes.c
|
|
* harbour/source/vm/codebloc.c
|
|
* harbour/source/vm/hvm.c
|
|
* harbour/source/vm/itemapi.c
|
|
+ added three new PCODEs:
|
|
HB_P_MACROSEND - to use for: s:=1,2,3"; o:=send(&s)
|
|
HB_P_PUSHOVARREF - to create references to object variables: @o:var
|
|
HB_P_ARRAYPUSHREF - to create references to array items, it can be used
|
|
in some optimization, f.e.: a[ <exp1> ] += <exp2>
|
|
or directly by: func( @a[ <exp> ] )
|
|
if we add passing array elements by reference
|
|
Implemented in HVM and PCODE generation, the compiler has to be
|
|
modified yet to use them.
|
|
* changed last parameter in hb_codeblockGetRef() - I'd like to have
|
|
all variables in hb_struRefer structure in one place: hb_itemUnRefOnce()
|
|
for easier modifications in the future.
|
|
* replaced in hb_struRefer 'itemsbase' with 'array'.
|
|
+ added hb_arrayGetItemRef() to create references to array elements.
|
|
Such reference updates array reference counters.
|
|
* changed STATICs passed by reference to use new array item references.
|
|
! block destructor execution after classy releasing on HVM exit
|
|
|
|
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 02:00 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
|
* harbour/source/vm/classes.c
|
|
+ added hb_clsRealMethodName() function which I'm using in some
|
|
test code
|
|
|
|
* harbour/tests/clsscast.prg
|
|
* updated to use __CLS_CNTSHRDATA() instead of __CLS_CNTCLSDATA()
|
|
|
|
* harbour/utils/hbtest/rt_class.prg
|
|
+ added tests for class and shared class variables/allocating
|
|
|
|
2006-09-17 18:52 UTC+0100 Viktor Szakats (viktor.szakats syenar.hu)
|
|
* harbour/tests/testrpt.prg
|
|
! Fixed fatal typo.
|
|
|
|
2006-09-17 18:45 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
|
* xharbour/include/hbvm.h
|
|
* xharbour/source/vm/hvm.c
|
|
+ added hb_vmPushDynSym( PHB_DYNS )
|
|
It should allow most applications to not use [P]HB_SYMB at all.
|
|
Removing PHB_SYMB from 3-rd party .c code may allow us to add
|
|
freeing unused symbol tables from HVM in the future.
|
|
|
|
* harbour/source/vm/classes.c
|
|
* temporary restored hb_objGetpMethod()
|
|
+ added __ClsCntClasses()
|
|
! allocated real methods for OnError and Destructor to keep
|
|
the same behavior in these methods as in any others, f.e.
|
|
scoping checking or debugging.
|
|
|
|
* harbour/common.mak
|
|
* harbour/utils/hbtest/Makefile
|
|
* harbour/utils/hbtest/hbtest.prg
|
|
+ harbour/utils/hbtest/rt_class.prg
|
|
+ added tests for our classy code. Now destructors and instance
|
|
area allocating/casting. Some other in the future.
|
|
|
|
2006-09-16 23:20 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
|
* harbour/contrib/rdd_ads/ads1.c
|
|
* synced with recent Brian fixes in xHarbour
|
|
|
|
* harbour/include/hbapi.h
|
|
+ added 'method' member to hb_struBlock structure
|
|
|
|
* harbour/source/vm/hvm.c
|
|
* initialize 'method' member in hb_struBlock structure
|
|
|
|
* harbour/source/vm/proc.c
|
|
* changed the name of last parameter of hb_procname() from
|
|
bSkipBlock to fMethodName and modified to use information
|
|
about the class of executed codeblock from new hb_struBlock
|
|
members
|
|
|
|
* harbour/source/vm/classes.c
|
|
* removed hb_objGetpMethod() - I hope it's not longer used
|
|
* added real codeblock scoping.
|
|
In Clipper there is no information where the codeblock where
|
|
created and what priviladges/scopes it should has.
|
|
Class(y) to resovle this problem when codeblock is executed scans
|
|
the HVM stack for the nearest method call and takes scopes defined
|
|
for this method. It's a workaround which allow to break standard
|
|
access rights though seems reasonable when it's not possible to
|
|
store information where the block is created. I've added to block
|
|
item structure information about class and method where code block
|
|
was created so we can use the exact method priviladges.
|
|
Now Harbour classy code can work exactly like Class(y) when compiled
|
|
with -DHB_CLASSY_BLOCK_SCOPE and with real code block scoping when
|
|
compiled with -DHB_REAL_BLOCK_SCOPE. I set the second (real code
|
|
block scopes) as default. If you think we should be strict Class(y)
|
|
compatible here then please inform me and I'll change default setting.
|
|
|
|
+ tests/clsscope.prg
|
|
+ added demonstration/test code for class method scoping
|
|
|
|
2006-09-15 21:15 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
|
* harbour/source/vm/arrays.c
|
|
* harbour/source/vm/classes.c
|
|
! fixed multiple use of supercasted object I broke in last commit
|
|
* removed some unused code and moved some scoping checking to
|
|
class creation code
|
|
|
|
2006-09-15 13:25 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
|
* harbour/include/hbvm.h
|
|
* harbour/source/vm/classes.c
|
|
* harbour/source/vm/hvm.c
|
|
+ added hb_vmRequestReenter() and hb_vmRequestRestore()
|
|
+ added executing destructors when some exception is active
|
|
I forgot about it in previous commit.
|
|
|
|
+ harbour/tests/destruct.prg
|
|
+ added example/test code for object destructors
|
|
|
|
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-14 15:23 UTC+0100 Viktor Szakats (viktor.szakats syenar.hu)
|
|
* harbour/tests/testlbl.prg
|
|
! use lower name in report name to work properly on case sensitive
|
|
file systems
|
|
|
|
2006-09-14 15:10 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
|
* harbour/source/vm/garbage.c
|
|
* minor cleanup
|
|
|
|
* harbour/source/rtl/cdpapi.c
|
|
* harbour/include/hbextern.ch
|
|
+ added HB_CDPLIST() - it returns array with all registered CODEPAGEs
|
|
|
|
* harbour/source/rtl/set.c
|
|
! fixed typo in _SET_DEFEXTENSIONS
|
|
|
|
* harbour/tests/testrpt.prg
|
|
! fixed syntax
|
|
! use lower name in report name to work properly on case sensitive
|
|
file systems
|
|
|
|
2006-09-13 20:35 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
|
* harbour/include/hbvm.h
|
|
* harbour/source/vm/hvm.c
|
|
* harbour/source/vm/itemapi.c
|
|
+ added __enumStop() message for "FOR EACH" overloading
|
|
It's guarantied that it will be sent to base item if it is an
|
|
object with such message when FOR EACH ... NEXT will finish its job
|
|
even if it will be interrupted by EXIT or RETURN to allow base object
|
|
clear resources allocated for FOR EACH enumerator. The BREAK exception
|
|
is not supported now. This is sth what I'd like to discuss soon when
|
|
I'll add destructors. Please think now if we should allow to execute
|
|
destructors and other cleanup user code when we are returning to
|
|
nearest expection trap (BEGIN SEQUENCE / [ RECOVER /] END) cleaning
|
|
the HVM stack.
|
|
|
|
2006-09-13 14:00 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
|
* harbour/source/compiler/genc.c
|
|
* harbour/source/compiler/gencli.c
|
|
* harbour/source/compiler/harbour.c
|
|
! fixed number of compiled functions shown in compilation status
|
|
! added workaround for GPF in empty #pragma begindump/enddump
|
|
statement
|
|
|
|
2006-09-13 03:10 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
|
* harbour/source/vm/classes.c
|
|
* keep class shared data in separate array
|
|
+ added __CLS_CNTSHRDATA( hClass ) -> nSharedDatas
|
|
% some minor optimizations
|
|
|
|
* harbour/tests/clsscast.prg
|
|
+ added test code for shared class data allocating and casting
|
|
|
|
* harbour/include/hbapicls.h
|
|
* harbour/source/vm/hvm.c
|
|
* harbour/source/vm/itemapi.c
|
|
+ added support for FOR EACH overloading - it's work in progress
|
|
do not create any code which may use current solution - it may
|
|
change in the nearest future
|
|
|
|
2006-09-12 14:48 UTC+0300 Alexander Kresin <alex@belacy.belgorod.su>
|
|
* source/rtl/cdpapi.c
|
|
! Bug fixed
|
|
|
|
2006-09-12 12:37 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
|
* harbour/source/vm/classes.c
|
|
! fixed typo in adding SHARED CLASS VAR ASSIGN messages
|
|
* some minor cleanup
|
|
|
|
2006-09-11 20:10 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
|
* harbour/include/hbapicls.ch
|
|
* added HB_EXPORT to public functions and some internal covered by
|
|
_HB_API_INTERNAL_ macro
|
|
|
|
* harbour/include/hboo.ch
|
|
+ added HB_OO_CLSTP_NONVIRTUAL and HB_OO_CLSTP_OVERLOADED
|
|
|
|
* harbour/source/rtl/tclass.prg
|
|
! do not add supercast class messages - now it's done automatically
|
|
by __clsNew() function with proper instance area offset updating
|
|
! enumerate instance class datas in __clsAddMsg() from 1 - inherited
|
|
instance variables are managed internally by classy code with
|
|
proper instance area offset updating
|
|
! use __CLS_CNTCLSDATA() as start offset for class data. Do not
|
|
try to calculate it yourself - some of super classes can be ignored
|
|
when they are appear in the inheritance tree more then once so it's
|
|
not possible to calculate class data or instance data start offset
|
|
using simple sum of class or instance variables in super classes.
|
|
|
|
* harbour/source/vm/classes.c
|
|
! fixed instance area casting
|
|
! fixed class variables casting
|
|
! fixed multi-inheritance when the same class can apear more then
|
|
once in super classes tree.
|
|
! Do not add unnecessary instance variables for the same class when
|
|
it's inherited more then once.
|
|
! Do not add unnecessary class variables for the same class when
|
|
it's inherited more then once.
|
|
! Do not add unnecessary initialization class and instance variables
|
|
+ added support for non virtual messages
|
|
+ added support for static and casted scoping
|
|
+ super cast messages added automatically. They are used to dynamic
|
|
recalculation of instance are offsets and to avoid multiple inheritance
|
|
of the same class so please do not overload them or you will have as
|
|
result something what we have before recent modifications in the
|
|
instance and class data area. Just simply run tests/clsccast.prg
|
|
and tests/clsicast.prg compiled with current CVS code and last
|
|
release code or with xHarbour and compare the results.
|
|
Also Class(y) does not pass these tests and I do not know if any
|
|
other dynamic OOP model in xbase languages can properly address it.
|
|
BTW maybe I should add RT error when .prg code will try to delete
|
|
or overwrite class cast message. For me it seems to be reasonable
|
|
and what's your opinion?
|
|
* make hidden class members non virtual by default. It can be disabled
|
|
by compiling classes.c with -DHB_VIRTUAL_HIDDEN but IMHO keeping
|
|
HIDDEN members as virtual causes that they are not really HIDDEN
|
|
because subclasses can simply overwrite them. It also means that
|
|
it's not possible to create class with some private data and
|
|
methods which will never interact with any subclass code created
|
|
by other programmers where name conflict can appear. So one of
|
|
the most important OOP features is missing in such case.
|
|
See tests/clsnv.prg as an example for non virtual hidden members.
|
|
|
|
+ tests/clsicast.prg
|
|
+ added test code for proper instance area allocating and casting
|
|
|
|
+ tests/clsccast.prg
|
|
+ added test code for proper class data allocating and casting
|
|
|
|
+ tests/clsnv.prg
|
|
+ added test code for non virtual hidden class members
|
|
|
|
Now we should be able to create and class model even replicate the
|
|
static one like in C++ using current class engine which still fully
|
|
supports dynamic bindings. It consumes less memory and due to much
|
|
more efficient hashing it should be faster then it was though some
|
|
other minor optimization can be add and I'll plan to make them in
|
|
some spare time.
|
|
The item type verification in assignment is still missing. I'll add
|
|
it when I'll collect some statistic informantion I'd like to ask
|
|
[x]Harbour users. I need these information to tune some internal
|
|
structures where I can balance between speed and memory allocation
|
|
to statistically optimal form.
|
|
|
|
Marek asked me to add passing object datas by reference and I'll do
|
|
that but I'd like to ask Ryszard to add support for:
|
|
@<oVar>:<message>
|
|
to compiler. I'll implement all other HVM modifications. If you can
|
|
please also add support for:
|
|
<oVar>:&<cMsgName>[(...)]
|
|
For this we do not need any HVM modifications or new PCODEs.
|
|
We are supporting xBase++ macro list compilation in:
|
|
cList:="1,2,3"
|
|
x := aVar[ &cList ]
|
|
aVar:={ &cList }
|
|
func( &cList )
|
|
But we do not support:
|
|
<oVar>:<message>( &cList )
|
|
IMHO it looks ugly. If we have this syntax for function call then we
|
|
should also support it in message sending.
|
|
Ryszard can you make necessary compiler modifications?
|
|
I'm also thinking about adding support for variable parameters
|
|
func myfunc(...)
|
|
[...]
|
|
return xVar
|
|
In few cases it will help to encode some function much more efficient
|
|
then now.
|
|
|
|
I'll add Class(y) compatible functions used in class(y) header files
|
|
so it will be possible to use original class(y) .ch files in Harbour
|
|
though it will not be the most efficient because we have @func() operator
|
|
which gives better performance then using codeblocks. Anyhow classy
|
|
create separate meta class for each class with CLASS members and
|
|
<clasName>() function always return such meta class object so for full
|
|
Class(y) compatibility we need to generate differ .prg code.
|
|
But all such modifications now can be done on preprocessor and
|
|
.prg level and they will not need .c code modification.
|
|
We should make them to give user interface for our new OOP features.
|
|
|
|
Now I'm waiting for reports about any problems with current classy
|
|
code.
|
|
|
|
2006-09-11 20:30 UTC+0300 Alexander Kresin <alex@belacy.belgorod.su>
|
|
* source/vm/itemapi.c
|
|
! Bug fixed, which was introduced while last commit
|
|
|
|
2006-09-11 16:40 UTC+0300 Alexander Kresin <alex@belacy.belgorod.su>
|
|
* include/hbapicdp.h
|
|
* Changed declaration of hb_cdpcmp() function
|
|
* source/rtl/cdpapi.c
|
|
* hb_cdpcmp() has been changed. It accepts now additional parameters:
|
|
hb_cdpcmp( char* szFirst, ULONG ulLenFirst, char* szSecond, ULONG ulLenSecond, PHB_CODEPAGE cdpage, BOOL bExact ),
|
|
also some bugs fixed.
|
|
* source/vm/itemapi.c
|
|
* source/rdd/dbfntx/dbfntx1.c
|
|
* Calls of hb_cdcmp() has been changed.
|
|
|
|
2006-09-10 14:28 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
|
* harbour/source/vm/classes.c
|
|
* cleaned BCC warning
|
|
|
|
2006-09-10 14:02 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
|
* harbour/ChangeLog
|
|
! added missing changelog entry about __MVPUT() fix
|
|
|
|
* harbour/source/vm/itemapi.c
|
|
* removed redundant pItem->type = HB_IT_NIL (thanks for Manu Exposito)
|
|
|
|
2006-09-10 14:02 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
|
* harbour/ChangeLog
|
|
! added missing changelog entry about __MVPUT() fix
|
|
|
|
* harbour/source/vm/itemapi.c
|
|
* removed redundant pItem->type = HB_IT_NIL (thanks for Manu Exposito)
|
|
|
|
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-07 16:05 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
|
* harbour/source/vm/memvars.c
|
|
! fixed memvar creation in __MVPUT()
|
|
|
|
2006-09-07 01:55 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
|
* harbour/source/rdd/dbcmd.c
|
|
! always initialize all members in RDD structures to avoid GPF when
|
|
some RDD will try to access uninitialized data
|
|
|
|
* harbour/source/rdd/usrrdd/usrrdd.c
|
|
! added some additional validation in RDD structures <-> item conversions
|
|
|
|
2006-09-06 14:45 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
|
* harbour/source/vm/itemapi.c
|
|
* modified hb_itemClear() to be reentrant safe - the new version
|
|
can be also better optimized by C compiler so should be also faster
|
|
|
|
* harbour/source/rdd/dbcmd.c
|
|
! initialize lpdbOrdCondInfo in DBORDERINFO structure before
|
|
passing to ORDCREATE()
|
|
|
|
* harbour/source/vm/fm.c
|
|
! fixed typo in memset() when HB_PARANOID_MEM_CHECK enabled
|
|
|
|
* harbour/source/vm/hvm.c
|
|
! fixed item type used for iterator
|
|
|
|
2006-09-06 12:02 UTC+0300 Chen Kedem <niki@actcom.co.il>
|
|
* utils/hbrun/hbrun.prg
|
|
* Change Main() into _APPMAIN() to avoid collision with user function
|
|
in HRB file with that name.
|
|
+ Added a NOTE about this.
|
|
|
|
2006-09-05 16:10 UTC+0300 Alexander Kresin <alex@belacy.belgorod.su>
|
|
* source/rtl/cdpapi.c
|
|
! Bug fixed in hb_cdpcmp(), which caused strange comparison results as
|
|
( s1 > s2 ) != ( s2 > s1 ).
|
|
|
|
2006-09-05 15:51 UTC+0100 Viktor Szakats (viktor.szakats syenar.hu)
|
|
* harbour/include/hbset.h
|
|
* harbour/include/set.ch
|
|
* harbour/source/pp/pptable.c
|
|
* harbour/source/rtl/set.c
|
|
+ Added Set( _SET_DEFEXTENSIONS, <logical: .T./.F.> )
|
|
Default value is .T. (CA-Cl*pper compatible). If set to .F.,
|
|
Harbour runtime/RDD code will never attempt to add a
|
|
default extension to the filename arguments. Commands/functions
|
|
where this setting makes a difference are:
|
|
- SET ALTERNATE TO / Set( _SET_ALTFILE_, ... )
|
|
- SET PRINTER TO / Set( _SET_PRINTFILE_, ... )
|
|
- Set( _SET_EXTRAFILE, ... )
|
|
- SAVE TO / __mvSave()
|
|
- RESTORE FROM / __mvRestore()
|
|
- LABEL FORM
|
|
- REPORT FORM
|
|
- COPY TO ... DELIMITED
|
|
- COPY TO ... SDF
|
|
- LIST / __dbList()
|
|
- USE / dbUseArea()
|
|
- dbCreate()
|
|
- SET INDEX TO / ordListAdd() (not yet implemented)
|
|
- __HRBLOAD(), __HRBRUN()
|
|
; Notes:
|
|
- From now on, it possible to create/load files using the
|
|
above functions/commands which have no extension. This
|
|
might be desirable in a few platform and/or situations.
|
|
For example on Win32, it's possible to directly print
|
|
to a shared Windows printer queue, using these commands:
|
|
lOldValue := Set( _SET_DEFEXTENSIONS, .F. )
|
|
SET PRINTER TO \\myserver\myprinter
|
|
Set( _SET_DEFEXTENSIONS, lOldValue )
|
|
Or, it is possible to open a dbf file which has no extension:
|
|
dbUseArea(.T., NIL, "dbf_filename_with_no_extension", "w_DATA", .F., .F.)
|
|
- Compiler is (of course) not affected by this setting.
|
|
- Preprocessor (PP) lib flavour is not affected by this setting.
|
|
- Support is not full in the RDD code yet.
|
|
|
|
* harbour/source/rdd/dbf1.c
|
|
* harbour/source/rdd/dblist.prg
|
|
* harbour/source/rdd/delim1.c
|
|
* harbour/source/rdd/sdf1.c
|
|
* harbour/source/rtl/tlabel.prg
|
|
* harbour/source/rtl/treport.prg
|
|
* harbour/source/rtl/set.c
|
|
* harbour/source/vm/memvars.c
|
|
* harbour/source/vm/runner.c
|
|
+ Honoring _SET_DEFEXTENSIONS setting all over the code.
|
|
|
|
2006-09-05 12:44 UTC+0100 Viktor Szakats (viktor.szakats syenar.hu)
|
|
* harbour/source/debug/debugger.prg
|
|
! Fixed and made multiplatform the filename extension handling parts.
|
|
|
|
* harbour/source/vm/memvars.c
|
|
! Comment minor fixes.
|
|
|
|
* harbour/harbour.spec
|
|
* harbour/make_xmingw.sh
|
|
* harbour/make_bsd.sh
|
|
* harbour/make_drw.sh
|
|
! xharbour -> harbour
|
|
|
|
2006-09-04 19:45 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
|
* harbour/TODO
|
|
+ added simpler example for memory leak in macro compiler:
|
|
? type("user input")
|
|
|
|
* harbour/source/macro/macro.y
|
|
* replaced TABs with SPACEs
|
|
|
|
* harbour/source/vm/classes.c
|
|
* added some TRACE() messages
|
|
+ added support for executing functions with <symItem>:EXEC()
|
|
registered dynamically after creating <symItem>
|
|
|
|
* harbour/source/vm/hvm.c
|
|
* minor modification
|
|
|
|
2006-09-04 18:10 UTC+0100 Viktor Szakats (viktor.szakats syenar.hu)
|
|
* harbour/source/rtl/tlabel.prg
|
|
* harbour/source/rtl/treport.prg
|
|
! Made the logic multiplatform where it's decided whether to
|
|
add a default extension to the loaded filename.
|
|
C:\PATH.A\MYFILE didn't get the default extension while
|
|
C:\PATH\MYFILE did.
|
|
|
|
2006-09-04 11:40 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
|
* harbour/include/hbexprc.c
|
|
! fixed bug in wrong integer negating, f.e.:
|
|
proc main(); local i:=0; i-=-32768; ? i; return
|
|
! fixed PCODE generated for +=, -=, /=, *= expressions when right side
|
|
of expression is undefined variable - it's possible that it will be
|
|
field and we will have RT error. It fixes tt4.prg example form TODO
|
|
file.
|
|
|
|
* harbour/TODO
|
|
- removed tt4.prg example from TOFIX
|
|
|
|
* harbour/source/vm/classes.c
|
|
! fixed supercast message validation
|
|
|
|
* harbour/source/vm/hvm.c
|
|
! fixed very bad typo in hb_vmMinus() which can cause wrong
|
|
results when on 64-bit integer overflow
|
|
|
|
2006-09-04 09:25 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
|
* harbour/ChangeLog
|
|
+ harbour/ChangeLog.016
|
|
! added ChangeLog.016 and updated number - mistake in my previous commit
|
|
|
|
* harbour/source/vm/classes.c
|
|
* stronger parameters validation and fixed some possible problems
|
|
in hb_objGetMethod()
|
|
+ added support for assigning enumerator value by:
|
|
<enum>:__enumValue(<newVal>)
|
|
and enumerator index by:
|
|
<enum>:__enumIndex(<newIndex>)
|
|
It's a work in progress - please do not create any code which may
|
|
need such functionality yet
|
|
|
|
* harbour/source/vm/debug.c
|
|
* harbour/source/vm/hvm.c
|
|
* minor code cleanup
|
|
|
|
2006-09-03 18:55 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
|
* harbour/include/hbapicls.h
|
|
* harbour/source/vm/classes.c
|
|
* harbour/source/vm/hvm.c
|
|
* harbour/tests/overload.prg
|
|
+ added support for overloading [] in assignment operation
|
|
|
|
2006-09-03 16:30 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
|
|
* harbour/ChangeLog
|
|
+ harbour/ChangeLog.016
|
|
* new ChangeLog file created
|
|
* harbour/include/hbver.h
|
|
* updated version number to 0.47.0
|
|
* tagged CVS as build47
|