0f6285ddfc
When the tail-call pass converted a Call to TailCall inside an If branch, and the inliner subsequently inlined that word, the TailCall was not converted back to Call in nested control-flow bodies. The TailCall codegen emits a Return instruction, which would exit the *caller* instead of just the inlined callee — silently corrupting the return stack. Root cause: the inliner only converted top-level TailCalls in the body (line-by-line iteration), missing TailCalls nested inside If/DoLoop/Begin structures. Fix: add detailcall() that recursively walks the entire IR tree and converts all TailCall ops back to Call before inlining. This unblocks defining complex Forth words (like SM/REM, FM/MOD) that use DABS → DNEGATE → D+ chains with return-stack operations inside conditional branches. 426 tests pass (including new regression test).