mirror of
https://github.com/github/codeql.git
synced 2025-12-16 16:53:25 +01:00
Swift: extract MacroDecl
This commit is contained in:
@@ -36,7 +36,8 @@ class SwiftDispatcher {
|
||||
const swift::TypeBase*,
|
||||
const swift::CapturedValue*,
|
||||
const swift::PoundAvailableInfo*,
|
||||
const swift::AvailabilitySpec*>;
|
||||
const swift::AvailabilitySpec*,
|
||||
const swift::MacroRoleAttr*>;
|
||||
|
||||
public:
|
||||
// all references and pointers passed as parameters to this constructor are supposed to outlive
|
||||
@@ -334,6 +335,7 @@ class SwiftDispatcher {
|
||||
virtual void visit(const swift::TypeRepr* typeRepr, swift::Type type) = 0;
|
||||
virtual void visit(const swift::TypeBase* type) = 0;
|
||||
virtual void visit(const swift::CapturedValue* capture) = 0;
|
||||
virtual void visit(const swift::MacroRoleAttr* attr) = 0;
|
||||
|
||||
template <typename T>
|
||||
requires(!std::derived_from<T, swift::TypeRepr>) void visit(const T* e, swift::Type) { visit(e); }
|
||||
|
||||
@@ -28,6 +28,13 @@ concept HasStartAndEndLoc = requires(T e) {
|
||||
}
|
||||
&&!(HasSourceRange<T>);
|
||||
|
||||
template <typename T>
|
||||
concept HasLAndRParenLoc = requires(T e) {
|
||||
e.getLParenLoc();
|
||||
e.getRParenLoc();
|
||||
}
|
||||
&&!(HasSourceRange<T>)&&!(HasStartAndEndLoc<T>);
|
||||
|
||||
template <typename T>
|
||||
concept HasOneLoc = requires(T e) {
|
||||
e.getLoc();
|
||||
@@ -50,6 +57,13 @@ swift::SourceRange getSourceRange(const HasStartAndEndLoc auto& locatable) {
|
||||
return {locatable.getStartLoc()};
|
||||
}
|
||||
|
||||
swift::SourceRange getSourceRange(const HasLAndRParenLoc auto& locatable) {
|
||||
if (locatable.getLParenLoc() && locatable.getRParenLoc()) {
|
||||
return {locatable.getLParenLoc(), locatable.getRParenLoc()};
|
||||
}
|
||||
return {locatable.getLParenLoc()};
|
||||
}
|
||||
|
||||
swift::SourceRange getSourceRange(const HasOneLoc auto& locatable) {
|
||||
return {locatable.getLoc()};
|
||||
}
|
||||
|
||||
@@ -228,7 +228,7 @@ MAP(swift::Decl, DeclTag)
|
||||
MAP(swift::FuncDecl, AccessorOrNamedFunctionTag)
|
||||
MAP_CONCRETE(swift::FuncDecl, NamedFunctionTag)
|
||||
MAP(swift::AccessorDecl, AccessorTag)
|
||||
MAP(swift::MacroDecl, void) // TODO (introduced in 5.8)
|
||||
MAP(swift::MacroDecl, MacroDeclTag)
|
||||
MAP(swift::EnumElementDecl, EnumElementDeclTag)
|
||||
MAP(swift::ExtensionDecl, ExtensionDeclTag)
|
||||
MAP(swift::TopLevelCodeDecl, TopLevelCodeDeclTag)
|
||||
@@ -350,6 +350,7 @@ MAP(swift::AvailabilitySpec, AvailabilitySpecTag)
|
||||
MAP(swift::OtherPlatformAvailabilitySpec, OtherAvailabilitySpecTag)
|
||||
|
||||
MAP(swift::PoundAvailableInfo, AvailabilityInfoTag)
|
||||
MAP(swift::MacroRoleAttr, MacroRoleTag)
|
||||
|
||||
// clang-format on
|
||||
#undef MAP
|
||||
|
||||
@@ -374,4 +374,32 @@ codeql::CapturedDecl DeclTranslator::translateCapturedValue(const swift::Capture
|
||||
entry.is_escaping = !capture.isNoEscape();
|
||||
return entry;
|
||||
}
|
||||
|
||||
codeql::MacroDecl DeclTranslator::translateMacroDecl(const swift::MacroDecl& decl) {
|
||||
auto entry = createEntry(decl);
|
||||
fillValueDecl(decl, entry);
|
||||
fillGenericContext(decl, entry);
|
||||
entry.name = constructName(decl.getName());
|
||||
for (auto attr : decl.getAttrs().getAttributes<swift::MacroRoleAttr>()) {
|
||||
entry.roles.emplace_back(dispatcher.fetchLabel(attr));
|
||||
}
|
||||
if (decl.getParameterList()) {
|
||||
for (auto param : *decl.getParameterList()) {
|
||||
entry.parameters.emplace_back(dispatcher.fetchLabel(param));
|
||||
}
|
||||
}
|
||||
return entry;
|
||||
}
|
||||
|
||||
codeql::MacroRole DeclTranslator::translateMacroRoleAttr(const swift::MacroRoleAttr& attr) {
|
||||
auto entry = dispatcher.createEntry(attr);
|
||||
entry.kind = static_cast<uint32_t>(attr.getMacroRole());
|
||||
entry.macro_syntax = static_cast<uint8_t>(attr.getMacroSyntax());
|
||||
entry.conformances = dispatcher.fetchRepeatedLabels(attr.getConformances());
|
||||
for (auto& declName : attr.getNames()) {
|
||||
entry.names.emplace_back(constructName(declName.getName()));
|
||||
}
|
||||
return entry;
|
||||
}
|
||||
|
||||
} // namespace codeql
|
||||
|
||||
@@ -49,6 +49,8 @@ class DeclTranslator : public AstTranslatorBase<DeclTranslator> {
|
||||
codeql::PoundDiagnosticDecl translatePoundDiagnosticDecl(const swift::PoundDiagnosticDecl& decl);
|
||||
codeql::MissingMemberDecl translateMissingMemberDecl(const swift::MissingMemberDecl& decl);
|
||||
codeql::CapturedDecl translateCapturedValue(const swift::CapturedValue& capture);
|
||||
codeql::MacroDecl translateMacroDecl(const swift::MacroDecl& decl);
|
||||
codeql::MacroRole translateMacroRoleAttr(const swift::MacroRoleAttr& attr);
|
||||
|
||||
private:
|
||||
void fillFunction(const swift::AbstractFunctionDecl& decl, codeql::Function& entry);
|
||||
|
||||
@@ -53,6 +53,8 @@ class SwiftVisitor : private SwiftDispatcher {
|
||||
declTranslator.translateAndEmit(*capture);
|
||||
}
|
||||
|
||||
void visit(const swift::MacroRoleAttr* attr) override { declTranslator.translateAndEmit(*attr); }
|
||||
|
||||
DeclTranslator declTranslator{*this};
|
||||
ExprTranslator exprTranslator{*this};
|
||||
StmtTranslator stmtTranslator{*this};
|
||||
|
||||
@@ -89,6 +89,10 @@ class AstTranslatorBase : private swift::ASTVisitor<CrtpSubclass>,
|
||||
dispatcher.emit(static_cast<CrtpSubclass*>(this)->translateCapturedValue(e));
|
||||
}
|
||||
|
||||
void translateAndEmit(const swift::MacroRoleAttr& attr) {
|
||||
dispatcher.emit(static_cast<CrtpSubclass*>(this)->translateMacroRoleAttr(attr));
|
||||
}
|
||||
|
||||
private:
|
||||
friend class swift::ASTVisitor<CrtpSubclass>;
|
||||
|
||||
|
||||
23
swift/ql/.generated.list
generated
23
swift/ql/.generated.list
generated
@@ -8,6 +8,7 @@ lib/codeql/swift/elements/DbLocationConstructor.qll f98d927f2cc2b0b5de51eee3e0b6
|
||||
lib/codeql/swift/elements/DiagnosticsConstructor.qll 5212997161b95b0b10e7707843c9d3f9bf760af7a8646f26c5793507b5162224 2b9fbc9d84048d3dffa782db049e1ecdaaa1696744515e28ac4421ab265a5f67
|
||||
lib/codeql/swift/elements/ErrorElement.qll 04ae29b98554b888ac180be66ffb47d157de85d27c9de50bbc5e065e20559f7f 558d0f0bb3a8fea91456aeb395cf7aaf8ff5d253f19defbc05caecec35b70e19
|
||||
lib/codeql/swift/elements/KeyPathComponentConstructor.qll ff71795157639520f56ce99ed49bf25486c125a0f27a3bb3ba2c8492feca13b2 5875187267cf91e37426d817a6c0c5e7ba9ddb0bd840ad358338ba003e0a877c
|
||||
lib/codeql/swift/elements/MacroRoleConstructor.qll c45c189fd441e2c23b1c94dec9f357192f5e392051e0becf52c020d830e38e54 e281ef4ba76a6e4b2b689e00f542ef585cec7a540911ccd7fbb59f3232f08a3d
|
||||
lib/codeql/swift/elements/OtherAvailabilitySpecConstructor.qll c5638ae4f3993c7a111fb2a516667190642c1948f18806cf29f78b7067021d10 cc93ac54741ba952b32385db0fe072576a9c8697cd793bcb8faed98f0fb6bda0
|
||||
lib/codeql/swift/elements/PlatformVersionAvailabilitySpecConstructor.qll 015280737e71fe1084da6056410fd73dc4473a3b3296d0e46c0ca64f07dd5b7f c735c42e45ebdc308a1f02ff15d65d4d1154071e55645a9ae763d6c021d7f601
|
||||
lib/codeql/swift/elements/UnspecifiedElementConstructor.qll f7e232dae7362d0c3f9f33f952d9106da3d273f16b124008919fba6e40a944b6 eb30f05ae09f2c7bc93d758c0870b63f16bf61d0d2446ed827250f89772596ab
|
||||
@@ -36,6 +37,8 @@ lib/codeql/swift/elements/decl/ImportDeclConstructor.qll 1876052c283d9701cf2e2c9
|
||||
lib/codeql/swift/elements/decl/InfixOperatorDecl.qll f3028c9d9da2770b120498dc558f9a447b10e996f6f00c7b7456af2d8b31e314 218a02bb2f10bd7f0add10943a11ba77cb3e416b4cf2e68b7530f825d896ffed
|
||||
lib/codeql/swift/elements/decl/InfixOperatorDeclConstructor.qll 92dc3ac72c1d7b88b61cf9faa8048e6ba3e9af8b17d3bfe91919394e252e2595 d70cc9989101ce7268a6959cbcc8bf8a1e08f69a4c8734a6d85bf6abc668ddea
|
||||
lib/codeql/swift/elements/decl/InitializerConstructor.qll 0741961a1e5d65bf906ae5f2b8e745da30d215624faaca092dd869b33b82db39 72d0c8fc3d6c53923ae7b3f7c2d9eccb556352df69e5fd5566b8cec9eb0c4ee6
|
||||
lib/codeql/swift/elements/decl/MacroDecl.qll 462681b26fbb12700b98691cf7d2f8c4b44401d4ac2cd2960861f304575336c9 62919ba629a041884d6228ac856d3c01a0a45c285d51eadce0a748faa5e78cbc
|
||||
lib/codeql/swift/elements/decl/MacroDeclConstructor.qll fa08d8ba96541d43db4c6908fff8c8f06dce8a40d5eeaba607e20daf16df0a20 b5c1bbd697b5f309afb684e224066ff499bba5e66a1172b9269f7a579420ec40
|
||||
lib/codeql/swift/elements/decl/MissingMemberDeclConstructor.qll f7c299d55d8f14386cade490155cdc7edbe26ef67796a273cc7779d740f5e3a9 377f1fdd4f798506adb297cdc80545b5842acfe33a2187b9dfe2442f59b3120d
|
||||
lib/codeql/swift/elements/decl/ModuleDecl.qll 11e54958739679424525e889de7f0b9f1074e7e123482ee94ac45ab261e33ef8 73917bd8a2985d1d1bfa72e3db20978b56ec30a679cf8fc6c3af3ee54994fb41
|
||||
lib/codeql/swift/elements/decl/ModuleDeclConstructor.qll 51106eb585219a6211a354c4a4ae9ac0dfa088e412145e1218eff1e31f82bf4d f05597e555014a58381b75b44b05b00a03a99e7ce54faf606df1128c1a5bbfd8
|
||||
@@ -383,7 +386,7 @@ lib/codeql/swift/elements/type/UnresolvedTypeConstructor.qll 7f75d489b4d7ce65cae
|
||||
lib/codeql/swift/elements/type/VariadicSequenceTypeConstructor.qll fc74a5a2a2effa28ef24509b20ee4373d97cf6e8c71840121bb031c6adedf584 c9b2effc1d01c13c5e6a74a111122fa79a2f6554dda3cb016d68ba397e566ec4
|
||||
lib/codeql/swift/elements/type/WeakStorageType.qll edd13dd97b53040684409e187c1f975bcada6807c919e1345d8977144dbebb6f 9434c044d264a7f5f503a6422c106c9b8fedf74aaae314174473a29ea6ed17b9
|
||||
lib/codeql/swift/elements/type/WeakStorageTypeConstructor.qll 5fdce3716aba6318522174a2c455a63480970222ae81c732fb19c6dd3ae2d271 60ea79d6943e129deba0deccb566cf9d73f78398b0f7f0212674d91287d6b2ae
|
||||
lib/codeql/swift/elements.qll a3e46884bac3428bdec439ba97c65a69fea02e30b074b585f8db378844215fe3 a3e46884bac3428bdec439ba97c65a69fea02e30b074b585f8db378844215fe3
|
||||
lib/codeql/swift/elements.qll 34a49e70c33620aae14b9370dc6fdc702fbf292c206d9ebfaa23c8e7680480df 34a49e70c33620aae14b9370dc6fdc702fbf292c206d9ebfaa23c8e7680480df
|
||||
lib/codeql/swift/generated/AstNode.qll e00d6a46b16891778531a73722ae0b5842f849328e24aebe88bc30ac9fe438c2 40eaa0072d3ffecbff48d2baf88111daa86ef0f937abf24f032f2495739ef661
|
||||
lib/codeql/swift/generated/AvailabilityInfo.qll e90fbfc3ec6830390e12a4695698d6efd8da4fa6a8a4189f466489a6dd103586 d9545da9e5d0c160679a4147001b4b1c664d9cb85ae1a169dd639c35046d274d
|
||||
lib/codeql/swift/generated/AvailabilitySpec.qll 469bbd39d38dc68f1f6fb2e0766cc25b2f813c804fec44962910d5f7777632a2 57a953a8d5cf7031283393af1b3cfbc7f5941c9062e77950b32e5b5c6ae6b191
|
||||
@@ -398,13 +401,14 @@ lib/codeql/swift/generated/File.qll 1d40b7ffa3a9ecba1820d30ddf6b173d76842a625704
|
||||
lib/codeql/swift/generated/KeyPathComponent.qll 55629a20538d7e8f4f4d4c7484e8bcfdb943857121c3d683bde0a0ff0863f778 2def63385783c17b390971a9916b4934c69c40653bb78bdf07ea7cc6f5f52b73
|
||||
lib/codeql/swift/generated/Locatable.qll 41f040643ea146c8044be49fddea89bdd79efd2469617c863a4b2da0b1af3364 9a964dcbc7f5ffce2ee006ce0c9a9a99a988976fcd0446af2ba1b202911d7396
|
||||
lib/codeql/swift/generated/Location.qll 5b37ecde83a871ef2089cf33e4743fc02d9cf8c676aafd9f157c59ffdb776d6b 076d8d3d2313931e8287d196854acf259700124d9c8bc591a6d36017f314260a
|
||||
lib/codeql/swift/generated/MacroRole.qll b01e4d423f6eceb9cab1717082d19896d0e5b83955bc4169f0c0f8a99e4e59e7 0f523aadb1fb5a980712b2fcc39624bcb65a5ee95e3f49120894d26b3dcf8eba
|
||||
lib/codeql/swift/generated/OtherAvailabilitySpec.qll 31f3667ab0dc5f93230ba876b4101898d2a5a4af306925082305eff3ad9c9c0e 31f3667ab0dc5f93230ba876b4101898d2a5a4af306925082305eff3ad9c9c0e
|
||||
lib/codeql/swift/generated/ParentChild.qll a00f7eecdc91d98ad421c6d883bf2cc6e92c213befdcc494bf8ad25f2c5d4ae2 cd2c70e5940a302108319bdc16d25f49df3165be5b94fa825b64b9b5771f117d
|
||||
lib/codeql/swift/generated/ParentChild.qll fffa8748471139e0143521443cb7bf566db136f932e80e1917e7ab7140389835 c7768c3ad33fb1934b7b8955d09fe1d2978187e8d1f59a9ba0595f5bcb884d2d
|
||||
lib/codeql/swift/generated/PlatformVersionAvailabilitySpec.qll 3483726f6db9d978e40db75068d6a9ecad8f7c06516157fce783b26424bea729 864fedf2901de91f662a6d75a2eb7e26ed1a2a1a875a2b3c4e699dc7e7c4605e
|
||||
lib/codeql/swift/generated/PureSynthConstructors.qll 40f5c0c573ce12f16322d9efb12306750f672254cbc36a200c298cb08e504229 40f5c0c573ce12f16322d9efb12306750f672254cbc36a200c298cb08e504229
|
||||
lib/codeql/swift/generated/Raw.qll f15f0b35be65adb8027e17b5fd5478eabb5000ee887dafc5c40d8abd03ced3e3 75fc6fbb74e0720b736c13ec3627247c49f8201df929647cdb2985282abf23c1
|
||||
lib/codeql/swift/generated/Synth.qll 93565d0244a9f5bf4ba3f19a0ffabef4b8dc48703c580b905ffeac716eea5445 74d977cfe6fbb3d90579dc45b40254549e686d91eb16999c9e69fec18ab7df28
|
||||
lib/codeql/swift/generated/SynthConstructors.qll fbbf618c54843d86b4c38d7b27e12cce7661b49ce52573f791dd8fcb4bbd40f5 fbbf618c54843d86b4c38d7b27e12cce7661b49ce52573f791dd8fcb4bbd40f5
|
||||
lib/codeql/swift/generated/Raw.qll ed777881152f9adc3f0554f84c4ec1dc26aef7867d8c584b289c0a68ab6a03ad b460429a17b7db7edae1584147e8f019ffbff30b276b4327fef02840f428c40d
|
||||
lib/codeql/swift/generated/Synth.qll 62abfaec75a308f222d8a7b8bb3260a1226977c253e87dbf9fc74f6e35398f53 c45d3237d9bdfb11d0372a5a1997d794a94a7eeeba3938d234bbbf802dacd9ad
|
||||
lib/codeql/swift/generated/SynthConstructors.qll 73604e68bac553fe06b52aa768cd5f876b3cf85ee88bca96f7e2e4db76ef997f 73604e68bac553fe06b52aa768cd5f876b3cf85ee88bca96f7e2e4db76ef997f
|
||||
lib/codeql/swift/generated/UnknownFile.qll 5922b351b55d5becac0c1ad67b8d601bcc9499dce9ee4093b607101e7e299104 5922b351b55d5becac0c1ad67b8d601bcc9499dce9ee4093b607101e7e299104
|
||||
lib/codeql/swift/generated/UnknownLocation.qll 67b8605ff5aaa0f3a8588fee2527eba5ec4e322562159c9af3d53486b7954ee9 67b8605ff5aaa0f3a8588fee2527eba5ec4e322562159c9af3d53486b7954ee9
|
||||
lib/codeql/swift/generated/UnspecifiedElement.qll 01182fee4d5c86b551e89c79d0d645f5e85c0aeeeae9dcafcbd7721c3eb3cc14 cb95ab2b13da080ada10e0a3bd1b00577541c4bfe699cbd19ef45f1e00e7c651
|
||||
@@ -430,6 +434,7 @@ lib/codeql/swift/generated/decl/IfConfigDecl.qll 7c160c739f00cfa5b506ea06e5b968b
|
||||
lib/codeql/swift/generated/decl/ImportDecl.qll fca6efd0f76e6779e1aedab02ab18c3c359b78b35c4757dbe9f30d5cb5a58373 fa1155ea071654121022b5753ae8185e2e1f53fdf518eb0937d7c02f42250a57
|
||||
lib/codeql/swift/generated/decl/InfixOperatorDecl.qll 7d4f13a54691dbc11e0702c79d92fdc8ab2e92e890c36ab908f3b5f170f42134 0c75e5c414fd9da7c4c79bff24034c00f84a1cd62f8a541b92ea9743a3f1a6b7
|
||||
lib/codeql/swift/generated/decl/Initializer.qll cf970fa52ff6f24916f3aa46f395370c2de2066f43f19cccfad4223f43114822 cf970fa52ff6f24916f3aa46f395370c2de2066f43f19cccfad4223f43114822
|
||||
lib/codeql/swift/generated/decl/MacroDecl.qll 41d526611ace3dac100ec6e7969ff0b3ff40b39ee11da0a80fb8cda35144c44c 57b84c79ea34f0c6b2144feeef03c834aea168fe07a680cc57c350bcd1bb2883
|
||||
lib/codeql/swift/generated/decl/MissingMemberDecl.qll 35f756c8b1c0f476b5317815fa2891059982fa6f34f9a483678c3deaf54648f2 afba98cc7d80b2f17f8b575a8daf3467203fe245bcf3898cbdcff1cfc629b000
|
||||
lib/codeql/swift/generated/decl/ModuleDecl.qll b30a949eff21cedb15eb601de28faf28ac10bdca1aad4d805781f75084ecfbcb ace22912ea4cba2ffa2c33cf622bffa0c70e0c9fd30dd655057ac743339d1efe
|
||||
lib/codeql/swift/generated/decl/NamedFunction.qll 4305c3ae8b50eb9e4999bc3ec313f08b8e852737f138dcd6f2afa62e6ffeb0bf 4305c3ae8b50eb9e4999bc3ec313f08b8e852737f138dcd6f2afa62e6ffeb0bf
|
||||
@@ -749,6 +754,14 @@ test/extractor-tests/generated/decl/ImportDecl/ImportDecl_getImportedModule.ql 0
|
||||
test/extractor-tests/generated/decl/ImportDecl/ImportDecl_getMember.ql 6d48d3a93bc96dba3bda71ec9d9d6282615c2228a58da6167c169fafaedb3e17 8560b23d0f52b845c81727ce09c0b2f9647965c83d7de165e8cd3d91be5bdd42
|
||||
test/extractor-tests/generated/decl/InfixOperatorDecl/MISSING_SOURCE.txt 66846d526b0bc4328735c3c4dd9c390a9325da5b5dfd42ec07622f9c7108a7d7 66846d526b0bc4328735c3c4dd9c390a9325da5b5dfd42ec07622f9c7108a7d7
|
||||
test/extractor-tests/generated/decl/Initializer/MISSING_SOURCE.txt 66846d526b0bc4328735c3c4dd9c390a9325da5b5dfd42ec07622f9c7108a7d7 66846d526b0bc4328735c3c4dd9c390a9325da5b5dfd42ec07622f9c7108a7d7
|
||||
test/extractor-tests/generated/decl/MacroDecl/MacroDecl.ql 16900baee88fe4d7d4f88369e7455783b8c2058ee48a2af2136d1d778098854e 6dae3ea092d1810c301ed57841c5c93a5ee0d8f8187552d078ce26a74c1e4630
|
||||
test/extractor-tests/generated/decl/MacroDecl/MacroDecl_getGenericTypeParam.ql ae35558863fc444ca6a034d74e90583a779a2edb755c523d33693a8ab418718f 2031af476afa267b71fe22071f7e9ec97d4872812d333ff733055b7b29ff8386
|
||||
test/extractor-tests/generated/decl/MacroDecl/MacroDecl_getMember.ql 4abbe22e4c2b94b8f5d009386c93710e7a003d7faef7d044481fcb47cc85e85e 9a57fab9011773cfa77db44b1eedf7e2277380640161d708af9d4df6280df3d3
|
||||
test/extractor-tests/generated/decl/MacroDecl/MacroDecl_getParameter.ql 449716b575d0a4caa69cabafeba289d328e12054a1f7aac77d0dd5c47904971f 9649a62096d5fc17e71e527bc1299cbf6a1f38d21f685c86469bc6c83a62268a
|
||||
test/extractor-tests/generated/decl/MacroDecl/MacroDecl_getRole.ql d861b3ac12e38826d6e9ac72b7e6f2b82b4328e6e02bf26ea496635501cd1722 c2b606a39dd68dbeea4709d4c868a66db7ffae720f4163540f6d1e0aaeaafc11
|
||||
test/extractor-tests/generated/decl/MacroDecl/MacroRole.ql cd8c70998a177f14e1b10eb214ffefd62b2c4a7839dc845bf155ddb0888dd4a7 cdad06e902ab61005dcb552d1340754a12fc18a9256f49dd6fb3ccbd34605ef2
|
||||
test/extractor-tests/generated/decl/MacroDecl/MacroRole_getConformance.ql d36aeb229667a5b0153534872523ed84e28cdb9f8400d1f3051c15227e05c793 dc18b70f2e65edc86f12179ba3756dbfc3802dc87f875c2e11d97359b180c767
|
||||
test/extractor-tests/generated/decl/MacroDecl/MacroRole_getName.ql fa339f428f572873f76ace1dea80e643a198bd435a8ce6cc0f38cac870e590f7 fa1a87d0f0a71684c927cb7049efb627eeb42f4d436bcaef196b01e12d0e4aa7
|
||||
test/extractor-tests/generated/decl/ModuleDecl/ModuleDecl.ql d096e82574438b1e6d646b8762217dc74f9f9c40b01d642ef6a0286a55ecad9d 3eae6049885efcd3ffd6117af31cd12d792492b1591a88444a8e4a7fa31ac187
|
||||
test/extractor-tests/generated/decl/ModuleDecl/ModuleDecl_getAnExportedModule.ql 321619519c5cffefda78f11f2c85a199af76fccbfcc51126c7a558ba12fdfd80 30e48eb820ba9d7f3ec30bf4536c0f84280c5f2ca8c63427f6b77d74a092e68b
|
||||
test/extractor-tests/generated/decl/ModuleDecl/ModuleDecl_getAnImportedModule.ql 65fae5b1a7db3a11fd837ed78c663e8907306c36695ae73e4e29559755276fbe 3ddef1a7af7a636e66674fadb3e727ad18655a9ecb4c73fd3d6aca202f1191fb
|
||||
|
||||
13
swift/ql/.gitattributes
generated
vendored
13
swift/ql/.gitattributes
generated
vendored
@@ -10,6 +10,7 @@
|
||||
/lib/codeql/swift/elements/DiagnosticsConstructor.qll linguist-generated
|
||||
/lib/codeql/swift/elements/ErrorElement.qll linguist-generated
|
||||
/lib/codeql/swift/elements/KeyPathComponentConstructor.qll linguist-generated
|
||||
/lib/codeql/swift/elements/MacroRoleConstructor.qll linguist-generated
|
||||
/lib/codeql/swift/elements/OtherAvailabilitySpecConstructor.qll linguist-generated
|
||||
/lib/codeql/swift/elements/PlatformVersionAvailabilitySpecConstructor.qll linguist-generated
|
||||
/lib/codeql/swift/elements/UnspecifiedElementConstructor.qll linguist-generated
|
||||
@@ -38,6 +39,8 @@
|
||||
/lib/codeql/swift/elements/decl/InfixOperatorDecl.qll linguist-generated
|
||||
/lib/codeql/swift/elements/decl/InfixOperatorDeclConstructor.qll linguist-generated
|
||||
/lib/codeql/swift/elements/decl/InitializerConstructor.qll linguist-generated
|
||||
/lib/codeql/swift/elements/decl/MacroDecl.qll linguist-generated
|
||||
/lib/codeql/swift/elements/decl/MacroDeclConstructor.qll linguist-generated
|
||||
/lib/codeql/swift/elements/decl/MissingMemberDeclConstructor.qll linguist-generated
|
||||
/lib/codeql/swift/elements/decl/ModuleDecl.qll linguist-generated
|
||||
/lib/codeql/swift/elements/decl/ModuleDeclConstructor.qll linguist-generated
|
||||
@@ -400,6 +403,7 @@
|
||||
/lib/codeql/swift/generated/KeyPathComponent.qll linguist-generated
|
||||
/lib/codeql/swift/generated/Locatable.qll linguist-generated
|
||||
/lib/codeql/swift/generated/Location.qll linguist-generated
|
||||
/lib/codeql/swift/generated/MacroRole.qll linguist-generated
|
||||
/lib/codeql/swift/generated/OtherAvailabilitySpec.qll linguist-generated
|
||||
/lib/codeql/swift/generated/ParentChild.qll linguist-generated
|
||||
/lib/codeql/swift/generated/PlatformVersionAvailabilitySpec.qll linguist-generated
|
||||
@@ -432,6 +436,7 @@
|
||||
/lib/codeql/swift/generated/decl/ImportDecl.qll linguist-generated
|
||||
/lib/codeql/swift/generated/decl/InfixOperatorDecl.qll linguist-generated
|
||||
/lib/codeql/swift/generated/decl/Initializer.qll linguist-generated
|
||||
/lib/codeql/swift/generated/decl/MacroDecl.qll linguist-generated
|
||||
/lib/codeql/swift/generated/decl/MissingMemberDecl.qll linguist-generated
|
||||
/lib/codeql/swift/generated/decl/ModuleDecl.qll linguist-generated
|
||||
/lib/codeql/swift/generated/decl/NamedFunction.qll linguist-generated
|
||||
@@ -751,6 +756,14 @@
|
||||
/test/extractor-tests/generated/decl/ImportDecl/ImportDecl_getMember.ql linguist-generated
|
||||
/test/extractor-tests/generated/decl/InfixOperatorDecl/MISSING_SOURCE.txt linguist-generated
|
||||
/test/extractor-tests/generated/decl/Initializer/MISSING_SOURCE.txt linguist-generated
|
||||
/test/extractor-tests/generated/decl/MacroDecl/MacroDecl.ql linguist-generated
|
||||
/test/extractor-tests/generated/decl/MacroDecl/MacroDecl_getGenericTypeParam.ql linguist-generated
|
||||
/test/extractor-tests/generated/decl/MacroDecl/MacroDecl_getMember.ql linguist-generated
|
||||
/test/extractor-tests/generated/decl/MacroDecl/MacroDecl_getParameter.ql linguist-generated
|
||||
/test/extractor-tests/generated/decl/MacroDecl/MacroDecl_getRole.ql linguist-generated
|
||||
/test/extractor-tests/generated/decl/MacroDecl/MacroRole.ql linguist-generated
|
||||
/test/extractor-tests/generated/decl/MacroDecl/MacroRole_getConformance.ql linguist-generated
|
||||
/test/extractor-tests/generated/decl/MacroDecl/MacroRole_getName.ql linguist-generated
|
||||
/test/extractor-tests/generated/decl/ModuleDecl/ModuleDecl.ql linguist-generated
|
||||
/test/extractor-tests/generated/decl/ModuleDecl/ModuleDecl_getAnExportedModule.ql linguist-generated
|
||||
/test/extractor-tests/generated/decl/ModuleDecl/ModuleDecl_getAnImportedModule.ql linguist-generated
|
||||
|
||||
2
swift/ql/lib/codeql/swift/elements.qll
generated
2
swift/ql/lib/codeql/swift/elements.qll
generated
@@ -17,6 +17,7 @@ import codeql.swift.elements.File
|
||||
import codeql.swift.elements.KeyPathComponent
|
||||
import codeql.swift.elements.Locatable
|
||||
import codeql.swift.elements.Location
|
||||
import codeql.swift.elements.MacroRole
|
||||
import codeql.swift.elements.OtherAvailabilitySpec
|
||||
import codeql.swift.elements.PlatformVersionAvailabilitySpec
|
||||
import codeql.swift.elements.UnknownFile
|
||||
@@ -43,6 +44,7 @@ import codeql.swift.elements.decl.IfConfigDecl
|
||||
import codeql.swift.elements.decl.ImportDecl
|
||||
import codeql.swift.elements.decl.InfixOperatorDecl
|
||||
import codeql.swift.elements.decl.Initializer
|
||||
import codeql.swift.elements.decl.MacroDecl
|
||||
import codeql.swift.elements.decl.MissingMemberDecl
|
||||
import codeql.swift.elements.decl.ModuleDecl
|
||||
import codeql.swift.elements.decl.NamedFunction
|
||||
|
||||
35
swift/ql/lib/codeql/swift/elements/MacroRole.qll
Normal file
35
swift/ql/lib/codeql/swift/elements/MacroRole.qll
Normal file
@@ -0,0 +1,35 @@
|
||||
/**
|
||||
* This module provides a hand-modifiable wrapper around the generated class `MacroRole`.
|
||||
*/
|
||||
|
||||
private import codeql.swift.generated.MacroRole
|
||||
|
||||
class MacroRole extends Generated::MacroRole {
|
||||
string getKindName() {
|
||||
this.getKind() = 1 and result = "expression"
|
||||
or
|
||||
this.getKind() = 2 and result = "declaration"
|
||||
or
|
||||
this.getKind() = 4 and result = "accessor"
|
||||
or
|
||||
this.getKind() = 8 and result = "memberAttribute"
|
||||
or
|
||||
this.getKind() = 16 and result = "member"
|
||||
or
|
||||
this.getKind() = 32 and result = "peer"
|
||||
or
|
||||
this.getKind() = 64 and result = "conformance"
|
||||
or
|
||||
this.getKind() = 128 and result = "codeItem"
|
||||
or
|
||||
this.getKind() = 256 and result = "extension"
|
||||
}
|
||||
|
||||
string getMacroSyntaxName() {
|
||||
this.getMacroSyntax() = 0 and result = "#freestanding"
|
||||
or
|
||||
this.getMacroSyntax() = 1 and result = "@attached"
|
||||
}
|
||||
|
||||
override string toString() { result = this.getMacroSyntaxName() + "(" + this.getKindName() + ")" }
|
||||
}
|
||||
14
swift/ql/lib/codeql/swift/elements/MacroRoleConstructor.qll
generated
Normal file
14
swift/ql/lib/codeql/swift/elements/MacroRoleConstructor.qll
generated
Normal file
@@ -0,0 +1,14 @@
|
||||
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
|
||||
/**
|
||||
* This module defines the hook used internally to tweak the characteristic predicate of
|
||||
* `MacroRole` synthesized instances.
|
||||
* INTERNAL: Do not use.
|
||||
*/
|
||||
|
||||
private import codeql.swift.generated.Raw
|
||||
|
||||
/**
|
||||
* The characteristic predicate of `MacroRole` synthesized instances.
|
||||
* INTERNAL: Do not use.
|
||||
*/
|
||||
predicate constructMacroRole(Raw::MacroRole id) { any() }
|
||||
8
swift/ql/lib/codeql/swift/elements/decl/MacroDecl.qll
generated
Normal file
8
swift/ql/lib/codeql/swift/elements/decl/MacroDecl.qll
generated
Normal file
@@ -0,0 +1,8 @@
|
||||
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
|
||||
/**
|
||||
* This module provides a hand-modifiable wrapper around the generated class `MacroDecl`.
|
||||
*/
|
||||
|
||||
private import codeql.swift.generated.decl.MacroDecl
|
||||
|
||||
class MacroDecl extends Generated::MacroDecl { }
|
||||
14
swift/ql/lib/codeql/swift/elements/decl/MacroDeclConstructor.qll
generated
Normal file
14
swift/ql/lib/codeql/swift/elements/decl/MacroDeclConstructor.qll
generated
Normal file
@@ -0,0 +1,14 @@
|
||||
// generated by codegen/codegen.py, remove this comment if you wish to edit this file
|
||||
/**
|
||||
* This module defines the hook used internally to tweak the characteristic predicate of
|
||||
* `MacroDecl` synthesized instances.
|
||||
* INTERNAL: Do not use.
|
||||
*/
|
||||
|
||||
private import codeql.swift.generated.Raw
|
||||
|
||||
/**
|
||||
* The characteristic predicate of `MacroDecl` synthesized instances.
|
||||
* INTERNAL: Do not use.
|
||||
*/
|
||||
predicate constructMacroDecl(Raw::MacroDecl id) { any() }
|
||||
83
swift/ql/lib/codeql/swift/generated/MacroRole.qll
generated
Normal file
83
swift/ql/lib/codeql/swift/generated/MacroRole.qll
generated
Normal file
@@ -0,0 +1,83 @@
|
||||
// generated by codegen/codegen.py
|
||||
/**
|
||||
* This module provides the generated definition of `MacroRole`.
|
||||
* INTERNAL: Do not import directly.
|
||||
*/
|
||||
|
||||
private import codeql.swift.generated.Synth
|
||||
private import codeql.swift.generated.Raw
|
||||
import codeql.swift.elements.AstNode
|
||||
import codeql.swift.elements.expr.TypeExpr
|
||||
|
||||
module Generated {
|
||||
/**
|
||||
* The role of a macro.
|
||||
* INTERNAL: Do not reference the `Generated::MacroRole` class directly.
|
||||
* Use the subclass `MacroRole`, where the following predicates are available.
|
||||
*/
|
||||
class MacroRole extends Synth::TMacroRole, AstNode {
|
||||
override string getAPrimaryQlClass() { result = "MacroRole" }
|
||||
|
||||
/**
|
||||
* Gets the kind of this macro role (declaration, expression, member, etc.).
|
||||
*/
|
||||
int getKind() { result = Synth::convertMacroRoleToRaw(this).(Raw::MacroRole).getKind() }
|
||||
|
||||
/**
|
||||
* Gets the #freestanding or @attached.
|
||||
*/
|
||||
int getMacroSyntax() {
|
||||
result = Synth::convertMacroRoleToRaw(this).(Raw::MacroRole).getMacroSyntax()
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the `index`th conformance of this macro role (0-based).
|
||||
*
|
||||
* This includes nodes from the "hidden" AST. It can be overridden in subclasses to change the
|
||||
* behavior of both the `Immediate` and non-`Immediate` versions.
|
||||
*/
|
||||
TypeExpr getImmediateConformance(int index) {
|
||||
result =
|
||||
Synth::convertTypeExprFromRaw(Synth::convertMacroRoleToRaw(this)
|
||||
.(Raw::MacroRole)
|
||||
.getConformance(index))
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the `index`th conformance of this macro role (0-based).
|
||||
*/
|
||||
final TypeExpr getConformance(int index) {
|
||||
exists(TypeExpr immediate |
|
||||
immediate = this.getImmediateConformance(index) and
|
||||
result = immediate.resolve()
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets any of the conformances of this macro role.
|
||||
*/
|
||||
final TypeExpr getAConformance() { result = this.getConformance(_) }
|
||||
|
||||
/**
|
||||
* Gets the number of conformances of this macro role.
|
||||
*/
|
||||
final int getNumberOfConformances() { result = count(int i | exists(this.getConformance(i))) }
|
||||
|
||||
/**
|
||||
* Gets the `index`th name of this macro role (0-based).
|
||||
*/
|
||||
string getName(int index) {
|
||||
result = Synth::convertMacroRoleToRaw(this).(Raw::MacroRole).getName(index)
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets any of the names of this macro role.
|
||||
*/
|
||||
final string getAName() { result = this.getName(_) }
|
||||
|
||||
/**
|
||||
* Gets the number of names of this macro role.
|
||||
*/
|
||||
final int getNumberOfNames() { result = count(int i | exists(this.getName(i))) }
|
||||
}
|
||||
}
|
||||
36
swift/ql/lib/codeql/swift/generated/ParentChild.qll
generated
36
swift/ql/lib/codeql/swift/generated/ParentChild.qll
generated
@@ -245,6 +245,19 @@ private module Impl {
|
||||
)
|
||||
}
|
||||
|
||||
private Element getImmediateChildOfMacroRole(MacroRole e, int index, string partialPredicateCall) {
|
||||
exists(int b, int bAstNode, int n |
|
||||
b = 0 and
|
||||
bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and
|
||||
n = bAstNode and
|
||||
(
|
||||
none()
|
||||
or
|
||||
result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall)
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
private Element getImmediateChildOfUnspecifiedElement(
|
||||
UnspecifiedElement e, int index, string partialPredicateCall
|
||||
) {
|
||||
@@ -605,6 +618,25 @@ private module Impl {
|
||||
)
|
||||
}
|
||||
|
||||
private Element getImmediateChildOfMacroDecl(MacroDecl e, int index, string partialPredicateCall) {
|
||||
exists(int b, int bGenericContext, int bValueDecl, int n |
|
||||
b = 0 and
|
||||
bGenericContext =
|
||||
b + 1 + max(int i | i = -1 or exists(getImmediateChildOfGenericContext(e, i, _)) | i) and
|
||||
bValueDecl =
|
||||
bGenericContext + 1 +
|
||||
max(int i | i = -1 or exists(getImmediateChildOfValueDecl(e, i, _)) | i) and
|
||||
n = bValueDecl and
|
||||
(
|
||||
none()
|
||||
or
|
||||
result = getImmediateChildOfGenericContext(e, index - b, partialPredicateCall)
|
||||
or
|
||||
result = getImmediateChildOfValueDecl(e, index - bGenericContext, partialPredicateCall)
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
private Element getImmediateChildOfPostfixOperatorDecl(
|
||||
PostfixOperatorDecl e, int index, string partialPredicateCall
|
||||
) {
|
||||
@@ -5050,6 +5082,8 @@ private module Impl {
|
||||
or
|
||||
result = getImmediateChildOfKeyPathComponent(e, index, partialAccessor)
|
||||
or
|
||||
result = getImmediateChildOfMacroRole(e, index, partialAccessor)
|
||||
or
|
||||
result = getImmediateChildOfUnspecifiedElement(e, index, partialAccessor)
|
||||
or
|
||||
result = getImmediateChildOfOtherAvailabilitySpec(e, index, partialAccessor)
|
||||
@@ -5080,6 +5114,8 @@ private module Impl {
|
||||
or
|
||||
result = getImmediateChildOfInfixOperatorDecl(e, index, partialAccessor)
|
||||
or
|
||||
result = getImmediateChildOfMacroDecl(e, index, partialAccessor)
|
||||
or
|
||||
result = getImmediateChildOfPostfixOperatorDecl(e, index, partialAccessor)
|
||||
or
|
||||
result = getImmediateChildOfPrefixOperatorDecl(e, index, partialAccessor)
|
||||
|
||||
60
swift/ql/lib/codeql/swift/generated/Raw.qll
generated
60
swift/ql/lib/codeql/swift/generated/Raw.qll
generated
@@ -246,6 +246,34 @@ module Raw {
|
||||
Type getComponentType() { key_path_components(this, _, result) }
|
||||
}
|
||||
|
||||
/**
|
||||
* INTERNAL: Do not use.
|
||||
* The role of a macro.
|
||||
*/
|
||||
class MacroRole extends @macro_role, AstNode {
|
||||
override string toString() { result = "MacroRole" }
|
||||
|
||||
/**
|
||||
* Gets the kind of this macro role (declaration, expression, member, etc.).
|
||||
*/
|
||||
int getKind() { macro_roles(this, result, _) }
|
||||
|
||||
/**
|
||||
* Gets the #freestanding or @attached.
|
||||
*/
|
||||
int getMacroSyntax() { macro_roles(this, _, result) }
|
||||
|
||||
/**
|
||||
* Gets the `index`th conformance of this macro role (0-based).
|
||||
*/
|
||||
TypeExpr getConformance(int index) { macro_role_conformances(this, index, result) }
|
||||
|
||||
/**
|
||||
* Gets the `index`th name of this macro role (0-based).
|
||||
*/
|
||||
string getName(int index) { macro_role_names(this, index, result) }
|
||||
}
|
||||
|
||||
/**
|
||||
* INTERNAL: Do not use.
|
||||
*/
|
||||
@@ -557,6 +585,38 @@ module Raw {
|
||||
PrecedenceGroupDecl getPrecedenceGroup() { infix_operator_decl_precedence_groups(this, result) }
|
||||
}
|
||||
|
||||
/**
|
||||
* INTERNAL: Do not use.
|
||||
* A declaration of a macro. Some examples:
|
||||
*
|
||||
* ```
|
||||
* @freestanding(declaration)
|
||||
* macro A() = #externalMacro(module: "A", type: "A")
|
||||
* @freestanding(expression)
|
||||
* macro B() = Builtin.B
|
||||
* @attached(member)
|
||||
* macro C() = C.C
|
||||
* ```
|
||||
*/
|
||||
class MacroDecl extends @macro_decl, GenericContext, ValueDecl {
|
||||
override string toString() { result = "MacroDecl" }
|
||||
|
||||
/**
|
||||
* Gets the name of this macro.
|
||||
*/
|
||||
string getName() { macro_decls(this, result) }
|
||||
|
||||
/**
|
||||
* Gets the `index`th parameter of this macro (0-based).
|
||||
*/
|
||||
ParamDecl getParameter(int index) { macro_decl_parameters(this, index, result) }
|
||||
|
||||
/**
|
||||
* Gets the `index`th role of this macro (0-based).
|
||||
*/
|
||||
MacroRole getRole(int index) { macro_decl_roles(this, index, result) }
|
||||
}
|
||||
|
||||
/**
|
||||
* INTERNAL: Do not use.
|
||||
*/
|
||||
|
||||
56
swift/ql/lib/codeql/swift/generated/Synth.qll
generated
56
swift/ql/lib/codeql/swift/generated/Synth.qll
generated
@@ -39,6 +39,10 @@ module Synth {
|
||||
* INTERNAL: Do not use.
|
||||
*/
|
||||
TKeyPathComponent(Raw::KeyPathComponent id) { constructKeyPathComponent(id) } or
|
||||
/**
|
||||
* INTERNAL: Do not use.
|
||||
*/
|
||||
TMacroRole(Raw::MacroRole id) { constructMacroRole(id) } or
|
||||
/**
|
||||
* INTERNAL: Do not use.
|
||||
*/
|
||||
@@ -121,6 +125,10 @@ module Synth {
|
||||
* INTERNAL: Do not use.
|
||||
*/
|
||||
TInitializer(Raw::Initializer id) { constructInitializer(id) } or
|
||||
/**
|
||||
* INTERNAL: Do not use.
|
||||
*/
|
||||
TMacroDecl(Raw::MacroDecl id) { constructMacroDecl(id) } or
|
||||
/**
|
||||
* INTERNAL: Do not use.
|
||||
*/
|
||||
@@ -1061,7 +1069,7 @@ module Synth {
|
||||
*/
|
||||
class TAstNode =
|
||||
TAvailabilityInfo or TAvailabilitySpec or TCaseLabelItem or TConditionElement or TDecl or
|
||||
TExpr or TKeyPathComponent or TPattern or TStmt or TStmtCondition or TTypeRepr;
|
||||
TExpr or TKeyPathComponent or TMacroRole or TPattern or TStmt or TStmtCondition or TTypeRepr;
|
||||
|
||||
/**
|
||||
* INTERNAL: Do not use.
|
||||
@@ -1128,7 +1136,8 @@ module Synth {
|
||||
/**
|
||||
* INTERNAL: Do not use.
|
||||
*/
|
||||
class TGenericContext = TExtensionDecl or TFunction or TGenericTypeDecl or TSubscriptDecl;
|
||||
class TGenericContext =
|
||||
TExtensionDecl or TFunction or TGenericTypeDecl or TMacroDecl or TSubscriptDecl;
|
||||
|
||||
/**
|
||||
* INTERNAL: Do not use.
|
||||
@@ -1153,7 +1162,8 @@ module Synth {
|
||||
/**
|
||||
* INTERNAL: Do not use.
|
||||
*/
|
||||
class TValueDecl = TAbstractStorageDecl or TEnumElementDecl or TFunction or TTypeDecl;
|
||||
class TValueDecl =
|
||||
TAbstractStorageDecl or TEnumElementDecl or TFunction or TMacroDecl or TTypeDecl;
|
||||
|
||||
/**
|
||||
* INTERNAL: Do not use.
|
||||
@@ -1427,6 +1437,13 @@ module Synth {
|
||||
cached
|
||||
TKeyPathComponent convertKeyPathComponentFromRaw(Raw::Element e) { result = TKeyPathComponent(e) }
|
||||
|
||||
/**
|
||||
* INTERNAL: Do not use.
|
||||
* Converts a raw element to a synthesized `TMacroRole`, if possible.
|
||||
*/
|
||||
cached
|
||||
TMacroRole convertMacroRoleFromRaw(Raw::Element e) { result = TMacroRole(e) }
|
||||
|
||||
/**
|
||||
* INTERNAL: Do not use.
|
||||
* Converts a raw element to a synthesized `TOtherAvailabilitySpec`, if possible.
|
||||
@@ -1579,6 +1596,13 @@ module Synth {
|
||||
cached
|
||||
TInitializer convertInitializerFromRaw(Raw::Element e) { result = TInitializer(e) }
|
||||
|
||||
/**
|
||||
* INTERNAL: Do not use.
|
||||
* Converts a raw element to a synthesized `TMacroDecl`, if possible.
|
||||
*/
|
||||
cached
|
||||
TMacroDecl convertMacroDeclFromRaw(Raw::Element e) { result = TMacroDecl(e) }
|
||||
|
||||
/**
|
||||
* INTERNAL: Do not use.
|
||||
* Converts a raw element to a synthesized `TMissingMemberDecl`, if possible.
|
||||
@@ -3319,6 +3343,8 @@ module Synth {
|
||||
or
|
||||
result = convertKeyPathComponentFromRaw(e)
|
||||
or
|
||||
result = convertMacroRoleFromRaw(e)
|
||||
or
|
||||
result = convertPatternFromRaw(e)
|
||||
or
|
||||
result = convertStmtFromRaw(e)
|
||||
@@ -3528,6 +3554,8 @@ module Synth {
|
||||
or
|
||||
result = convertGenericTypeDeclFromRaw(e)
|
||||
or
|
||||
result = convertMacroDeclFromRaw(e)
|
||||
or
|
||||
result = convertSubscriptDeclFromRaw(e)
|
||||
}
|
||||
|
||||
@@ -3597,6 +3625,8 @@ module Synth {
|
||||
or
|
||||
result = convertFunctionFromRaw(e)
|
||||
or
|
||||
result = convertMacroDeclFromRaw(e)
|
||||
or
|
||||
result = convertTypeDeclFromRaw(e)
|
||||
}
|
||||
|
||||
@@ -4352,6 +4382,13 @@ module Synth {
|
||||
cached
|
||||
Raw::Element convertKeyPathComponentToRaw(TKeyPathComponent e) { e = TKeyPathComponent(result) }
|
||||
|
||||
/**
|
||||
* INTERNAL: Do not use.
|
||||
* Converts a synthesized `TMacroRole` to a raw DB element, if possible.
|
||||
*/
|
||||
cached
|
||||
Raw::Element convertMacroRoleToRaw(TMacroRole e) { e = TMacroRole(result) }
|
||||
|
||||
/**
|
||||
* INTERNAL: Do not use.
|
||||
* Converts a synthesized `TOtherAvailabilitySpec` to a raw DB element, if possible.
|
||||
@@ -4504,6 +4541,13 @@ module Synth {
|
||||
cached
|
||||
Raw::Element convertInitializerToRaw(TInitializer e) { e = TInitializer(result) }
|
||||
|
||||
/**
|
||||
* INTERNAL: Do not use.
|
||||
* Converts a synthesized `TMacroDecl` to a raw DB element, if possible.
|
||||
*/
|
||||
cached
|
||||
Raw::Element convertMacroDeclToRaw(TMacroDecl e) { e = TMacroDecl(result) }
|
||||
|
||||
/**
|
||||
* INTERNAL: Do not use.
|
||||
* Converts a synthesized `TMissingMemberDecl` to a raw DB element, if possible.
|
||||
@@ -6242,6 +6286,8 @@ module Synth {
|
||||
or
|
||||
result = convertKeyPathComponentToRaw(e)
|
||||
or
|
||||
result = convertMacroRoleToRaw(e)
|
||||
or
|
||||
result = convertPatternToRaw(e)
|
||||
or
|
||||
result = convertStmtToRaw(e)
|
||||
@@ -6451,6 +6497,8 @@ module Synth {
|
||||
or
|
||||
result = convertGenericTypeDeclToRaw(e)
|
||||
or
|
||||
result = convertMacroDeclToRaw(e)
|
||||
or
|
||||
result = convertSubscriptDeclToRaw(e)
|
||||
}
|
||||
|
||||
@@ -6520,6 +6568,8 @@ module Synth {
|
||||
or
|
||||
result = convertFunctionToRaw(e)
|
||||
or
|
||||
result = convertMacroDeclToRaw(e)
|
||||
or
|
||||
result = convertTypeDeclToRaw(e)
|
||||
}
|
||||
|
||||
|
||||
@@ -9,6 +9,7 @@ import codeql.swift.elements.DbFileConstructor
|
||||
import codeql.swift.elements.DbLocationConstructor
|
||||
import codeql.swift.elements.DiagnosticsConstructor
|
||||
import codeql.swift.elements.KeyPathComponentConstructor
|
||||
import codeql.swift.elements.MacroRoleConstructor
|
||||
import codeql.swift.elements.OtherAvailabilitySpecConstructor
|
||||
import codeql.swift.elements.PlatformVersionAvailabilitySpecConstructor
|
||||
import codeql.swift.elements.UnspecifiedElementConstructor
|
||||
@@ -27,6 +28,7 @@ import codeql.swift.elements.decl.IfConfigDeclConstructor
|
||||
import codeql.swift.elements.decl.ImportDeclConstructor
|
||||
import codeql.swift.elements.decl.InfixOperatorDeclConstructor
|
||||
import codeql.swift.elements.decl.InitializerConstructor
|
||||
import codeql.swift.elements.decl.MacroDeclConstructor
|
||||
import codeql.swift.elements.decl.MissingMemberDeclConstructor
|
||||
import codeql.swift.elements.decl.ModuleDeclConstructor
|
||||
import codeql.swift.elements.decl.NamedFunctionConstructor
|
||||
|
||||
77
swift/ql/lib/codeql/swift/generated/decl/MacroDecl.qll
generated
Normal file
77
swift/ql/lib/codeql/swift/generated/decl/MacroDecl.qll
generated
Normal file
@@ -0,0 +1,77 @@
|
||||
// generated by codegen/codegen.py
|
||||
/**
|
||||
* This module provides the generated definition of `MacroDecl`.
|
||||
* INTERNAL: Do not import directly.
|
||||
*/
|
||||
|
||||
private import codeql.swift.generated.Synth
|
||||
private import codeql.swift.generated.Raw
|
||||
import codeql.swift.elements.decl.GenericContext
|
||||
import codeql.swift.elements.MacroRole
|
||||
import codeql.swift.elements.decl.ParamDecl
|
||||
import codeql.swift.elements.decl.ValueDecl
|
||||
|
||||
module Generated {
|
||||
/**
|
||||
* A declaration of a macro. Some examples:
|
||||
*
|
||||
* ```
|
||||
* @freestanding(declaration)
|
||||
* macro A() = #externalMacro(module: "A", type: "A")
|
||||
* @freestanding(expression)
|
||||
* macro B() = Builtin.B
|
||||
* @attached(member)
|
||||
* macro C() = C.C
|
||||
* ```
|
||||
* INTERNAL: Do not reference the `Generated::MacroDecl` class directly.
|
||||
* Use the subclass `MacroDecl`, where the following predicates are available.
|
||||
*/
|
||||
class MacroDecl extends Synth::TMacroDecl, GenericContext, ValueDecl {
|
||||
override string getAPrimaryQlClass() { result = "MacroDecl" }
|
||||
|
||||
/**
|
||||
* Gets the name of this macro.
|
||||
*/
|
||||
string getName() { result = Synth::convertMacroDeclToRaw(this).(Raw::MacroDecl).getName() }
|
||||
|
||||
/**
|
||||
* Gets the `index`th parameter of this macro (0-based).
|
||||
*/
|
||||
ParamDecl getParameter(int index) {
|
||||
result =
|
||||
Synth::convertParamDeclFromRaw(Synth::convertMacroDeclToRaw(this)
|
||||
.(Raw::MacroDecl)
|
||||
.getParameter(index))
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets any of the parameters of this macro.
|
||||
*/
|
||||
final ParamDecl getAParameter() { result = this.getParameter(_) }
|
||||
|
||||
/**
|
||||
* Gets the number of parameters of this macro.
|
||||
*/
|
||||
final int getNumberOfParameters() { result = count(int i | exists(this.getParameter(i))) }
|
||||
|
||||
/**
|
||||
* Gets the `index`th role of this macro (0-based).
|
||||
*/
|
||||
MacroRole getRole(int index) {
|
||||
result =
|
||||
Synth::convertMacroRoleFromRaw(Synth::convertMacroDeclToRaw(this)
|
||||
.(Raw::MacroDecl)
|
||||
.getRole(index))
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets any of the roles of this macro.
|
||||
*/
|
||||
final MacroRole getARole() { result = this.getRole(_) }
|
||||
|
||||
/**
|
||||
* Gets the number of roles of this macro.
|
||||
*/
|
||||
final int getNumberOfRoles() { result = count(int i | exists(this.getRole(i))) }
|
||||
}
|
||||
}
|
||||
52
swift/ql/lib/swift.dbscheme
generated
52
swift/ql/lib/swift.dbscheme
generated
@@ -113,6 +113,7 @@ locations(
|
||||
| @decl
|
||||
| @expr
|
||||
| @key_path_component
|
||||
| @macro_role
|
||||
| @pattern
|
||||
| @stmt
|
||||
| @stmt_condition
|
||||
@@ -199,6 +200,26 @@ key_path_component_decl_refs(
|
||||
int decl_ref: @value_decl_or_none ref
|
||||
);
|
||||
|
||||
macro_roles(
|
||||
unique int id: @macro_role,
|
||||
int kind: int ref,
|
||||
int macro_syntax: int ref
|
||||
);
|
||||
|
||||
#keyset[id, index]
|
||||
macro_role_conformances(
|
||||
int id: @macro_role ref,
|
||||
int index: int ref,
|
||||
int conformance: @type_expr_or_none ref
|
||||
);
|
||||
|
||||
#keyset[id, index]
|
||||
macro_role_names(
|
||||
int id: @macro_role ref,
|
||||
int index: int ref,
|
||||
string name: string ref
|
||||
);
|
||||
|
||||
unspecified_elements(
|
||||
unique int id: @unspecified_element,
|
||||
string property: string ref,
|
||||
@@ -266,6 +287,7 @@ decl_members( //dir=decl
|
||||
@extension_decl
|
||||
| @function
|
||||
| @generic_type_decl
|
||||
| @macro_decl
|
||||
| @subscript_decl
|
||||
;
|
||||
|
||||
@@ -401,6 +423,7 @@ top_level_code_decls( //dir=decl
|
||||
@abstract_storage_decl
|
||||
| @enum_element_decl
|
||||
| @function
|
||||
| @macro_decl
|
||||
| @type_decl
|
||||
;
|
||||
|
||||
@@ -450,6 +473,25 @@ infix_operator_decl_precedence_groups( //dir=decl
|
||||
int precedence_group: @precedence_group_decl_or_none ref
|
||||
);
|
||||
|
||||
macro_decls( //dir=decl
|
||||
unique int id: @macro_decl,
|
||||
string name: string ref
|
||||
);
|
||||
|
||||
#keyset[id, index]
|
||||
macro_decl_parameters( //dir=decl
|
||||
int id: @macro_decl ref,
|
||||
int index: int ref,
|
||||
int parameter: @param_decl_or_none ref
|
||||
);
|
||||
|
||||
#keyset[id, index]
|
||||
macro_decl_roles( //dir=decl
|
||||
int id: @macro_decl ref,
|
||||
int index: int ref,
|
||||
int role: @macro_role_or_none ref
|
||||
);
|
||||
|
||||
postfix_operator_decls( //dir=decl
|
||||
unique int id: @postfix_operator_decl
|
||||
);
|
||||
@@ -2614,6 +2656,11 @@ variadic_sequence_types( //dir=type
|
||||
| @unspecified_element
|
||||
;
|
||||
|
||||
@macro_role_or_none =
|
||||
@macro_role
|
||||
| @unspecified_element
|
||||
;
|
||||
|
||||
@module_decl_or_none =
|
||||
@module_decl
|
||||
| @unspecified_element
|
||||
@@ -2694,6 +2741,11 @@ variadic_sequence_types( //dir=type
|
||||
| @unspecified_element
|
||||
;
|
||||
|
||||
@type_expr_or_none =
|
||||
@type_expr
|
||||
| @unspecified_element
|
||||
;
|
||||
|
||||
@type_repr_or_none =
|
||||
@type_repr
|
||||
| @unspecified_element
|
||||
|
||||
@@ -16,6 +16,8 @@ predicate toBeTested(Element e) {
|
||||
or
|
||||
e instanceof PackArchetypeType
|
||||
or
|
||||
e instanceof MacroRole
|
||||
or
|
||||
exists(ModuleDecl m |
|
||||
m = e and
|
||||
not m.isBuiltinModule() and
|
||||
|
||||
@@ -1,3 +1,13 @@
|
||||
#-----| [MacroRole] #freestanding(expression)
|
||||
#-----| [MacroRole] #freestanding(expression)
|
||||
#-----| [MacroRole] #freestanding(expression)
|
||||
#-----| [MacroRole] #freestanding(expression)
|
||||
#-----| [MacroRole] #freestanding(expression)
|
||||
#-----| [MacroRole] #freestanding(expression)
|
||||
#-----| [MacroRole] #freestanding(expression)
|
||||
#-----| [MacroRole] #freestanding(expression)
|
||||
#-----| [MacroRole] #freestanding(declaration)
|
||||
#-----| [MacroRole] #freestanding(declaration)
|
||||
closures.swift:
|
||||
# 1| [NamedFunction] hello()
|
||||
# 1| InterfaceType = () -> String
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
| test.swift:2:1:2:50 | MacroDecl | getNumberOfGenericTypeParams: | 0 | getModule: | file://:0:0:0:0 | test | getNumberOfMembers: | 0 | getInterfaceType: | () -> () | getName: | A() | getNumberOfParameters: | 0 | getNumberOfRoles: | 1 |
|
||||
| test.swift:4:1:4:15 | MacroDecl | getNumberOfGenericTypeParams: | 0 | getModule: | file://:0:0:0:0 | test | getNumberOfMembers: | 0 | getInterfaceType: | () -> () | getName: | B() | getNumberOfParameters: | 0 | getNumberOfRoles: | 1 |
|
||||
| test.swift:7:1:7:15 | MacroDecl | getNumberOfGenericTypeParams: | 0 | getModule: | file://:0:0:0:0 | test | getNumberOfMembers: | 0 | getInterfaceType: | () -> () | getName: | C() | getNumberOfParameters: | 0 | getNumberOfRoles: | 2 |
|
||||
20
swift/ql/test/extractor-tests/generated/decl/MacroDecl/MacroDecl.ql
generated
Normal file
20
swift/ql/test/extractor-tests/generated/decl/MacroDecl/MacroDecl.ql
generated
Normal file
@@ -0,0 +1,20 @@
|
||||
// generated by codegen/codegen.py
|
||||
import codeql.swift.elements
|
||||
import TestUtils
|
||||
|
||||
from
|
||||
MacroDecl x, int getNumberOfGenericTypeParams, ModuleDecl getModule, int getNumberOfMembers,
|
||||
Type getInterfaceType, string getName, int getNumberOfParameters, int getNumberOfRoles
|
||||
where
|
||||
toBeTested(x) and
|
||||
not x.isUnknown() and
|
||||
getNumberOfGenericTypeParams = x.getNumberOfGenericTypeParams() and
|
||||
getModule = x.getModule() and
|
||||
getNumberOfMembers = x.getNumberOfMembers() and
|
||||
getInterfaceType = x.getInterfaceType() and
|
||||
getName = x.getName() and
|
||||
getNumberOfParameters = x.getNumberOfParameters() and
|
||||
getNumberOfRoles = x.getNumberOfRoles()
|
||||
select x, "getNumberOfGenericTypeParams:", getNumberOfGenericTypeParams, "getModule:", getModule,
|
||||
"getNumberOfMembers:", getNumberOfMembers, "getInterfaceType:", getInterfaceType, "getName:",
|
||||
getName, "getNumberOfParameters:", getNumberOfParameters, "getNumberOfRoles:", getNumberOfRoles
|
||||
7
swift/ql/test/extractor-tests/generated/decl/MacroDecl/MacroDecl_getGenericTypeParam.ql
generated
Normal file
7
swift/ql/test/extractor-tests/generated/decl/MacroDecl/MacroDecl_getGenericTypeParam.ql
generated
Normal file
@@ -0,0 +1,7 @@
|
||||
// generated by codegen/codegen.py
|
||||
import codeql.swift.elements
|
||||
import TestUtils
|
||||
|
||||
from MacroDecl x, int index
|
||||
where toBeTested(x) and not x.isUnknown()
|
||||
select x, index, x.getGenericTypeParam(index)
|
||||
7
swift/ql/test/extractor-tests/generated/decl/MacroDecl/MacroDecl_getMember.ql
generated
Normal file
7
swift/ql/test/extractor-tests/generated/decl/MacroDecl/MacroDecl_getMember.ql
generated
Normal file
@@ -0,0 +1,7 @@
|
||||
// generated by codegen/codegen.py
|
||||
import codeql.swift.elements
|
||||
import TestUtils
|
||||
|
||||
from MacroDecl x, int index
|
||||
where toBeTested(x) and not x.isUnknown()
|
||||
select x, index, x.getMember(index)
|
||||
7
swift/ql/test/extractor-tests/generated/decl/MacroDecl/MacroDecl_getParameter.ql
generated
Normal file
7
swift/ql/test/extractor-tests/generated/decl/MacroDecl/MacroDecl_getParameter.ql
generated
Normal file
@@ -0,0 +1,7 @@
|
||||
// generated by codegen/codegen.py
|
||||
import codeql.swift.elements
|
||||
import TestUtils
|
||||
|
||||
from MacroDecl x, int index
|
||||
where toBeTested(x) and not x.isUnknown()
|
||||
select x, index, x.getParameter(index)
|
||||
@@ -0,0 +1,4 @@
|
||||
| test.swift:2:1:2:50 | MacroDecl | 0 | test.swift:1:14:1:26 | #freestanding(declaration) |
|
||||
| test.swift:4:1:4:15 | MacroDecl | 0 | test.swift:3:14:3:25 | #freestanding(expression) |
|
||||
| test.swift:7:1:7:15 | MacroDecl | 0 | test.swift:6:10:6:20 | @attached(extension) |
|
||||
| test.swift:7:1:7:15 | MacroDecl | 1 | test.swift:5:10:5:17 | @attached(member) |
|
||||
7
swift/ql/test/extractor-tests/generated/decl/MacroDecl/MacroDecl_getRole.ql
generated
Normal file
7
swift/ql/test/extractor-tests/generated/decl/MacroDecl/MacroDecl_getRole.ql
generated
Normal file
@@ -0,0 +1,7 @@
|
||||
// generated by codegen/codegen.py
|
||||
import codeql.swift.elements
|
||||
import TestUtils
|
||||
|
||||
from MacroDecl x, int index
|
||||
where toBeTested(x) and not x.isUnknown()
|
||||
select x, index, x.getRole(index)
|
||||
@@ -0,0 +1,14 @@
|
||||
| file://:0:0:0:0 | #freestanding(declaration) | getKind: | 2 | getMacroSyntax: | 0 | getNumberOfConformances: | 0 | getNumberOfNames: | 0 |
|
||||
| file://:0:0:0:0 | #freestanding(declaration) | getKind: | 2 | getMacroSyntax: | 0 | getNumberOfConformances: | 0 | getNumberOfNames: | 0 |
|
||||
| file://:0:0:0:0 | #freestanding(expression) | getKind: | 1 | getMacroSyntax: | 0 | getNumberOfConformances: | 0 | getNumberOfNames: | 0 |
|
||||
| file://:0:0:0:0 | #freestanding(expression) | getKind: | 1 | getMacroSyntax: | 0 | getNumberOfConformances: | 0 | getNumberOfNames: | 0 |
|
||||
| file://:0:0:0:0 | #freestanding(expression) | getKind: | 1 | getMacroSyntax: | 0 | getNumberOfConformances: | 0 | getNumberOfNames: | 0 |
|
||||
| file://:0:0:0:0 | #freestanding(expression) | getKind: | 1 | getMacroSyntax: | 0 | getNumberOfConformances: | 0 | getNumberOfNames: | 0 |
|
||||
| file://:0:0:0:0 | #freestanding(expression) | getKind: | 1 | getMacroSyntax: | 0 | getNumberOfConformances: | 0 | getNumberOfNames: | 0 |
|
||||
| file://:0:0:0:0 | #freestanding(expression) | getKind: | 1 | getMacroSyntax: | 0 | getNumberOfConformances: | 0 | getNumberOfNames: | 0 |
|
||||
| file://:0:0:0:0 | #freestanding(expression) | getKind: | 1 | getMacroSyntax: | 0 | getNumberOfConformances: | 0 | getNumberOfNames: | 0 |
|
||||
| file://:0:0:0:0 | #freestanding(expression) | getKind: | 1 | getMacroSyntax: | 0 | getNumberOfConformances: | 0 | getNumberOfNames: | 0 |
|
||||
| test.swift:1:14:1:26 | #freestanding(declaration) | getKind: | 2 | getMacroSyntax: | 0 | getNumberOfConformances: | 0 | getNumberOfNames: | 0 |
|
||||
| test.swift:3:14:3:25 | #freestanding(expression) | getKind: | 1 | getMacroSyntax: | 0 | getNumberOfConformances: | 0 | getNumberOfNames: | 0 |
|
||||
| test.swift:5:10:5:17 | @attached(member) | getKind: | 16 | getMacroSyntax: | 1 | getNumberOfConformances: | 0 | getNumberOfNames: | 0 |
|
||||
| test.swift:6:10:6:20 | @attached(extension) | getKind: | 256 | getMacroSyntax: | 1 | getNumberOfConformances: | 0 | getNumberOfNames: | 0 |
|
||||
14
swift/ql/test/extractor-tests/generated/decl/MacroDecl/MacroRole.ql
generated
Normal file
14
swift/ql/test/extractor-tests/generated/decl/MacroDecl/MacroRole.ql
generated
Normal file
@@ -0,0 +1,14 @@
|
||||
// generated by codegen/codegen.py
|
||||
import codeql.swift.elements
|
||||
import TestUtils
|
||||
|
||||
from MacroRole x, int getKind, int getMacroSyntax, int getNumberOfConformances, int getNumberOfNames
|
||||
where
|
||||
toBeTested(x) and
|
||||
not x.isUnknown() and
|
||||
getKind = x.getKind() and
|
||||
getMacroSyntax = x.getMacroSyntax() and
|
||||
getNumberOfConformances = x.getNumberOfConformances() and
|
||||
getNumberOfNames = x.getNumberOfNames()
|
||||
select x, "getKind:", getKind, "getMacroSyntax:", getMacroSyntax, "getNumberOfConformances:",
|
||||
getNumberOfConformances, "getNumberOfNames:", getNumberOfNames
|
||||
7
swift/ql/test/extractor-tests/generated/decl/MacroDecl/MacroRole_getConformance.ql
generated
Normal file
7
swift/ql/test/extractor-tests/generated/decl/MacroDecl/MacroRole_getConformance.ql
generated
Normal file
@@ -0,0 +1,7 @@
|
||||
// generated by codegen/codegen.py
|
||||
import codeql.swift.elements
|
||||
import TestUtils
|
||||
|
||||
from MacroRole x, int index
|
||||
where toBeTested(x) and not x.isUnknown()
|
||||
select x, index, x.getConformance(index)
|
||||
7
swift/ql/test/extractor-tests/generated/decl/MacroDecl/MacroRole_getName.ql
generated
Normal file
7
swift/ql/test/extractor-tests/generated/decl/MacroDecl/MacroRole_getName.ql
generated
Normal file
@@ -0,0 +1,7 @@
|
||||
// generated by codegen/codegen.py
|
||||
import codeql.swift.elements
|
||||
import TestUtils
|
||||
|
||||
from MacroRole x, int index
|
||||
where toBeTested(x) and not x.isUnknown()
|
||||
select x, index, x.getName(index)
|
||||
@@ -0,0 +1,7 @@
|
||||
@freestanding(declaration)
|
||||
macro A() = #externalMacro(module: "A", type: "A")
|
||||
@freestanding(expression)
|
||||
macro B() = B.B
|
||||
@attached(member)
|
||||
@attached(extension)
|
||||
macro C() = C.C
|
||||
@@ -1,3 +1,13 @@
|
||||
#-----| [MacroRole] #freestanding(expression)
|
||||
#-----| [MacroRole] #freestanding(expression)
|
||||
#-----| [MacroRole] #freestanding(expression)
|
||||
#-----| [MacroRole] #freestanding(expression)
|
||||
#-----| [MacroRole] #freestanding(expression)
|
||||
#-----| [MacroRole] #freestanding(expression)
|
||||
#-----| [MacroRole] #freestanding(expression)
|
||||
#-----| [MacroRole] #freestanding(expression)
|
||||
#-----| [MacroRole] #freestanding(declaration)
|
||||
#-----| [MacroRole] #freestanding(declaration)
|
||||
v5.8.swift:
|
||||
# 1| [Comment] // https://github.com/apple/swift/blob/main/CHANGELOG.md#swift-58
|
||||
# 1|
|
||||
|
||||
@@ -1,3 +1,13 @@
|
||||
#-----| [MacroRole] #freestanding(expression)
|
||||
#-----| [MacroRole] #freestanding(expression)
|
||||
#-----| [MacroRole] #freestanding(expression)
|
||||
#-----| [MacroRole] #freestanding(expression)
|
||||
#-----| [MacroRole] #freestanding(expression)
|
||||
#-----| [MacroRole] #freestanding(expression)
|
||||
#-----| [MacroRole] #freestanding(expression)
|
||||
#-----| [MacroRole] #freestanding(expression)
|
||||
#-----| [MacroRole] #freestanding(declaration)
|
||||
#-----| [MacroRole] #freestanding(declaration)
|
||||
cfg.swift:
|
||||
# 1| [TopLevelCodeDecl] { ... }
|
||||
# 1| getBody(): [BraceStmt] { ... }
|
||||
|
||||
@@ -1,3 +1,13 @@
|
||||
#-----| [MacroRole] #freestanding(expression)
|
||||
#-----| [MacroRole] #freestanding(expression)
|
||||
#-----| [MacroRole] #freestanding(expression)
|
||||
#-----| [MacroRole] #freestanding(expression)
|
||||
#-----| [MacroRole] #freestanding(expression)
|
||||
#-----| [MacroRole] #freestanding(expression)
|
||||
#-----| [MacroRole] #freestanding(expression)
|
||||
#-----| [MacroRole] #freestanding(expression)
|
||||
#-----| [MacroRole] #freestanding(declaration)
|
||||
#-----| [MacroRole] #freestanding(declaration)
|
||||
methodlookup.swift:
|
||||
# 1| [ClassDecl] Foo
|
||||
# 2| getMember(0): [Initializer] Foo.init()
|
||||
|
||||
@@ -1,3 +1,13 @@
|
||||
#-----| [MacroRole] #freestanding(expression)
|
||||
#-----| [MacroRole] #freestanding(expression)
|
||||
#-----| [MacroRole] #freestanding(expression)
|
||||
#-----| [MacroRole] #freestanding(expression)
|
||||
#-----| [MacroRole] #freestanding(expression)
|
||||
#-----| [MacroRole] #freestanding(expression)
|
||||
#-----| [MacroRole] #freestanding(expression)
|
||||
#-----| [MacroRole] #freestanding(expression)
|
||||
#-----| [MacroRole] #freestanding(declaration)
|
||||
#-----| [MacroRole] #freestanding(declaration)
|
||||
chained_conversion.swift:
|
||||
# 1| [NamedFunction] foo(x:)
|
||||
# 1| InterfaceType = (inout Int) -> Int?
|
||||
|
||||
@@ -1361,3 +1361,31 @@ class BorrowExpr(IdentityExpr):
|
||||
```
|
||||
"""
|
||||
pass
|
||||
|
||||
@qltest.test_with('MacroDecl')
|
||||
class MacroRole(AstNode):
|
||||
"""
|
||||
The role of a macro.
|
||||
"""
|
||||
kind: int | doc("kind of this macro role (declaration, expression, member, etc.)")
|
||||
macro_syntax: int | doc("#freestanding or @attached")
|
||||
conformances: list[TypeExpr] | doc("conformances of this macro role")
|
||||
names: list[string] | doc("names of this macro role")
|
||||
|
||||
class MacroDecl(GenericContext, ValueDecl):
|
||||
"""
|
||||
A declaration of a macro. Some examples:
|
||||
|
||||
```
|
||||
@freestanding(declaration)
|
||||
macro A() = #externalMacro(module: "A", type: "A")
|
||||
@freestanding(expression)
|
||||
macro B() = Builtin.B
|
||||
@attached(member)
|
||||
macro C() = C.C
|
||||
```
|
||||
"""
|
||||
name: string | doc("name of this macro")
|
||||
parameters: list[ParamDecl] | doc("parameters of this macro")
|
||||
roles: list[MacroRole] | doc("roles of this macro")
|
||||
pass
|
||||
|
||||
Reference in New Issue
Block a user