co

Coroutines by partial continuations



\
\ co.fs		Coroutines by continuations.
\
\ * Circular Queue. Capacity is power of 2.
\
	VARIABLE HEAD VARIABLE TAIL
	128 CELLS CONSTANT CQ#
\ * align by queue capacity
	HERE DUP
		CQ# 1- INVERT AND CQ# +
	SWAP - ALLOT
\	
	HERE CQ# ALLOT CONSTANT START
\
: ADJUST   (  -- )   [ CQ# 1- ]L AND START + ;
: PUT      ( n-- )   TAIL @ TUCK ! CELL+ ADJUST TAIL ! ;
: TAKE 	   ( --n )   HEAD @ DUP @ SWAP CELL+ ADJUST HEAD ! ;
: 0CQ	   ( --  )   START DUP HEAD ! TAIL ! ; 0CQ
: NOEMPTY? ( --f )   HEAD @ TAIL @ <> ;
: ;CO      ( --  )   TAKE >R ;
\
\ * COROUTINES LEXEME
\
: CO:  ( -- )   R>  PUT ;	  \ Register continuation as coroutine. Exit.
: CO   ( -- )   R>  PUT TAKE >R ; \ Co-route.
: GO   ( -- )   BEGIN NOEMPTY? WHILE ;CO REPEAT ; \ :-)
\
\ * CHANNELS LEXEME
\
: CHAN?  ( a--f )   2@ XOR ;

by humptydumpty

avatar of humptydumpty

Versions

0.0.1

Download current as zip

Tags

None

Dependencies

None

Dependents

None