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/ltybasic.sig
ViewVC logotype

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 16 - (view) (download) (as text)

1 : monnier 16 (* Copyright (c) 1998 YALE FLINT PROJECT *)
2 :     (* ltybasic.sig *)
3 :    
4 :     (*
5 :     * This file contains all the standard operations defined in LtyDef plus
6 :     * the set of common functions used to manipulate kinds, tycs, and ltys.
7 :     * The rule of thumb about what should be included in this file rather
8 :     * than the ltyextern.sml: well, all primitive lambda tkinds, tycs and
9 :     * ltys should be here, all common utility functions on tkinds, tycs,
10 :     * and ltys should be here. Functions that are of specific use should
11 :     * go to the ltyextern.sml. Still, the module LtyExtern will include
12 :     * all functions defined here, so all clients should use functions via
13 :     * the LtyExtern structure.
14 :     *)
15 :    
16 :     signature LTYBASIC =
17 :     sig
18 :    
19 :     (*
20 :     * The abstract definitions of tkind, tyc, and lty are in separate files,
21 :     * i.e., ltydef.sig and ltydef.sml. The internal implementation of tkind,
22 :     * tyc, and lty are in the ltykernel.sig and ltykernel.sml files. In general,
23 :     * the clients of the lambda types should never need to understand what is
24 :     * going on inside the LtyKernel.
25 :     *)
26 :    
27 :     (** the definitions of tkind, tyc, and lty *)
28 :     include LTYDEF (* see ltydef.sig for details *)
29 :    
30 :     (** new a type variable, currently not used *)
31 :     val mkTvar : unit -> tvar
32 :    
33 :     (** utility functions for constructing tkinds *)
34 :     val tkc_int : int -> tkind
35 :     val tkc_arg : int -> tkind list
36 :    
37 :     (** primitive lambda tycs *)
38 :     val tcc_int : tyc
39 :     val tcc_int32 : tyc
40 :     val tcc_real : tyc
41 :     val tcc_string : tyc
42 :     val tcc_exn : tyc
43 :     val tcc_void : tyc
44 :     val tcc_unit : tyc
45 :     val tcc_bool : tyc
46 :    
47 :     val tcc_tv : int -> tyc
48 :     val tcc_ref : tyc -> tyc
49 :     val tcc_array : tyc -> tyc
50 :     val tcc_vector : tyc -> tyc
51 :     val tcc_etag : tyc -> tyc
52 :    
53 :     (** primitive lambda ltys *)
54 :     val ltc_int : lty
55 :     val ltc_int32 : lty
56 :     val ltc_real : lty
57 :     val ltc_string : lty
58 :     val ltc_exn : lty
59 :     val ltc_void : lty
60 :     val ltc_unit : lty
61 :     val ltc_bool : lty
62 :    
63 :     val ltc_tv : int -> lty
64 :     val ltc_ref : lty -> lty
65 :     val ltc_array : lty -> lty
66 :     val ltc_vector : lty -> lty
67 :     val ltc_etag : lty -> lty
68 :    
69 :     val ltc_top : lty (* used in a dirty hack in prim.sml *)
70 :    
71 :     (** testing equivalence of tkinds, tycs, and ltys *)
72 :     val tk_eqv : tkind * tkind -> bool
73 :     val tc_eqv : tyc * tyc -> bool
74 :     val lt_eqv : lty * lty -> bool
75 :    
76 :     (** testing the equivalence for tycs and ltys with relaxed constraints *)
77 :     val tc_eqv_bx: tyc * tyc -> bool
78 :     val lt_eqv_bx: lty * lty -> bool
79 :    
80 :     (** pretty printing of tkinds, tycs, and ltys *)
81 :     val tk_print : tkind -> string
82 :     val tc_print : tyc -> string
83 :     val lt_print : lty -> string
84 :    
85 :     (** adjusting an lty or tyc from one depth to another *)
86 :     val lt_adj : lty * depth * depth -> lty
87 :     val tc_adj : tyc * depth * depth -> tyc
88 :    
89 :     val lt_adj_k : lty * depth * depth * int -> lty
90 :     val tc_adj_k : tyc * depth * depth * int -> tyc
91 :    
92 :     (** finding out the depth for a tyc's innermost-bound free variables *)
93 :     val tc_depth : tyc * depth -> depth
94 :     val tcs_depth: tyc list * depth -> depth
95 :    
96 :     (** automatically flattening the argument or the result type *)
97 :     val lt_autoflat : lty -> bool * lty list * bool
98 :    
99 :     (** utility functions on tkindEnv *)
100 :     type tkindEnv
101 :     exception tkUnbound
102 :     val initTkEnv: tkindEnv
103 :     val tkLookup : tkindEnv * int * int -> tkind
104 :     val tkInsert : tkindEnv * tkind list -> tkindEnv
105 :    
106 :     (** utility functions on tycEnv *)
107 :     exception tcUnbound
108 :     type tycEnv = LtyKernel.tycEnv
109 :     val initTycEnv : tycEnv
110 :     val tcInsert : tycEnv * (tyc list option * int) -> tycEnv
111 :    
112 :     (** the ltyEnv maps from lvar to its lty; notice lty is depth-dependent *)
113 :     type ltyEnv
114 :     exception ltUnbound
115 :     val initLtyEnv : ltyEnv
116 :     val ltLookup : ltyEnv * LambdaVar.lvar * depth -> lty
117 :     val ltInsert : ltyEnv * LambdaVar.lvar * lty * depth -> ltyEnv
118 :    
119 :     end (* signature LTYBASIC *)
120 :    

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