File: 135_uncurry.sml

package info (click to toggle)
smlsharp 4.1.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 123,732 kB
  • sloc: ansic: 16,725; sh: 4,347; makefile: 2,191; java: 742; haskell: 493; ruby: 305; cpp: 284; pascal: 256; ml: 255; lisp: 141; asm: 97; sql: 74
file content (41 lines) | stat: -rw-r--r-- 1,097 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
infix ::;
fun f x nil = ()
  | f x (h::t) = f x t

(*
2011-09-07 katsu

Uncurry optimization generates wrong POLYty in TPVAR.

After uncurry optimization:

['a, 'b.
 val rec f(0) : {'a, 'b list(t15[])} -> unit(t7[]) =
     ...
]
val f(0) : ['a, 'b. 'a -> 'b list(t15[]) -> unit(t7[])] =
    ['a, 'b.
     (fn {$T_c(7) : 'a}
         : 'b list(t15[]) -> unit(t7[]) =>
        fn {$T_d(8) : 'b list(t15[])}
           : unit(t7[]) =>
          ((f(0) : ['c, 'd. {'a, 'b list(t15[])} -> unit(t7[])]
                  (******** "'a, 'b list" should be "'c, 'd list" ********)
            : ['c, 'd. {'a, 'b list(t15[])} -> unit(t7[])])
             {'a, 'b}
           : {'a, 'b list(t15[])} -> unit(t7[]))
            {$T_c(7) : 'a, $T_d(8) : 'b list(t15[])})
     : 'a -> 'b list(t15[]) -> unit(t7[])]
*)

(*
2011-09-08 ohori

Fixed  by setting propert btvenv in instantiateAndCurryFun 
in UncurryFundecl.

This however indicate a potential problem of rebinding the same id.
As a conventional optimizer, UncurryFundecl copies declarations by 
assuming static scoping. This need to be rectified.

*)