Skip to content

Commit 76e0d5e

Browse files
committed
[Macro] API digester support for macro declarations
1 parent 8cbae04 commit 76e0d5e

File tree

4 files changed

+30
-2
lines changed

4 files changed

+30
-2
lines changed

include/swift/APIDigester/ModuleAnalyzerNodes.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -674,6 +674,13 @@ class SDKNodeDeclVar : public SDKNodeDecl {
674674
void addAccessor(SDKNode* AC);
675675
};
676676

677+
class SDKNodeDeclMacro : public SDKNodeDecl {
678+
public:
679+
SDKNodeDeclMacro(SDKNodeInitInfo Info);
680+
static bool classof(const SDKNode *N);
681+
SDKNodeType *getType() const;
682+
};
683+
677684
class SDKNodeDeclAbstractFunc : public SDKNodeDecl {
678685
bool IsThrowing;
679686
bool ReqNewWitnessTableEntry;
@@ -796,6 +803,7 @@ class SwiftDeclCollector: public VisibleDeclConsumer {
796803
SDKNode *constructSubscriptDeclNode(SubscriptDecl *SD);
797804
SDKNode *constructAssociatedTypeNode(AssociatedTypeDecl *ATD);
798805
SDKNode *constructTypeAliasNode(TypeAliasDecl *TAD);
806+
SDKNode *constructMacroNode(MacroDecl *MAD);
799807
SDKNode *constructVarNode(ValueDecl *VD);
800808
SDKNode *constructExternalExtensionNode(NominalTypeDecl *NTD,
801809
ArrayRef<ExtensionDecl*> AllExts);

include/swift/IDE/DigesterEnums.def

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,8 @@ NODE_KIND(DeclVar, Var)
7474
NODE_KIND(DeclTypeAlias, TypeAlias)
7575
NODE_KIND(DeclImport, Import)
7676
NODE_KIND(DeclAssociatedType, AssociatedType)
77-
NODE_KIND_RANGE(Decl, DeclFunction, DeclAssociatedType)
77+
NODE_KIND(DeclMacro, Macro)
78+
NODE_KIND_RANGE(Decl, DeclFunction, DeclMacro)
7879

7980
NODE_ANNOTATION(Added)
8081
NODE_ANNOTATION(Removed)

lib/APIDigester/ModuleAnalyzerNodes.cpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,9 @@ SDKNodeDeclVar::SDKNodeDeclVar(SDKNodeInitInfo Info):
172172
SDKNodeDecl(Info, SDKNodeKind::DeclVar), IsLet(Info.IsLet),
173173
HasStorage(Info.HasStorage) {}
174174

175+
SDKNodeDeclMacro::SDKNodeDeclMacro(SDKNodeInitInfo Info):
176+
SDKNodeDecl(Info, SDKNodeKind::DeclMacro) {}
177+
175178
SDKNodeDeclAbstractFunc::SDKNodeDeclAbstractFunc(SDKNodeInitInfo Info,
176179
SDKNodeKind Kind): SDKNodeDecl(Info, Kind), IsThrowing(Info.IsThrowing),
177180
ReqNewWitnessTableEntry(Info.ReqNewWitnessTableEntry),
@@ -226,6 +229,10 @@ SDKNodeType *SDKNodeDeclVar::getType() const {
226229
return cast<SDKNodeType>(childAt(0));
227230
}
228231

232+
SDKNodeType *SDKNodeDeclMacro::getType() const {
233+
return cast<SDKNodeType>(childAt(0));
234+
}
235+
229236
NodePtr UpdatedNodesMap::findUpdateCounterpart(const SDKNode *Node) const {
230237
assert(Node->isAnnotatedAs(NodeAnnotation::Updated) && "Not update operation.");
231238
auto FoundPair = std::find_if(MapImpl.begin(), MapImpl.end(),
@@ -409,6 +416,7 @@ StringRef SDKNodeType::getTypeRoleDescription() const {
409416
return SDKNodeDeclAbstractFunc::getTypeRoleDescription(Ctx,
410417
P->getChildIndex(this));
411418
case SDKNodeKind::DeclVar:
419+
case SDKNodeKind::DeclMacro:
412420
return "declared";
413421
case SDKNodeKind::DeclTypeAlias:
414422
return "underlying";
@@ -993,6 +1001,7 @@ static bool isSDKNodeEqual(SDKContext &Ctx, const SDKNode &L, const SDKNode &R)
9931001
return false;
9941002
LLVM_FALLTHROUGH;
9951003
}
1004+
case SDKNodeKind::DeclMacro:
9961005
case SDKNodeKind::Conformance:
9971006
case SDKNodeKind::TypeWitness:
9981007
case SDKNodeKind::DeclImport:
@@ -1833,6 +1842,13 @@ SwiftDeclCollector::constructTypeAliasNode(TypeAliasDecl *TAD) {
18331842
return Alias;
18341843
}
18351844

1845+
SDKNode *swift::ide::api::
1846+
SwiftDeclCollector::constructMacroNode(MacroDecl *MD) {
1847+
auto Macro = SDKNodeInitInfo(Ctx, MD).createSDKNode(SDKNodeKind::DeclMacro);
1848+
Macro->addChild(constructTypeNode(MD->getInterfaceType(), TypeInitInfo()));
1849+
return Macro;
1850+
}
1851+
18361852
SDKNode *swift::ide::api::
18371853
SwiftDeclCollector::constructAssociatedTypeNode(AssociatedTypeDecl *ATD) {
18381854
auto Asso = SDKNodeInitInfo(Ctx, ATD).
@@ -2028,6 +2044,8 @@ void SwiftDeclCollector::processValueDecl(ValueDecl *VD) {
20282044
RootNode->addChild(constructVarNode(VAD));
20292045
} else if (auto TAD = dyn_cast<TypeAliasDecl>(VD)) {
20302046
RootNode->addChild(constructTypeAliasNode(TAD));
2047+
} else if (auto MD = dyn_cast<MacroDecl>(VD)) {
2048+
RootNode->addChild(constructMacroNode(MD));
20312049
} else {
20322050
llvm_unreachable("unhandled value decl");
20332051
}

lib/DriverTool/swift_api_digester_main.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -828,7 +828,8 @@ class PrunePass : public MatchedNodeListener, public SDKTreeDiffPass {
828828
case SDKNodeKind::DeclImport:
829829
case SDKNodeKind::TypeFunc:
830830
case SDKNodeKind::TypeNominal:
831-
case SDKNodeKind::TypeAlias: {
831+
case SDKNodeKind::TypeAlias:
832+
case SDKNodeKind::DeclMacro: {
832833
// If matched nodes are both function/var/TypeAlias decls, mapping their
833834
// parameters sequentially.
834835
SequentialNodeMatcher SNMatcher(Left->getChildren(), Right->getChildren(),

0 commit comments

Comments
 (0)