* source/compiler/harbour.c
+ Added all GET Methods definitions (still need Exported Vars ) - Thanks to Luiz.
+ Added TBCOLUMN definitions - Thanks to Luiz.
* source/rtl/tget.prg
! Correted :ToDecPos to return SELF as in Clipper (after verifying there was NO Low-Level Code conflict).
* include/hbcomp.h
* Changed order of COMDECLARED elements to be more intuitive for static initialization.
* source/compiler/harbour.c
* source/compiler/hbpcode.c
! Added type casting needed for C++ compilers.
* source/compiler/hbgenerr.c
* Corrected spelling for suspicious.
* source/compiler/hbpcode.c
* Commented one debung printf()
* include/hbcomp.h
+ Added extern PCOMCLASS hb_comp_pReleaseClass
* source/compiler/genc.c
+ Added logic to release declared classes after compilation.
* source/compiler/harbour.c
+ Added logic for standard classes declaration to hb_compDeclaredInit()
+ Added ERROR class declaration and started GET class declaration
* include/hbcomp.h
* source/compiler/harbour.c
+ Added members szFileName and iLine to structure INLINE, set to originating PRG name and line number.
* source/compiler/genc.c
+ Added #line directive to INLINE generations, so C compile warnings/errors will report source file and line number in PRG.
* source/compiler/harbour.l
* source/compiler/harbour.slx
+ Added Error message if inline C is used with non C output.
+ Added support for {} on same line
* Minor optimization
* include/hberrors.h
* source/compiler/hbgenerr.c
+ Added: "Inline C requires C output generartion, use -gc[n]"
* include/hberrors.h
* source/compiler/hbgenerr.c
+ Added: "Unterminated inline block in function: \'%s\'" and "Too many inline blocks"
* include/hbcomp.h
* source/compiler/harbour.c
+ Added hb_compInlineNew(), hb_compInlineAdd(), and hb_compInlineFind()
* source/pp/ppcomp.c
* source/compiler/harbour.slx
* source/compiler/genc.c
+ Added support for inline C code blocks.
+ tests/inline_c.prg
+ Added new test to demonstrate new inline C support.
* source/compiler/harbour.c
* Exported: hb_compFieldGetPos() and hb_compMemvarGetPos()
* source/compiler/harbour.sly
! Changed __GET() support to be parameter compatible with Clipper
* include/hberrors.h
* source/compiler/hbgenerr.c
+ Added Error: "GET contains complex macro"
* source/pp/pptable.c
- Removed bSetGet from rule of GET, PP output now Clipper compatible.
* source/vm/memvars.c
+ Added HB_FUNC( __ISMV ) // Return .T. if passed string as a Memory Variable.
* source/rtl/tgetint.prg
! Fixed __GET() to be 100% parameter compatible with Clipper.
! When 1st parameter (bSetGet) is NIL the bSetGet will be built internaly,
not using macro in most cases, even if the Get Variable itslef is a macro :-)
/* Ryszard, this will further break Flex support for GET, but makes __GET() 100% Clipper compatible as you suggested.
Please note, that Clipper does *NOT* pass a bSetGet *only* when the Get Var is a *simple* *non* declared Variable.
Declared Variables in this context are: MEMVAR, FIELD, LOCAL, and STATIC. For all of those, bSetGet *is* generated!
Clipper also generates bSetGet for "Complex Variables", i.e. Aliased Variables, Object Data, etc.! */
* 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/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. */
* 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. */
* 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/harbour.c
* Corrected display of errors statistics to use \r so that error count doen't appear connected to the last reported
compiler line number progress.
* source/macro/macro.slx
- Removed unused asHold
* source/compiler/harbour.slx
- Removed unused asHold
- Optimized some rules.
* source/compiler/simplex.c
- Removed unused asHold
* tests/keywords.prg
* Uncommented all code that was commented other than few lines which I added TODO: PP ... for (problem resulting from PP)
* source/compiler/harbour.c
! Corrected pVar->iDeclLine line number
* source/compiler/hbgenerr.c
! Corrcted intermitent GPF when hb_compGenWarning() was called with NULL hb_comp_files.pLast
* include/hbcomp.h
+ Added: external BOOL hb_comp_bSimpLex
* source/compiler/harbour.c
+ Added: BOOL hb_comp_bSimpLex
+ Added: if( hb_comp_bSimpLex ) tests before releasing name strings of vars, and symbols.
+ Added: call to hb_compReleaseStrings(), if hb_comp_SimpLes is TRUE, after code generation.
* source/compiler/harbour.slx
+ Added: logic to resuse same allocated strings when string for identifier was perviously allocated.
+ Added: INIT_ACTION macro to set hb_comp_bSimpLex to TRUE.
+ Added: Function hb_compReleaseStrings()
* source/compiler/harbour.l
+ Added: empty Function hb_compReleaseStrings() to avoid link error.
* source/compiler/hbslex.c
* source/compiler/simplex.c
* Moved standard #includes from simplex to hbslex.
* include/hbclass.ch
- Uncommented the VO #xtranslate as they do work correctly.
* source/pp/pplib.c
- Removed int hb_comp_iIncLine
* include/hbcomp.h
- Removed int hb_comp_iIncLine
+ Added int hb_comp_iCompiled
+ Added char* hb_comp_szFile
+ Added BOOL hb_comp_bError
* source/compiler/harbour.c
! Fixed Compile Time Line Numbers
! Fixed Run Time Line Numbers
* source/compiler/harbour.l
! Rewrote rules for STRING1 STRING2 STRING3 INDEX, were severly broken with regard to unterminated support.
/* When working on errors, I founf major problems, with unterminated Array Index and Unterminated Strings
I'm surprised no one reported. This mass was a nightmere to fix. it seems to be working great now. */
* source/compiler/harbour.y
! Many fixes to support correct line numbers.
* source/compiler/hbgenerr.c
! Fixed Error System to never report more than 1 error per source line.
* source/pp/ppcomp.c
- Removed code for hb_comp_iIncLine
* source/pp/ppcore.c
* Minor formating.
* include/hbclass.ch
! Uncommented #xtranslate that was not pre-processing correctly, before recent fixes to ppcore.c and now works correctly.
* source/compiler/harbour.c
! Fixed hb_compLinePush() to generate correct Run-Time Line Numbers.
* source/pp/ppcomp.c
- Removed one // comment.
* source/pp/ppcore.c
* Increased MAX_EXP to 2048 as requested by Brian Hays.
source/compiler/harbour.c
* hb_compCompile() Added Clipper like message showing how many parse errors found.
* hb_compAutoOpen() added 2nd paramter pointer to bSkipGen of caller (hb_compCompile()).
Added logic to not "remember" hb_comp_bAnyWarning and hb_comp_iErrorCount from previous parsings.
* include/hbcomp.h
* Enclosed declarations of functions to support in-line nested compilation within #ifdef HB_NESTED_COMPILE
source/compiler/harbour.y
* Enclosed functions to support in-line nested compilation within #ifdef HB_NESTED_COMPILE
* Changed rules for DO ... to add name of module to hb_comp_pAutoOpen linked list.
+ Added hb_compAutoOpen() - Parses the needed externals when -m not specified
- Defed out hb_compYACCMAIN() (#if 0) - no longer needed, moved logic into hb_compCompile() and hb_compAutoOpen()
source/compiler/harbour.l
+ Added #define YY_USER_ACTION ... to fix Flex problem with ^ (BOL RegExp)
* Enclosed functions to support in-line nested compilation within #ifdef HB_NESTED_COMPILE
source/compiler/harbour.c
* Enclosed functions to support in-line nested compilation within #ifdef HB_NESTED_COMPILE
* Modified hb_compCompile() to support future in-line nested compilation, and defed it out.
* Changed hb_compCompile() to call hb_compAutoOpen() for modules called in DO ... that are not defined in main prg.
! Completed -m support, by default directives in external opened modules will be avialable to subsequent externals.
this feature is defed out if strict compatibilty ise selected.
* include/hbpp.h
* source/compiler/harbour.c
* source/pp/ppcore.c
* Modified hb_pp_SetRules() to receive 2nd parameter BOOL hb_comp_bQuiet, since ppcore is part of PP.lib which is linked
into HBRUN.exe which does not include harbour.c where hb_comp_bQuiet is defined.
* source/compiler/harbour.l
! Fixed parse error on IF [...]
* source/vm/classes.c
Posted patch provided by JF
* source/rtl/tobject.prg
Posted missing file provided by JF
* source/compiler/harbour.c
* main() Moved calls to hb_pp_init() to hb_pp_SetRules() in ppcore.c to avoid redefinition of standard defs.
* source/pp/ppcore.c
* hb_pp_SetRules() Moved calls to hb_pp_init() from main() in Harbour.c to avoid redefinition of standard defs.
! Minor fixes to warnings and errors.
* source/compiler/cmdcheck.c
+ Implemented support for -m
* include/hbcomp.h
+ Added structure _HARBVARS to hold Harbour Session Variables
+ Added structure +AUTOOPEN to hold names of external modules already compiled.
* source/compiler/harbour.c
+ Moved the parsing/compiling logic into new hb_compCompile()
+ Added:
static void hb_compAutoOpenAdd( char * szName );
static BOOL hb_compAutoOpenFind( char * szName );
static void hb_compSaveVars( PHARBVARS, int );
static void hb_compRestoreVars( PHARBVARS, int );
* source/compiler/harbour.l
+ Added:
void * hb_compGet_YY_CURRENT_BUFFER()
void hb_compSet_YY_CURRENT_BUFFER( void * pBuffer )
int hb_compGet_yy_init( void )
void hb_compSet_yy_init( int i )
int hb_compGet_yy_start( void )
void hb_compSet_yy_start( int i )
int hb_compGet_yy_did_buffer_switch_on_eof( void )
void hb_compSet_yy_did_buffer_switch_on_eof( int i )
* source/compiler/harbour.y
+ Added logic to call hb_compCompile() when DO ... or DO ... WITH
+ Added:
void * hb_compGet_pLoops( void )
void hb_compSet_pLoops( void * pLoops )
void * hb_compGet_rtvars( void )
void hb_compSet_rtvars( void * rtvars )
* source/compiler/hbusage.c
+ Added display of -m compiler switch
Please note:
1. Implementation is practicaly completed, but there is one known issue to be resolved: Once we open and compile
an external module, the very next prg line in the parent prg is not processed, I would love to get some assistance
with this - Ryszard, Antonio, Victor, Paul? as I am seriously limited with time over this week.
It seems I am not saving one of Bison/Flex vars, so my restore of the previous session is not complete :-(
2. Clipper seem to have a bug, on the following code:
DO WHILE WITH ...
Clipper will attempt to compile external "WITH.PRG" instead of "WHILE.PRG", can any one advise if I am missing something here...
In our implementation the above line will attemp to compile "WHILE.PRG"
* include/hbcomp.h
+ Added: extern char * hb_pp_STD_CH;
* include/hbpp.h
+ Added: extern void hb_pp_SetRules( BOOL (*hb_compInclude)(char *, PATHNAMES * ) );
* source/compiler/hbusage.c
* source/compiler/harbour.c
* source/compiler/cmdcheck.c
+ Added support for -u[FileName]
- Removed TODO for -u
* source/pp/ppcomp.c
+ Added hb_pp_ReadRules() - Logic to process directives from user supplied command defs.
* source/pp/ppcore.c
+ Added hb_pp_SetRules() - Logic to use predefined rules, none, or user defined.
* source/pp/pptable.c
+ Added hb_pp_Table() - Moved predefined rules into this function, to allow for conditional use.