> One of the additions was:
>> Proposal 2 requires the macro expander to pass declare
> forms through to the output, but otherwise to ignore
> their presence.
>> This text actually appears twice; the first time, it
> should refer to Proposal 1 rather than Proposal 2.
Oops, sorry. I've fixed it now.
> One of the more obvious reasons Kent's statement is
> incorrect is that the output of the macro expander
> is wildly implementation-dependent; therefore any
> claim that any proposal must include any particular
> syntactic form within its output is incorrect, and
> obviously so.
Yet you made a similar statement in your sketch of the Proposal 3 formal
semantics.
> Another reason Kent's statement is incorrect is that
> the very same technique that Kent used to express the
> effect of implicit non-hygienic binding in Proposal 3
> can be used to express the implicit non-hygienic
> binding of the safe quality in Proposals 1 and 2.
> That is, where Kent illustrated Proposal 3 with
>> For example,
>> (lambda (x)
> (declare (safe 0))
> (let ((y (cdr x)))
> (declare (safe 1))
> (car y)))
>> expands to
>> (#u:lambda (x)
> (#u:let ((y (#u:cdr x)))
> (#s:car x)))
>> the corresponding expansion for Proposals 1 and 2
> is to
>> (#u:lambda (x)
> (#u:let ((y (#u:call cdr x)))
> (#s:call car x)))
>> Obviously, there are no declare forms in this output.
Yet, again, you made a similar statement your in sketch of the Proposal 3
formal semantics.
Kent