commit 6b71c3f1536fdba51ff2b26baf919edeee506b52
parent 2cd0d46e3aa92696567eff424933b228220cf40a
Author: Commit-Bot <unknown>
Date: Mon, 22 Nov 2010 08:59:21 +0000
Automatic commit from picoLisp.tgz, From: Mon, 22 Nov 2010 08:59:21 GMT
Diffstat:
7 files changed, 32 insertions(+), 33 deletions(-)
diff --git a/doc/ref.html b/doc/ref.html
@@ -1121,9 +1121,9 @@ and exit points, and preserve their environment between invocations.
functions, and (re)invoked as needed. In this regard coroutines are similar to
"continuations" in other languages.
-<p>When the tag goes out of scope, the coroutine will be garabage collected. In
-cases where this is desired, using a <a href="#transient">transient</a> symbol
-for the tag is recommended.
+<p>When the tag goes out of scope while it is not actively running, the
+coroutine will be garabage collected. In cases where this is desired, using a <a
+href="#transient">transient</a> symbol or a number for the tag is recommended.
<p>A coroutine is created by calling <code><a href="refC.html#co">co</a></code>.
Its <code>prg</code> body will be executed, and unless <code><a
@@ -1137,17 +1137,15 @@ and already running - coroutine.
<p>A coroutine is stopped and disposed when
<p><ul>
-<li>it simply falls off the end,
+<li>execution falls off the end
<li>some other (co)routine calls <code><a href="refC.html#co">co</a></code> with
-that tag but without a <code>prg</code> body,
-
-<li>the tag goes out of scope, so that the garbage collector stops it,
+that tag but without a <code>prg</code> body
<li>a <code><a href="refT.html#throw">throw</a></code> into another (co)routine
-environment is executed, or
+environment is executed
-<li>an error occurred, and <a href="#errors">error handling</a> was entered.
+<li>an error occurred, and <a href="#errors">error handling</a> was entered
</ul>
diff --git a/doc/refC.html b/doc/refC.html
@@ -558,9 +558,9 @@ copied, while atoms are returned unchanged.
-> T
</code></pre>
-<dt><a name="co"><code>(co 'sym [. prg]) -> any</code></a>
+<dt><a name="co"><code>(co 'any [. prg]) -> any</code></a>
<dd>(64-bit version only) Starts, resumes or stops a <a
-href="ref.html#coroutines">coroutine</a> with the tag given by <code>sym</code>.
+href="ref.html#coroutines">coroutine</a> with the tag given by <code>any</code>.
If <code>prg</code> is not given, a coroutine with that tag will be stopped.
Otherwise, if a coroutine running with that tag is found (pointer equality is
used for comparison), its execution is resumed. Else a new coroutine with that
diff --git a/doc/refY.html b/doc/refY.html
@@ -11,11 +11,11 @@
<dl>
-<dt><a name="yield"><code>(yield 'any ['sym]) -> any</code></a>
+<dt><a name="yield"><code>(yield 'any ['any2]) -> any</code></a>
<dd>(64-bit version only) Transfers control from the current <a
href="ref.html#coroutines">coroutine</a> back to the caller (when the
-<code>sym</code> tag is not given), or to some other coroutine (specified by
-<code>sym</code>) to continue execution at the point where that coroutine had
+<code>any2</code> tag is not given), or to some other coroutine (specified by
+<code>any2</code>) to continue execution at the point where that coroutine had
called <code>yield</code> before. In the first case, the value <code>any</code>
will be returned from the corresponding <code><a
href="refC.html#co">co</a></code> call, in the second case it will be the return
diff --git a/ersatz/picolisp.jar b/ersatz/picolisp.jar
Binary files differ.
diff --git a/lib/tags b/lib/tags
@@ -1,5 +1,5 @@
-! (2841 . "@src64/flow.l")
-$ (2943 . "@src64/flow.l")
+! (2842 . "@src64/flow.l")
+$ (2944 . "@src64/flow.l")
% (2570 . "@src64/big.l")
& (2791 . "@src64/big.l")
* (2389 . "@src64/big.l")
@@ -46,7 +46,7 @@ bool (1721 . "@src64/flow.l")
box (822 . "@src64/flow.l")
box? (999 . "@src64/sym.l")
by (1547 . "@src64/apply.l")
-bye (3422 . "@src64/flow.l")
+bye (3423 . "@src64/flow.l")
caaaar (271 . "@src64/subr.l")
caaadr (288 . "@src64/subr.l")
caaar (99 . "@src64/subr.l")
@@ -61,7 +61,7 @@ caddar (409 . "@src64/subr.l")
cadddr (435 . "@src64/subr.l")
caddr (156 . "@src64/subr.l")
cadr (45 . "@src64/subr.l")
-call (3074 . "@src64/flow.l")
+call (3075 . "@src64/flow.l")
car (5 . "@src64/subr.l")
case (1962 . "@src64/flow.l")
catch (2462 . "@src64/flow.l")
@@ -114,7 +114,7 @@ diff (2576 . "@src64/subr.l")
dir (2800 . "@src64/main.l")
dm (543 . "@src64/flow.l")
do (2136 . "@src64/flow.l")
-e (2904 . "@src64/flow.l")
+e (2905 . "@src64/flow.l")
echo (4289 . "@src64/io.l")
env (625 . "@src64/main.l")
eof (3429 . "@src64/io.l")
@@ -139,7 +139,7 @@ flip (1686 . "@src64/subr.l")
flush (4994 . "@src64/io.l")
fold (3343 . "@src64/sym.l")
for (2225 . "@src64/flow.l")
-fork (3248 . "@src64/flow.l")
+fork (3249 . "@src64/flow.l")
format (2089 . "@src64/big.l")
free (2047 . "@src64/db.l")
from (3448 . "@src64/io.l")
@@ -166,12 +166,12 @@ inc (2256 . "@src64/big.l")
index (2624 . "@src64/subr.l")
info (2704 . "@src64/main.l")
intern (875 . "@src64/sym.l")
-ipid (3193 . "@src64/flow.l")
+ipid (3194 . "@src64/flow.l")
isa (959 . "@src64/flow.l")
job (1426 . "@src64/flow.l")
journal (970 . "@src64/db.l")
key (3279 . "@src64/io.l")
-kill (3225 . "@src64/flow.l")
+kill (3226 . "@src64/flow.l")
last (2031 . "@src64/subr.l")
length (2700 . "@src64/subr.l")
let (1476 . "@src64/flow.l")
@@ -235,7 +235,7 @@ on (1583 . "@src64/sym.l")
onOff (1613 . "@src64/sym.l")
one (1646 . "@src64/sym.l")
open (4220 . "@src64/io.l")
-opid (3209 . "@src64/flow.l")
+opid (3210 . "@src64/flow.l")
opt (2990 . "@src64/main.l")
or (1637 . "@src64/flow.l")
out (4114 . "@src64/io.l")
@@ -312,13 +312,13 @@ super (1218 . "@src64/flow.l")
sym (3910 . "@src64/io.l")
sym? (2421 . "@src64/subr.l")
sync (3091 . "@src64/io.l")
-sys (3045 . "@src64/flow.l")
+sys (3046 . "@src64/flow.l")
t (1748 . "@src64/flow.l")
tail (1898 . "@src64/subr.l")
tell (3163 . "@src64/io.l")
text (1272 . "@src64/sym.l")
throw (2488 . "@src64/flow.l")
-tick (3161 . "@src64/flow.l")
+tick (3162 . "@src64/flow.l")
till (3515 . "@src64/io.l")
time (2514 . "@src64/main.l")
touch (1049 . "@src64/sym.l")
@@ -345,7 +345,7 @@ wr (5119 . "@src64/io.l")
xchg (1538 . "@src64/sym.l")
xor (1698 . "@src64/flow.l")
x| (2871 . "@src64/big.l")
-yield (2699 . "@src64/flow.l")
+yield (2700 . "@src64/flow.l")
yoke (1187 . "@src64/subr.l")
zap (1063 . "@src64/sym.l")
zero (1631 . "@src64/sym.l")
diff --git a/src64/flow.l b/src64/flow.l
@@ -1,4 +1,4 @@
-# 12oct10abu
+# 22nov10abu
# (c) Software Lab. Alexander Burger
(code 'redefMsgEC)
@@ -2540,11 +2540,12 @@
pop X
ret
-# (co 'sym [. prg]) -> any
+# (co 'any [. prg]) -> any
(code 'doCo 2)
push X
ld X (E CDR) # Get tag
- call evSymX_E # Evaluate to a symbol
+ ld E (X)
+ eval # Evaluate 'any'
atom (X CDR) # 'prg'?
if z # Yes
push Y
@@ -2695,7 +2696,7 @@
pop X
ret
-# (yield 'any ['sym]) -> any
+# (yield 'any ['any2]) -> any
(code 'doYield 2)
push X
push Y
@@ -2712,7 +2713,7 @@
link
ld Y (Y CDR) # Next arg
ld E (Y)
- eval # Eval optional 'sym'
+ eval # Eval optional 'any2'
ld Y 0 # Preload "no target"
cmp E Nil # Any?
if ne # Yes
diff --git a/src64/version.l b/src64/version.l
@@ -1,6 +1,6 @@
-# 19nov10abu
+# 22nov10abu
# (c) Software Lab. Alexander Burger
-(de *Version 3 0 4 12)
+(de *Version 3 0 4 13)
# vi:et:ts=3:sw=3