author | Jan Vrany <jan.vrany@labware.com> |
Thu, 27 Oct 2022 14:53:59 +0100 | |
branch | jv |
changeset 4735 | 3b11fb3ede98 |
parent 4723 | 524785227024 |
permissions | -rw-r--r-- |
3841 | 1 |
" |
2 |
COPYRIGHT (c) 2006 by eXept Software AG |
|
3 |
All Rights Reserved |
|
4 |
||
5 |
This software is furnished under a license and may be used |
|
6 |
only in accordance with the terms of that license and with the |
|
7 |
inclusion of the above copyright notice. This software may not |
|
8 |
be provided or otherwise made available to, or used by, any |
|
9 |
other person. No title to or ownership of the software is |
|
10 |
hereby transferred. |
|
11 |
" |
|
3116 | 12 |
"{ Package: 'stx:libcomp' }" |
13 |
||
4361 | 14 |
"{ NameSpace: Smalltalk }" |
15 |
||
3116 | 16 |
Parser variableSubclass:#BreakpointAnalyzer |
17 |
instanceVariableNames:'messageSendMap' |
|
18 |
classVariableNames:'' |
|
19 |
poolDictionaries:'' |
|
20 |
category:'System-Compiler-Debugging' |
|
21 |
! |
|
22 |
||
3841 | 23 |
!BreakpointAnalyzer class methodsFor:'documentation'! |
24 |
||
25 |
copyright |
|
26 |
" |
|
27 |
COPYRIGHT (c) 2006 by eXept Software AG |
|
28 |
All Rights Reserved |
|
29 |
||
30 |
This software is furnished under a license and may be used |
|
31 |
only in accordance with the terms of that license and with the |
|
32 |
inclusion of the above copyright notice. This software may not |
|
33 |
be provided or otherwise made available to, or used by, any |
|
34 |
other person. No title to or ownership of the software is |
|
35 |
hereby transferred. |
|
36 |
" |
|
37 |
! ! |
|
3116 | 38 |
|
39 |
!BreakpointAnalyzer methodsFor:'accessing'! |
|
40 |
||
41 |
messageSendMap |
|
42 |
^ messageSendMap |
|
43 |
! ! |
|
44 |
||
45 |
!BreakpointAnalyzer methodsFor:'code generation hooks'! |
|
46 |
||
47 |
messageNodeRewriteHookFor:aMessageNode |
|
48 |
"invoked whenever a message send node has been generated; |
|
49 |
gives subclasses a chance to rewrite (instrument) it" |
|
50 |
||
4361 | 51 |
(messageSendMap at:(aMessageNode line) ifAbsentPut:[Bag new]) |
52 |
add:(aMessageNode selector). |
|
3116 | 53 |
|
54 |
^ aMessageNode |
|
55 |
||
56 |
"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
|
57 |
"Modified: / 16-04-2013 / 23:07:13 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
4361 | 58 |
"Modified (format): / 20-02-2019 / 10:49:33 / Claus Gittinger" |
3116 | 59 |
! ! |
60 |
||
61 |
!BreakpointAnalyzer methodsFor:'initialization'! |
|
62 |
||
63 |
initialize |
|
64 |
super initialize. |
|
65 |
messageSendMap := Dictionary new. |
|
66 |
||
67 |
"Created: / 15-04-2013 / 15:29:14 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
|
68 |
! ! |
|
69 |
||
3151
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
70 |
!BreakpointAnalyzer methodsFor:'private'! |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
71 |
|
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
72 |
genMakeArrayWith:elementExpressions |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
73 |
"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
|
74 |
Will generate: |
4467 | 75 |
literal shallowCopy (if all elements are literals) |
76 |
or else: |
|
77 |
Array with:el1 ... with:elN (if N <= 8) |
|
3151
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
78 |
or: |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
79 |
(Array new at:1 put:el1; ... at:N put:elN; yourself) (otherwise) |
4467 | 80 |
|
81 |
SIGH: duplicate code here, because the other implementation is on the class side, |
|
82 |
and shared by JavaScriptParser and regular Parser. |
|
3151
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
83 |
" |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
84 |
|
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
85 |
|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
|
86 |
|
4467 | 87 |
(elementExpressions conform:#isConstant) ifTrue:[ |
88 |
arrRec := ConstantNode type:#Array value:(elementExpressions collect:#value as:Array) from:-1 to:-1. "/ position -1 means artifitial node |
|
89 |
^ self messageNodeRewriteHookFor:(MessageNode receiver:arrRec selector:#shallowCopy). |
|
90 |
]. |
|
91 |
||
3151
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
92 |
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
|
93 |
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
|
94 |
|
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
95 |
numEl := elementExpressions size. |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
96 |
|
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
97 |
(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
|
98 |
sel := #( |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
99 |
#'with:' |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
100 |
#'with:with:' |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
101 |
#'with:with:with:' |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
102 |
#'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
|
103 |
#'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
|
104 |
#'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
|
105 |
#'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
|
106 |
#'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
|
107 |
) at:numEl. |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
108 |
|
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
109 |
^ self messageNodeRewriteHookFor:(MessageNode |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
110 |
receiver:arrRec |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
111 |
selector:sel |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
112 |
args:elementExpressions). |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
113 |
]. |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
114 |
|
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
115 |
"/ array creation expression ... |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
116 |
expr := MessageNode |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
117 |
receiver:arrRec |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
118 |
selector:#new: |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
119 |
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
|
120 |
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
|
121 |
|
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
122 |
numEl == 0 ifTrue:[ |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
123 |
^ expr. |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
124 |
]. |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
125 |
"/ 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
|
126 |
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
|
127 |
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
|
128 |
receiver:expr |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
129 |
selector:#at:put: |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
130 |
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
|
131 |
arg2:e |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
132 |
fold:false. |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
133 |
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
|
134 |
]. |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
135 |
"/ 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
|
136 |
expr := CascadeNode |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
137 |
receiver:expr |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
138 |
selector:#yourself. |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
139 |
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
|
140 |
^ expr |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
141 |
|
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
142 |
"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
|
143 |
! ! |
4053541783fd
Also count messages for artificial sends used to instantiate
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
3130
diff
changeset
|
144 |
|
3116 | 145 |
!BreakpointAnalyzer class methodsFor:'documentation'! |
146 |
||
147 |
version |
|
4361 | 148 |
^ '$Header$' |
3116 | 149 |
! |
150 |
||
151 |
version_CVS |
|
4361 | 152 |
^ '$Header$' |
3116 | 153 |
! ! |
154 |