[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.