Swift: synthesize CaptureListExpr::getVariable in QL instead of extracting it

This commit is contained in:
Paolo Tranquilli
2023-10-31 10:43:14 +01:00
parent 7bae2d9192
commit ffff10a7e8
7 changed files with 14 additions and 22 deletions

View File

@@ -119,7 +119,6 @@ codeql::CaptureListExpr ExprTranslator::translateCaptureListExpr(
entry.closure_body = dispatcher.fetchLabel(expr.getClosureBody());
for (const auto& item : const_cast<swift::CaptureListExpr&>(expr).getCaptureList()) {
entry.binding_decls.push_back(dispatcher.fetchLabel(item.PBD));
entry.variables.push_back(dispatcher.fetchLabel(item.getVar()));
}
return entry;
}

View File

@@ -379,7 +379,7 @@ lib/codeql/swift/generated/OtherAvailabilitySpec.qll 0e26a203b26ff0581b7396b0c6d
lib/codeql/swift/generated/ParentChild.qll 680cbaa7cad7b8c33b7cf3b60aba7013facdbc5601b5076a6f38560fd284f2e8 af472eeaca6bd32848cb2de647ff015053f9fb7c54c1eca18f91fcc6ea8ad7b7
lib/codeql/swift/generated/PlatformVersionAvailabilitySpec.qll f82d9ca416fe8bd59b5531b65b1c74c9f317b3297a6101544a11339a1cffce38 7f5c6d3309e66c134107afe55bae76dfc9a72cb7cdd6d4c3706b6b34cee09fa0
lib/codeql/swift/generated/PureSynthConstructors.qll 173c0dd59396a1de26fe870e3bc2766c46de689da2a4d8807cb62023bbce1a98 173c0dd59396a1de26fe870e3bc2766c46de689da2a4d8807cb62023bbce1a98
lib/codeql/swift/generated/Raw.qll fc093e8aef6c558b17ba4f7a4d42ce782b0fef3222b983df41b79f921bae37c8 586b13654f152b747f07373edd69b7f478d59ecf5abc7c18a5a221851ce8f73a
lib/codeql/swift/generated/Raw.qll 59a847c009d682dfceb72f33bb54d6cf6da589e59a386450bb5fba310a4170e7 ed02d96d3bfc998a105b8f34e6a92d966e6c3db5c581872a53ac5db6904e5fab
lib/codeql/swift/generated/Synth.qll 551fdf7e4b53f9ee1314d1bb42c2638cf82f45bfa1f40a635dfa7b6072e4418c 9ab178464700a19951fc5285acacda4913addee81515d8e072b3d7055935a814
lib/codeql/swift/generated/SynthConstructors.qll 2f801bd8b0db829b0253cd459ed3253c1fdfc55dce68ebc53e7fec138ef0aca4 2f801bd8b0db829b0253cd459ed3253c1fdfc55dce68ebc53e7fec138ef0aca4
lib/codeql/swift/generated/UnknownFile.qll 0fcf9beb8de79440bcdfff4bb6ab3dd139bd273e6c32754e05e6a632651e85f6 0fcf9beb8de79440bcdfff4bb6ab3dd139bd273e6c32754e05e6a632651e85f6
@@ -446,7 +446,7 @@ lib/codeql/swift/generated/expr/BridgeFromObjCExpr.qll b9a6520d01613dfb8c7606177
lib/codeql/swift/generated/expr/BridgeToObjCExpr.qll 31ca13762aee9a6a17746f40ec4e1e929811c81fdadb27c48e0e7ce6a3a6222d 31ca13762aee9a6a17746f40ec4e1e929811c81fdadb27c48e0e7ce6a3a6222d
lib/codeql/swift/generated/expr/BuiltinLiteralExpr.qll 052f8d0e9109a0d4496da1ae2b461417951614c88dbc9d80220908734b3f70c6 536fa290bb75deae0517d53528237eab74664958bf7fdbf8041283415dda2142
lib/codeql/swift/generated/expr/CallExpr.qll c7dc105fcb6c0956e20d40f736db35bd7f38f41c3d872858972c2ca120110d36 c7dc105fcb6c0956e20d40f736db35bd7f38f41c3d872858972c2ca120110d36
lib/codeql/swift/generated/expr/CaptureListExpr.qll 29271af76039bf16aadc5544ab59f06e5689cb92c944f0ed0cf6d23702fcf449 b467850b683f6415edba260065e15c89fb52d0f3ec07f65d526db9f6965694d1
lib/codeql/swift/generated/expr/CaptureListExpr.qll 61a43bb830403a97ebe41729e87666a4ab4a7343f7f61e8cd94875ee7ca9906e 4c04002502de6cce8b67e0afe84114b81749625da0883bb19a48049d6024b72d
lib/codeql/swift/generated/expr/CheckedCastExpr.qll 146c24e72cda519676321d3bdb89d1953dfe1810d2710f04cfdc4210ace24c40 91093e0ba88ec3621b538d98454573b5eea6d43075a2ab0a08f80f9b9be336d3
lib/codeql/swift/generated/expr/ClassMetatypeToObjectExpr.qll 076c0f7369af3fffc8860429bd8e290962bf7fc8cf53bbba061de534e99cc8bf 076c0f7369af3fffc8860429bd8e290962bf7fc8cf53bbba061de534e99cc8bf
lib/codeql/swift/generated/expr/ClosureExpr.qll f194fc8c5f67fcf0219e8e2de93ee2b820c27a609b2986b68d57a54445f66b61 3cae87f6c6eefb32195f06bc4c95ff6634446ecf346d3a3c94dc05c1539f3de2

View File

@@ -1,5 +1,11 @@
private import codeql.swift.generated.expr.CaptureListExpr
private import codeql.swift.elements.decl.VarDecl
private import codeql.swift.elements.pattern.NamedPattern
class CaptureListExpr extends Generated::CaptureListExpr {
override string toString() { result = this.getClosureBody().toString() }
override VarDecl getVariable(int index) {
result = this.getBindingDecl(index).getPattern(0).(NamedPattern).getVarDecl()
}
}

View File

@@ -1103,11 +1103,6 @@ module Raw {
capture_list_expr_binding_decls(this, index, result)
}
/**
* Gets the `index`th variable of this capture list expression (0-based).
*/
VarDecl getVariable(int index) { capture_list_expr_variables(this, index, result) }
/**
* Gets the closure body of this capture list expression.
*/

View File

@@ -32,13 +32,10 @@ module Generated {
/**
* Gets the `index`th variable of this capture list expression (0-based).
*
* These are the variables introduced by this capture in the closure's scope, not the captured ones.
*/
VarDecl getVariable(int index) {
result =
Synth::convertVarDeclFromRaw(Synth::convertCaptureListExprToRaw(this)
.(Raw::CaptureListExpr)
.getVariable(index))
}
VarDecl getVariable(int index) { none() }
/**
* Gets any of the variables of this capture list expression.

View File

@@ -846,13 +846,6 @@ capture_list_expr_binding_decls( //dir=expr
int binding_decl: @pattern_binding_decl_or_none ref
);
#keyset[id, index]
capture_list_expr_variables( //dir=expr
int id: @capture_list_expr ref,
int index: int ref,
int variable: @var_decl_or_none ref
);
@closure_expr =
@auto_closure_expr
| @explicit_closure_expr

View File

@@ -411,7 +411,9 @@ class CapturedDecl(Decl):
class CaptureListExpr(Expr):
binding_decls: list[PatternBindingDecl] | child
variables: list[VarDecl] | child
variables: list[VarDecl] | child | synth | desc("""
These are the variables introduced by this capture in the closure's scope, not the captured ones.
""")
closure_body: "ClosureExpr" | child
class CollectionExpr(Expr):