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 53 - (view) (download) (as text)

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 : monnier 45 | TK_FUN of tkind list * tkind (* tycon function *)
14 : monnier 16
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 : monnier 45 type token (* a hook to add new tyc *)
23 : monnier 16
24 : monnier 45 datatype fflag (* calling conventions *)
25 :     = FF_VAR of bool * bool (* is it fixed ? *)
26 :     | FF_FIXED (* used after rep. analysis *)
27 :    
28 :     datatype rflag = RF_TMP (* tuple kind: a template *)
29 :    
30 : monnier 16 datatype tycI
31 :     = TC_VAR of DebIndex.index * int (* tyc variable *)
32 :     | TC_NVAR of tvar * DebIndex.depth * int (* named tyc variable *)
33 :     | TC_PRIM of PrimTyc.primtyc (* primitive tyc *)
34 :     | TC_FN of tkind list * tyc (* tyc abstraction *)
35 :     | TC_APP of tyc * tyc list (* tyc application *)
36 :     | TC_SEQ of tyc list (* tyc sequence *)
37 :     | TC_PROJ of tyc * int (* tyc projection *)
38 :    
39 :     | TC_SUM of tyc list (* sum tyc *)
40 :     | TC_FIX of (int * tyc * tyc list) * int (* recursive tyc *)
41 :    
42 : monnier 45 | TC_TUPLE of rflag * tyc list (* std record tyc *)
43 :     | TC_ARROW of fflag * tyc list * tyc list (* std function tyc *)
44 : monnier 16 | TC_PARROW of tyc * tyc (* special fun tyc, not used *)
45 :    
46 :     | TC_BOX of tyc (* boxed tyc *)
47 :     | TC_ABS of tyc (* abstract tyc *)
48 : monnier 45 | TC_TOKEN of token * tyc (* extensible token tyc *)
49 : monnier 16 | TC_CONT of tyc list (* std continuation tyc *)
50 :     | TC_IND of tyc * tycI (* indirect tyc thunk *)
51 :     | TC_ENV of tyc * int * int * tycEnv (* tyc closure *)
52 :    
53 :     (* definition of lty *)
54 :     type lty
55 :     datatype ltyI
56 :     = LT_TYC of tyc (* monomorphic type *)
57 :     | LT_STR of lty list (* structure type *)
58 :     | LT_FCT of lty list * lty list (* functor type *)
59 :     | LT_POLY of tkind list * lty list (* polymorphic type *)
60 :    
61 :     | LT_PST of (int * lty) list (* partial-str type *)
62 :     | LT_CONT of lty list (* internal cont type *)
63 :     | LT_IND of lty * ltyI (* indirect type thunk *)
64 :     | LT_ENV of lty * int * int * tycEnv (* type closure *)
65 :    
66 :     (** injections and projections on tkind, tyc, and lty *)
67 :     val tk_inj : tkindI -> tkind
68 :     val tc_inj : tycI -> tyc
69 :     val lt_inj : ltyI -> lty
70 :    
71 :     val tk_out : tkind -> tkindI
72 :     val tc_out : tyc -> tycI
73 :     val lt_out : lty -> ltyI
74 :    
75 :     (** key comparison for tkind, tyc, and lty; used in pickling *)
76 :     val tk_cmp : tkind * tkind -> order
77 :     val tc_cmp : tyc * tyc -> order
78 :     val lt_cmp : lty * lty -> order
79 :    
80 :     (** get the hash key of each lty, used by reps/coerce.sml; a hack! *)
81 :     val lt_key : lty -> int
82 :    
83 : monnier 45 (** testing equivalence of tkinds, tycs, ltys, fflags, and rflags *)
84 : monnier 16 val tk_eqv : tkind * tkind -> bool
85 :     val tc_eqv : tyc * tyc -> bool
86 :     val lt_eqv : lty * lty -> bool
87 : monnier 45 val ff_eqv : fflag * fflag -> bool
88 :     val rf_eqv : rflag * rflag -> bool
89 : monnier 16
90 :     (** testing the equivalence for tycs and ltys with relaxed constraints *)
91 : monnier 45 val tc_eqv_x : tyc * tyc -> bool
92 :     val lt_eqv_x : lty * lty -> bool
93 : monnier 16 val tc_eqv_bx: tyc * tyc -> bool
94 :     val lt_eqv_bx: lty * lty -> bool
95 :    
96 :     (** utility functions on tycEnv *)
97 :     exception tcUnbound
98 :     val initTycEnv : tycEnv
99 :     val tcInsert : tycEnv * (tyc list option * int) -> tycEnv
100 :    
101 :     (** testing if a tyc (or lty) is in the normal form *)
102 :     val tcp_norm : tyc -> bool
103 :     val ltp_norm : lty -> bool
104 :    
105 :     (** finding out the depth for a tyc's innermost-bound free variables *)
106 :     val tc_depth : tyc * DebIndex.depth -> DebIndex.depth
107 :     val tcs_depth: tyc list * DebIndex.depth -> DebIndex.depth
108 :    
109 : league 53 (** accessing and decoding free variables *)
110 :     type enc_tvar
111 :     val tvDecode : enc_tvar -> DebIndex.depth * DebIndex.index
112 :     val tc_freevars : tyc -> enc_tvar list option
113 :    
114 : monnier 16 (** utility functions for TC_ENV and LT_ENV types *)
115 :     val tcc_env : tyc * int * int * tycEnv -> tyc
116 :     val ltc_env : lty * int * int * tycEnv -> lty
117 :    
118 :     (** reducing a tyc or lty into the weak-head normal form *)
119 :     val tc_whnm : tyc -> tyc
120 :     val lt_whnm : lty -> lty
121 :    
122 :     (** reducing a tyc or lty into the true normal form *)
123 :     val tc_norm : tyc -> tyc
124 :     val lt_norm : lty -> lty
125 :    
126 :     (** automatically flattening the argument or the result type *)
127 :     val lt_autoflat : lty -> bool * lty list * bool
128 :    
129 : monnier 45 (** testing if a tyc is a unknown constructor *)
130 :     val tc_unknown : tyc -> bool
131 : monnier 16
132 : monnier 45 (** automatically tupling up the multiple argument/result into a single one *)
133 :     val tc_autotuple : tyc list -> tyc
134 :    
135 :     (** tcc_arw does automatic argument and result flattening, so go away *)
136 :     val tcc_arw : fflag * tyc list * tyc list -> tyc
137 :    
138 :     (** token-related functions *)
139 :     val token_name : token -> string
140 :     val token_abbrev : token -> string (* used by tc_print *)
141 :     val token_isvalid : token -> bool
142 :     val token_eq : token * token -> bool
143 :     val token_int : token -> int (* for pickling *)
144 :     val token_key : int -> token
145 :    
146 :     (** primitive TC_WRAP constructor, built through the token facility *)
147 :     val wrap_token : token
148 :    
149 : monnier 16 end (* signature LTYKERNEL *)
150 :    
151 :    

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