@@ -928,7 +928,21 @@ module MakeImplCommon<LocationSig Location, InputSig<Location> Lang> {
928
928
nodeDataFlowType ( this .asNode ( ) , result )
929
929
or
930
930
nodeDataFlowType ( this .asParamReturnNode ( ) , result )
931
- //TODO
931
+ or
932
+ nodeDataFlowType ( this .asLambdaInstancePostUpdateNode ( ) , result )
933
+ or
934
+ nodeDataFlowType ( this .asLambdaMallocNode ( ) , result )
935
+ or
936
+ exists (
937
+ DataFlowCall synthcall , ArgumentPosition apos , DataFlowCallable c , ParameterNode p ,
938
+ ParameterPosition ppos
939
+ |
940
+ this .isLambdaArgNode ( synthcall , apos , _) and
941
+ lambdaCreation ( _, _, c , synthcall ) and
942
+ isParameterNode ( p , c , ppos ) and
943
+ parameterMatch ( ppos , apos ) and
944
+ nodeDataFlowType ( p , result )
945
+ )
932
946
}
933
947
934
948
pragma [ inline]
@@ -1745,26 +1759,28 @@ module MakeImplCommon<LocationSig Location, InputSig<Location> Lang> {
1745
1759
contentType , containerType )
1746
1760
)
1747
1761
or
1748
- exists (
1749
- DataFlowCall call , LambdaCallKind k , Node receiver , ReturnKind kind , ArgumentPosition apos
1750
- |
1751
- lambdaCall ( call , k , receiver ) and
1752
- node2 .asNode ( ) .( PostUpdateNode ) .getPreUpdateNode ( ) = receiver and
1753
- c = getLambdaArgumentContent ( k , apos ) and
1754
- node1 .asNode ( ) .( ArgNode ) .argumentOf ( call , apos )
1755
- )
1756
- or
1757
- exists ( DataFlowCallable lambda , LambdaCallKind k , ReturnKind kind |
1758
- lambdaCreation ( _, k , lambda , _) and
1759
- hasSimpleReturnKindIn ( node1 .asNode ( ) , kind , lambda ) and
1760
- nodeGetEnclosingCallable ( node2 .asLambdaInstancePostUpdateNode ( ) ) = lambda and
1761
- c = getLambdaReturnContent ( k , kind )
1762
- )
1763
- or
1764
- exists ( DataFlowCall synthcall , LambdaCallKind k , ArgumentPosition apos |
1765
- lambdaCreation ( node2 .asNode ( ) , k , _, synthcall ) and
1766
- node1 .isLambdaArgNode ( synthcall , apos , true ) and
1767
- c = getLambdaArgumentContent ( k , apos )
1762
+ contentType = node1 .getDataFlowType ( ) and
1763
+ containerType = node2 .getDataFlowType ( ) and
1764
+ (
1765
+ exists ( DataFlowCall call , LambdaCallKind k , Node receiver , ArgumentPosition apos |
1766
+ lambdaCall ( call , k , receiver ) and
1767
+ node2 .asNode ( ) .( PostUpdateNode ) .getPreUpdateNode ( ) = receiver and
1768
+ c = getLambdaArgumentContent ( k , apos ) and
1769
+ node1 .asNode ( ) .( ArgNode ) .argumentOf ( call , apos )
1770
+ )
1771
+ or
1772
+ exists ( DataFlowCallable lambda , LambdaCallKind k , ReturnKind kind |
1773
+ lambdaCreation ( _, k , lambda , _) and
1774
+ hasSimpleReturnKindIn ( node1 .asNode ( ) , kind , lambda ) and
1775
+ nodeGetEnclosingCallable ( node2 .asLambdaInstancePostUpdateNode ( ) ) = lambda and
1776
+ c = getLambdaReturnContent ( k , kind )
1777
+ )
1778
+ or
1779
+ exists ( DataFlowCall synthcall , LambdaCallKind k , ArgumentPosition apos |
1780
+ lambdaCreation ( node2 .asNode ( ) , k , _, synthcall ) and
1781
+ node1 .isLambdaArgNode ( synthcall , apos , true ) and
1782
+ c = getLambdaArgumentContent ( k , apos )
1783
+ )
1768
1784
)
1769
1785
}
1770
1786
@@ -1800,7 +1816,9 @@ module MakeImplCommon<LocationSig Location, InputSig<Location> Lang> {
1800
1816
}
1801
1817
1802
1818
cached
1803
- predicate allowParameterReturnInSelfCached ( ParamNode p ) { allowParameterReturnInSelf ( p ) }
1819
+ predicate allowParameterReturnInSelfCached ( ParamNode p ) {
1820
+ allowParameterReturnInSelf ( p ) or isLambdaInstanceParameter ( p )
1821
+ }
1804
1822
1805
1823
cached
1806
1824
predicate paramMustFlow ( ParamNode p , ArgNode arg ) { localMustFlowStep + ( p , arg ) }
0 commit comments