Skip to content

Commit 9cf4d69

Browse files
committed
---
yaml --- r: 348726 b: refs/heads/master c: 6456b39 h: refs/heads/master
1 parent 3daa955 commit 9cf4d69

32 files changed

+767
-1048
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
refs/heads/master: a4fcd26b38e87ccae4fc9c934236edb3d5ea86fc
2+
refs/heads/master: 6456b39660a7b6192fe5a5786eb17e7fbfbff079
33
refs/heads/master-next: 203b3026584ecad859eb328b2e12490099409cd5
44
refs/tags/osx-passed: b6b74147ef8a386f532cf9357a1bde006e552c54
55
refs/tags/swift-2.2-SNAPSHOT-2015-12-01-a: 6bb18e013c2284f2b45f5f84f2df2887dc0f7dea

trunk/include/swift/Parse/ASTGen.h

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

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

4445
public:
@@ -102,8 +103,7 @@ class ASTGen {
102103
//===--------------------------------------------------------------------===//
103104
// Types.
104105

105-
TypeRepr *generate(const syntax::TypeSyntax &Type, const SourceLoc Loc,
106-
bool IsSILFuncDecl = false);
106+
TypeRepr *generate(const syntax::TypeSyntax &Type, const SourceLoc Loc);
107107
TypeRepr *generate(const syntax::SomeTypeSyntax &Type, const SourceLoc Loc);
108108
TypeRepr *generate(const syntax::CompositionTypeSyntax &Type,
109109
const SourceLoc Loc);
@@ -127,19 +127,11 @@ 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);
134130
TypeRepr *generate(const syntax::CodeCompletionTypeSyntax &Type,
135131
const SourceLoc Loc);
136132
TypeRepr *generate(const syntax::UnknownTypeSyntax &Type,
137133
const SourceLoc Loc);
138134

139-
TypeAttributes
140-
generateTypeAttributes(const syntax::AttributeListSyntax &syntax,
141-
const SourceLoc Loc);
142-
143135
private:
144136
TupleTypeRepr *
145137
generateTuple(const syntax::TokenSyntax &LParen,
@@ -204,6 +196,10 @@ class ASTGen {
204196
TypeRepr *lookupType(syntax::TypeSyntax Type);
205197

206198
public:
199+
void addType(TypeRepr *Type, const SourceLoc Loc);
200+
bool hasType(const SourceLoc Loc) const;
201+
TypeRepr *getType(const SourceLoc Loc) const;
202+
207203
void addDeclAttributes(DeclAttributes attrs, const SourceLoc Loc);
208204
bool hasDeclAttributes(SourceLoc Loc) const;
209205
DeclAttributes getDeclAttributes(const SourceLoc Loc) const;

trunk/include/swift/Parse/ParsedRawSyntaxNode.h

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -119,20 +119,8 @@ 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-
133122
ParsedRawSyntaxNode &operator=(ParsedRawSyntaxNode &&other) {
134-
assert(ensureDataIsNotRecorded() &&
135-
"recorded data is being destroyed by assignment");
123+
assert(DK != DataKind::Recorded);
136124
switch (other.DK) {
137125
case DataKind::Null:
138126
break;
@@ -157,7 +145,7 @@ class ParsedRawSyntaxNode {
157145
*this = std::move(other);
158146
}
159147
~ParsedRawSyntaxNode() {
160-
assert(ensureDataIsNotRecorded() && "recorded data is being destructed");
148+
assert(DK != DataKind::Recorded);
161149
}
162150

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

trunk/include/swift/Parse/Parser.h

Lines changed: 49 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1082,13 +1082,24 @@ class Parser {
10821082
/// an error parsing.
10831083
bool parseVersionTuple(llvm::VersionTuple &Version, SourceRange &Range,
10841084
const Diagnostic &D);
1085+
10851086
bool parseTypeAttributeList(ParamDecl::Specifier &Specifier,
10861087
SourceLoc &SpecifierLoc,
1087-
TypeAttributes &Attributes);
1088-
ParserStatus parseTypeAttributeListSyntax(Optional<ParsedTokenSyntax> &specifier,
1089-
Optional<ParsedAttributeListSyntax> &attrs);
1090-
ParsedSyntaxResult<ParsedAttributeSyntax> parseTypeAttributeSyntax();
1091-
1088+
TypeAttributes &Attributes) {
1089+
if (Tok.isAny(tok::at_sign, tok::kw_inout) ||
1090+
(Tok.is(tok::identifier) &&
1091+
(Tok.getRawText().equals("__shared") ||
1092+
Tok.getRawText().equals("__owned"))))
1093+
return parseTypeAttributeListPresent(Specifier, SpecifierLoc, Attributes);
1094+
return false;
1095+
}
1096+
bool parseTypeAttributeListPresent(ParamDecl::Specifier &Specifier,
1097+
SourceLoc &SpecifierLoc,
1098+
TypeAttributes &Attributes);
1099+
bool parseTypeAttribute(TypeAttributes &Attributes, SourceLoc AtLoc,
1100+
bool justChecking = false);
1101+
1102+
10921103
ParserResult<ImportDecl> parseDeclImport(ParseDeclOptions Flags,
10931104
DeclAttributes &Attributes);
10941105
ParserStatus parseInheritance(MutableArrayRef<TypeLoc> &Inherited,
@@ -1179,47 +1190,44 @@ class Parser {
11791190
//===--------------------------------------------------------------------===//
11801191
// Type Parsing
11811192

1182-
ParserResult<TypeRepr> parseType();
1183-
ParserResult<TypeRepr> parseType(Diag<> MessageID,
1184-
bool HandleCodeCompletion = true,
1185-
bool IsSILFuncDecl = false);
1186-
ParserStatus parseGenericArguments(llvm::SmallVectorImpl<TypeRepr *> &ArgsAST,
1187-
SourceLoc &LAngleLoc,
1188-
SourceLoc &RAngleLoc);
1189-
TypeRepr *applyAttributeToType(TypeRepr *Ty, const TypeAttributes &Attr,
1190-
ParamDecl::Specifier Specifier,
1191-
SourceLoc SpecifierLoc);
1192-
ParserResult<TypeRepr> parseAnyTypeAST();
1193+
using TypeASTResult = ParserResult<TypeRepr>;
1194+
using TypeResult = ParsedSyntaxResult<ParsedTypeSyntax>;
11931195

11941196
ParsedSyntaxResult<ParsedLayoutConstraintSyntax>
11951197
parseLayoutConstraintSyntax();
11961198

1197-
ParsedSyntaxResult<ParsedTypeSyntax> parseTypeSyntax();
1198-
ParsedSyntaxResult<ParsedTypeSyntax>
1199-
parseTypeSyntax(Diag<> MessageID, bool HandleCodeCompletion = true,
1200-
bool IsSILFuncDecl = false);
1199+
TypeResult parseTypeSyntax();
1200+
TypeResult parseTypeSyntax(Diag<> MessageID, bool HandleCodeCompletion = true,
1201+
bool IsSILFuncDecl = false);
1202+
1203+
TypeASTResult parseType();
1204+
TypeASTResult parseType(Diag<> MessageID, bool HandleCodeCompletion = true,
1205+
bool IsSILFuncDecl = false);
1206+
ParserStatus
1207+
parseGenericArgumentsAST(llvm::SmallVectorImpl<TypeRepr *> &ArgsAST,
1208+
SourceLoc &LAngleLoc, SourceLoc &RAngleLoc);
1209+
TypeASTResult parseSILBoxType(GenericParamList *generics,
1210+
const TypeAttributes &attrs,
1211+
Optional<Scope> &GenericsScope);
1212+
TypeASTResult parseTypeSimpleOrCompositionAST(Diag<> MessageID,
1213+
bool HandleCodeCompletion);
1214+
TypeASTResult parseAnyTypeAST();
12011215

12021216
ParsedSyntaxResult<ParsedGenericArgumentClauseSyntax>
12031217
parseGenericArgumentClauseSyntax();
12041218

1205-
ParsedSyntaxResult<ParsedTypeSyntax>
1206-
parseTypeSimple(Diag<> MessageID, bool HandleCodeCompletion);
1207-
ParsedSyntaxResult<ParsedTypeSyntax>
1208-
parseTypeSimpleOrComposition(Diag<> MessageID, bool HandleCodeCompletion);
1209-
ParsedSyntaxResult<ParsedTypeSyntax> parseTypeIdentifier();
1210-
ParsedSyntaxResult<ParsedTypeSyntax> parseAnyType();
1211-
ParsedSyntaxResult<ParsedTypeSyntax> parseTypeTupleBody();
1212-
ParsedSyntaxResult<ParsedTypeSyntax> parseTypeCollection();
1213-
ParsedSyntaxResult<ParsedTypeSyntax> parseMetatypeType(ParsedTypeSyntax Base);
1214-
ParsedSyntaxResult<ParsedTypeSyntax> parseOptionalType(ParsedTypeSyntax Base);
1215-
ParsedSyntaxResult<ParsedTypeSyntax>
1216-
parseImplicitlyUnwrappedOptionalType(ParsedTypeSyntax Base);
1217-
ParsedSyntaxResult<ParsedTypeSyntax> parseSILBoxTypeSyntax(
1218-
Optional<ParsedGenericParameterClauseListSyntax> genericParams);
1219-
1220-
ParsedSyntaxResult<ParsedTypeSyntax> parseTypeArray(ParsedTypeSyntax Base,
1221-
SourceLoc BaseLoc);
1222-
ParsedSyntaxResult<ParsedTypeSyntax> parseOldStyleProtocolComposition();
1219+
TypeResult parseTypeSimple(Diag<> MessageID, bool HandleCodeCompletion);
1220+
TypeResult parseTypeSimpleOrComposition(Diag<> MessageID, bool HandleCodeCompletion);
1221+
TypeResult parseTypeIdentifier();
1222+
TypeResult parseAnyType();
1223+
TypeResult parseTypeTupleBody();
1224+
TypeResult parseTypeCollection();
1225+
TypeResult parseMetatypeType(ParsedTypeSyntax Base);
1226+
TypeResult parseOptionalType(ParsedTypeSyntax Base);
1227+
TypeResult parseImplicitlyUnwrappedOptionalType(ParsedTypeSyntax Base);
1228+
1229+
TypeResult parseTypeArray(ParsedTypeSyntax Base, SourceLoc BaseLoc);
1230+
TypeResult parseOldStyleProtocolComposition();
12231231

12241232
bool isOptionalToken(const Token &T) const;
12251233
ParsedTokenSyntax consumeOptionalTokenSyntax();
@@ -1229,10 +1237,9 @@ class Parser {
12291237
ParsedTokenSyntax consumeImplicitlyUnwrappedOptionalTokenSyntax();
12301238
SourceLoc consumeImplicitlyUnwrappedOptionalToken();
12311239

1232-
ParsedSyntaxResult<ParsedTypeSyntax>
1233-
applyAttributeToTypeSyntax(ParsedSyntaxResult<ParsedTypeSyntax> &&ty,
1234-
Optional<ParsedTokenSyntax> specifier,
1235-
Optional<ParsedAttributeListSyntax> attrs);
1240+
TypeRepr *applyAttributeToType(TypeRepr *Ty, const TypeAttributes &Attr,
1241+
ParamDecl::Specifier Specifier,
1242+
SourceLoc SpecifierLoc);
12361243

12371244
//===--------------------------------------------------------------------===//
12381245
// Pattern Parsing

trunk/lib/AST/Decl.cpp

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

70017001
Type FuncDecl::getResultInterfaceType() const {
7002-
if (!hasInterfaceType())
7003-
return nullptr;
7004-
70057002
Type resultTy = getInterfaceType();
7006-
if (resultTy->is<ErrorType>())
7003+
if (resultTy.isNull() || resultTy->is<ErrorType>())
70077004
return resultTy;
70087005

70097006
if (hasImplicitSelfDecl())

0 commit comments

Comments
 (0)