Refined CompileRule() to use same logic as NextToken() when compiling the match patterns.

This commit is contained in:
Ron Pinkas
2001-05-25 01:33:03 +00:00
parent 0b3f153594
commit fe40609370

View File

@@ -3748,8 +3748,8 @@ FUNCTION NextToken( sLine )
ELSEIF s2 == "[["
nClose := AT( ']]', sLine )
IF nClose == 0
Alert( "ERROR! [NextToken()] Unterminated '[[' at: " + sLine + "[" + Str( ProcLine() ) + "]" )
sReturn := "[["
//Alert( "ERROR! [NextToken()] Unterminated '[[' at: " + sLine + "[" + Str( ProcLine() ) + "]" )
sReturn := "[" // Clipper does NOT consider '[[' a single token
ELSE
sReturn := Left( sLine, nClose + 2 )
ENDIF
@@ -4723,6 +4723,7 @@ FUNCTION CompileRule( sRule, aRules, aResults, bX, bUpper )
LOCAL nOptionalAt, nMarkerAt, aMarkers := {}, Counter, nType, aResult := {}, sTemp, aModifiers, aValues
LOCAL aRP, nAt, sResult, nCloseAt, sMarker, nCloseOptionalAt, sPad, nResults, nMarker, nMP, nMatches, nOffset
LOCAL nWord, nWords, cChar
LOCAL nLen, s1, s2, s3
/*
nMarkerID
@@ -4765,30 +4766,91 @@ FUNCTION CompileRule( sRule, aRules, aResults, bX, bUpper )
ENDIF
DO WHILE ! ( Left( sRule, 1 ) == '' )
//? "Scaning: " + sRule
IF Left( sRule, 1 ) == '\'
nLen := Len( sRule )
s1 := Left( sRule, 1 )
IF nLen >= 2
s2 := Left( sRule, 2 )
ENDIF
IF nLen >= 3
s3 := Upper( Left( sRule, 3 ) )
ENDIF
BEGIN SEQUENCE
IF nLen >= 5
IF s1 == '.' .AND. Upper( SubStr( sRule, 2, 3 ) ) == 'AND' .AND. SubStr( sRule, 5, 1 ) == '.'
sTemp := ".AND."
BREAK
ELSEIF s1 = '.' .AND. Upper( SubStr( sRule, 2, 3 ) ) == 'NOT' .AND. SubStr( sRule, 5, 1 ) == '.'
sTemp := "!"
/* Skip the unaccounted letters ( .NOT. <-> ! ) */
sRule := SubStr( sRule, 4 )
BREAK
ENDIF
ENDIF
IF nLen >= 4 .AND. s1 == '.' .AND. Upper( SubStr( sRule, 2, 2 ) ) == 'OR' .AND. SubStr( sRule, 4, 1 ) == '.'
sTemp := ".OR."
BREAK
ENDIF
IF nLen >= 3 .AND. s3 $ ".T.\.F."
sTemp := s3
BREAK
ENDIF
IF nLen >= 2
IF s2 $ "++\--\->\:=\==\!=\<>\>=\<=\+=\-=\*=\^=\**\/=\%=\??"
sTemp := s2
BREAK
ENDIF
ENDIF
IF nLen >= 1
IF s1 == '\'
sTemp := SubStr( sRule, 2, 1 )
sRule := SubStr( sRule, 2 )
BREAK
ELSEIF s1 == '_' .OR. IsAlpha( s1 )
sTemp := Upper( RTrim( NextToken( sRule ) ) ) // Not by refernce because of SubStr() below!!!
BREAK
ELSEIF s1 == ']' .AND. nOptional == 0
sTemp := ']'
BREAK
ELSEIF s1 $ ".+-*/:=^!&(){}@,|>#%?"
sTemp := s1
BREAK
ENDIF
ENDIF
END SEQUENCE
IF sTemp != NIL
IF ! ( sAnchor == NIL )
//? "ORPHAN ANCHOR: " + sAnchor
//TraceLog( "ORPHAN ANCHOR: " + sAnchor )
aMatch := { 0, nOptional, sAnchor, NIL, NIL }
//? aMatch[1], aMatch[2], aMatch[3], aMatch[4], aMatch[5]
aAdd( aRule[2], aMatch )
//sAnchor := NIL
aWords := NIL
cType := NIL
/* Next dependant optional will be marked as trailing. */
IF nOptional > 0
nOptional := ( -nOptional )
ENDIF
ENDIF
sAnchor := SubStr( sRule, 2, 1 )
sRule := SubStr( sRule, 3 )
sAnchor := sTemp // Next Anchor
sRule := SubStr( sRule, Len( sAnchor ) + 1 )
ExtractLeadingWS( @sRule )
LOOP
ELSEIF Left( sRule, 1 ) == '<'
sTemp := NIL // Resetting.
LOOP
ENDIF
IF s1 == '<'
nId++
DO CASE
@@ -4803,19 +4865,16 @@ FUNCTION CompileRule( sRule, aRules, aResults, bX, bUpper )
sRule := SubStr( sRule, nNext + 2 )
ExtractLeadingWS( @sRule )
aMatch := { nId, nOptional, sAnchor, cType, aWords }
aMatch := { nId, nOptional, sAnchor, cType, NIL }
//? aMatch[1], aMatch[2], aMatch[3], aMatch[4], aMatch[5]
aAdd( aRule[2], aMatch )
/* Next dependant optional will be marked as trailing. */
IF nOptional > 0
nOptional := ( -nOptional )
ENDIF
//? aMatch[1], aMatch[2], aMatch[3], aMatch[4], aMatch[5]
aAdd( aRule[2], aMatch )
sAnchor := NIL
aWords := NIL
cType := NIL
LOOP
ELSE
Alert( "ERROR! Unblanced MP: '<*' at: " + sRule )
@@ -4833,19 +4892,16 @@ FUNCTION CompileRule( sRule, aRules, aResults, bX, bUpper )
sRule := SubStr( sRule, nNext + 2 )
ExtractLeadingWS( @sRule )
aMatch := { nId, nOptional, sAnchor, cType, aWords }
aMatch := { nId, nOptional, sAnchor, cType, NIL }
//? aMatch[1], aMatch[2], aMatch[3], aMatch[4], aMatch[5]
aAdd( aRule[2], aMatch )
/* Next dependant optional will be marked as trailing. */
IF nOptional > 0
nOptional := ( -nOptional )
ENDIF
//? aMatch[1], aMatch[2], aMatch[3], aMatch[4], aMatch[5]
aAdd( aRule[2], aMatch )
sAnchor := NIL
aWords := NIL
cType := NIL
LOOP
ELSE
Alert( "ERROR! Unbalanced MP: '<(' at: " + sRule )
@@ -4853,9 +4909,9 @@ FUNCTION CompileRule( sRule, aRules, aResults, bX, bUpper )
ENDIF
OTHERWISE
cType := NIL // Reset - not known yet.
sRule := SubStr( sRule, 2 )
ExtractLeadingWS( @sRule )
ENDCASE
nCloseAt := At('>', sRule )
@@ -4882,7 +4938,6 @@ FUNCTION CompileRule( sRule, aRules, aResults, bX, bUpper )
cType := ':'
//? "LIST"
sMarker := Left( sRule, nNext - 1 )
ExtractLeadingWS( @sMarker )
aAdd( aMarkers, sMarker )
@@ -4891,9 +4946,7 @@ FUNCTION CompileRule( sRule, aRules, aResults, bX, bUpper )
ExtractLeadingWS( @sRule )
aWords := {}
DO WHILE ! ( Left( sRule, 1 ) == '>' )
nNext := At( ',', sRule )
IF nNext > 0 .AND. nNext < At( '>', sRule )
//? "Added: " + Left( sRule, nNext - 1 )
@@ -4930,37 +4983,33 @@ FUNCTION CompileRule( sRule, aRules, aResults, bX, bUpper )
ExtractLeadingWS( @sRule )
aMatch := { nId, nOptional, sAnchor, cType, aWords }
//? aMatch[1], aMatch[2], aMatch[3], aMatch[4], aMatch[5]
aAdd( aRule[2], aMatch )
aWords := NIL // Reset.
/* Next dependant optional will be marked as trailing. */
IF nOptional > 0
nOptional := ( -nOptional )
ENDIF
//? aMatch[1], aMatch[2], aMatch[3], aMatch[4], aMatch[5]
aAdd( aRule[2], aMatch )
ELSE
Alert( "ERROR! Unbalanced MP: '<' at: " + sRule )
RETURN .F.
ENDIF
sAnchor := NIL
aWords := NIL
cType := NIL
LOOP
ELSEIF Left( sRule, 1 ) == '['
ELSEIF s1 == '['
IF ! ( sAnchor == NIL )
//? "ORPHAN ANCHOR: " + sAnchor
//TraceLog( "ORPHAN ANCHOR: " + sAnchor )
aMatch := { 0, nOptional, sAnchor, NIL, NIL }
//? aMatch[1], aMatch[2], aMatch[3], aMatch[4], aMatch[5]
aAdd( aRule[2], aMatch )
sAnchor := NIL
aWords := NIL
cType := NIL
// No need to negate nOptional, because we start a new optional group below...
ENDIF
nOptional := Abs( nOptional )
@@ -4969,323 +5018,72 @@ FUNCTION CompileRule( sRule, aRules, aResults, bX, bUpper )
sRule := SubStr( sRule, 2 )
ExtractLeadingWS( @sRule )
sAnchor := NIL
LOOP
ELSEIF Left( sRule, 1 ) == ']'
ELSEIF s1 == ']'
IF ! ( sAnchor == NIL )
//? "ORPHAN ANCHOR: " + sAnchor
//TraceLog( "ORPHAN ANCHOR: " + sAnchor )
aMatch := { 0, nOptional, sAnchor, NIL, NIL }
//? aMatch[1], aMatch[2], aMatch[3], aMatch[4], aMatch[5]
aAdd( aRule[2], aMatch )
sAnchor := NIL
aWords := NIL
cType := NIL
// No need to negate nOptional, because we close optional group below...
ENDIF
IF nOptional == 0
sAnchor := ']'
IF nOptional > 0
nOptional--
nOptional := (-nOptional)
ELSE
IF nOptional > 0
nOptional--
nOptional := (-nOptional)
ELSE
nOptional++
ENDIF
nOptional++
ENDIF
sRule := SubStr( sRule, 2 )
ExtractLeadingWS( @sRule )
LOOP
ELSEIF Left( sRule, 2 ) == ":=" .OR. Left( sRule, 2 ) == "=="
IF ! ( sAnchor == NIL )
//? "ORPHAN ANCHOR: " + sAnchor
aMatch := { 0, nOptional, sAnchor, NIL, NIL }
//? aMatch[1], aMatch[2], aMatch[3], aMatch[4], aMatch[5]
aAdd( aRule[2], aMatch )
//sAnchor := NIL
aWords := NIL
cType := NIL
ENDIF
sAnchor := Left( sRule, 2 )
sRule := SubStr( sRule, 3 )
ExtractLeadingWS( @sRule )
LOOP
ELSEIF Left( sRule, 1 ) $ "():="
IF ! ( sAnchor == NIL )
//? "ORPHAN ANCHOR: " + sAnchor
aMatch := { 0, nOptional, sAnchor, NIL, NIL }
//? aMatch[1], aMatch[2], aMatch[3], aMatch[4], aMatch[5]
aAdd( aRule[2], aMatch )
//sAnchor := NIL
aWords := NIL
cType := NIL
ENDIF
sAnchor := Left( sRule, 1 )
sRule := SubStr( sRule, 2 )
ExtractLeadingWS( @sRule )
LOOP
ELSEIF ( cChar := Left( sRule, 1 ) ) == '_' .OR. IsAlpha( cChar )
IF ! ( sAnchor == NIL )
//? "ORPHAN ANCHOR: " + sAnchor
aMatch := { 0, nOptional, sAnchor, NIL, NIL }
//? aMatch[1], aMatch[2], aMatch[3], aMatch[4], aMatch[5]
aAdd( aRule[2], aMatch )
//sAnchor := NIL
aWords := NIL
cType := NIL
ENDIF
sAnchor := Upper( RTrim( NextToken( @sRule ) ) )
sAnchor := NIL
LOOP
ELSE
// Some token sneaked in ...
TraceLog( "*** " + sRule )
Alert( "*** " + sRule )
IF ! ( sAnchor == NIL )
//? "ORPHAN ANCHOR: " + sAnchor
//TraceLog( "ORPHAN ANCHOR: " + sAnchor )
aMatch := { 0, nOptional, sAnchor, NIL, NIL }
//? aMatch[1], aMatch[2], aMatch[3], aMatch[4], aMatch[5]
aAdd( aRule[2], aMatch )
/* Next dependant optional will be marked as trailing. */
IF nOptional > 0
nOptional := ( -nOptional )
ENDIF
//? aMatch[1], aMatch[2], aMatch[3], aMatch[4], aMatch[5]
aAdd( aRule[2], aMatch )
sAnchor := NIL
aWords := NIL
cType := NIL
ENDIF
nNext := At( ' ', sRule ) // Tabs converted to spaces by ProcessFile()
nOffset := 0
IF nNext == 0
nOptionalAt := At( '[', sRule )
WHILE nOPtionalAt > 1 .AND. SubStr( sRule, nOffset + nOptionalAt - 1, 1 ) == '\'
nOffset += nOptionalAt
nOptionalAt := At( '[', SubStr( sRule, nOffset + 1 ) )
ENDDO
IF nOptionalAt > 0
nOptionalAt += nOffset
ENDIF
ELSE
nOptionalAt := At( '[', sRule )
WHILE nOPtionalAt > 1 .AND. nOptionalAt <= nNext .AND. SubStr( sRule, nOffset + nOptionalAt - 1, 1 ) == '\'
nOffset += nOptionalAt
nNext--
nOptionalAt := At( '[', SubStr( sRule, nOffset + 1 ) )
ENDDO
IF nOptionalAt > 0
nOptionalAt += nOffset
ENDIF
IF nOPtionalAt > 0
IF nOptionalAt > nNext
nOptionalAt := 0
ELSE
nNext := 0
ENDIF
ENDIF
ENDIF
nAt := IIF( nNext == 0, nOptionalAt, nNext )
nOffset := 0
IF nAt == 0
nMarkerAt := At( '<', sRule )
WHILE nMarkerAt > 0
IF nMarkerAt > 1 .AND. SubStr( sRule, nOffset + nMarkerAt - 1, 1 ) == '\'
nOffset += nMarkerAt
nMarkerAt := At( '<', SubStr( sRule, nOffset + 1 ) )
ELSEIF nMarkerAt > 0 .AND. SubStr( sRule, nOffset + nMarkerAt + 1, 1 ) $ ">=" // ignore <= and <>
nOffset += nMarkerAt + 1
nMarkerAt := At( '<', SubStr( sRule, nOffset + 1 ) )
ELSE
EXIT
ENDIF
ENDDO
IF nMarkerAt > 0
nMarkerAt += nOffset
ENDIF
ELSE
nMarkerAt := At( '<', sRule )
WHILE nMarkerAt > 0
IF nMarkerAt > 1 .AND. nOffset + nMarkerAt < nAt .AND. SubStr( sRule, nOffset + nMarkerAt - 1, 1 ) == '\'
nOffset += nMarkerAt
nMarkerAt := At( '<', SubStr( sRule, nOffset + 1 ) )
ELSEIF nMarkerAt > 0 .AND. nOffset + nMarkerAt < nAt .AND. SubStr( sRule, nOffset + nMarkerAt + 1, 1 ) $ ">=" // ignore <= and <>
nOffset += nMarkerAt + 1
nMarkerAt := At( '<', SubStr( sRule, nOffset + 1 ) )
ELSE
EXIT
ENDIF
ENDDO
IF nMarkerAt > 0
nMarkerAt += nOffset
ENDIF
IF nMarkerAt > 0
IF nMarkerAt > nAt
nMarkerAt := 0
ELSE
nAt := 0
nOptionalAt := 0
nNext := 0
ENDIF
ENDIF
ENDIF
nAt := IIF( nAt == 0, nMarkerAt, nAt )
nOffset := 0
IF nAt == 0
nCloseOptionalAt := At( ']', sRule )
WHILE nCloseOptionalAt > 1 .AND. SubStr( sRule, nOffset + nCloseOptionalAt - 1, 1 ) == '\'
nOffset += nCloseOptionalAt
nCloseOptionalAt := At( ']', SubStr( sRule, nOffset + 1 ) )
ENDDO
IF nCloseOptionalAt > 0
nCloseOptionalAt += nOffset
ENDIF
ELSE
nCloseOptionalAt := At( ']', sRule )
WHILE nCloseOptionalAt > 1 .AND. nOffset + nCloseOptionalAt <= nAt .AND. SubStr( sRule, nOffset + nCloseOptionalAt - 1, 1 ) == '\'
nOffset += nCloseOptionalAt
nCloseOptionalAt := At( ']', SubStr( sRule, nOffset + 1 ) )
ENDDO
IF nCloseOptionalAt > 0
nCloseOptionalAt += nOffset
ENDIF
IF nCloseOptionalAt > 0
IF nCloseOptionalAt > nAt
nCloseOptionalAt := 0
ELSE
nAt := 0
nOptionalAt := 0
nNext := 0
nMarkerAt := 0
ENDIF
ENDIF
ENDIF
IF nNext > 0
nNext := nAt
ELSEIF nOptionalAt > 0
nOPtionalAt := nAt
ELSEIF nMarkerAt > 0
nMarkerAt := nAt
ENDIF
//? sRule
//? "MP scan:", nAt, nNext, nMarkerAt, nOptionalAt, nCloseOptionalAt
//WAIT
IF nNext > 0
sAnchor := Upper( Left( sRule, nNext - 1 ) )
DropTrailingWS( @sAnchor )
//? "ANCHOR: " + sAnchor
sRule := SubStr( sRule, nNext + 1 )
ExtractLeadingWS( @sRule )
ELSEIF nOptionalAt > 0
sAnchor := Upper( Left( sRule, nOptionalAt - 1 ) )
DropTrailingWS( @sAnchor )
//? "ANCHOR: " + sAnchor
nOptional := Abs( nOptional )
nOptional++
sRule := SubStr( sRule, nOptionalAt + 1 )
ExtractLeadingWS( @sRule )
ELSEIF nMarkerAt > 0
sAnchor := Upper( Left( sRule, nMarkerAt - 1 ) )
DropTrailingWS( @sAnchor )
//? "ANCHOR: " + sAnchor
sRule := SubStr( sRule, nMarkerAt )
ExtractLeadingWS( @sRule )
ELSEIF nCloseOptionalAt > 0
//? "Closing"
sAnchor := Upper( Left( sRule, nCloseOptionalAt - 1 ) )
DropTrailingWS( @sAnchor )
//? "ANCHOR: " + sAnchor
IF ! ( sAnchor == NIL )
aMatch := { 0, nOptional, sAnchor, NIL, NIL }
//? "Orphan:", aMatch[1], aMatch[2], aMatch[3], aMatch[4], aMatch[5]
//WAIT
aAdd( aRule[2], aMatch )
sAnchor := NIL
aWords := NIL
cType := NIL
ENDIF
IF nOptional > 0
nOptional--
nOptional := (-nOptional)
ELSE
nOptional++
ENDIF
sRule := SubStr( sRule, nCloseOptionalAt + 1 )
ExtractLeadingWS( @sRule )
ELSE
sAnchor := Upper( sRule )
DropTrailingWS( @sAnchor )
//? "ANCHOR: " + sAnchor
sRule := ''
LOOP
ENDIF
ENDIF
ENDDO
IF ! ( cType == NIL .AND. sAnchor == NIL )
aMatch := { 0, nOptional, sAnchor, cType, NIL }
/* nOptional would be minused, but will not be used anymore! */
IF sAnchor != NIL
aMatch := { 0, 0, sAnchor, NIL, NIL }
//? aMatch[1], aMatch[2], aMatch[3], aMatch[4], aMatch[5]
aAdd( aRule[2], aMatch )
// No need to negate nOptional, because last token, and nOptional must equal 0 here!
ENDIF
IF nOptional <> 0
TraceLog( aMatch[1], aMatch[2], aMatch[3], aMatch[4], aMatch[5] )
Alert( "ERROR! Internal logic failure, nOptional = " + Str( nOptional, 3 ) + " [" + Str( ProcLine(0), 4 ) + "]" )
Alert( "ERROR! Unclosed Optional group, nOptional = " + Str( nOptional, 3 ) + " [" + Str( ProcLine(0), 4 ) + "]" )
BREAK
ENDIF
@@ -7114,8 +6912,8 @@ FUNCTION InitClsResults()
aAdd( aTransResults, { { { 0, ':Super' } }, { -1} , { } } )
/* Commands Results*/
aAdd( aCommResults, { { { 0, '_HB_CLASS ' }, { 0, 1 }, { 0, ' ; ' }, { 0, 6 }, { 0, ' function ' }, { 0, 1 }, { 0, '() ; static s_oClass ; local MetaClass,nScope := HB_OO_CLSTP_EXPORTED ; if s_oClass == NIL ; s_oClass := IIF(' }, { 0, 2 }, { 0, ', ' }, { 0, 2 }, { 0, ' ,TClass():new( ' }, { 0, 1 }, { 0, ' , __HB_CLS_PAR ( ' }, { 4, 4 }, { 5, ' ,' }, { 5, 5 }, { 0, ' ) ) ) ; #undef _CLASS_NAME_ ; #define _CLASS_NAME_ ' }, { 0, 1 }, { 0, ' ; #undef _CLASS_MODE_ ; #define _CLASS_MODE_ _CLASS_DECLARATION_ ; #xtranslate CLSMETH ' }, { 0, 1 }, { 0, ' <MethodName> => @' }, { 0, 1 }, { 0, '_<MethodName> ; #xtranslate DECLCLASS ' }, { 0, 1 }, { 0, ' => ; ' }, ;
{ 5, ' ; #translate Super( ' }, { 5, 5 }, { 5, ' ) : => ::' }, { 5, 5 }, { 5, ': ' }, { 4, ' ; #translate Super( ' }, { 4, 4 }, { 4, ' ) : => ::' }, { 4, 4 }, { 4, ': ' }, { 4, ' ; #translate Super() : => ::' }, { 4, 4 }, { 4, ': ' }, { 4, ' ; #translate Super : => ::' }, { 4, 4 }, { 4, ': ' }, { 4, ' ; REQUEST ' }, { 4, 4 }, { 5, ' ,' }, { 5, 5 } }, { -1, 1, -1, 1, -1, 1, -1, 6, -1, 4, -1, 4, -1, 4, -1, 4, -1, 1, -1, 1, -1, 1, -1, 1, -1, -1, 1, -1, 1, -1, -1, 1, -1, 1, -1, -1, 1, -1, -1, 1, -1, -1, 1, -1, 1} , { NIL, NIL, NIL, NIL, NIL, NIL} } )
aAdd( aCommResults, { { { 0, '_HB_CLASS ' }, { 0, 1 }, { 0, ' ; ' }, { 0, 6 }, { 0, ' function ' }, { 0, 1 }, { 0, '() ; static s_oClass ; local MetaClass,nScope := HB_OO_CLSTP_EXPORTED ; if s_oClass == NIL ; s_oClass := IIF(' }, { 0, 2 }, { 0, ', ' }, { 0, 2 }, { 0, ' ,TClass():new( ' }, { 0, 1 }, { 0, ' , __HB_CLS_PAR ( ' }, { 4, 4 }, { 5, ' ,' }, { 5, 5 }, { 0, ' ) ) ) ; #undef _CLASS_NAME_ ; #define _CLASS_NAME_ ' }, { 0, 1 }, { 0, ' ; #undef _CLASS_MODE_ ; #define _CLASS_MODE_ _CLASS_DECLARATION_ ; #xtranslate CLSMETH ' }, { 0, 1 }, { 0, ' <MethodName> => @' }, { 0, 1 }, { 0, '_<MethodName> ; #xtranslate DECLCLASS ' }, { 0, 1 }, { 0, ' => ; ' }, { 5, ' ; #translate Super( ' }, { 5, 5 }, { 5, ' ) : => ::' }, { 5, 5 }, { 5, ': ' }, { 4, ' ; #translate Super( ' }, { 4, 4 }, { 4, ' ) : => ::' }, { 4, 4 }, { 4, ': ' }, { 4, ' ; #translate Super() : => ::' }, { 4, 4 }, { 4, ': ' }, ;
{ 4, ' ; #translate Super : => ::' }, { 4, 4 }, { 4, ': ' }, { 4, ' ; REQUEST ' }, { 4, 4 }, { 5, ' ,' }, { 5, 5 } }, { -1, 1, -1, 1, -1, 1, -1, 6, -1, 4, -1, 4, -1, 4, -1, 4, -1, 1, -1, 1, -1, 1, -1, 1, -1, -1, 1, -1, 1, -1, -1, 1, -1, 1, -1, -1, 1, -1, -1, 1, -1, -1, 1, -1, 1} , { NIL, NIL, NIL, NIL, NIL, NIL} } )
aAdd( aCommResults, { { { 0, '_HB_MEMBER {' }, { 2, 'AS ' }, { 2, 2 }, { 0, ' ' }, { 0, 1 }, { 0, '} ; s_oClass:AddMultiData( ' }, { 0, 2 }, { 0, ', ' }, { 0, 3 }, { 0, ', HBCLSCHOICE( ' }, { 0, 4 }, { 0, ', ' }, { 0, 5 }, { 0, ', ' }, { 0, 6 }, { 0, ' ) + iif( ' }, { 0, 7 }, { 0, ', HB_OO_CLSTP_READONLY, 0 ), {' }, { 0, 1 }, { 0, '}, __HB_CLS_NOINI )' } }, { -1, -1, 1, -1, 1, -1, 4, -1, 1, -1, 6, -1, 6, -1, 6, -1, 6, -1, 4, -1} , { NIL, NIL, NIL, NIL, NIL, NIL, NIL} } )
aAdd( aCommResults, { { { 0, '_HB_MEMBER {' }, { 2, 'AS ' }, { 2, 2 }, { 0, ' ' }, { 0, 1 }, { 0, '} ; s_oClass:AddMultiData( ' }, { 0, 2 }, { 0, ', ' }, { 0, 3 }, { 0, ', HBCLSCHOICE( ' }, { 0, 4 }, { 0, ', ' }, { 0, 5 }, { 0, ', ' }, { 0, 6 }, { 0, ' ) + iif( ' }, { 0, 7 }, { 0, ', HB_OO_CLSTP_READONLY, 0 ), {' }, { 0, 1 }, { 0, '}, __HB_CLS_NOINI )' } }, { -1, -1, 1, -1, 1, -1, 4, -1, 1, -1, 6, -1, 6, -1, 6, -1, 6, -1, 4, -1} , { NIL, NIL, NIL, NIL, NIL, NIL, NIL} } )
aAdd( aCommResults, { { { 0, '_HB_MEMBER {' }, { 2, 'AS ' }, { 2, 2 }, { 0, ' ' }, { 0, 1 }, { 0, '} ; s_oClass:AddInline( ' }, { 0, 1 }, { 0, ', {|Self| Self:' }, { 0, 3 }, { 0, ':' }, { 0, 1 }, { 0, ' }, HB_OO_CLSTP_EXPORTED + HB_OO_CLSTP_READONLY ) ; s_oClass:AddInline( "_" + ' }, { 0, 1 }, { 0, ', {|Self, param| Self:' }, { 0, 3 }, { 0, ':' }, { 0, 1 }, { 0, ' := param }, HB_OO_CLSTP_EXPORTED )' } }, { -1, -1, 1, -1, 1, -1, 4, -1, 1, -1, 1, -1, 4, -1, 1, -1, 1, -1} , { NIL, NIL, NIL} } )