@@ -210,51 +210,45 @@ class DataFlowCallable extends TDataFlowCallable {
210210 }
211211
212212 pragma [ nomagic]
213- private ControlFlowNode getAMultiBodyEntryNode ( BasicBlock bb , int i ) {
213+ private BasicBlock getAMultiBodyEntryBlock ( ) {
214214 this .isMultiBodied ( ) and
215215 exists ( ControlFlowElement body , Location l |
216216 body = this .asCallable ( l ) .getBody ( ) or
217217 objectInitEntry ( this .asCallable ( l ) , body )
218218 |
219219 NearestLocation< NearestBodyLocationInput > :: nearestLocation ( body , l , _) and
220- result .isBefore ( body )
221- ) and
222- bb .getNode ( i ) = result
220+ result .getANode ( ) .isBefore ( body )
221+ )
223222 }
224223
225224 pragma [ nomagic]
226- private ControlFlowNode getAMultiBodyControlFlowNodePred ( ) {
227- result = this .getAMultiBodyEntryNode ( _ , _ ) .getAPredecessor ( )
225+ private BasicBlock getAMultiBodyControlFlowPred ( ) {
226+ result = this .getAMultiBodyEntryBlock ( ) .getAPredecessor ( )
228227 or
229- result = this .getAMultiBodyControlFlowNodePred ( ) .getAPredecessor ( )
230- }
231-
232- pragma [ nomagic]
233- private ControlFlowNode getAMultiBodyControlFlowNodeSuccSameBasicBlock ( ) {
234- exists ( BasicBlock bb , int i , int j |
235- exists ( this .getAMultiBodyEntryNode ( bb , i ) ) and
236- result = bb .getNode ( j ) and
237- j > i
238- )
228+ result = this .getAMultiBodyControlFlowPred ( ) .getAPredecessor ( )
239229 }
240230
241231 pragma [ nomagic]
242232 private BasicBlock getAMultiBodyBasicBlockSucc ( ) {
243- result = this .getAMultiBodyEntryNode ( _ , _ ) . getBasicBlock ( ) .getASuccessor ( )
233+ result = this .getAMultiBodyEntryBlock ( ) .getASuccessor ( )
244234 or
245235 result = this .getAMultiBodyBasicBlockSucc ( ) .getASuccessor ( )
246236 }
247237
248- pragma [ inline ]
249- private ControlFlowNode getAMultiBodyControlFlowNode ( ) {
238+ pragma [ nomagic ]
239+ private BasicBlock getAMultiBodyBasicBlock ( ) {
250240 result =
251241 [
252- this .getAMultiBodyEntryNode ( _, _) , this .getAMultiBodyControlFlowNodePred ( ) ,
253- this .getAMultiBodyControlFlowNodeSuccSameBasicBlock ( ) ,
254- this .getAMultiBodyBasicBlockSucc ( ) .getANode ( )
242+ this .getAMultiBodyEntryBlock ( ) , this .getAMultiBodyControlFlowPred ( ) ,
243+ this .getAMultiBodyBasicBlockSucc ( )
255244 ]
256245 }
257246
247+ pragma [ inline]
248+ private ControlFlowNode getAMultiBodyControlFlowNode ( ) {
249+ result = this .getAMultiBodyBasicBlock ( ) .getANode ( )
250+ }
251+
258252 /** Gets a control flow node belonging to this callable. */
259253 pragma [ inline]
260254 ControlFlowNode getAControlFlowNode ( ) {
@@ -264,6 +258,15 @@ class DataFlowCallable extends TDataFlowCallable {
264258 result .getEnclosingCallable ( ) = this .asCallable ( _)
265259 }
266260
261+ /** Gets a basic block belonging to this callable. */
262+ pragma [ inline]
263+ BasicBlock getABasicBlock ( ) {
264+ result = this .getAMultiBodyBasicBlock ( )
265+ or
266+ not this .isMultiBodied ( ) and
267+ result .getEnclosingCallable ( ) = this .asCallable ( _)
268+ }
269+
267270 /** Gets the underlying summarized callable, if any. */
268271 FlowSummary:: SummarizedCallable asSummarizedCallable ( ) { this = TSummarizedCallable ( result ) }
269272
0 commit comments