chicken-janitors
[Top][All Lists]
Advanced

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

[Chicken-janitors] #1214: Specialization on certain `or' types doesn't w


From: Chicken Trac
Subject: [Chicken-janitors] #1214: Specialization on certain `or' types doesn't work
Date: Tue, 25 Aug 2015 11:16:43 -0000

#1214: Specialization on certain `or' types doesn't work
-------------------------+---------------------
 Reporter:  syn          |      Owner:
     Type:  defect       |     Status:  new
 Priority:  minor        |  Milestone:  someday
Component:  scrutinizer  |    Version:  4.10.x
 Keywords:               |
-------------------------+---------------------
 Given a procedure {{{foo}}}

 {{{
 (: foo (* -> symbol))

 (define (foo x)
   'unspecialized)
 }}}

 and a user-defined specialization for it:

 {{{
 (define-specialization (foo (x fixnum))
   'fixnum)
 }}}

 We know that this will never specialize due to "exact" argument type
 matching as described in the documentation for {{{define-
 specialization}}}:

   Note that the matching of argument types is done "exactly". This means,
   for example, that an argument type specialized for `list` will not match
   `null`: even though `null` is a subtype of `list` and will match during
   normal flow-analysis, we want to be able to control what happens when a
   procedure is called with exactly with a list argument. To handle the
 case
   when it is called with a `null` argument, define another specialization
 for
   exactly that type or use an `(or ...)` type-specifier.

 Following this suggestion we get a specialization like this:

 {{{
 (define-specialization (foo (x (or fixnum float)))
   'number)
 }}}

 However, in this specific case, the specialization will still never be
 applied because the specializer will "simplify" the {{{(or fixnum
 float)}}} expression to {{{number}}} before specialization, see line 1266
 at c8d9cd2 in scrutinizer.scm:


 {{{
 ((lset= eq? '(fixnum float) ts) 'number)
 }}}

 The same will happen for {{{(or true false) => boolean}}}.

 It's unclear to me whether this is a bug. Also, I wonder whether it
 wouldn't make more sense to be able to specialize non-exactly. It
 certainly seems to have its uses.

--
Ticket URL: <http://bugs.call-cc.org/ticket/1214>
CHICKEN Scheme <http://www.call-cc.org/>
CHICKEN Scheme is a compiler for the Scheme programming language.

reply via email to

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