author | Claus Gittinger <cg@exept.de> |
Wed, 26 Jun 2019 20:02:58 +0200 | |
changeset 4451 | a6536ecebfb5 |
parent 4361 | 43489231454d |
child 4467 | 4698a67f4800 |
permissions | -rw-r--r-- |
4361 | 1 |
"{ Encoding: utf8 }" |
2 |
||
3116 | 3 |
"{ Package: 'stx:libcomp' }" |
4 |
||
4361 | 5 |
"{ NameSpace: Smalltalk }" |
6 |
||
3116 | 7 |
Parser variableSubclass:#BreakpointAnalyzer |
8 |
instanceVariableNames:'messageSendMap' |
|
9 |
classVariableNames:'' |
|
10 |
poolDictionaries:'' |
|
11 |
category:'System-Compiler-Debugging' |
|
12 |
! |
|
13 |
||
14 |
||
15 |
!BreakpointAnalyzer methodsFor:'accessing'! |
|
16 |
||
17 |
messageSendMap |
|
18 |
^ messageSendMap |
|
19 |
! ! |
|
20 |
||
21 |
!BreakpointAnalyzer methodsFor:'code generation hooks'! |
|
22 |
||
23 |
messageNodeRewriteHookFor:aMessageNode |
|
24 |
"invoked whenever a message send node has been generated; |
|
25 |
gives subclasses a chance to rewrite (instrument) it" |
|
26 |
||
4361 | 27 |
(messageSendMap at:(aMessageNode line) ifAbsentPut:[Bag new]) |
28 |
add:(aMessageNode selector). |
|
3116 | 29 |
|
30 |
^ aMessageNode |
|
31 |
||
32 |
"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
|
33 |
"Modified: / 16-04-2013 / 23:07:13 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
4361 | 34 |
"Modified (format): / 20-02-2019 / 10:49:33 / Claus Gittinger" |
3116 | 35 |
! ! |
36 |
||
37 |
!BreakpointAnalyzer methodsFor:'initialization'! |
|
38 |
||
39 |
initialize |
|
40 |
super initialize. |
|
41 |
messageSendMap := Dictionary new. |
|
42 |
||
43 |
"Created: / 15-04-2013 / 15:29:14 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
|
44 |
! ! |
|
45 |
||
3151
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
46 |
!BreakpointAnalyzer methodsFor:'private'! |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
47 |
|
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
48 |
genMakeArrayWith:elementExpressions |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
49 |
"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
|
50 |
Will generate: |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
51 |
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
|
52 |
or: |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
53 |
(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
|
54 |
" |
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 arrRec sel expr| |
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 |
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
|
59 |
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
|
60 |
|
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
61 |
numEl := elementExpressions size. |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
62 |
|
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
63 |
(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
|
64 |
sel := #( |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
65 |
#'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:' |
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:' |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
68 |
#'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
|
69 |
#'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
|
70 |
#'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
|
71 |
#'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
|
72 |
#'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
|
73 |
) at:numEl. |
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 |
^ self messageNodeRewriteHookFor:(MessageNode |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
76 |
receiver:arrRec |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
77 |
selector:sel |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
78 |
args:elementExpressions). |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
79 |
]. |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
80 |
|
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
81 |
"/ array creation expression ... |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
82 |
expr := MessageNode |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
83 |
receiver:arrRec |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
84 |
selector:#new: |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
85 |
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
|
86 |
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
|
87 |
|
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
88 |
numEl == 0 ifTrue:[ |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
89 |
^ expr. |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
90 |
]. |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
91 |
"/ 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
|
92 |
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
|
93 |
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
|
94 |
receiver:expr |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
95 |
selector:#at:put: |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
96 |
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
|
97 |
arg2:e |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
98 |
fold:false. |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
99 |
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
|
100 |
]. |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
101 |
"/ 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
|
102 |
expr := CascadeNode |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
103 |
receiver:expr |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
104 |
selector:#yourself. |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
105 |
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
|
106 |
^ expr |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
107 |
|
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
108 |
"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
|
109 |
! ! |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
110 |
|
3116 | 111 |
!BreakpointAnalyzer class methodsFor:'documentation'! |
112 |
||
113 |
version |
|
4361 | 114 |
^ '$Header$' |
3116 | 115 |
! |
116 |
||
117 |
version_CVS |
|
4361 | 118 |
^ '$Header$' |
3116 | 119 |
! ! |
120 |