-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathLifeTimeInterval.st
60 lines (43 loc) · 952 Bytes
/
LifeTimeInterval.st
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
58
59
IRVisitor subclass: LifeTimeInterval [
LifeTimeInterval class >> from: aThunder [
<category: 'instance creation'>
^ self new
thunder: aThunder;
extractIntervals;
yourself
]
| i live intervals creationTime thunder |
thunder: aThunder [
<category: 'accessing'>
thunder := aThunder
]
intervals [
<category: 'accessing'>
^ intervals
]
live [
<category: 'accessing'>
^ live
]
creationTime [
<category: 'accessing'>
^ creationTime
]
extractIntervals [
i := 1.
creationTime := OrderedCollection new.
intervals := Dictionary new.
live := Dictionary new.
thunder instructionsDo: [ :each |
each accept: self.
i := i + 1 ]
]
visitVariable: aSymbol [
(intervals at: aSymbol ifAbsentPut: [
| int |
creationTime addLast: i.
int := Interval named: aSymbol from: i.
live at: i ifAbsentPut: [ int ].
int ]) to: i.
]
]