@@ -1853,8 +1853,10 @@ module Expressions {
1853
1853
private boolean isinstanceEvaluatesTo (
1854
1854
CallNode call , PointsToContext context , ControlFlowNode use , ObjectInternal val
1855
1855
) {
1856
- exists ( ObjectInternal cls | isinstance_call ( call , use , context , val , cls ) |
1857
- result = Types:: improperSubclass ( val .getClass ( ) , cls )
1856
+ exists ( ObjectInternal cls , ObjectInternal val_cls |
1857
+ isinstance_call ( call , use , context , val , val_cls , cls )
1858
+ |
1859
+ result = Types:: improperSubclass ( val_cls , cls )
1858
1860
or
1859
1861
val = ObjectInternal:: unknown ( ) and result = maybe ( )
1860
1862
or
@@ -1866,12 +1868,13 @@ module Expressions {
1866
1868
1867
1869
private predicate isinstance_call (
1868
1870
CallNode call , ControlFlowNode use , PointsToContext context , ObjectInternal val ,
1869
- ObjectInternal cls
1871
+ ObjectInternal val_cls , ObjectInternal cls
1870
1872
) {
1871
1873
exists ( ControlFlowNode func , ControlFlowNode arg1 |
1872
1874
call2 ( call , func , use , arg1 ) and
1873
1875
points_to_isinstance ( func , context ) and
1874
1876
PointsToInternal:: pointsTo ( use , context , val , _) and
1877
+ val_cls = val .getClass ( ) and
1875
1878
PointsToInternal:: pointsTo ( arg1 , context , cls , _)
1876
1879
)
1877
1880
}
@@ -1993,10 +1996,7 @@ module Expressions {
1993
1996
exists ( ObjectInternal sup_or_tuple |
1994
1997
issubclass_call ( _, _, _, sub , sup_or_tuple ) and sub .isClass ( ) = true
1995
1998
or
1996
- exists ( ObjectInternal val |
1997
- isinstance_call ( _, _, _, val , sup_or_tuple ) and
1998
- sub = val .getClass ( )
1999
- )
1999
+ exists ( ObjectInternal val | isinstance_call ( _, _, _, val , sub , sup_or_tuple ) )
2000
2000
|
2001
2001
sup = sup_or_tuple
2002
2002
or
0 commit comments