Skip to content

Commit a04971f

Browse files
committed
using a reverse iterator instead of reversing the array
1 parent 5866304 commit a04971f

1 file changed

Lines changed: 16 additions & 2 deletions

File tree

src/slang-nodes/SlangNode.ts

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,21 @@ export function clearOffsets(): void {
2323
offsets.clear();
2424
}
2525

26-
function getLeadingOffset(children: Edge[]): number {
26+
function reversedIterator(children: Edge[]): Iterable<Edge> {
27+
return {
28+
[Symbol.iterator](): Iterator<Edge> {
29+
let index = children.length;
30+
return {
31+
next: function (): IteratorResult<Edge, Edge> {
32+
index--;
33+
return { done: index < 0, value: children[index] };
34+
}
35+
};
36+
}
37+
};
38+
}
39+
40+
function getOffset(children: Edge[] | Iterable<Edge>): number {
2741
let offset = 0;
2842
for (const { node } of children) {
2943
if (node.isNonterminalNode() || !isCommentOrWhiteSpace(node)) {
@@ -110,7 +124,7 @@ export class SlangNode {
110124

111125
const [leadingOffset, trailingOffset] = enclosePeripheralComments
112126
? [0, 0]
113-
: [getLeadingOffset(children), getLeadingOffset(children.reverse())];
127+
: [getOffset(children), getOffset(reversedIterator(children))];
114128

115129
this.loc = {
116130
start: initialOffset + leadingOffset,

0 commit comments

Comments
 (0)