@@ -38,58 +38,73 @@ private predicate definesPredicate(
3838 )
3939}
4040
41- predicate resolvePredicateExpr ( PredicateExpr pe , ClasslessPredicate p ) {
42- exists ( FileOrModule m , boolean public |
43- not exists ( pe .getQualifier ( ) ) and
44- m = getEnclosingModule ( pe ) .getEnclosing * ( ) and
45- public = [ false , true ]
46- or
47- m = pe .getQualifier ( ) .getResolvedModule ( ) and
48- public = true
49- |
50- definesPredicate ( m , pe .getName ( ) , count ( p .getParameter ( _) ) , p , public )
51- )
52- }
41+ cached
42+ private module Cached {
43+ cached
44+ predicate resolvePredicateExpr ( PredicateExpr pe , ClasslessPredicate p ) {
45+ exists ( FileOrModule m , boolean public |
46+ not exists ( pe .getQualifier ( ) ) and
47+ m = getEnclosingModule ( pe ) .getEnclosing * ( ) and
48+ public = [ false , true ]
49+ or
50+ m = pe .getQualifier ( ) .getResolvedModule ( ) and
51+ public = true
52+ |
53+ definesPredicate ( m , pe .getName ( ) , count ( p .getParameter ( _) ) , p , public )
54+ )
55+ }
5356
54- private predicate resolvePredicateCall ( PredicateCall pc , PredicateOrBuiltin p ) {
55- exists ( Class c , ClassType t |
56- c = pc .getParent * ( ) and
57- t = c .getType ( ) and
58- p = t .getClassPredicate ( pc .getPredicateName ( ) , pc .getNumberOfArguments ( ) )
59- )
60- or
61- exists ( FileOrModule m , boolean public |
62- not exists ( pc .getQualifier ( ) ) and
63- m = getEnclosingModule ( pc ) .getEnclosing * ( ) and
64- public = [ false , true ]
57+ private predicate resolvePredicateCall ( PredicateCall pc , PredicateOrBuiltin p ) {
58+ exists ( Class c , ClassType t |
59+ c = pc .getParent * ( ) and
60+ t = c .getType ( ) and
61+ p = t .getClassPredicate ( pc .getPredicateName ( ) , pc .getNumberOfArguments ( ) )
62+ )
6563 or
66- m = pc .getQualifier ( ) .getResolvedModule ( ) and
67- public = true
68- |
69- definesPredicate ( m , pc .getPredicateName ( ) , pc .getNumberOfArguments ( ) , p .getDeclaration ( ) , public )
70- )
71- }
64+ exists ( FileOrModule m , boolean public |
65+ not exists ( pc .getQualifier ( ) ) and
66+ m = getEnclosingModule ( pc ) .getEnclosing * ( ) and
67+ public = [ false , true ]
68+ or
69+ m = pc .getQualifier ( ) .getResolvedModule ( ) and
70+ public = true
71+ |
72+ definesPredicate ( m , pc .getPredicateName ( ) , pc .getNumberOfArguments ( ) , p .getDeclaration ( ) ,
73+ public )
74+ )
75+ }
7276
73- private predicate resolveMemberCall ( MemberCall mc , PredicateOrBuiltin p ) {
74- exists ( Type t |
75- t = mc .getBase ( ) .getType ( ) and
76- p = t .getClassPredicate ( mc .getMemberName ( ) , mc .getNumberOfArguments ( ) )
77- )
78- }
77+ private predicate resolveMemberCall ( MemberCall mc , PredicateOrBuiltin p ) {
78+ exists ( Type t |
79+ t = mc .getBase ( ) .getType ( ) and
80+ p = t .getClassPredicate ( mc .getMemberName ( ) , mc .getNumberOfArguments ( ) )
81+ )
82+ }
7983
80- predicate resolveCall ( Call c , PredicateOrBuiltin p ) {
81- resolvePredicateCall ( c , p )
82- or
83- resolveMemberCall ( c , p )
84- }
84+ cached
85+ predicate resolveCall ( Call c , PredicateOrBuiltin p ) {
86+ resolvePredicateCall ( c , p )
87+ or
88+ resolveMemberCall ( c , p )
89+ }
8590
86- private newtype TPredOrBuiltin =
87- TPred ( Predicate p ) or
88- TNewTypeBranch ( NewTypeBranch b ) or
89- TBuiltinClassless ( string ret , string name , string args ) { isBuiltinClassless ( ret , name , args ) } or
90- TBuiltinMember ( string qual , string ret , string name , string args ) {
91- isBuiltinMember ( qual , ret , name , args )
91+ cached
92+ module NewTypeDef {
93+ cached
94+ newtype TPredOrBuiltin =
95+ TPred ( Predicate p ) or
96+ TNewTypeBranch ( NewTypeBranch b ) or
97+ TBuiltinClassless ( string ret , string name , string args ) {
98+ isBuiltinClassless ( ret , name , args )
99+ } or
100+ TBuiltinMember ( string qual , string ret , string name , string args ) {
101+ isBuiltinMember ( qual , ret , name , args )
102+ }
92103 }
104+ }
105+
106+ import Cached
107+ private import NewTypeDef
93108
94109class PredicateOrBuiltin extends TPredOrBuiltin {
95110 string getName ( ) { none ( ) }
0 commit comments