@@ -188,17 +188,25 @@ OpaqueSyntaxNode SyntaxTreeCreator::makeDeferredToken(tok tokenKind,
188
188
}
189
189
190
190
OpaqueSyntaxNode SyntaxTreeCreator::makeDeferredLayout (
191
- syntax::SyntaxKind k, bool IsMissing,
192
- const MutableArrayRef<ParsedRawSyntaxNode> &children) {
193
- SmallVector<OpaqueSyntaxNode, 16 > opaqueChildren;
194
- opaqueChildren.reserve (children.size ());
191
+ syntax::SyntaxKind kind, bool IsMissing,
192
+ const MutableArrayRef<ParsedRawSyntaxNode> &parsedChildren) {
193
+ assert (!IsMissing && " Missing layout nodes not implemented yet" );
195
194
196
- for (size_t i = 0 ; i < children.size (); ++i) {
197
- opaqueChildren.push_back (children[i].takeData ());
195
+ SmallVector<const RawSyntax *, 16 > children;
196
+ children.reserve (parsedChildren.size ());
197
+
198
+ size_t TextLength = 0 ;
199
+ for (size_t i = 0 ; i < parsedChildren.size (); ++i) {
200
+ auto Raw = static_cast <const RawSyntax *>(parsedChildren[i].takeData ());
201
+ if (Raw) {
202
+ TextLength += Raw->getTextLength ();
203
+ }
204
+ children.push_back (Raw);
198
205
}
199
206
200
- // Also see comment in makeDeferredToken
201
- return recordRawSyntax (k, opaqueChildren);
207
+ auto raw = RawSyntax::make (kind, children, TextLength,
208
+ SourcePresence::Present, Arena);
209
+ return static_cast <OpaqueSyntaxNode>(raw);
202
210
}
203
211
204
212
OpaqueSyntaxNode
0 commit comments