compiler/PPCRewritingVisitor.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Mon, 17 Aug 2015 23:11:56 +0100
changeset 518 a6d8b93441b0
parent 452 9f4558b3be66
child 532 132d7898a2a1
permissions -rw-r--r--
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 }"

PPCNodeVisitor subclass:#PPCRewritingVisitor
	instanceVariableNames:'change'
	classVariableNames:''
	poolDictionaries:''
	category:'PetitCompiler-Visitors'
!

!PPCRewritingVisitor methodsFor:'as yet unclassified'!

change
    self flag: 'JK: Do we need this?'.
    change := true.
!

visitChild: child of: node
    | newChild |

    (self isOpen: child) ifTrue: [ 
        "already processing..."
        ^ nil
    ].

    (self isCached: child) ifTrue: [ 
        "Use Cached Value"
        node replace: child with: (self cachedValue: child).
        ^ nil
    ]. 


    change := false.
    newChild := self visit: child.
    change ifTrue: [ 
        node replace: child with: newChild.
    ].
!

visitChildren: node
    node children do: [ :child | 
        self visitChild: child of: node
    ]
! !