Skip to content

Commit f8f3651

Browse files
committed
[ASTGen] Generate MacroDecl
1 parent fad765b commit f8f3651

File tree

6 files changed

+438
-4
lines changed

6 files changed

+438
-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
class ProtocolConformanceRef;
4952
class RegexLiteralPatternFeature;
5053
class RegexLiteralPatternFeatureKind;
@@ -59,6 +62,7 @@ struct BridgedASTType;
5962
class BridgedCanType;
6063
class BridgedASTContext;
6164
struct BridgedSubstitutionMap;
65+
class BridgedParameterList;
6266

6367
//===----------------------------------------------------------------------===//
6468
// MARK: Identifier
@@ -118,6 +122,8 @@ class BridgedDeclNameRef {
118122
void *_Nonnull opaque;
119123

120124
public:
125+
BRIDGED_INLINE BridgedDeclNameRef();
126+
121127
BRIDGED_INLINE BridgedDeclNameRef(swift::DeclNameRef name);
122128

123129
BRIDGED_INLINE swift::DeclNameRef unbridged() const;
@@ -681,6 +687,51 @@ BridgedMainTypeAttr BridgedMainTypeAttr_createParsed(BridgedASTContext cContext,
681687
BridgedSourceLoc cAtLoc,
682688
BridgedSourceLoc cNameLoc);
683689

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

1034+
SWIFT_NAME(
1035+
"BridgedMacroDecl.createParsed(_:declContext:macroKeywordLoc:name:nameLoc:"
1036+
"genericParamList:paramList:arrowLoc:resultType:definition:)")
1037+
BridgedMacroDecl BridgedMacroDecl_createParsed(
1038+
BridgedASTContext cContext, BridgedDeclContext cDeclContext,
1039+
BridgedSourceLoc cMacroLoc, BridgedIdentifier cName,
1040+
BridgedSourceLoc cNameLoc, BridgedNullableGenericParamList cGenericParams,
1041+
BridgedParameterList cParams, BridgedSourceLoc cArrowLoc,
1042+
BridgedNullableTypeRepr cResultType, BridgedNullableExpr cDefinition);
1043+
9831044
SWIFT_NAME("BridgedMacroExpansionDecl.createParsed(_:poundLoc:macroNameRef:"
9841045
"macroNameLoc:leftAngleLoc:genericArgs:rightAngleLoc:args:)")
9851046
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

@@ -355,6 +359,47 @@ BridgedConformance BridgedConformanceArray::getAt(SwiftInt index) const {
355359
return pcArray.unbridged<swift::ProtocolConformanceRef>()[index];
356360
}
357361

362+
//===----------------------------------------------------------------------===//
363+
// MARK: Macros
364+
//===----------------------------------------------------------------------===//
365+
366+
swift::MacroRole unbridge(BridgedMacroRole cRole) {
367+
switch (cRole) {
368+
#define MACRO_ROLE(Name, Description) \
369+
case BridgedMacroRole##Name: \
370+
return swift::MacroRole::Name;
371+
#include "swift/Basic/MacroRoles.def"
372+
case BridgedMacroRoleNone:
373+
break;
374+
}
375+
assert(false && "invalid macro role");
376+
}
377+
378+
swift::MacroIntroducedDeclNameKind
379+
unbridge(BridgedMacroIntroducedDeclNameKind kind) {
380+
switch (kind) {
381+
#define CASE(ID) \
382+
case BridgedMacroIntroducedDeclNameKind##ID: \
383+
return swift::MacroIntroducedDeclNameKind::ID;
384+
CASE(Named)
385+
CASE(Overloaded)
386+
CASE(Prefixed)
387+
CASE(Suffixed)
388+
CASE(Arbitrary)
389+
#undef CASE
390+
}
391+
}
392+
393+
bool BridgedMacroRole_isAttached(BridgedMacroRole role) {
394+
return isAttachedMacro(unbridge(role));
395+
}
396+
397+
swift::MacroIntroducedDeclName
398+
BridgedMacroIntroducedDeclName::unbridged() const {
399+
return swift::MacroIntroducedDeclName(unbridge(kind),
400+
name.unbridged().getFullName());
401+
}
402+
358403
//===----------------------------------------------------------------------===//
359404
// MARK: BridgedSubstitutionMap
360405
//===----------------------------------------------------------------------===//

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)