* harbour.y
+ added rules to allow inline assignment to RIVATE/PUBLIC &cVar (as in PRIVATE &cVar := 'Hello').
+ added extern char *yytext to have acces to the original string form of numbers.
* harbour.l
+ added rules to support new TOKEN MACROOP and completed support for macro in MODES PRIVATE and PUBLIC_ (Ryszard TODO removed).
* tests/tstmacro.prg
added more tests to demonstrate working capabilities of macro.
89 lines
1.6 KiB
Plaintext
89 lines
1.6 KiB
Plaintext
#INCLUDE "HBCLASS.CH"
|
|
|
|
Function Main( )
|
|
|
|
LOCAL cStr := 'cVar', cStr_1 := 'cVar_1', aVar := { 'cVar_1' }, oVar
|
|
|
|
PRIVATE cVar_1, cMainPrivate := 'cVar_1', GlobalPrivate := 'BornInRunTimeVar'
|
|
|
|
&cStr_1 = 'Simple '
|
|
? M->cVar_1
|
|
|
|
&( 'cVar' + '_1' ) := 'Macro'
|
|
?? M->cVar_1
|
|
|
|
M->&cStr_1 = 'Aliased'
|
|
? M->cVar_1
|
|
|
|
MEMVAR->&( 'cVar' + '_1' ) := ' Macro'
|
|
?? M->cVar_1
|
|
|
|
cStr := 'cVar_'
|
|
&cStr.1 = 'Concatenated Macro (Numeric)'
|
|
? M->cVar_1
|
|
|
|
cStr := 'cVar'
|
|
&cStr._1 = 'Concatenated Macro (String)'
|
|
? M->cVar_1
|
|
|
|
&aVar[1] := 'Array Macro'
|
|
? M->cVar_1
|
|
|
|
oVar := TValue():New()
|
|
oVar:cVal := 'cVar_1'
|
|
&oVar:cVal := 'Class Macro'
|
|
? M->cVar_1
|
|
|
|
SubFun()
|
|
|
|
? '"cVar_1" = [' + M->cVar_1 + '] AFTER SubFun() PRIVATE'
|
|
|
|
? M->NewPublicVar
|
|
|
|
RETURN NIL
|
|
|
|
FUNCTION TValue
|
|
|
|
STATIC oClass
|
|
|
|
IF oClass == NIL
|
|
oClass = TClass():New( "TValue" )
|
|
|
|
oClass:AddData( "cVal" )
|
|
oClass:AddMethod( "New", @New() ) // New Method
|
|
|
|
oClass:Create()
|
|
|
|
ENDIF
|
|
|
|
RETURN( oClass:Instance() )
|
|
|
|
STATIC FUNCTION New()
|
|
|
|
LOCAL Self := QSelf()
|
|
|
|
RETURN Self
|
|
|
|
Function SubFun()
|
|
|
|
? '"cVar_1" = [' + M->cVar_1 + '] BEFORE SubFun() PRIVATE'
|
|
|
|
// Testing conflict with KEY WORDS
|
|
PRIVATE PRIVATE := 'I am a Var named PRIVATE ', &cMainPrivate, SomeVar, OtherVar := 1, &GlobalPrivate := 'I was born in Run Time'
|
|
PUBLIC PUBLIC := 'My Name is PUBLIC', &( 'NewPublicVar' ) := 'Test Inline Assignment'
|
|
|
|
? M->NewPublicVar
|
|
|
|
M->NewPublicVar := 'Still Alive because I am PUBLIC'
|
|
|
|
? M->PRIVATE + PRIVATE
|
|
? PRIVATE + M->PRIVATE
|
|
|
|
? BornInRunTimeVar
|
|
|
|
&cMainPrivate := 'In SubFun()'
|
|
|
|
? '"cVar_1" = [' + M->cVar_1 + '] in SubFun() PRIVATE'
|
|
|
|
RETURN
|