Warning for arity mismatches

View: New views
4 Messages — Rating Filter:   Alert me  

Warning for arity mismatches

by Ludovic Courtès-3 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hello!

There’s a new warning available, ‘-Warity-mismatch’, which warns about
wrong arguments counts, etc.  It currently lacks support for keyword
arguments, which is why it’s not ready yet to compile Guile itself (it
produces erroneous warnings for procedures with keyword arguments.)

I think some of these warnings should really be errors, when there’s
undoubtedly a wrong number of arguments, as in:

  (let ((f (lambda (x) x)))
    (f 1 2 3))

What do you think?

Actually, the tree-il->glil pass surely does a significant part of what
‘arity-mismatch-analysis’ does, and I wonder whether/how this could be
factorized.  For example, tree-il->glil must already diagnose the
problem in the example above.  Andy?

Thanks,
Ludo’.




Re: Warning for arity mismatches

by Andy Wingo :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hi :)

On Sat 07 Nov 2009 19:38, ludo@... (Ludovic Courtès) writes:

> There’s a new warning available, ‘-Warity-mismatch’, which warns about
> wrong arguments counts, etc.

Cool :)

> It currently lacks support for keyword
> arguments, which is why it’s not ready yet to compile Guile itself (it
> produces erroneous warnings for procedures with keyword arguments.)

Why doesn't it just not warn in that case?

> I think some of these warnings should really be errors, when there’s
> undoubtedly a wrong number of arguments, as in:
>
>   (let ((f (lambda (x) x)))
>     (f 1 2 3))
>
> What do you think?

I think there should be a -Werror compilation argument, but that we
should, by default, compile all expressions. It could very well be that
the user wanted to cause an exception to be raised.

> Actually, the tree-il->glil pass surely does a significant part of what
> ‘arity-mismatch-analysis’ does, and I wonder whether/how this could be
> factorized.  For example, tree-il->glil must already diagnose the
> problem in the example above.  Andy?

See analyze.scm:173. I don't know if I'd bother factorizing anything
more than (args-compatible? proc args).

Andy
--
http://wingolog.org/



Re: Warning for arity mismatches

by Ludovic Courtès-3 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hey,

Andy Wingo <wingo@...> writes:

> On Sat 07 Nov 2009 19:38, ludo@... (Ludovic Courtès) writes:

[...]

>> It currently lacks support for keyword
>> arguments, which is why it’s not ready yet to compile Guile itself (it
>> produces erroneous warnings for procedures with keyword arguments.)
>
> Why doesn't it just not warn in that case?

It now supports keyword arguments for good, so forget about it.  :-)

>> I think some of these warnings should really be errors, when there’s
>> undoubtedly a wrong number of arguments, as in:
>>
>>   (let ((f (lambda (x) x)))
>>     (f 1 2 3))
>>
>> What do you think?
>
> I think there should be a -Werror compilation argument, but that we
> should, by default, compile all expressions. It could very well be that
> the user wanted to cause an exception to be raised.

Right, why not.  With backwards compatibility in mind, it seems to me
like a reasonable approach

Thanks,
Ludo’.




Re: Warning for arity mismatches

by Neil Jerram :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

ludo@... (Ludovic Courtès) writes:

>> I think there should be a -Werror compilation argument, but that we
>> should, by default, compile all expressions. It could very well be that
>> the user wanted to cause an exception to be raised.
>
> Right, why not.  With backwards compatibility in mind, it seems to me
> like a reasonable approach

I agree, this is a nice model of operation.

  Neil