author | Claus Gittinger <cg@exept.de> |
Thu, 16 Mar 2017 18:54:52 +0100 | |
changeset 4139 | 1eaaab745ca8 |
parent 3151 | 4053541783fd |
child 3841 | a22f33410bdf |
child 4361 | 43489231454d |
permissions | -rw-r--r-- |
3116 | 1 |
"{ Package: 'stx:libcomp' }" |
2 |
||
3 |
Parser variableSubclass:#BreakpointAnalyzer |
|
4 |
instanceVariableNames:'messageSendMap' |
|
5 |
classVariableNames:'' |
|
6 |
poolDictionaries:'' |
|
7 |
category:'System-Compiler-Debugging' |
|
8 |
! |
|
9 |
||
10 |
||
11 |
!BreakpointAnalyzer methodsFor:'accessing'! |
|
12 |
||
13 |
messageSendMap |
|
14 |
^ messageSendMap |
|
15 |
! ! |
|
16 |
||
17 |
!BreakpointAnalyzer methodsFor:'code generation hooks'! |
|
18 |
||
19 |
messageNodeRewriteHookFor:aMessageNode |
|
20 |
"invoked whenever a message send node has been generated; |
|
21 |
gives subclasses a chance to rewrite (instrument) it" |
|
22 |
||
23 |
(messageSendMap at: aMessageNode line ifAbsentPut:[Bag new]) |
|
24 |
add: aMessageNode selector. |
|
25 |
||
26 |
^ aMessageNode |
|
27 |
||
28 |
"Created: / 15-04-2013 / 15:32:11 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
|
3130
bde0df5a7c1d
defined source container
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3116
diff
changeset
|
29 |
"Modified: / 16-04-2013 / 23:07:13 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
3116 | 30 |
! ! |
31 |
||
32 |
!BreakpointAnalyzer methodsFor:'initialization'! |
|
33 |
||
34 |
initialize |
|
35 |
super initialize. |
|
36 |
messageSendMap := Dictionary new. |
|
37 |
||
38 |
"Created: / 15-04-2013 / 15:29:14 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
|
39 |
! ! |
|
40 |
||
3151
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
41 |
!BreakpointAnalyzer methodsFor:'private'! |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
42 |
|
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
43 |
genMakeArrayWith:elementExpressions |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
44 |
"return a node to generate an array at runtime. |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
45 |
Will generate: |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
46 |
Array with:el1 ... with:elN (if N <= 5) |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
47 |
or: |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
48 |
(Array new at:1 put:el1; ... at:N put:elN; yourself) (otherwise) |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
49 |
" |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
50 |
|
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
51 |
|numEl arrRec sel expr| |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
52 |
|
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
53 |
arrRec := VariableNode globalNamed:#Array. |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
54 |
arrRec startPosition: -1 endPosition: -1. "/ -1 means artifitial node |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
55 |
|
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
56 |
numEl := elementExpressions size. |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
57 |
|
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
58 |
(numEl between:1 and:8) ifTrue:[ |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
59 |
sel := #( |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
60 |
#'with:' |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
61 |
#'with:with:' |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
62 |
#'with:with:with:' |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
63 |
#'with:with:with:with:' |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
64 |
#'with:with:with:with:with:' |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
65 |
#'with:with:with:with:with:with:' |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
66 |
#'with:with:with:with:with:with:with:' |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
67 |
#'with:with:with:with:with:with:with:with:' |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
68 |
) at:numEl. |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
69 |
|
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
70 |
^ self messageNodeRewriteHookFor:(MessageNode |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
71 |
receiver:arrRec |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
72 |
selector:sel |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
73 |
args:elementExpressions). |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
74 |
]. |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
75 |
|
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
76 |
"/ array creation expression ... |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
77 |
expr := MessageNode |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
78 |
receiver:arrRec |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
79 |
selector:#new: |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
80 |
arg:(ConstantNode type:#Integer value:numEl from: -1 to: -1). "/ -1 means artifitial node |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
81 |
expr := self messageNodeRewriteHookFor:expr. |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
82 |
|
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
83 |
numEl == 0 ifTrue:[ |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
84 |
^ expr. |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
85 |
]. |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
86 |
"/ followed by a bunch of #at:put: messages... |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
87 |
elementExpressions keysAndValuesDo:[:idx :e | |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
88 |
expr := (idx == 1 ifTrue:[MessageNode] ifFalse:[CascadeNode]) |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
89 |
receiver:expr |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
90 |
selector:#at:put: |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
91 |
arg1:(ConstantNode type:#Integer value:idx from: -1 to:-1)"/ -1 means artifitial node |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
92 |
arg2:e |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
93 |
fold:false. |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
94 |
expr := self messageNodeRewriteHookFor:expr. |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
95 |
]. |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
96 |
"/ followed by a #yourself: message... |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
97 |
expr := CascadeNode |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
98 |
receiver:expr |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
99 |
selector:#yourself. |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
100 |
expr := self messageNodeRewriteHookFor:expr. |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
101 |
^ expr |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
102 |
|
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
103 |
"Modified: / 24-04-2013 / 21:09:27 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
104 |
! ! |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
105 |
|
3116 | 106 |
!BreakpointAnalyzer class methodsFor:'documentation'! |
107 |
||
108 |
version |
|
3151
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
109 |
^ '$Header: /cvs/stx/stx/libcomp/BreakpointAnalyzer.st,v 1.3 2013-04-24 20:26:44 vrany Exp $' |
3116 | 110 |
! |
111 |
||
112 |
version_CVS |
|
3151
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
113 |
^ '$Header: /cvs/stx/stx/libcomp/BreakpointAnalyzer.st,v 1.3 2013-04-24 20:26:44 vrany Exp $' |
3116 | 114 |
! ! |
115 |