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 95 - (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
94 :     (** utility functions on tycEnv *)
95 :     exception tcUnbound
96 :     val initTycEnv : tycEnv
97 :     val tcInsert : tycEnv * (tyc list option * int) -> tycEnv
98 :    
99 :     (** testing if a tyc (or lty) is in the normal form *)
100 :     val tcp_norm : tyc -> bool
101 :     val ltp_norm : lty -> bool
102 :    
103 :     (** finding out the depth for a tyc's innermost-bound free variables *)
104 :     val tc_depth : tyc * DebIndex.depth -> DebIndex.depth
105 :     val tcs_depth: tyc list * DebIndex.depth -> DebIndex.depth
106 :    
107 : league 65 (** utility functions on tkindEnv *)
108 :     type tkindEnv
109 :     exception tkUnbound
110 :     val initTkEnv : tkindEnv
111 :     val tkLookup : tkindEnv * int * int -> tkind
112 :     val tkInsert : tkindEnv * tkind list -> tkindEnv
113 :     val tkLookupFreeVars : tkindEnv * tyc -> tkind list option
114 : monnier 71
115 : monnier 16 (** utility functions for TC_ENV and LT_ENV types *)
116 :     val tcc_env : tyc * int * int * tycEnv -> tyc
117 :     val ltc_env : lty * int * int * tycEnv -> lty
118 :    
119 :     (** reducing a tyc or lty into the weak-head normal form *)
120 :     val tc_whnm : tyc -> tyc
121 :     val lt_whnm : lty -> lty
122 :    
123 :     (** reducing a tyc or lty into the true normal form *)
124 :     val tc_norm : tyc -> tyc
125 :     val lt_norm : lty -> lty
126 :    
127 :     (** automatically flattening the argument or the result type *)
128 :     val lt_autoflat : lty -> bool * lty list * bool
129 :    
130 : monnier 45 (** testing if a tyc is a unknown constructor *)
131 :     val tc_unknown : tyc -> bool
132 : monnier 16
133 : monnier 45 (** automatically tupling up the multiple argument/result into a single one *)
134 :     val tc_autotuple : tyc list -> tyc
135 :    
136 :     (** tcc_arw does automatic argument and result flattening, so go away *)
137 :     val tcc_arw : fflag * tyc list * tyc list -> tyc
138 :    
139 :     (** token-related functions *)
140 :     val token_name : token -> string
141 :     val token_abbrev : token -> string (* used by tc_print *)
142 :     val token_isvalid : token -> bool
143 :     val token_eq : token * token -> bool
144 :     val token_int : token -> int (* for pickling *)
145 :     val token_key : int -> token
146 :    
147 :     (** primitive TC_WRAP constructor, built through the token facility *)
148 :     val wrap_token : token
149 :    
150 : monnier 16 end (* signature LTYKERNEL *)
151 :    
152 :    
153 : monnier 95
154 :     (*
155 :     * $Log: ltykernel.sig,v $
156 :     * Revision 1.1.1.1 1998/04/08 18:39:38 george
157 :     * Version 110.5
158 :     *
159 :     *)

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