Skip to content

Commit efea164

Browse files
committed
[ASTGen] Generate from 'MissingTypeSyntax'
Just emit ErrorTypeRepr
1 parent f48282c commit efea164

File tree

7 files changed

+32
-2
lines changed

7 files changed

+32
-2
lines changed

include/swift/AST/ASTBridging.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2510,6 +2510,10 @@ BridgedDictionaryTypeRepr BridgedDictionaryTypeRepr_createParsed(
25102510
BridgedTypeRepr keyType, BridgedSourceLoc cColonloc,
25112511
BridgedTypeRepr valueType, BridgedSourceLoc cRSquareLoc);
25122512

2513+
SWIFT_NAME("BridgedErrorTypeRepr.create(_:range:)")
2514+
BridgedErrorTypeRepr BridgedErrorTypeRepr_create(BridgedASTContext cContext,
2515+
BridgedSourceRange cRange);
2516+
25132517
SWIFT_NAME("BridgedFunctionTypeRepr.createParsed(_:argsType:asyncLoc:throwsLoc:"
25142518
"thrownType:arrowLoc:resultType:)")
25152519
BridgedFunctionTypeRepr BridgedFunctionTypeRepr_createParsed(

include/swift/AST/Decl.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7459,6 +7459,8 @@ class SubscriptDecl : public GenericContext, public AbstractStorageDecl {
74597459
/// operation.
74607460
Type getElementInterfaceType() const;
74617461

7462+
std::optional<Type> getCachedElementInterfaceType() const;
7463+
74627464
TypeRepr *getElementTypeRepr() const { return ElementTy.getTypeRepr(); }
74637465
SourceRange getElementTypeSourceRange() const {
74647466
return ElementTy.getSourceRange();

lib/AST/ASTDumper.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2563,6 +2563,8 @@ namespace {
25632563
printCommon(SD, "subscript_decl", label);
25642564
printStorageImpl(SD);
25652565
printAttributes(SD);
2566+
printTypeOrTypeRepr(SD->getCachedElementInterfaceType(),
2567+
SD->getElementTypeRepr(), Label::always("element"));
25662568
printAccessors(SD);
25672569
printFoot();
25682570
}

lib/AST/Bridging/TypeReprBridging.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,11 @@ BridgedDictionaryTypeRepr BridgedDictionaryTypeRepr_createParsed(
9595
SourceRange{lSquareLoc, rSquareLoc});
9696
}
9797

98+
BridgedErrorTypeRepr BridgedErrorTypeRepr_create(BridgedASTContext cContext,
99+
BridgedSourceRange cRange) {
100+
return ErrorTypeRepr::create(cContext.unbridged(), cRange.unbridged());
101+
}
102+
98103
BridgedInverseTypeRepr
99104
BridgedInverseTypeRepr_createParsed(BridgedASTContext cContext,
100105
BridgedSourceLoc cTildeLoc,

lib/AST/Decl.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9343,6 +9343,11 @@ Type SubscriptDecl::getElementInterfaceType() const {
93439343
return ErrorType::get(ctx);
93449344
}
93459345

9346+
std::optional<Type> SubscriptDecl::getCachedElementInterfaceType() const {
9347+
auto mutableThis = const_cast<SubscriptDecl *>(this);
9348+
return ResultTypeRequest{mutableThis}.getCachedResult();
9349+
}
9350+
93469351
ObjCSubscriptKind SubscriptDecl::getObjCSubscriptKind() const {
93479352
// If the index type is an integral type, we have an indexed
93489353
// subscript.

lib/ASTGen/Sources/ASTGen/Types.swift

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,8 @@ extension ASTGenVisitor {
4444
return self.generate(memberType: node).asTypeRepr
4545
case .metatypeType(let node):
4646
return self.generate(metatypeType: node)
47-
case .missingType:
48-
fatalError("unimplemented")
47+
case .missingType(let node):
48+
return self.generate(missingType: node)
4949
case .namedOpaqueReturnType(let node):
5050
return self.generate(namedOpaqueReturnType: node).asTypeRepr
5151
case .optionalType(let node):
@@ -164,6 +164,13 @@ extension ASTGenVisitor {
164164
}
165165
}
166166

167+
func generate(missingType node: MissingTypeSyntax) -> BridgedTypeRepr {
168+
return BridgedErrorTypeRepr.create(
169+
self.ctx,
170+
range: self.generateSourceRange(node)
171+
).asTypeRepr
172+
}
173+
167174
func generate(
168175
implicitlyUnwrappedOptionalType node: ImplicitlyUnwrappedOptionalTypeSyntax
169176
) -> BridgedImplicitlyUnwrappedOptionalTypeRepr {

test/ASTGen/diagnostics.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,3 +28,8 @@ func dummy() {}
2828

2929
@_silgen_name("whatever", extra) // expected-error@:27 {{unexpected arguments in '_silgen_name' attribute}}
3030
func _whatever()
31+
32+
struct S {
33+
subscript(x: Int) { _ = 1 } // expected-error@:23 {{expected '->' and return type in subscript}}
34+
// expected-note@-1:23 {{insert '->' and return type}}
35+
}

0 commit comments

Comments
 (0)