summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--share/txr/stdlib/struct.tl8
-rw-r--r--txr.119
2 files changed, 24 insertions, 3 deletions
diff --git a/share/txr/stdlib/struct.tl b/share/txr/stdlib/struct.tl
index 24bccbe5..3958692c 100644
--- a/share/txr/stdlib/struct.tl
+++ b/share/txr/stdlib/struct.tl
@@ -46,9 +46,13 @@
"~s: method ~s needs \
\ at least one parameter"
'defstruct name))
- ^(:static ,name (lambda ,args ,*body)))
+ ^(:static ,name
+ (lambda ,args
+ (block ,name ,*body))))
(:function ^(:static ,name
- (lambda ,args ,*body)))
+ (lambda ,args
+ (block ,name
+ ,*body))))
((:static :instance)
(when body
(sys:bad-slot-syntax slot))
diff --git a/txr.1 b/txr.1
index b9781641..46899907 100644
--- a/txr.1
+++ b/txr.1
@@ -17807,7 +17807,16 @@ There must be at least one
When the function is invoked as a method, as intended,
the leftmost
.meta param
-receives the structure instance. Methods are invoked
+receives the structure instance.
+The
+.metn body-form -s
+are evaluated in a context in which a block named
+.meta name
+is visible. Consequently,
+.code return-from
+may be used to terminate the execution of a method
+and return a value.
+Methods are invoked
using the
.code instance.(name arg ...)
syntax, which implicitly inserts the instance into the argument list.
@@ -17830,6 +17839,14 @@ only in one respect: there may be zero
parameters. A structure function defined this way is
intended to be used as a utility function which doesn't
receive the structure instance as an argument.
+The
+.metn body-form -s
+are evaluated in a context in which a block named
+.meta name
+is visible. Consequently,
+.code return-from
+may be used to terminate the execution of the function
+and return a value.
Such functions are called using the
.code instance.[name arg ...]
syntax which doesn't insert the instance name into