Avoid using (obsolete) PPCMethod>>addVariable:, use allocateTemporaryVariableNamed: instead.
authorJan Vrany <jan.vrany@fit.cvut.cz>
Tue, 05 May 2015 15:07:19 +0200
changeset 449 c1b26806ee0b
parent 448 02db0b67ed3f
child 450 914c2567c987
Avoid using (obsolete) PPCMethod>>addVariable:, use allocateTemporaryVariableNamed: instead.
compiler/PPCCodeGenerator.st
--- a/compiler/PPCCodeGenerator.st	Sat May 02 07:03:07 2015 +0200
+++ b/compiler/PPCCodeGenerator.st	Tue May 05 15:07:19 2015 +0200
@@ -167,15 +167,16 @@
 !PPCCodeGenerator methodsFor:'visiting'!
 
 visitActionNode: node
-	compiler addConstant: node block as: (compiler idFor: node).
-        
-	compiler addVariable: 'element'.
-	compiler add: 'element := '.
-	compiler callOnLine: (self visit: node child).
-	compiler add: 'error ifFalse: [ ^ ',  (compiler idFor: node), ' value: element ].'.
-	compiler add: '^ failure'.
+    | elementVar |
 
-    "Modified: / 23-04-2015 / 15:59:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    compiler addConstant: node block as: (compiler idFor: node).
+    elementVar := compiler allocateTemporaryVariableNamed:'element'.
+    compiler add: elementVar,' := '.
+    compiler callOnLine: (self visit: node child).
+    compiler add: 'error ifFalse: [ ^ ',  (compiler idFor: node), ' value: ',elementVar,' ].'.
+    compiler add: '^ failure'.
+
+    "Modified: / 05-05-2015 / 14:39:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 visitAndNode: node
@@ -251,45 +252,45 @@
 !
 
 visitChoiceNode: node
-	| firsts guard whitespaceConsumed |
+        | firsts guard whitespaceConsumed elementVar |
 
 
-	whitespaceConsumed := false.
-	firsts := (node firstSetSuchThat: [ :e | (e isKindOf: PPCTrimmingTokenNode) or: [ e isTerminal ] ]).
+        whitespaceConsumed := false.
+        firsts := (node firstSetSuchThat: [ :e | (e isKindOf: PPCTrimmingTokenNode) or: [ e isTerminal ] ]).
         
 
-	compiler addVariable: 'element'.
-	"If we start with trimming token, we should invoke the whitespace parser"
-	(firsts allSatisfy: [ :e | e isKindOf: PPCTrimmingTokenNode ]) ifTrue: [  
-		self compileTokenWhitespace: firsts anyOne.
-		whitespaceConsumed := true.
-	].
+        elementVar := compiler allocateTemporaryVariableNamed: 'element'.
+        "If we start with trimming token, we should invoke the whitespace parser"
+        (firsts allSatisfy: [ :e | e isKindOf: PPCTrimmingTokenNode ]) ifTrue: [  
+                self compileTokenWhitespace: firsts anyOne.
+                whitespaceConsumed := true.
+        ].
         
-	1 to: node children size do: [ :idx  | |child allowGuard |
-		child := node children at: idx.
+        1 to: node children size do: [ :idx  | |child allowGuard |
+                child := node children at: idx.
 "               allowGuard := ((child isKindOf: PPCTrimmingTokenNode) and: [ whitespaceConsumed not ]) not.
 "       
-		allowGuard := whitespaceConsumed.
+                allowGuard := whitespaceConsumed.
                                 
-		(allowGuard and: [arguments guards and: [ (guard := PPCGuard on: child) makesSense ]]) ifTrue: [         
-			guard id: (compiler idFor: guard prefixed: #guard).
-			guard compileGuard: compiler.
-			compiler add: ' ifTrue: [ '.
-			compiler indent.
-				compiler add: 'self clearError.'.
-				compiler codeStoreValueOf:  [self visit: child] intoVariable: 'element'.
-				compiler add: 'error ifFalse: [ ^ element ].'.
-			compiler dedent.
-			compiler add: ' ].'.
-		] ifFalse: [
-			compiler add: 'self clearError.'.
-			compiler codeStoreValueOf:  [self visit: child] intoVariable: 'element'.
-			compiler add: 'error ifFalse: [ ^ element ].'.
-		]
-	].
-	compiler add: '^ self error: ''no choice suitable'''.
+                (allowGuard and: [arguments guards and: [ (guard := PPCGuard on: child) makesSense ]]) ifTrue: [         
+                        guard id: (compiler idFor: guard prefixed: #guard).
+                        guard compileGuard: compiler.
+                        compiler add: ' ifTrue: [ '.
+                        compiler indent.
+                                compiler add: 'self clearError.'.
+                                compiler codeStoreValueOf:  [self visit: child] intoVariable: elementVar.
+                                compiler add: 'error ifFalse: [ ^ ',elementVar,' ].'.
+                        compiler dedent.
+                        compiler add: ' ].'.
+                ] ifFalse: [
+                        compiler add: 'self clearError.'.
+                        compiler codeStoreValueOf:  [self visit: child] intoVariable: elementVar.
+                        compiler add: 'error ifFalse: [ ^ ',elementVar,' ].'.
+                ]
+        ].
+        compiler add: '^ self error: ''no choice suitable'''.
 
-    "Modified: / 23-04-2015 / 21:40:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 05-05-2015 / 14:10:01 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 visitEndOfFileNode: node
@@ -372,15 +373,17 @@
 !
 
 visitNotNode: node
-
+    | mementoVar |
 
-	compiler addVariable: 'memento'.
-	compiler add: (compiler smartRemember: node child).
-	
-	compiler call: (self visit: node child).
-	compiler add: (compiler smartRestore: node child).
+    mementoVar := compiler allocateTemporaryVariableNamed: 'memento'.
+    compiler add: (compiler smartRemember: node child to: mementoVar ).
+    
+    compiler call: (self visit: node child).
+    compiler add: (compiler smartRestore: node child from: mementoVar ).
 
-	compiler add: '^ error ifFalse: [ self error ] ifTrue: [ self clearError. nil ]'.
+    compiler add: '^ error ifFalse: [ self error ] ifTrue: [ self clearError. nil ]'.
+
+    "Modified: / 05-05-2015 / 14:29:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 visitOptionalNode: node
@@ -467,13 +470,16 @@
 !
 
 visitStarAnyNode: node
+    | retvalVar sizeVar |
 
-	compiler addVariable: 'retval size'.
-	compiler add: 'size := context size - context position.'.
-	compiler add: 'retval := Array new: size.'.
-	compiler add: '(1 to: size) do: [ :e | retval at: e put: context next ].'.
-	compiler add: '^ retval'.
-	
+    retvalVar := compiler allocateReturnVariable.
+    sizeVar := compiler allocateTemporaryVariableNamed: 'size'.  
+    compiler add: sizeVar , ' := context size - context position.'.
+    compiler add: retvalVar,' := Array new: ',sizeVar,'.'.
+    compiler add: '(1 to: ',sizeVar,') do: [ :e | ',retvalVar,' at: e put: context next ].'.
+    compiler codeReturn.
+
+    "Modified: / 05-05-2015 / 14:13:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 visitStarCharSetPredicateNode: node
@@ -564,21 +570,23 @@
 !
 
 visitTokenSequenceNode: node
-
-
-	compiler addVariable: 'memento'.			
-	compiler add: (compiler smartRemember: node).
-
-"	self addGuard: compiler."
+    | mementoVar |
 
-		compiler codeStoreValueOf: [ self visit: (node children at: 1) ] intoVariable: #whatever.
-	compiler add: 'error ifTrue: [ ^ failure ].'.
+    mementoVar := compiler allocateTemporaryVariableNamed: 'memento'.                        
+    compiler add: (compiler smartRemember: node to: mementoVar).
+    "
+    self addGuard: compiler.
+    "
+    compiler codeStoreValueOf: [ self visit: (node children at: 1) ] intoVariable: #whatever.
+    compiler add: 'error ifTrue: [ ^ failure ].'.
 
-	2 to: (node children size) do: [ :idx  | |child|
-		child := node children at: idx.
-		compiler codeStoreValueOf: [ self visit: child ] intoVariable: #whatever.
-		compiler add: 'error ifTrue: [ ', (compiler smartRestore: node) ,' ^ failure ].'.
-	].
+    2 to: (node children size) do: [ :idx  | |child|
+            child := node children at: idx.
+            compiler codeStoreValueOf: [ self visit: child ] intoVariable: #whatever.
+            compiler add: 'error ifTrue: [ ', (compiler smartRestore: node from: mementoVar) ,' ^ failure ].'.
+    ].
+
+    "Modified (comment): / 05-05-2015 / 14:31:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
 !
 
 visitTokenStarMessagePredicateNode: node