From 3b9362206952724c7e29b2b67e8dfbdb7115fc07 Mon Sep 17 00:00:00 2001 From: Ryszard Glab Date: Tue, 18 Jul 2006 10:14:31 +0000 Subject: [PATCH] 2006-07-18 12:20 UTC+0100 Ryszard Glab * source/pp/ppcore.c * added guard for infinite loop * utils/hbpptest/pretest.prg * added more test cases (3 of them fails) --- harbour/ChangeLog | 8 + harbour/source/pp/ppcore.c | 15 +- harbour/utils/hbpptest/pretest.prg | 226 ++++++++++++++++++++++++++++- 3 files changed, 242 insertions(+), 7 deletions(-) diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 21f86faf14..313d95324b 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -8,6 +8,14 @@ 2002-12-01 13:30 UTC+0100 Foo Bar */ + + Note added about __dbfList() to debugger source. + + * harbour/source/rtl/dbedit.prg + + +2006-07-18 12:20 UTC+0100 Ryszard Glab + * source/pp/ppcore.c + * added guard for infinite loop * utils/hbpptest/pretest.prg * added more test cases (3 of them fails) diff --git a/harbour/source/pp/ppcore.c b/harbour/source/pp/ppcore.c index 5efaf05f8a..14b433943a 100644 --- a/harbour/source/pp/ppcore.c +++ b/harbour/source/pp/ppcore.c @@ -1891,6 +1891,7 @@ static int WorkTranslate( char *ptri, char *ptro, COMMANDS * sttra, int *lens ) static int CommandStuff( char *ptrmp, char *inputLine, char *ptro, int *lenres, BOOL com_or_tra, BOOL com_or_xcom ) { BOOL endTranslation = FALSE; + BOOL bReplaced = FALSE; int ipos; char *lastopti[MAX_OPTIONALS], *strtopti = NULL, *strtptri = NULL; char *ptri = inputLine, *ptr, tmpname[MAX_NAME]; @@ -1955,14 +1956,14 @@ static int CommandStuff( char *ptrmp, char *inputLine, char *ptro, int *lenres, { char *ptr = ptrmp; SkipOptional( &ptrmp ); - if( !ptrmp[0] && *ptri && ptr != ptrmpatt+1 && ptri != inputLine ) + if( !ptrmp[0] && *ptri && ptr != ptrmpatt+1 && ptri != inputLine && bReplaced ) { /* Start scanning from the beginning * end of pattern but still there is an input stream to parse * */ - ptrmp = ptrmpatt; - strtopti = NULL; + ptrmp = ptrmpatt; + strtopti = NULL; } } break; @@ -2010,7 +2011,7 @@ static int CommandStuff( char *ptrmp, char *inputLine, char *ptro, int *lenres, if( !isWordInside ) strtopti = NULL; ptrmp++; - if( !ptrmp[0] && *ptri && ptr != ptrmpatt+1 && ptri != inputLine ) + if( !ptrmp[0] && *ptri && ptr != ptrmpatt+1 && ptri != inputLine && bReplaced ) { /* Start scanning from the beginning * end of pattern but still there is an input stream to parse @@ -2056,7 +2057,11 @@ static int CommandStuff( char *ptrmp, char *inputLine, char *ptro, int *lenres, strtopti = NULL; if( s_numBrackets == 1 && *( ptrmp + 2 ) == '2' ) isWordInside = 1; /* restricted match marker */ - if( !WorkMarkers( &ptrmp, &ptri, ptro, lenres, com_or_tra, com_or_xcom ) ) + if( WorkMarkers( &ptrmp, &ptri, ptro, lenres, com_or_tra, com_or_xcom ) ) + { + bReplaced = TRUE; + } + else { if( s_numBrackets ) { diff --git a/harbour/utils/hbpptest/pretest.prg b/harbour/utils/hbpptest/pretest.prg index 8626e2956d..226392d69e 100644 --- a/harbour/utils/hbpptest/pretest.prg +++ b/harbour/utils/hbpptest/pretest.prg @@ -16,8 +16,6 @@ LOCAL in, out, pre LOCAL nCnt:=0 LOCAL nRes:=0 - __PP_INIT() - /* ---------------------------------------------------------------------*/ in := "#xtranslate CCC => QOUT( [2] [, [][3]] )"+HB_OSNewLine()+; "CCC b" @@ -957,6 +955,230 @@ ENDTEXT pre := "AVERAGE({||s1:=s1+f1} ,{||s2:=s2+f2} ,{||s3:=s3+f3} )" nRes += PreResult( pre, PreRun( in, pre ), @nCnt ) +/* ---------------------------------------------------------------------*/ + in := "COPY STRUCTURE EXTENDED TO teststru" + pre := '__dbCopyXStruct( "teststru" )' + nRes += PreResult( pre, PreRun( in, pre ), @nCnt ) + +/* ---------------------------------------------------------------------*/ +TEXT TO VAR in +#command @ , GET + [PICTURE ] + [VALID ] + [WHEN ] + [CAPTION ] + [MESSAGE ] + [SEND ] + + => SetPos( , ) + ; AAdd( GetList, + _GET_( , <"var">, , <{valid}>, <{when}> ) ) + [; ATail(GetList):Caption := ] + [; ATail(GetList):CapRow := ATail(Getlist):row + ; ATail(GetList):CapCol := ATail(Getlist):col - + __CapLength() - 1] + [; ATail(GetList):message := ] + [; ATail(GetList):] + ; ATail(GetList):Display() +ENDTEXT + __PreProcess( in ) + + in := '@ 0,1 GET a' + pre := 'SetPos(0,1 ) ; AAdd(GetList,_GET_(a,"a",,, ) ) ; ATail(GetList):Display()' + nRes += PreResult( pre, PreRun( in, pre ), @nCnt ) + + in := '@ 0,2 GET a PICTURE "X"' + pre := 'SetPos(0,2 ) ; AAdd(GetList,_GET_(a,"a","X",, ) ) ; ATail(GetList):Display()' + nRes += PreResult( pre, PreRun( in, pre ), @nCnt ) + + in := '@ 0,3 GET a PICTURE "X" VALID .T.' + pre := 'SetPos(0,3 ) ; AAdd(GetList,_GET_(a,"a","X",{||.T.}, ) ) ; ATail(GetList):Display()' + nRes += PreResult( pre, PreRun( in, pre ), @nCnt ) + + in := '@ 0,4 GET a PICTURE "X" VALID .T. WHEN .T.' + pre := 'SetPos(0,4 ) ; AAdd(GetList,_GET_(a,"a","X",{||.T.},{||.T.} ) ) ; ATail(GetList):Display()' + nRes += PreResult( pre, PreRun( in, pre ), @nCnt ) + + in := '@ 0,5 GET a PICTURE "X" VALID .T. WHEN .T. CAPTION "myget"' + pre := 'SetPos(0,5 ) ; AAdd(GetList,_GET_(a,"a","X",{||.T.},{||.T.} ) ) ; ATail(GetList):Caption := "myget" ; ATail(GetList):CapRow := ATail(Getlist):row ; ATail(GetList):CapCol := ATail(Getlist):col - __CapLength("myget") - 1 ; ATail(GetList):Display()' + nRes += PreResult( pre, PreRun( in, pre ), @nCnt ) + + in := '@ 0,6 GET a PICTURE "X" VALID .T. WHEN .T. CAPTION "myget" MESSAGE "mymess"' + pre := 'SetPos(0,6 ) ; AAdd(GetList,_GET_(a,"a","X",{||.T.},{||.T.} ) ) ; ATail(GetList):Caption := "myget" ; ATail(GetList):CapRow := ATail(Getlist):row ; ATail(GetList):CapCol := ATail(Getlist):col - __CapLength("myget") - 1 ; ATail(GetList):message := "mymess" ; ATail(GetList):Display()' + nRes += PreResult( pre, PreRun( in, pre ), @nCnt ) + + in := '@ 0,7 GET a PICTURE "X" VALID .T. WHEN .T. CAPTION "myget" MESSAGE "mymess" SEND send()' + pre := 'SetPos(0,7 ) ; AAdd(GetList,_GET_(a,"a","X",{||.T.},{||.T.} ) ) ; ATail(GetList):Caption := "myget" ; ATail(GetList):CapRow := ATail(Getlist):row ; ATail(GetList):CapCol := ATail(Getlist):col - __CapLength("myget") - 1 ; ATail(GetList):message := "mymess" ; ATail(GetList):send() ; ATail(GetList):Display()' + nRes += PreResult( pre, PreRun( in, pre ), @nCnt ) + +/* ---------------------------------------------------------------------*/ + in :='@ 1,1 GET a RANGE 0,100' + pre := 'SetPos(1,1 ) ; AAdd(GetList,_GET_(a,"a",,{|_1| RangeCheck(_1,, 0, 100)}, ) ) ; ATail(GetList):Display()' + nRes += PreResult( pre, PreRun( in, pre ), @nCnt ) + + in :='@ 1,2 GET a PICTURE "X" RANGE 0,100' + pre := 'SetPos(1,2 ) ; AAdd(GetList,_GET_(a,"a","X",{|_1| RangeCheck(_1,, 0, 100)}, ) ) ; ATail(GetList):Display()' + nRes += PreResult( pre, PreRun( in, pre ), @nCnt ) + + /* NOTE: Clipper fails here */ + in :='@ 1,3 GET a PICTURE "X" VALID .T. RANGE 0,100' + pre := 'SetPos(1,3 ) ; AAdd(GetList,_GET_(a,"a","X",{||.T.}, ) ) ; ATail(GetList):Display()' + nRes += PreResult( pre, PreRun( in, pre ), @nCnt ) + + in :='@ 1,4 GET a PICTURE "X" WHEN .T. RANGE 0,100' + pre := 'SetPos(1,4 ) ; AAdd(GetList,_GET_(a,"a","X",{|_1| RangeCheck(_1,, 0, 100)},{||.T.} ) ) ; ATail(GetList):Display()' + nRes += PreResult( pre, PreRun( in, pre ), @nCnt ) + + in :='@ 1,5 GET a PICTURE "X" WHEN .T. CAPTION "myget" RANGE 0,100' + pre := 'SetPos(1,5 ) ; AAdd(GetList,_GET_(a,"a","X",{|_1| RangeCheck(_1,, 0, 100)},{||.T.} ) ) ; ATail(GetList):Caption := "myget" ; ATail(GetList):CapRow := ATail(Getlist):row ; ATail(GetList):CapCol := ATail(Getlist):col - __CapLength("myget") - 1 ; ATail(GetList):Display()' + nRes += PreResult( pre, PreRun( in, pre ), @nCnt ) + + in :='@ 1,6 GET a PICTURE "X" WHEN .T. CAPTION "myget" MESSAGE "mymess" RANGE 0,100' + pre := 'SetPos(1,6 ) ; AAdd(GetList,_GET_(a,"a","X",{|_1| RangeCheck(_1,, 0, 100)},{||.T.} ) ) ; ATail(GetList):Caption := "myget" ; ATail(GetList):CapRow := ATail(Getlist):row ; ATail(GetList):CapCol := ATail(Getlist):col - __CapLength("myget") - 1 ; ATail(GetList):message := "mymess" ; ATail(GetList):Display()' + nRes += PreResult( pre, PreRun( in, pre ), @nCnt ) + + in :='@ 1,7 GET a PICTURE "X" WHEN .T. CAPTION "myget" MESSAGE "mymess" SEND send() RANGE 0,100' + pre := 'SetPos(1,7 ) ; AAdd(GetList,_GET_(a,"a","X",{|_1| RangeCheck(_1,, 0, 100)},{||.T.} ) ) ; ATail(GetList):Caption := "myget" ; ATail(GetList):CapRow := ATail(Getlist):row ; ATail(GetList):CapCol := ATail(Getlist):col - __CapLength("myget") - 1 ; ATail(GetList):message := "mymess" ; ATail(GetList):send() ; ATail(GetList):Display()' + nRes += PreResult( pre, PreRun( in, pre ), @nCnt ) + + in :='@ 2,1 GET a' + pre := 'SetPos(2,1 ) ; AAdd(GetList,_GET_(a,"a",,, ) ) ; ATail(GetList):Display()' + nRes += PreResult( pre, PreRun( in, pre ), @nCnt ) + + in :='@ 2,2 GET a RANGE 0,100 PICTURE "X"' + pre := 'SetPos(2,2 ) ; AAdd(GetList,_GET_(a,"a","X",{|_1| RangeCheck(_1,, 0, 100)}, ) ) ; ATail(GetList):Display()' + nRes += PreResult( pre, PreRun( in, pre ), @nCnt ) + + in :='@ 2,3 GET a PICTURE "X" RANGE 0,100' + pre := 'SetPos(2,3 ) ; AAdd(GetList,_GET_(a,"a","X",{|_1| RangeCheck(_1,, 0, 100)}, ) ) ; ATail(GetList):Display()' + nRes += PreResult( pre, PreRun( in, pre ), @nCnt ) + + in :='@ 2,4 GET a PICTURE "X" RANGE 0,100 WHEN .T.' + pre := 'SetPos(2,4 ) ; AAdd(GetList,_GET_(a,"a","X",{|_1| RangeCheck(_1,, 0, 100)},{||.T.} ) ) ; ATail(GetList):Display()' + nRes += PreResult( pre, PreRun( in, pre ), @nCnt ) + + in :='@ 2,5 GET a PICTURE "X" RANGE 0,100 WHEN .T. CAPTION "myget"' + pre := 'SetPos(2,5 ) ; AAdd(GetList,_GET_(a,"a","X",{|_1| RangeCheck(_1,, 0, 100)},{||.T.} ) ) ; ATail(GetList):Caption := "myget" ; ATail(GetList):CapRow := ATail(Getlist):row ; ATail(GetList):CapCol := ATail(Getlist):col - __CapLength("myget") - 1 ; ATail(GetList):Display()' + nRes += PreResult( pre, PreRun( in, pre ), @nCnt ) + + in :='@ 2,6 GET a PICTURE "X" RANGE 0,100 WHEN .T. CAPTION "myget" MESSAGE "mymess"' + pre := 'SetPos(2,6 ) ; AAdd(GetList,_GET_(a,"a","X",{|_1| RangeCheck(_1,, 0, 100)},{||.T.} ) ) ; ATail(GetList):Caption := "myget" ; ATail(GetList):CapRow := ATail(Getlist):row ; ATail(GetList):CapCol := ATail(Getlist):col - __CapLength("myget") - 1 ; ATail(GetList):message := "mymess" ; ATail(GetList):Display()' + nRes += PreResult( pre, PreRun( in, pre ), @nCnt ) + + in :='@ 2,7 GET a PICTURE "X" RANGE 0,100 WHEN .T. CAPTION "myget" MESSAGE "mymess" SEND send()' + pre := 'SetPos(2,7 ) ; AAdd(GetList,_GET_(a,"a","X",{|_1| RangeCheck(_1,, 0, 100)},{||.T.} ) ) ; ATail(GetList):Caption := "myget" ; ATail(GetList):CapRow := ATail(Getlist):row ; ATail(GetList):CapCol := ATail(Getlist):col - __CapLength("myget") - 1 ; ATail(GetList):message := "mymess" ; ATail(GetList):send() ; ATail(GetList):Display()' + nRes += PreResult( pre, PreRun( in, pre ), @nCnt ) + + +/* ---------------------------------------------------------------------*/ +TEXT TO VAR in +#command @ , GET + PUSHBUTTON + [VALID ] + [WHEN ] + [CAPTION ] + [MESSAGE ] + [COLOR ] + [FOCUS ] + [STATE ] + [STYLE