Portability fixes
* do not use Object>>asString. Not all Smalltalks implement it.
* do not use Object>>name. Not all Smalltalks implement it.
* do not use Dictionary keysAndValuesRemove:. Not all Smalltalks implement it.
* do not use Class>>methods The semantics is different among Smalltalks.
Use `Class methodDictionary values` instead.
* do not modify dictionary in #at:ifAbsentPut: block!
"{ Package: 'stx:goodies/petitparser/compiler' }"
"{ NameSpace: Smalltalk }"
Object subclass:#PPCCompilerTokenRememberStrategy
instanceVariableNames:'compiler'
classVariableNames:''
poolDictionaries:''
category:'PetitCompiler-Compiler-Codegen-Straregies'
!
!PPCCompilerTokenRememberStrategy class methodsFor:'instance creation'!
on: aPPCCompiler
^ self new
compiler: aPPCCompiler;
yourself
! !
!PPCCompilerTokenRememberStrategy methodsFor:'accessing'!
compiler: aPPCCompiler
compiler := aPPCCompiler
! !
!PPCCompilerTokenRememberStrategy methodsFor:'as yet unclassified'!
smartRemember: parser to: variableName
self error: 'deprecated?'.
parser isContextFree ifTrue: [
compiler codeAssign: 'context lwRemember.'
to: variableName.
] ifFalse: [
compiler codeAssign: 'context remember.'
to: variableName.
]
!
smartRestore: parser from: mementoName
parser isContextFree ifTrue: [
compiler add: 'context lwRestore: ', mementoName, '.'.
] ifFalse: [
compiler add: 'context restore: ', mementoName, '.'.
].
! !