From fb60be5866b6c8d8b666d0744e6bbc468e89f214 Mon Sep 17 00:00:00 2001 From: Przemyslaw Czerpak Date: Sat, 17 Jun 2006 06:36:33 +0000 Subject: [PATCH] 2006-06-17 00:20 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl) * harbour/include/hbcomp.h + added extern hb_comp_szFile * harbour/include/hbinit.h * changed hb_vmProcessSymbolsExt() to hb_vmProcessSymbolsEx() respecting Mindaugas suggestion. + added HB_INIT_SYMBOLS_EX_END() macro * translate HB_INIT_SYMBOLS_END() macro to HB_INIT_SYMBOLS_EX_END() * harbour/include/hbsetup.h + added HB_PCODE_VER_MIN and HB_PCODE_VER both now are set to 0x0001 * harbour/include/hbtypes.h * changed VM_PROCESS_SYMBOLS_EXT to VM_PROCESS_SYMBOLS_EX * harbour/include/hbvm.h + added hb_vmFindModuleSymbolName() - it returns the file name of given symbol if it was registered in HVM * harbour/source/compiler/genc.c * set HB_FS_LOCAL for local module functions * use HB_INIT_SYMBOLS_EX_END instead of HB_INIT_SYMBOLS_END * harbour/source/compiler/harbour.c * minor modifications * harbour/contrib/rdd_ads/ads1.c * harbour/source/rdd/dbf1.c * harbour/source/rdd/delim1.c * harbour/source/rdd/sdf1.c * harbour/source/rdd/dbfdbt/dbfdbt1.c * harbour/source/rdd/dbffpt/dbffpt1.c * harbour/source/rdd/dbfcdx/dbfcdx1.c * added HB_FS_LOCAL to function symbols in registered symbol tables * harbour/source/rdd/dbfntx/dbfntx1.c * added HB_FS_LOCAL to function symbols in registered symbol tables ! added missing break + added DBOI_KEYCOUNTRAW, DBOI_KEYNORAW. They works like DBOI_KEYCOUNT and DBOI_KEYNO in pure DBFNTX. Only with some upper level RDDs like RMDBFNTX which supports bit map filters they can return differ results. * harbour/source/rdd/workarea.c * changed ORDERINFO to DBORDERINFO in error message * harbour/source/rtl/set.c * respect previous settings in logical SETs if given value is not valid new one. + added misinf initialization for _SET_FORCEOPT and _SET_HARDCOMMIT. * changed default value of _SET_OPTIMIZE to TRUE * harbour/source/vm/dynsym.c * give the highest priority for LOCAL function symbols * harbour/source/vm/hvm.c + added hb_vmFindModuleSymbolName() - it returns the file name of given symbol if it was registered in HVM * changed hb_vmProcessSymbolsExt() to hb_vmProcessSymbolsEx() and added PCOE version checking * harbour/source/vm/maindllp.c * changed hb_vmProcessSymbolsExt() to hb_vmProcessSymbolsEx() * changed VM_PROCESS_SYMBOLS_EXT to VM_PROCESS_SYMBOLS_EX * harbour/source/vm/proc.c * changed to use stack macros/functions instead of direct accessing HB_STACK members + implemented PROCFILE() - it returns now real source file name with body of given function symbol or function executed at given stack level. If the source file cannot be detected then empty string is returned. Unlike in xHarbour it works also for static functions. synatx: PROCFILE( [ | ] ) F.e.: PROCFILE() -> current module name PROCFILE(@DBFCDX()) -> ../../dbfcdx1.c --- harbour/ChangeLog | 78 ++++++++++++++++++ harbour/contrib/rdd_ads/ads1.c | 10 +-- harbour/include/hbcomp.h | 2 + harbour/include/hbinit.h | 23 +++--- harbour/include/hbsetup.h | 8 ++ harbour/include/hbtypes.h | 2 +- harbour/include/hbvm.h | 4 +- harbour/source/compiler/genc.c | 23 ++++-- harbour/source/compiler/harbour.c | 6 +- harbour/source/rdd/dbf1.c | 5 +- harbour/source/rdd/dbfcdx/dbfcdx1.c | 8 +- harbour/source/rdd/dbfdbt/dbfdbt1.c | 4 +- harbour/source/rdd/dbffpt/dbffpt1.c | 8 +- harbour/source/rdd/dbfntx/dbfntx1.c | 7 +- harbour/source/rdd/delim1.c | 5 +- harbour/source/rdd/sdf1.c | 5 +- harbour/source/rdd/workarea.c | 2 +- harbour/source/rtl/set.c | 81 ++++++++++--------- harbour/source/vm/dynsym.c | 3 +- harbour/source/vm/hvm.c | 44 +++++++++-- harbour/source/vm/maindllp.c | 9 +-- harbour/source/vm/proc.c | 118 ++++++++++++++++++---------- 22 files changed, 314 insertions(+), 141 deletions(-) diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 9751dbffeb..76ae916443 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -8,6 +8,84 @@ 2002-12-01 13:30 UTC+0100 Foo Bar */ + + * harbour/source/rtl/math.c + ! fixed possible memory leak + * indenting + + * harbour/source/vm/classes.c + ! fixed possible GPF in __GETMSGPRF + * use only one function for method name hashing + + * harbour/source/vm/hvm.c + * minor fix + +2006-06-17 00:20 UTC+0200 Przemyslaw Czerpak (druzus/at/priv.onet.pl) + * harbour/include/hbcomp.h + + added extern hb_comp_szFile + + * harbour/include/hbinit.h + * changed hb_vmProcessSymbolsExt() to hb_vmProcessSymbolsEx() respecting + Mindaugas suggestion. + + added HB_INIT_SYMBOLS_EX_END() macro + * translate HB_INIT_SYMBOLS_END() macro to HB_INIT_SYMBOLS_EX_END() + + * harbour/include/hbsetup.h + + added HB_PCODE_VER_MIN and HB_PCODE_VER both now are set to 0x0001 + + * harbour/include/hbtypes.h + * changed VM_PROCESS_SYMBOLS_EXT to VM_PROCESS_SYMBOLS_EX + + * harbour/include/hbvm.h + + added hb_vmFindModuleSymbolName() - it returns the file name of given + symbol if it was registered in HVM + + * harbour/source/compiler/genc.c + * set HB_FS_LOCAL for local module functions + * use HB_INIT_SYMBOLS_EX_END instead of HB_INIT_SYMBOLS_END + + * harbour/source/compiler/harbour.c + * minor modifications + + * harbour/contrib/rdd_ads/ads1.c + * harbour/source/rdd/dbf1.c + * harbour/source/rdd/delim1.c + * harbour/source/rdd/sdf1.c + * harbour/source/rdd/dbfdbt/dbfdbt1.c + * harbour/source/rdd/dbffpt/dbffpt1.c + * harbour/source/rdd/dbfcdx/dbfcdx1.c + * added HB_FS_LOCAL to function symbols in registered symbol tables + + * harbour/source/rdd/dbfntx/dbfntx1.c + * added HB_FS_LOCAL to function symbols in registered symbol tables + ! added missing break + + added DBOI_KEYCOUNTRAW, DBOI_KEYNORAW. They works like DBOI_KEYCOUNT + and DBOI_KEYNO in pure DBFNTX. Only with some upper level RDDs like + RMDBFNTX which supports bit map filters they can return differ results. + + * harbour/source/rdd/workarea.c + * changed ORDERINFO to DBORDERINFO in error message + + * harbour/source/rtl/set.c + * respect previous settings in logical SETs if given value is not valid + new one. + + added misinf initialization for _SET_FORCEOPT and _SET_HARDCOMMIT. + * changed default value of _SET_OPTIMIZE to TRUE + + * harbour/source/vm/dynsym.c + * give the highest priority for LOCAL function symbols + + * harbour/source/vm/hvm.c + + added hb_vmFindModuleSymbolName() - it returns the file name of given + symbol if it was registered in HVM + * changed hb_vmProcessSymbolsExt() to hb_vmProcessSymbolsEx() and added + PCOE version checking + + * harbour/source/vm/maindllp.c + * changed hb_vmProcessSymbolsExt() to hb_vmProcessSymbolsEx() + * changed VM_PROCESS_SYMBOLS_EXT to VM_PROCESS_SYMBOLS_EX + + * harbour/source/vm/proc.c * changed to use stack macros/functions instead of direct accessing HB_STACK members + implemented PROCFILE() - it returns now real source file name diff --git a/harbour/contrib/rdd_ads/ads1.c b/harbour/contrib/rdd_ads/ads1.c index 75b0493015..9b427f3c45 100644 --- a/harbour/contrib/rdd_ads/ads1.c +++ b/harbour/contrib/rdd_ads/ads1.c @@ -4572,11 +4572,11 @@ static void hb_adsRddInit( void * cargo ) } HB_INIT_SYMBOLS_BEGIN( ads1__InitSymbols ) -{ "ADS", {HB_FS_PUBLIC}, {HB_FUNCNAME( ADS )}, NULL }, -{ "ADS_GETFUNCTABLE", {HB_FS_PUBLIC}, {HB_FUNCNAME( ADS_GETFUNCTABLE )}, NULL }, -{ "ADT_GETFUNCTABLE", {HB_FS_PUBLIC}, {HB_FUNCNAME( ADT_GETFUNCTABLE )}, NULL }, -{ "ADSNTX_GETFUNCTABLE", {HB_FS_PUBLIC}, {HB_FUNCNAME( ADSNTX_GETFUNCTABLE )}, NULL }, -{ "ADSCDX_GETFUNCTABLE", {HB_FS_PUBLIC}, {HB_FUNCNAME( ADSCDX_GETFUNCTABLE )}, NULL } +{ "ADS", {HB_FS_PUBLIC|HB_FS_LOCAL}, {HB_FUNCNAME( ADS )}, NULL }, +{ "ADS_GETFUNCTABLE", {HB_FS_PUBLIC|HB_FS_LOCAL}, {HB_FUNCNAME( ADS_GETFUNCTABLE )}, NULL }, +{ "ADT_GETFUNCTABLE", {HB_FS_PUBLIC|HB_FS_LOCAL}, {HB_FUNCNAME( ADT_GETFUNCTABLE )}, NULL }, +{ "ADSNTX_GETFUNCTABLE", {HB_FS_PUBLIC|HB_FS_LOCAL}, {HB_FUNCNAME( ADSNTX_GETFUNCTABLE )}, NULL }, +{ "ADSCDX_GETFUNCTABLE", {HB_FS_PUBLIC|HB_FS_LOCAL}, {HB_FUNCNAME( ADSCDX_GETFUNCTABLE )}, NULL } HB_INIT_SYMBOLS_END( ads1__InitSymbols ) HB_CALL_ON_STARTUP_BEGIN( _hb_ads_rdd_init_ ) diff --git a/harbour/include/hbcomp.h b/harbour/include/hbcomp.h index e6675054c0..ce76f9a552 100644 --- a/harbour/include/hbcomp.h +++ b/harbour/include/hbcomp.h @@ -589,6 +589,8 @@ extern int hb_comp_iLinePRG; extern ULONG hb_comp_Supported; +extern char * hb_comp_szFile; + /* table with PCODEs' length */ extern const BYTE hb_comp_pcode_len[]; diff --git a/harbour/include/hbinit.h b/harbour/include/hbinit.h index b0c942d666..ef897cbc8b 100644 --- a/harbour/include/hbinit.h +++ b/harbour/include/hbinit.h @@ -58,7 +58,7 @@ HB_EXTERN_BEGIN extern HB_EXPORT PHB_SYMB hb_vmProcessSymbols( PHB_SYMB pSymbols, USHORT uiSymbols ); /* old module symbols initialization */ -extern HB_EXPORT PHB_SYMB hb_vmProcessSymbolsExt( PHB_SYMB pSymbols, USHORT uiSymbols, char * szModuleName, ULONG ulID, USHORT uiPcodeMin, USHORT uiPcodeMax ); /* module symbols initialization with extended information */ +extern HB_EXPORT PHB_SYMB hb_vmProcessSymbolsEx( PHB_SYMB pSymbols, USHORT uiSymbols, char * szModuleName, ULONG ulID, USHORT uiPcodeVer ); /* module symbols initialization with extended information */ #if defined(_MSC_VER) && !defined(_WIN64) && \ !defined(__LCC__) && !defined(__POCC__) && !defined(__XCC__) && \ @@ -84,18 +84,19 @@ extern HB_EXPORT PHB_SYMB hb_vmProcessSymbolsExt( PHB_SYMB pSymbols, USHORT uiSy #endif +#define HB_INIT_SYMBOLS_END( func ) HB_INIT_SYMBOLS_EX_END( func, __FILE__, 0L, 0x0000 ) #if defined(HARBOUR_STRICT_ANSI_C) #define HB_INIT_SYMBOLS_BEGIN( func ) \ static HB_SYMB symbols_table[] = { - #define HB_INIT_SYMBOLS_END( func ) \ + #define HB_INIT_SYMBOLS_EX_END( func, module, id, vpcode ) \ }; \ static PHB_SYMB symbols = symbols_table; \ void func( void ) \ { \ - symbols = hb_vmProcessSymbols( symbols_table, (USHORT) ( sizeof( symbols_table ) / sizeof( HB_SYMB ) ) ); \ + symbols = hb_vmProcessSymbolsEx( symbols_table, (USHORT) ( sizeof( symbols_table ) / sizeof( HB_SYMB ) ), (module), (id), (vpcode) ); \ } #define HB_CALL_ON_STARTUP_BEGIN( func ) \ @@ -114,12 +115,12 @@ extern HB_EXPORT PHB_SYMB hb_vmProcessSymbolsExt( PHB_SYMB pSymbols, USHORT uiSy #define HB_INIT_SYMBOLS_BEGIN( func ) \ static HB_SYMB symbols_table[] = { - #define HB_INIT_SYMBOLS_END( func ) \ + #define HB_INIT_SYMBOLS_EX_END( func, module, id, vpcode ) \ }; \ static PHB_SYMB symbols = symbols_table; \ static void __attribute__ ((constructor)) func( void ) \ { \ - symbols = hb_vmProcessSymbols( symbols_table, (USHORT) ( sizeof( symbols_table ) / sizeof( HB_SYMB ) ) ); \ + symbols = hb_vmProcessSymbolsEx( symbols_table, (USHORT) ( sizeof( symbols_table ) / sizeof( HB_SYMB ) ), (module), (id), (vpcode) ); \ } #define HB_CALL_ON_STARTUP_BEGIN( func ) \ @@ -136,12 +137,12 @@ extern HB_EXPORT PHB_SYMB hb_vmProcessSymbolsExt( PHB_SYMB pSymbols, USHORT uiSy #define HB_INIT_SYMBOLS_BEGIN( func ) \ static HB_SYMB symbols_table[] = { - #define HB_INIT_SYMBOLS_END( func ) \ + #define HB_INIT_SYMBOLS_EX_END( func, module, id, vpcode ) \ }; \ static PHB_SYMB symbols = symbols_table; \ static int func( void ) \ { \ - symbols = hb_vmProcessSymbols( symbols_table, (USHORT) ( sizeof( symbols_table ) / sizeof( HB_SYMB ) ) ); \ + symbols = hb_vmProcessSymbolsEx( symbols_table, (USHORT) ( sizeof( symbols_table ) / sizeof( HB_SYMB ) ), (module), (id), (vpcode) ); \ return 0; \ } @@ -166,9 +167,9 @@ extern HB_EXPORT PHB_SYMB hb_vmProcessSymbolsExt( PHB_SYMB pSymbols, USHORT uiSy #define HB_INIT_SYMBOLS_BEGIN( func ) \ static HB_SYMB symbols_table[] = { - #define HB_INIT_SYMBOLS_END( func ) \ + #define HB_INIT_SYMBOLS_EX_END( func, module, id, vpcode ) \ }; \ - static PHB_SYMB symbols = hb_vmProcessSymbols( symbols_table, (USHORT) ( sizeof( symbols_table ) / sizeof( HB_SYMB ) ) ); \ + static PHB_SYMB symbols = hb_vmProcessSymbolsEx( symbols_table, (USHORT) ( sizeof( symbols_table ) / sizeof( HB_SYMB ) ), (module), (id), (vpcode) ); \ #define HB_CALL_ON_STARTUP_BEGIN( func ) \ static int func( void ) \ @@ -198,12 +199,12 @@ extern HB_EXPORT PHB_SYMB hb_vmProcessSymbolsExt( PHB_SYMB pSymbols, USHORT uiSy #define HB_INIT_SYMBOLS_BEGIN( func ) \ static HB_SYMB symbols_table[] = { - #define HB_INIT_SYMBOLS_END( func ) \ + #define HB_INIT_SYMBOLS_EX_END( func, module, id, vpcode ) \ }; \ static PHB_SYMB symbols = symbols_table; \ static void func( void ) \ { \ - symbols = hb_vmProcessSymbols( symbols_table, (USHORT) ( sizeof( symbols_table ) / sizeof( HB_SYMB ) ) ); \ + symbols = hb_vmProcessSymbolsEx( symbols_table, (USHORT) ( sizeof( symbols_table ) / sizeof( HB_SYMB ) ), (module), (id), (vpcode) ); \ } #define HB_CALL_ON_STARTUP_BEGIN( func ) \ diff --git a/harbour/include/hbsetup.h b/harbour/include/hbsetup.h index 7023db53c8..a9c804460f 100644 --- a/harbour/include/hbsetup.h +++ b/harbour/include/hbsetup.h @@ -60,6 +60,14 @@ */ #include "hbsetup.ch" +/* *********************************************************************** + * Define PCODE version number + * HB_PCODE_VER_MIN define minimum supported PCODE by HVM + */ + +#define HB_PCODE_VER 0x0001 +#define HB_PCODE_VER_MIN 0x0001 + /* *********************************************************************** * NOTE: You can select the default language modul used by Harbour, by * defining this to a valid language modul identifier. diff --git a/harbour/include/hbtypes.h b/harbour/include/hbtypes.h index 3724539332..f29b9865ea 100644 --- a/harbour/include/hbtypes.h +++ b/harbour/include/hbtypes.h @@ -62,7 +62,7 @@ typedef PHB_SYMB ( * VM_PROCESS_DLL_SYMBOLS ) ( PHB_SYMB pModuleSymbols, USHORT uiModuleSymbols ); -typedef PHB_SYMB ( * VM_PROCESS_SYMBOLS_EXT ) +typedef PHB_SYMB ( * VM_PROCESS_SYMBOLS_EX ) ( PHB_SYMB pModuleSymbols, USHORT uiModuleSymbols, char * szModuleName, ULONG ulID, USHORT uiPcodeMin, USHORT uiPcodeMax ); diff --git a/harbour/include/hbvm.h b/harbour/include/hbvm.h index 93db7ee66e..79f55bd0df 100644 --- a/harbour/include/hbvm.h +++ b/harbour/include/hbvm.h @@ -70,7 +70,7 @@ extern HB_EXPORT void hb_vmAtExit( HB_INIT_FUNC pFunc, void * cargo ); /* Harbour virtual machine functions */ extern HB_EXPORT void hb_vmExecute( const BYTE * pCode, PHB_SYMB pSymbols ); /* invokes the virtual machine */ extern HB_EXPORT PHB_SYMB hb_vmProcessSymbols( PHB_SYMB pSymbols, USHORT uiSymbols ); /* old module symbols initialization */ -extern HB_EXPORT PHB_SYMB hb_vmProcessSymbolsExt( PHB_SYMB pSymbols, USHORT uiSymbols, char * szModuleName, ULONG ulID, USHORT uiPcodeMin, USHORT uiPcodeMax ); /* module symbols initialization with extended information */ +extern HB_EXPORT PHB_SYMB hb_vmProcessSymbolsEx( PHB_SYMB pSymbols, USHORT uiSymbols, char * szModuleName, ULONG ulID, USHORT uiPcodeVer ); /* module symbols initialization with extended information */ #ifdef _HB_API_INTERNAL_ typedef struct _HB_SYMBOLS @@ -92,6 +92,8 @@ extern HB_EXPORT PHB_SYMB hb_vmProcessSymbolsExt( PHB_SYMB pSymbols, USHORT uiSy extern void hb_vmBeginSymbolGroup( void * hDynLib, BOOL fClone ); extern void hb_vmInitSymbolGroup( void * hNewDynLib, int argc, char * argv[] ); extern void hb_vmExitSymbolGroup( void * hDynLib ); + extern char * hb_vmFindModuleSymbolName( PHB_SYMB pSym ); + #endif extern HB_EXPORT void hb_vmSymbolInit_RT( void ); /* initialization of runtime support symbols */ diff --git a/harbour/source/compiler/genc.c b/harbour/source/compiler/genc.c index f862a0b956..e192de222d 100644 --- a/harbour/source/compiler/genc.c +++ b/harbour/source/compiler/genc.c @@ -36,7 +36,7 @@ extern void hb_compGenCRealCode( PFUNCTION pFunc, FILE * yyc ); static void hb_compGenCReadable( PFUNCTION pFunc, FILE * yyc ); static void hb_compGenCCompact( PFUNCTION pFunc, FILE * yyc ); static void hb_compGenCFunc( FILE *yyc, char *cDecor, char *szName, int iStrip ); -static void hb_writeEndInit( FILE* yyc, char * szModulname ); +static void hb_writeEndInit( FILE* yyc, char * szModulname, char * szSourceFile ); /* helper structure to pass information */ typedef struct HB_stru_genc_info @@ -64,6 +64,7 @@ void hb_compGenCCode( PHB_FNAME pFileName ) /* generates the C language ou BOOL bIsExitFunction ; BOOL bIsStaticVariable ; + hb_fsFNameMerge( szFileName, pFileName ); if( ! pFileName->szExtension ) pFileName->szExtension = ".c"; hb_fsFNameMerge( szFileName, pFileName ); @@ -177,7 +178,7 @@ void hb_compGenCCode( PHB_FNAME pFileName ) /* generates the C language ou * we are using these two bits to mark the special function used to * initialize static variables */ - fprintf( yyc, "{ \"%s\", {HB_FS_INITEXIT}, {hb_INITSTATICS}, NULL }", pSym->szName ); /* NOTE: hb_ intentionally in lower case */ + fprintf( yyc, "{ \"%s\", {HB_FS_INITEXIT|HB_FS_LOCAL}, {hb_INITSTATICS}, NULL }", pSym->szName ); /* NOTE: hb_ intentionally in lower case */ } else { @@ -208,6 +209,8 @@ void hb_compGenCCode( PHB_FNAME pFileName ) /* generates the C language ou external called function */ if( pSym->bFunc && hb_compFunctionFind( pSym->szName ) ) /* is it a function defined in this module */ { + fprintf( yyc, " | HB_FS_LOCAL" ); + if( pSym->cScope & HB_FS_INIT ) hb_compGenCFunc( yyc, "}, {HB_INIT_FUNCNAME( %s )}, NULL }", pSym->szName, 1 ); else if( pSym->cScope & HB_FS_EXIT ) @@ -227,7 +230,7 @@ void hb_compGenCCode( PHB_FNAME pFileName ) /* generates the C language ou pSym = pSym->pNext; } - hb_writeEndInit( yyc, szModulname ); + hb_writeEndInit( yyc, szModulname, hb_comp_szFile ); /* Generate functions data */ @@ -311,10 +314,17 @@ void hb_compGenCCode( PHB_FNAME pFileName ) /* generates the C language ou printf( "Done.\n" ); } -static void hb_writeEndInit( FILE* yyc, char * szModulname ) +static void hb_writeEndInit( FILE* yyc, char * szModulname, char * szSourceFile ) { - fprintf( yyc, "\nHB_INIT_SYMBOLS_END( hb_vm_SymbolInit_%s%s )\n\n" - "#if defined(HB_PRAGMA_STARTUP)\n" +/* + HB_SYMBOL_UNUSED( szSourceFile ); + fprintf( yyc, "\nHB_INIT_SYMBOLS_END( hb_vm_SymbolInit_%s%s )\n\n", + hb_comp_szPrefix, szModulname ); +*/ + fprintf( yyc, "\nHB_INIT_SYMBOLS_EX_END( hb_vm_SymbolInit_%s%s, \"%s\", 0x%lx, 0x%04x )\n\n", + hb_comp_szPrefix, szModulname, szSourceFile, 0L, HB_PCODE_VER ); + + fprintf( yyc, "#if defined(HB_PRAGMA_STARTUP)\n" " #pragma startup hb_vm_SymbolInit_%s%s\n" "#elif defined(HB_MSC_STARTUP)\n" " #if _MSC_VER >= 1010\n" @@ -330,7 +340,6 @@ static void hb_writeEndInit( FILE* yyc, char * szModulname ) "#endif\n\n", hb_comp_szPrefix, szModulname, hb_comp_szPrefix, szModulname, - hb_comp_szPrefix, szModulname, hb_comp_szPrefix, szModulname ); } diff --git a/harbour/source/compiler/harbour.c b/harbour/source/compiler/harbour.c index a2176f6ab6..f0183d1700 100644 --- a/harbour/source/compiler/harbour.c +++ b/harbour/source/compiler/harbour.c @@ -110,7 +110,7 @@ char * hb_comp_szFromClass; PCOMDECLARED hb_comp_pLastMethod; int hb_comp_iLine; /* currently processed line number (globaly) */ -char * hb_comp_szFile; /* File Name of last compiled line */ +char * hb_comp_szFile; /* Source file name of compiled module */ PFUNCTION hb_comp_pInitFunc; PHB_FNAME hb_comp_pFileName = NULL; PHB_FNAME hb_comp_pFilePpo = NULL; @@ -4809,8 +4809,8 @@ int hb_compCompile( char * szPrg, int argc, char * argv[] ) if( hb_comp_pFileName->szName ) { - char szFileName[ _POSIX_PATH_MAX ]; /* filename to parse */ - char szPpoName[ _POSIX_PATH_MAX ]; + char szFileName[ _POSIX_PATH_MAX + 1 ]; /* filename to parse */ + char szPpoName[ _POSIX_PATH_MAX + 1 ]; if( !hb_comp_pFileName->szExtension ) hb_comp_pFileName->szExtension = ".prg"; diff --git a/harbour/source/rdd/dbf1.c b/harbour/source/rdd/dbf1.c index 450e7bc161..19a079f206 100644 --- a/harbour/source/rdd/dbf1.c +++ b/harbour/source/rdd/dbf1.c @@ -4359,7 +4359,6 @@ static ERRCODE hb_dbfRddInfo( LPRDDNODE pRDD, USHORT uiIndex, ULONG ulConnect, P case RDDI_ISDBF: case RDDI_CANPUTREC: case RDDI_LOCAL: - case RDDI_LARGEFILE: hb_itemPutL( pItem, TRUE ); break; @@ -4474,8 +4473,8 @@ static void hb_dbfRddInit( void * cargo ) } HB_INIT_SYMBOLS_BEGIN( dbf1__InitSymbols ) -{ "_DBF", {HB_FS_PUBLIC}, {HB_FUNCNAME( _DBF )}, NULL }, -{ "DBF_GETFUNCTABLE", {HB_FS_PUBLIC}, {HB_FUNCNAME( DBF_GETFUNCTABLE )}, NULL } +{ "_DBF", {HB_FS_PUBLIC|HB_FS_LOCAL}, {HB_FUNCNAME( _DBF )}, NULL }, +{ "DBF_GETFUNCTABLE", {HB_FS_PUBLIC|HB_FS_LOCAL}, {HB_FUNCNAME( DBF_GETFUNCTABLE )}, NULL } HB_INIT_SYMBOLS_END( dbf1__InitSymbols ) HB_CALL_ON_STARTUP_BEGIN( _hb_dbf_rdd_init_ ) diff --git a/harbour/source/rdd/dbfcdx/dbfcdx1.c b/harbour/source/rdd/dbfcdx/dbfcdx1.c index ff1bb9ed9d..a6dd50dc66 100644 --- a/harbour/source/rdd/dbfcdx/dbfcdx1.c +++ b/harbour/source/rdd/dbfcdx/dbfcdx1.c @@ -9318,8 +9318,8 @@ static void hb_dbfcdxRddInit( void * cargo ) } HB_INIT_SYMBOLS_BEGIN( dbfcdx1__InitSymbols ) -{ "SIXCDX", {HB_FS_PUBLIC}, {HB_FUNCNAME( SIXCDX )}, NULL }, -{ "SIXCDX_GETFUNCTABLE", {HB_FS_PUBLIC}, {HB_FUNCNAME( SIXCDX_GETFUNCTABLE )}, NULL } +{ "SIXCDX", {HB_FS_PUBLIC|HB_FS_LOCAL}, {HB_FUNCNAME( SIXCDX )}, NULL }, +{ "SIXCDX_GETFUNCTABLE", {HB_FS_PUBLIC|HB_FS_LOCAL}, {HB_FUNCNAME( SIXCDX_GETFUNCTABLE )}, NULL } HB_INIT_SYMBOLS_END( dbfcdx1__InitSymbols ) #else @@ -9382,8 +9382,8 @@ static void hb_dbfcdxRddInit( void * cargo ) } HB_INIT_SYMBOLS_BEGIN( dbfcdx1__InitSymbols ) -{ "DBFCDX", {HB_FS_PUBLIC}, {HB_FUNCNAME( DBFCDX )}, NULL }, -{ "DBFCDX_GETFUNCTABLE", {HB_FS_PUBLIC}, {HB_FUNCNAME( DBFCDX_GETFUNCTABLE )}, NULL } +{ "DBFCDX", {HB_FS_PUBLIC|HB_FS_LOCAL}, {HB_FUNCNAME( DBFCDX )}, NULL }, +{ "DBFCDX_GETFUNCTABLE", {HB_FS_PUBLIC|HB_FS_LOCAL}, {HB_FUNCNAME( DBFCDX_GETFUNCTABLE )}, NULL } HB_INIT_SYMBOLS_END( dbfcdx1__InitSymbols ) #endif diff --git a/harbour/source/rdd/dbfdbt/dbfdbt1.c b/harbour/source/rdd/dbfdbt/dbfdbt1.c index c06f41b68d..a033bc4713 100644 --- a/harbour/source/rdd/dbfdbt/dbfdbt1.c +++ b/harbour/source/rdd/dbfdbt/dbfdbt1.c @@ -849,8 +849,8 @@ static void hb_dbfdbtRddInit( void * cargo ) } HB_INIT_SYMBOLS_BEGIN( dbfdbt1__InitSymbols ) -{ "DBFDBT", {HB_FS_PUBLIC}, {HB_FUNCNAME( DBFDBT )}, NULL }, -{ "DBFDBT_GETFUNCTABLE", {HB_FS_PUBLIC}, {HB_FUNCNAME( DBFDBT_GETFUNCTABLE )}, NULL } +{ "DBFDBT", {HB_FS_PUBLIC|HB_FS_LOCAL}, {HB_FUNCNAME( DBFDBT )}, NULL }, +{ "DBFDBT_GETFUNCTABLE", {HB_FS_PUBLIC|HB_FS_LOCAL}, {HB_FUNCNAME( DBFDBT_GETFUNCTABLE )}, NULL } HB_INIT_SYMBOLS_END( dbfdbt1__InitSymbols ) HB_CALL_ON_STARTUP_BEGIN( _hb_dbfdbt_rdd_init_ ) diff --git a/harbour/source/rdd/dbffpt/dbffpt1.c b/harbour/source/rdd/dbffpt/dbffpt1.c index 17d5844212..02781f42e4 100644 --- a/harbour/source/rdd/dbffpt/dbffpt1.c +++ b/harbour/source/rdd/dbffpt/dbffpt1.c @@ -4748,10 +4748,10 @@ static void hb_dbffptRddInit( void * cargo ) } HB_INIT_SYMBOLS_BEGIN( dbffpt1__InitSymbols ) -{ "DBFFPT", {HB_FS_PUBLIC}, {HB_FUNCNAME( DBFFPT )}, NULL }, -{ "DBFFPT_GETFUNCTABLE", {HB_FS_PUBLIC}, {HB_FUNCNAME( DBFFPT_GETFUNCTABLE )}, NULL }, -{ "DBFBLOB", {HB_FS_PUBLIC}, {HB_FUNCNAME( DBFBLOB )}, NULL }, -{ "DBFBLOB_GETFUNCTABLE", {HB_FS_PUBLIC}, {HB_FUNCNAME( DBFBLOB_GETFUNCTABLE )}, NULL } +{ "DBFFPT", {HB_FS_PUBLIC|HB_FS_LOCAL}, {HB_FUNCNAME( DBFFPT )}, NULL }, +{ "DBFFPT_GETFUNCTABLE", {HB_FS_PUBLIC|HB_FS_LOCAL}, {HB_FUNCNAME( DBFFPT_GETFUNCTABLE )}, NULL }, +{ "DBFBLOB", {HB_FS_PUBLIC|HB_FS_LOCAL}, {HB_FUNCNAME( DBFBLOB )}, NULL }, +{ "DBFBLOB_GETFUNCTABLE", {HB_FS_PUBLIC|HB_FS_LOCAL}, {HB_FUNCNAME( DBFBLOB_GETFUNCTABLE )}, NULL } HB_INIT_SYMBOLS_END( dbffpt1__InitSymbols ) HB_CALL_ON_STARTUP_BEGIN( _hb_dbffpt_rdd_init_ ) diff --git a/harbour/source/rdd/dbfntx/dbfntx1.c b/harbour/source/rdd/dbfntx/dbfntx1.c index ef35f30c67..8a0f9860d7 100644 --- a/harbour/source/rdd/dbfntx/dbfntx1.c +++ b/harbour/source/rdd/dbfntx/dbfntx1.c @@ -6743,9 +6743,11 @@ static ERRCODE ntxOrderInfo( NTXAREAP pArea, USHORT uiIndex, LPDBORDERINFO pInfo hb_itemPutC( pInfo->itmResult, pTag->Owner->IndexName ); break; case DBOI_KEYCOUNT: + case DBOI_KEYCOUNTRAW: hb_itemPutNL( pInfo->itmResult, hb_ntxOrdKeyCount( pTag ) ); break; case DBOI_POSITION: + case DBOI_KEYNORAW: if( hb_itemType( pInfo->itmNewVal ) & HB_IT_NUMERIC ) hb_itemPutL( pInfo->itmResult, hb_ntxOrdKeyGoto( pTag, hb_itemGetNL( pInfo->itmNewVal ) ) ); @@ -6880,6 +6882,7 @@ static ERRCODE ntxOrderInfo( NTXAREAP pArea, USHORT uiIndex, LPDBORDERINFO pInfo hb_ntxTagClearScope( pTag, 1 ); if( pInfo->itmResult ) hb_itemClear( pInfo->itmResult ); + break; case DBOI_KEYADD: if( pTag->Owner->fReadonly ) { @@ -7656,8 +7659,8 @@ static void hb_dbfntxRddInit( void * cargo ) } HB_INIT_SYMBOLS_BEGIN( dbfntx1__InitSymbols ) -{ "DBFNTX", {HB_FS_PUBLIC}, {HB_FUNCNAME( DBFNTX )}, NULL }, -{ "DBFNTX_GETFUNCTABLE", {HB_FS_PUBLIC}, {HB_FUNCNAME( DBFNTX_GETFUNCTABLE )}, NULL } +{ "DBFNTX", {HB_FS_PUBLIC|HB_FS_LOCAL}, {HB_FUNCNAME( DBFNTX )}, NULL }, +{ "DBFNTX_GETFUNCTABLE", {HB_FS_PUBLIC|HB_FS_LOCAL}, {HB_FUNCNAME( DBFNTX_GETFUNCTABLE )}, NULL } HB_INIT_SYMBOLS_END( dbfntx1__InitSymbols ) HB_CALL_ON_STARTUP_BEGIN( _hb_dbfntx_rdd_init_ ) diff --git a/harbour/source/rdd/delim1.c b/harbour/source/rdd/delim1.c index 6e024a25b7..b566270b05 100644 --- a/harbour/source/rdd/delim1.c +++ b/harbour/source/rdd/delim1.c @@ -1340,7 +1340,6 @@ static ERRCODE hb_delimRddInfo( LPRDDNODE pRDD, USHORT uiIndex, ULONG ulConnect, { case RDDI_CANPUTREC: case RDDI_LOCAL: - case RDDI_LARGEFILE: hb_itemPutL( pItem, TRUE ); break; @@ -1502,8 +1501,8 @@ static void hb_delimRddInit( void * cargo ) } HB_INIT_SYMBOLS_BEGIN( delim1__InitSymbols ) -{ "DELIM", {HB_FS_PUBLIC}, {HB_FUNCNAME( DELIM )}, NULL }, -{ "DELIM_GETFUNCTABLE", {HB_FS_PUBLIC}, {HB_FUNCNAME( DELIM_GETFUNCTABLE )}, NULL } +{ "DELIM", {HB_FS_PUBLIC|HB_FS_LOCAL}, {HB_FUNCNAME( DELIM )}, NULL }, +{ "DELIM_GETFUNCTABLE", {HB_FS_PUBLIC|HB_FS_LOCAL}, {HB_FUNCNAME( DELIM_GETFUNCTABLE )}, NULL } HB_INIT_SYMBOLS_END( delim1__InitSymbols ) HB_CALL_ON_STARTUP_BEGIN( _hb_delim_rdd_init_ ) diff --git a/harbour/source/rdd/sdf1.c b/harbour/source/rdd/sdf1.c index 1b905debf3..89c319284c 100644 --- a/harbour/source/rdd/sdf1.c +++ b/harbour/source/rdd/sdf1.c @@ -1110,7 +1110,6 @@ static ERRCODE hb_sdfRddInfo( LPRDDNODE pRDD, USHORT uiIndex, ULONG ulConnect, P { case RDDI_CANPUTREC: case RDDI_LOCAL: - case RDDI_LARGEFILE: hb_itemPutL( pItem, TRUE ); break; @@ -1266,8 +1265,8 @@ static void hb_sdfRddInit( void * cargo ) } HB_INIT_SYMBOLS_BEGIN( sdf1__InitSymbols ) -{ "SDF", {HB_FS_PUBLIC}, {HB_FUNCNAME( SDF )}, NULL }, -{ "SDF_GETFUNCTABLE", {HB_FS_PUBLIC}, {HB_FUNCNAME( SDF_GETFUNCTABLE )}, NULL } +{ "SDF", {HB_FS_PUBLIC|HB_FS_LOCAL}, {HB_FUNCNAME( SDF )}, NULL }, +{ "SDF_GETFUNCTABLE", {HB_FS_PUBLIC|HB_FS_LOCAL}, {HB_FUNCNAME( SDF_GETFUNCTABLE )}, NULL } HB_INIT_SYMBOLS_END( sdf1__InitSymbols ) HB_CALL_ON_STARTUP_BEGIN( _hb_sdf_rdd_init_ ) diff --git a/harbour/source/rdd/workarea.c b/harbour/source/rdd/workarea.c index feea968f6b..49b8a1eca6 100644 --- a/harbour/source/rdd/workarea.c +++ b/harbour/source/rdd/workarea.c @@ -719,7 +719,7 @@ ERRCODE hb_waOrderInfo( AREAP pArea, USHORT index, LPDBORDERINFO param ) HB_SYMBOL_UNUSED( index ); HB_SYMBOL_UNUSED( param ); - hb_errRT_DBCMD( EG_ARG, EDBCMD_BADPARAMETER, NULL, "ORDERINFO" ); + hb_errRT_DBCMD( EG_ARG, EDBCMD_BADPARAMETER, NULL, "DBORDERINFO" ); return FAILURE; } #endif diff --git a/harbour/source/rtl/set.c b/harbour/source/rtl/set.c index 537f77d4d8..e89ac2d556 100644 --- a/harbour/source/rtl/set.c +++ b/harbour/source/rtl/set.c @@ -104,9 +104,9 @@ static char set_char( PHB_ITEM pItem, char oldChar ) return newChar; } -static BOOL set_logical( PHB_ITEM pItem ) +static BOOL set_logical( PHB_ITEM pItem, BOOL bDefault ) { - BOOL bLogical = FALSE; + BOOL bLogical = bDefault; HB_TRACE(HB_TR_DEBUG, ("set_logical(%p)", pItem)); @@ -421,7 +421,7 @@ HB_FUNC( SET ) { case HB_SET_ALTERNATE : hb_retl( hb_set.HB_SET_ALTERNATE ); - if( args > 1 ) hb_set.HB_SET_ALTERNATE = set_logical( pArg2 ); + if( args > 1 ) hb_set.HB_SET_ALTERNATE = set_logical( pArg2, hb_set.HB_SET_ALTERNATE ); break; case HB_SET_ALTFILE : if( hb_set.HB_SET_ALTFILE ) hb_retc( hb_set.HB_SET_ALTFILE ); @@ -441,7 +441,7 @@ HB_FUNC( SET ) hb_set.HB_SET_ALTFILE = set_string( pArg2, hb_set.HB_SET_ALTFILE ); } } - if( args > 2 ) bFlag = set_logical( pArg3 ); + if( args > 2 ) bFlag = set_logical( pArg3, FALSE ); else bFlag = FALSE; if( args > 1 ) { @@ -454,7 +454,7 @@ HB_FUNC( SET ) break; case HB_SET_AUTOPEN : hb_retl( hb_set.HB_SET_AUTOPEN ); - if( args > 1 ) hb_set.HB_SET_AUTOPEN = set_logical( pArg2 ); + if( args > 1 ) hb_set.HB_SET_AUTOPEN = set_logical( pArg2, hb_set.HB_SET_AUTOPEN ); break; case HB_SET_AUTORDER : hb_retni( hb_set.HB_SET_AUTORDER ); @@ -478,22 +478,22 @@ HB_FUNC( SET ) break; case HB_SET_BELL : hb_retl( hb_set.HB_SET_BELL ); - if( args > 1 ) hb_set.HB_SET_BELL = set_logical( pArg2 ); + if( args > 1 ) hb_set.HB_SET_BELL = set_logical( pArg2, hb_set.HB_SET_BELL ); break; case HB_SET_CANCEL : hb_retl( hb_set.HB_SET_CANCEL ); - if( args > 1 ) hb_set.HB_SET_CANCEL = set_logical( pArg2 ); + if( args > 1 ) hb_set.HB_SET_CANCEL = set_logical( pArg2, hb_set.HB_SET_CANCEL ); break; case HB_SET_COLOR : hb_retc( hb_conSetColor( args >= 2 && HB_IS_STRING( pArg2 ) ? hb_itemGetCPtr( pArg2 ) : ( char * ) NULL ) ); break; case HB_SET_CONFIRM : hb_retl( hb_set.HB_SET_CONFIRM ); - if( args > 1 ) hb_set.HB_SET_CONFIRM = set_logical( pArg2 ); + if( args > 1 ) hb_set.HB_SET_CONFIRM = set_logical( pArg2, hb_set.HB_SET_CONFIRM ); break; case HB_SET_CONSOLE : hb_retl( hb_set.HB_SET_CONSOLE ); - if( args > 1 ) hb_set.HB_SET_CONSOLE = set_logical( pArg2 ); + if( args > 1 ) hb_set.HB_SET_CONSOLE = set_logical( pArg2, hb_set.HB_SET_CONSOLE ); break; case HB_SET_CURSOR : if( args >= 2 && HB_IS_NUMERIC( pArg2 ) ) @@ -536,7 +536,7 @@ HB_FUNC( SET ) break; case HB_SET_DEBUG : hb_retl( hb_set.HB_SET_DEBUG ); - if( args > 1 ) hb_set.HB_SET_DEBUG = set_logical( pArg2 ); + if( args > 1 ) hb_set.HB_SET_DEBUG = set_logical( pArg2, hb_set.HB_SET_DEBUG ); break; case HB_SET_DECIMALS : hb_retni( hb_set.HB_SET_DECIMALS ); @@ -555,7 +555,7 @@ HB_FUNC( SET ) break; case HB_SET_DELETED : hb_retl( hb_set.HB_SET_DELETED ); - if( args > 1 ) hb_set.HB_SET_DELETED = set_logical( pArg2 ); + if( args > 1 ) hb_set.HB_SET_DELETED = set_logical( pArg2, hb_set.HB_SET_DELETED ); break; case HB_SET_DELIMCHARS : if( hb_set.HB_SET_DELIMCHARS ) hb_retc( hb_set.HB_SET_DELIMCHARS ); @@ -564,7 +564,7 @@ HB_FUNC( SET ) break; case HB_SET_DELIMITERS : hb_retl( hb_set.HB_SET_DELIMITERS ); - if( args > 1 ) hb_set.HB_SET_DELIMITERS = set_logical( pArg2 ); + if( args > 1 ) hb_set.HB_SET_DELIMITERS = set_logical( pArg2, hb_set.HB_SET_DELIMITERS ); break; case HB_SET_DEVICE : if( hb_set.HB_SET_DEVICE ) hb_retc( hb_set.HB_SET_DEVICE ); @@ -580,7 +580,7 @@ HB_FUNC( SET ) break; case HB_SET_EOF : hb_retl( hb_set.HB_SET_EOF ); - if( args > 1 ) hb_set.HB_SET_EOF = set_logical( pArg2 ); + if( args > 1 ) hb_set.HB_SET_EOF = set_logical( pArg2, hb_set.HB_SET_EOF ); break; case HB_SET_EPOCH : hb_retni( hb_set.HB_SET_EPOCH ); @@ -594,7 +594,7 @@ HB_FUNC( SET ) break; case HB_SET_ESCAPE : hb_retl( hb_set.HB_SET_ESCAPE ); - if( args > 1 ) hb_set.HB_SET_ESCAPE = set_logical( pArg2 ); + if( args > 1 ) hb_set.HB_SET_ESCAPE = set_logical( pArg2, hb_set.HB_SET_ESCAPE ); break; case HB_SET_EVENTMASK : hb_retni( hb_set.HB_SET_EVENTMASK ); @@ -602,20 +602,20 @@ HB_FUNC( SET ) break; case HB_SET_EXACT : hb_retl( hb_set.HB_SET_EXACT ); - if( args > 1 ) hb_set.HB_SET_EXACT = set_logical( pArg2 ); + if( args > 1 ) hb_set.HB_SET_EXACT = set_logical( pArg2, hb_set.HB_SET_EXACT ); break; case HB_SET_EXCLUSIVE : hb_retl( hb_set.HB_SET_EXCLUSIVE ); - if( args > 1 ) hb_set.HB_SET_EXCLUSIVE = set_logical( pArg2 ); + if( args > 1 ) hb_set.HB_SET_EXCLUSIVE = set_logical( pArg2, hb_set.HB_SET_EXCLUSIVE ); break; case HB_SET_EXIT : hb_retl( hb_set.HB_SET_EXIT ); /* NOTE: Otherwise ReadExit() will always set the value. [vszakats] */ - if( pArg2 != NULL && !HB_IS_NIL( pArg2 ) ) hb_set.HB_SET_EXIT = set_logical( pArg2 ); + if( pArg2 != NULL && !HB_IS_NIL( pArg2 ) ) hb_set.HB_SET_EXIT = set_logical( pArg2, hb_set.HB_SET_EXIT ); break; case HB_SET_EXTRA : hb_retl( hb_set.HB_SET_EXTRA ); - if( args > 1 ) hb_set.HB_SET_EXTRA = set_logical( pArg2 ); + if( args > 1 ) hb_set.HB_SET_EXTRA = set_logical( pArg2, hb_set.HB_SET_EXTRA ); break; case HB_SET_EXTRAFILE : if( hb_set.HB_SET_EXTRAFILE ) hb_retc( hb_set.HB_SET_EXTRAFILE ); @@ -635,7 +635,7 @@ HB_FUNC( SET ) hb_set.HB_SET_EXTRAFILE = set_string( pArg2, hb_set.HB_SET_EXTRAFILE ); } } - if( args > 2 ) bFlag = set_logical( pArg3 ); + if( args > 2 ) bFlag = set_logical( pArg3, FALSE ); else bFlag = FALSE; if( args > 1 && ! HB_IS_NIL( pArg2 ) ) { @@ -648,15 +648,15 @@ HB_FUNC( SET ) break; case HB_SET_FIXED : hb_retl( hb_set.HB_SET_FIXED ); - if( args > 1 ) hb_set.HB_SET_FIXED = set_logical( pArg2 ); + if( args > 1 ) hb_set.HB_SET_FIXED = set_logical( pArg2, hb_set.HB_SET_FIXED ); break; case HB_SET_INSERT : hb_retl( hb_set.HB_SET_INSERT ); - if( args > 1 ) hb_set.HB_SET_INSERT = set_logical( pArg2 ); + if( args > 1 ) hb_set.HB_SET_INSERT = set_logical( pArg2, hb_set.HB_SET_INSERT ); break; case HB_SET_INTENSITY : hb_retl( hb_set.HB_SET_INTENSITY ); - if( args > 1 ) hb_set.HB_SET_INTENSITY = set_logical( pArg2 ); + if( args > 1 ) hb_set.HB_SET_INTENSITY = set_logical( pArg2, hb_set.HB_SET_INTENSITY ); break; case HB_SET_MARGIN : hb_retni( hb_set.HB_SET_MARGIN ); @@ -680,7 +680,7 @@ HB_FUNC( SET ) break; case HB_SET_MCENTER : hb_retl( hb_set.HB_SET_MCENTER ); - if( args > 1 ) hb_set.HB_SET_MCENTER = set_logical( pArg2 ); + if( args > 1 ) hb_set.HB_SET_MCENTER = set_logical( pArg2, hb_set.HB_SET_MCENTER ); break; case HB_SET_MESSAGE : hb_retni( hb_set.HB_SET_MESSAGE ); @@ -693,17 +693,24 @@ HB_FUNC( SET ) } break; case HB_SET_MFILEEXT : - if( hb_set.HB_SET_MFILEEXT ) hb_retc( hb_set.HB_SET_MFILEEXT ); - else hb_retc( NULL ); + hb_retc( hb_set.HB_SET_MFILEEXT ); if( args > 1 ) hb_set.HB_SET_MFILEEXT = set_string( pArg2, hb_set.HB_SET_MFILEEXT ); break; case HB_SET_OPTIMIZE : hb_retl( hb_set.HB_SET_OPTIMIZE ); - if( args > 1 ) hb_set.HB_SET_OPTIMIZE = set_logical( pArg2 ); + if( args > 1 ) hb_set.HB_SET_OPTIMIZE = set_logical( pArg2, hb_set.HB_SET_OPTIMIZE ); + break; + case HB_SET_FORCEOPT : + hb_retl( hb_set.HB_SET_FORCEOPT ); + if( args > 1 ) hb_set.HB_SET_FORCEOPT = set_logical( pArg2, hb_set.HB_SET_FORCEOPT ); break; case HB_SET_STRICTREAD : hb_retl( hb_set.HB_SET_STRICTREAD ); - if( args > 1 ) hb_set.HB_SET_STRICTREAD = set_logical( pArg2 ); + if( args > 1 ) hb_set.HB_SET_STRICTREAD = set_logical( pArg2, hb_set.HB_SET_STRICTREAD ); + break; + case HB_SET_HARDCOMMIT : + hb_retl( hb_set.HB_SET_HARDCOMMIT ); + if( args > 1 ) hb_set.HB_SET_HARDCOMMIT = set_logical( pArg2, hb_set.HB_SET_HARDCOMMIT ); break; case HB_SET_PATH : if( hb_set.HB_SET_PATH ) hb_retc( hb_set.HB_SET_PATH ); @@ -717,13 +724,13 @@ HB_FUNC( SET ) break; case HB_SET_PRINTER : hb_retl( hb_set.HB_SET_PRINTER ); - if( args > 1 ) hb_set.HB_SET_PRINTER = set_logical( pArg2 ); + if( args > 1 ) hb_set.HB_SET_PRINTER = set_logical( pArg2, hb_set.HB_SET_PRINTER ); break; case HB_SET_PRINTFILE : if( hb_set.HB_SET_PRINTFILE ) hb_retc( hb_set.HB_SET_PRINTFILE ); else hb_retc( NULL ); if( args > 1 && ! HB_IS_NIL( pArg2 ) ) hb_set.HB_SET_PRINTFILE = set_string( pArg2, hb_set.HB_SET_PRINTFILE ); - if( args > 2 ) bFlag = set_logical( pArg3 ); + if( args > 2 ) bFlag = set_logical( pArg3, FALSE ); else bFlag = FALSE; if( args > 1 && ! HB_IS_NIL( pArg2 ) ) { @@ -735,15 +742,15 @@ HB_FUNC( SET ) break; case HB_SET_SCOREBOARD : hb_retl( hb_set.HB_SET_SCOREBOARD ); - if( args > 1 ) hb_set.HB_SET_SCOREBOARD = set_logical( pArg2 ); + if( args > 1 ) hb_set.HB_SET_SCOREBOARD = set_logical( pArg2, hb_set.HB_SET_SCOREBOARD ); break; case HB_SET_SCROLLBREAK: hb_retl( hb_set.HB_SET_SCROLLBREAK ); - if( args > 1 ) hb_set.HB_SET_SCROLLBREAK = set_logical( pArg2 ); + if( args > 1 ) hb_set.HB_SET_SCROLLBREAK = set_logical( pArg2, hb_set.HB_SET_SCROLLBREAK ); break; case HB_SET_SOFTSEEK : hb_retl( hb_set.HB_SET_SOFTSEEK ); - if( args > 1 ) hb_set.HB_SET_SOFTSEEK = set_logical( pArg2 ); + if( args > 1 ) hb_set.HB_SET_SOFTSEEK = set_logical( pArg2, hb_set.HB_SET_SOFTSEEK ); break; case HB_SET_TYPEAHEAD : hb_retni( hb_set.HB_SET_TYPEAHEAD ); @@ -761,7 +768,7 @@ HB_FUNC( SET ) break; case HB_SET_UNIQUE : hb_retl( hb_set.HB_SET_UNIQUE ); - if( args > 1 ) hb_set.HB_SET_UNIQUE = set_logical( pArg2 ); + if( args > 1 ) hb_set.HB_SET_UNIQUE = set_logical( pArg2, hb_set.HB_SET_UNIQUE ); break; case HB_SET_VIDEOMODE : hb_retni( hb_set.HB_SET_VIDEOMODE ); @@ -775,7 +782,7 @@ HB_FUNC( SET ) break; case HB_SET_WRAP : hb_retl( hb_set.HB_SET_WRAP ); - if( args > 1 ) hb_set.HB_SET_WRAP = set_logical( pArg2 ); + if( args > 1 ) hb_set.HB_SET_WRAP = set_logical( pArg2, hb_set.HB_SET_WRAP ); break; case HB_SET_LANGUAGE : hb_retc( hb_langID() ); @@ -786,7 +793,7 @@ HB_FUNC( SET ) break; case HB_SET_IDLEREPEAT : hb_retl( hb_set.HB_SET_IDLEREPEAT ); - if( args > 1 ) hb_set.HB_SET_IDLEREPEAT = set_logical( pArg2 ); + if( args > 1 ) hb_set.HB_SET_IDLEREPEAT = set_logical( pArg2, hb_set.HB_SET_IDLEREPEAT ); break; case HB_SET_FILECASE : hb_retni( hb_set.HB_SET_FILECASE ); @@ -926,6 +933,8 @@ void hb_setInitialize( void ) hb_set.HB_SET_EXTRAFILE = NULL; hb_set.hb_set_extrahan = FS_ERROR; hb_set.HB_SET_FIXED = FALSE; + hb_set.HB_SET_FORCEOPT = FALSE; + hb_set.HB_SET_HARDCOMMIT = TRUE; hb_set.HB_SET_IDLEREPEAT = TRUE; hb_set.HB_SET_INSERT = FALSE; hb_set.HB_SET_INTENSITY = TRUE; @@ -935,7 +944,7 @@ void hb_setInitialize( void ) hb_set.HB_SET_MESSAGE = 0; hb_set.HB_SET_MFILEEXT = ( char * ) hb_xgrab( 1 ); hb_set.HB_SET_MFILEEXT[ 0 ] = '\0'; - hb_set.HB_SET_OPTIMIZE = FALSE; + hb_set.HB_SET_OPTIMIZE = TRUE; hb_set.HB_SET_PATH = ( char * ) hb_xgrab( 1 ); hb_set.HB_SET_PATH[ 0 ] = '\0'; hb_set.HB_SET_PRINTER = FALSE; diff --git a/harbour/source/vm/dynsym.c b/harbour/source/vm/dynsym.c index 885a3a31db..e01204056a 100644 --- a/harbour/source/vm/dynsym.c +++ b/harbour/source/vm/dynsym.c @@ -120,7 +120,8 @@ HB_EXPORT PHB_DYNS hb_dynsymNew( PHB_SYMB pSymbol ) /* creates a new dynamic if( pDynSym ) /* If name exists */ { - if( !pDynSym->pSymbol->value.pFunPtr && pSymbol->value.pFunPtr ) /* The DynSym existed */ + if( ( !pDynSym->pSymbol->value.pFunPtr && pSymbol->value.pFunPtr ) || + ( pSymbol->scope.value & HB_FS_LOCAL ) != 0 ) { pDynSym->pSymbol = pSymbol; #ifndef HB_NO_PROFILER diff --git a/harbour/source/vm/hvm.c b/harbour/source/vm/hvm.c index c37e21538c..47f761d626 100644 --- a/harbour/source/vm/hvm.c +++ b/harbour/source/vm/hvm.c @@ -5313,6 +5313,26 @@ static double hb_vmTopNumber( void ) /* * Functions to mange module symbols */ +char * hb_vmFindModuleSymbolName( PHB_SYMB pSym ) +{ + if( pSym ) + { + PHB_SYMBOLS pLastSymbols = s_pSymbols; + + while( pLastSymbols ) + { + if( pLastSymbols->fActive && + pSym >= pLastSymbols->pModuleSymbols && + pSym < pLastSymbols->pModuleSymbols + pLastSymbols->uiModuleSymbols ) + { + return pLastSymbols->szModuleName; + } + pLastSymbols = pLastSymbols->pNext; + } + } + return NULL; +} + static PHB_SYMBOLS hb_vmFindFreeModule( PHB_SYMB pSymbols, USHORT uiSymbols, char * szModuleName, ULONG ulID ) { @@ -5661,15 +5681,25 @@ hb_vmRegisterSymbols( PHB_SYMB pModuleSymbols, USHORT uiSymbols, char * szModule /* * module symbols initialization with extended information */ -HB_EXPORT PHB_SYMB hb_vmProcessSymbolsExt( PHB_SYMB pSymbols, USHORT uiModuleSymbols, - char * szModuleName, ULONG ulID, - USHORT uiPcodeMin, USHORT uiPcodeMax ) +HB_EXPORT PHB_SYMB hb_vmProcessSymbolsEx( PHB_SYMB pSymbols, USHORT uiModuleSymbols, + char * szModuleName, ULONG ulID, + USHORT uiPCodeVer ) { - HB_TRACE(HB_TR_DEBUG, ("hb_vmProcessSymbols(%p,%hu,%s,%lu,%hu,%hu)", pSymbols, uiModuleSymbols, szModuleName, ulID, uiPcodeMin, uiPcodeMax)); + HB_TRACE(HB_TR_DEBUG, ("hb_vmProcessSymbolsEx(%p,%hu,%s,%lu,%hu)", pSymbols, uiModuleSymbols, szModuleName, ulID, uiPcodeVer)); - /* TODO: verify suported PCODE versions */ - HB_SYMBOL_UNUSED( uiPcodeMin ); - HB_SYMBOL_UNUSED( uiPcodeMax ); + if( uiPCodeVer != 0 ) + { + if( uiPCodeVer > HB_PCODE_VER || /* the module is compiled with newer compiler version then HVM */ + uiPCodeVer < HB_PCODE_VER_MIN ) /* the module is compiled with olde compiler version */ + { + char szPCode[ 10 ]; + sprintf( szPCode, "%i.%i", uiPCodeVer>>8, uiPCodeVer &0xff ); + + hb_errInternal( HB_EI_ERRUNRECOV, "Module '%s'\n" + "was compiled with unsupported PCODE version %s.\n" + "Please recompile.", szModuleName, szPCode ); + } + } return hb_vmRegisterSymbols( pSymbols, uiModuleSymbols, szModuleName, ulID, s_fCloneSym, s_fCloneSym )->pModuleSymbols; diff --git a/harbour/source/vm/maindllp.c b/harbour/source/vm/maindllp.c index 9d5154451c..9fb50788c0 100644 --- a/harbour/source/vm/maindllp.c +++ b/harbour/source/vm/maindllp.c @@ -103,14 +103,13 @@ PHB_SYMB hb_vmProcessSymbols( PHB_SYMB pSymbols, USHORT uiSymbols ) } /* module symbols initialization */ -PHB_SYMB hb_vmProcessSymbolsExt( PHB_SYMB pSymbols, USHORT uiSymbols, char * szModuleName, ULONG ulID, USHORT uiPcodeMin, USHORT uiPcodeMax ) /* module symbols initialization with extended information */ +PHB_SYMB hb_vmProcessSymbolsEx( PHB_SYMB pSymbols, USHORT uiSymbols, char * szModuleName, ULONG ulID, USHORT uiPcodeVer ) /* module symbols initialization with extended information */ { FARPROC pProcessSymbols = GetProcAddress( GetModuleHandle( NULL ), - "_hb_vmProcessSymbolsExt" ); + "_hb_vmProcessSymbolsEx" ); if( pProcessSymbols ) - return ( ( VM_PROCESS_SYMBOLS_EXT ) pProcessSymbols ) - ( pSymbols, uiSymbols, szModuleName, - ulID, uiPcodeMin, uiPcodeMax ); + return ( ( VM_PROCESS_SYMBOLS_EX ) pProcessSymbols ) + ( pSymbols, uiSymbols, szModuleName, ulID, uiPcodeVer ); /* else * may we issue an error ? */ diff --git a/harbour/source/vm/proc.c b/harbour/source/vm/proc.c index 76da1d4869..cdebeebb02 100644 --- a/harbour/source/vm/proc.c +++ b/harbour/source/vm/proc.c @@ -72,6 +72,7 @@ #include "hbapicls.h" #include "hbapiitm.h" #include "hbstack.h" +#include "hbvm.h" #ifdef HB_EXTENSION @@ -93,14 +94,14 @@ HB_FUNC( PROCNAME ) HB_FUNC( PROCLINE ) { + long lOffset = hb_stackBaseOffset(); int iLevel = hb_parni( 1 ) + 1; /* we are already inside ProcName() */ - PHB_ITEM * pBase = hb_stack.pBase; - while( ( iLevel-- > 0 ) && pBase != hb_stack.pItems ) - pBase = hb_stack.pItems + ( *pBase )->item.asSymbol.stackbase; + while( iLevel-- > 0 && lOffset > 1 ) + lOffset = hb_stackItem( lOffset - 1 )->item.asSymbol.stackbase + 1; if( iLevel < 0 ) - hb_retni( ( *pBase )->item.asSymbol.lineno ); + hb_retni( hb_stackItem( lOffset - 1 )->item.asSymbol.lineno ); else hb_retni( 0 ); } @@ -112,7 +113,45 @@ HB_FUNC( PROCLINE ) HB_FUNC( PROCFILE ) { - hb_retc( NULL ); + PHB_SYMB pLocalSym = NULL; + PHB_SYMB pSym = NULL; + + if( ISSYMBOL( 1 ) ) + { + pSym = hb_itemGetSymbol( hb_param( 1, HB_IT_SYMBOL ) ); + } + else + { + long lOffset = hb_stackBaseOffset(); + int iLevel = hb_parni( 1 ) + 1; /* we are already inside ProcFile() */ + + while( iLevel-- > 0 && lOffset > 1 ) + lOffset = hb_stackItem( lOffset - 1 )->item.asSymbol.stackbase + 1; + + if( iLevel < 0 ) + { + pSym = hb_stackItem( lOffset - 1 )->item.asSymbol.value; + + if( pSym == &hb_symEval || strcmp( pSym->szName, "EVAL" ) == 0 ) + { + PHB_ITEM pSelf = hb_stackItem( lOffset ); + + if( HB_IS_BLOCK( pSelf ) ) + pLocalSym = pSelf->item.asBlock.value->pDefSymb; + } + } + } + + if( !pLocalSym && pSym ) + { + if( ( pSym->scope.value & HB_FS_LOCAL ) != 0 ) + pLocalSym = pSym; + else if( pSym->pDynSym && + ( pSym->pDynSym->pSymbol->scope.value & HB_FS_LOCAL ) != 0 ) + pLocalSym = pSym->pDynSym->pSymbol; + } + + hb_retc( hb_vmFindModuleSymbolName( pLocalSym ) ); } #endif @@ -120,64 +159,60 @@ HB_FUNC( PROCFILE ) /* NOTE: szName size must be an at least: HB_SYMBOL_NAME_LEN + HB_SYMBOL_NAME_LEN + 2 [vszakats] */ -char * hb_procname( int iLevel, char * szName, BOOL bSkipBlock ) +char * hb_procname( int iLevel, char * szName, BOOL bSkipBlock ) { - PHB_ITEM * pBase = hb_stack.pBase; - char * szTstName; - BOOL lcb = FALSE; - int iLev = iLevel; + long lOffset = hb_stackBaseOffset(), lPrevOffset = 0; + PHB_ITEM pBase, pSelf; - while( ( iLevel-- > 0 ) && pBase != hb_stack.pItems ) - pBase = hb_stack.pItems + ( *pBase )->item.asSymbol.stackbase; - - szTstName = ( *pBase )->item.asSymbol.value->szName ; - - if( bSkipBlock ) - { - /* Is it an inline method ? if so back one more ... */ - if( ( strcmp( szTstName, "__EVAL" ) == 0 ) && pBase != hb_stack.pItems ) - { - pBase = hb_stack.pItems + ( *pBase )->item.asSymbol.stackbase; - lcb = TRUE ; - } - } + while( iLevel-- > 0 && lOffset > 1 ) + lOffset = hb_stackItem( lOffset - 1 )->item.asSymbol.stackbase + 1; if( iLevel < 0 ) { - if( ( *( pBase + 1 ) )->type == HB_IT_ARRAY ) /* it is a method name */ + if( bSkipBlock && lOffset > 1 ) { - strcpy( szName, hb_objGetRealClsName( *( pBase + 1 ), ( *pBase )->item.asSymbol.value->szName ) ); + char * szTstName = hb_stackItem( lOffset - 1 )->item.asSymbol.value->szName ; + /* Is it an inline method ? if so back one more ... */ + if( strcmp( szTstName, "__EVAL" ) == 0 ) + { + lPrevOffset = lOffset; + lOffset = hb_stackItem( lOffset - 1 )->item.asSymbol.stackbase + 1; + } + } - if( lcb ) + pBase = hb_stackItem( lOffset -1 ); + pSelf = hb_stackItem( lOffset ); + if( HB_IS_OBJECT( pSelf ) ) /* it is a method name */ + { + strcpy( szName, hb_objGetRealClsName( pSelf, pBase->item.asSymbol.value->szName ) ); + + if( lPrevOffset ) strcat( szName, ":(b)" ); else strcat( szName, ":" ); - strcat( szName, ( *pBase )->item.asSymbol.value->szName ); + strcat( szName, pBase->item.asSymbol.value->szName ); } else { - if( lcb ) /* Back to standart code block */ + if( lPrevOffset ) /* Back to standart code block */ { - pBase = hb_stack.pBase; - while( ( iLev-- > 0 ) && pBase != hb_stack.pItems ) - pBase = hb_stack.pItems + ( *pBase )->item.asSymbol.stackbase; + lOffset = lPrevOffset; + pBase = hb_stackItem( lOffset -1 ); + pSelf = hb_stackItem( lOffset ); } - if( ( strcmp( ( *pBase )->item.asSymbol.value->szName, "EVAL" ) == 0 ) ) + if( strcmp( pBase->item.asSymbol.value->szName, "EVAL" ) == 0 ) { strcpy( szName, "(b)" ); - if( ( *( pBase + 1 ) )->type == HB_IT_BLOCK ) - { - PHB_SYMB pSymb; - pSymb = ( *( pBase + 1 ) )->item.asBlock.value->pDefSymb; - strcat( szName, pSymb->szName ); - } + + if( HB_IS_BLOCK( pSelf ) ) + strcat( szName, pSelf->item.asBlock.value->pDefSymb->szName ); else - strcat( szName, ( *pBase )->item.asSymbol.value->szName ); + strcat( szName, pBase->item.asSymbol.value->szName ); } else - strcpy( szName, ( *pBase )->item.asSymbol.value->szName ); + strcpy( szName, pBase->item.asSymbol.value->szName ); } } else @@ -185,4 +220,3 @@ char * hb_procname( int iLevel, char * szName, BOOL bSkipBlock ) return szName; } -