chicken-users
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Chicken-users] types - compiler too optimistic?


From: Martin Schneeweis
Subject: [Chicken-users] types - compiler too optimistic?
Date: Tue, 10 Jul 2018 10:21:57 +0200

Hi,

back at playing with types - my current impression is that the compiler
is a little too optimistic (goal: get as much warnings as
possible - optimizations are no concern here).

Example A - compiler gives warning - I am happy:

  (: my-add (fixnum fixnum --> float)) ; note the float return type
  (define my-add (lambda (a b)
    (+ a b)))

  (: some-val-w-1 fixnum)
  (define some-val-w-1 (my-add 0 1)) ; warning

Example B - compiler gives no warning (not sure why not - I would have
hoped that the compiler assumes the "worst case" - meaning "my-add-2"
returns a float and therefore the variable "some-val-nw-2" cannot be a
fixnum)

  (define-type mixed-type (or fixnum float))
  
  (: my-add-2 (fixnum mixed-type --> mixed-type))
  (define my-add-2 (lambda (a b)
    (+ a b)))

  (: some-val-nw-2 fixnum)
  (define some-val-nw-2 (my-add-2 1 0.3)) ; return value will be a float

Am I missing some compiler-flags that I am supposed to use?

Chicken 4 (4.13) and Chicken 5 are behaving in the same way - I am
using no compiler-flags - just "csc <filename>" - by the way: using the
compiler-flag "-optimize-level 0" makes the first warning disappear.

Attached is the (Chicken 5) source-code of the tests - "-w-" in a name
means "warning", "-nw-" in a name means "no warning" (and my goal was
to get a warning in all cases - so "-w-" means I got what I expected).

lg
Martin

Attachment: type-lost-simple.scm
Description: Text Data


reply via email to

[Prev in Thread] Current Thread [Next in Thread]