Skip to content

Commit 3adefd3

Browse files
committed
[Lexer] Push trivia piece lexing down to SyntaxParseActions
The SyntaxParseActions can decide how to handle the raw trivia, either lex them into pieces or store them raw to be lexed when needed.
1 parent 6d5d8da commit 3adefd3

File tree

5 files changed

+25
-29
lines changed

5 files changed

+25
-29
lines changed

include/swift/Parse/SyntaxParseActions.h

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,9 @@ class SyntaxParseActions {
4141
public:
4242
virtual ~SyntaxParseActions() = default;
4343

44-
virtual OpaqueSyntaxNode recordToken(tok tokenKind,
45-
ArrayRef<ParsedTriviaPiece> leadingTrivia,
46-
ArrayRef<ParsedTriviaPiece> trailingTrivia,
47-
CharSourceRange range) = 0;
44+
virtual OpaqueSyntaxNode recordToken(tok tokenKind, StringRef leadingTrivia,
45+
StringRef trailingTrivia,
46+
CharSourceRange range) = 0;
4847

4948
/// Record a missing token. \c loc can be invalid or an approximate location
5049
/// of where the token would be if not missing.

include/swift/SyntaxParse/SyntaxTreeCreator.h

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,8 @@ class SyntaxTreeCreator: public SyntaxParseActions {
5656
realizeSyntaxRoot(OpaqueSyntaxNode root, const SourceFile &SF) override;
5757

5858
private:
59-
OpaqueSyntaxNode recordToken(tok tokenKind,
60-
ArrayRef<ParsedTriviaPiece> leadingTrivia,
61-
ArrayRef<ParsedTriviaPiece> trailingTrivia,
59+
OpaqueSyntaxNode recordToken(tok tokenKind, StringRef leadingTrivia,
60+
StringRef trailingTrivia,
6261
CharSourceRange range) override;
6362

6463
OpaqueSyntaxNode recordMissingToken(tok tokenKind, SourceLoc loc) override;

lib/Parse/ParsedRawSyntaxRecorder.cpp

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
//===----------------------------------------------------------------------===//
1818

1919
#include "swift/Parse/ParsedRawSyntaxRecorder.h"
20-
#include "swift/Parse/Lexer.h"
2120
#include "swift/Parse/ParsedRawSyntaxNode.h"
2221
#include "swift/Parse/ParsedTrivia.h"
2322
#include "swift/Parse/SyntaxParseActions.h"
@@ -42,10 +41,8 @@ ParsedRawSyntaxRecorder::recordToken(tok tokKind, CharSourceRange tokRange,
4241
unsigned length =
4342
leadingTrivia.size() + tokRange.getByteLength() + trailingTrivia.size();
4443
CharSourceRange range(offset, length);
45-
auto leadingTriviaPieces = TriviaLexer::lexTrivia(leadingTrivia).Pieces;
46-
auto trailingTriviaPieces = TriviaLexer::lexTrivia(trailingTrivia).Pieces;
47-
OpaqueSyntaxNode n = SPActions->recordToken(tokKind, leadingTriviaPieces,
48-
trailingTriviaPieces, range);
44+
OpaqueSyntaxNode n =
45+
SPActions->recordToken(tokKind, leadingTrivia, trailingTrivia, range);
4946
return ParsedRawSyntaxNode(SyntaxKind::Token, tokKind, range, n);
5047
}
5148

lib/SyntaxParse/SyntaxTreeCreator.cpp

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
#include "swift/Syntax/RawSyntax.h"
1515
#include "swift/Syntax/SyntaxVisitor.h"
1616
#include "swift/Syntax/Trivia.h"
17+
#include "swift/Parse/Lexer.h"
1718
#include "swift/Parse/ParsedTrivia.h"
1819
#include "swift/Parse/SyntaxParsingCache.h"
1920
#include "swift/Parse/Token.h"
@@ -109,18 +110,16 @@ SyntaxTreeCreator::realizeSyntaxRoot(OpaqueSyntaxNode rootN,
109110
return rootNode;
110111
}
111112

112-
OpaqueSyntaxNode
113-
SyntaxTreeCreator::recordToken(tok tokenKind,
114-
ArrayRef<ParsedTriviaPiece> leadingTriviaPieces,
115-
ArrayRef<ParsedTriviaPiece> trailingTriviaPieces,
116-
CharSourceRange range) {
117-
size_t leadingTriviaLen =
118-
ParsedTriviaPiece::getTotalLength(leadingTriviaPieces);
119-
size_t trailingTriviaLen =
120-
ParsedTriviaPiece::getTotalLength(trailingTriviaPieces);
121-
SourceLoc tokLoc = range.getStart().getAdvancedLoc(leadingTriviaLen);
122-
unsigned tokLength = range.getByteLength() -
123-
leadingTriviaLen - trailingTriviaLen;
113+
OpaqueSyntaxNode SyntaxTreeCreator::recordToken(tok tokenKind,
114+
StringRef leadingTrivia,
115+
StringRef trailingTrivia,
116+
CharSourceRange range) {
117+
auto leadingTriviaPieces = TriviaLexer::lexTrivia(leadingTrivia).Pieces;
118+
auto trailingTriviaPieces = TriviaLexer::lexTrivia(trailingTrivia).Pieces;
119+
120+
SourceLoc tokLoc = range.getStart().getAdvancedLoc(leadingTrivia.size());
121+
unsigned tokLength =
122+
range.getByteLength() - leadingTrivia.size() - trailingTrivia.size();
124123
CharSourceRange tokRange = CharSourceRange{tokLoc, tokLength};
125124
SourceLoc leadingTriviaLoc = range.getStart();
126125
SourceLoc trailingTriviaLoc = tokLoc.getAdvancedLoc(tokLength);

tools/libSwiftSyntaxParser/libSwiftSyntaxParser.cpp

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -154,13 +154,15 @@ class CLibParseActions : public SyntaxParseActions {
154154
node.present = true;
155155
}
156156

157-
OpaqueSyntaxNode recordToken(tok tokenKind,
158-
ArrayRef<ParsedTriviaPiece> leadingTrivia,
159-
ArrayRef<ParsedTriviaPiece> trailingTrivia,
157+
OpaqueSyntaxNode recordToken(tok tokenKind, StringRef leadingTrivia,
158+
StringRef trailingTrivia,
160159
CharSourceRange range) override {
160+
auto leadingTriviaPieces = TriviaLexer::lexTrivia(leadingTrivia).Pieces;
161+
auto trailingTriviaPieces = TriviaLexer::lexTrivia(trailingTrivia).Pieces;
162+
161163
SmallVector<CTriviaPiece, 8> c_leadingTrivia, c_trailingTrivia;
162-
makeCTrivia(c_leadingTrivia, leadingTrivia);
163-
makeCTrivia(c_trailingTrivia, trailingTrivia);
164+
makeCTrivia(c_leadingTrivia, leadingTriviaPieces);
165+
makeCTrivia(c_trailingTrivia, trailingTriviaPieces);
164166
CRawSyntaxNode node;
165167
makeCRawToken(node, tokenKind, c_leadingTrivia, c_trailingTrivia,
166168
range);

0 commit comments

Comments
 (0)