From 41a0bf154f289b3ccf521bda7c709d76aed8d4b0 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Thu, 14 Oct 2021 10:48:54 +0200 Subject: [PATCH] Move some AstNodes to Ast.qll, fix compilation error. --- ql/src/codeql_ql/ast/Ast.qll | 54 ++++++++++++++++++++- ql/src/codeql_ql/ast/internal/AstNodes.qll | 4 +- ql/src/codeql_ql/ast/internal/Predicate.qll | 53 -------------------- ql/test/callgraph/callgraph.ql | 2 +- 4 files changed, 57 insertions(+), 56 deletions(-) diff --git a/ql/src/codeql_ql/ast/Ast.qll b/ql/src/codeql_ql/ast/Ast.qll index b5f3a9dafca..2c93da2af47 100644 --- a/ql/src/codeql_ql/ast/Ast.qll +++ b/ql/src/codeql_ql/ast/Ast.qll @@ -4,6 +4,7 @@ private import codeql_ql.ast.internal.Module private import codeql_ql.ast.internal.Predicate import codeql_ql.ast.internal.Type private import codeql_ql.ast.internal.Variable +private import codeql_ql.ast.internal.Builtins bindingset[name] private string directMember(string name) { result = name + "()" } @@ -191,6 +192,57 @@ class Select extends TSelect, AstNode { override string getAPrimaryQlClass() { result = "Select" } } +class PredicateOrBuiltin extends TPredOrBuiltin, AstNode { + string getName() { none() } + + Type getDeclaringType() { none() } + + Type getParameterType(int i) { none() } + + Type getReturnType() { none() } + + int getArity() { result = count(getParameterType(_)) } + + predicate isPrivate() { none() } +} + +class BuiltinPredicate extends PredicateOrBuiltin, TBuiltin { + override string toString() { result = getName() } + + override string getAPrimaryQlClass() { result = "BuiltinPredicate" } +} + +private class BuiltinClassless extends BuiltinPredicate, TBuiltinClassless { + string name; + string ret; + string args; + + BuiltinClassless() { this = TBuiltinClassless(ret, name, args) } + + override string getName() { result = name } + + override PrimitiveType getReturnType() { result.getName() = ret } + + override PrimitiveType getParameterType(int i) { result.getName() = getArgType(args, i) } +} + +private class BuiltinMember extends BuiltinPredicate, TBuiltinMember { + string name; + string qual; + string ret; + string args; + + BuiltinMember() { this = TBuiltinMember(qual, ret, name, args) } + + override string getName() { result = name } + + override PrimitiveType getReturnType() { result.getName() = ret } + + override PrimitiveType getParameterType(int i) { result.getName() = getArgType(args, i) } + + override PrimitiveType getDeclaringType() { result.getName() = qual } +} + /** * A QL predicate. * Either a classless predicate, a class predicate, or a characteristic predicate. @@ -812,7 +864,7 @@ class NewTypeBranch extends TNewTypeBranch, PredicateOrBuiltin, TypeDeclaration override Type getDeclaringType() { none() } - predicate isPrivate() { this.getNewType().isPrivate() } + override predicate isPrivate() { this.getNewType().isPrivate() } override QLDoc getQLDoc() { toGenerated(result) = branch.getChild(_) } diff --git a/ql/src/codeql_ql/ast/internal/AstNodes.qll b/ql/src/codeql_ql/ast/internal/AstNodes.qll index 89e48335927..c7e73105b4c 100644 --- a/ql/src/codeql_ql/ast/internal/AstNodes.qll +++ b/ql/src/codeql_ql/ast/internal/AstNodes.qll @@ -199,7 +199,9 @@ Generated::AstNode toGenerated(AST::AstNode n) { class TPredicate = TCharPred or TClasslessPredicate or TClassPredicate or TDBRelation; -class TPredOrBuiltin = TPredicate or TNewTypeBranch or TBuiltinClassless or TBuiltinMember; +class TPredOrBuiltin = TPredicate or TNewTypeBranch or TBuiltin; + +class TBuiltin = TBuiltinClassless or TBuiltinMember; class TModuleMember = TModuleDeclaration or TImport or TSelect or TQLDoc; diff --git a/ql/src/codeql_ql/ast/internal/Predicate.qll b/ql/src/codeql_ql/ast/internal/Predicate.qll index 668fd5cb2b0..d6981aeb624 100644 --- a/ql/src/codeql_ql/ast/internal/Predicate.qll +++ b/ql/src/codeql_ql/ast/internal/Predicate.qll @@ -122,59 +122,6 @@ private module Cached { import Cached -class PredicateOrBuiltin extends TPredOrBuiltin, AstNode { - string getName() { none() } - - Type getDeclaringType() { none() } - - Type getParameterType(int i) { none() } - - Type getReturnType() { none() } - - int getArity() { result = count(getParameterType(_)) } - - predicate isPrivate() { none() } -} - -private class TBuiltin = TBuiltinClassless or TBuiltinMember; - -class BuiltinPredicate extends PredicateOrBuiltin, TBuiltin { - override string toString() { result = getName() } - - override string getAPrimaryQlClass() { result = "BuiltinPredicate" } -} - -private class BuiltinClassless extends BuiltinPredicate, TBuiltinClassless { - string name; - string ret; - string args; - - BuiltinClassless() { this = TBuiltinClassless(ret, name, args) } - - override string getName() { result = name } - - override PrimitiveType getReturnType() { result.getName() = ret } - - override PrimitiveType getParameterType(int i) { result.getName() = getArgType(args, i) } -} - -private class BuiltinMember extends BuiltinPredicate, TBuiltinMember { - string name; - string qual; - string ret; - string args; - - BuiltinMember() { this = TBuiltinMember(qual, ret, name, args) } - - override string getName() { result = name } - - override PrimitiveType getReturnType() { result.getName() = ret } - - override PrimitiveType getParameterType(int i) { result.getName() = getArgType(args, i) } - - override PrimitiveType getDeclaringType() { result.getName() = qual } -} - module PredConsistency { query predicate noResolvePredicateExpr(PredicateExpr pe) { not resolvePredicateExpr(pe, _) and diff --git a/ql/test/callgraph/callgraph.ql b/ql/test/callgraph/callgraph.ql index ef5aecf1bbc..4b68e49e361 100644 --- a/ql/test/callgraph/callgraph.ql +++ b/ql/test/callgraph/callgraph.ql @@ -1,3 +1,3 @@ import ql -query AstNode getTarget(Call call) { result = call.getTarget().getDeclaration() } +query AstNode getTarget(Call call) { result = call.getTarget() }