* source/compiler/harbour.sly
+ Added support for early macro of expansion declared symbol for simple macro expression within CodeBlock (Like Clipper).
* source/rtl/tgetint.prg
! Corrected creation of bSetGet if uVar == NIL, to avoid compile error:
"Code block contains both macro and declared symbol references".
* include/hberrors.h
+ Added: #define HB_COMP_ERR_BLOCK 47
* source/compiler/hbgenerr.c
+ Added Error: "Code block contains both macro and declared symbol references"
* source/compiler/harbour.c
* Made public: hb_compLocalGetPos() and hb_compStaticGetPos()
* source/compiler/harbour.slx
+ Added: char * hb_comp_SLX_LastBlock( BOOL bReset )
* source/compiler/harbour.sly
+ Added logic to support Early Expansions of Macro within CodeBlock unless parenthesized.
+ tests/tstblock.prg
+ New test of Early/Late expansion of Macros within CodeBlocks.
* source/compiler/cmdcheck.c
* utils/hbpp/hbpp.c
+ Added support for complex Command Line #defines
* source/pp/ppcore.c
* Renamed ParseDefine() to hb_pp_ParseDefine() and made it public.
* source/compiler/harbour.sly
+ Added rule to accept Get and GetA as FunCall
* source/compiler/harbour.y
+ Added support for pseudo function _GET_()
* source/compiler/harbour.l
+ Added _GET_(...) => __GET(...)/__GETA(...) logic from harbour.sly
* source/macro/macro.slx
* Corrected YY_DECL #define (Thanks John)
* source/rtl/tget.prg
* include/hbextern.ch
- Removed no longer needed _GET_()
* source/compiler/harbour.sly
+ Added support for extended parameters to __GET() and __GETA()
! Corrected 2nd parameter of __GETA() to reflect only the Base Array Name.
* source/rtl/tget.prg
! Added support for :SubScript in __GETA()
* include/hbextern.ch
- Removed _GET_
+ Added __GETA
* source/compiler/harbour.sly
! Optimized _GET_ support.
+ Added support for GET of ObjectData and ObjectData ArrayIndex.
* source/rtl/tget.prg
+ Added method ParsePict() and logic to support dynamic modification of the picture by altering :Picture as in Clipper.
* tests/testread.prg
+ Added line to demonstrate GET of ObjectData and dynamic modification of a PICTURE clause.
* source/compiler/harbour.slx
+ Added support for pseudo function _GET_(...)
* source/compiler/harbour.sly
+ Added support for pseudo function _GET_(...) to be converted into appropriate __GET(...) or __GETA(...)
* source/rtl/tget.prg
+ Added __GETA() to correctly support early binding of Array Element Index of GET
* tests/testread.prg
+ Added code to test correct (early) binding of Array Element Index of GET
* source/compiler/genc.c
* source/compiler/genhrb.c
* source/compiler/genjava.c
* source/compiler/genobj32.c
* source/compiler/harbour.c
* source/compiler/harbour.l
* source/compiler/harbour.slx
* source/compiler/harbour.sly
* source/compiler/harbour.y
- Removed License Exception from core compiler files that are not part of HVM or HRL
/* Dave, could you please verify this is correct. */
* source/compiler/hbpcode.c
* Corrected 1 compiler warning.
* source/pp/ppcomp.c
* Cleaned-up and corrected bug when rules files had an #include directive.
+ Added CloseInclude() and moved relevant logic into it.
* source/pp/ppcore.c
- Removed unused s_iIncludes, and hb_pp_nEmptyStrings
* utils/hbpp/hbpp.c
+ Added local hb_pp_nEmptyStrings to hb_pp_Parse()
* source/compiler/harbour.l
! Corrected definition of _PROCREQ_()
* tests/testdecl.prg
- Removed 1 line of unspported syntax.
* source/macro/macro.slx
* source/compiler/harbour.slx
% Greatly optimized, much simplified, smaller, and faster.
! Converted all "non conventional" macros to functions.
* source/compiler/simplex.c
% Greatly optimized, now as fast as Flex based lexer.
! Converted all "non conventional" macros to functions.
+ Added support for predefind match pattern, {WS} (White Space), in KEYWORDS and WORDS.
+ source/compiler/harbour.sly
* Same as harbour.y, excluding un-needed support for reserved words used as identifiers.
/* Harbour.slx works with either harbour.y or harbour.sly, but harbour.sly creates smaller harbour.exe. */
* hb_slex.bc
* Modified to use harbour.sly
* config/dos/djgpp.cf
+ Added support for $(C_USER) and $(L_USER) /* Could someone please verify, that this is the correct way. */
* source/compiler/simplex.c
+ Added: #define SUSPEND_WORDS 8192, and minor support logic.
* source/compiler/harbour.slx
! Removed 14 #defines, and 14 cases from hb_lex_CustomAction(), by taking advantage of SUSPEND_WORDS.
* source/macro/macro.slx
- Removed 1 unused variable.
* include/hbcomp.h
* source/compiler/harbour.c
+ Added: char hb_comp_cCastType
* source/compiler/harbour.y
! Optimized AsType
+ Added: support for type casting like: Var := FunCal() AS ... and, return Var AS ...
/* Todo: add support for Array[n] := ... AS ..., and oVar:Data := ... AS ... */
* source/compiler/hbpcode.c
+ Added type casting support to:
HB_P_POPLOCAL
HB_P_POPLOCALNEAR
HB_P_POPMEMVAR
HB_P_POPSTATIC
HB_P_RETVALUE
* include/hbclass.ch
+ Added type casting to resolve Strong Type warnings:
return s_oClass:Instance() AS CLASS _CLASS_NAME_
local Self AS CLASS <ClassName> := QSelf() AS CLASS <ClassName>
/* Note: Strong Type code, and Class code, should compile with upto -w4, without [invalid] Strong Type warnings. */
* source/compiler/harbour.l
+ Added AS CHAR[ACTER] for compatibility with FW (FW can't use #translate AS CHAR => AS STRING, because FW also uses AS CHAR
in DLL calls where AS CHAR referes to *native* char type).
! Correted AS ... to allow multiple space/tab, and support abbreviations.
* source/compiler/simplex.c
+ Added KEYWORD_ACTION() and WORD_ACTION() macros.
* source/macro/macro.slx
! Optimized numerous HB_*_ID to a single HB_IDENTIFIER.
* source/compiler/harbour.slx
+ Added AS CHAR[ACTER] for compatibility with FW (FW can't use #translate AS CHAR => AS STRING, because FW also uses AS CHAR
in DLL calls where AS CHAR referes to *native* char type.
! Optimized numerous HB_*_ID to a single HB_IDENTIFIER.
* include/hbclass.ch
* Changed _<AssignName> to <AssignName> in HB_MEMBER directives.
+ Added AS CLASS <ClassName> to LOCAL Self := QSelf()
* tests/testdecl.prg
+ Added code to demonstrate missing support for class memeber RT type protection (AS ...)
* source/pp/ppcore.c
+ Added new kind of Result Marker - OMMIT, singinfied as <-Identifier->
/* This allows for custom code based on existance of optional clause, when the value of the clause itself is not needed */
* include/hbclass.ch
* Took advantage of new Ommit Result Marker, changed [<.ctor.> AS CLASS _CLASS_NAME_] to [<-ctor-> AS CLASS _CLASS_NAME_]
* source/compiler/harbour.y
- Removed rules for DummyTrue, used in _HB_MEMBER (no longer needed)
* hb_slex.bc
* Synchronized with makefile.bc
* include/hbclass.ch
+ Added: [AS <type>] optional clause to all Methods/Messages syntax.
+ Added directives to generate class declaration from same class creation code.
* include/hbcomp.h
* source/compiler/harbour.c
+ Added: char hb_comp_cDataListType;
* source/compiler/harbour.l
+ Added support for new _HB_CLASS and _HB_MEMBER alternate class declaration syntax.
* source/macro/macro.slx
! Moved .T., .Y., .F., and, .N. from self contained words to words.
* source/compiler/harbour.slx
! Moved .T., .Y., .F., and, .N. from self contained words to words.
+ Added support for new _HB_CLASS and _HB_MEMBER alternate class declaration syntax.
* source/compiler/harbour.y
! Improved definition of formal and optional paramter lists.
+ Added support for alternate class declaration syntax:
_HB_CLASS ClassName
_HB_MEMBER { [AS ...] Var1, VarN }
_HB_MEMBER MethodName( [ [OPTIONAL] [@]FormalParam [AS ...] | @FunPointer() ] ) [ AS ... ]
/* This syntax allows the class declaration to be on multiple seperated lines (needed to allow utilization of class creation code.)
Tokens _HB_CLASS & _HB_MEMBER are not final, until some discussion with Ryszard. */
* source/compiler/hbpcode.c
* Completed classes strong type support for adaptive type variable.
* source/rtl/tlabel.prg
* source/rtl/treport.prg
! Corrected typos: AS {} -> INIT {} AS ARRAY, AS .T. -> INIT .T. AS LOGICAL etc..
* tests/testdecl.prg
* Changed to demonstrate class creation used as declaration.
* utils/hbtest/hbtest.prg
* Changed DBFNTX -> DBFCDX (was not working because DBFNTX is disabled.
* source/compiler/harbour.c
* source/compiler/harbour.y
+ Added support for DECLARE FunName(...) AS CLASS ClassName
+ Added support for DECLARE FunName( ... @SomeFun() ... ) - Function Pointer declared parameter.
* source/compiler/simplex.c
* Corrected some compiler warnings.
* source/compiler/harbour.slx
* Reenabled support for ID_ON_HOLD.
* include/hberror.h
+ Added: #define HB_COMP_WARN_RETURN_SUSPECT 28
* source/compiler/hbgenerr.c
+ Added: "4Suspecious return type: \'%s\' expected: \'%s\'"
* source/compiler/hbpcode.c
+ Completed support for Strong Typed variables as declared classes, as well as Adaptive Typed usage with declared classes.
* Few other corrections and enhancements.
* include/hbclass.ch
+ Added TClass declaration:
DECLARE TClass ;
New( cName AS STRING, OPTIONAL SuperParams ) AS CLASS TClass ;
Create() AS OBJECT;
Instance() AS OBJECT ;
AddClsMthds( cName AS STRING, @Method(), nScope AS NUMERIC, n2 AS NUMERIC, n3 AS NUMERIC );
AddMultiClsData( cType AS STRING, uVal, nScope AS NUMERIC, aDatas AS ARRAY OF STRING );
AddMultiData( cType AS STRING, uVal, nScope AS NUMERIC, aDatas AS ARRAY OF STRING );
AddMethod( cName AS STRING, @Method(), nScope AS NUMERIC );
AddInLine( cName AS STRING, bBlock AS CODEBLOCK, nScope AS NUMERIC );
AddVirtual( cName AS STRING )
+ Added declaration to s_oClass AS CLASS TClass
* tests/testdecl.prg
* Minor refinement.
* source/compiler/simplex.c
! Optimized Keywords and Words search, Lexer is 10-15% faster.
* source/compiler/harbour.slx
* source/macro/macro.slx
! Sorted Keywords and Words, to support optimized search, by simplex.
* source/compiler/harbour.slx
! Corrected support for stringified strings to include nested string delimiters in the LITERAL.
/* Please note, both lexers are subject to extreme rare incomatibility, with direct code as follow:
? [" 1st. char is a Quote, last charcter is not.] ; MoreCode := [other SB delimited str ending with quote."]
I can't see that being a real problem on one hand, and I don't know that we can flag a specific LITERAL
within any given line as a PP stringified, as opposed to direct code, unless PP generates a specific [inline]
marker for lexer. Since Clipper PPO of stringified string does NOT compile, I tend to think that's what Clipper
does. Finally, since Clipper can't compile such PPO of valid code, I would suggest that if we ever decide to
correct this, we include the "marker" in PPO output too, making it valid.
*/