--- a/compiler/PPCCompilerTokenizingRememberStrategy.st Fri Jul 24 15:06:54 2015 +0100
+++ b/compiler/PPCCompilerTokenizingRememberStrategy.st Mon Aug 17 12:13:16 2015 +0100
@@ -6,7 +6,7 @@
instanceVariableNames:'compiler'
classVariableNames:''
poolDictionaries:''
- category:'PetitCompiler-Compiler'
+ category:'PetitCompiler-Compiler-Codegen-Straregies'
!
@@ -27,27 +27,50 @@
!PPCCompilerTokenizingRememberStrategy methodsFor:'as yet unclassified'!
smartRemember: parser to: variableName
+ compiler allocateTemporaryVariableNamed: '__position'.
+ compiler allocateTemporaryVariableNamed: '__tokenType'.
+ compiler allocateTemporaryVariableNamed: '__tokenValue'.
+
+ compiler codeAssign: 'context position.' to: '__position'.
+ compiler codeAssign: 'currentTokenType.' to: '__tokenType'.
+ compiler codeAssign: 'currentTokenValue.' to: '__tokenValue'.
+
+false ifFalse: [
parser isContextFree ifTrue: [
- compiler codeAssign: '{ context lwRemember. currentTokenType . currentTokenValue }.'
-" compiler codeAssign: 'context lwRemember.' "
+" compiler codeAssign: '{ context lwRemember. currentTokenType . currentTokenValue }.' "
+ compiler codeAssign: 'scanner position.'
to: variableName.
] ifFalse: [
compiler codeAssign: '{ context remember. currentTokenType . currentTokenValue }.'
to: variableName.
]
+]
!
smartRestore: parser from: mementoName
+ compiler add: 'context lwRestore: __position.'.
+ compiler codeAssign: '__tokenType.' to: 'currentTokenType'.
+ compiler codeAssign: '__tokenValue.' to: 'currentTokenValue'.
+
+
+false ifTrue: [
parser isContextFree ifTrue: [
- compiler add: 'context lwRestore: (', mementoName, ' at: 1).'.
-" compiler add: 'context lwRestore: ', mementoName, '.'."
+" compiler add: 'context lwRestore: (', mementoName, ' at: 1).'."
+ compiler add: 'context lwRestore: ', mementoName, '.'.
] ifFalse: [
compiler add: 'context restore: (', mementoName, ' at: 1).'.
].
+ compiler codeAssign: 'nil.' to: 'currentTokenType'.
+"
compiler codeAssign: '(', mementoName, ' at: 2).' to: 'currentTokenType'.
compiler codeAssign: '(', mementoName, ' at: 3).' to: 'currentTokenValue'.
+"
+"
+ compiler code: 'scanner backtrack.'.
+"
+]
! !
!PPCCompilerTokenizingRememberStrategy class methodsFor:'documentation'!