Commit Graph
8 Commits
Author SHA1 Message Date
adrien 400870d888 fix: seed _generateCallWithError's local visited set from main traversal
- _emitBranch now sets _genVisited on blocks before calling generateOwnCode
  so that proc calls inside loop bodies can seed their error-handling
  visited set from the main traversal, preventing loop-decision re-walk
- Add _noWalkNext flag on proc calls when error handling is active, so
  _emitBranch skips redundant nextFlow walking (the success path was
  already covered by the error-handling branch emission)
- Known issue: shared blocks that are direct roots of emitBranch (from
  the shared set) may still be re-walked when they were already emitted
  by a downstream proc call's error-handling success path
2026-06-23 03:08:20 +02:00
adrien 82627a3852 refactor: only emit labels for blocks that are actual back-edge targets
- Add CodeGen.findBackEdges(root) pre-pass — DFS-based back-edge
  detection that finds all blocks targeted by at least one back-edge
- Only those blocks get C labels; only those back-edges emit goto
- emitBranch reverts to generateOwnCode + manual successor walking
  (respects stop set properly for shared blocks)
- generateCode/generateNextCode accept loopTargets parameter;
  visited-but-not-back-edge blocks are silently skipped
- No more -Wunused-label warnings in compiled output
2026-06-23 02:51:17 +02:00
adrien 439cc6e7ba feat: loop support via goto labels on each block
- Every block now emits a C label (its id) before its code
- generateNextCode emits goto label; for back-edges (visited targets)
- _emitBranch delegates to generateCode (not generateOwnCode), so labels
  are emitted consistently in both main and branch traversals
- generateCallWithError threads a shared visited set across all three
  emitBranch calls, preventing duplicate label emission for shared blocks
- emitBranch skips roots already visited by previous roots in the same
  branch (prevents spurious gotos from shared-block traversal)
2026-06-23 01:16:14 +02:00
adrien f1eed2d4e0 refactor: extract pure codegen into shared module, remove duplication
- Create codegen/index.js with pure branchDescendants, emitBranch,
  generateCallWithError, and generateCFile — zero DOM dependencies
- blocks-proc.js adapters delegate to CodeGen with browser instanceof check
- run.js uses the same CodeGen module instead of duplicating block classes
  with their own branchDescendants/emitBranch logic
- Load codegen/index.js in browser before blocks-proc.js
2026-06-23 01:07:08 +02:00
adrien 68da5592ef refactor: unwrap nested if-else in error-path code generation
- Replace if/else wrapping in WCProcCall.generateOwnCode with branch-aware
  generation via _branchDescendants, _emitBranch, and _generateCallWithError
- Shared blocks (reachable from both error and success paths) now appear
  only once after the if-block, avoiding deeply nested code
- Add 8 browser tests covering merge, decision passthrough, value style,
  sequential calls, and shared-only error paths
- Increase template block spacing (16px -> 40px) for readability
- Add error WCEnd blocks to console and SDL3 templates with error-hook
  connections to all failure-mode proc calls
- Hide editable WCProcCall input fields behind field-display spans,
  matching existing algorithm-block convention
2026-06-23 00:51:54 +02:00
adrien 5caa306503 fix: prevent deletion of library procedures
- Skip delete button creation for readonly blocks (data-readonly)
- Add WCProcedure.delete() override that guards against readonly
2026-06-22 18:39:55 +02:00
adrien b8e8ef9113 overhaul: modular architecture, tests, doc generation, warning system, and UX improvements
- Modular block files: split into blocks-algo, blocks-data, blocks-proc
- New modules: sections.js (labelled canvas areas), proc-browser.js (procedure tree modal), lib-loader.js (lazy library loading), templates.js (project templates), errno-data.js (errno table)
- Test infrastructure: browser test suite (28 tests) and Node pure-function tests (75 tests)
- Warning system: unified .block-warn for disconnected inputs, unconnected error hooks, and zero-exit-in-error-path
- Error path highlighting: red flow paths and block borders for error-only subgraphs
- Input hooks: hidden by default, shown during linking; outputs always at bottom
- Block editor modal: pencil icon, colour picker for accent, compact field labels
- Doc generation: standalone node script extracts JSDoc -> docs/API.md (124 declarations)
- Persistence: save/restore sections, errno selection, block colours
- Fixes: _segmentsIntersect bug, WCEnd crash from closest(this), drawpath guard on detached elements
2026-06-22 18:31:23 +02:00
adrien 36fc63780a early version: modular block files, full template set, tab UI, OpenGL defaults 2026-06-19 01:18:36 +02:00