commit 61095adc010303389ca8d3a95067a7ae1212b11c
parent 07981be86c04fb29aee9426ce2341b366d7a105e
Author: Alexander Burger <abu@software-lab.de>
Date:   Thu, 23 May 2013 11:00:05 +0200
Close files upon explicit coroutine stop
Diffstat:
| M | lib/map | | | 104 | ++++++++++++++++++++++++++++++++++++++++---------------------------------------- | 
| M | src64/flow.l | | | 19 | ++++++++++++++++++- | 
| M | src64/io.l | | | 57 | ++++++++++++++++++++++++--------------------------------- | 
| M | src64/tags | | | 290 | ++++++++++++++++++++++++++++++++++++++++--------------------------------------- | 
4 files changed, 240 insertions(+), 230 deletions(-)
diff --git a/lib/map b/lib/map
@@ -1,5 +1,5 @@
-! (2867 . "@src64/flow.l")
-$ (2969 . "@src64/flow.l")
+! (2884 . "@src64/flow.l")
+$ (2986 . "@src64/flow.l")
 % (2572 . "@src64/big.l")
 & (2807 . "@src64/big.l")
 * (2389 . "@src64/big.l")
@@ -29,7 +29,7 @@ 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")
+any (3990 . "@src64/io.l")
 append (1339 . "@src64/subr.l")
 apply (713 . "@src64/apply.l")
 arg (2613 . "@src64/main.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 (3417 . "@src64/flow.l")
+bye (3434 . "@src64/flow.l")
 bytes (2973 . "@src64/subr.l")
 caaaar (271 . "@src64/subr.l")
 caaadr (288 . "@src64/subr.l")
@@ -62,7 +62,7 @@ caddar (409 . "@src64/subr.l")
 cadddr (435 . "@src64/subr.l")
 caddr (156 . "@src64/subr.l")
 cadr (45 . "@src64/subr.l")
-call (3069 . "@src64/flow.l")
+call (3086 . "@src64/flow.l")
 car (5 . "@src64/subr.l")
 case (1965 . "@src64/flow.l")
 catch (2467 . "@src64/flow.l")
@@ -83,12 +83,12 @@ cdddr (245 . "@src64/subr.l")
 cddr (79 . "@src64/subr.l")
 cdr (17 . "@src64/subr.l")
 chain (1142 . "@src64/subr.l")
-char (3481 . "@src64/io.l")
+char (3472 . "@src64/io.l")
 chop (1228 . "@src64/sym.l")
 circ (817 . "@src64/subr.l")
 circ? (2403 . "@src64/subr.l")
 clip (1800 . "@src64/subr.l")
-close (4412 . "@src64/io.l")
+close (4403 . "@src64/io.l")
 cmd (3223 . "@src64/main.l")
 cnt (1413 . "@src64/apply.l")
 co (2548 . "@src64/flow.l")
@@ -99,7 +99,7 @@ cond (1919 . "@src64/flow.l")
 connect (227 . "@src64/net.l")
 cons (747 . "@src64/subr.l")
 copy (1226 . "@src64/subr.l")
-ctl (4285 . "@src64/io.l")
+ctl (4276 . "@src64/io.l")
 ctty (3018 . "@src64/main.l")
 cut (1931 . "@src64/sym.l")
 date (2727 . "@src64/main.l")
@@ -115,15 +115,15 @@ diff (2590 . "@src64/subr.l")
 dir (3153 . "@src64/main.l")
 dm (545 . "@src64/flow.l")
 do (2141 . "@src64/flow.l")
-e (2930 . "@src64/flow.l")
-echo (4443 . "@src64/io.l")
+e (2947 . "@src64/flow.l")
+echo (4434 . "@src64/io.l")
 env (608 . "@src64/main.l")
-eof (3558 . "@src64/io.l")
-eol (3549 . "@src64/io.l")
-err (4265 . "@src64/io.l")
+eof (3549 . "@src64/io.l")
+eol (3540 . "@src64/io.l")
+err (4256 . "@src64/io.l")
 errno (1613 . "@src64/main.l")
 eval (175 . "@src64/flow.l")
-ext (5177 . "@src64/io.l")
+ext (5168 . "@src64/io.l")
 ext? (1166 . "@src64/sym.l")
 extern (1032 . "@src64/sym.l")
 extra (1269 . "@src64/flow.l")
@@ -138,13 +138,13 @@ find (1322 . "@src64/apply.l")
 fish (1613 . "@src64/apply.l")
 flg? (2446 . "@src64/subr.l")
 flip (1700 . "@src64/subr.l")
-flush (5152 . "@src64/io.l")
+flush (5143 . "@src64/io.l")
 fold (3521 . "@src64/sym.l")
 for (2230 . "@src64/flow.l")
-fork (3243 . "@src64/flow.l")
+fork (3260 . "@src64/flow.l")
 format (2089 . "@src64/big.l")
 free (1960 . "@src64/db.l")
-from (3577 . "@src64/io.l")
+from (3568 . "@src64/io.l")
 full (1076 . "@src64/subr.l")
 fun? (750 . "@src64/sym.l")
 gc (436 . "@src64/gc.l")
@@ -157,38 +157,38 @@ gt0 (2718 . "@src64/big.l")
 hash (2976 . "@src64/big.l")
 head (1821 . "@src64/subr.l")
 heap (523 . "@src64/main.l")
-hear (3262 . "@src64/io.l")
+hear (3253 . "@src64/io.l")
 host (193 . "@src64/net.l")
 id (1028 . "@src64/db.l")
 idx (2171 . "@src64/sym.l")
 if (1805 . "@src64/flow.l")
 if2 (1824 . "@src64/flow.l")
 ifn (1865 . "@src64/flow.l")
-in (4225 . "@src64/io.l")
+in (4216 . "@src64/io.l")
 inc (2256 . "@src64/big.l")
 index (2638 . "@src64/subr.l")
 info (3055 . "@src64/main.l")
 intern (1007 . "@src64/sym.l")
-ipid (3188 . "@src64/flow.l")
+ipid (3205 . "@src64/flow.l")
 isa (967 . "@src64/flow.l")
 job (1429 . "@src64/flow.l")
 journal (971 . "@src64/db.l")
-key (3410 . "@src64/io.l")
-kill (3220 . "@src64/flow.l")
+key (3401 . "@src64/io.l")
+kill (3237 . "@src64/flow.l")
 last (2045 . "@src64/subr.l")
 le0 (2693 . "@src64/big.l")
 length (2742 . "@src64/subr.l")
 let (1479 . "@src64/flow.l")
 let? (1540 . "@src64/flow.l")
 lieu (1157 . "@src64/db.l")
-line (3733 . "@src64/io.l")
-lines (3886 . "@src64/io.l")
+line (3724 . "@src64/io.l")
+lines (3877 . "@src64/io.l")
 link (1173 . "@src64/subr.l")
 lisp (2282 . "@src64/main.l")
 list (888 . "@src64/subr.l")
 listen (160 . "@src64/net.l")
 lit (150 . "@src64/flow.l")
-load (4202 . "@src64/io.l")
+load (4193 . "@src64/io.l")
 lock (1185 . "@src64/db.l")
 loop (2173 . "@src64/flow.l")
 low? (3387 . "@src64/sym.l")
@@ -238,30 +238,30 @@ offset (2678 . "@src64/subr.l")
 on (1717 . "@src64/sym.l")
 onOff (1747 . "@src64/sym.l")
 one (1780 . "@src64/sym.l")
-open (4369 . "@src64/io.l")
-opid (3204 . "@src64/flow.l")
+open (4360 . "@src64/io.l")
+opid (3221 . "@src64/flow.l")
 opt (3344 . "@src64/main.l")
 or (1640 . "@src64/flow.l")
-out (4245 . "@src64/io.l")
+out (4236 . "@src64/io.l")
 pack (1279 . "@src64/sym.l")
 pair (2395 . "@src64/subr.l")
 pass (754 . "@src64/apply.l")
 pat? (736 . "@src64/sym.l")
-path (1251 . "@src64/io.l")
-peek (3465 . "@src64/io.l")
+path (1270 . "@src64/io.l")
+peek (3456 . "@src64/io.l")
 pick (1369 . "@src64/apply.l")
-pipe (4306 . "@src64/io.l")
-poll (3354 . "@src64/io.l")
+pipe (4297 . "@src64/io.l")
+poll (3345 . "@src64/io.l")
 pool (651 . "@src64/db.l")
 pop (1907 . "@src64/sym.l")
 port (5 . "@src64/net.l")
-pr (5260 . "@src64/io.l")
+pr (5251 . "@src64/io.l")
 pre? (1545 . "@src64/sym.l")
-prin (5076 . "@src64/io.l")
-prinl (5090 . "@src64/io.l")
-print (5116 . "@src64/io.l")
-println (5147 . "@src64/io.l")
-printsp (5132 . "@src64/io.l")
+prin (5067 . "@src64/io.l")
+prinl (5081 . "@src64/io.l")
+print (5107 . "@src64/io.l")
+println (5138 . "@src64/io.l")
+printsp (5123 . "@src64/io.l")
 prior (2714 . "@src64/subr.l")
 prog (1760 . "@src64/flow.l")
 prog1 (1768 . "@src64/flow.l")
@@ -281,12 +281,12 @@ rand (3003 . "@src64/big.l")
 range (998 . "@src64/subr.l")
 rank (3049 . "@src64/subr.l")
 raw (455 . "@src64/main.l")
-rd (5194 . "@src64/io.l")
-read (2674 . "@src64/io.l")
+rd (5185 . "@src64/io.l")
+read (2665 . "@src64/io.l")
 replace (1500 . "@src64/subr.l")
 rest (2642 . "@src64/main.l")
 reverse (1679 . "@src64/subr.l")
-rewind (5160 . "@src64/io.l")
+rewind (5151 . "@src64/io.l")
 rollback (1803 . "@src64/db.l")
 rot (849 . "@src64/subr.l")
 run (306 . "@src64/flow.l")
@@ -299,33 +299,33 @@ set (1616 . "@src64/sym.l")
 setq (1649 . "@src64/sym.l")
 sigio (493 . "@src64/main.l")
 size (2809 . "@src64/subr.l")
-skip (3535 . "@src64/io.l")
+skip (3526 . "@src64/io.l")
 sort (3978 . "@src64/subr.l")
 sp? (727 . "@src64/sym.l")
-space (5094 . "@src64/io.l")
+space (5085 . "@src64/io.l")
 split (1593 . "@src64/subr.l")
 stack (552 . "@src64/main.l")
 state (2009 . "@src64/flow.l")
 stem (1990 . "@src64/subr.l")
-str (4053 . "@src64/io.l")
+str (4044 . "@src64/io.l")
 str? (1145 . "@src64/sym.l")
 strip (1577 . "@src64/subr.l")
 struct (2073 . "@src64/main.l")
 sub? (1578 . "@src64/sym.l")
 sum (1460 . "@src64/apply.l")
 super (1225 . "@src64/flow.l")
-sym (4039 . "@src64/io.l")
+sym (4030 . "@src64/io.l")
 sym? (2435 . "@src64/subr.l")
 symbols (942 . "@src64/sym.l")
-sync (3222 . "@src64/io.l")
+sync (3213 . "@src64/io.l")
 sys (855 . "@src64/main.l")
 t (1751 . "@src64/flow.l")
 tail (1912 . "@src64/subr.l")
-tell (3294 . "@src64/io.l")
+tell (3285 . "@src64/io.l")
 text (1407 . "@src64/sym.l")
 throw (2493 . "@src64/flow.l")
-tick (3156 . "@src64/flow.l")
-till (3644 . "@src64/io.l")
+tick (3173 . "@src64/flow.l")
+till (3635 . "@src64/io.l")
 time (2860 . "@src64/main.l")
 touch (1181 . "@src64/sym.l")
 trail (707 . "@src64/main.l")
@@ -343,16 +343,16 @@ use (1573 . "@src64/flow.l")
 usec (2964 . "@src64/main.l")
 val (1597 . "@src64/sym.l")
 version (3358 . "@src64/main.l")
-wait (3184 . "@src64/io.l")
+wait (3175 . "@src64/io.l")
 when (1884 . "@src64/flow.l")
 while (2061 . "@src64/flow.l")
 wipe (3262 . "@src64/sym.l")
 with (1332 . "@src64/flow.l")
-wr (5277 . "@src64/io.l")
+wr (5268 . "@src64/io.l")
 xchg (1672 . "@src64/sym.l")
 xor (1701 . "@src64/flow.l")
 x| (2887 . "@src64/big.l")
-yield (2722 . "@src64/flow.l")
+yield (2726 . "@src64/flow.l")
 yoke (1197 . "@src64/subr.l")
 zap (1195 . "@src64/sym.l")
 zero (1765 . "@src64/sym.l")
diff --git a/src64/flow.l b/src64/flow.l
@@ -1,4 +1,4 @@
-# 19may13abu
+# 23may13abu
 # (c) Software Lab. Alexander Burger
 
 (code 'redefMsgEC)
@@ -2704,6 +2704,10 @@
                if z  # Stopped last coroutine?
                   ld (StkLimit) 0  # Yes: Clear stack limit
                end
+               ld C (X (pack -II "-(EnvMid-EnvInFrames)"))  # Open input frames
+               call closeCoFilesC
+               ld C (X (pack -II "-(EnvMid-EnvOutFrames)"))  # Open output frames
+               call closeCoFilesC
                ld E TSym  # Return T
             end
             pop X
@@ -2863,6 +2867,19 @@
       ld X (X)  # Next frame
    loop
 
+(code 'closeCoFilesC 0)
+   do
+      null C
+   while nz
+      null (C II)  # 'pid'?
+      if nz  # Yes
+         cc close((C I))  # Close 'fd'
+         call waitFileC  # Wait for pipe process if necessary
+      end
+      ld C (C)
+   loop
+   ret
+
 # (! . exe) -> any
 (code 'doBreak 2)
    ld E (E CDR)  # exe
diff --git a/src64/io.l b/src64/io.l
@@ -1,4 +1,4 @@
-# 06feb13abu
+# 23may13abu
 # (c) Software Lab. Alexander Burger
 
 # Close file descriptor
@@ -139,7 +139,7 @@
    ret
 
 # Close input file
-(code 'closeInFileA)
+(code 'closeInFileA 0)
    shl A 3  # Vector index
    cmp A (InFDs)  # 'fd' < 'InFDs'?
    if lt  # Yes
@@ -161,7 +161,7 @@
    ret
 
 # Close output file
-(code 'closeOutFileA)
+(code 'closeOutFileA 0)
    shl A 3  # Vector index
    cmp A (OutFDs)  # 'fd' < 'OutFDs'?
    if lt  # Yes
@@ -181,6 +181,25 @@
    end
    ret
 
+# Wait for pipe process if necessary
+(code 'waitFileC 0)
+   cmp (C II) 1  # 'pid' > 1?
+   if gt  # Yes
+      do
+         cc waitpid((C II) 0 0)  # Wait for pipe process
+         nul4  # OK?
+      while s  # No
+         call errno_A
+         cmp A EINTR  # Interrupted?
+         jne closeErrX
+         null (Signal)  # Signal?
+         if nz  # Yes
+            call sighandler0
+         end
+      loop
+   end
+   ret
+
 # Interruptible read
 (code 'slowZ_F)
    ld (Z I) 0  # Clear 'ix'
@@ -1874,21 +1893,7 @@
       cc close((C I))  # Close 'fd'
       ld A (C I)  # Close input file
       call closeInFileA
-      cmp (C II) 1  # 'pid' > 1?
-      if gt  # Yes
-         do
-            cc waitpid((C II) 0 0)  # Wait for pipe process
-            nul4  # OK?
-         while s  # No
-            call errno_A
-            cmp A EINTR  # Interrupted?
-            jne closeErrX
-            null (Signal)  # Signal?
-            if nz  # Yes
-               call sighandler0
-            end
-         loop
-      end
+      call waitFileC  # Wait for pipe process if necessary
    else
       ld A (InFile)  # Current InFile?
       null A
@@ -1927,21 +1932,7 @@
       cc close((C I))  # Close 'fd'
       ld A (C I)  # Close input file
       call closeOutFileA
-      cmp (C II) 1  # 'pid' > 1?
-      if gt  # Yes
-         do
-            cc waitpid((C II) 0 0)  # Wait for pipe process
-            nul4  # OK?
-         while s  # No
-            call errno_A
-            cmp A EINTR  # Interrupted?
-            jne closeErrX
-            null (Signal)  # Signal?
-            if nz  # Yes
-               call sighandler0
-            end
-         loop
-      end
+      call waitFileC  # Wait for pipe process if necessary
    end
    ld (PutB) (C III)  # Retrieve 'put'
    ld C (C)  # Get link
diff --git a/src64/tags b/src64/tags
@@ -585,7 +585,7 @@ sys/x86-64.linux.defs.l,1959
 doHash2976,70791
 doRand3003,71394
 
-./io.l,2921
+./io.l,2942
 closeAX5,75
 unLockFileAC15,253
 wrLockFileC23,487
@@ -598,130 +598,131 @@ sys/x86-64.linux.defs.l,1959
 initInFileCA_A67,1523
 initOutFileA_A106,2476
 closeInFileA142,3345
-closeOutFileA164,3830
-slowZ_F185,4281
-slowNbC_FA207,4748
-rdBytesCEX_F247,5696
-rdBytesNbCEX_F268,6160
-wrBytesCEX_F317,7454
-clsChildY347,8254
-wrChildCXY358,8506
-flushA_F397,9611
-flushAll417,10021
-stdinByte_A431,10332
-getBinaryZ_FB453,10688
-byteNumBCX_CX469,11058
-binReadZ_FE525,12587
-prByteCEXY686,16842
-prCntCE709,17368
-prTellEZ728,17735
-prE734,17890
-binPrintEZ736,17959
-putTellBZ1002,25715
-tellBegZ_Z1010,25905
-tellEndAZ1017,26057
-unsync1064,27164
-rdHear_FE1081,27585
-symByteCX_FACX1094,27931
-symCharCX_FACX1115,28370
-bufStringE_SZ1148,29322
-pathStringE_SZ1178,29976
-doPath1251,31929
-charSymACX_CX1263,32199
-byteSymBCX_CX1298,33123
-currFdX_C1340,34239
-currFd_C1344,34351
-rdOpenEXY1361,34724
-wrOpenEXY1502,39130
-erOpenEXY1635,43305
-ctOpenEXY1677,44324
-getStdin_A1731,45738
-getParse_A1802,47578
-pushInFilesY1825,48048
-pushOutFilesY1849,48588
-pushErrFilesY1860,48883
-pushCtlFilesY1865,48987
-popInFiles1870,49091
-popOutFiles1921,50312
-popErrFiles1961,51337
-popCtlFiles1968,51540
-getChar_A1982,51931
-skipC_A2014,52802
-testEscA_F2057,53723
-anonymousX_FE2091,54476
-rdAtomBY_E2124,55339
-rdList_E2176,56766
-readA_E2314,60298
-readC_E2498,64615
-tokenCE_E2528,65206
-doRead2674,68743
-inReadyC_F2712,69583
-fdSetCL_X2724,69864
-fdRdSetCZL2736,70098
-fdWrSetCZL2743,70240
-rdSetCL_F2750,70389
-wrSetCL_F2755,70505
-rdSetRdyCL_F2760,70628
-waitFdCEX_A2782,71089
-doWait3184,84515
-doSync3222,85238
-doHear3262,86178
-doTell3294,86872
-fdSetC_Y3343,87960
-doPoll3354,88194
-doKey3410,89565
-doPeek3465,91004
-doChar3481,91282
-doSkip3535,92227
-doEol3549,92574
-doEof3558,92740
-doFrom3577,93097
-doTill3644,94766
-eolA_F3718,96715
-doLine3733,97019
-doLines3886,101059
-parseBCE_E3927,101960
-doAny3999,103615
-doSym4039,104553
-doStr4053,104812
-loadBEX_E4106,105938
-doLoad4202,108288
-doIn4225,108700
-doOut4245,109030
-doErr4265,109364
-doCtl4285,109699
-doPipe4306,110054
-doOpen4369,111600
-doClose4412,112580
-doEcho4443,113171
-putStdoutB4656,118695
-newline4699,119677
-space4703,119719
-outNumE4708,119783
-outWordA4715,119911
-prExtNmX4727,120149
-outOctA4735,120343
-outAoA4748,120611
-outStringS4760,120859
-outStringC4762,120929
-outNameE4772,121068
-prNameX4780,121185
-printE_E4790,121340
-printE4799,121476
-prinE_E5012,127092
-prinE5021,127228
-doPrin5076,128490
-doPrinl5090,128760
-doSpace5094,128828
-doPrint5116,129227
-doPrintsp5132,129522
-doPrintln5147,129811
-doFlush5152,129899
-doRewind5160,130036
-doExt5177,130426
-doRd5194,130765
-doPr5260,132545
-doWr5277,132877
+closeOutFileA164,3832
+waitFileC185,4301
+slowZ_F204,4701
+slowNbC_FA226,5168
+rdBytesCEX_F266,6116
+rdBytesNbCEX_F287,6580
+wrBytesCEX_F336,7874
+clsChildY366,8674
+wrChildCXY377,8926
+flushA_F416,10031
+flushAll436,10441
+stdinByte_A450,10752
+getBinaryZ_FB472,11108
+byteNumBCX_CX488,11478
+binReadZ_FE544,13007
+prByteCEXY705,17262
+prCntCE728,17788
+prTellEZ747,18155
+prE753,18310
+binPrintEZ755,18379
+putTellBZ1021,26135
+tellBegZ_Z1029,26325
+tellEndAZ1036,26477
+unsync1083,27584
+rdHear_FE1100,28005
+symByteCX_FACX1113,28351
+symCharCX_FACX1134,28790
+bufStringE_SZ1167,29742
+pathStringE_SZ1197,30396
+doPath1270,32349
+charSymACX_CX1282,32619
+byteSymBCX_CX1317,33543
+currFdX_C1359,34659
+currFd_C1363,34771
+rdOpenEXY1380,35144
+wrOpenEXY1521,39550
+erOpenEXY1654,43725
+ctOpenEXY1696,44744
+getStdin_A1750,46158
+getParse_A1821,47998
+pushInFilesY1844,48468
+pushOutFilesY1868,49008
+pushErrFilesY1879,49303
+pushCtlFilesY1884,49407
+popInFiles1889,49511
+popOutFiles1926,50395
+popErrFiles1952,51083
+popCtlFiles1959,51286
+getChar_A1973,51677
+skipC_A2005,52548
+testEscA_F2048,53469
+anonymousX_FE2082,54222
+rdAtomBY_E2115,55085
+rdList_E2167,56512
+readA_E2305,60044
+readC_E2489,64361
+tokenCE_E2519,64952
+doRead2665,68489
+inReadyC_F2703,69329
+fdSetCL_X2715,69610
+fdRdSetCZL2727,69844
+fdWrSetCZL2734,69986
+rdSetCL_F2741,70135
+wrSetCL_F2746,70251
+rdSetRdyCL_F2751,70374
+waitFdCEX_A2773,70835
+doWait3175,84261
+doSync3213,84984
+doHear3253,85924
+doTell3285,86618
+fdSetC_Y3334,87706
+doPoll3345,87940
+doKey3401,89311
+doPeek3456,90750
+doChar3472,91028
+doSkip3526,91973
+doEol3540,92320
+doEof3549,92486
+doFrom3568,92843
+doTill3635,94512
+eolA_F3709,96461
+doLine3724,96765
+doLines3877,100805
+parseBCE_E3918,101706
+doAny3990,103361
+doSym4030,104299
+doStr4044,104558
+loadBEX_E4097,105684
+doLoad4193,108034
+doIn4216,108446
+doOut4236,108776
+doErr4256,109110
+doCtl4276,109445
+doPipe4297,109800
+doOpen4360,111346
+doClose4403,112326
+doEcho4434,112917
+putStdoutB4647,118441
+newline4690,119423
+space4694,119465
+outNumE4699,119529
+outWordA4706,119657
+prExtNmX4718,119895
+outOctA4726,120089
+outAoA4739,120357
+outStringS4751,120605
+outStringC4753,120675
+outNameE4763,120814
+prNameX4771,120931
+printE_E4781,121086
+printE4790,121222
+prinE_E5003,126838
+prinE5012,126974
+doPrin5067,128236
+doPrinl5081,128506
+doSpace5085,128574
+doPrint5107,128973
+doPrintsp5123,129268
+doPrintln5138,129557
+doFlush5143,129645
+doRewind5151,129782
+doExt5168,130172
+doRd5185,130511
+doPr5251,132291
+doWr5268,132623
 
 ./apply.l,445
 applyXYZ_E4,51
@@ -1039,7 +1040,7 @@ sys/x86-64.linux.defs.l,1959
 consNumEA_E1024,23492
 consNumEC_E1042,23868
 
-./flow.l,1632
+./flow.l,1658
 redefMsgEC4,51
 putSrcEC_E25,589
 redefineCE109,3406
@@ -1107,24 +1108,25 @@ sys/x86-64.linux.defs.l,1959
 doFinally2524,58583
 doCo2548,59123
 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
+doYield2726,65261
+cutLocalCX2847,68741
+joinLocalCX2860,68971
+closeCoFilesC2870,69134
+doBreak2884,69397
+brkLoadE_E2892,69549
+doE2947,71149
+doTrace2986,71915
+traceCY3058,73830
+doCall3086,74318
+doTick3173,76510
+doIpid3205,77507
+doOpid3221,77795
+doKill3237,78090
+doFork3260,78525
+forkLispX_FE3273,78746
+doBye3434,83306
+byeE3446,83478
+finishE3458,83789
 
 ./subr.l,2147
 doCar5,71