Home My Page Projects Code Snippets Project Openings SML/NJ
Summary Activity Forums Tracker Lists Tasks Docs Surveys News SCM Files

SCM Repository

[smlnj] Annotation of /sml/trunk/src/compiler/FLINT/kernel/ltykernel.sig
ViewVC logotype

Annotation of /sml/trunk/src/compiler/FLINT/kernel/ltykernel.sig

Parent Directory Parent Directory | Revision Log Revision Log


Revision 17 - (view) (download) (as text)
Original Path: sml/branches/SMLNJ/src/compiler/FLINT/kernel/ltykernel.sig

1 : monnier 16 (* COPYRIGHT (c) 1997 YALE FLINT PROJECT *)
2 :     (* ltykernel.sig *)
3 :    
4 :     signature LTYKERNEL = sig
5 :    
6 :     (* definitions of kind and kind-environment *)
7 :     type tkind
8 :    
9 :     datatype tkindI
10 :     = TK_MONO (* ground mono tycon *)
11 :     | TK_BOX (* boxed/tagged tycon *)
12 :     | TK_SEQ of tkind list (* sequence of tycons *)
13 :     | TK_FUN of tkind list * tkind (* tycon function *)
14 :    
15 :     (* definitions of named tyc variables *)
16 :     type tvar = LambdaVar.lvar (* temporary, not used *)
17 :     val mkTvar : unit -> tvar (* temporary, not used *)
18 :    
19 :     (* definitions of tyc and tyc-environment *)
20 :     type tyc
21 :     type tycEnv
22 :    
23 :     datatype tycI
24 :     = TC_VAR of DebIndex.index * int (* tyc variable *)
25 :     | TC_NVAR of tvar * DebIndex.depth * int (* named tyc variable *)
26 :     | TC_PRIM of PrimTyc.primtyc (* primitive tyc *)
27 :     | TC_FN of tkind list * tyc (* tyc abstraction *)
28 :     | TC_APP of tyc * tyc list (* tyc application *)
29 :     | TC_SEQ of tyc list (* tyc sequence *)
30 :     | TC_PROJ of tyc * int (* tyc projection *)
31 :    
32 :     | TC_SUM of tyc list (* sum tyc *)
33 :     | TC_FIX of (int * tyc * tyc list) * int (* recursive tyc *)
34 :    
35 :     | TC_TUPLE of rflag * tyc list (* std record tyc *)
36 :     | TC_ARROW of fflag * tyc list * tyc list (* std function tyc *)
37 :     | TC_PARROW of tyc * tyc (* special fun tyc, not used *)
38 :    
39 :     | TC_BOX of tyc (* boxed tyc *)
40 :     | TC_ABS of tyc (* abstract tyc *)
41 :     | TC_CONT of tyc list (* std continuation tyc *)
42 :     | TC_IND of tyc * tycI (* indirect tyc thunk *)
43 :     | TC_ENV of tyc * int * int * tycEnv (* tyc closure *)
44 :    
45 :     withtype fflag = bool * bool (* is the calling convention fixed ? *)
46 :     and rflag = unit (* record kind, not used at this moment *)
47 :    
48 :     val default_fflag : fflag (* (true, true), fixed calling conventions *)
49 :     val default_rflag : rflag (* unit, just a template for the time being *)
50 :    
51 :     (* definition of lty *)
52 :     type lty
53 :     datatype ltyI
54 :     = LT_TYC of tyc (* monomorphic type *)
55 :     | LT_STR of lty list (* structure type *)
56 :     | LT_FCT of lty list * lty list (* functor type *)
57 :     | LT_POLY of tkind list * lty list (* polymorphic type *)
58 :    
59 :     | LT_PST of (int * lty) list (* partial-str type *)
60 :     | LT_CONT of lty list (* internal cont type *)
61 :     | LT_IND of lty * ltyI (* indirect type thunk *)
62 :     | LT_ENV of lty * int * int * tycEnv (* type closure *)
63 :    
64 :     (** injections and projections on tkind, tyc, and lty *)
65 :     val tk_inj : tkindI -> tkind
66 :     val tc_inj : tycI -> tyc
67 :     val lt_inj : ltyI -> lty
68 :    
69 :     val tk_out : tkind -> tkindI
70 :     val tc_out : tyc -> tycI
71 :     val lt_out : lty -> ltyI
72 :    
73 :     (** key comparison for tkind, tyc, and lty; used in pickling *)
74 :     val tk_cmp : tkind * tkind -> order
75 :     val tc_cmp : tyc * tyc -> order
76 :     val lt_cmp : lty * lty -> order
77 :    
78 :     (** get the hash key of each lty, used by reps/coerce.sml; a hack! *)
79 :     val lt_key : lty -> int
80 :    
81 :     (** testing the equivalence for regular tkinds, tycs and ltys *)
82 :     val tk_eqv : tkind * tkind -> bool
83 :     val tc_eqv : tyc * tyc -> bool
84 :     val lt_eqv : lty * lty -> bool
85 :    
86 :     (** testing the equivalence for tycs and ltys with relaxed constraints *)
87 :     val tc_eqv_bx: tyc * tyc -> bool
88 :     val lt_eqv_bx: lty * lty -> bool
89 :    
90 :     (** utility functions on tycEnv *)
91 :     exception tcUnbound
92 :     val initTycEnv : tycEnv
93 :     val tcInsert : tycEnv * (tyc list option * int) -> tycEnv
94 :    
95 :     (** testing if a tyc (or lty) is in the normal form *)
96 :     val tcp_norm : tyc -> bool
97 :     val ltp_norm : lty -> bool
98 :    
99 :     (** finding out the depth for a tyc's innermost-bound free variables *)
100 :     val tc_depth : tyc * DebIndex.depth -> DebIndex.depth
101 :     val tcs_depth: tyc list * DebIndex.depth -> DebIndex.depth
102 :    
103 :     (** utility functions for TC_ENV and LT_ENV types *)
104 :     val tcc_env : tyc * int * int * tycEnv -> tyc
105 :     val ltc_env : lty * int * int * tycEnv -> lty
106 :    
107 :     (** reducing a tyc or lty into the weak-head normal form *)
108 :     val tc_whnm : tyc -> tyc
109 :     val lt_whnm : lty -> lty
110 :    
111 :     (** reducing a tyc or lty into the true normal form *)
112 :     val tc_norm : tyc -> tyc
113 :     val lt_norm : lty -> lty
114 :    
115 :     (** automatically flattening the argument or the result type *)
116 :     val lt_autoflat : lty -> bool * lty list * bool
117 :    
118 :     (** automatically tupling up the multiple argument/result into a single one *)
119 :     val tc_autotuple : tyc list -> tyc
120 :    
121 :     (** tcc_arw does automatic argument and result flattening *)
122 :     val tcc_arw : fflag * tyc list * tyc list -> tyc
123 :    
124 :     (** automatic recursive boxing for representation analysis *)
125 :     val tcc_wrap : tyc -> tyc (* wrapping a tyc of any kind *)
126 :     val tcc_box : tyc -> tyc (* wrapping a tyc of kind tkc_mono *)
127 :    
128 :     end (* signature LTYKERNEL *)
129 :    
130 :    

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0