Commit Graph

35 Commits

Author SHA1 Message Date
Przemyslaw Czerpak
a95ca6ab8b 2008-05-16 19:26 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/hbcomp.h
  * harbour/include/hbcompdf.h
  * harbour/source/compiler/hbmain.c
  * harbour/source/compiler/complex.c
  * harbour/source/compiler/harbour.y
  * harbour/source/compiler/harbour.yyc
    ! moved function related variables and structures from HB_COMP to
      PFUNCTION - it fixes many different problems which can appear in
      some code, also the recent Mindaugas' example
    ! initialize statement value in error action to avoid valgrind/CodeGuard
      warning reports when syntax error appear in some complex statements

  * harbour/source/rtl/scrollbr.prg
    * repalced TAB with SPACEs
2008-05-16 17:27:20 +00:00
Przemyslaw Czerpak
3611daa5a2 2008-01-11 18:01 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/hbapiitm.h
  * harbour/source/vm/itemapi.c
    + added new functions:
         BOOL hb_itemParamStore( USHORT uiParam, PHB_ITEM pItem )
         BOOL hb_itemParamStoreForward( USHORT uiParam, PHB_ITEM pItem )
      They copy/move pItem body to parameter passed by reference and
      return TRUE when operation was done successfully (uiParam was passed
      by reference)
    + added new functions for string manipulation:
         char * hb_itemLockReadCPtr( PHB_ITEM pItem, ULONG * pulLen );
         char * hb_itemLockWriteCPtr( PHB_ITEM pItem, ULONG * pulLen );
         void   hb_itemUnLockCPtr( char * pszString );
      It's recommended to use them instead of hb_itemGetCPtr().
      Pointer to string buffer returned by hb_itemLockReadCPtr() will
      be always valid even if source item will be cleared, destroyed or
      overwritten until hb_itemUnLockCPtr() is called. Each locked string
      has to be unlocked to avoid memory leaks. After unlocking the string
      pointer cannot be longer used.
      hb_itemLockWriteCPtr() works like hb_itemLockReadCPtr() but string
      pointer returned by this function is writable so user can change
      the body of string item. It's the _ONLY_ one way when it's possible.
      Modifying string items using pointers returned by hb_parc() or
      hb_itemGetCPtr() or extracted directly from HB_ITEM body is _FORBIDDEN_
      and can cause unpredictable results (GPF when constant/readonly memory
      pages are changed, changing many different items which share the same
      memory buffer, etc.).
      This is code illustrates how to use hb_itemLockReadCPtr()/
      hb_itemUnLockCPtr() and it's also good example why hb_itemGetCPtr()
      is very danger function and cannot be used in such case - if you
      replace hb_itemLockReadCPtr() with hb_itemGetCPtr() and remove
      hb_itemUnLockCPtr() then you will have buggy code.

         HB_FUNC( MYFUNC )
         {
            PHB_ITEM pObject = hb_param( 1, HB_IT_OBJECT )
            if( pObject )
            {
               char * pszName1, * pszName2;
               PHB_ITEM pResult;

               pResult = hb_objSendMsg( pObject, "POP", 0 );
               pszName1 = hb_itemLockReadCPtr( pResult, NULL );
               pResult = hb_objSendMsg( pObject, "POP", 0 );
               pszName2 = hb_itemLockReadCPtr( pResult, NULL );
               if( pszName1 && pszName2 )
                  hb_retc_buffer( hb_xstrcpy( NULL,
                              "[", pszName1, "]-[", pszName2, "]", NULL ) );
               hb_itemUnLockCPtr( pszName1 );
               hb_itemUnLockCPtr( pszName2 );
            }
         }

      This code shows how to use hb_itemLockWriteCPtr():
         proc main()
            local cVal, cVal2
            cVal := cVal2 := "ABC"
            STRPUT( @cVal2, 2, 42 )
            ? cVal, cVal2
         return
         #pragma begindump
         #include "hbapiitm.h"
         HB_FUNC( STRPUT )
         {
            PHB_ITEM pString = hb_param( 1, HB_IT_STRING );
            ULONG ulAt = hb_parnl( 2 );
            if( pString && ulAt && ISNUM( 3 ) )
            {
               ULONG ulLen;
               char * pszValue;
               pszValue = hb_itemLockWriteCPtr( pString, &ulLen );
               if( pszValue )
               {
                  if( ulAt <= ulLen )
                     pszValue[ ulAt - 1 ] = ( char ) hb_parni( 3 );
                  hb_itemUnLockCPtr( pszValue );
               }
            }
         }
         #pragma enddump

  * harbour/include/hbcompdf.h
  * harbour/include/hbexprop.h
  * harbour/include/hbexprb.c
  * harbour/source/compiler/hbmain.c
  * harbour/source/compiler/cmdcheck.c
  * harbour/source/compiler/hbusage.c
    * removed HB_I18N_SUPPORT macro and enabled I18N code in default build
2008-01-11 17:01:34 +00:00
Mindaugas Kavaliauskas
ce44121edc 2007-11-23 03:55 UTC+0200 Mindaugas Kavaliauskas (dbtopas/at/dbtopas.lt)
* harbour/source/include/hbcompdf.h
  * harbour/source/include/hbexprop.h
  * harbour/source/include/hbexprb.c
  * harbour/source/compiler/cmdcheck.c
  * harbour/source/compiler/hbmain.c
    + added i18n support
      Implemented -j[filename] switch to indicate output filename. Default 
      filename is <sourcefilename>.pot. If switch -o is used, this file
      is created in speficied output path.
      Output file format is compatible with 'gettext' utils, but not all
      available features are implemented.
      Harbour level function HB_i18nGettext( cText [, cContext ] ) sould be
      used to indicate translatable strings.
      All this commit is commented using #ifdef HB_I18N_SUPPORT and is in 
      development stage. Please, do not use it yet.
2007-11-23 01:55:37 +00:00
Viktor Szakats
1320481f88 2007-10-15 18:36 UTC+0100 Viktor Szakats (harbour.01 syenar.hu)
* source/rtl/tbcolumn.prg
     ! Strict C5.2e compatible behaviour made the default.

   * source/rtl/inkey.c
     + Added handling of arrays of numbers in HB_KEYPUT().
       (this was copied from __KEYBOARD()'s extended section)
     + Added handling of string parameter in HB_KEYPUT().
       (this way we don't really need the hidden extensions 
       in __KEYBOARD() anymore. Also notice that __KEYBOARD() 
       doesn't clear the keyboard buffer when numeric or 
       array is passed, which is not consistent with the 
       Clipper compatible behaviour when strings are passed.)

   * common.mak
   * include/hbcompdf.h
   * source/compiler/hbmain.c
   * source/compiler/cmdcheck.c
   * source/compiler/hbcomp.c
   * source/compiler/harbour.l
   * source/compiler/Makefile
   * source/compiler/ppcomp.c
   * source/compiler/hbusage.c
   - source/compiler/genjava.c
   - source/compiler/gencli.c
     - Removed two non-working (experimental) output types: 
       Java, CLI
     ! Prefixed LANG_* enums with HB_
2007-10-15 16:36:38 +00:00
Przemyslaw Czerpak
ce51877db3 2007-10-10 00:05 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/hbcompdf.h
  * harbour/source/compiler/hbmain.c
  * harbour/source/compiler/harbour.y
  * harbour/source/compiler/harbour.yyc
  * harbour/source/compiler/complex.c
    * cleanup: removed unused variable, some extension to datetime
      decoding, etc.
2007-10-09 22:05:51 +00:00
Przemyslaw Czerpak
ea97d11a41 2007-08-22 19:10 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/hbpp.h
  * harbour/include/hbcomp.h
  * harbour/include/hbcompdf.h
  * harbour/source/pp/ppcore.c
  * harbour/source/rtl/gttrm/gttrm.c
  * harbour/source/main/harbour.c
  * harbour/source/compiler/hbmain.c
  * harbour/source/compiler/cmdcheck.c
  * harbour/source/compiler/hbcomp.c
  * harbour/source/compiler/hbcmplib.c
  * harbour/source/compiler/ppcomp.c
    * added 'const' to some 'char *' declarations
    + added hb_pp_inBuffer()
    + extended hb_compMain() to accept source code passed as ASCIIZ
      string
    + .prg function HB_COMPILEFROMBUF()
    + added support for -q2 compiler switch - it disables _ALL_ stdout/stderr
      messages

  * harbour/utils/Makefile
  + harbour/utils/hbdot
  + harbour/utils/hbdot/hbdot.prg
  + harbour/utils/hbdot/Makefile
    + added hbdot utility program.
      It's a "DOt Prompt" Console for the Harbour Language
         Syntax:  hbdot [<hrbfile[.prg]> [<parameters,...>]]
      It should look and work in similar way to pp/xBaseScript
      by Ron Pinkas but unlike xBaseScript is does not have preprocessor
      or simulated runtime environment but simply uses Harbour pp and
      compiler libraries to preprocess and compile commands. It means
      that it supports all language constructions also statements, f.e.:
         "for i:=1 to 10; ? i; next"
      Additionally it can also compile and execute .prg files given as
      first parameter just like hbrun.
      Please test it. If it will work as expected then we can remove
      'pp' (contrib/dot) from standard packages
2007-08-22 17:10:40 +00:00
Przemyslaw Czerpak
94cf099be5 2007-07-06 23:15 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/contrib/libct/bitnum.c
  * harbour/contrib/libct/charlist.c
  * harbour/contrib/libct/ctnet.c
  * harbour/contrib/libct/charonly.c
  * harbour/contrib/libct/atadjust.c
  * harbour/contrib/libct/ctmath.c
  * harbour/contrib/libct/ctset.c
  * harbour/contrib/libct/charsort.c
  * harbour/contrib/libct/ctmath.h
  * harbour/contrib/libct/ctset.h
  * harbour/contrib/libct/cterror.ch
  * harbour/contrib/libct/charmix.c
  * harbour/contrib/libct/charevod.c
  * harbour/contrib/libct/charrepl.c
  * harbour/contrib/libct/charswap.c
  * harbour/contrib/libct/charop.c
  * harbour/contrib/libct/color.prg
  + harbour/contrib/libct/blank.prg
  * harbour/contrib/libct/ct.prg
  * harbour/contrib/libct/ct.ch
  * harbour/contrib/libct/charone.c
  * harbour/contrib/libct/ctchksum.c
  * harbour/contrib/libct/ascpos.c
  * harbour/contrib/libct/charmirr.c
  * harbour/contrib/libct/ctc.c
  * harbour/contrib/libct/ct.h
  * harbour/contrib/libct/atnum.c
  * harbour/contrib/libct/ctmisc.prg
  * harbour/contrib/libct/count.c
  * harbour/contrib/libct/ctcrypt.c
  * harbour/contrib/libct/addascii.c
  * harbour/contrib/libct/ctmath2.c
  * harbour/contrib/libct/ctextern.ch
  * harbour/contrib/libct/asciisum.c
  * harbour/contrib/libct/atrepl.c
  * harbour/contrib/libct/ctstr.c
  * harbour/contrib/libct/ctstr.h
    * synced with xHarbour modifications and fixes
    ! some fixes
    * indenting

  * harbour/source/rtl/errorapi.c
    * indenting

  * harbour/source/vm/hashfunc.c
    + added HB_HSETCASEMATCH(), HB_HSETAUTOADD()
    % some minor optimizations

  * harbour/include/hbcompat.ch
    + added hb_checksum() <=> hb_adler()
    * use new HB_HSET*() function to avoid warnings

  * harbour/include/hbcomp.h
  * harbour/include/hbcompdf.h
  * harbour/include/hberrors.h
  * harbour/source/compiler/hbmain.c
  * harbour/source/compiler/harbour.yyc
  * harbour/source/compiler/harbour.y
  * harbour/source/compiler/harbour.yyh
  * harbour/source/compiler/hbgenerr.c
    ! fixed using EXIT/LOOP inside WITH OBJECT / END statement
    ! fixed optimization of empty BEGIN/END sequence when recover has
      EXIT or LOOP statement
    ! forbidden using EXIT and LOOP inside ALWAYS code in BEGIN/END sequence
    ! forbidden using ALWAYS statement if RECOVER code has EXIT or LOOP
      statement
2007-07-06 21:17:36 +00:00
Przemyslaw Czerpak
237af158fa 2007-07-04 15:10 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/hbcompdf.h
  * harbour/source/compiler/harbour.yyc
  * harbour/source/compiler/harbour.y
    ! fixed using LOOP inside SWITCH/CASE.../END statement
    ! fixed possible memory leeks when compile time error appear
      with some unfinished LOOP statements
    ! do not push unnecessary NIL on HVM stack when SWITCH/CASE.../END
      statement were used without OTHERWISE clause

  * harbour/source/pp/ppcore.c
    ! do not calculate last line when it does not contain any character
    * clear line number counter after preprocessing standard definitions/
      rules - I hope it will make David happy ;-)
2007-07-04 13:13:10 +00:00
Przemyslaw Czerpak
e2f8ec6f14 2007-06-05 21:10 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/hbcompdf.h
    * formatting
  * harbour/include/hbexpra.c
    + added comment
  * harbour/source/common/expropt2.c
    + added optimization for <constValue> == NIL, <constValue> = NIL,
      <constValue> != NIL
    ! disabled in macro compiler buggy Clipper compiler optimization
      for expressions like: AT( "", "" ), "" $ "", CHR(256), now the
      folowwing code gives the same results when compiled by Clipper
      and Harbour:
            proc main()
               ? ""$"", &('""$""')
               ? AT(""," "), &('AT(""," ")')
               ? LEN(CHR(0)+CHR(256)), &('LEN(CHR(0)+CHR(256))')
            return
2007-06-05 19:07:56 +00:00
Przemyslaw Czerpak
defb63f5f2 2007-05-30 01:00 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/hbcompdf.h
  * harbour/include/hbexprb.c
  * harbour/source/common/expropt1.c
  * harbour/source/compiler/harbour.y
  * harbour/source/compiler/harbour.yyc
  * harbour/source/macro/macro.y
  * harbour/source/macro/macro.yyc
    ! fixed bug in operator precedence - seems that it existed from
      beginning and partially were fixed in xHarbour. This code exploits
      the problem:
            #define EOL chr(13)+chr(10)
            #command ? [<x,...>] => [outstd( <x> );]outstd(EOL)
            #command TEST <exp> => BEGIN SEQUENCE     ;
                                 ;   ? <exp>          ;
                                 ; RECOVER USING oErr ;
                                 ;   ? "Error:", oErr:subCode, ;
                                       oErr:description, oErr:operation ;
                                 ; END
            proc main()
            local oErr, s1:="X", s2:="Y", t:=.T.
            errorBlock({|oErr|break(oErr)})
            TEST t != s1 $ s2
            TEST t == s1 $ s2
            TEST t =  s1 $ s2
            TEST t <  s1 $ s2
            TEST t <= s1 $ s2
            TEST t >  s1 $ s2
            TEST t >= s1 $ s2
            TEST s1 $ s2 != t
            TEST s1 $ s2 == t
            TEST s1 $ s2 =  t
            TEST s1 $ s2 >  t
            TEST s1 $ s2 <  t
            TEST s1 $ s2 >= t
            TEST s1 $ s2 <= t
            return
2007-05-29 23:04:09 +00:00
Przemyslaw Czerpak
91ec7b23a5 2007-05-11 22:50 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/hbcomp.h
  * harbour/include/hbcompdf.h
  * harbour/include/hbexpra.c
  * harbour/include/hbexprb.c
  * harbour/source/compiler/complex.c
  * harbour/source/compiler/genc.c
  * harbour/source/compiler/gencli.c
  * harbour/source/compiler/genobj32.c
  * harbour/source/compiler/harbour.y
  * harbour/source/compiler/harbour.yyc
  * harbour/source/compiler/harbour.yyh
  * harbour/source/compiler/hbmain.c
    * changed code used for variable scoping - now it's much more
      simple (only one function) and allows to use declarations in
      nested functions/codeblocks with visibility similar to Pascal
    ! fixed parsing FILED <fields,...> IN <alias>
      we were accepting code like:
         FIELD f1, f2 IN db1, f3 IN db2 IN db3
      and for all fields the last alias (db2 in this example) was used
    ! fixed calculating number of static variables with -b (debugger)
      compilation (number of file wide statics were doubled)
    ! fixed generation of static variable names for debugger when declared
      with array dimensions, f.e.:
         static sVar[3]

  * harbour/source/rtl/hbffind.c
    * minor cleanup *nix version

  * harbour/contrib/bmdbfcdx/bmdbfcdx1.c
    ! fixed casting for C++ compilation

  * harbour/source/rdd/dbfdbt/dbfdbt1.c
    * updated for some old API modifications (this library is not used now
      but if we keep it in CVS then I think it should be updated)
2007-05-11 20:51:04 +00:00
Przemyslaw Czerpak
74adc6f86c 2007-04-23 18:25 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/hbcomp.h
  * harbour/include/hbcompdf.h
  * harbour/include/hbexpra.c
  * harbour/include/hbexprb.c
  * harbour/include/hbexprop.h
  * harbour/source/common/expropt1.c
  * harbour/source/compiler/genc.c
  * harbour/source/compiler/harbour.y
  * harbour/source/compiler/hbmain.c
  * harbour/source/compiler/hbopt.c
    ! reverted fix for unnecessary -W2 warning:
         Function '...' does not end with RETURN statement
      in code like:
            func f(v)
            if v
               return "TRUE"
            else
               return "FALSE"
            endif
      Sorry but I had to make it because this fix was wrong and causes
      that code like:
            func f(v)
            if v
               ? v
            else
               return "FALSE"
            endif
      was compiled without any warnings but wrong PCODE was generated.
      In some spare time I'll try to implement valid RETURN detection,
      now simply add RETURN NIL at the end of such functions - it will
      be removed by dead code eliminator.
    ! fixed memory leak when more then one .prg file was given as compiler
      parameter
    + cleaned some code for future modifications

  * harbour/source/macro/macro.y
    + added small hack for two BCC/OW warnings
  * harbour/source/compiler/harbour.yyc
  * harbour/source/compiler/harbour.yyh
  * harbour/source/macro/macro.yyc
  * harbour/source/macro/macro.yyh
    * regenerated with modified Bison version which should give code
      without BCC warnings - I cannot promise I'll keep it in the
      future but I will try.

  * harbour/source/rdd/dbcmd.c
    ! use default RDD instead of current one in COPY TO and APPEND FROM

  * harbour/source/vm/classes.c
    * added support for (@func()):eval(...)
2007-04-23 16:27:57 +00:00
Przemyslaw Czerpak
b7094ed42f 2007-04-13 03:00 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/hbapi.h
  + harbour/include/hbapidbg.h
  * harbour/include/hbcomp.h
  * harbour/include/hbcompdf.h
  * harbour/include/hbdebug.ch
  * harbour/include/hbdefs.h
  * harbour/source/compiler/Makefile
  * harbour/source/compiler/genc.c
  + harbour/source/compiler/hbdbginf.c
  * harbour/source/compiler/hbmain.c
  * harbour/source/debug/debugger.prg
  * harbour/source/rtl/altd.prg
  * harbour/source/vm/Makefile
  + harbour/source/vm/dbgentry.c
  * harbour/source/vm/debug.c
  * harbour/source/vm/hvm.c
    + added xHarbour compatible low level debugger code
      Without some small exceptions like my hbdbginf.c most of
      the code created by Phil Krylov <phil a t newstar.rinet.ru>
      and borrowed from xHarbour with some small modifications.

  * harbour/source/rtl/gete.c
    ! fixed memory leak in GETENV()

  * harbour/source/compiler/hbmain.c
    ! fixed memory leak when -build or -credit switches were used
2007-04-13 01:06:01 +00:00
Przemyslaw Czerpak
23bc767460 2007-04-12 13:55 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/hbpp.h
  * harbour/include/hbcomp.h
  * harbour/source/compiler/hbgenerr.c
  * harbour/source/compiler/ppcomp.c
  * harbour/source/pp/ppcore.c
  * harbour/source/pp/pplib.c
  * harbour/utils/hbpp/hbpp.c
  * harbour/utils/hbpp/hbppcore.c
  * harbour/utils/hbpp/hbppdef.h
    * changed error and warning messages to const char *

  * harbour/source/compiler/genhrb.c
    * rewritten to work on memory buffers and with new compiler code

  * harbour/include/hbcomp.h
  * harbour/include/hbcompdf.h
  * harbour/source/compiler/hbmain.c
  * harbour/source/main/harbour.c
    + added LANG_PORT_OBJ_BUF which allow to generate .hrb files into
      memory buffers

  * harbour/source/compiler/hbcmplib.c
    + added HB_COMPILEBUF() functions which returns compiled .hrb file
      as string item

  * harbour/source/vm/runner.c
    + added support for executing compiled .hrb files stored in string
      items in __HRBRUN() function - it works just like in __HRBLOAD()

  * harbour/harbour.spec
  * harbour/utils/hbrun/hbrun.prg
    + added default include directories to hbrun
    * use HB_COMPILEBUF() instead of HB_COMPILE() to eliminate temporary
      files
2007-04-12 11:57:04 +00:00
Przemyslaw Czerpak
046d1ea4d7 2007-04-11 22:00 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/source/compiler/harbour.y
  * harbour/source/compiler/harbour.yyc
    ! fixed some possible false warning messages

  * harbour/include/hboo.ch
  * harbour/source/vm/classes.c
    + added support for HB_OO_MSG_PROPERTY and HB_OO_MSG_CLASSPROPERTY
      to make some xHarbour users happy ;-)

  * harbour/common.mak
  * harbour/harbour.spec
  * harbour/include/hbcompdf.h
  * harbour/source/compiler/Makefile
  + harbour/source/compiler/hbcmplib.c
    + added HB_COMPILE() function - it accepts exactly the same parameters
      as harbour compiler and makes the same job :-)

  * harbour/utils/hbrun/Makefile
  * harbour/utils/hbrun/hbrun.prg
    + added support for compilation and direct execution of .prg files
      Now hbrun can accept as first parameter .hrb or .prg file and if
      it's .prg file it's compiled and then executed just like .hrb one.
      In *nixes if you copy compiled hbrun to /usr/bin directory then
      you can add to your .prg files as first line:
         #!/usr/bin/hbrun
      and then after setting executable attribute you can directly
      execute them, f.e.:
         ./test.prg
      If you are using Linux then you can also chose default gt driver
      by dding to above line: //gt<name>
      F.e.
         #!/usr/bin/hbrun //gtstd
2007-04-11 20:01:18 +00:00
Przemyslaw Czerpak
88cda3200d 2007-03-22 12:55 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/common.mak
    * updated for new files - please check

  * harbour/harbour.spec
    * added compiler library

  * harbour/bin/pack_src.sh
  * harbour/bin/hb-func.sh
    * updated for new files and libraries

  * harbour/config/w32/mingw32.cf
  * harbour/config/w32/watcom.cf
  * harbour/config/w32/xcc.cf
    * added winsock libraries

  * harbour/include/hbapicdp.h
  * harbour/source/rtl/cdpapi.c
    + added hb_cdpicmp() - not case sensitive version of hb_cdpcmp()

  * harbour/include/hbapiitm.h
  * harbour/source/vm/itemapi.c
    + hb_itemStrICmp(), hb_itemCopyFromRef(), hb_itemMoveFromRef()

  * harbour/include/hbapi.h
  * harbour/include/hbcomp.h
  * harbour/include/hbcompdf.h
  * harbour/include/hbexpra.c
  * harbour/include/hbexprb.c
  * harbour/include/hbexprop.h
  * harbour/include/hbmacro.h
  * harbour/include/hbpcode.h
  * harbour/include/hbvmpub.h
  * harbour/include/hbxvm.h
  * harbour/source/common/expropt1.c
  * harbour/source/compiler/complex.c
  * harbour/source/compiler/genc.c
  * harbour/source/compiler/gencc.c
  * harbour/source/compiler/gencli.c
  * harbour/source/compiler/genhrb.c
  * harbour/source/compiler/genobj32.c
  * harbour/source/compiler/harbour.y
  * harbour/source/compiler/harbour.yyc
  * harbour/source/compiler/harbour.yyh
  * harbour/source/compiler/hbdead.c
  * harbour/source/compiler/hbfix.c
  * harbour/source/compiler/hblbl.c
  * harbour/source/compiler/hbmain.c
  * harbour/source/compiler/hbopt.c
  * harbour/source/compiler/hbpcode.c
  * harbour/source/compiler/hbstripl.c
  * harbour/source/macro/macro.y
  * harbour/source/macro/macro.yyc
  * harbour/source/macro/macro.yyh
  * harbour/source/macro/macrolex.c
  * harbour/source/vm/Makefile
  * harbour/source/vm/arrays.c
  * harbour/source/vm/asort.c
  * harbour/source/vm/classes.c
  * harbour/source/vm/eval.c
  * harbour/source/vm/garbage.c
  * harbour/source/vm/hvm.c
  * harbour/source/vm/itemapi.c
  * harbour/source/vm/macro.c
  + harbour/source/vm/hashes.c
  + harbour/source/vm/hashfunc.c
    + added hash items, f.e.:
         local h1 := {=>}, h2 := { "a"=>1.234, "b"=>2.345 }
         ? h2[ "a" ], h2[ "b ]
    + added support for DYNAMIC function declaration - it allow to define
      functions which are lately bound at runtime, f.e.:
         /*** t01.prg ***/
         dynamic func1
         proc main()
         local h:=__hrbload("t02.hrb")
         ? func1()
         return

         /*** t02.prg ***/
         func func1
         return "Hello!!!"

    % use new FUNCALL structure to hold EXTERNAL and DYNAMIC functions,
      it reduce memory usage, FUNCALL is much smaller then FUNCTION
    % use symbol scope bits when possible instead of making some linear scan
    + added new enumarator message: __ENUMKEY - it allow to access
      key value when hash item is base enumerator value, f.e.:
         proc main()
         local v, h:={"a"=>1.000,"b"=>2.000,"c"=>3.000}
         heval( h, { |k,v,i| qout( k, v, i ) } ); ?
         for each v in h
            ? v, "=>", v:__enumKey(), v:__enumValue(), v:__enumIndex(), ;
                       valtype(v:__enumBase())
            v += 0.123
         next
         ? ;heval( h, { |k,v,i| qout( k, v, i ) } )
         return
    + added C level hb_hash*() functions
    + added support for full HASH item cloning and updated array cloning
      to also clone nested hashes - please note that xHarbour does not do
      that, in xHarbour ACLONE() clones _ONLY_ nested arrays and HCLONE()
      _DOES_NOT_ clone _ANY_ nested items.

  * harbour/include/hbextern.ch
    + added hash functions HB_H*()
    * changed INET*() functions to HB_INET*()
    + added hash functions H*() and socket functions INET*() when
      HB_COMPAT_XHB is set

  * harbour/include/hbtypes.h
    + added missing HB_EXTERN_BEGIN / HB_EXTERN_END

  * harbour/include/hbpp.h
  * harbour/source/pp/ppcore.c
    ! added protection against automatic word concatenation in some cases
    ! fixed preprocessing expressions when match marker matches ';' token

  * harbour/source/rtl/Makefile
  + harbour/source/rtl/itemseri.c
    + added functions for item serialization: HB_SERIALIZE() and
      HB_DESERIALIZE() - these function are not binary compatible
      with xHarbour functions with the same names but make very
      similar job with the exception to serialization of codeblock
      and object variables - Harbour does not allow to serialize
      codeblocks and serialize objects as arrays.
      In most cases these functions can replace the xHarbour ones
    + added HB_DESERIALBEGIN() and HB_DESERIALIZE() functions covered
      by HB_COMPAT_XHB macro - this functions are only for compatibility
      with existing xHarbour code, In Harbour HB_DESERIALBEGIN() is
      dummy function which returns first parameter and HB_DESERIALNEXT()
      is a simple wrapper to HB_DESERIALIZE() so it's not necessary to
      use them.

  * harbour/source/rtl/hbinet.c
    * changed INET*() functions to HB_INET*() and enable them for default
      build
    + added INET*() functions wrappers covered by HB_COMPAT_XHB macro

  * harbour/source/rtl/hbrandom.c
    + added HB_RANDOMINT() - xHarbour compatible

  * harbour/source/rtl/len.c
    + added support for HASHes

  * harbour/source/rtl/valtype.c
    + added support for HASHes
    + added set of HB_IS*() functions - they are a little bit faster then
      calling VALTYPE( v ) == <cVal>
    - removed HB_ISBYREF() - this function cannot longer work, it was using
      a Clipper incompatible anomalies in passing variables by reference I
      fixed so it has to stop to work. If it will be realy necessary to
      implement HB_ISBYREF() function then please inform me - it will have
      to be done at compiler level or with some much deeper HVM stack
      checking.

  * harbour/source/vm/extend.c
    ! fixed hb_extIsArray() and hb_extIsObject() to work well with
      parameters passed by reference.
      Please note that now hb_extIsArray() return TRUE only for pure arrays
      not object values.

  * harbour/contrib/Makefile
  + harbour/contrib/tip/Changelog
  + harbour/contrib/tip/Makefile
  + harbour/contrib/tip/atokens.c
  + harbour/contrib/tip/base64x.c
  + harbour/contrib/tip/cgi.prg
  + harbour/contrib/tip/client.prg
  + harbour/contrib/tip/credent.prg
  + harbour/contrib/tip/cstr.prg
  + harbour/contrib/tip/encb64.prg
  + harbour/contrib/tip/encmthd.c
  + harbour/contrib/tip/encoder.prg
  + harbour/contrib/tip/encqp.prg
  + harbour/contrib/tip/encurl.prg
  + harbour/contrib/tip/ftpcln.prg
  + harbour/contrib/tip/hbhex2n.c
  + harbour/contrib/tip/httpcln.prg
  + harbour/contrib/tip/mail.prg
  + harbour/contrib/tip/popcln.prg
  + harbour/contrib/tip/smtpcln.prg
  + harbour/contrib/tip/tip.ch
  + harbour/contrib/tip/url.prg
  + harbour/contrib/tip/utils.c
    + added TIP library - code borrowed from xHarbour



   Please test - a lot of above code is not well tested, also some peaces
   were written over year ago for different things (f.e. serialization for
   NETRDD) and now I collected them and committed.
   The TIP library was not tested at all. It can be compiled but I cannot
   say if it works - I hope that people familiar with it can make necessary
   test and fixes.
   It's also not the final version of low level HASH item code. I'm working
   on more efficient structure which uses binary tries but I cannot say when
   I'll finish it (maybe in this weekend or maybe in next year) so I committed
   working version now even if I'm not happy with overall performance (BTW
   not worser then in xHarbour)
2007-03-22 12:28:14 +00:00
Przemyslaw Czerpak
8ce0d03aa0 2007-03-09 04:40 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/common.mak
  * harbour/makefile.bc
  * harbour/makefile.vc
  * harbour/bin/hb-func.sh
  * harbour/config/global.cf
  * harbour/include/error.ch
  * harbour/include/hbcomp.h
  * harbour/include/hbcompdf.h
  * harbour/include/hbexpra.c
  * harbour/include/hbexprb.c
  - harbour/include/hbexprc.c
  * harbour/include/hbexprop.h
  * harbour/include/hbmacro.h
  * harbour/source/Makefile
  * harbour/source/common/expropt1.c
  * harbour/source/common/expropt2.c
  * harbour/source/compiler/Makefile
  - harbour/source/compiler/exproptc.c
  - harbour/source/compiler/harbour.c
  * harbour/source/compiler/harbour.y
  * harbour/source/compiler/harbour.yyc
  * harbour/source/compiler/hbcomp.c
  * harbour/source/compiler/hbgenerr.c
  + harbour/source/compiler/hbmain.c
  * harbour/source/compiler/hbpcode.c
  * harbour/source/macro/Makefile
  * harbour/source/macro/macro.y
  * harbour/source/macro/macro.yyc
  - harbour/source/macro/macroc.c
  + harbour/source/main/Makefile
  + harbour/source/main/harbour.c
  * harbour/source/vm/macro.c
    * resolved name conflicts between compiler and macro compiler.
      Now new compiler library is created.
      There are some things which can be improved and cleaned yet
      but it's enough to create single binaries with compiler+HVM+RTLs.
      I updated non GNU make files but I cannot tested the modifications
      - please check and fix me if necessary
2007-03-09 03:44:42 +00:00
Przemyslaw Czerpak
61800e95cc 2007-03-05 23:30 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/hbcompdf.h
  * harbour/include/hbexprb.c
  * harbour/source/compiler/hbgenerr.c
    * do not generate warnings about meaningless expression usage
      in code optimized by short logical expression evaluation, f.e.:
         proc main()
         (f1() .or. (f2(), .t.))
         return
2007-03-05 22:30:50 +00:00
Przemyslaw Czerpak
f9452a8f85 2007-03-04 14:00 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/hbapifs.h
  * harbour/include/hbcompdf.h
  * harbour/include/hbpp.h
  * harbour/source/common/hbfsapi.c
  * harbour/source/compiler/cmdcheck.c
  * harbour/source/compiler/harbour.c
  * harbour/source/compiler/hbusage.c
  * harbour/source/compiler/ppcomp.c
  * harbour/source/pp/ppcore.c
    * cleanup .ppo file creation
    + new compiler switch: p+ to enable preprocessor tracing
      when used information about applied rules is stored in .ppt file
  * harbour/include/hbdefs.h
  * harbour/source/rtl/gtos2/gtos2.c
    * OS2 build cleanup
2007-03-04 13:11:36 +00:00
Przemyslaw Czerpak
26617b2472 2007-02-18 12:40 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/common.mak
  * harbour/source/compiler/Makefile
  * harbour/source/compiler/hbfix.c
  + harbour/source/compiler/hbopt.c
    * divided hbfix.c into two separated functions:
      - hb_compFixFuncPCode() which only fix generated PCODE updating
        local parameters numbers when PARAMETERS is used
      - hb_compOptimizePCode() which makes PCODE optimization
      It allows to not execute hb_compFixFuncPCode() when PARAMETERS
      is not use and execute hb_compOptimizePCode() more then once in
      optimization process.

  * harbour/hbgtmk.sh
    * updated CVS server name

  * harbour/include/hbcomp.h
  * harbour/include/hbcompdf.h
  * harbour/source/compiler/complex.c
  * harbour/source/compiler/harbour.c
  * harbour/source/compiler/harbour.y
  * harbour/source/compiler/harbour.yyc
  * harbour/source/compiler/hbcomp.c
  * harbour/source/compiler/hbgenerr.c
  * harbour/source/compiler/hbident.c
    * changed code for generating in PCODE line numbers and module names
      there was serious problem with line numbers and module names in old
      code - in many cases line numbers were not generated at all or
      generated in wrong places. Also file module name was not updated
      when inside of function some code was included with #include
      For such situation now modified version of HB_P_MODULE is generated
      with module name only but without function name, f.e.:
         HB_P_MODULE    "test.prg:"
      exactly the same form of HB_P_MODULE is used in xHarbour.
      Debugger code should be updated to recognize such HB_P_MODULE version
      Ryszard any chance that you can look at it?
      And what about syncing with xHarbour debugger?
      I can add some missing functions to compiler and HVM but I do not
      want to update next peace of code myself. Sorry but I do not have
      enough time. I'd prefer to finish some other things I'm working.
      If Ryszard is busy can someone else try to port xHarbour debugger
      to Harbour?
2007-02-18 11:40:22 +00:00
Przemyslaw Czerpak
48f8dba263 2007-02-08 23:55 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/hbgtinfo.ch
  * harbour/contrib/libct/ctwin.c
  * harbour/source/rtl/gtalleg/gtalleg.c
  * harbour/source/rtl/gtcrs/gtcrs.c
  * harbour/source/rtl/gtdos/gtdos.c
  * harbour/source/rtl/gtos2/gtos2.c
  * harbour/source/rtl/gtpca/gtpca.c
  * harbour/source/rtl/gtsln/gtsln.c
  * harbour/source/rtl/gtstd/gtstd.c
  * harbour/source/rtl/gtwin/gtwin.c
  * harbour/source/rtl/gtwvt/gtwvt.c
  * harbour/source/rtl/gtxwc/gtxwc.c
    + added support for GTI_FULLSCREEN, GTI_KBDSUPPORT, GTI_ISCTWIN

  * harbour/source/rtl/hbgtcore.c
    ! fixed line and box drawing when the coordinates are out of screen size

  * harbour/include/hbapi.h
  * harbour/include/hbcomp.h
  * harbour/include/hbpcode.h
  * harbour/include/hbstack.h
  * harbour/include/hbvm.h
  * harbour/include/hbxvm.h
  * harbour/source/compiler/complex.c
  * harbour/source/compiler/genc.c
  * harbour/source/compiler/gencc.c
  * harbour/source/compiler/harbour.c
  * harbour/source/compiler/harbour.y
  * harbour/source/compiler/harbour.yyc
  * harbour/source/compiler/harbour.yyh
  * 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/classes.c
  * harbour/source/vm/estack.c
  * harbour/source/vm/hvm.c
  * harbour/source/vm/itemapi.c
    ! added protection against cyclic references in arrays
    * eliminated action parameter from hb_vmRequestReenter() /
      hb_vmRequestRestore()
    * moved s_lRecoverBase and s_uiActionRequest to HB_STACK structure
      for future MT HVM version
    + added internal item structure hb_struRecover - it's not real item
      but this structure is used to keep information about BEGIN SEQUENCE
      data - it reduce HB_STACK usage
    + added support for ALWAYS clause in BEGIN SEQUENCE
      The syntax is:
         BEGIN SEQUENCE
            <code>
         [ RECOVER [ USING oErr ] ]
            <recoverCode>
         [ ALWAYS ]
            <alwaysCode>
         END [ SEQUENCE ]
      It's guaranteed that <alwaysCode> is _ALWAYS_ executed even if
      inside <code> or <recoverCode> some new exceptions like RETURN,
      BREAK or QUIT will appear.
      Please note that when the following code is executed:
         BEGIN SEQUENCE
            <code>
         ALWAYS
            <alwaysCode>
         END
      (without RECOVER clause) then BREAK exception inside <code> is not
      recovered, <alwaysCode> is executed and then BREAK exception is
      passed to outer BEGIN SEQUENCE. This is the same semantic as
      used in TRY / [ CATCH ] / FINALLY / END
      Those of you who prefer to use TRY / CATCH / FINALLY / END instead
      of BEGIN SEQUENCE / RECOVER / ALWAYS / END can simply add to your
      source code:
         #command TRY               => BEGIN SEQUENCE
         #command CATCH [ oErr ]    => RECOVER [ USING <oErr> ]
      and:
         errorBlock( {|oErr| break( oErr ) } )
      Though instead of 'break( oErr )' I suggest to use some small function
      which will support some basic recovery/substitute operations like in
      default errorsys() and LockErrHandler() to not break existing code
      which may depends on the default behavior.
      If you want I can add direct support for TRY / CATCH / FINALLY / END
      but I'm not sure it's really necessary.
      Please note also that in Harbour ALWAYS code is execute even for QUIT
      excpetion.
      When <alwaysCode> is executed current exception is stored and restored
      when is finished. If new exception appears inside <alwaysCode> then
      restored exception depends on the priority in the following order:
         QUIT     // highest priority
         BREAK
         RETURN
      If both exceptions have the same priority and contain additional value
      (error object in BREAK or return value in RETURN) then the recently set
      one is restored. It's similar behavior to destructor code.

  * harbour/source/common/hbstr.c
    * moved one character length string table (hb_szAscii) from hvm.c
      to use it also in compiler and preprocessor

  * harbour/source/compiler/ppcomp.c
  * harbour/source/pp/ppcore.c
  * harbour/source/pp/pplib.c
    * tuned error messages to be more Clipper compatible
    % use static strings from hb_szAscii

  * harbour/source/rtl/alert.prg
    * use hb_gtInfo( GTI_FULLSCREEN ) to detect type of GT driver
    ! some minor fixes
      TOFIX: we have to also use GTI_ISCTWIN or add window allocation
             to standard GT drivers to be Clipper compatible when CTWIN
	     is used - In Clipper Tools ALERT() works in differ way then
	     the standard one. It creates separate window box to display
	     data, supports SETKEY(), etc. I'll think about adding some
	     extended support for ALERT() and similar operations (f.e.
	     separate debugger windows) to GT API so it will be also
	     possible to overload standard alert() command by GUI message
	     box in GTGUI and similar GT drivers.

  * harbour/source/rtl/binnumx.c
    ! fixed U2BIN() - wrong casting
2007-02-08 22:56:31 +00:00
Przemyslaw Czerpak
9d263b1141 2007-01-05 08:00 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/hbcompdf.h
     + added comment

  * harbour/include/hbexpra.c
     * change expression type for <exp> = <exp> from HB_EO_EQUAL
       to HB_EO_ASSIGN in hb_compExprGenStatement() function so
       later we can safely make all optimization in hb_compExprUseEqual()
       during reduce process - optimization only when PCODE is generated
       is too late and causes that expressions like:
         iif( 1 = 1, <exp>, <exp> )
       are not reduces (Clipper reduce them)
     * do not execute hb_compFunCallCheck() in hb_compExprNewFunCall()
       to avoid repeating the same error message in hb_compExprUseFunCall()

  * harbour/include/hbexprb.c
     * enabled reduction for hb_compExprUseEqual() and generate errors
       when it's used as statement

  * harbour/source/common/expropt2.c
     * added some missing reductions for expressions like: NIL == NIL

  * harbour/source/common/reserved.c
     % very basic optimization: use binary search instead of linear
       scanning for reserved words and shortcuts - it gives noticeable
       speed improvement in macro compiler

  * harbour/source/compiler/complex.c
     * changed the order of special keywords to keep alphabetic sorting

  * harbour/source/compiler/harbour.c
     % some minor optimizations in aliased expressions
     ! added protection in hb_compIsJump() to avoid possible problems
       when this function is executed after replacing some code with
       jumps by series of NOOPs in optimizations process

  * harbour/source/compiler/hbfix.c
     * better optimization of PCODE generated for logical expressions

  * harbour/source/compiler/hbfunchk.c
     % use binary search instead of linear scan

  * harbour/source/rtl/minmax.c
     ! fixed GPF when MIN() or MAX() function is called with less then
       two parameters

  * harbour/source/vm/itemapi.c
     * minor optimization and formatting
2007-01-05 07:41:20 +00:00
Przemyslaw Czerpak
647e9281bf 2006-12-30 22:45 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/hbcomp.h
  * harbour/include/hbcompdf.h
  * harbour/include/hbexpra.c
  * harbour/include/hbexprb.c
  * harbour/source/common/expropt1.c
  * harbour/source/compiler/harbour.c
  * harbour/source/compiler/harbour.y
  * harbour/source/compiler/harbour.yyc
  * harbour/source/compiler/hbgenerr.c
  * harbour/source/macro/macro.l
  * harbour/source/macro/macro.y
  * harbour/source/macro/macro.yyc
  * harbour/source/macro/macro.yyh
  * harbour/source/macro/macrolex.c
  * harbour/source/vm/macro.c
    * final grammar cleanup: removed unused and/or unnecessary grammar
      expressions in *.y files, fixed some differences between compiler
      and macrocompiler, fixed some other bugs, typos, clipper
      incompatibilities, etc.
      It's end of year, it's late and sorry but I'd like to begin making
      something absolutely differ then creating detail description ;-)
      If you will have any questions then I'll answer in new year.

  * harbour/source/rdd/dbffpt/Makefile
    * small hack for XCC compilation

best regards and happy new year,
Przemek
2006-12-30 21:51:33 +00:00
Przemyslaw Czerpak
40999edb49 2006-12-28 16:40 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/hbcomp.h
  * harbour/include/hbcompdf.h
  * harbour/include/hbexprb.c
  * harbour/include/hbexprc.c
  * harbour/include/hbpcode.h
  * harbour/include/hbpp.h
  * harbour/include/hbxvm.h
  * harbour/source/compiler/genc.c
  * harbour/source/compiler/gencc.c
  * harbour/source/compiler/gencli.c
  * harbour/source/compiler/harbour.c
  * harbour/source/compiler/harbour.y
  * harbour/source/compiler/harbour.yyc
  * harbour/source/compiler/hbgenerr.c
  * harbour/source/compiler/hbpcode.c
  * harbour/source/vm/hvm.c
  * harbour/source/vm/macro.c
    * changed HB_P_MACROPUSHINDEX PCODE behavior - now it does not evaluated
      macro expression
    * eliminated HB_ET_MACRO_INDEX - HB_ET_MACRO_LIST can be used instead
    * accept ... in codeblocks only when codeblocks parameters are defined
      as variables, f.e: {|a,b,...|qout(a+b,...)}
    ! fixed error in a[&s]:=100
    + added support for a[...] - now ... can be used in the same context as
      xbase++ like multivalue macro (a[&s])
    * disabled ++, --, <op>= optimizations when -kc (strict Clipper
      compatibility mode) compiler switch is used
2006-12-28 15:44:41 +00:00
Przemyslaw Czerpak
88716ffc11 2006-12-27 21:12 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/hbcompdf.h
    * removed not longer used pFunCall from asMacro expression.
      This item was used only in a very old s:="1,2";f(&s) implementation.

  * harbour/include/hbexpra.c
  * harbour/include/hbexprb.c
  * harbour/include/hbexprop.h
  * harbour/source/common/expropt1.c
  * harbour/source/compiler/harbour.y
  * harbour/source/compiler/harbour.yyc
    * a little bit more simple implementation of passing optional arguments
      and simplified some code. Now they can be used in any place in argument
      list (also repeated). It's also possible to create arrays using "..."
      as array element(s), f.e.: func f(...); return { "{", ..., "}" }
      If you think it will be usable then I can also add support for accessing
      array items with optional parameters, f.e.: ? a[ ... ]
      so it can be used in the same context as xbase++ like macro lists
      but for this I will need new PCODE so I'd like to hear your opinion
      ASAP - I'm closing any extensions today.
2006-12-27 20:17:22 +00:00
Przemyslaw Czerpak
7a13cae5e3 2006-12-27 15:00 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/hbcomp.h
  * harbour/include/hbcompdf.h
  * harbour/include/hberrors.h
  * harbour/include/hbexpra.c
  * harbour/include/hbexprb.c
  * harbour/include/hbpcode.h
  * harbour/include/hbxvm.h
  * harbour/source/common/expropt1.c
  * harbour/source/compiler/genc.c
  * harbour/source/compiler/gencc.c
  * harbour/source/compiler/harbour.c
  * harbour/source/compiler/harbour.y
  * harbour/source/compiler/harbour.yyc
  * harbour/source/compiler/hbdead.c
  * harbour/source/compiler/hbfix.c
  * harbour/source/compiler/hbgenerr.c
  * harbour/source/compiler/hblbl.c
  * harbour/source/compiler/hbpcode.c
  * harbour/source/compiler/hbstripl.c
  * harbour/source/vm/hvm.c
    + added support for passing optional parameters to called function, f.e.:
         proc p( a, b, ... )
         qout( a, b, "X", ... )
    * forbid creating function pointer when function is used with parameters,
      f.e.: x:=@f1(1,2,3)

  * harbour/source/compiler/complex.c
    * cleaned all restrictions on reserved words I've found - if I missed
      sth then please inform me. The previous behavior and some error
      messages are used with -kc compiler switch

  * harbour/source/rtl/symbol.prg
  * harbour/source/rtl/tobject.prg
    ! eliminated limitations in number of constructor parameters
      (new syntax with passing optional parameters used)
2006-12-27 14:01:52 +00:00
Przemyslaw Czerpak
3df896f666 2006-12-24 16:54 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/hbcompdf.h
  * harbour/include/hbexprb.c
  * harbour/source/common/expropt1.c
  * harbour/source/compiler/harbour.c
  * harbour/source/compiler/harbour.y
  * harbour/source/compiler/harbour.yyc
  * harbour/source/compiler/hbcomp.c
    - removed not longer used fExternal from compiler structure
    * allow to pass array items by reference ( func(@a[1]) ) and some
      cleanups in reference rules. Probably we should also block using:
         @func(param1 [,param2,[,...paramN]])
      and accept only @func()
    ! fixed using statements in codeblocks used to initialize static
      variables and some other cleanups (f.e. allow to use as static
      initializers any functions which are later eliminated by expression
      optimizer.
2006-12-24 16:12:13 +00:00
Przemyslaw Czerpak
f63975287b 2006-12-18 19:30 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/config/w32/bcc32.cf
    * cleanup
  + harbour/config/w32/xcc.cf
    + added XCC support

  * harbour/contrib/btree/hb_btree.c
    * use hb_vmAtInit()/hb_vmAtExit() instead of INIT/EXIT functions defined
      from C code

  * harbour/contrib/libct/tab.c
    * casting

  * harbour/contrib/odbc/odbc.c
    ! removed #include <malloc.h> - it should not be used with new C
      compilers
      I think that we should replace this library with hbodbc from xHarbour.

  * harbour/contrib/ole/ole2.c
    * updated for XCC

  * harbour/include/hbdefs.h
    * include stdint.h if available

  * harbour/source/compiler/complex.c
    ! fixed yet another stupid mistake in WITHOBJECT token

  * 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/hvm.c
    + added HB_P_SWAP <n> PCODE

  * harbour/include/hbcompdf.h
  * harbour/include/hbexpra.c
  * harbour/include/hbexprb.c
  * harbour/include/hbexprc.c
  * harbour/include/hbexprop.h
    ! fixed GPF during compilation of @:var, @:&var, @o:&var
    + added support for @o:&var and @:var, @:&var inside WITH OBJECT
      statement
    * changed PCODE generated of ++,--,+=,-=,...
      Now left side expression is evaluated _ONLY_ once and when object
      messages are used it's guarantied that exactly the same object
      variable will be used. It also fixes some problems which exists
      in Clipper. This optimization is enabled by -kh flag (by default)
      and can be disabled with -kc.
    % optimize ald macros in ++,--,+=,-=,... operations
    * add automatically "_" prefix when macro message is used in assignment
      context, f.e.:
         s:="osCode"
         o:=errorNew()
         ? o:&s
         o:&s := 100
         ? ++o:&s
         ? o:&s *= 5

  * harbour/include/hblang.ch
    - removed #xtranslate - this file is included by C code and some C
      compiler do not like unknown directives

  * harbour/utils/hbtest/rt_math.prg
    + added test code for <op>assign and (pre/post)(inc/dec)rementation,
      macro messages and WITH OBJECT

  * harbour/source/compiler/harbour.c
  * harbour/source/rdd/dbf1.c
  * harbour/source/rtl/errorapi.c
  * harbour/source/rtl/hbgtcore.c
  * harbour/source/rtl/gtdos/gtdos.c
  * harbour/source/rtl/gtos2/gtos2.c
  * harbour/source/rtl/gtpca/gtpca.c
  * harbour/source/rtl/gtsln/gtsln.c
  * harbour/source/rtl/gtstd/gtstd.c
  * harbour/source/rtl/gtwin/gtwin.c
    * casting and warning cleanup

  * harbour/utils/Makefile
    + added $(HB_UTILS)

  - harbour/utils/hbpp/hbpp.h
  + harbour/utils/hbpp/hbppdef.h
  * harbour/utils/hbpp/hbpp.c
  * harbour/utils/hbpp/hbppcomp.c
  * harbour/utils/hbpp/hbppcore.c
  * harbour/utils/hbpp/hbpplib.c
  * harbour/utils/hbpp/hbpptbl.c
  * harbour/utils/hbpp/pragma.c
    * renamed hbpp.h to hbppdef.h to avoid possible conflict with hbpp.h
      in include directory
    * casting and warning cleanup
2006-12-18 18:34:44 +00:00
Ryszard Glab
c018b6bf9a 2006-12-18 18:20 UTC+0100 Ryszard Glab <rglab//imid.med.pl>
* include/hbcomp.h
      + added extern BOOL hb_compCheckUnclosedStru( HB_COMP_DECL )

   * include/hbcompdf.h
      + added 'int iLastLineErr' to HB_COMP structure

   * include/hbpp.h
      + added extern BOOL hb_pp_eof( PHB_PP_STATE )

   * source/compiler/harbour.c
   * source/compiler/harbour.y
   * source/compiler/harbour.yyc
   * source/compiler/harbour.yyh
   * source/compiler/hbgenerr.c
      * fixed reporting errors in cases of unclosed delimiters or
      unclosed control structures IF/WHILE/FOR/etc

   * source/pp/ppcore.c
      + added hb_pp_eof() function
2006-12-18 17:22:06 +00:00
Przemyslaw Czerpak
bdb38dde43 2006-12-15 16:55 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/hbapi.h
  * harbour/include/hbcomp.h
  * harbour/include/hbcompdf.h
  * harbour/include/hbdefs.h
  * harbour/include/hberrors.h
  * harbour/include/hbexpra.c
  * harbour/include/hbexprb.c
  * harbour/include/hbexprc.c
  * harbour/include/hbpcode.h
  * harbour/include/hbxvm.h
  * harbour/source/common/expropt1.c
  * harbour/source/common/expropt2.c
  * harbour/source/common/hbstr.c
  * harbour/source/compiler/cmdcheck.c
  * harbour/source/compiler/genc.c
  * harbour/source/compiler/gencc.c
  * harbour/source/compiler/gencobj.c
  * harbour/source/compiler/harbour.c
  * harbour/source/compiler/harbour.y
  * harbour/source/compiler/harbour.yyc
  * harbour/source/compiler/hbdead.c
  * harbour/source/compiler/hbfix.c
  * harbour/source/compiler/hbgenerr.c
  * harbour/source/compiler/hblbl.c
  * harbour/source/compiler/hbpcode.c
  * harbour/source/compiler/hbstripl.c
  * harbour/source/macro/macro.y
  * harbour/source/macro/macro.yyc
  * harbour/source/rtl/console.c
  * harbour/source/rtl/isprint.c
  * harbour/source/rtl/left.c
  * harbour/source/rtl/right.c
  * harbour/source/rtl/strtran.c
  * harbour/source/vm/codebloc.c
  * harbour/source/vm/hvm.c
  * harbour/source/vm/macro.c
    * general PCODE cleanup and address most of TODO/TOFIX notes in
      source code:
      ! fixed GPF traps when too long string or codeblock is generatd
      + added support for 16MB codeblocks and strings
      ! removed macrocompiler limitation for jumps range
      ! fixed GPF when more then 255 local variables is used and added
        support for 2^15 locals
      ! removed all strtok() functions
      % added optimization for all +=, -=, *=, %=, ^=, **= operations
        when left side of expression is variable or array item
      % added optimization for all +=, -=, *=, %=, ^=, **= operations
        when left side of expression is object method and updated ++, --
        for new code. It's still disabled until we will not add support
        for late evaluated reference items to HVM
      ! fixed a[++i]++ and similar operations (a[++i]*=2, ...). Now ++i is
        executed only once. It's not Clipper compatible but it was in
        TODO note in source code. It can be disabled by -kc option
      * finished support to xHarbour like #pragma TEXTHIDDEN(1)
      ! fixed local add int optimization when PARAMETERS used after
        optimization changed local variable number over 255
      ! fixed GPF trap when in HB_P_<op>EQ PCODEs when executed for
        direct values
      * others
    ! fixed problems reported by Chen
    * optimized strtran(), left(), right() to not create new string copy
      when the same value is returned
2006-12-15 15:54:28 +00:00
Przemyslaw Czerpak
4dfc616250 2006-12-01 18:55 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/bin/pack_src.sh
    + added packing *.yy[ch] files

  * harbour/makefile.bc
  * harbour/makefile.vc
  * harbour/include/hbcomp.h
  * harbour/include/hbcompdf.h
  * harbour/include/hbexpra.c
  * harbour/include/hbexprb.c
  * harbour/include/hbexprc.c
  * harbour/include/hbexprop.h
  * harbour/include/hbpp.h
  * harbour/source/common/expropt1.c
  * harbour/source/common/expropt2.c
  * harbour/source/compiler/Makefile
  * harbour/source/compiler/complex.c
  * harbour/source/compiler/harbour.c
  * harbour/source/compiler/harbour.l
  * harbour/source/compiler/harbour.y
  * harbour/source/compiler/harbour.yyc
  * harbour/source/compiler/harbour.yyh
  * harbour/source/compiler/hbgenerr.c
  * harbour/source/macro/macro.y
  * harbour/source/macro/macro.yyc
  * harbour/source/pp/ppcore.c
    + added hb_comp prefix to grammar/lexer compiler public functions to
      reduce possible conflict with 3-rd party code which may use default
      yy prefix.
    ! do not use bison destructors for expressions. Internal bison logic
      cannot properly detect if expression was used or not in some of our
      grammar rules and it's possible that some expressions will not be freed
      and some other freed twice.
    ! added protection against multiple destructors execution for CBSTART
      and LITERAL tokens
    * added small garbage collector for deallocating expressions which were
      not freed (such situation can happen in syntax errors)
    % some optimizations in used structures to reduce their sizes
    + added protection against execution PCODE optimizations for functions
      which were not cleanly compiled.

  * harbour/source/rtl/idle.c
    * use const in nanosec() timeout declaration
2006-12-01 18:00:53 +00:00
Przemyslaw Czerpak
1808aec080 2006-11-30 03:50 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/hbcompdf.h
  * harbour/source/compiler/harbour.l
  * harbour/source/compiler/harbour.c
  * harbour/source/compiler/harbour.y
    * removed declaration and all references to global variable hb_comp_data
      it's not longer necessary after last modifications

  * harbour/source/compiler/harbour.yyc
    * synced compiler grammar parser

  * harbour/source/macro/macro.yyc
    ! regenerated macro compiler grammar parser with -p hb_macro - I forgot
      about this prefix before last commit
2006-11-30 02:54:29 +00:00
Przemyslaw Czerpak
33ccad6661 2006-11-27 02:10 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/tests/codebl.prg
  * harbour/tests/langmsg.prg
  * harbour/utils/hbpptest/pp_test.prg
  * harbour/utils/hbpptest/pretest.prg
  * harbour/samples/pe/license.txt
    * removed carriage return (\r) characters

  * harbour/include/hbcomp.h
  * harbour/include/hbapi.h
  * harbour/include/hbcompdf.h
  * harbour/include/hbexprb.c
  * harbour/include/hbexprop.h
  * harbour/source/vm/macro.c
  * harbour/source/compiler/hbcomp.c
  * harbour/source/compiler/complex.c
  * harbour/source/compiler/harbour.c
  * harbour/source/compiler/harbour.l
  * harbour/source/compiler/harbour.y
  * harbour/source/compiler/genjava.c
  * harbour/source/compiler/hbcomp.c
  * harbour/source/compiler/hbident.c
  * harbour/source/compiler/hbpcode.c
  * harbour/source/compiler/ppcomp.c
    * separated HB_COMP and HB_MACRO definitions and added HB_COMMON
      structure used when HB_COMMON_SUPPORT macro is set
    * hide HB_MACRO internal definitions in hbapi.h when HB_MACRO_SUPPORT
      is not set
    These modifications should help in future compiler and macro compiler
    integration into single binary.

    + added clipper compatible error message in unclosed structures
      In general we should cleanup rules to make error reporting more
      user friendly and Clipper compatible
    % eliminated unnecessary allocations
    + added int mode member to common part of HB_COMP and HB_MACRO
      structure. It's initialized to HB_MODE_MACRO or HB_MODE_COMPILER
    + add TOFIX note about memory leaks in cParamTypes and pParamClasses
      members of COMDECLARED structure. It's a part of unfinished strong
      typing code. I do not know what Ryszard plan to do with it so I'm
      leaving it as is. The part of strong typing which were operating
      on emulated HVM stack has been removed.
    * removed static variables from genjava.c. Also gencli.c and genobj32.c
      should be fixed but this will not make this code working so I haven't
      touched it.
    * changed 3-rd parameter of hb_compIdentifierNew() from BOOL to int.
      Now it can have the following values: HB_IDENT_STATIC, HB_IDENT_FREE,
      HB_IDENT_COPY. This modification will allow in the future using common
      for static and dynamic symbol hash table without additional source code
      changes. I also plan to use identifier hash table in PP the reduce
      number of memory allocations and speed-up preprocessing by using
      second level hashing for hash keys.

  * harbour/source/common/expropt1.c
  * harbour/source/common/expropt2.c
    * changed HB_MACRO_SUPPORT to HB_COMMON_SUPPORT to automatically detect
      possible conflicts between compiler and macro compiler
    ! removed first detected conflict which existed for long time
    + added hb_compExprMacroAsAlias() function to convert HB_ET_VARIABLE
      expression to HB_ET_ALIAS.

  * harbour/source/macro/macro.y
    ! fixed using prefix&macro-> and &macro.sufix-> when macro cannot be
      substituted by compiler, f.e.:
         M->v := NIL
         x := "&v.1->fld"
         M->v := "v"
         M->v1:= "data"
         ? &x
    ! fixed memory leak in macro substituted expression compilation

  * harbour/source/vm/macro.c
    ! fixed initialization of some HB_MACRO members
    ! fixed value returned for type("&V->F") when alias does not exist
    - removed not longer used hb_comp_bShortCuts global variable
2006-11-28 01:10:34 +00:00
Przemyslaw Czerpak
e6a3baea64 2006-11-24 19:10 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/config/bsd/gcc.cf
  * harbour/config/darwin/gcc.cf
  * harbour/config/dos/djgpp.cf
  * harbour/config/dos/owatcom.cf
  * harbour/config/hpux/gcc.cf
  * harbour/config/linux/gcc.cf
  * harbour/config/linux/owatcom.cf
  * harbour/config/os2/gcc.cf
  * harbour/config/sunos/gcc.cf
  * harbour/config/w32/bcc32.cf
  * harbour/config/w32/gcc.cf
  * harbour/config/w32/mingw32.cf
  * harbour/include/hbcomp.h
  * harbour/include/hbcompdf.h
  * harbour/include/hberrors.h
  * harbour/include/hbexpra.c
  * harbour/include/hbexprb.c
  * harbour/include/hbver.h
  * harbour/source/common/hbstr.c
  * harbour/source/common/hbver.c
  * harbour/source/compiler/Makefile
  * harbour/source/compiler/cmdcheck.c
  * harbour/source/compiler/complex.c
  * harbour/source/compiler/gencli.c
  * harbour/source/compiler/genjava.c
  * harbour/source/compiler/genobj32.c
  * harbour/source/compiler/harbour.c
  - harbour/source/compiler/harbour.simple
  - harbour/source/compiler/harbour.slx
  - harbour/source/compiler/harbour.sly
  * harbour/source/compiler/harbour.y
  * harbour/source/compiler/hbgenerr.c
  - harbour/source/compiler/hbslex.c
  - harbour/source/compiler/hbstrong.c
  * harbour/source/compiler/hbusage.c
  - harbour/source/compiler/simplex.c
  * harbour/source/macro/Makefile
  - harbour/source/macro/macro.slx
  - harbour/source/macro/macroslx.c
  * harbour/source/pp/ppcore.c
  * harbour/utils/hbpp/hbppcomp.c
    - removed SIMPLEX references
    ! fixed memory leak in request _GET_
    * use hb_compIdentifiersNew() in INLINE and AUTOOPEN structures
      members
    * eliminated all internal exit() calls. Now hb_compGenError() with
      fatal errors does not interrupt application but only sets
         HB_COMP_PARAM->fExit = TRUE;
      What should cause silent clean application close.
      Please keep it in mind making future modifications and do not
      introduce and exit() function call.
    + added support for \x<hex> and \<oct> quoting in extended strings
      (just like in C). Warning !!!. Embedded 0 bytes are supported by
      PP, lexer and expression optimizer but not by bison. To make them
      working it will be necessary to change Literal terminal symbol
      holder and add length field in bison rules and also change the hash
      table used to hold identifiers, literals and macros to store and use
      real string length. If someone will try to use strings with embedded
      0 now then they will be cut but nothing worser should happen.
2006-11-24 18:10:07 +00:00
Przemyslaw Czerpak
9cd2098d6d 2006-11-23 20:00 UTC+0100 Przemyslaw Czerpak (druzus/at/priv.onet.pl)
* harbour/include/hbapi.h
  * harbour/include/hbcomp.h
  + harbour/include/hbcompdf.h
  * harbour/include/hberrors.h
  * harbour/include/hbexpra.c
  * harbour/include/hbexprb.c
  * harbour/include/hbexprc.c
  * harbour/include/hbexprop.h
  * harbour/include/hbmacro.h
  * harbour/include/hbpp.h
  * harbour/include/hbvm.h
  * harbour/source/common/expropt1.c
  * harbour/source/common/expropt2.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-23 18:57:54 +00:00