Skip to content

Commit c2c7a82

Browse files
committed
---
yaml --- r: 348922 b: refs/heads/master c: fa991ba h: refs/heads/master
1 parent 1894528 commit c2c7a82

File tree

2 files changed

+21
-26
lines changed

2 files changed

+21
-26
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: c6b7ad7953286af6232f8036e126b9be48b23ca0
2+
refs/heads/master: fa991baa5eda6a786044d46f59e68a91844e91c0
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/lib/Parse/ASTGen.cpp

Lines changed: 20 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -684,8 +684,8 @@ TupleTypeRepr *ASTGen::generateTuple(const TokenSyntax &LParen,
684684
const TupleTypeElementListSyntax &Elements,
685685
const TokenSyntax &RParen,
686686
const SourceLoc Loc, bool IsFunction) {
687-
auto LPLoc = generate(LParen, Loc);
688-
auto RPLoc = generate(RParen, Loc);
687+
auto LPLoc = advanceLocBegin(Loc, LParen);
688+
auto RPLoc = advanceLocEnd(Loc, RParen);
689689

690690
SmallVector<TupleTypeReprElement, 4> TupleElements;
691691

@@ -1000,14 +1000,8 @@ TypeRepr *ASTGen::generate(const DictionaryTypeSyntax &Type,
10001000
auto ColonLoc = advanceLocBegin(Loc, Type.getColon());
10011001

10021002
SourceLoc LBracketLoc, RBracketLoc;
1003-
if (Type.getLeftSquareBracket().isPresent())
1004-
LBracketLoc = advanceLocBegin(Loc, Type.getLeftSquareBracket());
1005-
else
1006-
LBracketLoc = advanceLocBegin(Loc, *Type.getFirstToken());
1007-
if (Type.getRightSquareBracket().isPresent())
1008-
RBracketLoc = advanceLocBegin(Loc, Type.getRightSquareBracket());
1009-
else
1010-
RBracketLoc = advanceLocBegin(Loc, *Type.getLastToken());
1003+
LBracketLoc = advanceLocBegin(Loc, Type);
1004+
RBracketLoc = advanceLocEnd(Loc, Type);
10111005
SourceRange Range{LBracketLoc, RBracketLoc};
10121006
return new (Context) DictionaryTypeRepr(KeyType, ValueType, ColonLoc, Range);
10131007
}
@@ -1017,14 +1011,8 @@ TypeRepr *ASTGen::generate(const ArrayTypeSyntax &Type, SourceLoc Loc) {
10171011
if (!ElementType)
10181012
return nullptr;
10191013
SourceLoc LBracketLoc, RBracketLoc;
1020-
if (Type.getLeftSquareBracket().isPresent())
1021-
LBracketLoc = advanceLocBegin(Loc, Type.getLeftSquareBracket());
1022-
else
1023-
LBracketLoc = advanceLocBegin(Loc, *Type.getFirstToken());
1024-
if (Type.getRightSquareBracket().isPresent())
1025-
RBracketLoc = advanceLocBegin(Loc, Type.getRightSquareBracket());
1026-
else
1027-
RBracketLoc = advanceLocBegin(Loc, *Type.getLastToken());
1014+
LBracketLoc = advanceLocBegin(Loc, Type);
1015+
RBracketLoc = advanceLocEnd(Loc, Type);
10281016
return new (Context) ArrayTypeRepr(ElementType, {LBracketLoc, RBracketLoc});
10291017
}
10301018

@@ -1206,8 +1194,8 @@ void
12061194
ASTGen::generate(const GenericArgumentClauseSyntax &clause, const SourceLoc Loc,
12071195
SourceLoc &lAngleLoc, SourceLoc &rAngleLoc,
12081196
SmallVectorImpl<TypeRepr *> &args) {
1209-
lAngleLoc = advanceLocBegin(Loc, clause.getLeftAngleBracket());
1210-
rAngleLoc = advanceLocBegin(Loc, clause.getRightAngleBracket());
1197+
lAngleLoc = advanceLocBegin(Loc, clause);
1198+
rAngleLoc = advanceLocEnd(Loc, clause);
12111199

12121200
assert(args.empty());
12131201
for (auto Arg : clause.getArguments()) {
@@ -1303,8 +1291,8 @@ GenericParamList *ASTGen::generate(const GenericParameterClauseSyntax &clause,
13031291
whereLoc = advanceLocBegin(Loc, whereClause->getWhereKeyword());
13041292
}
13051293

1306-
auto lAngleLoc = advanceLocBegin(Loc, clause.getLeftAngleBracket());
1307-
auto rAngleLoc = advanceLocBegin(Loc, clause.getRightAngleBracket());
1294+
auto lAngleLoc = advanceLocBegin(Loc, clause);
1295+
auto rAngleLoc = advanceLocEnd(Loc, clause);
13081296
return GenericParamList::create(Context, lAngleLoc, params, whereLoc,
13091297
requirements, rAngleLoc);
13101298
}
@@ -1395,10 +1383,17 @@ SourceLoc ASTGen::advanceLocBegin(const SourceLoc &Loc, const Syntax &Node) {
13951383
}
13961384

13971385
SourceLoc ASTGen::advanceLocEnd(const SourceLoc &Loc, const Syntax &Node) {
1398-
if (auto Tok = Node.getLastToken())
1399-
return advanceLocBegin(Loc, *Tok);
1386+
if (!Node.isMissing()) {
1387+
// NOTE: We cannot use 'getLastToken()' because it doesn't take string
1388+
// literal expressions into account.
1389+
if (Node.isToken() || Node.is<StringLiteralExprSyntax>())
1390+
return advanceLocBegin(Loc, Node);
1391+
for (size_t I = Node.getNumChildren(); I != 0; --I)
1392+
if (auto Child = Node.getChild(I - 1))
1393+
return advanceLocEnd(Loc, *Child);
1394+
}
14001395
if (auto Prev = Node.getPreviousNode())
1401-
return advanceLocBegin(Loc, *Prev->getLastToken());
1396+
return advanceLocEnd(Loc, *Prev);
14021397
assert(false && "No tokens in tree?");
14031398
return Loc;
14041399
}

0 commit comments

Comments
 (0)