[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
declaration pervasiveness.
Date: Wed 12 Jun 85 19:44:14-EDT
From: Rodney A. Brooks <BROOKS%MIT-OZ@MIT-MC.ARPA>
I'm having trouble deciding exactly how pervasive certain declarations
are. For instance:
(defun f (n)
(flet ((f (m) (* m m)))
(declare (ftype (function (integer) integer) f))
(declare (notinline f))
(+ (f n)
(flet ((f (m) (bar m m)))
(f n)))))
By analogy to type it would appear that the ftype declaration applies
to the call to the (* m m) f, but not to the (bar m m) call. There is
specific language in the first paragraph of page 159 that implies
that. However notinline , which has precisely the same language
applied to it at the top of page 160, is earlier singled out has
having nothing to do with bindings and being pervasive on page 155.
So does the notinline apply to the call to the (bar m m) version or
not? If not, then page 155, and the notion of pervasiveness seem
misleading.
-------
If you follow the language defined in the book, you will find that your
function is illegal. Declarations are not permitted after FLET, LABELS,
or MACROLET. A lot of the language in the book seems to assume that
these forms don't exist.
Once you admit their existance, it is clear (to me at least) that
several things follow. First, FTYPE and [NOT]INLINE declarations should
be able to follow them and second, that these declarations should not be
pervasive.