fix: decisions not skipped when encountered in _emitBranch walk

- _emitBranch walk no longer adds decisions to visited before calling
  generateCode — let the decision's own generateCode manage its visited
  tracking. Otherwise the decision's generateCode sees itself as already
  visited and returns empty, dropping its entire subtree.
- Same fix in both codegen/index.js and blocks-algo.js
This commit is contained in:
2026-06-23 02:56:41 +02:00
parent 82627a3852
commit cefee37cd8
2 changed files with 10 additions and 10 deletions
+5 -4
View File
@@ -258,13 +258,14 @@ class WCDecision extends WCBlock {
}
return;
}
visited.add(el);
if (loopTargets && loopTargets.has(el)) {
c += "\n" + el.id + ":";
}
if (el instanceof WCDecision) {
// Decisions manage their own visited tracking inside generateCode.
c += el.generateCode(visited, loopTargets);
} else {
visited.add(el);
if (loopTargets && loopTargets.has(el)) {
c += "\n" + el.id + ":";
}
c += el.generateOwnCode();
for (const p of el.wcNextFlow) walk(p.toElement);
}
+5 -6
View File
@@ -107,15 +107,14 @@
}
return;
}
visited.add(el);
if (loopTargets.has(el)) {
parts.push("\n" + (el.id || "block") + ":");
}
if (isDecision(el)) {
// Decisions manage their own visited tracking inside generateCode.
parts.push(el.generateCode(visited, loopTargets));
} else {
visited.add(el);
if (loopTargets.has(el)) {
parts.push("\n" + (el.id || "block") + ":");
}
parts.push(el.generateOwnCode());
var flow = el.wcNextFlow || el.nextFlow || [];
for (var j = 0; j < flow.length; j++) {