# HG changeset patch # User Jan Vrany # Date 1428958844 -3600 # Node ID a7f5e6de19d2d6e516278834d08753fc4b791b1a # Parent 2a65c972b937e0a3e86da24e701456d654d3d965 Merged JK's version from Monticello Name: PetitParser-JanKurs.275 Author: JanKurs Time: 31-03-2015, 05:51:24.398 PM UUID: 9ab3be24-8393-4794-a7e6-e318f3195673 Name: PetitTests-JanKurs.73 Author: JanKurs Time: 21-02-2015, 01:10:13.115 PM UUID: de4f77e3-2d07-476b-855e-69f845edfc7c diff -r 2a65c972b937 -r a7f5e6de19d2 .hgignore --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/.hgignore Mon Apr 13 22:00:44 2015 +0100 @@ -0,0 +1,16 @@ + +syntax: glob +*Init.c +makefile +*.so +*.H +*.o +*.STH +*.sc +objbc +objvc +*.class +java/libs/*.jar +java/libs-src/*.jar +*-Test.xml +st.chg diff -r 2a65c972b937 -r a7f5e6de19d2 Make.proto --- a/Make.proto Mon Apr 13 14:19:55 2015 +0100 +++ b/Make.proto Mon Apr 13 22:00:44 2015 +0100 @@ -140,7 +140,7 @@ # build all packages containing referenced classes for this package -# they are nor needed to compile the package +# they are not needed to compile the package (but later, to load it) references: @@ -165,6 +165,7 @@ $(OUTDIR)PPToken.$(O) PPToken.$(H): PPToken.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR) $(OUTDIR)stx_goodies_petitparser.$(O) stx_goodies_petitparser.$(H): stx_goodies_petitparser.st $(INCLUDE_TOP)/stx/libbasic/LibraryDefinition.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/ProjectDefinition.$(H) $(STCHDR) $(OUTDIR)PPDelegateParser.$(O) PPDelegateParser.$(H): PPDelegateParser.st $(INCLUDE_TOP)/stx/goodies/petitparser/PPParser.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR) +$(OUTDIR)PPEndOfFileParser.$(O) PPEndOfFileParser.$(H): PPEndOfFileParser.st $(INCLUDE_TOP)/stx/goodies/petitparser/PPParser.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR) $(OUTDIR)PPEndOfLineParser.$(O) PPEndOfLineParser.$(H): PPEndOfLineParser.st $(INCLUDE_TOP)/stx/goodies/petitparser/PPParser.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR) $(OUTDIR)PPEpsilonParser.$(O) PPEpsilonParser.$(H): PPEpsilonParser.st $(INCLUDE_TOP)/stx/goodies/petitparser/PPParser.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR) $(OUTDIR)PPFailingParser.$(O) PPFailingParser.$(H): PPFailingParser.st $(INCLUDE_TOP)/stx/goodies/petitparser/PPParser.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR) @@ -174,11 +175,14 @@ $(OUTDIR)PPPredicateParser.$(O) PPPredicateParser.$(H): PPPredicateParser.st $(INCLUDE_TOP)/stx/goodies/petitparser/PPParser.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR) $(OUTDIR)PPStartOfLine.$(O) PPStartOfLine.$(H): PPStartOfLine.st $(INCLUDE_TOP)/stx/goodies/petitparser/PPParser.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR) $(OUTDIR)PPStartOfLineParser.$(O) PPStartOfLineParser.$(H): PPStartOfLineParser.st $(INCLUDE_TOP)/stx/goodies/petitparser/PPParser.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR) +$(OUTDIR)PPStartOfLogicalLineParser.$(O) PPStartOfLogicalLineParser.$(H): PPStartOfLogicalLineParser.st $(INCLUDE_TOP)/stx/goodies/petitparser/PPParser.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR) +$(OUTDIR)PPStartOfWordParser.$(O) PPStartOfWordParser.$(H): PPStartOfWordParser.st $(INCLUDE_TOP)/stx/goodies/petitparser/PPParser.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR) $(OUTDIR)PPUnresolvedParser.$(O) PPUnresolvedParser.$(H): PPUnresolvedParser.st $(INCLUDE_TOP)/stx/goodies/petitparser/PPParser.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR) $(OUTDIR)PPActionParser.$(O) PPActionParser.$(H): PPActionParser.st $(INCLUDE_TOP)/stx/goodies/petitparser/PPDelegateParser.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/PPParser.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR) $(OUTDIR)PPAndParser.$(O) PPAndParser.$(H): PPAndParser.st $(INCLUDE_TOP)/stx/goodies/petitparser/PPDelegateParser.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/PPParser.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR) $(OUTDIR)PPChoiceParser.$(O) PPChoiceParser.$(H): PPChoiceParser.st $(INCLUDE_TOP)/stx/goodies/petitparser/PPListParser.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/PPParser.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR) $(OUTDIR)PPCompositeParser.$(O) PPCompositeParser.$(H): PPCompositeParser.st $(INCLUDE_TOP)/stx/goodies/petitparser/PPDelegateParser.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/PPParser.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR) +$(OUTDIR)PPConditionalParser.$(O) PPConditionalParser.$(H): PPConditionalParser.st $(INCLUDE_TOP)/stx/goodies/petitparser/PPDelegateParser.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/PPParser.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR) $(OUTDIR)PPEndOfInputParser.$(O) PPEndOfInputParser.$(H): PPEndOfInputParser.st $(INCLUDE_TOP)/stx/goodies/petitparser/PPDelegateParser.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/PPParser.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR) $(OUTDIR)PPExpressionParser.$(O) PPExpressionParser.$(H): PPExpressionParser.st $(INCLUDE_TOP)/stx/goodies/petitparser/PPDelegateParser.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/PPParser.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR) $(OUTDIR)PPFlattenParser.$(O) PPFlattenParser.$(H): PPFlattenParser.st $(INCLUDE_TOP)/stx/goodies/petitparser/PPDelegateParser.$(H) $(INCLUDE_TOP)/stx/goodies/petitparser/PPParser.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR) diff -r 2a65c972b937 -r a7f5e6de19d2 Make.spec --- a/Make.spec Mon Apr 13 14:19:55 2015 +0100 +++ b/Make.spec Mon Apr 13 22:00:44 2015 +0100 @@ -61,6 +61,7 @@ PPToken \ stx_goodies_petitparser \ PPDelegateParser \ + PPEndOfFileParser \ PPEndOfLineParser \ PPEpsilonParser \ PPFailingParser \ @@ -70,11 +71,14 @@ PPPredicateParser \ PPStartOfLine \ PPStartOfLineParser \ + PPStartOfLogicalLineParser \ + PPStartOfWordParser \ PPUnresolvedParser \ PPActionParser \ PPAndParser \ PPChoiceParser \ PPCompositeParser \ + PPConditionalParser \ PPEndOfInputParser \ PPExpressionParser \ PPFlattenParser \ @@ -110,6 +114,7 @@ $(OUTDIR_SLASH)PPToken.$(O) \ $(OUTDIR_SLASH)stx_goodies_petitparser.$(O) \ $(OUTDIR_SLASH)PPDelegateParser.$(O) \ + $(OUTDIR_SLASH)PPEndOfFileParser.$(O) \ $(OUTDIR_SLASH)PPEndOfLineParser.$(O) \ $(OUTDIR_SLASH)PPEpsilonParser.$(O) \ $(OUTDIR_SLASH)PPFailingParser.$(O) \ @@ -119,11 +124,14 @@ $(OUTDIR_SLASH)PPPredicateParser.$(O) \ $(OUTDIR_SLASH)PPStartOfLine.$(O) \ $(OUTDIR_SLASH)PPStartOfLineParser.$(O) \ + $(OUTDIR_SLASH)PPStartOfLogicalLineParser.$(O) \ + $(OUTDIR_SLASH)PPStartOfWordParser.$(O) \ $(OUTDIR_SLASH)PPUnresolvedParser.$(O) \ $(OUTDIR_SLASH)PPActionParser.$(O) \ $(OUTDIR_SLASH)PPAndParser.$(O) \ $(OUTDIR_SLASH)PPChoiceParser.$(O) \ $(OUTDIR_SLASH)PPCompositeParser.$(O) \ + $(OUTDIR_SLASH)PPConditionalParser.$(O) \ $(OUTDIR_SLASH)PPEndOfInputParser.$(O) \ $(OUTDIR_SLASH)PPExpressionParser.$(O) \ $(OUTDIR_SLASH)PPFlattenParser.$(O) \ diff -r 2a65c972b937 -r a7f5e6de19d2 PPCharSetPredicate.st --- a/PPCharSetPredicate.st Mon Apr 13 14:19:55 2015 +0100 +++ b/PPCharSetPredicate.st Mon Apr 13 22:00:44 2015 +0100 @@ -1,5 +1,7 @@ "{ Package: 'stx:goodies/petitparser' }" +"{ NameSpace: Smalltalk }" + Object subclass:#PPCharSetPredicate instanceVariableNames:'block classification' classVariableNames:'' @@ -33,7 +35,7 @@ classification := Array new: 255. 1 to: classification size do: [ :index | classification at: index put: (block - value: (Character value: index)) ] + value: (Character codePoint: index)) ] ! ! !PPCharSetPredicate class methodsFor:'documentation'! @@ -49,3 +51,4 @@ version_SVN ^ '§Id: PPCharSetPredicate.st 4 2010-12-18 17:02:23Z kursjan §' ! ! + diff -r 2a65c972b937 -r a7f5e6de19d2 PPConditionalParser.st --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/PPConditionalParser.st Mon Apr 13 22:00:44 2015 +0100 @@ -0,0 +1,33 @@ +"{ Package: 'stx:goodies/petitparser' }" + +"{ NameSpace: Smalltalk }" + +PPDelegateParser subclass:#PPConditionalParser + instanceVariableNames:'block' + classVariableNames:'' + poolDictionaries:'' + category:'PetitParser-Parsers' +! + +!PPConditionalParser class methodsFor:'as yet unclassified'! + +on: aPPParser block: block + ^ (PPConditionalParser on: aPPParser) + block: block; + yourself +! ! + +!PPConditionalParser methodsFor:'accessing'! + +block: aBlock + block := aBlock +! ! + +!PPConditionalParser methodsFor:'parsing'! + +parseOn: aPPContext + ^ (block value: aPPContext) + ifTrue: [ parser parseOn: aPPContext ] + ifFalse: [ PPFailure message: block asString, ' was not evaluated to true.' context: aPPContext ] +! ! + diff -r 2a65c972b937 -r a7f5e6de19d2 PPContext.st --- a/PPContext.st Mon Apr 13 14:19:55 2015 +0100 +++ b/PPContext.st Mon Apr 13 22:00:44 2015 +0100 @@ -1,7 +1,9 @@ "{ Package: 'stx:goodies/petitparser' }" +"{ NameSpace: Smalltalk }" + Object subclass:#PPContext - instanceVariableNames:'stream root properties globals' + instanceVariableNames:'stream root properties globals furthestFailure' classVariableNames:'' poolDictionaries:'' category:'PetitParser-Core' @@ -17,8 +19,6 @@ yourself ! ! - - !PPContext methodsFor:'accessing-globals'! globalAt: aKey @@ -140,16 +140,16 @@ furthestFailure " the furthest failure encountered while parsing the input stream " - ^ self globalAt: #furthestFailure ifAbsent: [ nil ] + "^ self globalAt: #furthestFailure ifAbsent: [ nil ]" + "performance optimization:" + ^ furthestFailure ! noteFailure: aPPFailure "record the furthest failure encountered while parsing the input stream " - | furthestFailure | - furthestFailure := self furthestFailure. ( furthestFailure isNil or: [ aPPFailure position > furthestFailure position ]) - ifTrue: [ self globalAt: #furthestFailure put: aPPFailure ]. + ifTrue: [ furthestFailure := aPPFailure ]. ! ! !PPContext methodsFor:'initialization'! @@ -211,6 +211,15 @@ ] ! ! +!PPContext methodsFor:'printing'! + +printOn: aStream + super printOn: aStream. + aStream nextPut: $:. + aStream nextPut: $ . + stream printOn: aStream +! ! + !PPContext methodsFor:'stream mimicry'! atEnd diff -r 2a65c972b937 -r a7f5e6de19d2 PPEndOfFileParser.st --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/PPEndOfFileParser.st Mon Apr 13 22:00:44 2015 +0100 @@ -0,0 +1,38 @@ +"{ Package: 'stx:goodies/petitparser' }" + +"{ NameSpace: Smalltalk }" + +PPParser subclass:#PPEndOfFileParser + instanceVariableNames:'' + classVariableNames:'' + poolDictionaries:'' + category:'PetitParser-Parsers' +! + +!PPEndOfFileParser methodsFor:'as yet unclassified'! + +acceptsEpsilon + ^ true +! + +exampleOn: aStream + aStream nextPutAll: #'end-of-input' +! + +isNullable + ^ true +! + +nonEmpty + "I know I am empty, but it does not count in my case, I represent virtual non-existent character" + ^ self +! + +parseOn: aPPContext + (aPPContext atEnd) ifFalse: + [ + ^ PPFailure message: 'end of input expected' context: aPPContext. + ]. + ^ #'end-of-input' +! ! + diff -r 2a65c972b937 -r a7f5e6de19d2 PPExpressionParser.st --- a/PPExpressionParser.st Mon Apr 13 14:19:55 2015 +0100 +++ b/PPExpressionParser.st Mon Apr 13 22:00:44 2015 +0100 @@ -1,5 +1,7 @@ "{ Package: 'stx:goodies/petitparser' }" +"{ NameSpace: Smalltalk }" + PPDelegateParser subclass:#PPExpressionParser instanceVariableNames:'operators' classVariableNames:'' @@ -19,7 +21,7 @@ ! build: aParser prefix: aChoiceParser - ^ aChoiceParser star , aParser map: [ :ops :term | ops reversed inject: term into: [ :result :operator | operator first value: operator second value: result ] ] + ^ aChoiceParser star , aParser map: [ :ops :term | ops reverse inject: term into: [ :result :operator | operator first value: operator second value: result ] ] ! build: aParser right: aChoiceParser @@ -113,3 +115,4 @@ version_SVN ^ '§Id: PPExpressionParser.st 2 2010-12-17 18:44:23Z vranyj1 §' ! ! + diff -r 2a65c972b937 -r a7f5e6de19d2 PPParser.st --- a/PPParser.st Mon Apr 13 14:19:55 2015 +0100 +++ b/PPParser.st Mon Apr 13 22:00:44 2015 +0100 @@ -1,5 +1,7 @@ "{ Package: 'stx:goodies/petitparser' }" +"{ NameSpace: Smalltalk }" + Object subclass:#PPParser instanceVariableNames:'properties' classVariableNames:'' @@ -18,15 +20,6 @@ ^ self basicNew initialize ! ! - - - - - - - - - !PPParser methodsFor:'accessing'! children @@ -111,7 +104,8 @@ result := self parseOn: context. "Return the furthest failure, it gives better results than the last failure" - result isPetitFailure ifTrue: [ ^ context furthestFailure ]. + (result isPetitFailure and: [ context furthestFailure notNil]) + ifTrue: [ ^ context furthestFailure ]. ^ result ! @@ -312,6 +306,10 @@ " ^ PPLimitedChoiceParser with: self with: aParser +! + +if: aBlock + ^ PPConditionalParser on: self block: aBlock ! ! !PPParser methodsFor:'operators-convenience'! @@ -384,10 +382,34 @@ ^ self trim: #blank asParser ! +trimLeft + "Answer a new parser that consumes spaces before the receiving parser." + + ^ self trimSpacesLeft +! + +trimRight + "Answer a new parser that consumes spaces after the receiving parser." + + ^ self trimSpacesRight +! + trimSpaces "Answer a new parser that consumes spaces before and after the receiving parser." ^ self trim: #space asParser +! + +trimSpacesLeft + "Answer a new parser that consumes spaces before the receiving parser." + + ^ (#space asParser star, self) ==> #second +! + +trimSpacesRight + "Answer a new parser that consumes spaces after the receiving parser." + + ^ (self, #space asParser star) ==> #first ! ! !PPParser methodsFor:'operators-repeating'! diff -r 2a65c972b937 -r a7f5e6de19d2 PPPredicateObjectParser.st --- a/PPPredicateObjectParser.st Mon Apr 13 14:19:55 2015 +0100 +++ b/PPPredicateObjectParser.st Mon Apr 13 22:00:44 2015 +0100 @@ -1,5 +1,7 @@ "{ Package: 'stx:goodies/petitparser' }" +"{ NameSpace: Smalltalk }" + PPPredicateParser subclass:#PPPredicateObjectParser instanceVariableNames:'' classVariableNames:'' @@ -7,6 +9,13 @@ category:'PetitParser-Parsers' ! +PPPredicateObjectParser class instanceVariableNames:'cache' + +" + No other class instance variables are inherited by this class. +" +! + !PPPredicateObjectParser class methodsFor:'instance creation'! @@ -23,10 +32,33 @@ ^ PPStartOfLineParser new. ! ! +!PPPredicateObjectParser class methodsFor:'cache'! + +cacheAt: aSymbol ifAbsentPut: aBlock + + cache ifNil: [ ^aBlock value ]. + ^(cache + at: aSymbol + ifAbsentPut: aBlock) copy +! + +useCache: aBoolean +" + PPPredicateObjectParser useCache: true. + PPPredicateObjectParser useCache: false. +" + cache := aBoolean + ifTrue: [ Dictionary new ] + ifFalse: [ nil ] +! ! + !PPPredicateObjectParser class methodsFor:'factory-chars'! blank - ^ self chars: (String with: Character space with: Character tab) message: 'blank expected' + ^self + cacheAt: #'blank' + ifAbsentPut: [ self + chars: (String with: Character space with: Character tab) message: 'blank expected' ] ! char: aCharacter @@ -42,64 +74,90 @@ ! cr - ^ self char: (Character codePoint: 13) message: 'carriage return expected' + ^self + cacheAt: #'cr' + ifAbsentPut: [ self char: (Character codePoint: 13) message: 'carriage return expected' ] ! digit - ^ self on: (PPCharSetPredicate on: [ :char | char isDigit ]) message: 'digit expected' + ^self + cacheAt: #'digit' + ifAbsentPut: [ self on: (PPCharSetPredicate on: [ :char | char isDigit ]) message: 'digit expected' ] ! hex - ^ self + ^self + cacheAt: #'hex' + ifAbsentPut: [ self on: (PPCharSetPredicate on: [ :char | (char between: $0 and: $9) or: [ (char between: $a and: $f) or: [ (char between: $A and: $F) ] ] ]) - message: 'hex digit expected' + message: 'hex digit expected' ] ! letter - ^ self on: (PPCharSetPredicate on: [ :char | char isLetter ]) message: 'letter expected' + ^self + cacheAt: #'letter' + ifAbsentPut: [ self on: (PPCharSetPredicate on: [ :char | char isLetter ]) message: 'letter expected' ] ! lf - ^ self char: (Character codePoint: 10) + ^self + cacheAt: #'lf' + ifAbsentPut: [ self char: (Character codePoint: 10) ] ! lowercase - ^ self on: (PPCharSetPredicate on: [ :char | char isLowercase ]) message: 'lowercase letter expected' + ^self + cacheAt: #'lowercase' + ifAbsentPut: [ self on: (PPCharSetPredicate on: [ :char | char isLowercase ]) message: 'lowercase letter expected' ] ! newline - ^ self chars: (String with: (Character codePoint: 13) with: (Character codePoint: 10)) message: 'newline expected' + ^self + cacheAt: #'newline' + ifAbsentPut: [ self chars: (String with: (Character codePoint: 13) with: (Character codePoint: 10)) message: 'newline expected' ] ! punctuation - ^ self chars: '.,"''?!!;:#$%&()*+-/<>=@[]\^_{}|~' message: 'punctuation expected' + ^self + cacheAt: #'punctuation' + ifAbsentPut: [ self chars: '.,"''?!!;:#$%&()*+-/<>=@[]\^_{}|~' message: 'punctuation expected' ] ! space - ^ self on: (PPCharSetPredicate on: [ :char | char isSeparator ]) message: 'separator expected' + ^self + cacheAt: #'space' + ifAbsentPut: [ self on: (PPCharSetPredicate on: [ :char | char isSeparator ]) message: 'separator expected' ] ! tab - ^ self char: Character tab message: 'tab expected' + ^self + cacheAt: #'tab' + ifAbsentPut: [ self char: Character tab message: 'tab expected' ] ! uppercase - ^ self on: (PPCharSetPredicate on: [ :char | char isUppercase ]) message: 'uppercase letter expected' + ^self + cacheAt: #'uppercase' + ifAbsentPut: [ self on: (PPCharSetPredicate on: [ :char | char isUppercase ]) message: 'uppercase letter expected' ] ! word - ^ self on: (PPCharSetPredicate on: [ :char | char isAlphaNumeric ]) message: 'letter or digit expected' + ^self + cacheAt: #'word' + ifAbsentPut: [ self on: (PPCharSetPredicate on: [ :char | char isAlphaNumeric ]) message: 'letter or digit expected' ] ! ! !PPPredicateObjectParser class methodsFor:'factory-objects'! any - ^ self - on: [ :each | true ] message: 'input expected' - negated: [ :each | false ] message: 'no input expected' + ^self + cacheAt: #'any' + ifAbsentPut: [ self + on: [ :each | true ] message: 'input expected' + negated: [ :each | false ] message: 'no input expected' ] ! anyExceptAnyOf: aCollection @@ -125,6 +183,11 @@ ^ PPEndOfLineParser new. ! +eof + + ^ PPEndOfFileParser new +! + expect: anObject ^ self expect: anObject message: anObject printString , ' expected' ! @@ -133,9 +196,18 @@ ^ self on: [ :each | each = anObject ] message: aString negated: [ :each | each ~= anObject ] message: 'no ' , aString +! + +startOfLogicalLine + + ^ PPStartOfLogicalLineParser new. +! + +startOfWord + + ^ PPStartOfWordParser new. ! ! - !PPPredicateObjectParser methodsFor:'initialization'! initializeOn: aBlock message: aString negated: aNegatedBlock message: aNegatedString diff -r 2a65c972b937 -r a7f5e6de19d2 PPStartOfLineParser.st --- a/PPStartOfLineParser.st Mon Apr 13 14:19:55 2015 +0100 +++ b/PPStartOfLineParser.st Mon Apr 13 22:00:44 2015 +0100 @@ -1,5 +1,7 @@ "{ Package: 'stx:goodies/petitparser' }" +"{ NameSpace: Smalltalk }" + PPParser subclass:#PPStartOfLineParser instanceVariableNames:'' classVariableNames:'' @@ -7,6 +9,7 @@ category:'PetitParser-Parsers' ! + !PPStartOfLineParser methodsFor:'parsing'! parseOn: aPPContext @@ -16,3 +19,10 @@ ^ PPFailure message: 'Start of line expected' context: aPPContext at: aPPContext position ! ! +!PPStartOfLineParser class methodsFor:'documentation'! + +version_HG + + ^ '$Changeset: $' +! ! + diff -r 2a65c972b937 -r a7f5e6de19d2 PPStartOfLogicalLineParser.st --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/PPStartOfLogicalLineParser.st Mon Apr 13 22:00:44 2015 +0100 @@ -0,0 +1,34 @@ +"{ Package: 'stx:goodies/petitparser' }" + +"{ NameSpace: Smalltalk }" + +PPParser subclass:#PPStartOfLogicalLineParser + instanceVariableNames:'' + classVariableNames:'' + poolDictionaries:'' + category:'PetitParser-Parsers' +! + +!PPStartOfLogicalLineParser methodsFor:'as yet unclassified'! + +isBlank: character + ^ (character == Character space or: [character == Character tab]) +! + +parseOn: aPPContext + aPPContext peek isAlphaNumeric ifFalse: [ + ^ PPFailure message: 'Start of logical line expected' context: aPPContext + ]. + + aPPContext isStartOfLine ifTrue: [ ^ #startOfLogicalLine ]. + + + [ aPPContext position ~= 0 ] whileTrue: [ + aPPContext back. + (self isBlank: aPPContext peek) ifFalse: [ + ^ PPFailure message: 'Start of logical line expected' context: aPPContext + ]. + aPPContext isStartOfLine ifTrue: [ ^ #startOfLogicalLine ]. + ] +! ! + diff -r 2a65c972b937 -r a7f5e6de19d2 PPStartOfWordParser.st --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/PPStartOfWordParser.st Mon Apr 13 22:00:44 2015 +0100 @@ -0,0 +1,42 @@ +"{ Package: 'stx:goodies/petitparser' }" + +"{ NameSpace: Smalltalk }" + +PPParser subclass:#PPStartOfWordParser + instanceVariableNames:'' + classVariableNames:'' + poolDictionaries:'' + category:'PetitParser-Parsers' +! + +!PPStartOfWordParser methodsFor:'as yet unclassified'! + +acceptsEpsilon + ^ true +! + +parseOn: aPPContext + aPPContext atEnd ifTrue: [ + ^ PPFailure message: 'Start of word expected' context: aPPContext at: aPPContext position + ]. + + (aPPContext position == 0) ifTrue: [ + (aPPContext peek isAlphaNumeric) ifTrue: [ + ^ #startOfWord + ] ifFalse: [ + ^ PPFailure message: 'Start of word expected' context: aPPContext at: aPPContext position + ] + ]. + + aPPContext back. + aPPContext peek isAlphaNumeric ifTrue: [ + ^ PPFailure message: 'Start of word expected' context: aPPContext at: aPPContext position + ]. + aPPContext next. + + ^ aPPContext peek isAlphaNumeric ifTrue: [ #startOfWord ] ifFalse: [ + PPFailure message: 'Start of word expected' context: aPPContext at: aPPContext position + ] + +! ! + diff -r 2a65c972b937 -r a7f5e6de19d2 PPStream.st --- a/PPStream.st Mon Apr 13 14:19:55 2015 +0100 +++ b/PPStream.st Mon Apr 13 22:00:44 2015 +0100 @@ -1,14 +1,15 @@ "{ Package: 'stx:goodies/petitparser' }" +"{ NameSpace: Smalltalk }" + ReadStream subclass:#PPStream - instanceVariableNames:'' + instanceVariableNames:'newlines' classVariableNames:'' poolDictionaries:'' category:'PetitParser-Core' ! - !PPStream methodsFor:'accessing'! collection @@ -59,6 +60,56 @@ ^ self ! ! +!PPStream methodsFor:'positioning'! + +column: pos + | nl | + (pos = -1) ifTrue: [ ^ 0 ]. + (pos > readLimit) ifTrue: [ ^ self error: 'Out of limit' ]. + + nl := self newlines. + nl keysAndValuesDo: [ :index :value | + (value > pos) ifTrue: [ ^ pos - (nl at: (index - 1)) + 1] + ]. + + ^ pos - (nl at: (nl size )) + 1 +! + +fillNewlines + | tmp line | + newlines := OrderedCollection new. + + tmp := position. + line := 0. + + (0 to: readLimit) do: [:index | + position := index. + self isStartOfLine ifTrue: [ newlines add: position ] + ]. + position := tmp. + newlines := newlines asArray. + ^ newlines +! + +line: pos + | nl | + (pos = -1) ifTrue: [ ^ 0 ]. + (pos > readLimit) ifTrue: [ ^ self error: 'Out of limit' ]. + + nl := self newlines. + nl keysAndValuesDo: [ :index :value | + (value > pos) ifTrue: [ ^ (index - 1)] + ]. + + ^ nl size +! + +newlines + ^ newlines ifNil: [ + newlines := self fillNewlines. + ] +! ! + !PPStream methodsFor:'printing'! printOn: aStream @@ -76,28 +127,6 @@ ^ self column: position. ! -column: pos - | column clear tmp | - - pos > readLimit ifTrue: [ ^ Error signal: 'Oot of bounds' ]. - - tmp := position. - column := 0. - clear := true. - - (0 to: pos) do: - [:index | - position := index. - self isStartOfLine ifTrue: [ clear := true ]. - - clear ifTrue: [ column := 0. clear := false ]. - column := column + 1. - (position > readLimit) ifTrue: [ position := tmp. ^ column ]. - ]. - position := tmp. - ^ column -! - insideCRLF (position < 1) ifTrue: [ ^ false ]. @@ -120,23 +149,6 @@ line ^ self line: position -! - -line: pos - | tmp line | - (pos = -1) ifTrue: [ ^ 0 ]. - (pos > readLimit) ifTrue: [ ^ self error: 'Out of limit' ]. - - tmp := position. - line := 0. - - (0 to: pos) do: - [:index | - position := index. - self isStartOfLine ifTrue: [ line := line + 1 ] - ]. - position := tmp. - ^ line ! ! !PPStream class methodsFor:'documentation'! diff -r 2a65c972b937 -r a7f5e6de19d2 abbrev.stc --- a/abbrev.stc Mon Apr 13 14:19:55 2015 +0100 +++ b/abbrev.stc Mon Apr 13 22:00:44 2015 +0100 @@ -11,6 +11,7 @@ PPToken PPToken stx:goodies/petitparser 'PetitParser-Core' 0 stx_goodies_petitparser stx_goodies_petitparser stx:goodies/petitparser '* Projects & Packages *' 3 PPDelegateParser PPDelegateParser stx:goodies/petitparser 'PetitParser-Parsers' 0 +PPEndOfFileParser PPEndOfFileParser stx:goodies/petitparser 'PetitParser-Parsers' 0 PPEndOfLineParser PPEndOfLineParser stx:goodies/petitparser 'PetitParser-Parsers' 0 PPEpsilonParser PPEpsilonParser stx:goodies/petitparser 'PetitParser-Parsers' 0 PPFailingParser PPFailingParser stx:goodies/petitparser 'PetitParser-Parsers' 0 @@ -20,11 +21,14 @@ PPPredicateParser PPPredicateParser stx:goodies/petitparser 'PetitParser-Parsers' 0 PPStartOfLine PPStartOfLine stx:goodies/petitparser 'PetitParser-Parsers' 0 PPStartOfLineParser PPStartOfLineParser stx:goodies/petitparser 'PetitParser-Parsers' 0 +PPStartOfLogicalLineParser PPStartOfLogicalLineParser stx:goodies/petitparser 'PetitParser-Parsers' 0 +PPStartOfWordParser PPStartOfWordParser stx:goodies/petitparser 'PetitParser-Parsers' 0 PPUnresolvedParser PPUnresolvedParser stx:goodies/petitparser 'PetitParser-Tools' 0 PPActionParser PPActionParser stx:goodies/petitparser 'PetitParser-Parsers' 0 PPAndParser PPAndParser stx:goodies/petitparser 'PetitParser-Parsers' 0 PPChoiceParser PPChoiceParser stx:goodies/petitparser 'PetitParser-Parsers' 0 PPCompositeParser PPCompositeParser stx:goodies/petitparser 'PetitParser-Tools' 0 +PPConditionalParser PPConditionalParser stx:goodies/petitparser 'PetitParser-Parsers' 0 PPEndOfInputParser PPEndOfInputParser stx:goodies/petitparser 'PetitParser-Parsers' 0 PPExpressionParser PPExpressionParser stx:goodies/petitparser 'PetitParser-Tools' 0 PPFlattenParser PPFlattenParser stx:goodies/petitparser 'PetitParser-Parsers' 0 @@ -33,7 +37,7 @@ PPMemoizedParser PPMemoizedParser stx:goodies/petitparser 'PetitParser-Parsers' 0 PPNotParser PPNotParser stx:goodies/petitparser 'PetitParser-Parsers' 0 PPOptionalParser PPOptionalParser stx:goodies/petitparser 'PetitParser-Parsers' 0 -PPPredicateObjectParser PPPredicateObjectParser stx:goodies/petitparser 'PetitParser-Parsers' 0 +PPPredicateObjectParser PPPredicateObjectParser stx:goodies/petitparser 'PetitParser-Parsers' 1 PPPredicateSequenceParser PPPredicateSequenceParser stx:goodies/petitparser 'PetitParser-Parsers' 0 PPRepeatingParser PPRepeatingParser stx:goodies/petitparser 'PetitParser-Parsers' 0 PPSequenceParser PPSequenceParser stx:goodies/petitparser 'PetitParser-Parsers' 0 diff -r 2a65c972b937 -r a7f5e6de19d2 bc.mak --- a/bc.mak Mon Apr 13 14:19:55 2015 +0100 +++ b/bc.mak Mon Apr 13 22:00:44 2015 +0100 @@ -79,6 +79,7 @@ $(OUTDIR)PPToken.$(O) PPToken.$(H): PPToken.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR) $(OUTDIR)stx_goodies_petitparser.$(O) stx_goodies_petitparser.$(H): stx_goodies_petitparser.st $(INCLUDE_TOP)\stx\libbasic\LibraryDefinition.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\ProjectDefinition.$(H) $(STCHDR) $(OUTDIR)PPDelegateParser.$(O) PPDelegateParser.$(H): PPDelegateParser.st $(INCLUDE_TOP)\stx\goodies\petitparser\PPParser.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR) +$(OUTDIR)PPEndOfFileParser.$(O) PPEndOfFileParser.$(H): PPEndOfFileParser.st $(INCLUDE_TOP)\stx\goodies\petitparser\PPParser.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR) $(OUTDIR)PPEndOfLineParser.$(O) PPEndOfLineParser.$(H): PPEndOfLineParser.st $(INCLUDE_TOP)\stx\goodies\petitparser\PPParser.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR) $(OUTDIR)PPEpsilonParser.$(O) PPEpsilonParser.$(H): PPEpsilonParser.st $(INCLUDE_TOP)\stx\goodies\petitparser\PPParser.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR) $(OUTDIR)PPFailingParser.$(O) PPFailingParser.$(H): PPFailingParser.st $(INCLUDE_TOP)\stx\goodies\petitparser\PPParser.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR) @@ -88,11 +89,14 @@ $(OUTDIR)PPPredicateParser.$(O) PPPredicateParser.$(H): PPPredicateParser.st $(INCLUDE_TOP)\stx\goodies\petitparser\PPParser.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR) $(OUTDIR)PPStartOfLine.$(O) PPStartOfLine.$(H): PPStartOfLine.st $(INCLUDE_TOP)\stx\goodies\petitparser\PPParser.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR) $(OUTDIR)PPStartOfLineParser.$(O) PPStartOfLineParser.$(H): PPStartOfLineParser.st $(INCLUDE_TOP)\stx\goodies\petitparser\PPParser.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR) +$(OUTDIR)PPStartOfLogicalLineParser.$(O) PPStartOfLogicalLineParser.$(H): PPStartOfLogicalLineParser.st $(INCLUDE_TOP)\stx\goodies\petitparser\PPParser.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR) +$(OUTDIR)PPStartOfWordParser.$(O) PPStartOfWordParser.$(H): PPStartOfWordParser.st $(INCLUDE_TOP)\stx\goodies\petitparser\PPParser.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR) $(OUTDIR)PPUnresolvedParser.$(O) PPUnresolvedParser.$(H): PPUnresolvedParser.st $(INCLUDE_TOP)\stx\goodies\petitparser\PPParser.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR) $(OUTDIR)PPActionParser.$(O) PPActionParser.$(H): PPActionParser.st $(INCLUDE_TOP)\stx\goodies\petitparser\PPDelegateParser.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\PPParser.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR) $(OUTDIR)PPAndParser.$(O) PPAndParser.$(H): PPAndParser.st $(INCLUDE_TOP)\stx\goodies\petitparser\PPDelegateParser.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\PPParser.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR) $(OUTDIR)PPChoiceParser.$(O) PPChoiceParser.$(H): PPChoiceParser.st $(INCLUDE_TOP)\stx\goodies\petitparser\PPListParser.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\PPParser.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR) $(OUTDIR)PPCompositeParser.$(O) PPCompositeParser.$(H): PPCompositeParser.st $(INCLUDE_TOP)\stx\goodies\petitparser\PPDelegateParser.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\PPParser.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR) +$(OUTDIR)PPConditionalParser.$(O) PPConditionalParser.$(H): PPConditionalParser.st $(INCLUDE_TOP)\stx\goodies\petitparser\PPDelegateParser.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\PPParser.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR) $(OUTDIR)PPEndOfInputParser.$(O) PPEndOfInputParser.$(H): PPEndOfInputParser.st $(INCLUDE_TOP)\stx\goodies\petitparser\PPDelegateParser.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\PPParser.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR) $(OUTDIR)PPExpressionParser.$(O) PPExpressionParser.$(H): PPExpressionParser.st $(INCLUDE_TOP)\stx\goodies\petitparser\PPDelegateParser.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\PPParser.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR) $(OUTDIR)PPFlattenParser.$(O) PPFlattenParser.$(H): PPFlattenParser.st $(INCLUDE_TOP)\stx\goodies\petitparser\PPDelegateParser.$(H) $(INCLUDE_TOP)\stx\goodies\petitparser\PPParser.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR) diff -r 2a65c972b937 -r a7f5e6de19d2 bmake.bat --- a/bmake.bat Mon Apr 13 14:19:55 2015 +0100 +++ b/bmake.bat Mon Apr 13 22:00:44 2015 +0100 @@ -12,15 +12,15 @@ @echo "***********************************" @echo "Buildung stx/goodies/petitparser/analyzer @echo "***********************************" -@cd analyzer -@call bmake %1 %2 -@cd .. +@pushd analyzer +@call bmake %1 %2 || exit /b "%errorlevel%" +@popd @echo "***********************************" @echo "Buildung stx/goodies/petitparser/tests @echo "***********************************" -@cd tests -@call bmake %1 %2 -@cd .. +@pushd tests +@call bmake %1 %2 || exit /b "%errorlevel%" +@popd diff -r 2a65c972b937 -r a7f5e6de19d2 lccmake.bat --- a/lccmake.bat Mon Apr 13 14:19:55 2015 +0100 +++ b/lccmake.bat Mon Apr 13 22:00:44 2015 +0100 @@ -8,15 +8,15 @@ @echo "***********************************" @echo "Buildung stx/goodies/petitparser/analyzer @echo "***********************************" -@cd analyzer -@call lccmake %1 %2 -@cd .. +@pushd analyzer +@call lccmake %1 %2 || exit /b "%errorlevel%" +@popd @echo "***********************************" @echo "Buildung stx/goodies/petitparser/tests @echo "***********************************" -@cd tests -@call lccmake %1 %2 -@cd .. +@pushd tests +@call lccmake %1 %2 || exit /b "%errorlevel%" +@popd diff -r 2a65c972b937 -r a7f5e6de19d2 libInit.cc --- a/libInit.cc Mon Apr 13 14:19:55 2015 +0100 +++ b/libInit.cc Mon Apr 13 22:00:44 2015 +0100 @@ -37,6 +37,7 @@ _PPToken_Init(pass,__pRT__,snd); _stx_137goodies_137petitparser_Init(pass,__pRT__,snd); _PPDelegateParser_Init(pass,__pRT__,snd); +_PPEndOfFileParser_Init(pass,__pRT__,snd); _PPEndOfLineParser_Init(pass,__pRT__,snd); _PPEpsilonParser_Init(pass,__pRT__,snd); _PPFailingParser_Init(pass,__pRT__,snd); @@ -46,11 +47,14 @@ _PPPredicateParser_Init(pass,__pRT__,snd); _PPStartOfLine_Init(pass,__pRT__,snd); _PPStartOfLineParser_Init(pass,__pRT__,snd); +_PPStartOfLogicalLineParser_Init(pass,__pRT__,snd); +_PPStartOfWordParser_Init(pass,__pRT__,snd); _PPUnresolvedParser_Init(pass,__pRT__,snd); _PPActionParser_Init(pass,__pRT__,snd); _PPAndParser_Init(pass,__pRT__,snd); _PPChoiceParser_Init(pass,__pRT__,snd); _PPCompositeParser_Init(pass,__pRT__,snd); +_PPConditionalParser_Init(pass,__pRT__,snd); _PPEndOfInputParser_Init(pass,__pRT__,snd); _PPExpressionParser_Init(pass,__pRT__,snd); _PPFlattenParser_Init(pass,__pRT__,snd); diff -r 2a65c972b937 -r a7f5e6de19d2 mingwmake.bat --- a/mingwmake.bat Mon Apr 13 14:19:55 2015 +0100 +++ b/mingwmake.bat Mon Apr 13 22:00:44 2015 +0100 @@ -16,15 +16,15 @@ @echo "***********************************" @echo "Buildung stx/goodies/petitparser/analyzer @echo "***********************************" -@cd analyzer -@call mingwmake %1 %2 -@cd .. +@pushd analyzer +@call mingwmake %1 %2 || exit /b "%errorlevel%" +@popd @echo "***********************************" @echo "Buildung stx/goodies/petitparser/tests @echo "***********************************" -@cd tests -@call mingwmake %1 %2 -@cd .. +@pushd tests +@call mingwmake %1 %2 || exit /b "%errorlevel%" +@popd diff -r 2a65c972b937 -r a7f5e6de19d2 stx_goodies_petitparser.st --- a/stx_goodies_petitparser.st Mon Apr 13 14:19:55 2015 +0100 +++ b/stx_goodies_petitparser.st Mon Apr 13 22:00:44 2015 +0100 @@ -1,5 +1,7 @@ "{ Package: 'stx:goodies/petitparser' }" +"{ NameSpace: Smalltalk }" + LibraryDefinition subclass:#stx_goodies_petitparser instanceVariableNames:'' classVariableNames:'' @@ -7,12 +9,6 @@ category:'* Projects & Packages *' ! -!stx_goodies_petitparser class methodsFor:'documentation'! - -extensionsVersion_HG - - ^ '$Changeset: $' -! ! !stx_goodies_petitparser class methodsFor:'accessing'! @@ -86,7 +82,10 @@ referencedPreRequisites "list packages which are a prerequisite, because they contain classes which are referenced by my classes. - We do not need these packages as a prerequisite for loading or compiling. + We do not need these packages as a prerequisite for compiling or loading, + however, a class from it may be referenced during execution and having it + unloaded then may lead to a runtime doesNotUnderstand error, unless the caller + includes explicit checks for the package being present. This method is generated automatically, by searching all classes (and their packages) which are referenced by my classes." @@ -157,6 +156,7 @@ PPToken #'stx_goodies_petitparser' PPDelegateParser + PPEndOfFileParser PPEndOfLineParser PPEpsilonParser PPFailingParser @@ -166,11 +166,14 @@ PPPredicateParser PPStartOfLine PPStartOfLineParser + PPStartOfLogicalLineParser + PPStartOfWordParser PPUnresolvedParser PPActionParser PPAndParser PPChoiceParser PPCompositeParser + PPConditionalParser PPEndOfInputParser PPExpressionParser PPFlattenParser diff -r 2a65c972b937 -r a7f5e6de19d2 tests/Make.proto --- a/tests/Make.proto Mon Apr 13 14:19:55 2015 +0100 +++ b/tests/Make.proto Mon Apr 13 22:00:44 2015 +0100 @@ -136,6 +136,8 @@ $(OUTDIR)stx_goodies_petitparser_tests.$(O) stx_goodies_petitparser_tests.$(H): stx_goodies_petitparser_tests.st $(INCLUDE_TOP)/stx/libbasic/LibraryDefinition.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/ProjectDefinition.$(H) $(STCHDR) $(OUTDIR)PPComposedTest.$(O) PPComposedTest.$(H): PPComposedTest.st $(INCLUDE_TOP)/stx/goodies/petitparser/tests/PPAbstractParserTest.$(H) $(INCLUDE_TOP)/stx/goodies/sunit/TestAsserter.$(H) $(INCLUDE_TOP)/stx/goodies/sunit/TestCase.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR) $(OUTDIR)PPCompositeParserTest.$(O) PPCompositeParserTest.$(H): PPCompositeParserTest.st $(INCLUDE_TOP)/stx/goodies/petitparser/tests/PPAbstractParserTest.$(H) $(INCLUDE_TOP)/stx/goodies/sunit/TestAsserter.$(H) $(INCLUDE_TOP)/stx/goodies/sunit/TestCase.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR) +$(OUTDIR)PPConditionalParserTest.$(O) PPConditionalParserTest.$(H): PPConditionalParserTest.st $(INCLUDE_TOP)/stx/goodies/petitparser/tests/PPAbstractParserTest.$(H) $(INCLUDE_TOP)/stx/goodies/sunit/TestAsserter.$(H) $(INCLUDE_TOP)/stx/goodies/sunit/TestCase.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR) +$(OUTDIR)PPConditionalParserTests.$(O) PPConditionalParserTests.$(H): PPConditionalParserTests.st $(INCLUDE_TOP)/stx/goodies/petitparser/tests/PPAbstractParserTest.$(H) $(INCLUDE_TOP)/stx/goodies/sunit/TestAsserter.$(H) $(INCLUDE_TOP)/stx/goodies/sunit/TestCase.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR) $(OUTDIR)PPExtensionTest.$(O) PPExtensionTest.$(H): PPExtensionTest.st $(INCLUDE_TOP)/stx/goodies/petitparser/tests/PPAbstractParserTest.$(H) $(INCLUDE_TOP)/stx/goodies/sunit/TestAsserter.$(H) $(INCLUDE_TOP)/stx/goodies/sunit/TestCase.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR) $(OUTDIR)PPMappingTest.$(O) PPMappingTest.$(H): PPMappingTest.st $(INCLUDE_TOP)/stx/goodies/petitparser/tests/PPAbstractParserTest.$(H) $(INCLUDE_TOP)/stx/goodies/sunit/TestAsserter.$(H) $(INCLUDE_TOP)/stx/goodies/sunit/TestCase.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR) $(OUTDIR)PPObjectTest.$(O) PPObjectTest.$(H): PPObjectTest.st $(INCLUDE_TOP)/stx/goodies/petitparser/tests/PPAbstractParserTest.$(H) $(INCLUDE_TOP)/stx/goodies/sunit/TestAsserter.$(H) $(INCLUDE_TOP)/stx/goodies/sunit/TestCase.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR) diff -r 2a65c972b937 -r a7f5e6de19d2 tests/Make.spec --- a/tests/Make.spec Mon Apr 13 14:19:55 2015 +0100 +++ b/tests/Make.spec Mon Apr 13 22:00:44 2015 +0100 @@ -60,6 +60,8 @@ stx_goodies_petitparser_tests \ PPComposedTest \ PPCompositeParserTest \ + PPConditionalParserTest \ + PPConditionalParserTests \ PPExtensionTest \ PPMappingTest \ PPObjectTest \ @@ -84,6 +86,8 @@ $(OUTDIR_SLASH)stx_goodies_petitparser_tests.$(O) \ $(OUTDIR_SLASH)PPComposedTest.$(O) \ $(OUTDIR_SLASH)PPCompositeParserTest.$(O) \ + $(OUTDIR_SLASH)PPConditionalParserTest.$(O) \ + $(OUTDIR_SLASH)PPConditionalParserTests.$(O) \ $(OUTDIR_SLASH)PPExtensionTest.$(O) \ $(OUTDIR_SLASH)PPMappingTest.$(O) \ $(OUTDIR_SLASH)PPObjectTest.$(O) \ diff -r 2a65c972b937 -r a7f5e6de19d2 tests/PPAbstractParserTest.st --- a/tests/PPAbstractParserTest.st Mon Apr 13 14:19:55 2015 +0100 +++ b/tests/PPAbstractParserTest.st Mon Apr 13 22:00:44 2015 +0100 @@ -1,5 +1,7 @@ "{ Package: 'stx:goodies/petitparser/tests' }" +"{ NameSpace: Smalltalk }" + TestCase subclass:#PPAbstractParserTest instanceVariableNames:'' classVariableNames:'' @@ -51,6 +53,12 @@ ^ result ! +assert: string1 includesSubstring: string2 + "Support portability by using ANSI search method" + + self assert: (string1 notEmpty and: [string2 notEmpty and: [0 < (string1 indexOfSubCollection: string2 startingAt: 1)]]) +! + assert: aParser parse: aCollection ^ self assert: aParser parse: aCollection to: nil end: aCollection size ! diff -r 2a65c972b937 -r a7f5e6de19d2 tests/PPArithmeticParser.st --- a/tests/PPArithmeticParser.st Mon Apr 13 14:19:55 2015 +0100 +++ b/tests/PPArithmeticParser.st Mon Apr 13 22:00:44 2015 +0100 @@ -1,5 +1,7 @@ "{ Package: 'stx:goodies/petitparser/tests' }" +"{ NameSpace: Smalltalk }" + PPCompositeParser subclass:#PPArithmeticParser instanceVariableNames:'terms addition factors multiplication power primary parentheses number' @@ -38,7 +40,7 @@ parentheses ^ $( asParser trim , terms , $) asParser trim - ==> [ :nodes | nodes second ] + ==> [ :nodes | nodes at: 2 ] ! power diff -r 2a65c972b937 -r a7f5e6de19d2 tests/PPComposedTest.st --- a/tests/PPComposedTest.st Mon Apr 13 14:19:55 2015 +0100 +++ b/tests/PPComposedTest.st Mon Apr 13 22:00:44 2015 +0100 @@ -1,5 +1,7 @@ "{ Package: 'stx:goodies/petitparser/tests' }" +"{ NameSpace: Smalltalk }" + PPAbstractParserTest subclass:#PPComposedTest instanceVariableNames:'' classVariableNames:'' @@ -114,7 +116,7 @@ number := #digit asParser plus flatten trim ==> [ :node | node asInteger ]. list := (number separatedBy: $, asParser token trim) - ==> [ :node | node select: [ :each | each isInteger ] ]. + ==> [ :node | node select: [ :each | each isKindOf: Integer ] ]. parser := list end. self assert: parser parse: '1' to: (1 to: 1) asArray. diff -r 2a65c972b937 -r a7f5e6de19d2 tests/PPConditionalParserTest.st --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/PPConditionalParserTest.st Mon Apr 13 22:00:44 2015 +0100 @@ -0,0 +1,51 @@ +"{ Package: 'stx:goodies/petitparser/tests' }" + +"{ NameSpace: Smalltalk }" + +PPAbstractParserTest subclass:#PPConditionalParserTest + instanceVariableNames:'context' + classVariableNames:'' + poolDictionaries:'' + category:'PetitTests-Tests' +! + +!PPConditionalParserTest methodsFor:'as yet unclassified'! + +context + ^ context +! + +setUp + super setUp. + context := PPContext new +! + +testConditionCtxAccess + | parser | + + parser := ('a' asParser if: [ :ctx | (ctx propertyAt: #foo) = #bar ]). + + context propertyAt: #foo put: #bar. + self assert: parser parse: 'a' . + + + context propertyAt: #foo put: #zorg. + self assert: parser fail: 'a' . +! + +testConditionFalse + | parser | + parser := ('a' asParser if: [ :ctx | false ]). + + self assert: parser fail: 'a'. + self assert: parser fail: 'b'. +! + +testConditionTrue + | parser | + parser := ('a' asParser if: [ :ctx | true ]). + + self assert: parser parse: 'a'. + self assert: parser fail: 'b'. +! ! + diff -r 2a65c972b937 -r a7f5e6de19d2 tests/PPConditionalParserTests.st --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/PPConditionalParserTests.st Mon Apr 13 22:00:44 2015 +0100 @@ -0,0 +1,51 @@ +"{ Package: 'stx:goodies/petitparser/tests' }" + +"{ NameSpace: Smalltalk }" + +PPAbstractParserTest subclass:#PPConditionalParserTests + instanceVariableNames:'context' + classVariableNames:'' + poolDictionaries:'' + category:'PetitTests-Tests' +! + +!PPConditionalParserTests methodsFor:'as yet unclassified'! + +context + ^ context +! + +setUp + super setUp. + context := PPContext new +! + +testConditionCtxAccess + | parser | + + parser := ('a' asParser if: [ :ctx | (ctx propertyAt: #foo) = #bar ]). + + context propertyAt: #foo put: #bar. + self assert: parser parse: 'a' . + + + context propertyAt: #foo put: #zorg. + self assert: parser fail: 'a' . +! + +testConditionFalse + | parser | + parser := ('a' asParser if: [ :ctx | false ]). + + self assert: parser fail: 'a'. + self assert: parser fail: 'b'. +! + +testConditionTrue + | parser | + parser := ('a' asParser if: [ :ctx | true ]). + + self assert: parser parse: 'a'. + self assert: parser fail: 'b'. +! ! + diff -r 2a65c972b937 -r a7f5e6de19d2 tests/PPContextMementoTest.st --- a/tests/PPContextMementoTest.st Mon Apr 13 14:19:55 2015 +0100 +++ b/tests/PPContextMementoTest.st Mon Apr 13 22:00:44 2015 +0100 @@ -1,5 +1,7 @@ "{ Package: 'stx:goodies/petitparser/tests' }" +"{ NameSpace: Smalltalk }" + TestCase subclass:#PPContextMementoTest instanceVariableNames:'memento' classVariableNames:'' @@ -17,6 +19,7 @@ !PPContextMementoTest methodsFor:'running'! setUp + super setUp. memento := self memento. ! ! diff -r 2a65c972b937 -r a7f5e6de19d2 tests/PPContextTest.st --- a/tests/PPContextTest.st Mon Apr 13 14:19:55 2015 +0100 +++ b/tests/PPContextTest.st Mon Apr 13 22:00:44 2015 +0100 @@ -1,5 +1,7 @@ "{ Package: 'stx:goodies/petitparser/tests' }" +"{ NameSpace: Smalltalk }" + TestCase subclass:#PPContextTest instanceVariableNames:'context' classVariableNames:'' @@ -15,6 +17,7 @@ ! setUp + super setUp. context := self context. ! ! diff -r 2a65c972b937 -r a7f5e6de19d2 tests/PPExtensionTest.st --- a/tests/PPExtensionTest.st Mon Apr 13 14:19:55 2015 +0100 +++ b/tests/PPExtensionTest.st Mon Apr 13 22:00:44 2015 +0100 @@ -1,5 +1,7 @@ "{ Package: 'stx:goodies/petitparser/tests' }" +"{ NameSpace: Smalltalk }" + PPAbstractParserTest subclass:#PPExtensionTest instanceVariableNames:'' classVariableNames:'' @@ -110,14 +112,15 @@ !PPExtensionTest methodsFor:'testing-stream'! testStream - | stream | + | dot stream | + dot := (Character codePoint: 183) asString. stream := 'abc' readStream asPetitStream. self assert: stream class equals: PPStream. - self assert: stream printString equals: '·abc'. + self assert: stream printString equals: dot , 'abc'. self assert: stream peek equals: $a. self assert: stream uncheckedPeek equals: $a. self assert: stream next equals: $a. - self assert: stream printString equals: 'a·bc'. + self assert: stream printString equals: 'a' , dot , 'bc'. self assert: stream asPetitStream equals: stream ! diff -r 2a65c972b937 -r a7f5e6de19d2 tests/PPLambdaParser.st --- a/tests/PPLambdaParser.st Mon Apr 13 14:19:55 2015 +0100 +++ b/tests/PPLambdaParser.st Mon Apr 13 22:00:44 2015 +0100 @@ -1,5 +1,7 @@ "{ Package: 'stx:goodies/petitparser/tests' }" +"{ NameSpace: Smalltalk }" + PPCompositeParser subclass:#PPLambdaParser instanceVariableNames:'expression abstraction application variable' classVariableNames:'' @@ -43,11 +45,13 @@ !PPLambdaParser methodsFor:'productions'! abstraction - ^ $\ asParser trim , variable , $. asParser trim , expression ==> [ :node | Array with: node second with: node fourth ] + ^ $\ asParser trim , variable , $. asParser trim , expression + ==> [ :node | Array with: (node at: 2) with: (node at: 4) ] ! application - ^ $( asParser trim , expression , expression , $) asParser trim ==> [ :node | Array with: node second with: node third ] + ^ $( asParser trim , expression , expression , $) asParser trim + ==> [ :node | Array with: (node at: 2) with: (node at: 3) ] ! expression diff -r 2a65c972b937 -r a7f5e6de19d2 tests/PPObjectTest.st --- a/tests/PPObjectTest.st Mon Apr 13 14:19:55 2015 +0100 +++ b/tests/PPObjectTest.st Mon Apr 13 22:00:44 2015 +0100 @@ -1,5 +1,7 @@ "{ Package: 'stx:goodies/petitparser/tests' }" +"{ NameSpace: Smalltalk }" + PPAbstractParserTest subclass:#PPObjectTest instanceVariableNames:'' classVariableNames:'' @@ -12,13 +14,13 @@ integer ^ PPPredicateObjectParser - on: [ :each | each isInteger ] + on: [ :each | each isKindOf: Integer ] message: 'integer expected' ! string ^ PPPredicateObjectParser - on: [ :each | each isString ] + on: [ :each | each isKindOf: String ] message: 'string expected' ! ! @@ -88,6 +90,11 @@ ^ '$Header: /cvs/stx/stx/goodies/petitparser/PPObjectTest.st,v 1.4 2014-03-04 14:34:19 cg Exp $' ! +version_HG + + ^ '$Changeset: $' +! + version_SVN ^ '$Id: PPObjectTest.st,v 1.4 2014-03-04 14:34:19 cg Exp $' ! ! diff -r 2a65c972b937 -r a7f5e6de19d2 tests/PPParserTest.st --- a/tests/PPParserTest.st Mon Apr 13 14:19:55 2015 +0100 +++ b/tests/PPParserTest.st Mon Apr 13 22:00:44 2015 +0100 @@ -1,5 +1,7 @@ "{ Package: 'stx:goodies/petitparser/tests' }" +"{ NameSpace: Smalltalk }" + PPAbstractParserTest subclass:#PPParserTest instanceVariableNames:'' classVariableNames:'' @@ -178,7 +180,7 @@ ! testMax - | parser | + | parser printString suffix | parser := $a asParser max: 2. self assert: parser min equals: 0. self assert: parser max equals: 2. @@ -195,7 +197,9 @@ parse: 'aaaa' to: #($a $a) end: 2. - self assert: (parser printString endsWith: '[0, 2]') + printString := parser printString. + suffix := printString copyFrom: printString size - 5 to: printString size. + self assert: suffix = '[0, 2]' ! testMaxGreedy @@ -261,7 +265,7 @@ ! testMin - | parser | + | parser printString suffix | parser := $a asParser min: 2. self assert: parser min equals: 2. self assert: parser max > parser min. @@ -270,7 +274,9 @@ self assert: parser parse: 'aa' to: #($a $a). self assert: parser parse: 'aaa' to: #($a $a $a). self assert: parser parse: 'aaaa' to: #($a $a $a $a). - self assert: (parser printString endsWith: '[2, *]') + printString := parser printString. + suffix := printString copyFrom: printString size - 5 to: printString size. + self assert: suffix = '[2, *]' ! testMinGreedy @@ -346,7 +352,7 @@ ! testMinMax - | parser | + | parser printString suffix | parser := $a asParser min: 2 max: 4. self assert: parser min equals: 2. self assert: parser max equals: 4. @@ -365,7 +371,9 @@ parse: 'aaaaaa' to: #($a $a $a $a) end: 4. - self assert: (parser printString endsWith: '[2, 4]') + printString := parser printString. + suffix := printString copyFrom: printString size - 5 to: printString size. + self assert: suffix = '[2, 4]' ! testMinMaxGreedy diff -r 2a65c972b937 -r a7f5e6de19d2 tests/PPPredicateTest.st --- a/tests/PPPredicateTest.st Mon Apr 13 14:19:55 2015 +0100 +++ b/tests/PPPredicateTest.st Mon Apr 13 22:00:44 2015 +0100 @@ -1,5 +1,7 @@ "{ Package: 'stx:goodies/petitparser/tests' }" +"{ NameSpace: Smalltalk }" + PPAbstractParserTest subclass:#PPPredicateTest instanceVariableNames:'' classVariableNames:'' @@ -75,29 +77,46 @@ self assert: parser fail: 'a' ! -testEndOfLine +testEndOfFile | parser | - parser := (#letter asParser / #blank asParser) star, #endOfLine asParser. + parser := (#letter asParser / #blank asParser) star, #eof asParser. self assert: parser parse: 'lorem ipsum'. - parser := #any asParser, #endOfLine asParser, #any asParser star. - self assert: parser parse: 'a', String cr, 'b'. - self assert: parser fail: String crlf. - self assert: parser fail: 'lorem ipsum'. - - parser := #endOfLine asParser, #any asParser, #endOfLine asParser negate star, #endOfLine asParser. - self assert: parser parse: String cr, 'lorem ipsum'. - self assert: parser parse: String lf, 'lorem ipsum'. - self assert: parser parse: String crlf, 'lorem ipsum'. - - self assert: parser parse: String crlf. - self assert: parser parse: String cr. - self assert: parser parse: String lf. - - parser := #endOfLine asParser negate star, #endOfLine asParser, #any asParser star. - self assert: parser parse: String crlf, 'lorem ipsum'. - self assert: parser parse: String crlf. + parser := #any asParser, #eof asParser, #any asParser star. + self assert: parser fail: 'a', Character cr asString, 'b'. + self assert: parser fail: Character cr asString , Character lf asString. + self assert: parser parse: 'a'. +! + +testEndOfLine + | cr crlf lf parser | + cr := (Character codePoint: 13) asString. + crlf := (Character codePoint: 13) , Character lf asString. + lf := Character lf asString. + parser := (#letter asParser / #blank asParser) star, #endOfLine asParser. + + self assert: parser parse: 'lorem ipsum'. + + parser := #any asParser, #endOfLine asParser, #any asParser star. + self assert: parser parse: 'a', cr, 'b'. + self assert: parser fail: crlf. + self assert: parser fail: 'lorem ipsum'. + + parser := #endOfLine asParser, #any asParser, #endOfLine asParser negate star, #endOfLine asParser. + self assert: parser parse: cr, 'lorem ipsum'. + self assert: parser parse: lf, 'lorem ipsum'. + self assert: parser parse: crlf, 'lorem ipsum'. + + self assert: parser parse: crlf. + self assert: parser parse: cr. + self assert: parser parse: lf. + + parser := #endOfLine asParser negate star, #endOfLine asParser, #any asParser star. + self assert: parser parse: crlf, 'lorem ipsum'. + self assert: parser parse: crlf. + + "Modified: / 13-04-2015 / 21:55:06 / Jan Vrany " ! testHex @@ -176,26 +195,66 @@ ! testStartOfLine + | cr crlf lf parser | + cr := (Character codePoint: 13) asString. + crlf := (Character codePoint: 13) , Character lf asString. + lf := Character lf asString. + parser := #startOfLine asParser, #any asParser star. + + self assert: parser parse: 'lorem ipsum'. + + parser := #any asParser, #startOfLine asParser, #any asParser star. + self assert: parser fail: 'lorem ipsum'. + + parser := #startOfLine asParser, #any asParser, #startOfLine asParser, #any asParser star. + self assert: parser parse: cr, 'lorem ipsum'. + self assert: parser parse: lf, 'lorem ipsum'. + self assert: parser fail: crlf, 'lorem ipsum'. + + self assert: parser fail: crlf. + self assert: parser parse: cr. + self assert: parser parse: lf. + + parser := #startOfLine asParser, #any asParser, #any asParser, #startOfLine asParser, #any asParser star. + self assert: parser parse: crlf, 'lorem ipsum'. + self assert: parser parse: crlf. + + "Modified: / 13-04-2015 / 21:56:26 / Jan Vrany " +! + +testStartOfLogicalLine | parser | - parser := #startOfLine asParser, #any asParser star. - - self assert: parser parse: 'lorem ipsum'. - - parser := #any asParser, #startOfLine asParser, #any asParser star. - self assert: parser fail: 'lorem ipsum'. + parser := #startOfLogicalLine asParser, #any asParser star. - parser := #startOfLine asParser, #any asParser, #startOfLine asParser, #any asParser star. - self assert: parser parse: String cr, 'lorem ipsum'. - self assert: parser parse: String lf, 'lorem ipsum'. - self assert: parser fail: String crlf, 'lorem ipsum'. + self assert: parser parse: 'lorem'. + self assert: parser fail: ' lorem'. + + parser := #any asParser, #startOfLogicalLine asParser, #any asParser star. + self assert: parser fail: 'lorem'. + self assert: parser fail: ' lorem'. + self assert: parser parse: ' lorem'. + self assert: parser parse: ' lorem'. +! + +testStartOfWord + | parser | + parser := #startOfWord asParser, #word asParser plus. - self assert: parser fail: String crlf. - self assert: parser parse: String cr. - self assert: parser parse: String lf. + self assert: parser parse: 'lorem'. + + parser := #any asParser, #startOfWord asParser, #word asParser plus. + self assert: parser fail: 'lorem'. + self assert: parser fail: '1234'. - parser := #startOfLine asParser, #any asParser, #any asParser, #startOfLine asParser, #any asParser star. - self assert: parser parse: String crlf, 'lorem ipsum'. - self assert: parser parse: String crlf. + self assert: parser parse: ' lorem'. + self assert: parser parse: ' 123'. + self assert: parser parse: ')lorem'. + self assert: parser parse: ':lorem'. + + parser := #startOfWord asParser, #any asParser optional. + self assert: parser fail: ''. + self assert: parser parse: 'a'. + self assert: parser fail: '.'. ! testTab diff -r 2a65c972b937 -r a7f5e6de19d2 tests/PPTokenTest.st --- a/tests/PPTokenTest.st Mon Apr 13 14:19:55 2015 +0100 +++ b/tests/PPTokenTest.st Mon Apr 13 22:00:44 2015 +0100 @@ -1,5 +1,7 @@ "{ Package: 'stx:goodies/petitparser/tests' }" +"{ NameSpace: Smalltalk }" + PPAbstractParserTest subclass:#PPTokenTest instanceVariableNames:'' classVariableNames:'' @@ -36,7 +38,7 @@ testPrinting | result | result := PPToken on: 'var'. - self assert: (result printString includesSubstring: 'PPToken[1,3]') + self assert: result printString includesSubstring: 'PPToken[1,3]' ! testSize diff -r 2a65c972b937 -r a7f5e6de19d2 tests/abbrev.stc --- a/tests/abbrev.stc Mon Apr 13 14:19:55 2015 +0100 +++ b/tests/abbrev.stc Mon Apr 13 22:00:44 2015 +0100 @@ -10,6 +10,8 @@ stx_goodies_petitparser_tests stx_goodies_petitparser_tests stx:goodies/petitparser/tests '* Projects & Packages *' 3 PPComposedTest PPComposedTest stx:goodies/petitparser/tests 'PetitTests-Tests' 1 PPCompositeParserTest PPCompositeParserTest stx:goodies/petitparser/tests 'PetitTests-Core' 1 +PPConditionalParserTest PPConditionalParserTest stx:goodies/petitparser/tests 'PetitTests-Tests' 1 +PPConditionalParserTests PPConditionalParserTests stx:goodies/petitparser/tests 'PetitTests-Tests' 1 PPExtensionTest PPExtensionTest stx:goodies/petitparser/tests 'PetitTests-Tests' 1 PPMappingTest PPMappingTest stx:goodies/petitparser/tests 'PetitTests-Tests' 1 PPObjectTest PPObjectTest stx:goodies/petitparser/tests 'PetitTests-Tests' 1 diff -r 2a65c972b937 -r a7f5e6de19d2 tests/bc.mak --- a/tests/bc.mak Mon Apr 13 14:19:55 2015 +0100 +++ b/tests/bc.mak Mon Apr 13 22:00:44 2015 +0100 @@ -83,6 +83,8 @@ $(OUTDIR)stx_goodies_petitparser_tests.$(O) stx_goodies_petitparser_tests.$(H): stx_goodies_petitparser_tests.st $(INCLUDE_TOP)\stx\libbasic\LibraryDefinition.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\ProjectDefinition.$(H) $(STCHDR) $(OUTDIR)PPComposedTest.$(O) PPComposedTest.$(H): PPComposedTest.st $(INCLUDE_TOP)\stx\goodies\petitparser\tests\PPAbstractParserTest.$(H) $(INCLUDE_TOP)\stx\goodies\sunit\TestAsserter.$(H) $(INCLUDE_TOP)\stx\goodies\sunit\TestCase.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR) $(OUTDIR)PPCompositeParserTest.$(O) PPCompositeParserTest.$(H): PPCompositeParserTest.st $(INCLUDE_TOP)\stx\goodies\petitparser\tests\PPAbstractParserTest.$(H) $(INCLUDE_TOP)\stx\goodies\sunit\TestAsserter.$(H) $(INCLUDE_TOP)\stx\goodies\sunit\TestCase.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR) +$(OUTDIR)PPConditionalParserTest.$(O) PPConditionalParserTest.$(H): PPConditionalParserTest.st $(INCLUDE_TOP)\stx\goodies\petitparser\tests\PPAbstractParserTest.$(H) $(INCLUDE_TOP)\stx\goodies\sunit\TestAsserter.$(H) $(INCLUDE_TOP)\stx\goodies\sunit\TestCase.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR) +$(OUTDIR)PPConditionalParserTests.$(O) PPConditionalParserTests.$(H): PPConditionalParserTests.st $(INCLUDE_TOP)\stx\goodies\petitparser\tests\PPAbstractParserTest.$(H) $(INCLUDE_TOP)\stx\goodies\sunit\TestAsserter.$(H) $(INCLUDE_TOP)\stx\goodies\sunit\TestCase.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR) $(OUTDIR)PPExtensionTest.$(O) PPExtensionTest.$(H): PPExtensionTest.st $(INCLUDE_TOP)\stx\goodies\petitparser\tests\PPAbstractParserTest.$(H) $(INCLUDE_TOP)\stx\goodies\sunit\TestAsserter.$(H) $(INCLUDE_TOP)\stx\goodies\sunit\TestCase.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR) $(OUTDIR)PPMappingTest.$(O) PPMappingTest.$(H): PPMappingTest.st $(INCLUDE_TOP)\stx\goodies\petitparser\tests\PPAbstractParserTest.$(H) $(INCLUDE_TOP)\stx\goodies\sunit\TestAsserter.$(H) $(INCLUDE_TOP)\stx\goodies\sunit\TestCase.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR) $(OUTDIR)PPObjectTest.$(O) PPObjectTest.$(H): PPObjectTest.st $(INCLUDE_TOP)\stx\goodies\petitparser\tests\PPAbstractParserTest.$(H) $(INCLUDE_TOP)\stx\goodies\sunit\TestAsserter.$(H) $(INCLUDE_TOP)\stx\goodies\sunit\TestCase.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR) diff -r 2a65c972b937 -r a7f5e6de19d2 tests/libInit.cc --- a/tests/libInit.cc Mon Apr 13 14:19:55 2015 +0100 +++ b/tests/libInit.cc Mon Apr 13 22:00:44 2015 +0100 @@ -36,6 +36,8 @@ _stx_137goodies_137petitparser_137tests_Init(pass,__pRT__,snd); _PPComposedTest_Init(pass,__pRT__,snd); _PPCompositeParserTest_Init(pass,__pRT__,snd); +_PPConditionalParserTest_Init(pass,__pRT__,snd); +_PPConditionalParserTests_Init(pass,__pRT__,snd); _PPExtensionTest_Init(pass,__pRT__,snd); _PPMappingTest_Init(pass,__pRT__,snd); _PPObjectTest_Init(pass,__pRT__,snd); diff -r 2a65c972b937 -r a7f5e6de19d2 tests/stx_goodies_petitparser_tests.st --- a/tests/stx_goodies_petitparser_tests.st Mon Apr 13 14:19:55 2015 +0100 +++ b/tests/stx_goodies_petitparser_tests.st Mon Apr 13 22:00:44 2015 +0100 @@ -1,5 +1,3 @@ -"{ Encoding: utf8 }" - "{ Package: 'stx:goodies/petitparser/tests' }" "{ NameSpace: Smalltalk }" @@ -65,7 +63,10 @@ referencedPreRequisites "list packages which are a prerequisite, because they contain classes which are referenced by my classes. - We do not need these packages as a prerequisite for loading or compiling. + We do not need these packages as a prerequisite for compiling or loading, + however, a class from it may be referenced during execution and having it + unloaded then may lead to a runtime doesNotUnderstand error, unless the caller + includes explicit checks for the package being present. This method is generated automatically, by searching all classes (and their packages) which are referenced by my classes." @@ -110,6 +111,8 @@ #'stx_goodies_petitparser_tests' PPComposedTest PPCompositeParserTest + PPConditionalParserTest + PPConditionalParserTests PPExtensionTest PPMappingTest PPObjectTest diff -r 2a65c972b937 -r a7f5e6de19d2 vcmake.bat --- a/vcmake.bat Mon Apr 13 14:19:55 2015 +0100 +++ b/vcmake.bat Mon Apr 13 22:00:44 2015 +0100 @@ -20,15 +20,15 @@ @echo "***********************************" @echo "Buildung stx/goodies/petitparser/analyzer @echo "***********************************" -@cd analyzer -@call vcmake %1 %2 -@cd .. +@pushd analyzer +@call vcmake %1 %2 || exit /b "%errorlevel%" +@popd @echo "***********************************" @echo "Buildung stx/goodies/petitparser/tests @echo "***********************************" -@cd tests -@call vcmake %1 %2 -@cd .. +@pushd tests +@call vcmake %1 %2 || exit /b "%errorlevel%" +@popd