@@ -1316,7 +1316,9 @@ newtype TDataFlowCall =
13161316 TNormalCall ( CallNode call , Function target , CallType type ) { resolveCall ( call , target , type ) } or
13171317 TPotentialLibraryCall ( CallNode call ) or
13181318 /** A synthesized call inside a summarized callable */
1319- TSummaryCall ( FlowSummaryImpl:: Public:: SummarizedCallable c , Node receiver ) {
1319+ TSummaryCall (
1320+ FlowSummaryImpl:: Public:: SummarizedCallable c , FlowSummaryImpl:: Private:: SummaryNode receiver
1321+ ) {
13201322 FlowSummaryImpl:: Private:: summaryCallbackRange ( c , receiver )
13211323 }
13221324
@@ -1448,12 +1450,12 @@ class PotentialLibraryCall extends ExtractedDataFlowCall, TPotentialLibraryCall
14481450 */
14491451class SummaryCall extends DataFlowCall , TSummaryCall {
14501452 private FlowSummaryImpl:: Public:: SummarizedCallable c ;
1451- private Node receiver ;
1453+ private FlowSummaryImpl :: Private :: SummaryNode receiver ;
14521454
14531455 SummaryCall ( ) { this = TSummaryCall ( c , receiver ) }
14541456
14551457 /** Gets the data flow node that this call targets. */
1456- Node getReceiver ( ) { result = receiver }
1458+ FlowSummaryImpl :: Private :: SummaryNode getReceiver ( ) { result = receiver }
14571459
14581460 override DataFlowCallable getEnclosingCallable ( ) { result .asLibraryCallable ( ) = c }
14591461
@@ -1486,44 +1488,35 @@ abstract class ParameterNodeImpl extends Node {
14861488}
14871489
14881490/** A parameter for a library callable with a flow summary. */
1489- class SummaryParameterNode extends ParameterNodeImpl , TSummaryParameterNode {
1490- private FlowSummaryImpl:: Public:: SummarizedCallable sc ;
1491- private ParameterPosition pos ;
1491+ class SummaryParameterNode extends ParameterNodeImpl , FlowSummaryNode {
1492+ SummaryParameterNode ( ) {
1493+ FlowSummaryImpl:: Private:: summaryParameterNode ( this .getSummaryNode ( ) , _)
1494+ }
14921495
1493- SummaryParameterNode ( ) { this = TSummaryParameterNode ( sc , pos ) }
1496+ private ParameterPosition getPosition ( ) {
1497+ FlowSummaryImpl:: Private:: summaryParameterNode ( this .getSummaryNode ( ) , result )
1498+ }
14941499
14951500 override Parameter getParameter ( ) { none ( ) }
14961501
14971502 override predicate isParameterOf ( DataFlowCallable c , ParameterPosition ppos ) {
1498- sc = c .asLibraryCallable ( ) and ppos = pos
1499- }
1500-
1501- override DataFlowCallable getEnclosingCallable ( ) { result .asLibraryCallable ( ) = sc }
1502-
1503- override string toString ( ) { result = "parameter " + pos + " of " + sc }
1504-
1505- // Hack to return "empty location"
1506- override predicate hasLocationInfo (
1507- string file , int startline , int startcolumn , int endline , int endcolumn
1508- ) {
1509- file = "" and
1510- startline = 0 and
1511- startcolumn = 0 and
1512- endline = 0 and
1513- endcolumn = 0
1503+ this .getSummarizedCallable ( ) = c .asLibraryCallable ( ) and ppos = this .getPosition ( )
15141504 }
15151505}
15161506
15171507/** A data-flow node used to model flow summaries. */
1518- class SummaryNode extends Node , TSummaryNode {
1519- private FlowSummaryImpl:: Public:: SummarizedCallable c ;
1520- private FlowSummaryImpl:: Private:: SummaryNodeState state ;
1508+ class FlowSummaryNode extends Node , TFlowSummaryNode {
1509+ FlowSummaryImpl:: Private:: SummaryNode getSummaryNode ( ) { this = TFlowSummaryNode ( result ) }
15211510
1522- SummaryNode ( ) { this = TSummaryNode ( c , state ) }
1511+ FlowSummaryImpl:: Public:: SummarizedCallable getSummarizedCallable ( ) {
1512+ result = this .getSummaryNode ( ) .getSummarizedCallable ( )
1513+ }
15231514
1524- override DataFlowCallable getEnclosingCallable ( ) { result .asLibraryCallable ( ) = c }
1515+ override DataFlowCallable getEnclosingCallable ( ) {
1516+ result .asLibraryCallable ( ) = this .getSummarizedCallable ( )
1517+ }
15251518
1526- override string toString ( ) { result = "[summary] " + state + " in " + c }
1519+ override string toString ( ) { result = this . getSummaryNode ( ) . toString ( ) }
15271520
15281521 // Hack to return "empty location"
15291522 override predicate hasLocationInfo (
@@ -1537,26 +1530,30 @@ class SummaryNode extends Node, TSummaryNode {
15371530 }
15381531}
15391532
1540- private class SummaryReturnNode extends SummaryNode , ReturnNode {
1533+ private class SummaryReturnNode extends FlowSummaryNode , ReturnNode {
15411534 private ReturnKind rk ;
15421535
1543- SummaryReturnNode ( ) { FlowSummaryImpl:: Private:: summaryReturnNode ( this , rk ) }
1536+ SummaryReturnNode ( ) { FlowSummaryImpl:: Private:: summaryReturnNode ( this . getSummaryNode ( ) , rk ) }
15441537
15451538 override ReturnKind getKind ( ) { result = rk }
15461539}
15471540
1548- private class SummaryArgumentNode extends SummaryNode , ArgumentNode {
1549- SummaryArgumentNode ( ) { FlowSummaryImpl:: Private:: summaryArgumentNode ( _, this , _) }
1541+ private class SummaryArgumentNode extends FlowSummaryNode , ArgumentNode {
1542+ SummaryArgumentNode ( ) {
1543+ FlowSummaryImpl:: Private:: summaryArgumentNode ( _, this .getSummaryNode ( ) , _)
1544+ }
15501545
15511546 override predicate argumentOf ( DataFlowCall call , ArgumentPosition pos ) {
1552- FlowSummaryImpl:: Private:: summaryArgumentNode ( call , this , pos )
1547+ FlowSummaryImpl:: Private:: summaryArgumentNode ( call , this . getSummaryNode ( ) , pos )
15531548 }
15541549}
15551550
1556- private class SummaryPostUpdateNode extends SummaryNode , PostUpdateNodeImpl {
1557- private Node pre ;
1551+ private class SummaryPostUpdateNode extends FlowSummaryNode , PostUpdateNodeImpl {
1552+ private FlowSummaryNode pre ;
15581553
1559- SummaryPostUpdateNode ( ) { FlowSummaryImpl:: Private:: summaryPostUpdateNode ( this , pre ) }
1554+ SummaryPostUpdateNode ( ) {
1555+ FlowSummaryImpl:: Private:: summaryPostUpdateNode ( this .getSummaryNode ( ) , pre .getSummaryNode ( ) )
1556+ }
15601557
15611558 override Node getPreUpdateNode ( ) { result = pre }
15621559}
@@ -1625,11 +1622,11 @@ private module OutNodes {
16251622 }
16261623 }
16271624
1628- private class SummaryOutNode extends SummaryNode , OutNode {
1629- SummaryOutNode ( ) { FlowSummaryImpl:: Private:: summaryOutNode ( _, this , _) }
1625+ private class SummaryOutNode extends FlowSummaryNode , OutNode {
1626+ SummaryOutNode ( ) { FlowSummaryImpl:: Private:: summaryOutNode ( _, this . getSummaryNode ( ) , _) }
16301627
16311628 override DataFlowCall getCall ( ReturnKind kind ) {
1632- FlowSummaryImpl:: Private:: summaryOutNode ( result , this , kind )
1629+ FlowSummaryImpl:: Private:: summaryOutNode ( result , this . getSummaryNode ( ) , kind )
16331630 }
16341631 }
16351632}
0 commit comments