From 353783726d58cf12c7e96cff6879fd98d23df2e6 Mon Sep 17 00:00:00 2001 From: rajames Date: Thu, 8 Oct 2026 00:07:41 -0400 Subject: [PATCH] fix(v4.0.0): a node's answer goes before its sender's next text -- the last commit failed hosted-check 1c720ab2 was committed with hosted-check failing: with how text ended queued, a line typed while the node waited was done before the earlier line's answer had gone, and the pass that offers what is to be passed on let go text that was for the node itself. How text ended is put before the other messages waiting; a node does not begin another text from a sender while its answer to that sender is still with it; and what is for the node itself is not offered. make -C v4 test and sanitize at both widths, hosted-check. Co-Authored-By: Claude Opus 5.5 --- capsules/v4/nucleus-64.f18 | Bin 58032 -> 58536 bytes v4/capsule/quit.v4 | 43 +++++++++++++++++++++++++++++++++---- 2 files changed, 39 insertions(+), 4 deletions(-) diff --git a/capsules/v4/nucleus-64.f18 b/capsules/v4/nucleus-64.f18 index a108582133d6dca4f0254dc24ecc3b934b960bb2..62486314ed128d690a507382086ef233a6175c7c 100644 GIT binary patch delta 12891 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
    D=q(_h$gAkBUZKWir%B`u_DnzFUp-JyvN+$ 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 NzH`5^JtF>u{eKw7?QH-6 diff --git a/v4/capsule/quit.v4 b/v4/capsule/quit.v4 index 80b8abfb..785b3c4f 100644 --- a/v4/capsule/quit.v4 +++ b/v4/capsule/quit.v4 @@ -57,18 +57,22 @@ macro R-CLEAR RSTACK-DEPTH b! a !b endmacro \ THE MESSAGE SAYING HOW IT ENDED is not written here: whoever sent the \ text may be stuck, and this node would wait on it. It is put with the \ messages waiting and passed on from (IDLE), as any message for another -\ node is. +\ node is. It is put before the others, and this node does not begin +\ another text from the same sender until it has gone ((MINE?)): so what +\ one sender is told comes in the order the texts were done. : (FINISH) ( s -- ) 1 (QUIET) a! ! \ from here an error is not this text's: see (RAISED) (LINE-STATUS) b! dup !b (FLUSH-OUT) 1 (MQ#) a! @ + -MQ-ROOM + -if FULL \ how it ended goes with the messages waiting, drop \ to be passed on as any is: (IDLE) + (MQ#) a! @ push \ how many cells are there before it (MSG)+1 a! @ (MQ!) (ME) a! @ (MQ!) 3 (MQ!) \ to whoever sent the text, from this node, type 3 0 (MQ!) 0 (MQ!) 0 (MQ!) 4 (MQ!) \ four characters long 0 (DONE-PORT) a! @ - (MQ!) \ by the port that leads back, kept below zero: this node's own (MQ!) \ how it ended - jump (IDLE) + pop if FRONT -1 + FOR (MQ@) (MQ!) NEXT jump (IDLE) \ and those go round behind it: it is the oldest + FRONT: drop jump (IDLE) FULL: drop \ no room at all: it is offered here, and the node waits (MSG)+1 a! @ (DONE-PORT) a! @ (GATE) 3 (HDR) 4 !b !b @@ -102,18 +106,43 @@ macro R-CLEAR RSTACK-DEPTH b! a !b endmacro (MQ-HDR)+7 a! @ -if THEIRS 0 SWAP - ; THEIRS: drop (MQ-HDR) a! @ jump (PORT-FOR) +\ ( -- flag ) is the message in (MQ-HDR) one to pass on? One this node +\ made itself is; any other is unless it is for this node, and waits here +\ to be dealt with ((MINE?) holds text back) +: (FWD?) + (MQ-HDR)+7 a! @ -if THEIRS drop -1 ; + THEIRS: drop (MQ-HDR) a! @ (ME) a! @ xor ; + \ ( -- flag ) IS THERE ONE FOR THIS NODE? The first that is, is taken \ out: its seven words into (MSG), the port it came on into (REPLY), its \ text into TIB. +\ TEXT IS NOT BEGUN WHILE THE ANSWER TO ITS SENDER'S LAST IS STILL HERE: +\ a message this node made itself, (FINISH), is ahead of it, to that +\ sender. (A-WORD) is whom such a message seen so far is to: -1 none, +\ -2 more than one node, and then no text is begun. A NACK or a GONE for +\ this node is never held back. : (MINE?) - 0 (A-FOUND) a! ! + 0 (A-FOUND) a! ! -1 (A-WORD) a! ! (MQ#) a! @ (A-LEFT) a! ! L: (A-LEFT) a! @ if END drop (MQ-NEXT) (A-FOUND) a! @ if LOOK drop jump KEEP LOOK: drop + (MQ-HDR)+7 a! @ -if THEIRS + drop (A-WORD) a! @ 1 + if FIRST \ this node's own: + drop (A-WORD) a! @ (MQ-HDR) a! @ xor if SAME + drop -2 (A-WORD) a! ! jump KEEP + FIRST: drop (MQ-HDR) a! @ (A-WORD) a! ! jump KEEP + SAME: drop jump KEEP + THEIRS: drop (MQ-HDR) a! @ (ME) a! @ xor if MINE drop jump KEEP - MINE: drop 1 (A-FOUND) a! ! + MINE: drop + (MQ-HDR)+2 a! @ -1 + if TEXT drop jump TAKE + TEXT: drop + (A-WORD) a! @ 2 + if HOLD + drop (A-WORD) a! @ (MQ-HDR)+1 a! @ xor if HOLD + drop + TAKE: 1 (A-FOUND) a! ! (MQ-HDR) a! @ (MSG) a! ! (MQ-HDR)+1 a! @ (MSG)+1 a! ! (MQ-HDR)+2 a! @ (MSG)+2 a! ! (MQ-HDR)+3 a! @ (MSG)+3 a! ! (MQ-HDR)+4 a! @ (MSG)+4 a! ! (MQ-HDR)+5 a! @ (MSG)+5 a! ! (MQ-HDR)+6 a! @ (MSG)+6 a! ! (MQ-HDR)+7 a! @ (REPLY) a! ! @@ -121,6 +150,7 @@ macro R-CLEAR RSTACK-DEPTH b! a !b endmacro -1 + FOR (MQ@) over a! ! 1 + NEXT drop jump L EMPTY: drop drop jump L + HOLD: drop KEEP: (A-BACK) (A-TEXT) jump L END: drop (A-FOUND) a! @ ; @@ -139,6 +169,7 @@ macro R-CLEAR RSTACK-DEPTH b! a !b endmacro (MQ#) a! @ (A-LEFT) a! ! L: (A-LEFT) a! @ if END drop (MQ-NEXT) (A-WORD) a! ! \ its words of text, kept off the stack: this runs between lines + (FWD?) if STAYS drop (MQ-HDR)+3 a! @ if FRESH jump COUNT FRESH: drop 16 COUNT: -1 + if REFUSE drop @@ -148,6 +179,8 @@ macro R-CLEAR RSTACK-DEPTH b! a !b endmacro drop drop jump KEEP FREE: drop dup push (MQ-HDR) a! @ SWAP (OFFER) + a! ! \ whom it is to, offered -1 pop (PAY-K) + a! ! + jump KEEP + STAYS: drop KEEP: (A-BACK) (A-WORD) a! @ (A-TEXT) jump L REFUSE2: drop REFUSE: drop @@ -168,7 +201,9 @@ macro R-CLEAR RSTACK-DEPTH b! a !b endmacro (MQ-NEXT) (A-FOUND) a! @ if LOOK drop jump KEEP LOOK: drop + (FWD?) if KEEP1 drop (FWD-PORT) (GATE-PORT) a! @ xor if THIS drop jump KEEP + KEEP1: drop jump KEEP THIS: drop 1 (A-FOUND) a! ! (GATE-PORT) a! @ b! (MQ-HDR)+1 a! @ !b (MQ-HDR)+2 a! @ !b