@@ -2813,19 +2813,19 @@ module Impl<FullStateConfigSig Config> {
28132813
28142814 private newtype TAccessPath =
28152815 TAccessPathNil ( DataFlowType t ) or
2816- TAccessPathCons ( TypedContent head , AccessPath tail ) {
2816+ TAccessPathCons ( TypedContent head , DataFlowType t , AccessPath tail ) {
28172817 exists ( AccessPathApproxCons apa |
28182818 not evalUnfold ( apa , false ) and
28192819 head = apa .getHead ( ) and
2820- hasTail ( apa , _ , tail .getApprox ( ) )
2820+ hasTail ( apa , t , tail .getApprox ( ) )
28212821 )
28222822 } or
2823- TAccessPathCons2 ( TypedContent head1 , TypedContent head2 , int len ) {
2823+ TAccessPathCons2 ( TypedContent head1 , DataFlowType t , TypedContent head2 , int len ) {
28242824 exists ( AccessPathApproxCons apa , AccessPathApprox tail |
28252825 evalUnfold ( apa , false ) and
28262826 not expensiveLen1to2unfolding ( apa ) and
28272827 apa .len ( ) = len and
2828- hasTail ( apa , _ , tail ) and
2828+ hasTail ( apa , t , tail ) and
28292829 head1 = apa .getHead ( ) and
28302830 head2 = tail .getHead ( )
28312831 )
@@ -2925,9 +2925,10 @@ module Impl<FullStateConfigSig Config> {
29252925
29262926 private class AccessPathCons extends AccessPath , TAccessPathCons {
29272927 private TypedContent head ;
2928+ private DataFlowType t ;
29282929 private AccessPath tail ;
29292930
2930- AccessPathCons ( ) { this = TAccessPathCons ( head , tail ) }
2931+ AccessPathCons ( ) { this = TAccessPathCons ( head , t , tail ) }
29312932
29322933 override TypedContent getHead ( ) { result = head }
29332934
@@ -2937,7 +2938,7 @@ module Impl<FullStateConfigSig Config> {
29372938
29382939 pragma [ assume_small_delta]
29392940 override AccessPathApproxCons getApprox ( ) {
2940- result = TConsNil ( head , tail . ( AccessPathNil ) . getType ( ) )
2941+ result = TConsNil ( head , t ) and tail instanceof AccessPathNil
29412942 or
29422943 result = TConsCons ( head , tail .getHead ( ) , this .length ( ) )
29432944 or
@@ -2948,15 +2949,13 @@ module Impl<FullStateConfigSig Config> {
29482949 override int length ( ) { result = 1 + tail .length ( ) }
29492950
29502951 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 ) )
29562955 or
29572956 result = head + ", " + tail .( AccessPathCons ) .toStringImpl ( needsSuffix )
29582957 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 ) |
29602959 result = head + ", " + tc2 + ", " + tc3 + ", ... (" and len > 2 and needsSuffix = true
29612960 or
29622961 result = head + ", " + tc2 + ", " + tc3 + "]" and len = 2 and needsSuffix = false
@@ -2978,15 +2977,16 @@ module Impl<FullStateConfigSig Config> {
29782977
29792978 private class AccessPathCons2 extends AccessPath , TAccessPathCons2 {
29802979 private TypedContent head1 ;
2980+ private DataFlowType t ;
29812981 private TypedContent head2 ;
29822982 private int len ;
29832983
2984- AccessPathCons2 ( ) { this = TAccessPathCons2 ( head1 , head2 , len ) }
2984+ AccessPathCons2 ( ) { this = TAccessPathCons2 ( head1 , t , head2 , len ) }
29852985
29862986 override TypedContent getHead ( ) { result = head1 }
29872987
29882988 override AccessPath getTail ( ) {
2989- Stage5:: consCand ( head1 , head2 . getContainerType ( ) , result .getApprox ( ) ) and
2989+ Stage5:: consCand ( head1 , t , result .getApprox ( ) ) and
29902990 result .getHead ( ) = head2 and
29912991 result .length ( ) = len - 1
29922992 }
0 commit comments