[Openmcl-devel] Compiler warnings

Taoufik Dachraoui taoufik.dachraoui at wanadoo.fr
Sun Oct 18 09:35:46 PDT 2009


On Oct 18, 2009, at 6:18 PM, Greg Pfeil wrote:

>
>
> On 18 Oct 2009, at 12:05, Taoufik Dachraoui wrote:
>
>>
>> On Oct 18, 2009, at 5:47 PM, Greg Pfeil wrote:
>>
>>>
>>>
>>> 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.
>>>
>> so (+ x 1) will raise an error? it does not.
>
> It will unless you bind a value to x.
>
> ? (+ x 1)
> > Error: Unbound variable: X
>
> I'm guessing you setf x somewhere, no? When I said I didn't _forget_  
> to setf x, I meant that I _intentionally_ did not setf x to make my  
> point. Which you still seem to be missing.
>
No I did not miss your point from the start, I understand that the  
arguments of a function are evaluated first. In our case we setf x to  
1 and then use (THE fixnum x)
while evaluating (THE fixnum x), x will be evaluated first and should  
not return an error
since we setf x to 1 just before.

Remember, I found this issue when I tried to pop and push from a list:

? (setf lst '(1 2 3))
? (push 0 lst)
? lst
(0 1 2 3)
? (pop lst)
Warning
? lst
(1 2 3)

push did not raise a warning and pop did.

Taoufik








More information about the Openmcl-devel mailing list