11import ql
22private import Builtins
33private import codeql_ql.ast.internal.Module
4- private import codeql_ql.ast.internal.AstNodes as AstNodes
4+ private import codeql_ql.ast.internal.AstNodes
55
6- private class TClasslessPredicateOrNewTypeBranch =
7- AstNodes:: TClasslessPredicate or AstNodes:: TNewTypeBranch ;
6+ private class TClasslessPredicateOrNewTypeBranch = TClasslessPredicate or TNewTypeBranch ;
87
9- string getPredicateName ( TClasslessPredicateOrNewTypeBranch p ) {
8+ private string getPredicateName ( TClasslessPredicateOrNewTypeBranch p ) {
109 result = p .( ClasslessPredicate ) .getName ( ) or
1110 result = p .( NewTypeBranch ) .getName ( )
1211}
@@ -69,8 +68,7 @@ private module Cached {
6968 m = pc .getQualifier ( ) .getResolvedModule ( ) and
7069 public = true
7170 |
72- definesPredicate ( m , pc .getPredicateName ( ) , pc .getNumberOfArguments ( ) , p .getDeclaration ( ) ,
73- public )
71+ definesPredicate ( m , pc .getPredicateName ( ) , pc .getNumberOfArguments ( ) , p , public )
7472 )
7573 }
7674
@@ -120,49 +118,13 @@ private module Cached {
120118 not resolvePredicateCall ( c , _) and
121119 resolveDBRelation ( c , p )
122120 }
123-
124- cached
125- module NewTypeDef {
126- cached
127- newtype TPredOrBuiltin =
128- TPred ( Predicate p ) or
129- TNewTypeBranch ( NewTypeBranch b ) or
130- TBuiltinClassless ( string ret , string name , string args ) {
131- isBuiltinClassless ( ret , name , args )
132- } or
133- TBuiltinMember ( string qual , string ret , string name , string args ) {
134- isBuiltinMember ( qual , ret , name , args )
135- }
136- }
137121}
138122
139123import Cached
140- private import NewTypeDef
141124
142- class PredicateOrBuiltin extends TPredOrBuiltin {
125+ class PredicateOrBuiltin extends TPredOrBuiltin , AstNode {
143126 string getName ( ) { none ( ) }
144127
145- string toString ( ) { result = getName ( ) }
146-
147- predicate hasLocationInfo (
148- string filepath , int startline , int startcolumn , int endline , int endcolumn
149- ) {
150- if exists ( getDeclaration ( ) )
151- then
152- getDeclaration ( )
153- .getLocation ( )
154- .hasLocationInfo ( filepath , startline , startcolumn , endline , endcolumn )
155- else (
156- filepath = "" and
157- startline = 0 and
158- startcolumn = 0 and
159- endline = 0 and
160- endcolumn = 0
161- )
162- }
163-
164- AstNode getDeclaration ( ) { none ( ) }
165-
166128 Type getDeclaringType ( ) { none ( ) }
167129
168130 Type getParameterType ( int i ) { none ( ) }
@@ -174,58 +136,14 @@ class PredicateOrBuiltin extends TPredOrBuiltin {
174136 predicate isPrivate ( ) { none ( ) }
175137}
176138
177- private class DefinedPredicate extends PredicateOrBuiltin , TPred {
178- Predicate decl ;
179-
180- DefinedPredicate ( ) { this = TPred ( decl ) }
181-
182- override Predicate getDeclaration ( ) { result = decl }
183-
184- override string getName ( ) { result = decl .getName ( ) }
185-
186- override Type getReturnType ( ) { result = decl .getReturnType ( ) }
187-
188- override Type getParameterType ( int i ) { result = decl .getParameter ( i ) .getType ( ) }
189-
190- // Can be removed when all types can be resolved
191- override int getArity ( ) { result = decl .getArity ( ) }
192-
193- override Type getDeclaringType ( ) {
194- result = decl .( ClassPredicate ) .getDeclaringType ( )
195- or
196- result = decl .( CharPred ) .getDeclaringType ( )
197- }
198-
199- override predicate isPrivate ( ) {
200- decl .( ClassPredicate ) .isPrivate ( ) or decl .( ClassPredicate ) .isPrivate ( )
201- }
202- }
203-
204- private class DefinedNewTypeBranch extends PredicateOrBuiltin , TNewTypeBranch {
205- NewTypeBranch b ;
206-
207- DefinedNewTypeBranch ( ) { this = TNewTypeBranch ( b ) }
208-
209- override NewTypeBranch getDeclaration ( ) { result = b }
210-
211- override string getName ( ) { result = b .getName ( ) }
212-
213- override NewTypeBranchType getReturnType ( ) { result .getDeclaration ( ) = b }
214-
215- override Type getParameterType ( int i ) { result = b .getField ( i ) .getType ( ) }
216-
217- // Can be removed when all types can be resolved
218- override int getArity ( ) { result = count ( b .getField ( _) ) }
139+ private class TBuiltin = TBuiltinClassless or TBuiltinMember ;
219140
220- override Type getDeclaringType ( ) { none ( ) }
141+ class BuiltinPredicate extends PredicateOrBuiltin , TBuiltin {
142+ override string toString ( ) { result = getName ( ) }
221143
222- override predicate isPrivate ( ) { b . getNewType ( ) . isPrivate ( ) }
144+ override string getAPrimaryQlClass ( ) { result = "BuiltinPredicate" }
223145}
224146
225- private class TBuiltin = TBuiltinClassless or TBuiltinMember ;
226-
227- class BuiltinPredicate extends PredicateOrBuiltin , TBuiltin { }
228-
229147private class BuiltinClassless extends BuiltinPredicate , TBuiltinClassless {
230148 string name ;
231149 string ret ;
@@ -287,7 +205,7 @@ module PredConsistency {
287205 strictcount ( PredicateOrBuiltin p0 |
288206 resolveCall ( call , p0 ) and
289207 // aliases are expected to resolve to multiple.
290- not exists ( p0 .getDeclaration ( ) . ( ClasslessPredicate ) .getAlias ( ) )
208+ not exists ( p0 .( ClasslessPredicate ) .getAlias ( ) )
291209 ) and
292210 c > 1 and
293211 resolveCall ( call , p )
0 commit comments