@@ -120,27 +120,6 @@ using llvm::StringRef;
120
120
#define syntax_assert_token_is (Tok, Kind, Text )
121
121
#endif
122
122
123
- namespace {
124
- // / If the \p Str is not allocated in \p Arena, copy it to \p Arena and adjust
125
- // / \p Str to point to the string's copy in \p Arena.
126
- void copyToArenaIfNecessary (
127
- StringRef &Str, const swift::RC<swift::syntax::SyntaxArena> &Arena) {
128
- if (Str.empty ()) {
129
- // Empty strings can live wherever they want. Nothing to do.
130
- return ;
131
- }
132
- if (Arena->containsPointer (Str.data ())) {
133
- // String already in arena. Nothing to do.
134
- return ;
135
- }
136
- // Copy string to arena
137
- char *Data = (char *)Arena->Allocate (Str.size (), alignof (char *));
138
- std::uninitialized_copy (Str.begin (), Str.end (), Data);
139
- Str = StringRef (Data, Str.size ());
140
- }
141
- } // namespace
142
- // end anonymous namespace
143
-
144
123
namespace swift {
145
124
namespace syntax {
146
125
@@ -289,9 +268,6 @@ class RawSyntax final
289
268
: Arena(Arena.get()),
290
269
Bits({{unsigned (TextLength), unsigned (Presence), true }}) {
291
270
assert (Arena && " RawSyntax nodes must always be allocated in an arena" );
292
- copyToArenaIfNecessary (LeadingTrivia, Arena);
293
- copyToArenaIfNecessary (Text, Arena);
294
- copyToArenaIfNecessary (TrailingTrivia, Arena);
295
271
296
272
if (Presence == SourcePresence::Missing) {
297
273
assert (TextLength == 0 );
@@ -313,6 +289,13 @@ class RawSyntax final
313
289
Bits.Token .TokenLength = Text.size ();
314
290
Bits.Token .TrailingTriviaLength = TrailingTrivia.size ();
315
291
Bits.Token .TokenKind = unsigned (TokKind);
292
+
293
+ Arena->copyStringToArenaIfNecessary (Bits.Token .LeadingTrivia ,
294
+ Bits.Token .LeadingTriviaLength );
295
+ Arena->copyStringToArenaIfNecessary (Bits.Token .TokenText ,
296
+ Bits.Token .TokenLength );
297
+ Arena->copyStringToArenaIfNecessary (Bits.Token .TrailingTrivia ,
298
+ Bits.Token .TrailingTriviaLength );
316
299
}
317
300
318
301
// / Compute the node's text length by summing up the length of its childern
0 commit comments