2000-07-28 14:00 UTC+0800 Ron Pinkas <ron@profit-master.com>

* 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.
This commit is contained in:
Ron Pinkas
2000-07-28 21:03:36 +00:00
parent a831db075e
commit ffa6630674
3 changed files with 64 additions and 7 deletions

View File

@@ -1,3 +1,11 @@
2000-07-28 14:00 UTC+0800 Ron Pinkas <ron@profit-master.com>
* 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 <dholm@jsd-llc.com>
* 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 <ron@profit-master.com>
+ doc/simplex.txt

View File

@@ -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 )\
{\

View File

@@ -0,0 +1,35 @@
#INCLUDE "HBCLASS.CH"
#TRANSLATE AS NEW <ClassName> => AS CLASS <ClassName> := <ClassName>():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