mirror of
https://github.com/github/codeql.git
synced 2026-04-30 19:26:02 +02:00
Merge pull request #7096 from tausbn/python-fix-more-bad-joins
Python: Fix a bunch of performance issues
This commit is contained in:
@@ -152,17 +152,17 @@ class NonLocalVariable extends SsaSourceVariable {
|
||||
}
|
||||
|
||||
override ControlFlowNode getAnImplicitUse() {
|
||||
result.(CallNode).getScope().getScope*() = this.(LocalVariable).getScope()
|
||||
result.(CallNode).getScope().getScope*() = this.scope_as_local_variable()
|
||||
}
|
||||
|
||||
override ControlFlowNode getScopeEntryDefinition() {
|
||||
exists(Function f |
|
||||
f.getScope+() = this.(LocalVariable).getScope() and
|
||||
f.getScope+() = this.scope_as_local_variable() and
|
||||
f.getEntryNode() = result
|
||||
)
|
||||
or
|
||||
not this.(LocalVariable).isParameter() and
|
||||
this.(LocalVariable).getScope().getEntryNode() = result
|
||||
this.scope_as_local_variable().getEntryNode() = result
|
||||
}
|
||||
|
||||
pragma[noinline]
|
||||
@@ -215,12 +215,15 @@ class ModuleVariable extends SsaSourceVariable {
|
||||
)
|
||||
}
|
||||
|
||||
pragma[nomagic]
|
||||
private Scope scope_as_global_variable() { result = this.(GlobalVariable).getScope() }
|
||||
|
||||
pragma[noinline]
|
||||
CallNode global_variable_callnode() { result.getScope() = this.(GlobalVariable).getScope() }
|
||||
CallNode global_variable_callnode() { result.getScope() = this.scope_as_global_variable() }
|
||||
|
||||
pragma[noinline]
|
||||
ImportMemberNode global_variable_import() {
|
||||
result.getScope() = this.(GlobalVariable).getScope() and
|
||||
result.getScope() = this.scope_as_global_variable() and
|
||||
import_from_dot_in_init(result.getModule(this.getName()))
|
||||
}
|
||||
|
||||
@@ -250,7 +253,7 @@ class ModuleVariable extends SsaSourceVariable {
|
||||
override ControlFlowNode getScopeEntryDefinition() {
|
||||
exists(Scope s | s.getEntryNode() = result |
|
||||
/* Module entry point */
|
||||
this.(GlobalVariable).getScope() = s
|
||||
this.scope_as_global_variable() = s
|
||||
or
|
||||
/* For implicit use of __metaclass__ when constructing class */
|
||||
class_with_global_metaclass(s, this)
|
||||
@@ -286,13 +289,13 @@ class EscapingGlobalVariable extends ModuleVariable {
|
||||
override ControlFlowNode getAnImplicitUse() {
|
||||
result = ModuleVariable.super.getAnImplicitUse()
|
||||
or
|
||||
result.(CallNode).getScope().getScope+() = this.(GlobalVariable).getScope()
|
||||
result.(CallNode).getScope().getScope+() = this.scope_as_global_variable()
|
||||
or
|
||||
result = this.innerScope().getANormalExit()
|
||||
}
|
||||
|
||||
private Scope innerScope() {
|
||||
result.getScope+() = this.(GlobalVariable).getScope() and
|
||||
result.getScope+() = this.scope_as_global_variable() and
|
||||
not result instanceof ImportTimeScope
|
||||
}
|
||||
|
||||
|
||||
@@ -1195,16 +1195,22 @@ module InterProceduralPointsTo {
|
||||
ControlFlowNode argument, PointsToContext caller, ParameterDefinition param,
|
||||
PointsToContext callee
|
||||
) {
|
||||
PointsToInternal::pointsTo(argument, caller, _, _) and
|
||||
exists(CallNode call, Function func, int offset |
|
||||
callsite_calls_function(call, caller, func, callee, offset)
|
||||
|
|
||||
exists(string name |
|
||||
argument = call.getArgByName(name) and
|
||||
param.getParameter() = func.getArgByName(name)
|
||||
function_parameter_name(func, param, name)
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
pragma[nomagic]
|
||||
private predicate function_parameter_name(Function func, ParameterDefinition param, string name) {
|
||||
param.getParameter() = func.getArgByName(name)
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if the `call` with context `caller` calls the function `scope` in context `callee`
|
||||
* and the offset from argument to parameter is `parameter_offset`
|
||||
|
||||
@@ -70,10 +70,11 @@ predicate same_attribute(Attribute a1, Attribute a2) {
|
||||
not is_property_access(a1)
|
||||
}
|
||||
|
||||
pragma[nomagic]
|
||||
Comment pyflakes_comment() { result.getText().toLowerCase().matches("%pyflakes%") }
|
||||
|
||||
int pyflakes_commented_line(File file) {
|
||||
exists(Comment c | c.getText().toLowerCase().matches("%pyflakes%") |
|
||||
c.getLocation().hasLocationInfo(file.getAbsolutePath(), result, _, _, _)
|
||||
)
|
||||
pyflakes_comment().getLocation().hasLocationInfo(file.getAbsolutePath(), result, _, _, _)
|
||||
}
|
||||
|
||||
predicate pyflakes_commented(AssignStmt assignment) {
|
||||
|
||||
Reference in New Issue
Block a user