From ffa6630674ff6b49ee502b93f3691ad451768afc Mon Sep 17 00:00:00 2001 From: Ron Pinkas Date: Fri, 28 Jul 2000 21:03:36 +0000 Subject: [PATCH] 2000-07-28 14:00 UTC+0800 Ron Pinkas * source/compiler/harbour.slx + Added logic to account for HB_SYMBOL_NAME_LEN + Added 2 rules to support DECLARE SomeVar as in PRIVATE SomeVar as oppose to Strong Type DECLARE SomeClass SomeVar ... + tests/testdecl.prg + Added test program to utilize the DECLARE in its different contexts. --- harbour/ChangeLog | 14 +++++++++--- harbour/source/compiler/harbour.slx | 22 ++++++++++++++---- harbour/tests/testdecl.prg | 35 +++++++++++++++++++++++++++++ 3 files changed, 64 insertions(+), 7 deletions(-) create mode 100644 harbour/tests/testdecl.prg diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 73738dec0b..03db917346 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -1,3 +1,11 @@ +2000-07-28 14:00 UTC+0800 Ron Pinkas + * source/compiler/harbour.slx + + Added logic to account for HB_SYMBOL_NAME_LEN + + Added 2 rules to support DECLARE SomeVar as in PRIVATE SomeVar as oppose to Strong Type DECLARE SomeClass SomeVar ... + + + tests/testdecl.prg + + Added test program to utilize the DECLARE in its different contexts. + 2000-07-28 15:00 UTC-0400 David G. Holm * include/hbapigt.h @@ -26,17 +34,17 @@ *source/compiler/harbour.l * changed handling of array indexes - to code is now simpler, smaller and even more faster :) - + *source/rtl/gtsln/gtsln.c * fixed error in hb_gtSetPos call *source/rtl/gtstd/gtstd.c * fixed unused wariable warning - + *source/vm/classes.c * fixed unused variable and unused function warnings (reported with GCC) - + 2000-07-28 06:30 UTC+0800 Ron Pinkas + doc/simplex.txt diff --git a/harbour/source/compiler/harbour.slx b/harbour/source/compiler/harbour.slx index 7ce8de32c2..8d3e25a56f 100644 --- a/harbour/source/compiler/harbour.slx +++ b/harbour/source/compiler/harbour.slx @@ -296,8 +296,11 @@ LANGUAGE_WORDS_ARE { #define _TEXT_ARRAY 3004 #define _CASE_WITH 3005 #define _WHL_ID_CR 3006 +#define _WHL_ID_SEMI 3007 #define _INC_CR 3007 +#define _INC_SEMI 3008 #define _DEC_CR 3008 +#define _DEC_SEMI 3009 LANGUAGE_RULES_ARE { IF_SEQUENCE_IS( '^' , 0 , 0 , 0 ) REDUCE_TO( POWER , 0 ), @@ -402,7 +405,9 @@ LANGUAGE_RULES_ARE { IF_SEQUENCE_IS( _MACRO_ARRAY, 0 , 0 , 0 ) REDUCE_TO( MACROVAR , '[' ), IF_SEQUENCE_IS( DECLARE , MACROTEXT , '[' , 0 ) REDUCE_TO( PRIVATE , _TEXT_ARRAY ), IF_SEQUENCE_IS( _TEXT_ARRAY , 0 , 0 , 0 ) REDUCE_TO( MACROTEXT , '[' ), - IF_SEQUENCE_IS( DECLARE , IDENTIFIER , 0 , 0 ) PASS_THROUGH(), + IF_SEQUENCE_IS( DECLARE , IDENTIFIER , '(' , 0 ) PASS_THROUGH(), + IF_SEQUENCE_IS( DECLARE , IDENTIFIER , HB_ID_ON_HOLD, 0 ) PASS_THROUGH(), + IF_SEQUENCE_IS( DECLARE , IDENTIFIER , 0 , 0 ) REDUCE_TO( PRIVATE , IDENTIFIER ), IF_SEQUENCE_IS( DECLARE , 0 , 0 , 0 ) REDUCE_TO( HB_DECLARE_ID , 0 ), IF_SEQUENCE_IS( PUBLIC , TO , 0 , 0 ) REDUCE_TO( HB_PUBLIC_ID , TO ), @@ -557,8 +562,8 @@ LANGUAGE_RULES_ARE { IF_SEQUENCE_IS( RETURN , INASSIGN , 0 , 0 ) REDUCE_TO( HB_RETURN_ID , INASSIGN ), IF_SEQUENCE_IS( RETURN , INC , '\n' , 0 ) REDUCE_TO( HB_RETURN_ID , _INC_CR ), IF_SEQUENCE_IS( RETURN , DEC , '\n' , 0 ) REDUCE_TO( HB_RETURN_ID , _DEC_CR ), - IF_SEQUENCE_IS( RETURN , INC , ';' , 0 ) REDUCE_TO( HB_RETURN_ID , _INC_CR ), - IF_SEQUENCE_IS( RETURN , DEC , ';' , 0 ) REDUCE_TO( HB_RETURN_ID , _DEC_CR ), + IF_SEQUENCE_IS( RETURN , INC , ';' , 0 ) REDUCE_TO( HB_RETURN_ID , _INC_SEMI ), + IF_SEQUENCE_IS( RETURN , DEC , ';' , 0 ) REDUCE_TO( HB_RETURN_ID , _DEC_SEMI ), IF_SEQUENCE_IS( RETURN , ALIASOP , 0 , 0 ) REDUCE_TO( HB_RETURN_ID , ALIASOP ), IF_SEQUENCE_IS( RETURN , PLUSEQ , 0 , 0 ) REDUCE_TO( HB_RETURN_ID , PLUSEQ ), IF_SEQUENCE_IS( RETURN , MINUSEQ , 0 , 0 ) REDUCE_TO( HB_RETURN_ID , MINUSEQ ), @@ -574,7 +579,9 @@ LANGUAGE_RULES_ARE { IF_SEQUENCE_IS( RETURN , 0 , 0 , 0 ) PASS_THROUGH(), IF_SEQUENCE_IS( _INC_CR , 0 , 0 , 0 ) REDUCE_TO( INC , '\n' ), + IF_SEQUENCE_IS( _INC_SEMI , 0 , 0 , 0 ) REDUCE_TO( INC , ';' ), IF_SEQUENCE_IS( _DEC_CR , 0 , 0 , 0 ) REDUCE_TO( DEC , '\n' ), + IF_SEQUENCE_IS( _DEC_SEMI , 0 , 0 , 0 ) REDUCE_TO( DEC , ';' ), /* FOR ; EXIT ; NEXT LOOP */ @@ -673,7 +680,7 @@ LANGUAGE_RULES_ARE { IF_SEQUENCE_IS( DO , _WHILE_ , _WITH_ , 0 ) REDUCE_TO( DO , _WHILE_WITH ), IF_SEQUENCE_IS( DO , _CASE_ , _WITH_ , 0 ) REDUCE_TO( DO , _CASE_WITH ), IF_SEQUENCE_IS( DO , _WHILE_ , '\n' , 0 ) REDUCE_TO( DO , _WHL_ID_CR ), - IF_SEQUENCE_IS( DO , _WHILE_ , ';' , 0 ) REDUCE_TO( DO , _WHL_ID_CR ), + IF_SEQUENCE_IS( DO , _WHILE_ , ';' , 0 ) REDUCE_TO( DO , _WHL_ID_SEMI ), IF_SEQUENCE_IS( DO , _WITH_ , 0 , 0 ) REDUCE_TO( DO , HB_WITH_ID ), IF_SEQUENCE_IS( DO , OPTIONAL , 0 , 0 ) REDUCE_TO( DO , HB_OPTIONAL_ID), IF_SEQUENCE_IS( DO , IN , 0 , 0 ) REDUCE_TO( DO , HB_IN_ID ), @@ -684,6 +691,7 @@ LANGUAGE_RULES_ARE { IF_SEQUENCE_IS( _WHILE_WITH , 0 , 0 , 0 ) REDUCE_TO( HB_WHILE_ID , WITH ), IF_SEQUENCE_IS( _CASE_WITH , 0 , 0 , 0 ) REDUCE_TO( HB_CASE_ID , WITH ), IF_SEQUENCE_IS( _WHL_ID_CR , 0 , 0 , 0 ) REDUCE_TO( HB_WHILE_ID , '\n' ), + IF_SEQUENCE_IS( _WHL_ID_SEMI, 0 , 0 , 0 ) REDUCE_TO( HB_WHILE_ID , ';' ), /* This WHILE is only at BOL if followed by operator (other than logicals .t., .f., !) than Identifier else CASE. */ IF_SEQUENCE_IS( WHILE , TO , 0 , 0 ) REDUCE_TO( HB_WHILE_ID , TO ), @@ -1004,6 +1012,12 @@ LANGUAGE_RULES_ARE { else\ {\ DEBUG_INFO( printf( "Element \"%s\" is IDENTIFIER\n", yytext ) );\ +\ + if( strlen( yytext ) > HB_SYMBOL_NAME_LEN )\ + {\ + yytext[ HB_SYMBOL_NAME_LEN ] = '\0';\ + yyleng = HB_SYMBOL_NAME_LEN;\ + }\ \ if( iIdentifier )\ {\ diff --git a/harbour/tests/testdecl.prg b/harbour/tests/testdecl.prg new file mode 100644 index 0000000000..1b98faa6cd --- /dev/null +++ b/harbour/tests/testdecl.prg @@ -0,0 +1,35 @@ +#INCLUDE "HBCLASS.CH" + +#TRANSLATE AS NEW => AS CLASS := ():New() + +DECLARE nMyFun() AS NUM +DECLARE MyClass cVar AS CHAR + +Function Main() + + MEMVAR Var1, Var2, aVar + LOCAL MyObj AS NEW MyClass + + DECLARE Var1 + DECLARE Var2 := 2 + DECLARE aVar[2] + + M->Var1 := nMyFun() + ? M->Var1 + + ? M->Var2 + + M->aVar[1] := 'Array Element' + ? M->aVar[1] + + MyObj:cVar := 'Hello' + ? MyObj:cVar + +RETURN NIL + +CLASS MyClass + VAR cVar +ENDCLASS + +Function nMyFun() +RETURN 1