217 |
217 |
218 bool _collecting; // Indicates whether escape information |
218 bool _collecting; // Indicates whether escape information |
219 // is still being collected. If false, |
219 // is still being collected. If false, |
220 // no new nodes will be processed. |
220 // no new nodes will be processed. |
221 |
221 |
|
222 bool _progress; // Indicates whether new Graph's edges |
|
223 // were created. |
|
224 |
222 uint _phantom_object; // Index of globally escaping object |
225 uint _phantom_object; // Index of globally escaping object |
223 // that pointer values loaded from |
226 // that pointer values loaded from |
224 // a field which has not been set |
227 // a field which has not been set |
225 // are assumed to point to. |
228 // are assumed to point to. |
226 uint _oop_null; // ConP(#NULL) |
229 uint _oop_null; // ConP(#NULL) |
264 // node indices of the source and destination of the edge |
267 // node indices of the source and destination of the edge |
265 void add_pointsto_edge(uint from_i, uint to_i); |
268 void add_pointsto_edge(uint from_i, uint to_i); |
266 void add_deferred_edge(uint from_i, uint to_i); |
269 void add_deferred_edge(uint from_i, uint to_i); |
267 void add_field_edge(uint from_i, uint to_i, int offs); |
270 void add_field_edge(uint from_i, uint to_i, int offs); |
268 |
271 |
|
272 // Add an edge of the specified type pointing to the specified target. |
|
273 // Set _progress if new edge is added. |
|
274 void add_edge(PointsToNode *f, uint to_i, PointsToNode::EdgeType et) { |
|
275 uint e_cnt = f->edge_count(); |
|
276 f->add_edge(to_i, et); |
|
277 _progress |= (f->edge_count() != e_cnt); |
|
278 } |
269 |
279 |
270 // Add an edge to node given by "to_i" from any field of adr_i whose offset |
280 // Add an edge to node given by "to_i" from any field of adr_i whose offset |
271 // matches "offset" A deferred edge is added if to_i is a LocalVar, and |
281 // matches "offset" A deferred edge is added if to_i is a LocalVar, and |
272 // a pointsto edge is added if it is a JavaObject |
282 // a pointsto edge is added if it is a JavaObject |
273 void add_edge_from_fields(uint adr, uint to_i, int offs); |
283 void add_edge_from_fields(uint adr, uint to_i, int offs); |