--- a/compiler/PPCTokenizingCodeGenerator.st Thu May 21 14:12:22 2015 +0100
+++ b/compiler/PPCTokenizingCodeGenerator.st Fri Jul 24 15:06:54 2015 +0100
@@ -17,11 +17,11 @@
!
tokenGenerator
- ^ tokenGenerator isNil
- ifTrue: [ tokenGenerator := (PPCTokenCodeGenerator on: compiler)
- arguments: arguments;
- yourself ]
- ifFalse: [ tokenGenerator ]
+ tokenGenerator isNil ifTrue: [
+ tokenGenerator := PPCTokenCodeGenerator on: compiler.
+ tokenGenerator arguments: arguments.
+ ].
+ ^ tokenGenerator
!
tokenGenerator: whatever
@@ -50,7 +50,7 @@
trueBlock value.
compiler dedent.
falseBlock isNil ifTrue: [ compiler addOnLine: '].' ]
- ifFalse: [ compiler add: ']'. ]
+ ifFalse: [ compiler add: ']'. ]
].
falseBlock isNil ifFalse: [
compiler addOnLine: ' ifFalse: ['.
@@ -73,7 +73,9 @@
compiler smartRemember: node child to: mementoVar.
compiler codeAssign: '{ currentTokenValue . currentTokenType }.' to: currentTokenVar.
- compiler codeStoreValueOf: [ self visit: node child ] intoVariable: self retvalVar.
+ compiler
+ codeAssignParsedValueOf:[ self visit:node child ]
+ to:self retvalVar.
compiler smartRestore: node child from: mementoVar.
compiler codeAssign: '(', currentTokenVar, ' at: 1).' to: 'currentTokenValue'.
@@ -92,7 +94,7 @@
child acceptsEpsilon ifTrue: [
possibleError := false.
- compiler codeStoreValueOf: [ self visit: child ] intoVariable: self retvalVar.
+ compiler codeAssignParsedValueOf:[ self visit:child ] to:self retvalVar.
compiler codeReturn
] ifFalse: [
child firstSetWithTokens do: [ :first |
@@ -102,7 +104,7 @@
compiler add: '(self ', tokenMethodName asString, ')'.
compiler addOnLine: ' ifTrue: ['.
compiler indent.
- compiler codeStoreValueOf: [ self visit: child ] intoVariable: self retvalVar.
+ compiler codeAssignParsedValueOf:[ self visit:child ] to:self retvalVar.
compiler add: 'error ifFalse: ['.
compiler indent.
compiler codeReturn: self retvalVar.
@@ -127,9 +129,11 @@
!
visitDeterministicChoiceNode: node
- | dictionary |
+ | dictionary isInlined |
dictionary := IdentityDictionary new.
+ isInlined := node isMarkedForInline.
+
node children do: [ :child |
| firstSet |
firstSet := child firstSetWithTokens.
@@ -145,13 +149,21 @@
compiler add: '(self ', tokenMethodName asString, ')'.
compiler addOnLine: ' ifTrue: ['.
compiler indent.
- compiler codeStoreValueOf: [ self visit: child ] intoVariable: self retvalVar.
- compiler codeReturn: self retvalVar.
+ compiler codeReturnParsedValueOf:[ self visit:child ].
compiler dedent.
- compiler add: '].'
+ isInlined ifTrue:[
+ compiler add: '] ifFalse: ['
+ ] ifFalse:[
+ compiler add: '].'.
+ ]
].
+ compiler codeError: 'no choice found'.
+ isInlined ifTrue:[
+ node children size timesRepeat: [ compiler addOnLine: ']' ].
+ compiler addOnLine: '.'.
+ ]
- compiler codeError: 'no choice found'.
+ "Modified: / 21-05-2015 / 15:31:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
visitTokenChoiceNode: node
@@ -198,7 +210,9 @@
self visit: node whitespace.
compiler codeHaltIfShiftPressed.
- compiler codeStoreValueOf: [ self visit: node parser ] intoVariable: self retvalVar.
+ compiler
+ codeAssignParsedValueOf:[ self visit:node parser ]
+ to:self retvalVar.
compiler codeReturn.
!