PluggableProgramNodeEnumerator.st
author Claus Gittinger <cg@exept.de>
Sun, 17 Jun 2018 08:31:51 +0200
changeset 4278 d756ed6a7120
parent 2216 2298fbeddb0e
permissions -rw-r--r--
#FEATURE by cg class: ConstantNode added: #isConstantNumber
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2216
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     1
"{ Package: 'stx:libcomp' }"
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     2
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     3
ProgramNodeEnumerator subclass:#PluggableProgramNodeEnumerator
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     4
	instanceVariableNames:'plugs'
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     5
	classVariableNames:''
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     6
	poolDictionaries:''
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     7
	category:'System-Compiler'
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     8
!
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     9
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    10
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    11
!PluggableProgramNodeEnumerator methodsFor:'configuration'!
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
nodesForWhich:aCheckBlock do:actionBlock
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
    plugs isNil ifTrue:[
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    15
        plugs := OrderedCollection new.
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    16
    ].
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    17
    plugs add:{ aCheckBlock. actionBlock. }.
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
! !
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
!PluggableProgramNodeEnumerator methodsFor:'enumeration callbacks'!
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
doAssignment:aNode variable:var value:val
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    23
    self evaluatePlugsFor:aNode.
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
    self doNode:val.
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
!
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    27
doBlock:aNode arguments:args body:seq
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    28
    self evaluatePlugsFor:aNode.
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    29
    seq notNil ifTrue:[
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    30
        self doNode:seq.
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    31
    ]
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    32
!
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    33
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    34
doCascade:aNode receiver:rcvr messages:msgs
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    35
    self evaluatePlugsFor:aNode.
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    36
    msgs do:[:eachMessage | 
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    37
        self doNode:eachMessage
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    38
    ].
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
!
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    40
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    41
doLiteral:aNode value:lit
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    42
    self evaluatePlugsFor:aNode.
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
!
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    44
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
doMessage:aNode receiver:rcvr selector:sel arguments:args
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
    self evaluatePlugsFor:aNode.
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
    self doNode:rcvr.
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    48
    args do:[:eachArg |
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
        self doNode:eachArg
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    50
    ].
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    51
!
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    52
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    53
doMethod:aNode selector:sel primitive:prim block:block
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
    self evaluatePlugsFor:aNode.
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    55
!
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    56
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    57
doPrimitive:aNode code:code primitiveIndex:primNumber
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    58
    self evaluatePlugsFor:aNode.
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    59
!
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
doReturn:aNode value:value
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    62
    self evaluatePlugsFor:aNode.
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
    self doNode:value
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
!
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    66
doVariable:aNode name:nameString
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    67
    self evaluatePlugsFor:aNode.
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    68
! !
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    69
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    70
!PluggableProgramNodeEnumerator methodsFor:'private'!
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    71
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    72
evaluatePlugsFor:aNode
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    73
    plugs do:[:eachPair |
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    74
        |check action|
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
        
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
        check := eachPair first.
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77
        action := eachPair second.
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    78
        (check value:aNode) ifTrue:[
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    79
            action value:aNode.
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    80
        ].
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    81
    ].
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    82
! !
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    83
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    84
!PluggableProgramNodeEnumerator class methodsFor:'documentation'!
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    85
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    86
version_CVS
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    87
    ^ '$Header: /cvs/stx/stx/libcomp/PluggableProgramNodeEnumerator.st,v 1.1 2009-10-09 13:10:15 cg Exp $'
2298fbeddb0e initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    88
! !