Skip to content

Commit 3692167

Browse files
committed
Merge branch 'master_4' into tensorflow
2 parents 5ce6f17 + 14477a7 commit 3692167

31 files changed

+1087
-800
lines changed

include/swift/Parse/ASTGen.h

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,8 @@ class ASTGen {
3737

3838
// FIXME: remove when Syntax can represent all types and ASTGen can handle
3939
// them
40-
/// Types that cannot be represented by Syntax or generated by ASTGen.
41-
llvm::DenseMap<SourceLoc, TypeRepr *> Types;
42-
40+
/// Decl attributes that cannot be represented by Syntax or generated by
41+
/// ASTGen.
4342
llvm::DenseMap<SourceLoc, DeclAttributes> ParsedDeclAttrs;
4443

4544
public:
@@ -103,7 +102,8 @@ class ASTGen {
103102
//===--------------------------------------------------------------------===//
104103
// Types.
105104

106-
TypeRepr *generate(const syntax::TypeSyntax &Type, const SourceLoc Loc);
105+
TypeRepr *generate(const syntax::TypeSyntax &Type, const SourceLoc Loc,
106+
bool IsSILFuncDecl = false);
107107
TypeRepr *generate(const syntax::SomeTypeSyntax &Type, const SourceLoc Loc);
108108
TypeRepr *generate(const syntax::CompositionTypeSyntax &Type,
109109
const SourceLoc Loc);
@@ -127,11 +127,19 @@ class ASTGen {
127127
const SourceLoc Loc);
128128
TypeRepr *generate(const syntax::ClassRestrictionTypeSyntax &Type,
129129
const SourceLoc Loc);
130+
TypeRepr *generate(const syntax::SILBoxTypeSyntax &Type, const SourceLoc Loc,
131+
bool IsSILFuncDecl);
132+
TypeRepr *generate(const syntax::SILFunctionTypeSyntax &Type,
133+
const SourceLoc Loc, bool IsSILFuncDecl);
130134
TypeRepr *generate(const syntax::CodeCompletionTypeSyntax &Type,
131135
const SourceLoc Loc);
132136
TypeRepr *generate(const syntax::UnknownTypeSyntax &Type,
133137
const SourceLoc Loc);
134138

139+
TypeAttributes
140+
generateTypeAttributes(const syntax::AttributeListSyntax &syntax,
141+
const SourceLoc Loc);
142+
135143
private:
136144
TupleTypeRepr *
137145
generateTuple(const syntax::TokenSyntax &LParen,
@@ -196,10 +204,6 @@ class ASTGen {
196204
TypeRepr *lookupType(syntax::TypeSyntax Type);
197205

198206
public:
199-
void addType(TypeRepr *Type, const SourceLoc Loc);
200-
bool hasType(const SourceLoc Loc) const;
201-
TypeRepr *getType(const SourceLoc Loc) const;
202-
203207
void addDeclAttributes(DeclAttributes attrs, const SourceLoc Loc);
204208
bool hasDeclAttributes(SourceLoc Loc) const;
205209
DeclAttributes getDeclAttributes(const SourceLoc Loc) const;

include/swift/Parse/ParsedRawSyntaxNode.h

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -119,8 +119,20 @@ class ParsedRawSyntaxNode {
119119
assert(getTokenKind() == tokKind && "Token kind with too large value!");
120120
}
121121

122+
#ifndef NDEBUG
123+
bool ensureDataIsNotRecorded() {
124+
if (DK != DataKind::Recorded)
125+
return true;
126+
llvm::dbgs() << "Leaking node: ";
127+
dump(llvm::dbgs());
128+
llvm::dbgs() << "\n";
129+
return false;
130+
}
131+
#endif
132+
122133
ParsedRawSyntaxNode &operator=(ParsedRawSyntaxNode &&other) {
123-
assert(DK != DataKind::Recorded);
134+
assert(ensureDataIsNotRecorded() &&
135+
"recorded data is being destroyed by assignment");
124136
switch (other.DK) {
125137
case DataKind::Null:
126138
break;
@@ -145,7 +157,7 @@ class ParsedRawSyntaxNode {
145157
*this = std::move(other);
146158
}
147159
~ParsedRawSyntaxNode() {
148-
assert(DK != DataKind::Recorded);
160+
assert(ensureDataIsNotRecorded() && "recorded data is being destructed");
149161
}
150162

151163
syntax::SyntaxKind getKind() const { return syntax::SyntaxKind(SynKind); }

include/swift/Parse/Parser.h

Lines changed: 42 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -1118,24 +1118,13 @@ class Parser {
11181118
/// an error parsing.
11191119
bool parseVersionTuple(llvm::VersionTuple &Version, SourceRange &Range,
11201120
const Diagnostic &D);
1121-
11221121
bool parseTypeAttributeList(ParamDecl::Specifier &Specifier,
11231122
SourceLoc &SpecifierLoc,
1124-
TypeAttributes &Attributes) {
1125-
if (Tok.isAny(tok::at_sign, tok::kw_inout) ||
1126-
(Tok.is(tok::identifier) &&
1127-
(Tok.getRawText().equals("__shared") ||
1128-
Tok.getRawText().equals("__owned"))))
1129-
return parseTypeAttributeListPresent(Specifier, SpecifierLoc, Attributes);
1130-
return false;
1131-
}
1132-
bool parseTypeAttributeListPresent(ParamDecl::Specifier &Specifier,
1133-
SourceLoc &SpecifierLoc,
1134-
TypeAttributes &Attributes);
1135-
bool parseTypeAttribute(TypeAttributes &Attributes, SourceLoc AtLoc,
1136-
bool justChecking = false);
1137-
1138-
1123+
TypeAttributes &Attributes);
1124+
ParserStatus parseTypeAttributeListSyntax(Optional<ParsedTokenSyntax> &specifier,
1125+
Optional<ParsedAttributeListSyntax> &attrs);
1126+
ParsedSyntaxResult<ParsedAttributeSyntax> parseTypeAttributeSyntax();
1127+
11391128
ParserResult<ImportDecl> parseDeclImport(ParseDeclOptions Flags,
11401129
DeclAttributes &Attributes);
11411130
ParserStatus parseInheritance(MutableArrayRef<TypeLoc> &Inherited,
@@ -1226,34 +1215,33 @@ class Parser {
12261215
//===--------------------------------------------------------------------===//
12271216
// Type Parsing
12281217

1229-
using TypeASTResult = ParserResult<TypeRepr>;
1230-
using TypeResult = ParsedSyntaxResult<ParsedTypeSyntax>;
1218+
ParserResult<TypeRepr> parseType();
1219+
ParserResult<TypeRepr> parseType(Diag<> MessageID,
1220+
bool HandleCodeCompletion = true,
1221+
bool IsSILFuncDecl = false);
1222+
ParserStatus parseGenericArguments(llvm::SmallVectorImpl<TypeRepr *> &ArgsAST,
1223+
SourceLoc &LAngleLoc,
1224+
SourceLoc &RAngleLoc);
1225+
TypeRepr *applyAttributeToType(TypeRepr *Ty, const TypeAttributes &Attr,
1226+
ParamDecl::Specifier Specifier,
1227+
SourceLoc SpecifierLoc);
1228+
ParserResult<TypeRepr> parseAnyTypeAST();
12311229

12321230
ParsedSyntaxResult<ParsedLayoutConstraintSyntax>
12331231
parseLayoutConstraintSyntax();
12341232

1235-
TypeResult parseTypeSyntax();
1236-
TypeResult parseTypeSyntax(Diag<> MessageID, bool HandleCodeCompletion = true,
1237-
bool IsSILFuncDecl = false);
1238-
1239-
TypeASTResult parseType();
1240-
TypeASTResult parseType(Diag<> MessageID, bool HandleCodeCompletion = true,
1241-
bool IsSILFuncDecl = false);
1242-
ParserStatus
1243-
parseGenericArgumentsAST(llvm::SmallVectorImpl<TypeRepr *> &ArgsAST,
1244-
SourceLoc &LAngleLoc, SourceLoc &RAngleLoc);
1245-
TypeASTResult parseSILBoxType(GenericParamList *generics,
1246-
const TypeAttributes &attrs,
1247-
Optional<Scope> &GenericsScope);
1248-
TypeASTResult parseTypeSimpleOrCompositionAST(Diag<> MessageID,
1249-
bool HandleCodeCompletion);
1250-
TypeASTResult parseAnyTypeAST();
1233+
ParsedSyntaxResult<ParsedTypeSyntax> parseTypeSyntax();
1234+
ParsedSyntaxResult<ParsedTypeSyntax>
1235+
parseTypeSyntax(Diag<> MessageID, bool HandleCodeCompletion = true,
1236+
bool IsSILFuncDecl = false);
12511237

12521238
ParsedSyntaxResult<ParsedGenericArgumentClauseSyntax>
12531239
parseGenericArgumentClauseSyntax();
12541240

1255-
TypeResult parseTypeSimple(Diag<> MessageID, bool HandleCodeCompletion);
1256-
TypeResult parseTypeSimpleOrComposition(Diag<> MessageID, bool HandleCodeCompletion);
1241+
ParsedSyntaxResult<ParsedTypeSyntax>
1242+
parseTypeSimple(Diag<> MessageID, bool HandleCodeCompletion);
1243+
ParsedSyntaxResult<ParsedTypeSyntax>
1244+
parseTypeSimpleOrComposition(Diag<> MessageID, bool HandleCodeCompletion);
12571245
// SWIFT_ENABLE_TENSORFLOW: Added `isParsingQualifiedDeclName` flag.
12581246
/// Parses a type identifier (e.g. 'Foo' or 'Foo.Bar.Baz').
12591247
///
@@ -1265,16 +1253,20 @@ class Parser {
12651253
/// positioned at '.f'.
12661254
/// - If there is no type qualification (e.g. when parsing just 'f'), returns
12671255
/// an empty parser error.
1268-
TypeResult parseTypeIdentifier(bool isParsingQualifiedDeclName = false);
1269-
TypeResult parseAnyType();
1270-
TypeResult parseTypeTupleBody();
1271-
TypeResult parseTypeCollection();
1272-
TypeResult parseMetatypeType(ParsedTypeSyntax Base);
1273-
TypeResult parseOptionalType(ParsedTypeSyntax Base);
1274-
TypeResult parseImplicitlyUnwrappedOptionalType(ParsedTypeSyntax Base);
1275-
1276-
TypeResult parseTypeArray(ParsedTypeSyntax Base, SourceLoc BaseLoc);
1277-
TypeResult parseOldStyleProtocolComposition();
1256+
ParsedSyntaxResult<ParsedTypeSyntax> parseTypeIdentifier(bool isParsingQualifiedDeclName = false);
1257+
ParsedSyntaxResult<ParsedTypeSyntax> parseAnyType();
1258+
ParsedSyntaxResult<ParsedTypeSyntax> parseTypeTupleBody();
1259+
ParsedSyntaxResult<ParsedTypeSyntax> parseTypeCollection();
1260+
ParsedSyntaxResult<ParsedTypeSyntax> parseMetatypeType(ParsedTypeSyntax Base);
1261+
ParsedSyntaxResult<ParsedTypeSyntax> parseOptionalType(ParsedTypeSyntax Base);
1262+
ParsedSyntaxResult<ParsedTypeSyntax>
1263+
parseImplicitlyUnwrappedOptionalType(ParsedTypeSyntax Base);
1264+
ParsedSyntaxResult<ParsedTypeSyntax> parseSILBoxTypeSyntax(
1265+
Optional<ParsedGenericParameterClauseListSyntax> genericParams);
1266+
1267+
ParsedSyntaxResult<ParsedTypeSyntax> parseTypeArray(ParsedTypeSyntax Base,
1268+
SourceLoc BaseLoc);
1269+
ParsedSyntaxResult<ParsedTypeSyntax> parseOldStyleProtocolComposition();
12781270

12791271
bool isOptionalToken(const Token &T) const;
12801272
ParsedTokenSyntax consumeOptionalTokenSyntax();
@@ -1284,9 +1276,10 @@ class Parser {
12841276
ParsedTokenSyntax consumeImplicitlyUnwrappedOptionalTokenSyntax();
12851277
SourceLoc consumeImplicitlyUnwrappedOptionalToken();
12861278

1287-
TypeRepr *applyAttributeToType(TypeRepr *Ty, const TypeAttributes &Attr,
1288-
ParamDecl::Specifier Specifier,
1289-
SourceLoc SpecifierLoc);
1279+
ParsedSyntaxResult<ParsedTypeSyntax>
1280+
applyAttributeToTypeSyntax(ParsedSyntaxResult<ParsedTypeSyntax> &&ty,
1281+
Optional<ParsedTokenSyntax> specifier,
1282+
Optional<ParsedAttributeListSyntax> attrs);
12901283

12911284
//===--------------------------------------------------------------------===//
12921285
// Pattern Parsing

lib/AST/Decl.cpp

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7086,11 +7086,8 @@ StaticSpellingKind FuncDecl::getCorrectStaticSpelling() const {
70867086
}
70877087

70887088
Type FuncDecl::getResultInterfaceType() const {
7089-
if (!hasInterfaceType())
7090-
return nullptr;
7091-
70927089
Type resultTy = getInterfaceType();
7093-
if (resultTy->is<ErrorType>())
7090+
if (resultTy.isNull() || resultTy->is<ErrorType>())
70947091
return resultTy;
70957092

70967093
if (hasImplicitSelfDecl())

0 commit comments

Comments
 (0)