compiler/PPCCompilerTokenizingRememberStrategy.st
changeset 515 b5316ef15274
parent 464 f6d77fee9811
--- 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'!