Swift: Support new accessors

This commit is contained in:
Jeroen Ketema
2025-10-30 13:14:20 +01:00
parent 26f59a8786
commit b08b123184
12 changed files with 188 additions and 48 deletions

View File

@@ -198,16 +198,16 @@ codeql::Accessor DeclTranslator::translateAccessorDecl(const swift::AccessorDecl
entry.is_unsafe_mutable_address = true;
break;
case swift::AccessorKind::DistributedGet:
// TODO: Swift 6.2
entry.is_distributed_get = true;
break;
case swift::AccessorKind::Read2:
// TODO: Swift 6.2
entry.is_read2 = true;
break;
case swift::AccessorKind::Modify2:
// TODO: Swift 6.2
entry.is_modify2 = true;
break;
case swift::AccessorKind::Init:
// TODO: Swift 6.2
entry.is_init = true;
break;
}
fillFunction(decl, entry);

View File

@@ -730,7 +730,7 @@ lib/codeql/swift/generated/Location.qll 5e20316c3e480ddfe632b7e88e016c19f10a67df
lib/codeql/swift/generated/MacroRole.qll facf907e75490d69cd401c491215e4719324d751f40ea46c86ccf24cf3663c1f 969d8d4b44e3f1a9c193a152a4d83a303e56d2dbb871fc920c47a33f699cf018
lib/codeql/swift/generated/ParentChild.qll 88a8941821b1f511925eb8955ff25065a6004c61aa866854ee941d7556b1eb6d 6e32b4902cea8a78a9b2775826d64300987932c406212d841deeab7c48a5ef8b
lib/codeql/swift/generated/PureSynthConstructors.qll bc31a6c4d142fa3fbdcae69d5ba6f1cec00eb9ad92b46c8d7b91ebfa7ef6c1f4 bc31a6c4d142fa3fbdcae69d5ba6f1cec00eb9ad92b46c8d7b91ebfa7ef6c1f4
lib/codeql/swift/generated/Raw.qll aa47e81ab3004a0049da3a85f25456bba15ed37329622153c154a296024077f3 46e9fb37fadc23d168fd43cbe77a792ba8e56aab7f4a3a984add1928efd4ac78
lib/codeql/swift/generated/Raw.qll f64459f6113f9b568cb876b4a896d29e519b5ac2c89322614f52e981ab4aedc1 66440d5f6927641b4ffb38d2930af0dd6d5428fcdc4bd1a67868b2304a6b0ea8
lib/codeql/swift/generated/Synth.qll a472fca73084eedab9ca8bb2fb82e7573d525444bb8d3729a3d18e06647fd96d b19984583774e30dae481d3d5cc95ebf2843c04dd952eb16cbf8a702ae52bbd8
lib/codeql/swift/generated/SynthConstructors.qll f3687a56d2fd9bc38d95d9ca335f558a91c865bd0bd1c7c73affedefd7514183 f3687a56d2fd9bc38d95d9ca335f558a91c865bd0bd1c7c73affedefd7514183
lib/codeql/swift/generated/UnknownFile.qll 247ddf2ebb49ce5ed4bf7bf91a969ddff37de6c78d43d8affccaf7eb586e06f2 452b29f0465ef45e978ef8b647b75e5a2a1e53f2a568fc003bc8f52f73b3fa4d
@@ -738,7 +738,7 @@ lib/codeql/swift/generated/UnknownLocation.qll d871000b4f53ffca4f67ea23ca5626e5d
lib/codeql/swift/generated/UnspecifiedElement.qll d9ad4ba1ffff90cc465e8ba0dea8c4e8ba67dce5529b53b63ab6dc8e13c85e67 025218e1fee8ee382b63ad38009dfec73dc604d2ba80b9ad956c7c96eeed7022
lib/codeql/swift/generated/decl/AbstractStorageDecl.qll 2e1479489d879fe5a712d69fd7956f81c413a854c55f1094a0c801af5ee9478b a20e02c383350c7cf7ddb23db1e782f802a82f4d76b67243f8d6491a759d1d53
lib/codeql/swift/generated/decl/AbstractTypeParamDecl.qll b72e0759f91cad222e097629b1546e4d12dbc3e247cbb4d82057bb448deb1bfd 00e4135e775ff7076cada8894c6bae60aa642db717d6367a05f87b937f447a6e
lib/codeql/swift/generated/decl/Accessor.qll 2b015ca1f56cb083d5da653f8a230f712cd86a0121e95c5dd97a3c54cd730872 980e94dbed41ff3852b88e5799620ab3b34f533e7623f8b56385ee0ac8569470
lib/codeql/swift/generated/decl/Accessor.qll 4e03be18e1191959d7724eb933826c7089f337c56885b08f0962221535935f21 aa2156241f3740246950bd26f97641fc2a8a140fa5d1cd0a341b14c235f7a2b2
lib/codeql/swift/generated/decl/AccessorOrNamedFunction.qll 4c545d471aff763dc92a2b2047a0543b3c3a487a591509d42bd5878b5b3d1747 07ec58884fdc5e3ddf138c4dd1eccea6bba849671a84e03d9ee12e2310fa8cf2
lib/codeql/swift/generated/decl/AssociatedTypeDecl.qll a590cfa5980eaf5b52c2bfb0ad7c7d96e8f70894b9945099eea9940d7ef9ed35 fa909d2d471119652c12fac3fdf51abe526920d5f961fd9f9e9c7c512be3bd5d
lib/codeql/swift/generated/decl/CapturedDecl.qll 07999cdbe928b22e157a7295f25c0a9483b29fd1784fe3d9c6e7f1f211b676ab 62b45dc415ab912ad77db69f93011573918ddaeb0ce6837434b86c3fe561536f
@@ -1032,7 +1032,7 @@ test/extractor-tests/generated/Comment/MISSING_SOURCE.txt 35fb32ea5393152eb7a875
test/extractor-tests/generated/Diagnostics/Diagnostics.ql c1f8be2c283e13c1a4dadaa008e42f660ea09d9ee1de22b0e8493ef76384546e d84efa40eaecbce6b928a5b235e10bf1e4409a9d0778c365ec19d2fade7ab3ab
test/extractor-tests/generated/File/File.ql a1385ef2080e04e8757f61b8e1d0129df9f955edf03fbb3b83cc9cb5498b4e95 0364d8c7f108d01b2641f996efedab7084956307e875e6bc078ea677d04267e0
test/extractor-tests/generated/KeyPathComponent/KeyPathComponent.ql 3fa617f8ed1b308d0c56f429ee8abe6d33ef60bf57d87f6dc89fdc8fe969a102 c2fa3153077dbe9e0fc608524dc03c82ff4ed460364d341ee6a817b0d75291c3
test/extractor-tests/generated/decl/Accessor/Accessor.ql 7e50dd3c4119162bbfa3e2461300d876c60321d4b6473ddd35e0cb992108570e eb81ed8db92bff46974079e0f1100cf94bd639191a36db45ee9e65467abb6e38
test/extractor-tests/generated/decl/Accessor/Accessor.ql 3d4301ec9ec6284b547f8cccf94c3077f0baf70778f458bc21bebc5de55c86e5 2f263e79ecd1ac8da56c17caff400fd3c40d83b6aa3d501830f1d2eeb48a57cd
test/extractor-tests/generated/decl/AssociatedTypeDecl/AssociatedTypeDecl.ql 55a78a6b96a17532178a39bd39aa4df23295f98019bb00de041ba15dfd4f84d9 51dbcd86203d5d031d748f77943a81c2c50de4ff559af20a4a1a682a19978d4f
test/extractor-tests/generated/decl/CapturedDecl/CapturedDecl.ql fd62be6c38d39f371c20e8c2f233e37a9da5aa234588920634f5db67e8beb3bd d51d35d4fd6a21cd596e064e0221d0c86e36312412a9bd4e64f431c123f3019a
test/extractor-tests/generated/decl/ClassDecl/ClassDecl.ql d5fa7f68307e2e3e7ad060a125bda148e4a28f6acbef08a1a975bbf9ba947641 46d1e4f801414f1c869601dc706e41393e5fcd399e51da593c1e58737f6ff427

View File

@@ -18,6 +18,14 @@ module Impl {
decl.isUnsafeAddress() and kind = "unsafeAddress"
or
decl.isUnsafeMutableAddress() and kind = "unsafeMutableAddress"
or
decl.isDistributedGet() and kind = "distributed get"
or
decl.isRead2() and kind = "read"
or
decl.isModify2() and kind = "modify"
or
decl.isInit() and kind = "init"
}
class Accessor extends Generated::Accessor {

View File

@@ -876,6 +876,26 @@ module Raw {
* Holds if this accessor is an `unsafeMutableAddress` mutable addressor.
*/
predicate isUnsafeMutableAddress() { accessor_is_unsafe_mutable_address(this) }
/**
* Holds if this accessor is a distributed getter.
*/
predicate isDistributedGet() { accessor_is_distributed_get(this) }
/**
* Holds if this accessor is a `read` coroutine, yielding a borrowed value of the property.
*/
predicate isRead2() { accessor_is_read2(this) }
/**
* Holds if this accessor is a `modify` coroutine, yielding an inout value of the property.
*/
predicate isModify2() { accessor_is_modify2(this) }
/**
* Holds if this accessor is an `init` accessor.
*/
predicate isInit() { accessor_is_init(this) }
}
/**

View File

@@ -63,5 +63,27 @@ module Generated {
predicate isUnsafeMutableAddress() {
Synth::convertAccessorToRaw(this).(Raw::Accessor).isUnsafeMutableAddress()
}
/**
* Holds if this accessor is a distributed getter.
*/
predicate isDistributedGet() {
Synth::convertAccessorToRaw(this).(Raw::Accessor).isDistributedGet()
}
/**
* Holds if this accessor is a `read` coroutine, yielding a borrowed value of the property.
*/
predicate isRead2() { Synth::convertAccessorToRaw(this).(Raw::Accessor).isRead2() }
/**
* Holds if this accessor is a `modify` coroutine, yielding an inout value of the property.
*/
predicate isModify2() { Synth::convertAccessorToRaw(this).(Raw::Accessor).isModify2() }
/**
* Holds if this accessor is an `init` accessor.
*/
predicate isInit() { Synth::convertAccessorToRaw(this).(Raw::Accessor).isInit() }
}
}

View File

@@ -683,6 +683,26 @@ accessor_is_unsafe_mutable_address( //dir=decl
int id: @accessor ref
);
#keyset[id]
accessor_is_distributed_get( //dir=decl
int id: @accessor ref
);
#keyset[id]
accessor_is_read2( //dir=decl
int id: @accessor ref
);
#keyset[id]
accessor_is_modify2( //dir=decl
int id: @accessor ref
);
#keyset[id]
accessor_is_init( //dir=decl
int id: @accessor ref
);
associated_type_decls( //dir=decl
unique int id: @associated_type_decl
);

View File

@@ -86,7 +86,7 @@ struct HasPropertyAndObserver {
}
}
// A field can be marked as read-only by dirctly implementing
// A field can be marked as read-only by directly implementing
// the getter between the braces.
var readOnlyField1: Int {
return 0

View File

@@ -1,43 +1,57 @@
instances
| accessors.swift:2:9:2:9 | _modify | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (inout Foo) -> () -> () | isGetter: | no | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | yes | isUnsafeAddress: | no | isUnsafeMutableAddress: | no |
| accessors.swift:2:9:2:9 | get | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (Foo) -> () -> Int | isGetter: | yes | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no |
| accessors.swift:2:9:2:9 | set | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (inout Foo) -> (Int) -> () | isGetter: | no | isSetter: | yes | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no |
| accessors.swift:3:9:3:9 | _modify | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (inout Foo) -> () -> () | isGetter: | no | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | yes | isUnsafeAddress: | no | isUnsafeMutableAddress: | no |
| accessors.swift:4:9:4:28 | get | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (Foo) -> () -> Int | isGetter: | yes | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no |
| accessors.swift:5:9:5:42 | set | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (inout Foo) -> (Int) -> () | isGetter: | no | isSetter: | yes | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no |
| accessors.swift:7:9:7:9 | _modify | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (inout Foo) -> () -> () | isGetter: | no | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | yes | isUnsafeAddress: | no | isUnsafeMutableAddress: | no |
| accessors.swift:7:9:7:9 | get | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (Foo) -> () -> Int | isGetter: | yes | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no |
| accessors.swift:7:9:7:9 | set | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (inout Foo) -> (Int) -> () | isGetter: | no | isSetter: | yes | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no |
| accessors.swift:8:9:8:29 | willSet | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (inout Foo) -> (Int) -> () | isGetter: | no | isSetter: | no | isWillSet: | yes | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no |
| accessors.swift:11:9:11:9 | _modify | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (inout Foo) -> () -> () | isGetter: | no | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | yes | isUnsafeAddress: | no | isUnsafeMutableAddress: | no |
| accessors.swift:11:9:11:9 | get | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (Foo) -> () -> Int | isGetter: | yes | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no |
| accessors.swift:11:9:11:9 | set | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (inout Foo) -> (Int) -> () | isGetter: | no | isSetter: | yes | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no |
| accessors.swift:12:9:12:19 | willSet | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (inout Foo) -> (Int) -> () | isGetter: | no | isSetter: | no | isWillSet: | yes | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no |
| accessors.swift:15:9:15:9 | _modify | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (inout Foo) -> () -> () | isGetter: | no | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | yes | isUnsafeAddress: | no | isUnsafeMutableAddress: | no |
| accessors.swift:15:9:15:9 | get | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (Foo) -> () -> Int | isGetter: | yes | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no |
| accessors.swift:15:9:15:9 | set | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (inout Foo) -> (Int) -> () | isGetter: | no | isSetter: | yes | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no |
| accessors.swift:16:9:16:28 | didSet | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (inout Foo) -> (Int) -> () | isGetter: | no | isSetter: | no | isWillSet: | no | isDidSet: | yes | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no |
| accessors.swift:19:9:19:9 | _modify | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (inout Foo) -> () -> () | isGetter: | no | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | yes | isUnsafeAddress: | no | isUnsafeMutableAddress: | no |
| accessors.swift:19:9:19:9 | get | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (Foo) -> () -> Int | isGetter: | yes | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no |
| accessors.swift:19:9:19:9 | set | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (inout Foo) -> (Int) -> () | isGetter: | no | isSetter: | yes | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no |
| accessors.swift:20:9:20:18 | didSet | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (inout Foo) -> () -> () | isGetter: | no | isSetter: | no | isWillSet: | no | isDidSet: | yes | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no |
| accessors.swift:23:9:23:9 | _modify | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (inout Foo) -> () -> () | isGetter: | no | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | yes | isUnsafeAddress: | no | isUnsafeMutableAddress: | no |
| accessors.swift:23:9:23:9 | get | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (Foo) -> () -> Int | isGetter: | yes | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no |
| accessors.swift:23:9:23:9 | set | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (inout Foo) -> (Int) -> () | isGetter: | no | isSetter: | yes | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no |
| accessors.swift:24:9:24:19 | willSet | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (inout Foo) -> (Int) -> () | isGetter: | no | isSetter: | no | isWillSet: | yes | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no |
| accessors.swift:26:9:26:18 | didSet | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (inout Foo) -> () -> () | isGetter: | no | isSetter: | no | isWillSet: | no | isDidSet: | yes | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no |
| accessors.swift:29:9:29:9 | get | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (Foo) -> () -> Int | isGetter: | yes | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no |
| accessors.swift:29:9:29:9 | set | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (inout Foo) -> (Int) -> () | isGetter: | no | isSetter: | yes | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no |
| accessors.swift:30:9:32:9 | _read | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (Foo) -> () -> () | isGetter: | no | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | yes | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no |
| accessors.swift:33:9:35:9 | _modify | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (inout Foo) -> () -> () | isGetter: | no | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | yes | isUnsafeAddress: | no | isUnsafeMutableAddress: | no |
| accessors.swift:38:9:38:9 | _modify | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (inout Foo) -> () -> () | isGetter: | no | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | yes | isUnsafeAddress: | no | isUnsafeMutableAddress: | no |
| accessors.swift:38:9:38:9 | get | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (Foo) -> () -> Int | isGetter: | yes | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no |
| accessors.swift:38:9:38:9 | set | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (inout Foo) -> (Int) -> () | isGetter: | no | isSetter: | yes | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no |
| accessors.swift:39:9:41:9 | unsafeAddress | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (Foo) -> () -> UnsafePointer<Int> | isGetter: | no | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | yes | isUnsafeMutableAddress: | no |
| accessors.swift:42:9:44:9 | unsafeMutableAddress | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (inout Foo) -> () -> UnsafeMutablePointer<Int> | isGetter: | no | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | yes |
| accessors2.swift:2:9:2:9 | get | getModule: | file://:0:0:0:0 | accessors2 | getInterfaceType: | (Foo2) -> () -> Int | isGetter: | yes | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | isDistributedGet: | no | isRead2: | no | isModify2: | no | isInit: | no |
| accessors2.swift:2:9:2:9 | modify | getModule: | file://:0:0:0:0 | accessors2 | getInterfaceType: | (inout Foo2) -> () -> () | isGetter: | no | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | isDistributedGet: | no | isRead2: | no | isModify2: | yes | isInit: | no |
| accessors2.swift:2:9:2:9 | set | getModule: | file://:0:0:0:0 | accessors2 | getInterfaceType: | (inout Foo2) -> (Int) -> () | isGetter: | no | isSetter: | yes | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | isDistributedGet: | no | isRead2: | no | isModify2: | no | isInit: | no |
| accessors2.swift:3:9:3:9 | set | getModule: | file://:0:0:0:0 | accessors2 | getInterfaceType: | (inout Foo2) -> (Int) -> () | isGetter: | no | isSetter: | yes | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | isDistributedGet: | no | isRead2: | no | isModify2: | no | isInit: | no |
| accessors2.swift:4:9:6:9 | read | getModule: | file://:0:0:0:0 | accessors2 | getInterfaceType: | (Foo2) -> () -> () | isGetter: | no | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | isDistributedGet: | no | isRead2: | yes | isModify2: | no | isInit: | no |
| accessors2.swift:7:9:9:9 | modify | getModule: | file://:0:0:0:0 | accessors2 | getInterfaceType: | (inout Foo2) -> () -> () | isGetter: | no | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | isDistributedGet: | no | isRead2: | no | isModify2: | yes | isInit: | no |
| accessors.swift:2:9:2:9 | _modify | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (inout Foo) -> () -> () | isGetter: | no | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | yes | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | isDistributedGet: | no | isRead2: | no | isModify2: | no | isInit: | no |
| accessors.swift:2:9:2:9 | get | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (Foo) -> () -> Int | isGetter: | yes | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | isDistributedGet: | no | isRead2: | no | isModify2: | no | isInit: | no |
| accessors.swift:2:9:2:9 | set | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (inout Foo) -> (Int) -> () | isGetter: | no | isSetter: | yes | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | isDistributedGet: | no | isRead2: | no | isModify2: | no | isInit: | no |
| accessors.swift:3:9:3:9 | _modify | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (inout Foo) -> () -> () | isGetter: | no | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | yes | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | isDistributedGet: | no | isRead2: | no | isModify2: | no | isInit: | no |
| accessors.swift:4:9:4:28 | get | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (Foo) -> () -> Int | isGetter: | yes | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | isDistributedGet: | no | isRead2: | no | isModify2: | no | isInit: | no |
| accessors.swift:5:9:5:42 | set | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (inout Foo) -> (Int) -> () | isGetter: | no | isSetter: | yes | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | isDistributedGet: | no | isRead2: | no | isModify2: | no | isInit: | no |
| accessors.swift:7:9:7:9 | _modify | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (inout Foo) -> () -> () | isGetter: | no | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | yes | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | isDistributedGet: | no | isRead2: | no | isModify2: | no | isInit: | no |
| accessors.swift:7:9:7:9 | get | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (Foo) -> () -> Int | isGetter: | yes | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | isDistributedGet: | no | isRead2: | no | isModify2: | no | isInit: | no |
| accessors.swift:7:9:7:9 | set | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (inout Foo) -> (Int) -> () | isGetter: | no | isSetter: | yes | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | isDistributedGet: | no | isRead2: | no | isModify2: | no | isInit: | no |
| accessors.swift:8:9:8:29 | willSet | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (inout Foo) -> (Int) -> () | isGetter: | no | isSetter: | no | isWillSet: | yes | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | isDistributedGet: | no | isRead2: | no | isModify2: | no | isInit: | no |
| accessors.swift:11:9:11:9 | _modify | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (inout Foo) -> () -> () | isGetter: | no | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | yes | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | isDistributedGet: | no | isRead2: | no | isModify2: | no | isInit: | no |
| accessors.swift:11:9:11:9 | get | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (Foo) -> () -> Int | isGetter: | yes | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | isDistributedGet: | no | isRead2: | no | isModify2: | no | isInit: | no |
| accessors.swift:11:9:11:9 | set | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (inout Foo) -> (Int) -> () | isGetter: | no | isSetter: | yes | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | isDistributedGet: | no | isRead2: | no | isModify2: | no | isInit: | no |
| accessors.swift:12:9:12:19 | willSet | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (inout Foo) -> (Int) -> () | isGetter: | no | isSetter: | no | isWillSet: | yes | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | isDistributedGet: | no | isRead2: | no | isModify2: | no | isInit: | no |
| accessors.swift:15:9:15:9 | _modify | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (inout Foo) -> () -> () | isGetter: | no | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | yes | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | isDistributedGet: | no | isRead2: | no | isModify2: | no | isInit: | no |
| accessors.swift:15:9:15:9 | get | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (Foo) -> () -> Int | isGetter: | yes | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | isDistributedGet: | no | isRead2: | no | isModify2: | no | isInit: | no |
| accessors.swift:15:9:15:9 | set | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (inout Foo) -> (Int) -> () | isGetter: | no | isSetter: | yes | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | isDistributedGet: | no | isRead2: | no | isModify2: | no | isInit: | no |
| accessors.swift:16:9:16:28 | didSet | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (inout Foo) -> (Int) -> () | isGetter: | no | isSetter: | no | isWillSet: | no | isDidSet: | yes | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | isDistributedGet: | no | isRead2: | no | isModify2: | no | isInit: | no |
| accessors.swift:19:9:19:9 | _modify | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (inout Foo) -> () -> () | isGetter: | no | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | yes | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | isDistributedGet: | no | isRead2: | no | isModify2: | no | isInit: | no |
| accessors.swift:19:9:19:9 | get | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (Foo) -> () -> Int | isGetter: | yes | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | isDistributedGet: | no | isRead2: | no | isModify2: | no | isInit: | no |
| accessors.swift:19:9:19:9 | set | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (inout Foo) -> (Int) -> () | isGetter: | no | isSetter: | yes | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | isDistributedGet: | no | isRead2: | no | isModify2: | no | isInit: | no |
| accessors.swift:20:9:20:18 | didSet | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (inout Foo) -> () -> () | isGetter: | no | isSetter: | no | isWillSet: | no | isDidSet: | yes | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | isDistributedGet: | no | isRead2: | no | isModify2: | no | isInit: | no |
| accessors.swift:23:9:23:9 | _modify | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (inout Foo) -> () -> () | isGetter: | no | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | yes | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | isDistributedGet: | no | isRead2: | no | isModify2: | no | isInit: | no |
| accessors.swift:23:9:23:9 | get | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (Foo) -> () -> Int | isGetter: | yes | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | isDistributedGet: | no | isRead2: | no | isModify2: | no | isInit: | no |
| accessors.swift:23:9:23:9 | set | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (inout Foo) -> (Int) -> () | isGetter: | no | isSetter: | yes | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | isDistributedGet: | no | isRead2: | no | isModify2: | no | isInit: | no |
| accessors.swift:24:9:24:19 | willSet | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (inout Foo) -> (Int) -> () | isGetter: | no | isSetter: | no | isWillSet: | yes | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | isDistributedGet: | no | isRead2: | no | isModify2: | no | isInit: | no |
| accessors.swift:26:9:26:18 | didSet | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (inout Foo) -> () -> () | isGetter: | no | isSetter: | no | isWillSet: | no | isDidSet: | yes | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | isDistributedGet: | no | isRead2: | no | isModify2: | no | isInit: | no |
| accessors.swift:29:9:29:9 | get | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (Foo) -> () -> Int | isGetter: | yes | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | isDistributedGet: | no | isRead2: | no | isModify2: | no | isInit: | no |
| accessors.swift:29:9:29:9 | set | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (inout Foo) -> (Int) -> () | isGetter: | no | isSetter: | yes | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | isDistributedGet: | no | isRead2: | no | isModify2: | no | isInit: | no |
| accessors.swift:30:9:32:9 | _read | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (Foo) -> () -> () | isGetter: | no | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | yes | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | isDistributedGet: | no | isRead2: | no | isModify2: | no | isInit: | no |
| accessors.swift:33:9:35:9 | _modify | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (inout Foo) -> () -> () | isGetter: | no | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | yes | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | isDistributedGet: | no | isRead2: | no | isModify2: | no | isInit: | no |
| accessors.swift:38:9:38:9 | _modify | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (inout Foo) -> () -> () | isGetter: | no | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | yes | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | isDistributedGet: | no | isRead2: | no | isModify2: | no | isInit: | no |
| accessors.swift:38:9:38:9 | get | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (Foo) -> () -> Int | isGetter: | yes | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | isDistributedGet: | no | isRead2: | no | isModify2: | no | isInit: | no |
| accessors.swift:38:9:38:9 | set | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (inout Foo) -> (Int) -> () | isGetter: | no | isSetter: | yes | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | isDistributedGet: | no | isRead2: | no | isModify2: | no | isInit: | no |
| accessors.swift:39:9:41:9 | unsafeAddress | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (Foo) -> () -> UnsafePointer<Int> | isGetter: | no | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | yes | isUnsafeMutableAddress: | no | isDistributedGet: | no | isRead2: | no | isModify2: | no | isInit: | no |
| accessors.swift:42:9:44:9 | unsafeMutableAddress | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (inout Foo) -> () -> UnsafeMutablePointer<Int> | isGetter: | no | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | yes | isDistributedGet: | no | isRead2: | no | isModify2: | no | isInit: | no |
| accessors.swift:48:9:48:16 | init | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (inout Foo) -> (Int) -> () | isGetter: | no | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | isDistributedGet: | no | isRead2: | no | isModify2: | no | isInit: | yes |
| accessors.swift:50:9:50:18 | get | getModule: | file://:0:0:0:0 | accessors | getInterfaceType: | (Foo) -> () -> Int | isGetter: | yes | isSetter: | no | isWillSet: | no | isDidSet: | no | isRead: | no | isModify: | no | isUnsafeAddress: | no | isUnsafeMutableAddress: | no | isDistributedGet: | no | isRead2: | no | isModify2: | no | isInit: | no |
getGenericTypeParam
getMember
getName
| accessors2.swift:2:9:2:9 | get | (unnamed function decl) |
| accessors2.swift:2:9:2:9 | modify | (unnamed function decl) |
| accessors2.swift:2:9:2:9 | set | (unnamed function decl) |
| accessors2.swift:3:9:3:9 | set | (unnamed function decl) |
| accessors2.swift:4:9:6:9 | read | (unnamed function decl) |
| accessors2.swift:7:9:9:9 | modify | (unnamed function decl) |
| accessors.swift:2:9:2:9 | _modify | (unnamed function decl) |
| accessors.swift:2:9:2:9 | get | (unnamed function decl) |
| accessors.swift:2:9:2:9 | set | (unnamed function decl) |
@@ -74,7 +88,15 @@ getName
| accessors.swift:38:9:38:9 | set | (unnamed function decl) |
| accessors.swift:39:9:41:9 | unsafeAddress | (unnamed function decl) |
| accessors.swift:42:9:44:9 | unsafeMutableAddress | (unnamed function decl) |
| accessors.swift:48:9:48:16 | init | (unnamed function decl) |
| accessors.swift:50:9:50:18 | get | (unnamed function decl) |
getSelfParam
| accessors2.swift:2:9:2:9 | get | accessors2.swift:2:9:2:9 | self |
| accessors2.swift:2:9:2:9 | modify | accessors2.swift:2:9:2:9 | self |
| accessors2.swift:2:9:2:9 | set | accessors2.swift:2:9:2:9 | self |
| accessors2.swift:3:9:3:9 | set | accessors2.swift:3:9:3:9 | self |
| accessors2.swift:4:9:6:9 | read | accessors2.swift:4:9:4:9 | self |
| accessors2.swift:7:9:9:9 | modify | accessors2.swift:7:9:7:9 | self |
| accessors.swift:2:9:2:9 | _modify | accessors.swift:2:9:2:9 | self |
| accessors.swift:2:9:2:9 | get | accessors.swift:2:9:2:9 | self |
| accessors.swift:2:9:2:9 | set | accessors.swift:2:9:2:9 | self |
@@ -111,7 +133,11 @@ getSelfParam
| accessors.swift:38:9:38:9 | set | accessors.swift:38:9:38:9 | self |
| accessors.swift:39:9:41:9 | unsafeAddress | accessors.swift:39:9:39:9 | self |
| accessors.swift:42:9:44:9 | unsafeMutableAddress | accessors.swift:42:9:42:9 | self |
| accessors.swift:48:9:48:16 | init | accessors.swift:48:9:48:9 | self |
| accessors.swift:50:9:50:18 | get | accessors.swift:50:9:50:9 | self |
getParam
| accessors2.swift:2:9:2:9 | set | 0 | accessors2.swift:2:9:2:9 | value |
| accessors2.swift:3:9:3:9 | set | 0 | accessors2.swift:3:9:3:9 | value |
| accessors.swift:2:9:2:9 | set | 0 | accessors.swift:2:9:2:9 | value |
| accessors.swift:5:9:5:42 | set | 0 | accessors.swift:5:13:5:13 | newValue |
| accessors.swift:7:9:7:9 | set | 0 | accessors.swift:7:9:7:9 | value |
@@ -125,7 +151,14 @@ getParam
| accessors.swift:24:9:24:19 | willSet | 0 | accessors.swift:24:9:24:9 | newValue |
| accessors.swift:29:9:29:9 | set | 0 | accessors.swift:29:9:29:9 | value |
| accessors.swift:38:9:38:9 | set | 0 | accessors.swift:38:9:38:9 | value |
| accessors.swift:48:9:48:16 | init | 0 | accessors.swift:48:9:48:9 | newValue |
getBody
| accessors2.swift:2:9:2:9 | get | accessors2.swift:2:9:2:9 | { ... } |
| accessors2.swift:2:9:2:9 | modify | accessors2.swift:2:9:2:9 | { ... } |
| accessors2.swift:2:9:2:9 | set | accessors2.swift:2:9:2:9 | { ... } |
| accessors2.swift:3:9:3:9 | set | accessors2.swift:3:9:3:9 | { ... } |
| accessors2.swift:4:9:6:9 | read | accessors2.swift:4:14:6:9 | { ... } |
| accessors2.swift:7:9:9:9 | modify | accessors2.swift:7:16:9:9 | { ... } |
| accessors.swift:2:9:2:9 | _modify | accessors.swift:2:9:2:9 | { ... } |
| accessors.swift:2:9:2:9 | get | accessors.swift:2:9:2:9 | { ... } |
| accessors.swift:2:9:2:9 | set | accessors.swift:2:9:2:9 | { ... } |
@@ -162,4 +195,6 @@ getBody
| accessors.swift:38:9:38:9 | set | accessors.swift:38:9:38:9 | { ... } |
| accessors.swift:39:9:41:9 | unsafeAddress | accessors.swift:39:23:41:9 | { ... } |
| accessors.swift:42:9:44:9 | unsafeMutableAddress | accessors.swift:42:30:44:9 | { ... } |
| accessors.swift:48:9:48:16 | init | accessors.swift:48:14:48:16 | { ... } |
| accessors.swift:50:9:50:18 | get | accessors.swift:50:13:50:18 | { ... } |
getCapture

View File

@@ -8,7 +8,9 @@ query predicate instances(
string isSetter, string isWillSet__label, string isWillSet, string isDidSet__label,
string isDidSet, string isRead__label, string isRead, string isModify__label, string isModify,
string isUnsafeAddress__label, string isUnsafeAddress, string isUnsafeMutableAddress__label,
string isUnsafeMutableAddress
string isUnsafeMutableAddress, string isDistributedGet__label, string isDistributedGet,
string isRead2__label, string isRead2, string isModify2__label, string isModify2,
string isInit__label, string isInit
) {
toBeTested(x) and
not x.isUnknown() and
@@ -31,9 +33,19 @@ query predicate instances(
isUnsafeAddress__label = "isUnsafeAddress:" and
(if x.isUnsafeAddress() then isUnsafeAddress = "yes" else isUnsafeAddress = "no") and
isUnsafeMutableAddress__label = "isUnsafeMutableAddress:" and
if x.isUnsafeMutableAddress()
then isUnsafeMutableAddress = "yes"
else isUnsafeMutableAddress = "no"
(
if x.isUnsafeMutableAddress()
then isUnsafeMutableAddress = "yes"
else isUnsafeMutableAddress = "no"
) and
isDistributedGet__label = "isDistributedGet:" and
(if x.isDistributedGet() then isDistributedGet = "yes" else isDistributedGet = "no") and
isRead2__label = "isRead2:" and
(if x.isRead2() then isRead2 = "yes" else isRead2 = "no") and
isModify2__label = "isModify2:" and
(if x.isModify2() then isModify2 = "yes" else isModify2 = "no") and
isInit__label = "isInit:" and
if x.isInit() then isInit = "yes" else isInit = "no"
}
query predicate getGenericTypeParam(Accessor x, int index, GenericTypeParamDecl getGenericTypeParam) {

View File

@@ -43,4 +43,10 @@ struct Foo {
return UnsafeMutablePointer<Int>(bitPattern: 0)!
}
}
var hasInit: Int {
init { }
get { 42 }
}
}

View File

@@ -0,0 +1,13 @@
struct Foo2 {
var x = 11
var borrowedProp: Int {
read {
yield x
}
modify {
yield &x
}
}
}
//codeql-extractor-options: -enable-experimental-feature CoroutineAccessors

View File

@@ -315,6 +315,10 @@ class Accessor(AccessorOrNamedFunction):
is_modify: predicate | doc('this accessor is a `_modify` coroutine, yielding an inout value of the property')
is_unsafe_address: predicate | doc('this accessor is an `unsafeAddress` immutable addressor')
is_unsafe_mutable_address: predicate | doc('this accessor is an `unsafeMutableAddress` mutable addressor')
is_distributed_get: predicate | doc('this accessor is a distributed getter')
is_read2: predicate | doc('this accessor is a `read` coroutine, yielding a borrowed value of the property')
is_modify2: predicate | doc('this accessor is a `modify` coroutine, yielding an inout value of the property')
is_init: predicate | doc('this accessor is an `init` accessor')
class AssociatedTypeDecl(AbstractTypeParamDecl):
pass