V0.2.4
Release v0.2.4
This release introduces a new PUSH_STACK instruction for explicit return address stack management, making manual stack operations more ergonomic. The execution pointer advancement logic is now exposed as a public advance_pointer() method, and ARCHIVED_NODES has been generalized to accept any BaseNode.
✨ New Features
PUSH_STACK(alias_or_idata)– Push a return address onto_ret_addr_stackdirectly from the composition chain, eliminating the need for manual node-based pushes. Pair withGOTOandRET_FARfor custom call/return patterns.WorkflowInterpreter.advance_pointer(ptr=None)– Public method for advancing the execution pointer through nested workflows. Supports external pointer preview without mutating interpreter state.
📝 Improvements
ARCHIVED_NODESnow accepts arbitraryBaseNode(not onlyAliasNode), enabling more flexible subroutine storage patterns.- Documentation updated across English and Chinese guides to reflect the new
PUSH_STACKinstruction, including a new "subroutine-like pattern withARCHIVED_NODES" example. - Demo
13_ret_far.pyrefactored to usePUSH_STACKinstead of manual stack push in a custom node.
⚠️ Deprecations
WorkflowInterpreter._advance_pointer(property) is deprecated. Useadvance_pointer()instead. The old property will be removed in v0.3.0.
🐛 Fixes
- Improved error message when attempting to call a
NodeComposeRenderedvia_call().
🔧 Internal
- Version bumped to 0.2.4.
- Type hints and imports cleaned up (
typing_extensions,TYPE_CHECKING).
Full Changelog: 0.2.3...0.2.4