[Openmcl-devel] Compiler warnings
Greg Pfeil
greg at clozure.com
Sun Oct 18 08:47:48 PDT 2009
On 18 Oct 2009, at 11:30, Taoufik Dachraoui wrote:
>
> On Oct 18, 2009, at 4:54 PM, Greg Pfeil wrote:
>
>>
>> [bringing back to the list, as I forgot to CC them on my last
>> message]
>>
>> On 18 Oct 2009, at 9:58, Taoufik Dachraoui wrote:
>>
>>> In our example:
>>>
>>> (setf x 1)
>>> (THE fixnum x)
>>>
>>> The form x returns 1 and the type of 1 is fixnum thus I do not
>>> understand why the compiler
>>> raise a warning; Suppose that the compiler raises an error instead
>>> of a warning
>>> stating that the x is an undeclared free variable; this may be
>>> reasonable but it is not
>>> compliant with the standard.
>>
>> Perhaps if I show you an analogous example at eval-time (as opposed
>> to compile-time) you will see how the warning that is signaled has
>> nothing to do with THE.
>>
>> ? (defun the* (type expr)
>> (declare (ignore type))
>> expr)
>> THE*
>> ? (the* 'fixnum x)
>> > Error: Unbound variable: X
>>
>> Would you say here that THE* is signaling the error? The function
>> THE* has not yet been called at the point of the error. The error
>> exists merely because the form has the undeclared (and thus
>> unbound) variable X in it.
>>
>
> ? (setf x 1)
> 1
> ? (defun the* (type expr)
> (declare (ignore type))
> expr)
> THE*
> ? (the* 'fixnum x)
> 1
> ?
>
> So here you see you do not get an error (you just forgot to setf x)
No, I didn't forget to setf x, you missed the point of the example.
The point is that a warning/error/whatever can be signaled without it
being caused by the outermost form. It is clear (or so I had hoped) in
my example that X is evaluated (and signals an error) before
(THE* ...) is evaluated.
In a similar fashion, X is compiled (and signals an warning) before
(THE ...) is evaluated. IE, the warning that is raised has nothing to
do with THE.
More information about the Openmcl-devel
mailing list