Skip to content

Commit 093d0df

Browse files
committed
[ASTGen] Generate MacroDecl
1 parent 201edb8 commit 093d0df

File tree

6 files changed

+448
-4
lines changed

6 files changed

+448
-4
lines changed

include/swift/AST/ASTBridging.h

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,9 @@ class DiagnosticEngine;
4545
class Identifier;
4646
class IfConfigClauseRangeInfo;
4747
struct LabeledStmtInfo;
48+
enum class MacroRole : uint32_t;
49+
class MacroIntroducedDeclName;
50+
enum class MacroIntroducedDeclNameKind;
4851
enum class ParamSpecifier : uint8_t;
4952
class ProtocolConformanceRef;
5053
class RegexLiteralPatternFeature;
@@ -60,6 +63,7 @@ struct BridgedASTType;
6063
class BridgedCanType;
6164
class BridgedASTContext;
6265
struct BridgedSubstitutionMap;
66+
class BridgedParameterList;
6367

6468
//===----------------------------------------------------------------------===//
6569
// MARK: Identifier
@@ -119,6 +123,8 @@ class BridgedDeclNameRef {
119123
void *_Nonnull opaque;
120124

121125
public:
126+
BRIDGED_INLINE BridgedDeclNameRef();
127+
122128
BRIDGED_INLINE BridgedDeclNameRef(swift::DeclNameRef name);
123129

124130
BRIDGED_INLINE swift::DeclNameRef unbridged() const;
@@ -686,6 +692,51 @@ BridgedMainTypeAttr BridgedMainTypeAttr_createParsed(BridgedASTContext cContext,
686692
BridgedSourceLoc cAtLoc,
687693
BridgedSourceLoc cNameLoc);
688694

695+
enum ENUM_EXTENSIBILITY_ATTR(closed) BridgedMacroSyntax {
696+
BridgedMacroSyntaxFreestanding,
697+
BridgedMacroSyntaxAttached,
698+
};
699+
700+
enum ENUM_EXTENSIBILITY_ATTR(closed) BridgedMacroIntroducedDeclNameKind {
701+
BridgedMacroIntroducedDeclNameKindNamed,
702+
BridgedMacroIntroducedDeclNameKindOverloaded,
703+
BridgedMacroIntroducedDeclNameKindPrefixed,
704+
BridgedMacroIntroducedDeclNameKindSuffixed,
705+
BridgedMacroIntroducedDeclNameKindArbitrary,
706+
};
707+
708+
BRIDGED_INLINE swift::MacroIntroducedDeclNameKind
709+
unbridge(BridgedMacroIntroducedDeclNameKind kind);
710+
711+
struct BridgedMacroIntroducedDeclName {
712+
BridgedMacroIntroducedDeclNameKind kind;
713+
BridgedDeclNameRef name;
714+
715+
BRIDGED_INLINE swift::MacroIntroducedDeclName unbridged() const;
716+
};
717+
718+
enum ENUM_EXTENSIBILITY_ATTR(closed) BridgedMacroRole {
719+
#define MACRO_ROLE(Name, Description) BridgedMacroRole##Name,
720+
#include "swift/Basic/MacroRoles.def"
721+
BridgedMacroRoleNone,
722+
};
723+
724+
BRIDGED_INLINE swift::MacroRole unbridge(BridgedMacroRole cRole);
725+
726+
SWIFT_NAME("BridgedMacroRole.init(from:)")
727+
BridgedMacroRole BridgedMacroRole_fromString(BridgedStringRef str);
728+
729+
SWIFT_NAME("getter:BridgedMacroRole.isAttached(self:)")
730+
BRIDGED_INLINE bool BridgedMacroRole_isAttached(BridgedMacroRole role);
731+
732+
SWIFT_NAME("BridgedMacroRoleAttr.createParsed(_:atLoc:range:syntax:lParenLoc:"
733+
"role:names:conformances:rParenLoc:)")
734+
BridgedMacroRoleAttr BridgedMacroRoleAttr_createParsed(
735+
BridgedASTContext cContext, BridgedSourceLoc cAtLoc,
736+
BridgedSourceRange cRange, BridgedMacroSyntax cSyntax,
737+
BridgedSourceLoc cLParenLoc, BridgedMacroRole cRole, BridgedArrayRef cNames,
738+
BridgedArrayRef cConformances, BridgedSourceLoc cRParenLoc);
739+
689740
SWIFT_NAME(
690741
"BridgedSwiftNativeObjCRuntimeBaseAttr.createParsed(_:atLoc:range:name:)")
691742
BridgedSwiftNativeObjCRuntimeBaseAttr
@@ -1003,6 +1054,16 @@ BridgedAssociatedTypeDecl BridgedAssociatedTypeDecl_createParsed(
10031054
BridgedNullableTypeRepr opaqueDefaultType,
10041055
BridgedNullableTrailingWhereClause genericWhereClause);
10051056

1057+
SWIFT_NAME(
1058+
"BridgedMacroDecl.createParsed(_:declContext:macroKeywordLoc:name:nameLoc:"
1059+
"genericParamList:paramList:arrowLoc:resultType:definition:)")
1060+
BridgedMacroDecl BridgedMacroDecl_createParsed(
1061+
BridgedASTContext cContext, BridgedDeclContext cDeclContext,
1062+
BridgedSourceLoc cMacroLoc, BridgedIdentifier cName,
1063+
BridgedSourceLoc cNameLoc, BridgedNullableGenericParamList cGenericParams,
1064+
BridgedParameterList cParams, BridgedSourceLoc cArrowLoc,
1065+
BridgedNullableTypeRepr cResultType, BridgedNullableExpr cDefinition);
1066+
10061067
SWIFT_NAME("BridgedMacroExpansionDecl.createParsed(_:poundLoc:macroNameRef:"
10071068
"macroNameLoc:leftAngleLoc:genericArgs:rightAngleLoc:args:)")
10081069
BridgedMacroExpansionDecl BridgedMacroExpansionDecl_createParsed(

include/swift/AST/ASTBridgingImpl.h

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#include "swift/AST/Decl.h"
1919
#include "swift/AST/Expr.h"
2020
#include "swift/AST/IfConfigClauseRangeInfo.h"
21+
#include "swift/AST/MacroDeclaration.h"
2122
#include "swift/AST/ProtocolConformance.h"
2223
#include "swift/AST/ProtocolConformanceRef.h"
2324
#include "swift/AST/SourceFile.h"
@@ -52,6 +53,9 @@ swift::DeclBaseName BridgedDeclBaseName::unbridged() const {
5253
// MARK: BridgedDeclNameRef
5354
//===----------------------------------------------------------------------===//
5455

56+
BridgedDeclNameRef::BridgedDeclNameRef()
57+
: BridgedDeclNameRef(swift::DeclNameRef()) {}
58+
5559
BridgedDeclNameRef::BridgedDeclNameRef(swift::DeclNameRef name)
5660
: opaque(name.getOpaqueValue()) {}
5761

@@ -380,6 +384,47 @@ BridgedConformance BridgedConformanceArray::getAt(SwiftInt index) const {
380384
return pcArray.unbridged<swift::ProtocolConformanceRef>()[index];
381385
}
382386

387+
//===----------------------------------------------------------------------===//
388+
// MARK: Macros
389+
//===----------------------------------------------------------------------===//
390+
391+
swift::MacroRole unbridge(BridgedMacroRole cRole) {
392+
switch (cRole) {
393+
#define MACRO_ROLE(Name, Description) \
394+
case BridgedMacroRole##Name: \
395+
return swift::MacroRole::Name;
396+
#include "swift/Basic/MacroRoles.def"
397+
case BridgedMacroRoleNone:
398+
break;
399+
}
400+
llvm_unreachable("invalid macro role");
401+
}
402+
403+
swift::MacroIntroducedDeclNameKind
404+
unbridge(BridgedMacroIntroducedDeclNameKind kind) {
405+
switch (kind) {
406+
#define CASE(ID) \
407+
case BridgedMacroIntroducedDeclNameKind##ID: \
408+
return swift::MacroIntroducedDeclNameKind::ID;
409+
CASE(Named)
410+
CASE(Overloaded)
411+
CASE(Prefixed)
412+
CASE(Suffixed)
413+
CASE(Arbitrary)
414+
#undef CASE
415+
}
416+
}
417+
418+
bool BridgedMacroRole_isAttached(BridgedMacroRole role) {
419+
return isAttachedMacro(unbridge(role));
420+
}
421+
422+
swift::MacroIntroducedDeclName
423+
BridgedMacroIntroducedDeclName::unbridged() const {
424+
return swift::MacroIntroducedDeclName(unbridge(kind),
425+
name.unbridged().getFullName());
426+
}
427+
383428
//===----------------------------------------------------------------------===//
384429
// MARK: BridgedSubstitutionMap
385430
//===----------------------------------------------------------------------===//

lib/AST/Bridging/DeclAttributeBridging.cpp

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -266,6 +266,44 @@ BridgedInlineAttr BridgedInlineAttr_createParsed(BridgedASTContext cContext,
266266
InlineAttr(cAtLoc.unbridged(), cRange.unbridged(), unbridged(cKind));
267267
}
268268

269+
BridgedMacroRole BridgedMacroRole_fromString(BridgedStringRef str) {
270+
// Match the role string to the known set of roles.
271+
auto role =
272+
llvm::StringSwitch<std::optional<BridgedMacroRole>>(str.unbridged())
273+
#define MACRO_ROLE(Name, Description) .Case(Description, BridgedMacroRole##Name)
274+
#include "swift/Basic/MacroRoles.def"
275+
.Default(std::nullopt);
276+
return role.has_value() ? *role : BridgedMacroRoleNone;
277+
}
278+
279+
MacroSyntax unbridge(BridgedMacroSyntax cSyntax) {
280+
switch (cSyntax) {
281+
case BridgedMacroSyntaxAttached:
282+
return MacroSyntax::Attached;
283+
case BridgedMacroSyntaxFreestanding:
284+
return MacroSyntax::Freestanding;
285+
}
286+
}
287+
288+
BridgedMacroRoleAttr BridgedMacroRoleAttr_createParsed(
289+
BridgedASTContext cContext, BridgedSourceLoc cAtLoc,
290+
BridgedSourceRange cRange, BridgedMacroSyntax cSyntax,
291+
BridgedSourceLoc cLParenLoc, BridgedMacroRole cRole, BridgedArrayRef cNames,
292+
BridgedArrayRef cConformances, BridgedSourceLoc cRParenLoc) {
293+
SmallVector<MacroIntroducedDeclName, 2> names;
294+
for (auto &n : cNames.unbridged<BridgedMacroIntroducedDeclName>())
295+
names.push_back(n.unbridged());
296+
297+
SmallVector<TypeExpr *, 2> conformances;
298+
for (auto &t : cConformances.unbridged<BridgedTypeExpr>())
299+
conformances.push_back(t.unbridged());
300+
301+
return MacroRoleAttr::create(
302+
cContext.unbridged(), cAtLoc.unbridged(), cRange.unbridged(),
303+
unbridge(cSyntax), cLParenLoc.unbridged(), unbridge(cRole), names,
304+
conformances, cRParenLoc.unbridged(), /*implicit=*/false);
305+
}
306+
269307
BridgedMainTypeAttr
270308
BridgedMainTypeAttr_createParsed(BridgedASTContext cContext,
271309
BridgedSourceLoc cAtLoc,

lib/AST/Bridging/DeclBridging.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -304,6 +304,22 @@ BridgedDestructorDecl_createParsed(BridgedASTContext cContext,
304304
return decl;
305305
}
306306

307+
BridgedMacroDecl BridgedMacroDecl_createParsed(
308+
BridgedASTContext cContext, BridgedDeclContext cDeclContext,
309+
BridgedSourceLoc cMacroLoc, BridgedIdentifier cName,
310+
BridgedSourceLoc cNameLoc, BridgedNullableGenericParamList cGenericParams,
311+
BridgedParameterList cParams, BridgedSourceLoc cArrowLoc,
312+
BridgedNullableTypeRepr cResultType, BridgedNullableExpr cDefinition) {
313+
ASTContext &context = cContext.unbridged();
314+
auto *params = cParams.unbridged();
315+
DeclName fullName = DeclName(context, cName.unbridged(), params);
316+
return new (context)
317+
MacroDecl(cMacroLoc.unbridged(), fullName, cNameLoc.unbridged(),
318+
cGenericParams.unbridged(), params, cArrowLoc.unbridged(),
319+
cResultType.unbridged(), cDefinition.unbridged(),
320+
cDeclContext.unbridged());
321+
}
322+
307323
BridgedTypeAliasDecl BridgedTypeAliasDecl_createParsed(
308324
BridgedASTContext cContext, BridgedDeclContext cDeclContext,
309325
BridgedSourceLoc cAliasKeywordLoc, BridgedIdentifier cName,

0 commit comments

Comments
 (0)