# HG changeset patch # User Steve Losh # Date 1471727024 0 # Node ID 8e950d7312af822f355af6a459ebbff7b9190824 # Parent 70f3c369fedb0c8501c7dfd4ca80ec8b736acf66 Fix modify macros to comply with the spec They happened to work in SBCL before, but according to the spec `define-modify-macro` takes only a symbol as the function argument, not a lambda or anything else. diff -r 70f3c369fedb -r 8e950d7312af losh.lisp --- a/losh.lisp Sat Aug 20 13:25:22 2016 +0000 +++ b/losh.lisp Sat Aug 20 21:03:44 2016 +0000 @@ -280,17 +280,20 @@ (define-modify-macro mulf (factor) * "Multiply `place` by `factor` in-place.") -(define-modify-macro divf (&optional divisor) - (lambda (value divisor) - (if divisor - (/ value divisor) - (/ value))) + +(defun %divf (value &optional divisor) + (if divisor + (/ value divisor) + (/ value))) + +(define-modify-macro divf (&optional divisor) %divf "Divide `place` by `divisor` in-place. If `divisor` is not given, `place` will be set to `(/ 1 place)`. ") + (define-modify-macro modf (divisor) mod "Modulo `place` by `divisor` in-place.") @@ -304,11 +307,13 @@ "Negate the value of `place`.") -(define-modify-macro %callf (function) - (lambda (value function) - (funcall function value)) +(defun %funcall (value function) + (funcall function value)) + +(define-modify-macro %callf (function) %funcall "Set `place` to the result of calling `function` on its current value.") + (defmacro callf (&rest place-function-pairs) "Set each `place` to the result of calling `function` on its current value.