Skip to content

Commit bbd1e00

Browse files
committed
---
yaml --- r: 348942 b: refs/heads/master c: bb08667 h: refs/heads/master
1 parent e04c26c commit bbd1e00

Some content is hidden

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

43 files changed

+372
-278
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: eb02f20f9950ab1f0149c4712ac50ae44bd0b25f
2+
refs/heads/master: bb08667bf5fa6305491e2026bd123f422575c9c0
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/.gitattributes

Lines changed: 0 additions & 2 deletions
This file was deleted.

trunk/include/swift/AST/Attr.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1672,7 +1672,7 @@ class DeclAttributes {
16721672
public:
16731673
template <typename ATTR, bool AllowInvalid>
16741674
using AttributeKindRange =
1675-
OptionalTransformRange<iterator_range<const_iterator>,
1675+
OptionalTransformRange<llvm::iterator_range<const_iterator>,
16761676
ToAttributeKind<ATTR, AllowInvalid>,
16771677
const_iterator>;
16781678

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-
using DeclRange = iterator_range<DeclIterator>;
670+
typedef IteratorRange<DeclIterator> DeclRange;
671671

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

trunk/include/swift/AST/DiagnosticsParse.def

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -970,6 +970,8 @@ ERROR(expected_expr_throw,PointsToFirstBadToken,
970970
// Yield Statment
971971
ERROR(expected_expr_yield,PointsToFirstBadToken,
972972
"expected expression in 'yield' statement", ())
973+
ERROR(unexpected_arg_label_yield,none,
974+
"unexpected argument label in 'yield' statement", ())
973975

974976
// Defer Statement
975977
ERROR(expected_lbrace_after_defer,PointsToFirstBadToken,

trunk/include/swift/AST/Types.h

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

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

39753977
struct DirectFormalResultFilter {
@@ -3979,11 +3981,13 @@ class SILFunctionType final : public TypeBase, public llvm::FoldingSetNode,
39793981
};
39803982
using DirectFormalResultIter =
39813983
llvm::filter_iterator<const SILResultInfo *, DirectFormalResultFilter>;
3982-
using DirectFormalResultRange = iterator_range<DirectFormalResultIter>;
3984+
using DirectFormalResultRange = IteratorRange<DirectFormalResultIter>;
39833985

39843986
/// A range of SILResultInfo for all formally direct results.
39853987
DirectFormalResultRange getDirectFormalResults() const {
3986-
return llvm::make_filter_range(getResults(), DirectFormalResultFilter());
3988+
auto filter =
3989+
llvm::make_filter_range(getResults(), DirectFormalResultFilter());
3990+
return makeIteratorRange(filter.begin(), filter.end());
39873991
}
39883992

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

trunk/include/swift/Basic/BlotSetVector.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,14 +67,14 @@ class BlotSetVector {
6767

6868
ArrayRef<Optional<ValueT>> getArray() const { return vector; }
6969

70-
iterator_range<const_iterator> getRange() const {
70+
llvm::iterator_range<const_iterator> getRange() const {
7171
return {begin(), end()};
7272
}
7373

7474
using const_reverse_iterator = typename VectorT::const_reverse_iterator;
7575
const_reverse_iterator rbegin() const { return vector.rbegin(); }
7676
const_reverse_iterator rend() const { return vector.rend(); }
77-
iterator_range<const_reverse_iterator> getReverseRange() const {
77+
llvm::iterator_range<const_reverse_iterator> getReverseRange() const {
7878
return {rbegin(), rend()};
7979
}
8080

trunk/include/swift/Basic/LLVM.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@ namespace llvm {
4343
template<typename T> class TinyPtrVector;
4444
template<typename T> class Optional;
4545
template <typename ...PTs> class PointerUnion;
46-
template <typename IteratorT> class iterator_range;
4746
class SmallBitVector;
4847

4948
// Other common classes.
@@ -64,7 +63,6 @@ namespace swift {
6463

6564
// Containers.
6665
using llvm::ArrayRef;
67-
using llvm::iterator_range;
6866
using llvm::MutableArrayRef;
6967
using llvm::None;
7068
using llvm::Optional;

trunk/include/swift/Basic/Range.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444

4545
namespace swift {
4646
using llvm::make_range;
47+
using llvm::iterator_range;
4748

4849
template<typename T>
4950
inline auto reversed(T &&container)

trunk/include/swift/Basic/STLExtras.h

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -251,13 +251,37 @@ 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+
}
254281

255282
/// An iterator that transforms the result of an underlying bidirectional
256283
/// iterator with a given operation.
257284
///
258-
/// Slightly different semantics from llvm::map_iterator, but we should
259-
/// probably figure out how to merge them eventually.
260-
///
261285
/// \tparam Iterator the underlying iterator.
262286
///
263287
/// \tparam Operation A function object that transforms the underlying

trunk/include/swift/Parse/ASTGen.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ class ASTGen {
8787
Expr *generate(const syntax::SuperRefExprSyntax &Expr, const SourceLoc Loc);
8888
Expr *generate(const syntax::ArrayExprSyntax &Expr, const SourceLoc Loc);
8989
Expr *generate(const syntax::DictionaryExprSyntax &Expr, const SourceLoc Loc);
90+
Expr *generate(const syntax::TupleExprSyntax &E, const SourceLoc Loc);
9091
Expr *generate(const syntax::EditorPlaceholderExprSyntax &Expr,
9192
const SourceLoc Loc);
9293
Expr *generate(const syntax::SpecializeExprSyntax &Expr, const SourceLoc Loc);
@@ -112,6 +113,12 @@ class ASTGen {
112113
const Optional<syntax::DeclNameArgumentsSyntax> &args,
113114
const SourceLoc Loc);
114115

116+
void generateExprTupleElementList(const syntax::TupleExprElementListSyntax &elements,
117+
const SourceLoc Loc, bool isForCallArguments,
118+
SmallVectorImpl<Expr *> &exprs,
119+
SmallVectorImpl<Identifier> &exprLabels,
120+
SmallVectorImpl<SourceLoc> &exprLabelLocs);
121+
115122
private:
116123
void validateCollectionElement(Expr *elementExpr);
117124

trunk/include/swift/Parse/Parser.h

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1558,8 +1558,11 @@ class Parser {
15581558
SourceLoc &inLoc);
15591559

15601560
Expr *parseExprAnonClosureArg();
1561-
ParserResult<Expr> parseExprList(tok LeftTok, tok RightTok,
1562-
syntax::SyntaxKind Kind);
1561+
ParserResult<Expr> parseExprParenOrTuple();
1562+
ParsedSyntaxResult<ParsedExprSyntax> parseExprTupleSyntax();
1563+
ParserStatus parseExprTupleElementListSyntax(
1564+
SmallVectorImpl<ParsedTupleExprElementSyntax> &elements,
1565+
llvm::function_ref<bool()> isAtCloseTok);
15631566

15641567
/// Parse an expression list, keeping all of the pieces separated.
15651568
ParserStatus parseExprList(tok leftTok, tok rightTok,
@@ -1570,8 +1573,7 @@ class Parser {
15701573
SmallVectorImpl<Identifier> &exprLabels,
15711574
SmallVectorImpl<SourceLoc> &exprLabelLocs,
15721575
SourceLoc &rightLoc,
1573-
Expr *&trailingClosure,
1574-
syntax::SyntaxKind Kind);
1576+
Expr *&trailingClosure);
15751577

15761578
ParserResult<Expr> parseTrailingClosure(SourceRange calleeRange);
15771579

trunk/include/swift/SIL/Notifications.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@ class DeserializationNotificationHandlerSet final
194194
using iterator = llvm::mapped_iterator<
195195
decltype(handlerSet)::const_iterator,
196196
decltype(&DeserializationNotificationHandlerSet::getUnderlyingHandler)>;
197-
using range = iterator_range<iterator>;
197+
using range = llvm::iterator_range<iterator>;
198198

199199
/// Returns an iterator to the first element of the handler set.
200200
///

trunk/include/swift/SIL/SILFunctionConventions.h

Lines changed: 30 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -193,9 +193,10 @@ class SILFunctionConventions {
193193
if (silConv.loweredAddresses)
194194
return funcTy->getIndirectFormalResults();
195195

196-
return llvm::make_filter_range(
197-
llvm::make_range((const SILResultInfo *)0, (const SILResultInfo *)0),
196+
auto filter = llvm::make_filter_range(
197+
makeIteratorRange((const SILResultInfo *)0, (const SILResultInfo *)0),
198198
SILFunctionType::IndirectFormalResultFilter());
199+
return makeIteratorRange(filter.begin(), filter.end());
199200
}
200201

201202
struct SILResultTypeFunc {
@@ -209,12 +210,16 @@ class SILFunctionConventions {
209210

210211
using IndirectSILResultTypeIter =
211212
llvm::mapped_iterator<IndirectSILResultIter, SILResultTypeFunc>;
212-
using IndirectSILResultTypeRange = iterator_range<IndirectSILResultTypeIter>;
213+
using IndirectSILResultTypeRange = IteratorRange<IndirectSILResultTypeIter>;
213214

214215
/// Return a range of SILTypes for each result passed as an address-typed SIL
215216
/// argument.
216217
IndirectSILResultTypeRange getIndirectSILResultTypes() const {
217-
return llvm::map_range(getIndirectSILResults(), SILResultTypeFunc(silConv));
218+
return makeIteratorRange(
219+
IndirectSILResultTypeIter(getIndirectSILResults().begin(),
220+
SILResultTypeFunc(silConv)),
221+
IndirectSILResultTypeIter(getIndirectSILResults().end(),
222+
SILResultTypeFunc(silConv)));
218223
}
219224

220225
/// Get the number of SIL results directly returned by SIL value.
@@ -233,23 +238,28 @@ class SILFunctionConventions {
233238
};
234239
using DirectSILResultIter =
235240
llvm::filter_iterator<const SILResultInfo *, DirectSILResultFilter>;
236-
using DirectSILResultRange = iterator_range<DirectSILResultIter>;
241+
using DirectSILResultRange = IteratorRange<DirectSILResultIter>;
237242

238243
/// Return a range of direct result information for results directly returned
239244
/// by SIL value.
240245
DirectSILResultRange getDirectSILResults() const {
241-
return llvm::make_filter_range(
246+
auto filter = llvm::make_filter_range(
242247
funcTy->getResults(), DirectSILResultFilter(silConv.loweredAddresses));
248+
return makeIteratorRange(filter.begin(), filter.end());
243249
}
244250

245251
using DirectSILResultTypeIter =
246252
llvm::mapped_iterator<DirectSILResultIter, SILResultTypeFunc>;
247-
using DirectSILResultTypeRange = iterator_range<DirectSILResultTypeIter>;
253+
using DirectSILResultTypeRange = IteratorRange<DirectSILResultTypeIter>;
248254

249255
/// Return a range of SILTypes for each result directly returned
250256
/// by SIL value.
251257
DirectSILResultTypeRange getDirectSILResultTypes() const {
252-
return llvm::map_range(getDirectSILResults(), SILResultTypeFunc(silConv));
258+
return makeIteratorRange(
259+
DirectSILResultTypeIter(getDirectSILResults().begin(),
260+
SILResultTypeFunc(silConv)),
261+
DirectSILResultTypeIter(getDirectSILResults().end(),
262+
SILResultTypeFunc(silConv)));
253263
}
254264

255265
//===--------------------------------------------------------------------===//
@@ -278,13 +288,16 @@ class SILFunctionConventions {
278288

279289
using SILParameterTypeIter =
280290
llvm::mapped_iterator<const SILParameterInfo *, SILParameterTypeFunc>;
281-
using SILParameterTypeRange = iterator_range<SILParameterTypeIter>;
291+
using SILParameterTypeRange = IteratorRange<SILParameterTypeIter>;
282292

283293
/// Return a range of SILTypes for each function parameter, not including
284294
/// indirect results.
285295
SILParameterTypeRange getParameterSILTypes() const {
286-
return llvm::map_range(funcTy->getParameters(),
287-
SILParameterTypeFunc(silConv));
296+
return makeIteratorRange(
297+
SILParameterTypeIter(funcTy->getParameters().begin(),
298+
SILParameterTypeFunc(silConv)),
299+
SILParameterTypeIter(funcTy->getParameters().end(),
300+
SILParameterTypeFunc(silConv)));
288301
}
289302

290303
//===--------------------------------------------------------------------===//
@@ -299,10 +312,14 @@ class SILFunctionConventions {
299312

300313
using SILYieldTypeIter =
301314
llvm::mapped_iterator<const SILYieldInfo *, SILParameterTypeFunc>;
302-
using SILYieldTypeRange = iterator_range<SILYieldTypeIter>;
315+
using SILYieldTypeRange = IteratorRange<SILYieldTypeIter>;
303316

304317
SILYieldTypeRange getYieldSILTypes() const {
305-
return llvm::map_range(funcTy->getYields(), SILParameterTypeFunc(silConv));
318+
return makeIteratorRange(
319+
SILYieldTypeIter(funcTy->getYields().begin(),
320+
SILParameterTypeFunc(silConv)),
321+
SILYieldTypeIter(funcTy->getYields().end(),
322+
SILParameterTypeFunc(silConv)));
306323
}
307324

308325
SILYieldInfo getYieldInfoForOperandIndex(unsigned opIndex) const {

trunk/include/swift/SIL/SILInstruction.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -168,12 +168,12 @@ class SILInstructionResultArray {
168168
reverse_iterator rbegin() const;
169169
reverse_iterator rend() const;
170170

171-
using range = iterator_range<iterator>;
171+
using range = llvm::iterator_range<iterator>;
172172
range getValues() const;
173-
using reverse_range = iterator_range<reverse_iterator>;
173+
using reverse_range = llvm::iterator_range<reverse_iterator>;
174174
reverse_range getReversedValues() const;
175175

176-
using type_range = iterator_range<
176+
using type_range = llvm::iterator_range<
177177
llvm::mapped_iterator<iterator, SILType(*)(SILValue), SILType>>;
178178
type_range getTypes() const;
179179

trunk/include/swift/SIL/SILValue.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -281,7 +281,7 @@ class ValueBase : public SILNode, public SILAllocated<ValueBase> {
281281
template <typename Subclass>
282282
using DowncastUserFilterRange =
283283
DowncastFilterRange<Subclass,
284-
iterator_range<llvm::mapped_iterator<
284+
llvm::iterator_range<llvm::mapped_iterator<
285285
use_iterator, UseToUser, SILInstruction *>>>;
286286

287287
/// Iterate over the use list of this ValueBase visiting all users that are of

trunk/include/swift/SILOptimizer/Analysis/ClosureScope.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ class ClosureScopeAnalysis : public SILAnalysis {
102102
return None;
103103
}
104104
};
105-
using IndexRange = iterator_range<int *>;
105+
using IndexRange = IteratorRange<int *>;
106106

107107
public:
108108
// A range of SILFunction scopes converted from their scope indices and

trunk/include/swift/SILOptimizer/Analysis/LoopRegionAnalysis.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -591,11 +591,11 @@ class LoopRegion {
591591
return getSubregionData().rend();
592592
}
593593

594-
iterator_range<subregion_iterator> getSubregions() const {
594+
llvm::iterator_range<subregion_iterator> getSubregions() const {
595595
return {subregion_begin(), subregion_end()};
596596
}
597597

598-
iterator_range<subregion_reverse_iterator>
598+
llvm::iterator_range<subregion_reverse_iterator>
599599
getReverseSubregions() const {
600600
return {subregion_rbegin(), subregion_rend()};
601601
}
@@ -674,7 +674,7 @@ class LoopRegion {
674674
unsigned succ_size() const { return Succs.size(); }
675675

676676
private:
677-
using InnerSuccRange = iterator_range<decltype(Succs)::const_iterator>;
677+
using InnerSuccRange = IteratorRange<decltype(Succs)::const_iterator>;
678678

679679
public:
680680
using SuccRange =
@@ -964,7 +964,7 @@ class LoopRegionFunctionInfo {
964964
const_iterator end() const { return IDToRegionMap.end(); }
965965
unsigned size() const { return IDToRegionMap.size(); }
966966
bool empty() const { return IDToRegionMap.empty(); }
967-
iterator_range<const_iterator> getRegions() const {
967+
llvm::iterator_range<const_iterator> getRegions() const {
968968
return {begin(), end()};
969969
}
970970

trunk/include/swift/SILOptimizer/Utils/InstOptUtils.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,13 @@ template <class T> class NullablePtr;
3838
/// Transform a Use Range (Operand*) into a User Range (SILInstruction*)
3939
using UserTransform = std::function<SILInstruction *(Operand *)>;
4040
using ValueBaseUserRange =
41-
TransformRange<iterator_range<ValueBase::use_iterator>, UserTransform>;
41+
TransformRange<IteratorRange<ValueBase::use_iterator>, UserTransform>;
4242

4343
inline ValueBaseUserRange
4444
makeUserRange(iterator_range<ValueBase::use_iterator> range) {
4545
auto toUser = [](Operand *operand) { return operand->getUser(); };
46-
return makeTransformRange(range, UserTransform(toUser));
46+
return makeTransformRange(makeIteratorRange(range.begin(), range.end()),
47+
UserTransform(toUser));
4748
}
4849

4950
using DeadInstructionSet = llvm::SmallSetVector<SILInstruction *, 8>;

0 commit comments

Comments
 (0)