mirror of
https://github.com/morluto/rea.git
synced 2026-10-29 10:55:57 +00:00
fix(javascript): scan direct returns without recursive stack growth
Use the shared AST child enumeration with an explicit stack, preserving return order and nested callable boundaries. Refs #1065. Co-authored-by: rudycelekli <47457359+rudycelekli@users.noreply.github.com> Co-authored-by: N0zoM1z0 <161784452+N0zoM1z0@users.noreply.github.com>
This commit is contained in:
1 parent
f4a0c1ce95
commit
c29931ce81
2 files changed
+52
-6
No files matched your search
@@ -131,15 +131,17 @@ const directReturnExpressions = (callable: t.Node): ReturnExpression[] => {
|
||||
return [{ node: callable.body, location: range(callable.body) }];
|
||||
if (!t.isFunction(callable)) return [];
|
||||
const output: ReturnExpression[] = [];
|
||||
const visit = (node: t.Node): void => {
|
||||
if (t.isFunction(node) || t.isClass(node)) return;
|
||||
const pending = childNodes(callable.body).reverse();
|
||||
while (pending.length > 0) {
|
||||
const node = pending.pop();
|
||||
if (node === undefined || t.isFunction(node) || t.isClass(node)) continue;
|
||||
if (t.isReturnStatement(node)) {
|
||||
output.push({ node: node.argument ?? null, location: range(node) });
|
||||
return;
|
||||
continue;
|
||||
}
|
||||
for (const child of childNodes(node)) visit(child);
|
||||
};
|
||||
for (const child of childNodes(callable.body)) visit(child);
|
||||
// Reverse children so the explicit stack retains source-tree order.
|
||||
for (const child of childNodes(node).reverse()) pending.push(child);
|
||||
}
|
||||
return output;
|
||||
};
|
||||
|
||||
|
||||
Reference in new issue
Block a user