Discussion:
A thing I should know myself....
Robert Goldman
2018-06-14 17:50:43 UTC
Permalink
I have a library that provides `DEF-UNIMPLEMENTED` as a macro for
defining stub functions. When you compile a file with unimplemented
functions, you get a warning of the type `FOO:UNIMPLEMENTED-STUB` in my
library `FOO`.

I'd like to put in an asdf system definition a file spec something like
this:

```
(:file "file-with-stubs"
:method (:around (o c) ‹ (handler-bind
((foo:unimplemented-stub
#'(lambda (c)
(print c)
(muffle-warning c))
(call-next-method)))
```
but, of course, the package `foo` doesn't exist when this is read
(although I could put `(asdf:load-system "foo")` upstream of the
enclosing defsystem).

This isn't a case that's nicely consistent with Faré's hack for
translating strings or keyword symbols, nor does it seem easy to use
`find-symbol` for this purpose.

Thoughts?

thanks,
r
Robert Goldman
2018-06-22 18:53:38 UTC
Permalink
Not sure why that took 8 days to post...
Post by Robert Goldman
I have a library that provides `DEF-UNIMPLEMENTED` as a macro for
defining stub functions. When you compile a file with unimplemented
functions, you get a warning of the type `FOO:UNIMPLEMENTED-STUB` in
my library `FOO`.
I'd like to put in an asdf system definition a file spec something
```
(:file "file-with-stubs"
:method (:around (o c) ‹ (handler-bind
((foo:unimplemented-stub
#'(lambda (c)
(print c)
(muffle-warning c))
(call-next-method)))
```
but, of course, the package `foo` doesn't exist when this is read
(although I could put `(asdf:load-system "foo")` upstream of the
enclosing defsystem).
This isn't a case that's nicely consistent with Faré's hack for
translating strings or keyword symbols, nor does it seem easy to use
`find-symbol` for this purpose.
Thoughts?
thanks,
r
Stas Boukarev
2018-06-22 21:55:00 UTC
Permalink
I have a library that provides DEF-UNIMPLEMENTED as a macro for defining
stub functions. When you compile a file with unimplemented functions, you
get a warning of the type FOO:UNIMPLEMENTED-STUB in my library FOO.
I'd like to put in an asdf system definition a file spec something like
(:file "file-with-stubs"
:method (:around (o c) ‹ (handler-bind ((foo:unimplemented-stub
#'(lambda (c)
(print c)
(muffle-warning c))
(call-next-method)))
but, of course, the package foo doesn't exist when this is read (although
I could put (asdf:load-system "foo") upstream of the enclosing defsystem).
This isn't a case that's nicely consistent with Faré's hack for
translating strings or keyword symbols, nor does it seem easy to use
find-symbol for this purpose.
You could still use FIND-SYMBOL:
(handler-bind ((error (lambda (c) (when (typep c (find-symbol x :foo))))))
(a))
Robert Goldman
2018-06-24 12:40:17 UTC
Permalink
Post by Stas Boukarev
I have a library that provides DEF-UNIMPLEMENTED as a macro for defining
stub functions. When you compile a file with unimplemented functions, you
get a warning of the type FOO:UNIMPLEMENTED-STUB in my library FOO.
I'd like to put in an asdf system definition a file spec something like
(:file "file-with-stubs"
:method (:around (o c) ‹ (handler-bind
((foo:unimplemented-stub
#'(lambda (c)
(print c)
(muffle-warning c))
(call-next-method)))
but, of course, the package foo doesn't exist when this is read (although
I could put (asdf:load-system "foo") upstream of the enclosing defsystem).
This isn't a case that's nicely consistent with Faré's hack for
translating strings or keyword symbols, nor does it seem easy to use
find-symbol for this purpose.
(handler-bind ((error (lambda (c) (when (typep c (find-symbol x :foo))))))
(a))
That's a good point, and effectively what I ended up doing. But it's
certainly not pleasing, because we end up doing our own type dispatch,
on top of that which is built into CL with `handler-bind`. Still, this
might be the best I can do.

thanks,
r
Faré
2018-06-24 19:11:48 UTC
Permalink
Sorry for a late reply.

UIOP has these utilities that can help you:
(uiop:find-symbol* :unimplemented-stub :foo nil)
(uiop:match-condition-p #(unimplemented-stub foo) (make-condition
'simple-warning))
(setf uiop:*uninteresting-conditions* '(#(unimplemented-stub foo)))

Also, ASDF has the around-compile hook that is the recommended place
to locally set those things:
(defun ignoring-unimplemented-sub (f) (let
((uiop:*uninteresting-conditions* '(#(unimplemented-stub foo))))
(funcall f)))
(defsystem ... :around-compile ignoring-unimplemented-sub ...)

—♯ƒ • François-René ÐVB Rideau •Reflection&Cybernethics• http://fare.tunes.org
Do NOT question authority — they don't know either.
I have a library that provides DEF-UNIMPLEMENTED as a macro for defining stub functions. When you compile a file with unimplemented functions, you get a warning of the type FOO:UNIMPLEMENTED-STUB in my library FOO.
(:file "file-with-stubs"
:method (:around (o c)
 (handler-bind ((foo:unimplemented-stub
#'(lambda (c)
(print c)
(muffle-warning c))
(call-next-method)))
but, of course, the package foo doesn't exist when this is read (although I could put (asdf:load-system "foo") upstream of the enclosing defsystem).
This isn't a case that's nicely consistent with Faré's hack for translating strings or keyword symbols, nor does it seem easy to use find-symbol for this purpose.
(handler-bind ((error (lambda (c) (when (typep c (find-symbol x :foo)))))) (a))
That's a good point, and effectively what I ended up doing. But it's certainly not pleasing, because we end up doing our own type dispatch, on top of that which is built into CL with handler-bind. Still, this might be the best I can do.
thanks,
r
Continue reading on narkive:
Loading...