@@ -50,11 +50,9 @@ class ParsedRawSyntaxNode {
50
50
51
51
struct RecordedSyntaxNode {
52
52
OpaqueSyntaxNode OpaqueNode;
53
- CharSourceRange Range;
54
53
};
55
54
struct DeferredLayoutNode {
56
55
MutableArrayRef<ParsedRawSyntaxNode> Children;
57
- CharSourceRange Range;
58
56
};
59
57
struct DeferredTokenNode {
60
58
SourceLoc TokLoc;
@@ -68,6 +66,8 @@ class ParsedRawSyntaxNode {
68
66
DeferredLayoutNode DeferredLayout;
69
67
DeferredTokenNode DeferredToken;
70
68
};
69
+ // / The range of this node, including trivia.
70
+ CharSourceRange Range;
71
71
uint16_t SynKind;
72
72
uint16_t TokKind;
73
73
DataKind DK;
@@ -76,15 +76,17 @@ class ParsedRawSyntaxNode {
76
76
77
77
ParsedRawSyntaxNode (syntax::SyntaxKind k, CharSourceRange r,
78
78
MutableArrayRef<ParsedRawSyntaxNode> deferredNodes)
79
- : DeferredLayout({deferredNodes, r}),
80
- SynKind (uint16_t (k)), TokKind(uint16_t (tok::unknown)),
81
- DK (DataKind::DeferredLayout) {
79
+ : DeferredLayout({deferredNodes}), Range(r), SynKind(uint16_t (k)),
80
+ TokKind (uint16_t (tok::unknown)), DK(DataKind::DeferredLayout) {
82
81
assert (getKind () == k && " Syntax kind with too large value!" );
83
82
}
84
83
85
84
ParsedRawSyntaxNode (tok tokKind, SourceLoc tokLoc, unsigned tokLength,
86
85
StringRef leadingTrivia, StringRef trailingTrivia)
87
86
: DeferredToken{tokLoc, tokLength, leadingTrivia, trailingTrivia},
87
+ Range{tokLoc.getAdvancedLoc (-leadingTrivia.size ()),
88
+ (unsigned )leadingTrivia.size () + tokLength +
89
+ (unsigned )trailingTrivia.size ()},
88
90
SynKind (uint16_t (syntax::SyntaxKind::Token)),
89
91
TokKind (uint16_t (tokKind)), DK(DataKind::DeferredToken) {
90
92
assert (getTokenKind () == tokKind && " Token kind is too large value!" );
@@ -94,19 +96,14 @@ class ParsedRawSyntaxNode {
94
96
95
97
public:
96
98
ParsedRawSyntaxNode ()
97
- : RecordedData{},
98
- SynKind (uint16_t (syntax::SyntaxKind::Unknown)),
99
- TokKind (uint16_t (tok::unknown)),
100
- DK (DataKind::Null) {
101
- }
102
-
103
- ParsedRawSyntaxNode (syntax::SyntaxKind k, tok tokKind,
104
- CharSourceRange r, OpaqueSyntaxNode n,
105
- bool IsMissing = false )
106
- : RecordedData{n, r},
107
- SynKind (uint16_t (k)), TokKind(uint16_t (tokKind)),
108
- DK (DataKind::Recorded),
109
- IsMissing (IsMissing) {
99
+ : RecordedData{}, Range(), SynKind(uint16_t (syntax::SyntaxKind::Unknown)),
100
+ TokKind (uint16_t (tok::unknown)), DK(DataKind::Null) {}
101
+
102
+ ParsedRawSyntaxNode (syntax::SyntaxKind k, tok tokKind, CharSourceRange r,
103
+ OpaqueSyntaxNode n, bool IsMissing = false )
104
+ : RecordedData{n}, Range(r), SynKind(uint16_t (k)),
105
+ TokKind (uint16_t (tokKind)), DK(DataKind::Recorded),
106
+ IsMissing (IsMissing) {
110
107
assert (getKind () == k && " Syntax kind with too large value!" );
111
108
assert (getTokenKind () == tokKind && " Token kind with too large value!" );
112
109
}
@@ -138,6 +135,7 @@ class ParsedRawSyntaxNode {
138
135
DeferredToken = std::move (other.DeferredToken );
139
136
break ;
140
137
}
138
+ Range = std::move (other.Range );
141
139
SynKind = std::move (other.SynKind );
142
140
TokKind = std::move (other.TokKind );
143
141
DK = std::move (other.DK );
@@ -196,30 +194,19 @@ class ParsedRawSyntaxNode {
196
194
case DataKind::Null:
197
195
break ;
198
196
}
197
+ copy.Range = Range;
199
198
copy.SynKind = SynKind;
200
199
copy.TokKind = TokKind;
201
200
copy.DK = DK;
202
201
copy.IsMissing = IsMissing;
203
202
return copy;
204
203
}
205
204
206
- CharSourceRange getDeferredRange () const {
207
- switch (DK) {
208
- case DataKind::DeferredLayout:
209
- return getDeferredLayoutRange ();
210
- case DataKind::DeferredToken:
211
- return getDeferredTokenRangeWithTrivia ();
212
- default :
213
- llvm_unreachable (" node not deferred" );
214
- }
215
- }
205
+ // / Returns the range of this node including leading and trailing trivia.
206
+ CharSourceRange getRange () const { return Range; }
216
207
217
208
// Recorded Data ===========================================================//
218
209
219
- CharSourceRange getRecordedRange () const {
220
- assert (isRecorded ());
221
- return RecordedData.Range ;
222
- }
223
210
const OpaqueSyntaxNode &getOpaqueNode () const {
224
211
assert (isRecorded ());
225
212
return RecordedData.OpaqueNode ;
@@ -233,10 +220,6 @@ class ParsedRawSyntaxNode {
233
220
234
221
// Deferred Layout Data ====================================================//
235
222
236
- CharSourceRange getDeferredLayoutRange () const {
237
- assert (DK == DataKind::DeferredLayout);
238
- return DeferredLayout.Range ;
239
- }
240
223
ArrayRef<ParsedRawSyntaxNode> getDeferredChildren () const {
241
224
assert (DK == DataKind::DeferredLayout);
242
225
return DeferredLayout.Children ;
@@ -259,6 +242,7 @@ class ParsedRawSyntaxNode {
259
242
default :
260
243
llvm_unreachable (" node not deferred" );
261
244
}
245
+ copy.Range = Range;
262
246
copy.SynKind = SynKind;
263
247
copy.TokKind = TokKind;
264
248
copy.DK = DK;
@@ -268,16 +252,6 @@ class ParsedRawSyntaxNode {
268
252
269
253
// Deferred Token Data =====================================================//
270
254
271
- CharSourceRange getDeferredTokenRangeWithTrivia () const {
272
- assert (DK == DataKind::DeferredToken);
273
- auto leadTriviaLen = DeferredToken.LeadingTrivia .size ();
274
- auto trailTriviaLen = DeferredToken.TrailingTrivia .size ();
275
-
276
- SourceLoc begin = DeferredToken.TokLoc .getAdvancedLoc (-leadTriviaLen);
277
- unsigned len = leadTriviaLen + DeferredToken.TokLength + trailTriviaLen;
278
-
279
- return CharSourceRange{begin, len};
280
- }
281
255
CharSourceRange getDeferredTokenRange () const {
282
256
assert (DK == DataKind::DeferredToken);
283
257
return CharSourceRange{DeferredToken.TokLoc , DeferredToken.TokLength };
0 commit comments