Serialization: Handle precedence groups and operators in ExternallyAccessibleDeclVisitor.

This commit is contained in:
Allan Shortlidge
2023-09-14 17:58:29 -07:00
parent 061578c1a8
commit 1cec6a454f
5 changed files with 33 additions and 4 deletions

View File

@@ -3413,8 +3413,6 @@ class Serializer::DeclSerializer : public DeclVisitor<DeclSerializer> {
UNREACHABLE(MacroExpansion);
UNREACHABLE(GenericTypeParam);
UNREACHABLE(Param);
UNREACHABLE(PrecedenceGroup);
UNREACHABLE(Operator);
#undef UNREACHABLE
@@ -3427,7 +3425,9 @@ class Serializer::DeclSerializer : public DeclVisitor<DeclSerializer> {
#define UNINTERESTING(KIND) \
bool visit##KIND##Decl(const KIND##Decl *D) { return true; }
UNINTERESTING(IfConfig);
UNINTERESTING(PrecedenceGroup);
UNINTERESTING(EnumCase);
UNINTERESTING(Operator);
#undef UNINTERESTING
};

View File

@@ -256,3 +256,18 @@ extension PublicStruct {
public static func inactiveMethod() -> DoesNotExist {}
#endif
}
// MARK: - Operators & Precedence Groups
precedencegroup FooPrecedence {
assignment: true
associativity: right
}
infix operator <<<: FooPrecedence
extension PublicStruct {
public static func <<<(lhs: inout Self, rhs: Self) {
lhs = rhs
}
}

View File

@@ -94,3 +94,8 @@ func testConditionalConformance<T>(_ s: PublicGenericStruct<T>) {
func testTypealiases() {
let _: PublicStruct = PublicStructAlias(x: 1)
}
func testOperators() {
var a: PublicStruct
a <<< PublicStruct(x: 2)
}

View File

@@ -106,6 +106,14 @@
// CHECK: extension lazy_typecheck.PublicStruct {
// CHECK: public static func activeMethod()
// CHECK: }
// CHECK: precedencegroup FooPrecedence {
// CHECK: associativity: right
// CHECK: assignment: true
// CHECK: }
// CHECK: infix operator <<< : FooPrecedence
// CHECK: extension lazy_typecheck.PublicStruct {
// CHECK: public static func <<< (lhs: inout lazy_typecheck.PublicStruct, rhs: lazy_typecheck.PublicStruct)
// CHECK: }
// CHECK: @available(*, unavailable)
// CHECK-NEXT: extension lazy_typecheck.PublicGenericStruct : lazy_typecheck.EmptyPublicProto where T : _ConstraintThatIsNotPartOfTheAPIOfThisLibrary {}
// CHECK: extension lazy_typecheck.PublicStructIndirectlyConformingToPublicProto : lazy_typecheck.PublicProto {}

View File

@@ -102,8 +102,9 @@ exports:
'_$s14lazy_typecheck12PublicStructV26publicPropertyInferredTypeSSvg',
'_$s14lazy_typecheck12PublicStructV26publicPropertyInferredTypeSSvpMV',
'_$s14lazy_typecheck12PublicStructV26publicPropertyInferredTypeSSvs',
'_$s14lazy_typecheck12PublicStructVMa', '_$s14lazy_typecheck12PublicStructVMn',
'_$s14lazy_typecheck12PublicStructVN', '_$s14lazy_typecheck13PublicWrapperV12wrappedValueACyxGx_tcfC',
'_$s14lazy_typecheck12PublicStructV3llloiyyACz_ACtFZ', '_$s14lazy_typecheck12PublicStructVMa',
'_$s14lazy_typecheck12PublicStructVMn', '_$s14lazy_typecheck12PublicStructVN',
'_$s14lazy_typecheck13PublicWrapperV12wrappedValueACyxGx_tcfC',
'_$s14lazy_typecheck13PublicWrapperV12wrappedValuexvM', '_$s14lazy_typecheck13PublicWrapperV12wrappedValuexvg',
'_$s14lazy_typecheck13PublicWrapperV12wrappedValuexvpMV',
'_$s14lazy_typecheck13PublicWrapperV12wrappedValuexvs', '_$s14lazy_typecheck13PublicWrapperV14projectedValueACyxGvg',