@@ -2813,19 +2813,19 @@ module Impl<FullStateConfigSig Config> {
2813
2813
2814
2814
private newtype TAccessPath =
2815
2815
TAccessPathNil ( DataFlowType t ) or
2816
- TAccessPathCons ( TypedContent head , AccessPath tail ) {
2816
+ TAccessPathCons ( TypedContent head , DataFlowType t , AccessPath tail ) {
2817
2817
exists ( AccessPathApproxCons apa |
2818
2818
not evalUnfold ( apa , false ) and
2819
2819
head = apa .getHead ( ) and
2820
- hasTail ( apa , _ , tail .getApprox ( ) )
2820
+ hasTail ( apa , t , tail .getApprox ( ) )
2821
2821
)
2822
2822
} or
2823
- TAccessPathCons2 ( TypedContent head1 , TypedContent head2 , int len ) {
2823
+ TAccessPathCons2 ( TypedContent head1 , DataFlowType t , TypedContent head2 , int len ) {
2824
2824
exists ( AccessPathApproxCons apa , AccessPathApprox tail |
2825
2825
evalUnfold ( apa , false ) and
2826
2826
not expensiveLen1to2unfolding ( apa ) and
2827
2827
apa .len ( ) = len and
2828
- hasTail ( apa , _ , tail ) and
2828
+ hasTail ( apa , t , tail ) and
2829
2829
head1 = apa .getHead ( ) and
2830
2830
head2 = tail .getHead ( )
2831
2831
)
@@ -2925,9 +2925,10 @@ module Impl<FullStateConfigSig Config> {
2925
2925
2926
2926
private class AccessPathCons extends AccessPath , TAccessPathCons {
2927
2927
private TypedContent head ;
2928
+ private DataFlowType t ;
2928
2929
private AccessPath tail ;
2929
2930
2930
- AccessPathCons ( ) { this = TAccessPathCons ( head , tail ) }
2931
+ AccessPathCons ( ) { this = TAccessPathCons ( head , t , tail ) }
2931
2932
2932
2933
override TypedContent getHead ( ) { result = head }
2933
2934
@@ -2937,7 +2938,7 @@ module Impl<FullStateConfigSig Config> {
2937
2938
2938
2939
pragma [ assume_small_delta]
2939
2940
override AccessPathApproxCons getApprox ( ) {
2940
- result = TConsNil ( head , tail . ( AccessPathNil ) . getType ( ) )
2941
+ result = TConsNil ( head , t ) and tail instanceof AccessPathNil
2941
2942
or
2942
2943
result = TConsCons ( head , tail .getHead ( ) , this .length ( ) )
2943
2944
or
@@ -2948,15 +2949,13 @@ module Impl<FullStateConfigSig Config> {
2948
2949
override int length ( ) { result = 1 + tail .length ( ) }
2949
2950
2950
2951
private string toStringImpl ( boolean needsSuffix ) {
2951
- exists ( DataFlowType t |
2952
- tail = TAccessPathNil ( t ) and
2953
- needsSuffix = false and
2954
- result = head .toString ( ) + "]" + concat ( " : " + ppReprType ( t ) )
2955
- )
2952
+ tail = TAccessPathNil ( _) and
2953
+ needsSuffix = false and
2954
+ result = head .toString ( ) + "]" + concat ( " : " + ppReprType ( t ) )
2956
2955
or
2957
2956
result = head + ", " + tail .( AccessPathCons ) .toStringImpl ( needsSuffix )
2958
2957
or
2959
- exists ( TypedContent tc2 , TypedContent tc3 , int len | tail = TAccessPathCons2 ( tc2 , tc3 , len ) |
2958
+ exists ( TypedContent tc2 , TypedContent tc3 , int len | tail = TAccessPathCons2 ( tc2 , _ , tc3 , len ) |
2960
2959
result = head + ", " + tc2 + ", " + tc3 + ", ... (" and len > 2 and needsSuffix = true
2961
2960
or
2962
2961
result = head + ", " + tc2 + ", " + tc3 + "]" and len = 2 and needsSuffix = false
@@ -2978,15 +2977,16 @@ module Impl<FullStateConfigSig Config> {
2978
2977
2979
2978
private class AccessPathCons2 extends AccessPath , TAccessPathCons2 {
2980
2979
private TypedContent head1 ;
2980
+ private DataFlowType t ;
2981
2981
private TypedContent head2 ;
2982
2982
private int len ;
2983
2983
2984
- AccessPathCons2 ( ) { this = TAccessPathCons2 ( head1 , head2 , len ) }
2984
+ AccessPathCons2 ( ) { this = TAccessPathCons2 ( head1 , t , head2 , len ) }
2985
2985
2986
2986
override TypedContent getHead ( ) { result = head1 }
2987
2987
2988
2988
override AccessPath getTail ( ) {
2989
- Stage5:: consCand ( head1 , head2 . getContainerType ( ) , result .getApprox ( ) ) and
2989
+ Stage5:: consCand ( head1 , t , result .getApprox ( ) ) and
2990
2990
result .getHead ( ) = head2 and
2991
2991
result .length ( ) = len - 1
2992
2992
}
0 commit comments