diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2017-07-31 05:44:39 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2017-07-31 05:44:39 -0700 |
commit | 7d2dfcb941a4954948bd99808676eae3456191c0 (patch) | |
tree | 00d8a8bc89c234efd942e73d91545ed6bc48e1ff | |
parent | ae6c40f3d231b9573a256693f354289c8900c25b (diff) | |
download | txr-7d2dfcb941a4954948bd99808676eae3456191c0.tar.gz txr-7d2dfcb941a4954948bd99808676eae3456191c0.tar.bz2 txr-7d2dfcb941a4954948bd99808676eae3456191c0.zip |
Evaluate doloop forms in an implicit tagbody.
This eliminates one incompatibility between doloop
and ANSI CL do.
* share/txr/stdlib/doloop.tl (sys:expand-doloop): Wrap body in
tagbody form.
* txr.1: Documentation updated.
-rw-r--r-- | share/txr/stdlib/doloop.tl | 2 | ||||
-rw-r--r-- | txr.1 | 32 |
2 files changed, 22 insertions, 12 deletions
diff --git a/share/txr/stdlib/doloop.tl b/share/txr/stdlib/doloop.tl index 770b7b05..9c404855 100644 --- a/share/txr/stdlib/doloop.tl +++ b/share/txr/stdlib/doloop.tl @@ -45,7 +45,7 @@ ((,(if pllel 'pset 'set) ,*(mappend (ado unless (eq @1 @3) ^(,@1 ,@3)) xvars))) - ,*body))) + (tagbody ,*body)))) (defmacro doloop (:form f vars cexp . body) (sys:expand-doloop f vars cexp body)) @@ -15370,7 +15370,7 @@ operator to be used to terminate at any point. .mets ({doloop | doloop*} .mets \ \ ({ sym | >> ( sym >> [ init-form <> [ step-form ])}*) .mets \ \ >> ([ test-form << result-form *]) -.mets \ \ << body-form *) +.mets \ \ << tagbody-form *) .syne .desc The @@ -15388,6 +15388,19 @@ Each element in the form must be a symbol suitable for use as a variable name. The +.metn tagbody-form -s +are placed into an implicit +.codn tagbody , +meaning that a +.meta tagbody-form +which is an integer, character or symbol is interpreted +as a +.code tagbody +label which may be the target of a control transfer via the +.code go +macro. + +The .code doloop macro binds each .meta sym @@ -15416,10 +15429,13 @@ If .meta test-form produces a true value, then .metn result-form -s -are not evaluated. Instead, the -.metn body-form -s -are evaluated. Next, the loop variables are updated by assigning -to each +are not evaluated. Instead, the implicit +.code tagbody +comprised of the +.metn tagbody-form -s +is evaluated. +If that evaluation terminates normally, the loop variables are +then updated by assigning to each .meta sym the value of .metn step-form . @@ -15523,12 +15539,6 @@ the ANSI CL macros do not feature the automatic replication of into the .meta step-form position. -Lastly, -.code doloop -and -.code doloop* -do not implement an implicit -.codn tagbody . .coNP Operators @ block and @ block* .synb |