Skip to content

Commit 2b14a23

Browse files
committed
[ASTGen] Generate generic layout constraint
1 parent 2ceb8f1 commit 2b14a23

File tree

6 files changed

+341
-69
lines changed

6 files changed

+341
-69
lines changed

include/swift/AST/ASTBridging.h

Lines changed: 112 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@ class Fingerprint;
4848
class Identifier;
4949
class IfConfigClauseRangeInfo;
5050
struct LabeledStmtInfo;
51+
class LayoutConstraint;
52+
class LayoutConstraintInfo;
5153
struct LifetimeDescriptor;
5254
enum class MacroRole : uint32_t;
5355
class MacroIntroducedDeclName;
@@ -58,6 +60,7 @@ class ProtocolConformanceRef;
5860
class RegexLiteralPatternFeature;
5961
class RegexLiteralPatternFeatureKind;
6062
enum class ReferenceOwnership : uint8_t;
63+
class RequirementRepr;
6164
class Type;
6265
class CanType;
6366
class TypeBase;
@@ -2677,58 +2680,105 @@ SWIFT_NAME("getter:BridgedPattern.boundName(self:)")
26772680
BridgedIdentifier BridgedPattern_getBoundName(BridgedPattern cPattern);
26782681

26792682
//===----------------------------------------------------------------------===//
2680-
// MARK: Misc
2683+
// MARK: Generics
26812684
//===----------------------------------------------------------------------===//
26822685

2683-
struct BridgedTupleTypeElement {
2684-
BridgedIdentifier Name;
2685-
BridgedSourceLoc NameLoc;
2686-
BridgedIdentifier SecondName;
2687-
BridgedSourceLoc SecondNameLoc;
2688-
BridgedSourceLoc UnderscoreLoc;
2689-
BridgedSourceLoc ColonLoc;
2690-
BridgedTypeRepr Type;
2691-
BridgedSourceLoc TrailingCommaLoc;
2686+
enum ENUM_EXTENSIBILITY_ATTR(closed) BridgedLayoutConstraintKind {
2687+
BridgedLayoutConstraintKindUnknownLayout,
2688+
BridgedLayoutConstraintKindTrivialOfExactSize,
2689+
BridgedLayoutConstraintKindTrivialOfAtMostSize,
2690+
BridgedLayoutConstraintKindTrivial,
2691+
BridgedLayoutConstraintKindClass,
2692+
BridgedLayoutConstraintKindNativeClass,
2693+
BridgedLayoutConstraintKindRefCountedObject,
2694+
BridgedLayoutConstraintKindNativeRefCountedObject,
2695+
BridgedLayoutConstraintKindBridgeObject,
2696+
BridgedLayoutConstraintKindTrivialStride,
26922697
};
26932698

2699+
class BridgedLayoutConstraint {
2700+
swift::LayoutConstraintInfo *_Nullable raw;
2701+
2702+
public:
2703+
SWIFT_UNAVAILABLE("Use the factory methods")
2704+
BRIDGED_INLINE BridgedLayoutConstraint();
2705+
2706+
SWIFT_UNAVAILABLE("Use the factory methods")
2707+
BRIDGED_INLINE BridgedLayoutConstraint(swift::LayoutConstraint constraint);
2708+
2709+
BRIDGED_INLINE swift::LayoutConstraint unbridged() const;
2710+
};
2711+
2712+
SWIFT_NAME("BridgedLayoutConstraint.getLayoutConstraint(_:id:)")
2713+
BridgedLayoutConstraint
2714+
BridgedLayoutConstraint_getLayoutConstraint(BridgedASTContext cContext,
2715+
BridgedIdentifier cID);
2716+
2717+
SWIFT_NAME("BridgedLayoutConstraint.getLayoutConstraint(_:kind:)")
2718+
BridgedLayoutConstraint
2719+
BridgedLayoutConstraint_getLayoutConstraint(BridgedASTContext cContext,
2720+
BridgedLayoutConstraintKind cKind);
2721+
2722+
SWIFT_NAME(
2723+
"BridgedLayoutConstraint.getLayoutConstraint(_:kind:size:alignment:)")
2724+
BridgedLayoutConstraint
2725+
BridgedLayoutConstraint_getLayoutConstraint(BridgedASTContext cContext,
2726+
BridgedLayoutConstraintKind cKind,
2727+
size_t size, size_t alignment);
2728+
2729+
SWIFT_NAME("getter:BridgedLayoutConstraint.isNull(self:)")
2730+
BRIDGED_INLINE bool
2731+
BridgedLayoutConstraint_isNull(BridgedLayoutConstraint cConstraint);
2732+
2733+
SWIFT_NAME("getter:BridgedLayoutConstraint.kind(self:)")
2734+
BridgedLayoutConstraintKind
2735+
BridgedLayoutConstraint_getKind(BridgedLayoutConstraint cConstraint);
2736+
2737+
SWIFT_NAME("getter:BridgedLayoutConstraint.isKnownLayout(self:)")
2738+
BRIDGED_INLINE bool
2739+
BridgedLayoutConstraint_isKnownLayout(BridgedLayoutConstraint cConstraint);
2740+
2741+
SWIFT_NAME("getter:BridgedLayoutConstraint.isTrivial(self:)")
2742+
BRIDGED_INLINE bool
2743+
BridgedLayoutConstraint_isTrivial(BridgedLayoutConstraint cConstraint);
2744+
26942745
enum ENUM_EXTENSIBILITY_ATTR(open) BridgedRequirementReprKind : size_t {
2695-
/// A type bound T : P, where T is a type that depends on a generic
2696-
/// parameter and P is some type that should bound T, either as a concrete
2697-
/// supertype or a protocol to which T must conform.
26982746
BridgedRequirementReprKindTypeConstraint,
2699-
2700-
/// A same-type requirement T == U, where T and U are types that shall be
2701-
/// equivalent.
27022747
BridgedRequirementReprKindSameType,
2703-
2704-
/// A layout bound T : L, where T is a type that depends on a generic
2705-
/// parameter and L is some layout specification that should bound T.
27062748
BridgedRequirementReprKindLayoutConstraint,
2707-
2708-
// Note: there is code that packs this enum in a 2-bit bitfield. Audit users
2709-
// when adding enumerators.
27102749
};
27112750

27122751
struct BridgedRequirementRepr {
27132752
BridgedSourceLoc SeparatorLoc;
27142753
BridgedRequirementReprKind Kind;
27152754
BridgedTypeRepr FirstType;
2716-
BridgedTypeRepr SecondType;
2717-
// FIXME: Handle Layout Requirements
2718-
};
2755+
BridgedNullableTypeRepr SecondType;
2756+
BridgedLayoutConstraint LayoutConstraint;
2757+
BridgedSourceLoc LayoutConstraintLoc;
27192758

2720-
enum ENUM_EXTENSIBILITY_ATTR(open) BridgedMacroDefinitionKind : size_t {
2721-
/// An expanded macro.
2722-
BridgedExpandedMacro = 0,
2723-
/// An external macro, spelled with either the old spelling (Module.Type)
2724-
/// or the new spelling `#externalMacro(module: "Module", type: "Type")`.
2725-
BridgedExternalMacro,
2726-
/// The builtin definition for "externalMacro".
2727-
BridgedBuiltinExternalMacro,
2728-
/// The builtin definition for the "isolation" macro.
2729-
BridgedBuiltinIsolationMacro,
2759+
// TODO: bool IsExpansionPattern;
2760+
2761+
swift::RequirementRepr unbridged() const;
27302762
};
27312763

2764+
SWIFT_NAME(
2765+
"BridgedRequirementRepr.createTypeConstraint(subject:colonLoc:constraint:)")
2766+
BridgedRequirementRepr
2767+
BridgedRequirementRepr_createTypeConstraint(BridgedTypeRepr cSubject,
2768+
BridgedSourceLoc cColonLoc,
2769+
BridgedTypeRepr cConstraint);
2770+
SWIFT_NAME(
2771+
"BridgedRequirementRepr.createSameType(firstType:equalLoc:secondType:)")
2772+
BridgedRequirementRepr
2773+
BridgedRequirementRepr_createSameType(BridgedTypeRepr cFirstType,
2774+
BridgedSourceLoc cEqualLoc,
2775+
BridgedTypeRepr cSecondType);
2776+
SWIFT_NAME("BridgedRequirementRepr.createLayoutConstraint(subject:colonLoc:"
2777+
"layout:layoutLoc:)")
2778+
BridgedRequirementRepr BridgedRequirementRepr_createLayoutConstraint(
2779+
BridgedTypeRepr cSubject, BridgedSourceLoc cColonLoc,
2780+
BridgedLayoutConstraint cLayout, BridgedSourceLoc cLayoutLoc);
2781+
27322782
enum ENUM_EXTENSIBILITY_ATTR(closed) BridgedGenericTypeParamKind : size_t {
27332783
/// A regular generic type parameter: 'T'
27342784
BridgedGenericTypeParamKindType = 0,
@@ -2775,6 +2825,33 @@ SWIFT_NAME("BridgedParameterList.get(self:_:)")
27752825
BridgedParamDecl BridgedParameterList_get(BridgedParameterList cParameterList,
27762826
size_t i);
27772827

2828+
//===----------------------------------------------------------------------===//
2829+
// MARK: Misc
2830+
//===----------------------------------------------------------------------===//
2831+
2832+
struct BridgedTupleTypeElement {
2833+
BridgedIdentifier Name;
2834+
BridgedSourceLoc NameLoc;
2835+
BridgedIdentifier SecondName;
2836+
BridgedSourceLoc SecondNameLoc;
2837+
BridgedSourceLoc UnderscoreLoc;
2838+
BridgedSourceLoc ColonLoc;
2839+
BridgedTypeRepr Type;
2840+
BridgedSourceLoc TrailingCommaLoc;
2841+
};
2842+
2843+
enum ENUM_EXTENSIBILITY_ATTR(open) BridgedMacroDefinitionKind : size_t {
2844+
/// An expanded macro.
2845+
BridgedExpandedMacro = 0,
2846+
/// An external macro, spelled with either the old spelling (Module.Type)
2847+
/// or the new spelling `#externalMacro(module: "Module", type: "Type")`.
2848+
BridgedExternalMacro,
2849+
/// The builtin definition for "externalMacro".
2850+
BridgedBuiltinExternalMacro,
2851+
/// The builtin definition for the "isolation" macro.
2852+
BridgedBuiltinIsolationMacro,
2853+
};
2854+
27782855
struct BridgedASTType {
27792856
swift::TypeBase * _Nullable type;
27802857

include/swift/AST/ASTBridgingImpl.h

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -478,6 +478,34 @@ BridgedConformance BridgedConformanceArray::getAt(SwiftInt index) const {
478478
return pcArray.unbridged<swift::ProtocolConformanceRef>()[index];
479479
}
480480

481+
//===----------------------------------------------------------------------===//
482+
// MARK: BridgedLayoutConstraint
483+
//===----------------------------------------------------------------------===//
484+
485+
BridgedLayoutConstraint::BridgedLayoutConstraint()
486+
: raw(swift::LayoutConstraint().getPointer()) {}
487+
488+
BridgedLayoutConstraint::BridgedLayoutConstraint(
489+
swift::LayoutConstraint constraint)
490+
: raw(constraint.getPointer()) {}
491+
492+
swift::LayoutConstraint BridgedLayoutConstraint::unbridged() const {
493+
return raw;
494+
}
495+
496+
bool BridgedLayoutConstraint_isNull(BridgedLayoutConstraint cConstraint) {
497+
return cConstraint.unbridged().isNull();
498+
}
499+
500+
bool BridgedLayoutConstraint_isKnownLayout(
501+
BridgedLayoutConstraint cConstraint) {
502+
return cConstraint.unbridged()->isKnownLayout();
503+
}
504+
505+
bool BridgedLayoutConstraint_isTrivial(BridgedLayoutConstraint cConstraint) {
506+
return cConstraint.unbridged()->isTrivial();
507+
}
508+
481509
//===----------------------------------------------------------------------===//
482510
// MARK: Macros
483511
//===----------------------------------------------------------------------===//

include/swift/AST/LayoutConstraintKind.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#ifndef SWIFT_LAYOUT_CONSTRAINTKIND_H
2020
#define SWIFT_LAYOUT_CONSTRAINTKIND_H
2121

22+
namespace swift {
2223
/// Describes a layout constraint information.
2324
enum class LayoutConstraintKind : uint8_t {
2425
// It is not a known layout constraint.
@@ -45,5 +46,6 @@ enum class LayoutConstraintKind : uint8_t {
4546
TrivialStride,
4647
LastLayout = TrivialStride,
4748
};
49+
} // namespace swift
4850

49-
#endif
51+
#endif // SWIFT_LAYOUT_CONSTRAINTKIND_H

0 commit comments

Comments
 (0)