commit 099e01a3d7daa1c949ed243c5448581259b3fb12
parent 4341994fd4dfee4abee60c10afde5656f0929084
Author: Alexander Burger <abu@software-lab.de>
Date: Sat, 27 Oct 2012 12:00:04 +0200
Error frame handling in coroutines
Diffstat:
3 files changed, 38 insertions(+), 32 deletions(-)
diff --git a/lib/map b/lib/map
@@ -1,5 +1,5 @@
-! (2848 . "@src64/flow.l")
-$ (2950 . "@src64/flow.l")
+! (2854 . "@src64/flow.l")
+$ (2956 . "@src64/flow.l")
% (2572 . "@src64/big.l")
& (2807 . "@src64/big.l")
* (2389 . "@src64/big.l")
@@ -46,7 +46,7 @@ bool (1713 . "@src64/flow.l")
box (824 . "@src64/flow.l")
box? (1122 . "@src64/sym.l")
by (1669 . "@src64/apply.l")
-bye (3427 . "@src64/flow.l")
+bye (3433 . "@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 (3079 . "@src64/flow.l")
+call (3085 . "@src64/flow.l")
car (5 . "@src64/subr.l")
case (1954 . "@src64/flow.l")
catch (2456 . "@src64/flow.l")
@@ -114,7 +114,7 @@ diff (2589 . "@src64/subr.l")
dir (2903 . "@src64/main.l")
dm (545 . "@src64/flow.l")
do (2130 . "@src64/flow.l")
-e (2911 . "@src64/flow.l")
+e (2917 . "@src64/flow.l")
echo (4409 . "@src64/io.l")
env (599 . "@src64/main.l")
eof (3524 . "@src64/io.l")
@@ -140,7 +140,7 @@ flip (1699 . "@src64/subr.l")
flush (5118 . "@src64/io.l")
fold (3512 . "@src64/sym.l")
for (2219 . "@src64/flow.l")
-fork (3253 . "@src64/flow.l")
+fork (3259 . "@src64/flow.l")
format (2089 . "@src64/big.l")
free (2055 . "@src64/db.l")
from (3543 . "@src64/io.l")
@@ -168,12 +168,12 @@ inc (2256 . "@src64/big.l")
index (2637 . "@src64/subr.l")
info (2805 . "@src64/main.l")
intern (998 . "@src64/sym.l")
-ipid (3198 . "@src64/flow.l")
+ipid (3204 . "@src64/flow.l")
isa (961 . "@src64/flow.l")
job (1418 . "@src64/flow.l")
journal (971 . "@src64/db.l")
key (3376 . "@src64/io.l")
-kill (3230 . "@src64/flow.l")
+kill (3236 . "@src64/flow.l")
last (2044 . "@src64/subr.l")
le0 (2693 . "@src64/big.l")
length (2741 . "@src64/subr.l")
@@ -238,7 +238,7 @@ on (1708 . "@src64/sym.l")
onOff (1738 . "@src64/sym.l")
one (1771 . "@src64/sym.l")
open (4335 . "@src64/io.l")
-opid (3214 . "@src64/flow.l")
+opid (3220 . "@src64/flow.l")
opt (3094 . "@src64/main.l")
or (1629 . "@src64/flow.l")
out (4211 . "@src64/io.l")
@@ -317,13 +317,13 @@ sym (4005 . "@src64/io.l")
sym? (2434 . "@src64/subr.l")
symbols (942 . "@src64/sym.l")
sync (3188 . "@src64/io.l")
-sys (3050 . "@src64/flow.l")
+sys (3056 . "@src64/flow.l")
t (1740 . "@src64/flow.l")
tail (1911 . "@src64/subr.l")
tell (3260 . "@src64/io.l")
text (1398 . "@src64/sym.l")
throw (2482 . "@src64/flow.l")
-tick (3166 . "@src64/flow.l")
+tick (3172 . "@src64/flow.l")
till (3610 . "@src64/io.l")
time (2615 . "@src64/main.l")
touch (1172 . "@src64/sym.l")
@@ -350,7 +350,7 @@ wr (5243 . "@src64/io.l")
xchg (1663 . "@src64/sym.l")
xor (1690 . "@src64/flow.l")
x| (2887 . "@src64/big.l")
-yield (2706 . "@src64/flow.l")
+yield (2709 . "@src64/flow.l")
yoke (1196 . "@src64/subr.l")
zap (1186 . "@src64/sym.l")
zero (1756 . "@src64/sym.l")
diff --git a/src64/flow.l b/src64/flow.l
@@ -1,4 +1,4 @@
-# 02oct12abu
+# 27oct12abu
# (c) Software Lab. Alexander Burger
(code 'redefMsgEC)
@@ -2594,6 +2594,9 @@
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
@@ -2771,6 +2774,9 @@
ld X EnvCtlFrames # Pointer to control frames
ld C (Z (pack III "+(EnvCtlFrames-EnvCo)")) # Local control frames
call cutLocalCX # Cut off locals
+ ld X EnvErrFrames # Pointer to error frames
+ ld C (Z (pack III "+(EnvErrFrames-EnvCo)")) # Local error frames
+ call cutLocalCX # Cut off locals
ld X EnvOutFrames # Pointer to output frames
ld C (Z (pack III "+(EnvOutFrames-EnvCo)")) # Local output frames
call cutLocalCX # Cut off locals
diff --git a/src64/tags b/src64/tags
@@ -438,10 +438,10 @@ boxNum_C gc.l 836
boxNum_E gc.l 848
boxNum_X gc.l 860
brkErrX err.l 500
-brkLoadE_E flow.l 2856
+brkLoadE_E flow.l 2862
bufAoAC_C db.l 956
bufStringE_SZ io.l 1143
-byeE flow.l 3439
+byeE flow.l 3445
byteNumBCX_CX io.l 464
byteSymBCX_CX io.l 1292
caseDataA_AC sym.l 3366
@@ -531,7 +531,7 @@ cons_Z gc.l 518
ctOpenEXY io.l 1671
currFdX_C io.l 1334
currFd_C io.l 1338
-cutLocalCX flow.l 2824
+cutLocalCX flow.l 2830
dateXYZ_E main.l 2421
dbAEX db.l 1331
dbFetchEX db.l 1319
@@ -579,9 +579,9 @@ doBitXor big.l 2887
doBool flow.l 1713
doBox flow.l 824
doBoxQ sym.l 1122
-doBreak flow.l 2848
+doBreak flow.l 2854
doBy apply.l 1669
-doBye flow.l 3427
+doBye flow.l 3433
doCaaaar subr.l 271
doCaaadr subr.l 288
doCaaar subr.l 99
@@ -596,7 +596,7 @@ doCaddar subr.l 409
doCadddr subr.l 435
doCaddr subr.l 156
doCadr subr.l 45
-doCall flow.l 3079
+doCall flow.l 3085
doCar subr.l 5
doCase flow.l 1954
doCatch flow.l 2456
@@ -651,7 +651,7 @@ doDir main.l 2903
doDiv big.l 2513
doDm flow.l 545
doDo flow.l 2130
-doE flow.l 2911
+doE flow.l 2917
doEcho io.l 4409
doEnv main.l 599
doEof io.l 3524
@@ -681,7 +681,7 @@ doFlip subr.l 1699
doFlush io.l 5118
doFold sym.l 3512
doFor flow.l 2219
-doFork flow.l 3253
+doFork flow.l 3259
doFormat big.l 2089
doFree db.l 2055
doFrom io.l 3543
@@ -712,12 +712,12 @@ doInc big.l 2256
doIndex subr.l 2637
doInfo main.l 2805
doIntern sym.l 998
-doIpid flow.l 3198
+doIpid flow.l 3204
doIsa flow.l 961
doJob flow.l 1418
doJournal db.l 971
doKey io.l 3376
-doKill flow.l 3230
+doKill flow.l 3236
doLast subr.l 2044
doLe subr.l 2237
doLe0 big.l 2693
@@ -787,7 +787,7 @@ doOn sym.l 1708
doOnOff sym.l 1738
doOne sym.l 1771
doOpen io.l 4335
-doOpid flow.l 3214
+doOpid flow.l 3220
doOpt main.l 3094
doOr flow.l 1629
doOut io.l 4211
@@ -872,17 +872,17 @@ doSym io.l 4005
doSymQ subr.l 2434
doSymbols sym.l 942
doSync io.l 3188
-doSys flow.l 3050
+doSys flow.l 3056
doT flow.l 1740
doTail subr.l 1911
doTell io.l 3260
doText sym.l 1398
doThrow flow.l 2482
-doTick flow.l 3166
+doTick flow.l 3172
doTill io.l 3610
doTime main.l 2615
doTouch sym.l 1172
-doTrace flow.l 2950
+doTrace flow.l 2956
doTrim subr.l 1759
doTry flow.l 1168
doType flow.l 914
@@ -905,7 +905,7 @@ doWith flow.l 1321
doWr io.l 5243
doXchg sym.l 1663
doXor flow.l 1690
-doYield flow.l 2706
+doYield flow.l 2709
doYoke subr.l 1196
doZap sym.l 1186
doZero sym.l 1756
@@ -941,7 +941,7 @@ fileObjE_AC db.l 237
fileObjX_AC db.l 211
fillE_FE subr.l 3261
findSymX_E sym.l 257
-finishE flow.l 3451
+finishE flow.l 3457
firstByteA_B sym.l 673
firstCharE_A sym.l 688
fishAXY apply.l 1640
@@ -952,7 +952,7 @@ fmtNumAE_E big.l 1797
fmtScaleCX_CX big.l 2061
fmtWordACX_CX big.l 2046
forkErrX err.l 521
-forkLispX_FE flow.l 3266
+forkLispX_FE flow.l 3272
fsyncDB db.l 932
funqE_FE main.l 2153
gc gc.l 65
@@ -995,7 +995,7 @@ isLifeE_F db.l 525
isaCE_F flow.l 1012
jnlErrX err.l 624
jnlFileno_A db.l 344
-joinLocalCX flow.l 2837
+joinLocalCX flow.l 2843
lisp main.l 2083
loadAllX_E main.l 162
loadBEX_E io.l 4072
@@ -1178,7 +1178,7 @@ tmDateC_E main.l 2411
tmTimeY_E main.l 2598
tokenCE_E io.l 2522
trSyncErrX err.l 608
-traceCY flow.l 3022
+traceCY flow.l 3028
trimE_E subr.l 1769
truncErrX err.l 598
truncLog db.l 947