forked from pharo-spec/ScriptableDebugger
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathOCMethodNode.extension.st
More file actions
57 lines (45 loc) · 1.75 KB
/
OCMethodNode.extension.st
File metadata and controls
57 lines (45 loc) · 1.75 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
Extension { #name : 'OCMethodNode' }
{ #category : '*Sindarin' }
OCMethodNode >> executedNodesAfter: aNode [
"Gives all nodes that are executed after aNode. Assuming that aNode is a recursive child, then all nodes executed after it are all nodes after it in allChildrenPostOrder"
| nodesAfter indexOfNode |
nodesAfter := self allChildrenPostOrder.
indexOfNode := nodesAfter identityIndexOf: aNode.
nodesAfter := nodesAfter withIndexSelect: [ :value :index |
index > indexOfNode ].
^ nodesAfter
]
{ #category : '*Sindarin' }
OCMethodNode >> firstPCOfStatement: aStatementNode [
^ self bcToASTCache firstRecursiveBcOffsetForStatementNode: aStatementNode
]
{ #category : '*Sindarin' }
OCMethodNode >> nextExecutedNodeAfter: aNode [
"Find first node that is after aNode that has an associated pc in method node all children (post-order)"
| indexOfNextNode nodesAfter |
nodesAfter := self executedNodesAfter: aNode.
indexOfNextNode := nodesAfter findFirst: [ :each |
(self firstPcForNode: each) isNotNil ].
^ nodesAfter at: indexOfNextNode
]
{ #category : '*Sindarin' }
OCMethodNode >> parentOfIdenticalSubtree: subtree [
^ self allChildren reversed
detect: [ :e | e == subtree ]
ifFound: [ :e | e parent ]
ifNone: [ nil ]
]
{ #category : '*Sindarin' }
OCMethodNode >> statementNodeContaining: aNode [
| statementNode parentOfStatementNode |
statementNode := aNode.
parentOfStatementNode := self parentOfIdenticalSubtree:
statementNode.
parentOfStatementNode
ifNil: [ ^ NodeNotInASTError signal ]
ifNotNil: [
[ parentOfStatementNode isSequence ] whileFalse: [
statementNode := parentOfStatementNode.
parentOfStatementNode := parentOfStatementNode parent ] ].
^ statementNode
]