commit 256e488c82d15b0f26ae09f942ff009df2d03fbf
parent 8612883c26040fbf8e72165d237cdd17da0584d4
Author: Alexander Burger <abu@software-lab.de>
Date: Sun, 19 May 2013 18:19:58 +0200
Default coroutine stack segment size 1 MB
Diffstat:
10 files changed, 646 insertions(+), 637 deletions(-)
diff --git a/CHANGES b/CHANGES
@@ -1,4 +1,5 @@
* DDjun13 picoLisp-3.1.3
+ Default coroutine stack segment size 1 MB
JavaScript canvas library
'+OnClick' GUI prefix class
Flight Simulator in "misc/rcsim.l" (64-bit)
diff --git a/doc/refS.html b/doc/refS.html
@@ -602,32 +602,27 @@ href="refS.html#stem">stem</a></code>.
</code></pre>
<dt><a name="stack"><code>(stack ['cnt]) -> cnt | (.. sym . cnt)</code></a>
-<dd>(64-bit version only) Maintains the stack segment size for coroutines. If
-called without a <code>cnt</code> argument, or if already one or more <a
-href="ref.html#coroutines">coroutines</a> are running, the current size in
-megabytes is returned. Otherwise, the stack segment size is set to the new value
-(default 4 MB). If there are running coroutines, their tags will be <code><a
-href="refC.html#cons">cons</a></code>ed in front of the size. See also <code><a
-href="refH.html#heap">heap</a></code>.
+<dd>(64-bit version only) Maintains the stack segment size for <a
+href="ref.html#coroutines">coroutines</a> (the main stack segment is limited -
+while at least one coroutine is running - to four times that size). If called
+without a <code>cnt</code> argument, or if already one or more coroutines are
+running, the current size in megabytes is returned. Otherwise, the stack segment
+size is set to the new value (default 1 MB). If there are running coroutines,
+their tags will be <code><a href="refC.html#cons">cons</a></code>ed in front of
+the size. See also <code><a href="refH.html#heap">heap</a></code>.
<pre><code>
-: (stack) # Get current stack segment size
+$ ulimit -s unlimited && pil + # Guarantee stack space
+: (stack) # Current size
+-> 1
+: (stack 4) # Set to 4 MB
-> 4
-: (stack 10) # Set to 10 MB
--> 10
-: (let N 0 (recur (N) (recurse (inc N))))
-!? (recurse (inc N))
-Stack overflow
-? N
--> 109181
-?
-
-: (co "routine" (yield 7)) # Create two coroutines
--> 7
-: (co "routine2" (yield 8))
--> 8
+: (co 'inc (let N 0 (loop (yield (inc 'N))))) # Create two coroutines
+-> 1
+: (co 'dec (let N 0 (loop (yield (dec 'N)))))
+-> -1
: (stack)
--> ("routine2" "routine" . 4)
+-> (dec inc . 4)
</code></pre>
<dt><a name="stamp"><code>(stamp ['dat 'tim]|['T]) -> sym</code></a>
diff --git a/lib/map b/lib/map
@@ -1,5 +1,5 @@
-! (2865 . "@src64/flow.l")
-$ (2967 . "@src64/flow.l")
+! (2867 . "@src64/flow.l")
+$ (2969 . "@src64/flow.l")
% (2572 . "@src64/big.l")
& (2807 . "@src64/big.l")
* (2389 . "@src64/big.l")
@@ -25,16 +25,16 @@ $ (2967 . "@src64/flow.l")
>> (2627 . "@src64/big.l")
abs (2731 . "@src64/big.l")
accept (148 . "@src64/net.l")
-adr (588 . "@src64/main.l")
-alarm (474 . "@src64/main.l")
+adr (596 . "@src64/main.l")
+alarm (477 . "@src64/main.l")
all (788 . "@src64/sym.l")
and (1624 . "@src64/flow.l")
any (3999 . "@src64/io.l")
append (1339 . "@src64/subr.l")
apply (713 . "@src64/apply.l")
-arg (2605 . "@src64/main.l")
-args (2581 . "@src64/main.l")
-argv (3233 . "@src64/main.l")
+arg (2613 . "@src64/main.l")
+args (2589 . "@src64/main.l")
+argv (3241 . "@src64/main.l")
as (139 . "@src64/flow.l")
asoq (3021 . "@src64/subr.l")
assoc (2986 . "@src64/subr.l")
@@ -46,7 +46,7 @@ bool (1724 . "@src64/flow.l")
box (828 . "@src64/flow.l")
box? (1131 . "@src64/sym.l")
by (1669 . "@src64/apply.l")
-bye (3415 . "@src64/flow.l")
+bye (3417 . "@src64/flow.l")
bytes (2973 . "@src64/subr.l")
caaaar (271 . "@src64/subr.l")
caaadr (288 . "@src64/subr.l")
@@ -62,11 +62,11 @@ caddar (409 . "@src64/subr.l")
cadddr (435 . "@src64/subr.l")
caddr (156 . "@src64/subr.l")
cadr (45 . "@src64/subr.l")
-call (3067 . "@src64/flow.l")
+call (3069 . "@src64/flow.l")
car (5 . "@src64/subr.l")
case (1965 . "@src64/flow.l")
catch (2467 . "@src64/flow.l")
-cd (2985 . "@src64/main.l")
+cd (2993 . "@src64/main.l")
cdaaar (464 . "@src64/subr.l")
cdaadr (487 . "@src64/subr.l")
cdaar (179 . "@src64/subr.l")
@@ -89,7 +89,7 @@ circ (817 . "@src64/subr.l")
circ? (2403 . "@src64/subr.l")
clip (1800 . "@src64/subr.l")
close (4412 . "@src64/io.l")
-cmd (3215 . "@src64/main.l")
+cmd (3223 . "@src64/main.l")
cnt (1413 . "@src64/apply.l")
co (2548 . "@src64/flow.l")
commit (1403 . "@src64/db.l")
@@ -100,9 +100,9 @@ connect (227 . "@src64/net.l")
cons (747 . "@src64/subr.l")
copy (1226 . "@src64/subr.l")
ctl (4285 . "@src64/io.l")
-ctty (3010 . "@src64/main.l")
+ctty (3018 . "@src64/main.l")
cut (1931 . "@src64/sym.l")
-date (2719 . "@src64/main.l")
+date (2727 . "@src64/main.l")
dbck (2018 . "@src64/db.l")
de (532 . "@src64/flow.l")
dec (2323 . "@src64/big.l")
@@ -112,16 +112,16 @@ del (1986 . "@src64/sym.l")
delete (1402 . "@src64/subr.l")
delq (1453 . "@src64/subr.l")
diff (2590 . "@src64/subr.l")
-dir (3145 . "@src64/main.l")
+dir (3153 . "@src64/main.l")
dm (545 . "@src64/flow.l")
do (2141 . "@src64/flow.l")
-e (2928 . "@src64/flow.l")
+e (2930 . "@src64/flow.l")
echo (4443 . "@src64/io.l")
-env (600 . "@src64/main.l")
+env (608 . "@src64/main.l")
eof (3558 . "@src64/io.l")
eol (3549 . "@src64/io.l")
err (4265 . "@src64/io.l")
-errno (1605 . "@src64/main.l")
+errno (1613 . "@src64/main.l")
eval (175 . "@src64/flow.l")
ext (5177 . "@src64/io.l")
ext? (1166 . "@src64/sym.l")
@@ -129,7 +129,7 @@ extern (1032 . "@src64/sym.l")
extra (1269 . "@src64/flow.l")
extract (1218 . "@src64/apply.l")
fifo (2097 . "@src64/sym.l")
-file (3092 . "@src64/main.l")
+file (3100 . "@src64/main.l")
fill (3256 . "@src64/subr.l")
filter (1161 . "@src64/apply.l")
fin (2034 . "@src64/subr.l")
@@ -141,13 +141,13 @@ flip (1700 . "@src64/subr.l")
flush (5152 . "@src64/io.l")
fold (3521 . "@src64/sym.l")
for (2230 . "@src64/flow.l")
-fork (3241 . "@src64/flow.l")
+fork (3243 . "@src64/flow.l")
format (2089 . "@src64/big.l")
free (1960 . "@src64/db.l")
from (3577 . "@src64/io.l")
full (1076 . "@src64/subr.l")
fun? (750 . "@src64/sym.l")
-gc (435 . "@src64/gc.l")
+gc (436 . "@src64/gc.l")
ge0 (2707 . "@src64/big.l")
get (2903 . "@src64/sym.l")
getd (758 . "@src64/sym.l")
@@ -156,7 +156,7 @@ glue (1369 . "@src64/sym.l")
gt0 (2718 . "@src64/big.l")
hash (2976 . "@src64/big.l")
head (1821 . "@src64/subr.l")
-heap (520 . "@src64/main.l")
+heap (523 . "@src64/main.l")
hear (3262 . "@src64/io.l")
host (193 . "@src64/net.l")
id (1028 . "@src64/db.l")
@@ -167,14 +167,14 @@ ifn (1865 . "@src64/flow.l")
in (4225 . "@src64/io.l")
inc (2256 . "@src64/big.l")
index (2638 . "@src64/subr.l")
-info (3047 . "@src64/main.l")
+info (3055 . "@src64/main.l")
intern (1007 . "@src64/sym.l")
-ipid (3186 . "@src64/flow.l")
+ipid (3188 . "@src64/flow.l")
isa (967 . "@src64/flow.l")
job (1429 . "@src64/flow.l")
journal (971 . "@src64/db.l")
key (3410 . "@src64/io.l")
-kill (3218 . "@src64/flow.l")
+kill (3220 . "@src64/flow.l")
last (2045 . "@src64/subr.l")
le0 (2693 . "@src64/big.l")
length (2742 . "@src64/subr.l")
@@ -184,7 +184,7 @@ lieu (1157 . "@src64/db.l")
line (3733 . "@src64/io.l")
lines (3886 . "@src64/io.l")
link (1173 . "@src64/subr.l")
-lisp (2274 . "@src64/main.l")
+lisp (2282 . "@src64/main.l")
list (888 . "@src64/subr.l")
listen (160 . "@src64/net.l")
lit (150 . "@src64/flow.l")
@@ -223,10 +223,10 @@ n== (2088 . "@src64/subr.l")
nT (2199 . "@src64/subr.l")
name (502 . "@src64/sym.l")
nand (1659 . "@src64/flow.l")
-native (1613 . "@src64/main.l")
+native (1621 . "@src64/main.l")
need (920 . "@src64/subr.l")
new (839 . "@src64/flow.l")
-next (2588 . "@src64/main.l")
+next (2596 . "@src64/main.l")
nil (1742 . "@src64/flow.l")
nond (1942 . "@src64/flow.l")
nor (1680 . "@src64/flow.l")
@@ -239,8 +239,8 @@ on (1717 . "@src64/sym.l")
onOff (1747 . "@src64/sym.l")
one (1780 . "@src64/sym.l")
open (4369 . "@src64/io.l")
-opid (3202 . "@src64/flow.l")
-opt (3336 . "@src64/main.l")
+opid (3204 . "@src64/flow.l")
+opt (3344 . "@src64/main.l")
or (1640 . "@src64/flow.l")
out (4245 . "@src64/io.l")
pack (1279 . "@src64/sym.l")
@@ -267,24 +267,24 @@ prog (1760 . "@src64/flow.l")
prog1 (1768 . "@src64/flow.l")
prog2 (1785 . "@src64/flow.l")
prop (2934 . "@src64/sym.l")
-protect (510 . "@src64/main.l")
+protect (513 . "@src64/main.l")
prove (3543 . "@src64/subr.l")
push (1822 . "@src64/sym.l")
push1 (1858 . "@src64/sym.l")
put (2844 . "@src64/sym.l")
putl (3122 . "@src64/sym.l")
-pwd (2974 . "@src64/main.l")
+pwd (2982 . "@src64/main.l")
queue (2054 . "@src64/sym.l")
-quit (1315 . "@src64/main.l")
+quit (1323 . "@src64/main.l")
quote (134 . "@src64/flow.l")
rand (3003 . "@src64/big.l")
range (998 . "@src64/subr.l")
rank (3049 . "@src64/subr.l")
-raw (452 . "@src64/main.l")
+raw (455 . "@src64/main.l")
rd (5194 . "@src64/io.l")
read (2674 . "@src64/io.l")
replace (1500 . "@src64/subr.l")
-rest (2634 . "@src64/main.l")
+rest (2642 . "@src64/main.l")
reverse (1679 . "@src64/subr.l")
rewind (5160 . "@src64/io.l")
rollback (1803 . "@src64/db.l")
@@ -297,20 +297,20 @@ send (1134 . "@src64/flow.l")
seq (1084 . "@src64/db.l")
set (1616 . "@src64/sym.l")
setq (1649 . "@src64/sym.l")
-sigio (490 . "@src64/main.l")
+sigio (493 . "@src64/main.l")
size (2809 . "@src64/subr.l")
skip (3535 . "@src64/io.l")
sort (3978 . "@src64/subr.l")
sp? (727 . "@src64/sym.l")
space (5094 . "@src64/io.l")
split (1593 . "@src64/subr.l")
-stack (549 . "@src64/main.l")
+stack (552 . "@src64/main.l")
state (2009 . "@src64/flow.l")
stem (1990 . "@src64/subr.l")
str (4053 . "@src64/io.l")
str? (1145 . "@src64/sym.l")
strip (1577 . "@src64/subr.l")
-struct (2065 . "@src64/main.l")
+struct (2073 . "@src64/main.l")
sub? (1578 . "@src64/sym.l")
sum (1460 . "@src64/apply.l")
super (1225 . "@src64/flow.l")
@@ -318,17 +318,17 @@ sym (4039 . "@src64/io.l")
sym? (2435 . "@src64/subr.l")
symbols (942 . "@src64/sym.l")
sync (3222 . "@src64/io.l")
-sys (847 . "@src64/main.l")
+sys (855 . "@src64/main.l")
t (1751 . "@src64/flow.l")
tail (1912 . "@src64/subr.l")
tell (3294 . "@src64/io.l")
text (1407 . "@src64/sym.l")
throw (2493 . "@src64/flow.l")
-tick (3154 . "@src64/flow.l")
+tick (3156 . "@src64/flow.l")
till (3644 . "@src64/io.l")
-time (2852 . "@src64/main.l")
+time (2860 . "@src64/main.l")
touch (1181 . "@src64/sym.l")
-trail (699 . "@src64/main.l")
+trail (707 . "@src64/main.l")
trim (1760 . "@src64/subr.l")
try (1177 . "@src64/flow.l")
type (920 . "@src64/flow.l")
@@ -336,13 +336,13 @@ udp (304 . "@src64/net.l")
unify (3951 . "@src64/subr.l")
unless (1901 . "@src64/flow.l")
until (2085 . "@src64/flow.l")
-up (767 . "@src64/main.l")
+up (775 . "@src64/main.l")
upp? (3402 . "@src64/sym.l")
uppc (3469 . "@src64/sym.l")
use (1573 . "@src64/flow.l")
-usec (2956 . "@src64/main.l")
+usec (2964 . "@src64/main.l")
val (1597 . "@src64/sym.l")
-version (3350 . "@src64/main.l")
+version (3358 . "@src64/main.l")
wait (3184 . "@src64/io.l")
when (1884 . "@src64/flow.l")
while (2061 . "@src64/flow.l")
@@ -352,7 +352,7 @@ wr (5277 . "@src64/io.l")
xchg (1672 . "@src64/sym.l")
xor (1701 . "@src64/flow.l")
x| (2887 . "@src64/big.l")
-yield (2720 . "@src64/flow.l")
+yield (2722 . "@src64/flow.l")
yoke (1197 . "@src64/subr.l")
zap (1195 . "@src64/sym.l")
zero (1765 . "@src64/sym.l")
diff --git a/src64/defs.l b/src64/defs.l
@@ -1,10 +1,10 @@
-# 07jun12abu
+# 19may13abu
# (c) Software Lab. Alexander Burger
# Constants
(equ HEAP (* 1024 1024)) # Heap size in bytes
(equ CELLS (/ HEAP 16)) # Number of cells in a single heap (65536)
-(equ STACK (* 4 1024 1024)) # Default stack segment size
+(equ STACK (* 1024 1024)) # Default coroutine stack segment size (1 MB)
(equ ZERO (short 0)) # Short number '0'
(equ ONE (short 1)) # Short number '1'
(equ TOP (hex "10000")) # Character top
diff --git a/src64/err.l b/src64/err.l
@@ -1,4 +1,4 @@
-# 12jan13abu
+# 19may13abu
# (c) Software Lab. Alexander Burger
# Debug print routine
@@ -259,12 +259,12 @@
do
cmp Z (X (pack III "+(EnvCo7-Env)")) # Skipped?
while ne # Yes
- ld C (Stack0) # Find stack segment
+ ld C (Stack1) # Find stack segment
ld A 1
do
- sub C (StkSize) # Next segment
cmp C (Z II) # Found 'seg'?
while ne # No
+ sub C (StkSize) # Next segment
add A A
loop
xor (Stacks) A # Clear in segment bitmask
diff --git a/src64/flow.l b/src64/flow.l
@@ -1,4 +1,4 @@
-# 06may13abu
+# 19may13abu
# (c) Software Lab. Alexander Burger
(code 'redefMsgEC)
@@ -2555,105 +2555,107 @@
push Z
push L
sub S "EnvMid-EnvCo" # Space for env
- ld Y (Stack0) # Search through stack segments
+ ld Y (Stack1) # Search through stack segments
ld C (Stacks) # Segment bitmask
do
- sub Y (StkSize) # Next segment
shr C 1 # In use?
if c # Yes
cmp E (Y -I) # Found tag?
- continue ne # No
- null (Y -II) # Already active?
- jz reentErrEX # Yes
- push Y # Resume coroutine: Save 'seg'
- push (StkLimit) # and 'lim'
- push (EnvCo7) # Link
- ld (EnvCo7) S # Close coroutine frame
- ld Z S # Point Z to main frame
- save (EnvCo) (EnvMid) (Z III) # Save environment
+ if eq # Yes
+ null (Y -II) # Already active?
+ jz reentErrEX # Yes
+ push Y # Resume coroutine: Save 'seg'
+ push (StkLimit) # and 'lim'
+ push (EnvCo7) # Link
+ ld (EnvCo7) S # Close coroutine frame
+ ld Z S # Point Z to main frame
+ save (EnvCo) (EnvMid) (Z III) # Save environment
: resumeCoroutine
- ld S (Y -II) # Restore stack pointer
- ld (Y -II) 0 # Mark as active
- lea A (Y 4096) # Set stack limit
- sub A (StkSize)
- ld (StkLimit) A
- load (EnvCo) (EnvMid) (Y (pack -II "-(EnvMid-EnvCo)")) # Restore environment
- ld X (EnvBind) # Reversed bindings
- ld C (Z (pack III "+(EnvBind-EnvCo)")) # Main bindings
- do
- null X # More reversed bindings?
- while nz # Yes
- ld Y (X) # Link address in Y
- null (X -I) # Env swap zero?
- if z # Yes
- lea A (Y -II) # End of bindings in A
- do
- xchg ((A)) (A I) # Exchange symbol value with saved value
- sub A II
- cmp A X # More?
- until lt # No
- end
- ld A (Y I) # Get down link
- ld (Y I) C # Undo reversal
- ld C X
- ld X A
- loop
- ld (EnvBind) C # Set local bindings
- ld X EnvInFrames # Pointer to input frames
- ld C (Z (pack III "+(EnvInFrames-EnvCo)")) # Local input frames
- call joinLocalCX # Join locals
- ld X EnvOutFrames # Pointer to output frames
- ld C (Z (pack III "+(EnvOutFrames-EnvCo)")) # Local output frames
- call joinLocalCX # Join locals
- ld X EnvErrFrames # Pointer to error frames
- ld C (Z (pack III "+(EnvErrFrames-EnvCo)")) # Local error frames
- call joinLocalCX # Join locals
- ld X EnvCtlFrames # Pointer to control frames
- ld C (Z (pack III "+(EnvCtlFrames-EnvCo)")) # Local control frames
- call joinLocalCX # Join locals
- ld X EnvApply # Local apply stack
- do
- null (X) # Any?
- while nz # Yes
- ld X ((X)) # Follow link
- loop
- ld (X) (Z (pack III "+(EnvApply-EnvCo)")) # Join
- pop X # Get saved L
- null X # Any?
- if nz # Yes
- ld Y (X) # Pointer to link
+ ld S (Y -II) # Restore stack pointer
+ ld (Y -II) 0 # Mark as active
+ lea A (Y 4096) # Set stack limit
+ sub A (StkSize)
+ ld (StkLimit) A
+ load (EnvCo) (EnvMid) (Y (pack -II "-(EnvMid-EnvCo)")) # Restore environment
+ ld X (EnvBind) # Reversed bindings
+ ld C (Z (pack III "+(EnvBind-EnvCo)")) # Main bindings
do
- ld A (Y) # Get link
- null A # Found end?
- while nz # No
- ld Y (A) # Next frame
+ null X # More reversed bindings?
+ while nz # Yes
+ ld Y (X) # Link address in Y
+ null (X -I) # Env swap zero?
+ if z # Yes
+ lea A (Y -II) # End of bindings in A
+ do
+ xchg ((A)) (A I) # Exchange symbol value with saved value
+ sub A II
+ cmp A X # More?
+ until lt # No
+ end
+ ld A (Y I) # Get down link
+ ld (Y I) C # Undo reversal
+ ld C X
+ ld X A
loop
- ld (Y) (Z (pack III "+(EnvMid-EnvCo)")) # Link to main stack
- ld L X
- end
- pop Z
- pop Y
- pop X
- ret
+ ld (EnvBind) C # Set local bindings
+ ld X EnvInFrames # Pointer to input frames
+ ld C (Z (pack III "+(EnvInFrames-EnvCo)")) # Local input frames
+ call joinLocalCX # Join locals
+ ld X EnvOutFrames # Pointer to output frames
+ ld C (Z (pack III "+(EnvOutFrames-EnvCo)")) # Local output frames
+ call joinLocalCX # Join locals
+ ld X EnvErrFrames # Pointer to error frames
+ ld C (Z (pack III "+(EnvErrFrames-EnvCo)")) # Local error frames
+ call joinLocalCX # Join locals
+ ld X EnvCtlFrames # Pointer to control frames
+ ld C (Z (pack III "+(EnvCtlFrames-EnvCo)")) # Local control frames
+ call joinLocalCX # Join locals
+ ld X EnvApply # Local apply stack
+ do
+ null (X) # Any?
+ while nz # Yes
+ ld X ((X)) # Follow link
+ loop
+ ld (X) (Z (pack III "+(EnvApply-EnvCo)")) # Join
+ pop X # Get saved L
+ null X # Any?
+ if nz # Yes
+ ld Y (X) # Pointer to link
+ do
+ ld A (Y) # Get link
+ null A # Found end?
+ while nz # No
+ ld Y (A) # Next frame
+ loop
+ ld (Y) (Z (pack III "+(EnvMid-EnvCo)")) # Link to main stack
+ ld L X
+ end
+ pop Z
+ pop Y
+ pop X
+ ret
+ end # nz
end
- until z
- ld Y (Stack0) # Find unused stack segment
+ while nz
+ sub Y (StkSize) # Next segment
+ loop
+ ld Y (Stack1) # Find unused stack segment
ld Z 1 # New mask
ld C (Stacks) # Segment bitmask
null C # Starting first coroutine?
if z # Yes
- lea A ((Stack0) 4096) # Set stack limit
- sub A (StkSize)
+ ld A Y # Set stack limit
+ add A 4096
cmp S A # Check it
jlt stkErr
ld (StkLimit) A
end
do
- sub Y (StkSize) # Next segment
test C Z # Free?
while nz # No
add Z Z # Next bit
jc stkErrEX # Overflow
+ sub Y (StkSize) # Next segment
loop
or (Stacks) Z # Mark segment as used
push Y # Save 'seg'
@@ -2687,11 +2689,10 @@
pop X
ret
end
- ld X (Stack0) # Search through stack segments
+ ld X (Stack1) # Search through stack segments
ld C (Stacks) # Segment bitmask
ld A 1
do
- sub X (StkSize) # Next segment
shr C 1 # In use?
if c # Yes
cmp E (X -I) # Found tag?
@@ -2707,9 +2708,10 @@
end
pop X
ret
- end
+ end # nz
end
while nz
+ sub X (StkSize) # Next segment
add A A
loop
ld E Nil # Return NIL
@@ -2737,19 +2739,19 @@
ld Y 0 # Preload "no target"
cmp E Nil # Any?
if ne # Yes
- ld Y (Stack0) # Search for target coroutine
+ ld Y (Stack1) # Search for target coroutine
ld C (Stacks) # Segment bitmask
do
- sub Y (StkSize) # Next segment
shr C 1 # In use?
if c # Yes
cmp E (Y -I) # Found tag?
- continue ne # No
+ jne 10 # No
null (Y -II) # Already active?
jz reentErrEX # Yes
break T
end
jz yieldErrEX
+10 sub Y (StkSize) # Next segment
loop
end
ld E (L I) # Get result
@@ -2764,7 +2766,7 @@
do
ld A (X) # Get link
null A # Any?
- jz 10 # No
+ jz 20 # No
cmp A C # Reached main routine's link?
while ne # No
ld X A # Follow link
@@ -2772,7 +2774,7 @@
ld (X) 0 # Clear link
end
end
-10 push L # End of segment
+20 push L # End of segment
push Y # Save taget coroutine
ld X EnvApply # Pointer to apply stack
do
diff --git a/src64/gc.l b/src64/gc.l
@@ -1,4 +1,4 @@
-# 07jun12abu
+# 19may13abu
# (c) Software Lab. Alexander Burger
# Mark data
@@ -129,10 +129,9 @@
call markE
ld Y (Y) # Next frame
loop
- ld Y (Stack0) # Search through stack segments
+ ld Y (Stack1) # Search through stack segments
ld C (Stacks) # Segment bitmask
do
- sub Y (StkSize) # Next segment
shr C 1 # In use?
if c # Yes
push C
@@ -159,9 +158,11 @@
pop Y
end
pop C
- continue T
+ jmp 10
end
- until z
+ while nz
+10 sub Y (StkSize) # Next segment
+ loop
# Mark externals
ld Y Extern
ld Z 0 # Clear TOS
@@ -209,7 +210,7 @@
do
ld A Z # TOS
null A # Empty?
- jeq 10 # Done
+ jeq 20 # Done
sym A # Second visit?
if z # Yes
ld C (A CDR) # Nodes
@@ -226,7 +227,7 @@
loop
loop
loop
-10 ld A Db1 # DB root object
+20 ld A Db1 # DB root object
ld (DB) A # Restore '*DB'
test (A) 1 # Marked?
if nz # No
@@ -235,7 +236,7 @@
end
ld Y Extern # Clean up
ld Z 0 # Clear TOS
-20 do
+30 do
do
ld A (Y CDR)
atom (A CDR) # Right subtree?
@@ -253,19 +254,19 @@
if nz # No
or (Y CDR) 1 # Set mark bit again
ld Y A # Use NIL
- jmp 40 # Already traversed
+ jmp 50 # Already traversed
end
atom (A) # Left branch?
if nz # No
or (Y CDR) 1 # Set mark bit again
ld Y (A CDR) # Use right branch
- jmp 40 # Already traversed
+ jmp 50 # Already traversed
end
atom (A CDR) # Right branch?
if nz # No
or (Y CDR) 1 # Set mark bit again
ld Y (A) # Use left branch
- jmp 20
+ jmp 30
end
ld A (A CDR) # A on right branch
ld X (A CDR) # X on sub-branches
@@ -273,7 +274,7 @@
if nz # No
ld (Y) (A) # Insert right sub-branch
ld ((Y CDR) CDR) (X CDR)
- jmp 30 # Traverse left branch
+ jmp 40 # Traverse left branch
end
ld X (X) # Left sub-branch
do
@@ -286,7 +287,7 @@
ld (Y) (X) # Insert left sub-branch
ld ((A CDR)) (C CDR)
end
-30 ld A (Y CDR) # Left subtree?
+40 ld A (Y CDR) # Left subtree?
atom (A)
if z # Yes
ld C Y # Go left
@@ -296,10 +297,10 @@
ld Z C
break T
end
-40 do
+50 do
ld A Z # TOS
null A # Empty?
- jeq 50 # Done
+ jeq 60 # Done
sym A # Second visit?
if z # Yes
ld C (A CDR) # Nodes
@@ -316,12 +317,11 @@
loop
loop
loop
-50 ### Clean up ###
- ld Y (Stack0) # Search through stack segments
+60 ### Clean up ###
+ ld Y (Stack1) # Search through stack segments
ld C (Stacks) # Segment bitmask
ld A 1
do
- sub Y (StkSize) # Next segment
shr C 1 # In use?
if c # Yes
test ((Y -I)) 1 # 'tag' symbol gone?
@@ -348,10 +348,11 @@
loop
end
end
- jmp 60
+ jmp 70
end
while nz
-60 add A A
+70 sub Y (StkSize) # Next segment
+ add A A
loop
ld Y (EnvApply) # Apply stack
do
diff --git a/src64/glob.l b/src64/glob.l
@@ -1,4 +1,4 @@
-# 06may13abu
+# 19may13abu
# (c) Software Lab. Alexander Burger
(data 'Data)
@@ -13,9 +13,10 @@
word 0
: Stack0 word 0 # Initial stack pointer
+: Stack1 word 0 # Coroutine stack base
: Stacks word 0 # Stack segment bitmask
-: StkSize word STACK # Stack segment size
-: StkLimit word 0 # Stack limit: StackN-StkSize+4096
+: StkSize word STACK # Coroutine stack segment size
+: StkLimit word 0 # Stack limit: StackN-Size+4096
: Link word 0 # Saved link register
: Catch word 0 # Catch frames
: Termio word 0 # Raw mode terminal I/O
diff --git a/src64/main.l b/src64/main.l
@@ -1,4 +1,4 @@
-# 06may13abu
+# 19may13abu
# (c) Software Lab. Alexander Burger
(code 'Code)
@@ -85,6 +85,9 @@
or A CNT
ld (Pid) A
ld (Stack0) S # Save top level stack pointer
+ ld A S # Stack top in A
+ sub A (* 4 STACK) # Decrement by main segment size
+ ld (Stack1) A # Set coroutine stack base
ld (StkLimit) 0 # Initially without stack limit
ld L 0 # Init link register
call heapAlloc # Allocate initial heap
@@ -556,7 +559,11 @@
if z # No
ld E (E) # Eval 'cnt'
call evCntEX_FE
- shl E 20 # [MB]
+ shl E 22 # Main stack segment size [times 4 MB]
+ ld A (Stack0) # Get stack top
+ sub A E # Decrement by main segment size
+ ld (Stack1) A # New coroutine stack base
+ shr E 2 # [to MB]
ld (StkSize) E # Set new stack size
shr E 16 # Make short number [MB]
or E CNT
@@ -567,19 +574,20 @@
ld E (StkSize) # Return current stack size
shr E 16 # Make short number [MB]
or E CNT
- ld X (Stack0) # Collect coroutines
+ ld X (Stack1) # Collect coroutines
ld C (Stacks) # Segment bitmask
do
- sub X (StkSize) # Next segment
shr C 1 # In use?
if c # Yes
call consE_A # Cons 'tag'
ld (A) (X -I)
ld (A CDR) E
ld E A
- continue T
+ jmp 10
end
- until z
+ while nz
+10 sub X (StkSize) # Next segment
+ loop
pop X
ret
diff --git a/src64/tags b/src64/tags
@@ -1,52 +1,52 @@
-./defs.l,638
+./defs.l,639
HEAP5,63
CELLS6,114
STACK7,187
-ZERO8,246
-ONE9,295
-TOP10,344
-DB111,390
-I14,455
-II15,465
-III16,477
-IV17,490
-V18,502
-VI19,513
-VII20,525
-VIII21,538
-IX22,552
--I24,565
--II25,579
--III26,595
--IV27,612
--V28,628
--VI29,643
--VII30,659
--VIII31,676
-CNT34,710
-BIG35,737
-DIG36,784
-CDR37,829
-SIGN38,870
-SYM39,908
-TAIL40,936
-NIX43,984
-BEG44,1008
-DOT45,1039
-END46,1071
-NUMBER47,1100
-INTERN48,1127
-TRANSIENT49,1163
-EXTERN50,1200
-BLK53,1246
-BLKSIZE54,1285
-BLKTAG55,1324
-UDPMAX58,1373
-CHAR_UPPERCASE61,1453
-CHAR_LOWERCASE62,1476
-CHAR_LETTER63,1499
-CHAR_DIGIT64,1520
+ZERO8,263
+ONE9,312
+TOP10,361
+DB111,407
+I14,472
+II15,482
+III16,494
+IV17,507
+V18,519
+VI19,530
+VII20,542
+VIII21,555
+IX22,569
+-I24,582
+-II25,596
+-III26,612
+-IV27,629
+-V28,645
+-VI29,660
+-VII30,676
+-VIII31,693
+CNT34,727
+BIG35,754
+DIG36,801
+CDR37,846
+SIGN38,887
+SYM39,925
+TAIL40,953
+NIX43,1001
+BEG44,1025
+DOT45,1056
+END46,1088
+NUMBER47,1117
+INTERN48,1144
+TRANSIENT49,1180
+EXTERN50,1217
+BLK53,1263
+BLKSIZE54,1302
+BLKTAG55,1341
+UDPMAX58,1390
+CHAR_UPPERCASE61,1470
+CHAR_LOWERCASE62,1493
+CHAR_LETTER63,1516
+CHAR_DIGIT64,1537
sys/x86-64.linux.defs.l,1959
ENOENT5,59
@@ -162,7 +162,7 @@ sys/x86-64.linux.defs.l,1959
AI_ADDR147,2488
AI_NEXT148,2505
-./glob.l,4310
+./glob.l,4326
Data4,51
AV7,77
AV08,141
@@ -171,243 +171,244 @@ sys/x86-64.linux.defs.l,1959
Avail11,284
Buf12,330
Stack015,412
-Stacks16,469
-StkSize17,526
-StkLimit18,580
-Link19,648
-Catch20,703
-Termio21,751
-Tv22,808
-Time24,886
-USec25,947
-TtyPid26,1003
-InFDs27,1058
-InFiles28,1122
-OutFDs29,1169
-OutFiles30,1234
-PutBinBZ31,1282
-GetBinZ_FB32,1340
-Seed33,1397
-TickU35,1500
-TickS36,1554
-Slot37,1610
-Spkr38,1657
-Mic39,1708
-SpMiPipe40,1758
-Hear41,1817
-Tell42,1865
-TellBuf43,1916
-Talking44,1962
-Children45,2010
-Child46,2071
-ExtN47,2118
-Extn48,2176
-StrX49,2199
-StrC50,2248
-LineC51,2271
-Break52,2295
-GcCount53,2341
-Sep054,2392
-Sep355,2445
-BufEnd56,2499
-Penv58,2561
-Pnl59,2614
-Signal62,2650
-DBs65,2697
-DbFile66,2758
-DbFiles67,2801
-DbBlock68,2845
-MaxBlkSize69,2893
-BlkIndex70,2947
-BlkLink71,2994
-DbJnl72,3040
-DbLog73,3088
-GcMark76,3164
-Transient77,3173
-Alarm79,3286
-Sigio80,3335
-LineX81,3384
-Lisp82,3432
-LispEnd130,4957
-GcMarkEnd131,4967
-SymTab135,4996
-Nil136,5013
-Pico139,5170
-pico144,5312
-CPU145,5350
-OS146,5389
-DB147,5427
-Meth148,5464
-Quote149,5504
-TSym150,5545
-ISym153,5604
-NSym154,5641
-SSym155,5678
-CSym156,5715
-BSym157,5752
-Solo158,5789
-PPid159,5827
-Pid160,5864
-At161,5899
-At2162,5936
-At3163,5973
-This164,6010
-Prompt165,6047
-Dbg166,6084
-Zap167,6121
-Ext168,6158
-Scl169,6195
-Class170,6233
-Run171,6270
-Hup172,6307
-Sig1173,6344
-Sig2174,6381
-Up175,6418
-Err176,6455
-Msg177,6492
-Uni178,6529
-Led179,6566
-Tsm180,6603
-Adr181,6640
-Fork182,6677
-Bye183,6714
-SymTabEnd562,21276
-TgCPU565,21309
-TgOS566,21351
-Db1570,21442
-Extern572,21469
-GcSymEnd576,21540
-Version579,21569
-EnvCo590,21776
-Chr591,21809
-PutB592,21863
-Get_A593,21924
-InFile594,21984
-OutFile595,22030
-Env596,22077
-EnvBind597,22110
-EnvInFrames598,22183
-EnvOutFrames599,22231
-EnvErrFrames600,22280
-EnvCtlFrames601,22328
-EnvIntern602,22378
-EnvArgs603,22451
-EnvNext604,22500
-EnvCls605,22547
-EnvKey606,22595
-EnvApply607,22641
-EnvMake608,22689
-EnvYoke609,22735
-EnvParseX610,22758
-EnvParseC611,22807
-EnvParseEOF612,22830
-EnvMid613,22854
-EnvCo7614,22882
-EnvTask615,22928
-EnvProtect616,22973
-EnvTrace617,23026
-EnvEnd618,23073
-OrgTermio620,23102
-Flock621,23163
-Tms622,23218
-Addr623,23271
-TBuf625,23331
-CaseBlocks630,23468
-CaseData760,38851
-CaseUpper1097,78732
-CaseLower1121,80558
-Tio1146,82264
-Repl1148,82313
-PRepl1149,82358
-Jam1150,82405
-InBye1151,82450
-Sync1152,82497
-Month1153,82559
-_r_1156,82625
-_w_1157,82642
-_a_1158,82659
-_ap_1159,82676
-_dot_1160,82695
-Giveup1164,82748
-ExecErr1165,82774
-AllocErr1166,82810
-PidSigMsg1167,82839
-QuitMsg1168,82872
-CbErr1169,82893
-HashBlank1171,82937
-Redefined1172,82960
-SuperErr1173,82994
-ExtraErr1174,83023
-ThrowErr1175,83052
-Trc11176,83085
-Trc21177,83103
-SetFD1179,83129
-Delim1180,83154
-DelimEnd1181,83195
-Arrow1182,83206
-RolbLog1184,83233
-IgnLog1185,83294
-CircFree1186,83348
-BadChain1187,83386
-BadCount1188,83415
-ErrTok1190,83452
-Dashes1191,83473
-ProtErr1192,83495
-SymNsErr1193,83530
-StkErr1194,83570
-ArgErr1195,83602
-NumErr1196,83632
-CntErr1197,83665
-SymErr1198,83704
-ExtErr1199,83737
-PairErr1200,83779
-AtomErr1201,83816
-LstErr1202,83848
-VarErr1203,83879
-DivErr1204,83914
-RenErr1205,83937
-MakeErr1206,83967
-ReentErr1207,83996
-YieldErr1208,84035
-MsgErr1209,84067
-BrkErr1210,84096
-OpenErr1211,84122
-CloseErr1212,84155
-PipeErr1213,84190
-ForkErr1214,84223
-WaitPidErr1215,84252
-BadFdErr1216,84282
-NoFdErr1217,84308
-EofErr1218,84340
-SuparErr1219,84369
-BadInput1220,84415
-BadDot1221,84449
-SelectErr1222,84482
-WrBytesErr1223,84519
-WrChildErr1224,84556
-WrSyncErr1225,84593
-WrJnlErr1226,84628
-WrLogErr1227,84665
-TruncErr1228,84698
-DbSyncErr1229,84740
-TrSyncErr1230,84779
-LockErr1231,84827
-DbfErr1232,84859
-JnlErr1233,84888
-IdErr1234,84917
-DbRdErr1235,84940
-DbWrErr1236,84970
-DbSizErr1237,85001
-TellErr1238,85032
-IpSocketErr1239,85064
-IpGetsocknameErr1240,85106
-IpV6onlyErr1241,85158
-IpReuseaddrErr1242,85205
-IpBindErr1243,85256
-IpListenErr1244,85294
-UdpOvflErr1245,85336
-UndefErr1246,85370
-DlErr1247,85399
+Stack116,469
+Stacks17,525
+StkSize18,582
+StkLimit19,646
+Link20,711
+Catch21,766
+Termio22,814
+Tv23,871
+Time25,949
+USec26,1010
+TtyPid27,1066
+InFDs28,1121
+InFiles29,1185
+OutFDs30,1232
+OutFiles31,1297
+PutBinBZ32,1345
+GetBinZ_FB33,1403
+Seed34,1460
+TickU36,1563
+TickS37,1617
+Slot38,1673
+Spkr39,1720
+Mic40,1771
+SpMiPipe41,1821
+Hear42,1880
+Tell43,1928
+TellBuf44,1979
+Talking45,2025
+Children46,2073
+Child47,2134
+ExtN48,2181
+Extn49,2239
+StrX50,2262
+StrC51,2311
+LineC52,2334
+Break53,2358
+GcCount54,2404
+Sep055,2455
+Sep356,2508
+BufEnd57,2562
+Penv59,2624
+Pnl60,2677
+Signal63,2713
+DBs66,2760
+DbFile67,2821
+DbFiles68,2864
+DbBlock69,2908
+MaxBlkSize70,2956
+BlkIndex71,3010
+BlkLink72,3057
+DbJnl73,3103
+DbLog74,3151
+GcMark77,3227
+Transient78,3236
+Alarm80,3349
+Sigio81,3398
+LineX82,3447
+Lisp83,3495
+LispEnd131,5020
+GcMarkEnd132,5030
+SymTab136,5059
+Nil137,5076
+Pico140,5233
+pico145,5375
+CPU146,5413
+OS147,5452
+DB148,5490
+Meth149,5527
+Quote150,5567
+TSym151,5608
+ISym154,5667
+NSym155,5704
+SSym156,5741
+CSym157,5778
+BSym158,5815
+Solo159,5852
+PPid160,5890
+Pid161,5927
+At162,5962
+At2163,5999
+At3164,6036
+This165,6073
+Prompt166,6110
+Dbg167,6147
+Zap168,6184
+Ext169,6221
+Scl170,6258
+Class171,6296
+Run172,6333
+Hup173,6370
+Sig1174,6407
+Sig2175,6444
+Up176,6481
+Err177,6518
+Msg178,6555
+Uni179,6592
+Led180,6629
+Tsm181,6666
+Adr182,6703
+Fork183,6740
+Bye184,6777
+SymTabEnd563,21339
+TgCPU566,21372
+TgOS567,21414
+Db1571,21505
+Extern573,21532
+GcSymEnd577,21603
+Version580,21632
+EnvCo591,21839
+Chr592,21872
+PutB593,21926
+Get_A594,21987
+InFile595,22047
+OutFile596,22093
+Env597,22140
+EnvBind598,22173
+EnvInFrames599,22246
+EnvOutFrames600,22294
+EnvErrFrames601,22343
+EnvCtlFrames602,22391
+EnvIntern603,22441
+EnvArgs604,22514
+EnvNext605,22563
+EnvCls606,22610
+EnvKey607,22658
+EnvApply608,22704
+EnvMake609,22752
+EnvYoke610,22798
+EnvParseX611,22821
+EnvParseC612,22870
+EnvParseEOF613,22893
+EnvMid614,22917
+EnvCo7615,22945
+EnvTask616,22991
+EnvProtect617,23036
+EnvTrace618,23089
+EnvEnd619,23136
+OrgTermio621,23165
+Flock622,23226
+Tms623,23281
+Addr624,23334
+TBuf626,23394
+CaseBlocks631,23531
+CaseData761,38914
+CaseUpper1098,78795
+CaseLower1122,80621
+Tio1147,82327
+Repl1149,82376
+PRepl1150,82421
+Jam1151,82468
+InBye1152,82513
+Sync1153,82560
+Month1154,82622
+_r_1157,82688
+_w_1158,82705
+_a_1159,82722
+_ap_1160,82739
+_dot_1161,82758
+Giveup1165,82811
+ExecErr1166,82837
+AllocErr1167,82873
+PidSigMsg1168,82902
+QuitMsg1169,82935
+CbErr1170,82956
+HashBlank1172,83000
+Redefined1173,83023
+SuperErr1174,83057
+ExtraErr1175,83086
+ThrowErr1176,83115
+Trc11177,83148
+Trc21178,83166
+SetFD1180,83192
+Delim1181,83217
+DelimEnd1182,83258
+Arrow1183,83269
+RolbLog1185,83296
+IgnLog1186,83357
+CircFree1187,83411
+BadChain1188,83449
+BadCount1189,83478
+ErrTok1191,83515
+Dashes1192,83536
+ProtErr1193,83558
+SymNsErr1194,83593
+StkErr1195,83633
+ArgErr1196,83665
+NumErr1197,83695
+CntErr1198,83728
+SymErr1199,83767
+ExtErr1200,83800
+PairErr1201,83842
+AtomErr1202,83879
+LstErr1203,83911
+VarErr1204,83942
+DivErr1205,83977
+RenErr1206,84000
+MakeErr1207,84030
+ReentErr1208,84059
+YieldErr1209,84098
+MsgErr1210,84130
+BrkErr1211,84159
+OpenErr1212,84185
+CloseErr1213,84218
+PipeErr1214,84253
+ForkErr1215,84286
+WaitPidErr1216,84315
+BadFdErr1217,84345
+NoFdErr1218,84371
+EofErr1219,84403
+SuparErr1220,84432
+BadInput1221,84478
+BadDot1222,84512
+SelectErr1223,84545
+WrBytesErr1224,84582
+WrChildErr1225,84619
+WrSyncErr1226,84656
+WrJnlErr1227,84691
+WrLogErr1228,84728
+TruncErr1229,84761
+DbSyncErr1230,84803
+TrSyncErr1231,84842
+LockErr1232,84890
+DbfErr1233,84922
+JnlErr1234,84951
+IdErr1235,84980
+DbRdErr1236,85003
+DbWrErr1237,85033
+DbSizErr1238,85064
+TellErr1239,85095
+IpSocketErr1240,85127
+IpGetsocknameErr1241,85169
+IpV6onlyErr1242,85221
+IpReuseaddrErr1243,85268
+IpBindErr1244,85319
+IpListenErr1245,85357
+UdpOvflErr1246,85399
+UndefErr1247,85433
+DlErr1248,85462
./main.l,2242
Code4,51
@@ -420,114 +421,114 @@ sys/x86-64.linux.defs.l,1959
RetT25,285
RetE_E28,320
main33,402
-restart154,4013
-loadAllX_E162,4175
-giveupX180,4583
-execErrS187,4696
-iSignalCE192,4796
-allocC_A202,5079
-allocAE_A207,5188
-NoMemory211,5302
-heapAlloc217,5381
-sighandler0238,5885
-sighandlerX245,5962
-sighandlerE252,6039
-sig345,9371
-sigTerm357,9595
-sigChld368,9813
-tcSetC389,10321
-sigTermStop402,10588
-setRaw418,11081
-setCooked444,11880
-doRaw452,12047
-doAlarm474,12450
-doSigio490,12734
-doProtect510,13201
-doHeap520,13361
-doStack549,13985
-doAdr588,14828
-doEnv600,15046
-doTrail699,17756
-doUp767,19354
-doSys847,21069
-circE_YF875,21728
-equalAE_F907,22468
-compareAE_F1040,25677
-binSizeX_A1202,29153
-memberXY_FY1297,31763
-doQuit1315,32114
-evExprCE_E1333,32531
-evListE_E1481,36165
-sharedLibC_FA1534,37301
-doErrno1605,38945
-doNative1613,39109
-natBufACZ_CZ1817,44911
-natRetACE_CE1916,47396
-doStruct2065,52796
-fetchCharC_AC2108,53676
-cbl2143,54545
-cbl12176,55261
-cbl22180,55377
-cbl32184,55423
-cbl42188,55475
-cbl52192,55527
-cbl62196,55579
-cbl72200,55631
-cbl82204,55683
-cbl92208,55735
-cbl102212,55787
-cbl112216,55840
-cbl122220,55894
-cbl132224,55948
-cbl142228,56002
-cbl152232,56056
-cbl162236,56110
-cbl172240,56164
-cbl182244,56218
-cbl192248,56272
-cbl202252,56326
-cbl212256,56380
-cbl222260,56434
-cbl232264,56488
-cbl242268,56542
-doLisp2274,56625
-lisp2318,57651
-execE2364,58765
-runE_E2376,58920
-funqE_FE2388,59072
-evSymX_E2450,60495
-evSymY_E2453,60553
-evSymE_E2455,60595
-xSymE_E2457,60632
-evCntXY_FE2478,60997
-evCntEX_FE2480,61041
-xCntEX_FE2482,61080
-xCntCX_FC2491,61257
-xCntAX_FA2500,61434
-boxE_E2509,61611
-putStringB2529,62068
-begString2541,62282
-endString_E2552,62508
-doArgs2581,63165
-doNext2588,63279
-doArg2605,63595
-doRest2634,64237
-tmDateC_E2648,64484
-dateXYZ_E2658,64661
-doDate2719,66022
-tmTimeY_E2835,69633
-doTime2852,69966
-doUsec2956,72944
-doPwd2974,73361
-doCd2985,73616
-doCtty3010,74232
-doInfo3047,75166
-doFile3092,76261
-doDir3145,77497
-doCmd3215,79115
-doArgv3233,79574
-doOpt3336,82120
-doVersion3350,82451
+restart157,4141
+loadAllX_E165,4303
+giveupX183,4711
+execErrS190,4824
+iSignalCE195,4924
+allocC_A205,5207
+allocAE_A210,5316
+NoMemory214,5430
+heapAlloc220,5509
+sighandler0241,6013
+sighandlerX248,6090
+sighandlerE255,6167
+sig348,9499
+sigTerm360,9723
+sigChld371,9941
+tcSetC392,10449
+sigTermStop405,10716
+setRaw421,11209
+setCooked447,12008
+doRaw455,12175
+doAlarm477,12578
+doSigio493,12862
+doProtect513,13329
+doHeap523,13489
+doStack552,14113
+doAdr596,15163
+doEnv608,15381
+doTrail707,18091
+doUp775,19689
+doSys855,21404
+circE_YF883,22063
+equalAE_F915,22803
+compareAE_F1048,26012
+binSizeX_A1210,29488
+memberXY_FY1305,32098
+doQuit1323,32449
+evExprCE_E1341,32866
+evListE_E1489,36500
+sharedLibC_FA1542,37636
+doErrno1613,39280
+doNative1621,39444
+natBufACZ_CZ1825,45246
+natRetACE_CE1924,47731
+doStruct2073,53131
+fetchCharC_AC2116,54011
+cbl2151,54880
+cbl12184,55596
+cbl22188,55712
+cbl32192,55758
+cbl42196,55810
+cbl52200,55862
+cbl62204,55914
+cbl72208,55966
+cbl82212,56018
+cbl92216,56070
+cbl102220,56122
+cbl112224,56175
+cbl122228,56229
+cbl132232,56283
+cbl142236,56337
+cbl152240,56391
+cbl162244,56445
+cbl172248,56499
+cbl182252,56553
+cbl192256,56607
+cbl202260,56661
+cbl212264,56715
+cbl222268,56769
+cbl232272,56823
+cbl242276,56877
+doLisp2282,56960
+lisp2326,57986
+execE2372,59100
+runE_E2384,59255
+funqE_FE2396,59407
+evSymX_E2458,60830
+evSymY_E2461,60888
+evSymE_E2463,60930
+xSymE_E2465,60967
+evCntXY_FE2486,61332
+evCntEX_FE2488,61376
+xCntEX_FE2490,61415
+xCntCX_FC2499,61592
+xCntAX_FA2508,61769
+boxE_E2517,61946
+putStringB2537,62403
+begString2549,62617
+endString_E2560,62843
+doArgs2589,63500
+doNext2596,63614
+doArg2613,63930
+doRest2642,64572
+tmDateC_E2656,64819
+dateXYZ_E2666,64996
+doDate2727,66357
+tmTimeY_E2843,69968
+doTime2860,70301
+doUsec2964,73279
+doPwd2982,73696
+doCd2993,73951
+doCtty3018,74567
+doInfo3055,75501
+doFile3100,76596
+doDir3153,77832
+doCmd3223,79450
+doArgv3241,79909
+doOpt3344,82455
+doVersion3358,82786
./big.l,1059
zapZeroA_A6,106
@@ -997,46 +998,46 @@ sys/x86-64.linux.defs.l,1959
markE5,63
needC54,1336
gc65,1529
-doGc435,11224
-cons_A458,11745
-cons_C470,12009
-cons_E482,12273
-cons_X494,12537
-cons_Y506,12801
-cons_Z518,13065
-consA_A530,13329
-consC_A546,13652
-consE_A562,13961
-consX_A578,14270
-consA_C594,14579
-consC_C610,14888
-consE_C626,15211
-consA_E642,15520
-consC_E658,15829
-consE_E674,16138
-consX_E690,16461
-consA_X706,16770
-consE_X722,17079
-consY_X738,17388
-consA_Y754,17697
-consA_Z770,18006
-consAC_E786,18315
-consSymX_E804,18668
-boxNum_A824,19118
-boxNum_C836,19403
-boxNum_E848,19688
-boxNum_X860,19973
-boxNumA_A872,20258
-boxNumE_E886,20587
-consNumAC_A900,20916
-consNumAE_A918,21292
-consNumCA_C936,21668
-consNumCE_A954,22044
-consNumCE_C971,22411
-consNumCE_E989,22787
-consNumEA_A1006,23137
-consNumEA_E1023,23487
-consNumEC_E1041,23863
+doGc436,11229
+cons_A459,11750
+cons_C471,12014
+cons_E483,12278
+cons_X495,12542
+cons_Y507,12806
+cons_Z519,13070
+consA_A531,13334
+consC_A547,13657
+consE_A563,13966
+consX_A579,14275
+consA_C595,14584
+consC_C611,14893
+consE_C627,15216
+consA_E643,15525
+consC_E659,15834
+consE_E675,16143
+consX_E691,16466
+consA_X707,16775
+consE_X723,17084
+consY_X739,17393
+consA_Y755,17702
+consA_Z771,18011
+consAC_E787,18320
+consSymX_E805,18673
+boxNum_A825,19123
+boxNum_C837,19408
+boxNum_E849,19693
+boxNum_X861,19978
+boxNumA_A873,20263
+boxNumE_E887,20592
+consNumAC_A901,20921
+consNumAE_A919,21297
+consNumCA_C937,21673
+consNumCE_A955,22049
+consNumCE_C972,22416
+consNumCE_E990,22792
+consNumEA_A1007,23142
+consNumEA_E1024,23492
+consNumEC_E1042,23868
./flow.l,1632
redefMsgEC4,51
@@ -1105,25 +1106,25 @@ sys/x86-64.linux.defs.l,1959
throwErrZX2518,58492
doFinally2524,58583
doCo2548,59123
-resumeCoroutine2574,59960
-doYield2720,64803
-cutLocalCX2841,68288
-joinLocalCX2854,68518
-doBreak2865,68700
-brkLoadE_E2873,68852
-doE2928,70452
-doTrace2967,71218
-traceCY3039,73133
-doCall3067,73621
-doTick3154,75813
-doIpid3186,76810
-doOpid3202,77098
-doKill3218,77393
-doFork3241,77828
-forkLispX_FE3254,78049
-doBye3415,82609
-byeE3427,82781
-finishE3439,83092
+resumeCoroutine2573,59938
+doYield2722,65031
+cutLocalCX2843,68511
+joinLocalCX2856,68741
+doBreak2867,68923
+brkLoadE_E2875,69075
+doE2930,70675
+doTrace2969,71441
+traceCY3041,73356
+doCall3069,73844
+doTick3156,76036
+doIpid3188,77033
+doOpid3204,77321
+doKill3220,77616
+doFork3243,78051
+forkLispX_FE3256,78272
+doBye3417,82832
+byeE3429,83004
+finishE3441,83315
./subr.l,2147
doCar5,71