compiler/PPCRewritingVisitor.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Thu, 30 Jul 2015 08:37:37 +0100
changeset 510 869853decf31
parent 452 9f4558b3be66
child 532 132d7898a2a1
permissions -rw-r--r--
Tests refactoring - use generated test cases to make sure all posibilities are tested. Do not generate resource for all combinations, use PPCSetUpBeforeTearDownAfterResource instead that delegates parser compilation to the testcase itself (it calls it's #setUpBefore method).

"{ 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
    ]
! !