|
5 | 5 | "observed_at": "5a0de070af241a2612859153887ad6ae04afcce2", |
6 | 6 | "observed_at_note": "A' = corrected A2.1 treatment (PR #363), landed via main@23e3203; the extractor is byte-identical between A' and that merge. The superseded A (dce26ed) is not a measurement point.", |
7 | 7 | "a2_2_1_note": "Measured with the A2.2-1 extractor (the IOperation value-flow walker) from the tree this file is committed in, before the commit: the SHA that carries this file is the SHA it was measured at. A2.2-1 promises exactly the transparent and may-value rows move to sidecar_call; every other row must read as it did at A'. A2.2-1a added the CheckedRef and Boxing rows, measured at both points.", |
| 8 | + "a2_2_2_note": "Measured with the A2.2-2 extractor (constructor calls as call-like sites) from the tree this file is committed in. A2.2-2 promises exactly the object_creation row(s) move to sidecar_call; every other row, delegate_invocation included, must read as it did after A2.2-1.", |
8 | 9 | "observed_vocabulary": { |
9 | 10 | "sidecar_call": "a function record with a guarded_facts call fact for the probe call", |
10 | 11 | "record_without_call_fact": "a function record exists but carries no call fact for the probe call", |
|
31 | 32 | "class": "direct", |
32 | 33 | "conversion": "reference_upcast", |
33 | 34 | "a2_1_observed": "sidecar_call", |
34 | | - "a2_2_1_observed": "sidecar_call" |
| 35 | + "a2_2_1_observed": "sidecar_call", |
| 36 | + "a2_2_2_observed": "sidecar_call" |
35 | 37 | }, |
36 | 38 | "PlainSame": { |
37 | 39 | "class": "direct", |
38 | 40 | "conversion": "none", |
39 | 41 | "note": "identity binding to a NON-consuming callee: the legacy pass reads the pass as an escape, no tracked local remains, no record at all; the orphan carrier's case (\u00a710.6.6), and a direct flow", |
40 | 42 | "a2_1_observed": "no_record", |
41 | | - "a2_2_1_observed": "no_record" |
| 43 | + "a2_2_1_observed": "no_record", |
| 44 | + "a2_2_2_observed": "no_record" |
42 | 45 | }, |
43 | 46 | "Parens": { |
44 | 47 | "class": "transparent", |
45 | 48 | "wrapper": "parenthesized", |
46 | 49 | "conversion": "reference_upcast", |
47 | 50 | "a2_1_observed": "sidecar_call", |
48 | | - "a2_2_1_observed": "sidecar_call" |
| 51 | + "a2_2_1_observed": "sidecar_call", |
| 52 | + "a2_2_2_observed": "sidecar_call" |
49 | 53 | }, |
50 | 54 | "IdentityCast": { |
51 | 55 | "class": "transparent", |
52 | 56 | "wrapper": "cast", |
53 | 57 | "conversion": "identity", |
54 | 58 | "a2_1_observed": "record_without_call_fact", |
55 | | - "a2_2_1_observed": "sidecar_call" |
| 59 | + "a2_2_1_observed": "sidecar_call", |
| 60 | + "a2_2_2_observed": "sidecar_call" |
56 | 61 | }, |
57 | 62 | "Cast": { |
58 | 63 | "class": "transparent", |
59 | 64 | "wrapper": "cast", |
60 | 65 | "conversion": "reference_upcast", |
61 | 66 | "a2_1_observed": "record_without_call_fact", |
62 | | - "a2_2_1_observed": "sidecar_call" |
| 67 | + "a2_2_1_observed": "sidecar_call", |
| 68 | + "a2_2_2_observed": "sidecar_call" |
63 | 69 | }, |
64 | 70 | "AsCast": { |
65 | 71 | "class": "transparent", |
66 | 72 | "wrapper": "as", |
67 | 73 | "conversion": "reference_upcast", |
68 | 74 | "a2_1_observed": "record_without_call_fact", |
69 | | - "a2_2_1_observed": "sidecar_call" |
| 75 | + "a2_2_1_observed": "sidecar_call", |
| 76 | + "a2_2_2_observed": "sidecar_call" |
70 | 77 | }, |
71 | 78 | "Bang": { |
72 | 79 | "class": "transparent", |
73 | 80 | "wrapper": "null_forgiving", |
74 | 81 | "conversion": "reference_upcast", |
75 | 82 | "a2_1_observed": "record_without_call_fact", |
76 | | - "a2_2_1_observed": "sidecar_call" |
| 83 | + "a2_2_1_observed": "sidecar_call", |
| 84 | + "a2_2_2_observed": "sidecar_call" |
77 | 85 | }, |
78 | 86 | "CheckedRef": { |
79 | 87 | "class": "transparent", |
80 | 88 | "wrapper": "cast", |
81 | 89 | "conversion": "reference_checked", |
82 | 90 | "note": "explicit reference conversion on a Base-typed handle: the same reference or no call at all (the cast throws); never an alternate value, unlike `as`", |
83 | 91 | "a2_1_observed": "record_without_call_fact", |
84 | | - "a2_2_1_observed": "sidecar_call" |
| 92 | + "a2_2_1_observed": "sidecar_call", |
| 93 | + "a2_2_2_observed": "sidecar_call" |
85 | 94 | }, |
86 | 95 | "Ternary": { |
87 | 96 | "class": "may_value", |
88 | 97 | "form": "conditional", |
89 | 98 | "conversion": "reference_upcast", |
90 | 99 | "a2_1_observed": "record_without_call_fact", |
91 | | - "a2_2_1_observed": "sidecar_call" |
| 100 | + "a2_2_1_observed": "sidecar_call", |
| 101 | + "a2_2_2_observed": "sidecar_call" |
92 | 102 | }, |
93 | 103 | "Coalesce": { |
94 | 104 | "class": "may_value", |
95 | 105 | "form": "null_coalescing", |
96 | 106 | "conversion": "reference_upcast", |
97 | 107 | "a2_1_observed": "record_without_call_fact", |
98 | | - "a2_2_1_observed": "sidecar_call" |
| 108 | + "a2_2_1_observed": "sidecar_call", |
| 109 | + "a2_2_2_observed": "sidecar_call" |
99 | 110 | }, |
100 | 111 | "Switch": { |
101 | 112 | "class": "may_value", |
102 | 113 | "form": "switch_expression", |
103 | 114 | "conversion": "reference_upcast", |
104 | 115 | "a2_1_observed": "record_without_call_fact", |
105 | | - "a2_2_1_observed": "sidecar_call" |
| 116 | + "a2_2_1_observed": "sidecar_call", |
| 117 | + "a2_2_2_observed": "sidecar_call" |
106 | 118 | }, |
107 | 119 | "AsMayFail": { |
108 | 120 | "class": "may_value", |
109 | 121 | "form": "as_may_fail", |
110 | 122 | "conversion": "may_fail_null", |
111 | 123 | "a2_1_observed": "record_without_call_fact", |
112 | | - "a2_2_1_observed": "sidecar_call" |
| 124 | + "a2_2_1_observed": "sidecar_call", |
| 125 | + "a2_2_2_observed": "sidecar_call" |
113 | 126 | }, |
114 | 127 | "Ctor": { |
115 | 128 | "class": "call_like", |
116 | 129 | "form": "object_creation", |
117 | 130 | "conversion": "reference_upcast", |
118 | 131 | "a2_1_observed": "record_without_call_fact", |
119 | | - "a2_2_1_observed": "record_without_call_fact" |
| 132 | + "a2_2_1_observed": "record_without_call_fact", |
| 133 | + "a2_2_2_observed": "sidecar_call" |
120 | 134 | }, |
121 | 135 | "DelegateCall": { |
122 | 136 | "class": "call_like", |
123 | 137 | "form": "delegate_invocation", |
124 | 138 | "conversion": "reference_upcast", |
125 | 139 | "a2_1_observed": "no_record", |
126 | | - "a2_2_1_observed": "no_record" |
| 140 | + "a2_2_1_observed": "no_record", |
| 141 | + "a2_2_2_observed": "no_record" |
127 | 142 | }, |
128 | 143 | "Nested": { |
129 | 144 | "class": "indirect", |
130 | 145 | "exclusion": "nested_call_result", |
131 | 146 | "conversion": "not_applicable", |
132 | 147 | "note": "Wrap(r) itself is direct and is owed its own call fact; Use receives call_result", |
133 | 148 | "a2_1_observed": "no_record", |
134 | | - "a2_2_1_observed": "no_record" |
| 149 | + "a2_2_1_observed": "no_record", |
| 150 | + "a2_2_2_observed": "no_record" |
135 | 151 | }, |
136 | 152 | "ArrayInit": { |
137 | 153 | "class": "indirect", |
138 | 154 | "exclusion": "container_construction", |
139 | 155 | "conversion": "not_applicable", |
140 | 156 | "a2_1_observed": "record_without_call_fact", |
141 | | - "a2_2_1_observed": "record_without_call_fact" |
| 157 | + "a2_2_1_observed": "record_without_call_fact", |
| 158 | + "a2_2_2_observed": "record_without_call_fact" |
142 | 159 | }, |
143 | 160 | "CollectionInit": { |
144 | 161 | "class": "indirect", |
145 | 162 | "exclusion": "container_construction", |
146 | 163 | "conversion": "not_applicable", |
147 | 164 | "a2_1_observed": "record_without_call_fact", |
148 | | - "a2_2_1_observed": "record_without_call_fact" |
| 165 | + "a2_2_1_observed": "record_without_call_fact", |
| 166 | + "a2_2_2_observed": "record_without_call_fact" |
149 | 167 | }, |
150 | 168 | "Tuple": { |
151 | 169 | "class": "indirect", |
152 | 170 | "exclusion": "tuple_construction", |
153 | 171 | "conversion": "not_applicable", |
154 | 172 | "a2_1_observed": "no_record", |
155 | | - "a2_2_1_observed": "no_record" |
| 173 | + "a2_2_1_observed": "no_record", |
| 174 | + "a2_2_2_observed": "no_record" |
156 | 175 | }, |
157 | 176 | "Closure": { |
158 | 177 | "class": "indirect", |
159 | 178 | "exclusion": "closure_capture", |
160 | 179 | "conversion": "not_applicable", |
161 | 180 | "note": "the inner Use(r) belongs to the lambda body, which has no record of its own (known gap)", |
162 | 181 | "a2_1_observed": "no_record", |
163 | | - "a2_2_1_observed": "no_record" |
| 182 | + "a2_2_1_observed": "no_record", |
| 183 | + "a2_2_2_observed": "no_record" |
164 | 184 | }, |
165 | 185 | "MethodGroup": { |
166 | 186 | "class": "indirect", |
167 | 187 | "exclusion": "method_group_conversion", |
168 | 188 | "conversion": "not_applicable", |
169 | 189 | "a2_1_observed": "record_without_call_fact", |
170 | | - "a2_2_1_observed": "record_without_call_fact" |
| 190 | + "a2_2_1_observed": "record_without_call_fact", |
| 191 | + "a2_2_2_observed": "record_without_call_fact" |
171 | 192 | }, |
172 | 193 | "UserConversion": { |
173 | 194 | "class": "indirect", |
174 | 195 | "exclusion": "user_conversion", |
175 | 196 | "conversion": "user_defined_implicit", |
176 | 197 | "note": "syntactically a bare identifier; only the semantic model shows the hidden op_Implicit", |
177 | 198 | "a2_1_observed": "no_record", |
178 | | - "a2_2_1_observed": "no_record" |
| 199 | + "a2_2_1_observed": "no_record", |
| 200 | + "a2_2_2_observed": "no_record" |
179 | 201 | }, |
180 | 202 | "ExplicitUserConversion": { |
181 | 203 | "class": "indirect", |
182 | 204 | "exclusion": "user_conversion", |
183 | 205 | "conversion": "user_defined_explicit", |
184 | 206 | "note": "syntactically a cast; the user-defined operator sits inside the cast expression, and (XBox)r already has type XBox at the call", |
185 | 207 | "a2_1_observed": "record_without_call_fact", |
186 | | - "a2_2_1_observed": "record_without_call_fact" |
| 208 | + "a2_2_1_observed": "record_without_call_fact", |
| 209 | + "a2_2_2_observed": "record_without_call_fact" |
187 | 210 | }, |
188 | 211 | "NameOf": { |
189 | 212 | "class": "indirect", |
190 | 213 | "exclusion": "nameof_operand", |
191 | 214 | "conversion": "not_applicable", |
192 | 215 | "a2_1_observed": "record_without_call_fact", |
193 | | - "a2_2_1_observed": "record_without_call_fact" |
| 216 | + "a2_2_1_observed": "record_without_call_fact", |
| 217 | + "a2_2_2_observed": "record_without_call_fact" |
194 | 218 | }, |
195 | 219 | "MemberAccess": { |
196 | 220 | "class": "indirect", |
197 | 221 | "exclusion": "member_access_on_handle", |
198 | 222 | "conversion": "not_applicable", |
199 | 223 | "a2_1_observed": "record_without_call_fact", |
200 | | - "a2_2_1_observed": "record_without_call_fact" |
| 224 | + "a2_2_1_observed": "record_without_call_fact", |
| 225 | + "a2_2_2_observed": "record_without_call_fact" |
201 | 226 | }, |
202 | 227 | "Boxing": { |
203 | 228 | "class": "indirect", |
204 | 229 | "exclusion": "boxing_conversion", |
205 | 230 | "conversion": "boxing", |
206 | 231 | "note": "an owned disposable STRUCT parameter passed to object: the callee receives a boxed copy, not the handle; owned so the record exists regardless of legacy escape admission", |
207 | 232 | "a2_1_observed": "sidecar_call", |
208 | | - "a2_2_1_observed": "record_without_call_fact" |
| 233 | + "a2_2_1_observed": "record_without_call_fact", |
| 234 | + "a2_2_2_observed": "record_without_call_fact" |
209 | 235 | }, |
210 | 236 | "Receiver": { |
211 | 237 | "class": "indirect", |
212 | 238 | "exclusion": "receiver_not_summary_parameter", |
213 | 239 | "conversion": "not_applicable", |
214 | 240 | "a2_1_observed": "record_without_call_fact", |
215 | | - "a2_2_1_observed": "record_without_call_fact" |
| 241 | + "a2_2_1_observed": "record_without_call_fact", |
| 242 | + "a2_2_2_observed": "record_without_call_fact" |
216 | 243 | }, |
217 | 244 | "Indexer": { |
218 | 245 | "class": "indirect", |
219 | 246 | "exclusion": "storage_assignment", |
220 | 247 | "conversion": "not_applicable", |
221 | 248 | "a2_1_observed": "no_record", |
222 | | - "a2_2_1_observed": "no_record" |
| 249 | + "a2_2_1_observed": "no_record", |
| 250 | + "a2_2_2_observed": "no_record" |
223 | 251 | } |
224 | 252 | } |
225 | 253 | } |
0 commit comments