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:
+5
-4
@@ -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
@@ -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++) {
|
||||
|
||||
Reference in New Issue
Block a user