Skip to content

Commit 796b655

Browse files
committed
---
yaml --- r: 348924 b: refs/heads/master c: 7b0d081 h: refs/heads/master
1 parent d2e48d4 commit 796b655

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

48 files changed

+701
-1016
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: 1724f5b704074c498739f07876e408475c7bd1e9
2+
refs/heads/master: 7b0d08196544b59083874e8bc92fe37756b9b925
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/AST/Decl.h

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3541,6 +3541,8 @@ class EnumDecl final : public NominalTypeDecl {
35413541
return SourceRange(EnumLoc, getBraces().End);
35423542
}
35433543

3544+
EnumElementDecl *getElement(Identifier Name) const;
3545+
35443546
public:
35453547
/// A range for iterating the elements of an enum.
35463548
using ElementRange = DowncastFilterRange<EnumElementDecl, DeclRange>;
@@ -6353,7 +6355,13 @@ class EnumElementDecl : public DeclContext, public ValueDecl {
63536355
ParameterList *Params,
63546356
SourceLoc EqualsLoc,
63556357
LiteralExpr *RawValueExpr,
6356-
DeclContext *DC);
6358+
DeclContext *DC)
6359+
: DeclContext(DeclContextKind::EnumElementDecl, DC),
6360+
ValueDecl(DeclKind::EnumElement, DC, Name, IdentifierLoc),
6361+
Params(Params),
6362+
EqualsLoc(EqualsLoc),
6363+
RawValueExpr(RawValueExpr)
6364+
{}
63576365

63586366
Identifier getName() const { return getFullName().getBaseIdentifier(); }
63596367

@@ -6369,7 +6377,6 @@ class EnumElementDecl : public DeclContext, public ValueDecl {
63696377

63706378
Type getArgumentInterfaceType() const;
63716379

6372-
void setParameterList(ParameterList *params);
63736380
ParameterList *getParameterList() const { return Params; }
63746381

63756382
/// Retrieves a fully typechecked raw value expression associated

trunk/include/swift/AST/DeclContext.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -667,7 +667,7 @@ class DeclIterator {
667667

668668
/// The range of declarations stored within an iterable declaration
669669
/// context.
670-
typedef IteratorRange<DeclIterator> DeclRange;
670+
typedef llvm::iterator_range<DeclIterator> DeclRange;
671671

672672
/// The kind of an \c IterableDeclContext.
673673
enum class IterableDeclContextKind : uint8_t {

trunk/include/swift/AST/DiagnosticsSema.def

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3493,8 +3493,6 @@ ERROR(single_tuple_parameter_mismatch_special,none,
34933493
ERROR(single_tuple_parameter_mismatch_normal,none,
34943494
"%0 %1 expects a single parameter of type %2%3",
34953495
(DescriptiveDeclKind, DeclBaseName, Type, StringRef))
3496-
NOTE(note_maybe_forgot_to_form_tuple,none,
3497-
"did you mean to pass a tuple?", ())
34983496
ERROR(unknown_single_tuple_parameter_mismatch,none,
34993497
"single parameter of type %0 is expected in call", (Type))
35003498
ERROR(cannot_convert_single_tuple_into_multiple_arguments,none,

trunk/include/swift/AST/TypeRepr.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -653,7 +653,7 @@ struct TupleTypeReprElement {
653653
TypeRepr *Type;
654654
SourceLoc TrailingCommaLoc;
655655

656-
TupleTypeReprElement(): Type(nullptr) {}
656+
TupleTypeReprElement() {}
657657
TupleTypeReprElement(TypeRepr *Type): Type(Type) {}
658658
};
659659

trunk/include/swift/AST/Types.h

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3965,13 +3965,12 @@ class SILFunctionType final : public TypeBase, public llvm::FoldingSetNode,
39653965
};
39663966
using IndirectFormalResultIter =
39673967
llvm::filter_iterator<const SILResultInfo *, IndirectFormalResultFilter>;
3968-
using IndirectFormalResultRange = IteratorRange<IndirectFormalResultIter>;
3968+
using IndirectFormalResultRange =
3969+
llvm::iterator_range<IndirectFormalResultIter>;
39693970

39703971
/// A range of SILResultInfo for all formally indirect results.
39713972
IndirectFormalResultRange getIndirectFormalResults() const {
3972-
auto filter =
3973-
llvm::make_filter_range(getResults(), IndirectFormalResultFilter());
3974-
return makeIteratorRange(filter.begin(), filter.end());
3973+
return llvm::make_filter_range(getResults(), IndirectFormalResultFilter());
39753974
}
39763975

39773976
struct DirectFormalResultFilter {
@@ -3981,13 +3980,11 @@ class SILFunctionType final : public TypeBase, public llvm::FoldingSetNode,
39813980
};
39823981
using DirectFormalResultIter =
39833982
llvm::filter_iterator<const SILResultInfo *, DirectFormalResultFilter>;
3984-
using DirectFormalResultRange = IteratorRange<DirectFormalResultIter>;
3983+
using DirectFormalResultRange = llvm::iterator_range<DirectFormalResultIter>;
39853984

39863985
/// A range of SILResultInfo for all formally direct results.
39873986
DirectFormalResultRange getDirectFormalResults() const {
3988-
auto filter =
3989-
llvm::make_filter_range(getResults(), DirectFormalResultFilter());
3990-
return makeIteratorRange(filter.begin(), filter.end());
3987+
return llvm::make_filter_range(getResults(), DirectFormalResultFilter());
39913988
}
39923989

39933990
/// Get a single non-address SILType that represents all formal direct

trunk/include/swift/Basic/STLExtras.h

Lines changed: 3 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -251,37 +251,13 @@ inline Iterator prev_or_begin(Iterator it, Iterator begin) {
251251

252252
/// @}
253253

254-
/// A range of iterators.
255-
/// TODO: Add `llvm::iterator_range::empty()`, then remove this helper, along
256-
/// with the superfluous TransformIterator.
257-
template<typename Iterator>
258-
class IteratorRange {
259-
Iterator First, Last;
260-
261-
public:
262-
using iterator = Iterator;
263-
264-
IteratorRange(Iterator first, Iterator last) : First(first), Last(last) { }
265-
iterator begin() const { return First; }
266-
iterator end() const { return Last; }
267-
bool empty() const { return First == Last; }
268-
269-
typename std::iterator_traits<iterator>::value_type front() const {
270-
assert(!empty() && "Front of empty range");
271-
return *begin();
272-
}
273-
};
274-
275-
/// Create a new iterator range.
276-
template<typename Iterator>
277-
inline IteratorRange<Iterator>
278-
makeIteratorRange(Iterator first, Iterator last) {
279-
return IteratorRange<Iterator>(first, last);
280-
}
281254

282255
/// An iterator that transforms the result of an underlying bidirectional
283256
/// iterator with a given operation.
284257
///
258+
/// Slightly different semantics from llvm::map_iterator, but we should
259+
/// probably figure out how to merge them eventually.
260+
///
285261
/// \tparam Iterator the underlying iterator.
286262
///
287263
/// \tparam Operation A function object that transforms the underlying

trunk/include/swift/Parse/ASTGen.h

Lines changed: 1 addition & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,6 @@ class ASTGen {
3737

3838
// FIXME: remove when Syntax can represent all types and ASTGen can handle
3939
// them
40-
/// Exprs that cannot be represented by Syntax or generated by ASTGen.
41-
llvm::DenseMap<SourceLoc, Expr *> Exprs;
42-
4340
/// Decl attributes that cannot be represented by Syntax or generated by
4441
/// ASTGen.
4542
llvm::DenseMap<SourceLoc, DeclAttributes> ParsedDeclAttrs;
@@ -84,9 +81,6 @@ class ASTGen {
8481

8582
Expr *generate(const syntax::ExprSyntax &Expr, const SourceLoc Loc);
8683
Expr *generate(const syntax::IdentifierExprSyntax &Expr, const SourceLoc Loc);
87-
Expr *generate(const syntax::SuperRefExprSyntax &Expr, const SourceLoc Loc);
88-
Expr *generate(const syntax::ArrayExprSyntax &Expr, const SourceLoc Loc);
89-
Expr *generate(const syntax::DictionaryExprSyntax &Expr, const SourceLoc Loc);
9084
Expr *generate(const syntax::EditorPlaceholderExprSyntax &Expr,
9185
const SourceLoc Loc);
9286
Expr *generate(const syntax::SpecializeExprSyntax &Expr, const SourceLoc Loc);
@@ -113,7 +107,6 @@ class ASTGen {
113107
const SourceLoc Loc);
114108

115109
private:
116-
void validateCollectionElement(Expr *elementExpr);
117110

118111
Expr *generateMagicIdentifierLiteralExpression(
119112
const syntax::TokenSyntax &PoundToken, const SourceLoc Loc);
@@ -217,13 +210,6 @@ class ASTGen {
217210
static SourceLoc advanceLocBegin(const SourceLoc &Loc,
218211
const syntax::Syntax &Node);
219212

220-
/// Advance \p Loc to the last non-missing token of the \p Node or, if it
221-
/// doesn't contain any, the last non-missing token preceding it in the tree.
222-
/// \p Loc must be the leading trivia of the first token in the tree in which
223-
/// \p Node resides
224-
static SourceLoc advanceLocEnd(const SourceLoc &Loc,
225-
const syntax::Syntax &Node);
226-
227213
ValueDecl *lookupInScope(DeclName Name);
228214

229215
void addToScope(ValueDecl *D, bool diagnoseRedefinitions = true);
@@ -233,13 +219,9 @@ class ASTGen {
233219
TypeRepr *lookupType(syntax::TypeSyntax Type);
234220

235221
public:
236-
void addExpr(Expr *Expr, const SourceLoc Loc);
237-
bool hasExpr(const SourceLoc Loc) const;
238-
Expr *takeExpr(const SourceLoc Loc);
239-
240222
void addDeclAttributes(DeclAttributes attrs, const SourceLoc Loc);
241223
bool hasDeclAttributes(SourceLoc Loc) const;
242-
DeclAttributes takeDeclAttributes(const SourceLoc Loc);
224+
DeclAttributes getDeclAttributes(const SourceLoc Loc) const;
243225
};
244226
} // namespace swift
245227

trunk/include/swift/Parse/ParsedRawSyntaxNode.h

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,6 @@ class ParsedRawSyntaxNode {
5252
};
5353
struct DeferredLayoutNode {
5454
MutableArrayRef<ParsedRawSyntaxNode> Children;
55-
CharSourceRange Range;
5655
};
5756
struct DeferredTokenNode {
5857
const ParsedTriviaPiece *TriviaPieces;
@@ -73,9 +72,9 @@ class ParsedRawSyntaxNode {
7372
/// Primary used for capturing a deferred missing token.
7473
bool IsMissing = false;
7574

76-
ParsedRawSyntaxNode(syntax::SyntaxKind k, CharSourceRange r,
75+
ParsedRawSyntaxNode(syntax::SyntaxKind k,
7776
MutableArrayRef<ParsedRawSyntaxNode> deferredNodes)
78-
: DeferredLayout({deferredNodes, r}),
77+
: DeferredLayout({deferredNodes}),
7978
SynKind(uint16_t(k)), TokKind(uint16_t(tok::unknown)),
8079
DK(DataKind::DeferredLayout) {
8180
assert(getKind() == k && "Syntax kind with too large value!");
@@ -212,12 +211,14 @@ class ParsedRawSyntaxNode {
212211
return copy;
213212
}
214213

215-
CharSourceRange getDeferredRange() const {
214+
CharSourceRange getDeferredRange(bool includeTrivia) const {
216215
switch (DK) {
217216
case DataKind::DeferredLayout:
218-
return getDeferredLayoutRange();
217+
return getDeferredLayoutRange(includeTrivia);
219218
case DataKind::DeferredToken:
220-
return getDeferredTokenRangeWithTrivia();
219+
return includeTrivia
220+
? getDeferredTokenRangeWithTrivia()
221+
: getDeferredTokenRange();
221222
default:
222223
llvm_unreachable("node not deferred");
223224
}
@@ -242,9 +243,20 @@ class ParsedRawSyntaxNode {
242243

243244
// Deferred Layout Data ====================================================//
244245

245-
CharSourceRange getDeferredLayoutRange() const {
246+
CharSourceRange getDeferredLayoutRange(bool includeTrivia) const {
246247
assert(DK == DataKind::DeferredLayout);
247-
return DeferredLayout.Range;
248+
auto HasValidRange = [includeTrivia](const ParsedRawSyntaxNode &Child) {
249+
return !Child.isNull() && !Child.isMissing() &&
250+
Child.getDeferredRange(includeTrivia).isValid();
251+
};
252+
auto first = llvm::find_if(getDeferredChildren(), HasValidRange);
253+
if (first == getDeferredChildren().end())
254+
return CharSourceRange();
255+
auto last = llvm::find_if(llvm::reverse(getDeferredChildren()),
256+
HasValidRange);
257+
auto firstRange = first->getDeferredRange(includeTrivia);
258+
firstRange.widen(last->getDeferredRange(includeTrivia));
259+
return firstRange;
248260
}
249261
ArrayRef<ParsedRawSyntaxNode> getDeferredChildren() const {
250262
assert(DK == DataKind::DeferredLayout);

trunk/include/swift/Parse/ParsedSyntaxNodes.h.gyb

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,6 @@ namespace swift {
3232
% if not node.is_syntax_collection():
3333
class Parsed${node.name};
3434
% end
35-
% if node.is_buildable():
36-
class Parsed${node.name}Builder;
37-
% end
3835
% end
3936

4037
% for node in SYNTAX_NODES + PARSEONLY_NODES:
@@ -82,10 +79,6 @@ public:
8279
static bool classof(const ParsedSyntax *S) {
8380
return kindof(S->getKind());
8481
}
85-
86-
% if node.is_buildable():
87-
using Builder = Parsed${node.name}Builder;
88-
% end
8982
};
9083

9184
% end

trunk/include/swift/Parse/Parser.h

Lines changed: 9 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -917,12 +917,12 @@ class Parser {
917917
bool AllowSepAfterLast, Diag<> ErrorDiag,
918918
syntax::SyntaxKind Kind,
919919
llvm::function_ref<ParserStatus()> callback);
920-
template <typename ParsedNode>
921-
ParserStatus parseListSyntax(
922-
SmallVectorImpl<ParsedNode> &elements, bool AllowEmpty,
923-
bool AllowSepAfterLast, llvm::function_ref<bool()> isAtCloseTok,
924-
llvm::function_ref<ParserStatus(typename ParsedNode::Builder &)>
925-
callback);
920+
ParserStatus parseListSyntax(tok RightK, SourceLoc LeftLoc,
921+
llvm::Optional<ParsedTokenSyntax> &LastComma,
922+
llvm::Optional<ParsedTokenSyntax> &Right,
923+
llvm::SmallVectorImpl<ParsedSyntax>& Junk,
924+
bool AllowSepAfterLast, Diag<> ErrorDiag,
925+
llvm::function_ref<ParserStatus()> callback);
926926

927927
void consumeTopLevelDecl(ParserPosition BeginParserPosition,
928928
TopLevelCodeDecl *TLCD);
@@ -1428,7 +1428,6 @@ class Parser {
14281428

14291429
//===--------------------------------------------------------------------===//
14301430
// Expression Parsing
1431-
ParsedSyntaxResult<ParsedExprSyntax> parseExpressionSyntax(Diag<> ID);
14321431
ParserResult<Expr> parseExpr(Diag<> ID) {
14331432
return parseExprImpl(ID, /*isExprBasic=*/false);
14341433
}
@@ -1455,7 +1454,6 @@ class Parser {
14551454
ParserResult<Expr> parseExprKeyPath();
14561455
ParserResult<Expr> parseExprSelector();
14571456
ParserResult<Expr> parseExprSuper();
1458-
ParsedSyntaxResult<ParsedExprSyntax> parseExprSuperSyntax();
14591457
ParserResult<Expr> parseExprStringLiteral();
14601458

14611459
// todo [gsoc]: create new result type for ParsedSyntax
@@ -1583,23 +1581,15 @@ class Parser {
15831581
ParserResult<Expr> parseExprCallSuffix(ParserResult<Expr> fn,
15841582
bool isExprBasic);
15851583
ParserResult<Expr> parseExprCollection();
1586-
ParsedSyntaxResult<ParsedExprSyntax> parseExprCollectionSyntax();
1587-
ParsedSyntaxResult<ParsedExprSyntax>
1588-
parseExprArraySyntax(ParsedTokenSyntax &&LSquare, SourceLoc LSquareLoc,
1589-
ParsedSyntaxResult<ParsedExprSyntax> &&firstExpr);
1590-
ParsedSyntaxResult<ParsedExprSyntax>
1591-
parseExprDictionarySyntax(ParsedTokenSyntax &&LSquare, SourceLoc LSquareLoc,
1592-
ParsedSyntaxResult<ParsedExprSyntax> &&firstExpr);
1593-
1584+
ParserResult<Expr> parseExprCollectionElement(Optional<bool> &isDictionary);
15941585
ParserResult<Expr> parseExprPoundUnknown(SourceLoc LSquareLoc);
1595-
ParsedSyntaxResult<ParsedExprSyntax>
1596-
parseExprPoundUnknownSyntax(Optional<ParsedTokenSyntax> &&LSquare,
1597-
SourceLoc LSquareLoc);
15981586
ParserResult<Expr>
15991587
parseExprPoundCodeCompletion(Optional<StmtKind> ParentKind);
16001588

16011589
UnresolvedDeclRefExpr *parseExprOperator();
16021590

1591+
void validateCollectionElement(ParserResult<Expr> element);
1592+
16031593
//===--------------------------------------------------------------------===//
16041594
// Statement Parsing
16051595

0 commit comments

Comments
 (0)