SCM Repository
Annotation of /sml/trunk/src/cm/semant/primitive.sml
Parent Directory
|
Revision Log
Revision 312 - (view) (download)
1 : | blume | 274 | (* |
2 : | * "Primitive" classes in CM. | ||
3 : | * - provide access to compiler internals in an orderly fashion | ||
4 : | * | ||
5 : | * (C) 1999 Lucent Technologies, Bell Laboratories | ||
6 : | * | ||
7 : | * Author: Matthias Blume (blume@kurims.kyoto-u.ac.jp) | ||
8 : | *) | ||
9 : | blume | 270 | signature PRIMITIVE = sig |
10 : | |||
11 : | blume | 286 | type configuration |
12 : | blume | 270 | type primitive |
13 : | |||
14 : | blume | 279 | val eq : primitive * primitive -> bool |
15 : | |||
16 : | blume | 274 | val fromString : string -> primitive option |
17 : | blume | 273 | val toString : primitive -> string |
18 : | blume | 272 | |
19 : | blume | 304 | val toIdent : primitive -> char |
20 : | val fromIdent : char -> primitive option | ||
21 : | |||
22 : | blume | 301 | val reqpriv : primitive -> StringSet.set |
23 : | blume | 295 | |
24 : | blume | 278 | (* the domain of (lookup p) must always properly include (exports p) *) |
25 : | blume | 286 | val exports : configuration -> primitive -> SymbolSet.set |
26 : | blume | 309 | val da_env : configuration -> primitive -> DAEnv.env |
27 : | blume | 295 | val env : configuration -> primitive -> GenericVC.Environment.environment |
28 : | val pidInfo : configuration -> primitive | ||
29 : | -> { statpid: GenericVC.PersStamps.persstamp, | ||
30 : | sympid: GenericVC.PersStamps.persstamp, | ||
31 : | ctxt: GenericVC.Environment.staticEnv } | ||
32 : | blume | 286 | |
33 : | val configuration : | ||
34 : | { basis: GenericVC.Environment.environment } | ||
35 : | -> configuration | ||
36 : | blume | 270 | end |
37 : | |||
38 : | blume | 272 | structure Primitive :> PRIMITIVE = struct |
39 : | blume | 270 | |
40 : | blume | 286 | structure BE = GenericVC.BareEnvironment |
41 : | blume | 294 | structure E = GenericVC.Environment |
42 : | blume | 286 | structure DE = DAEnv |
43 : | blume | 270 | |
44 : | blume | 286 | (* For now, we only know about the "basis". |
45 : | * This is for testing only -- the basis will become a real | ||
46 : | * "non-primitive" library, and there will be other primitives | ||
47 : | * that are used to implement the basis. *) | ||
48 : | datatype primitive = | ||
49 : | BASIS | ||
50 : | |||
51 : | type pinfo = { exports : SymbolSet.set, | ||
52 : | blume | 309 | da_env : DE.env, |
53 : | blume | 295 | env : GenericVC.Environment.environment } |
54 : | blume | 286 | |
55 : | type configuration = primitive -> pinfo | ||
56 : | |||
57 : | blume | 279 | fun eq (p1 : primitive, p2) = p1 = p2 |
58 : | |||
59 : | blume | 286 | fun fromString "basis" = SOME BASIS |
60 : | blume | 274 | | fromString _ = NONE |
61 : | |||
62 : | blume | 286 | fun toString BASIS = "basis" |
63 : | blume | 274 | |
64 : | blume | 304 | fun toIdent BASIS = #"b" |
65 : | |||
66 : | fun fromIdent #"b" = SOME BASIS | ||
67 : | | fromIdent _ = NONE | ||
68 : | |||
69 : | blume | 312 | val reqpriv_basis = StringSet.singleton "basis" |
70 : | blume | 295 | |
71 : | blume | 301 | fun reqpriv BASIS = reqpriv_basis |
72 : | |||
73 : | blume | 286 | fun exports (cfg: configuration) p = #exports (cfg p) |
74 : | blume | 309 | fun da_env (cfg: configuration) p = #da_env (cfg p) |
75 : | blume | 295 | fun env (cfg: configuration) p = #env (cfg p) |
76 : | blume | 286 | |
77 : | fun configuration { basis } = let | ||
78 : | blume | 294 | fun gen_pinfo e = let |
79 : | blume | 309 | val (da_env, mkExports) = Statenv2DAEnv.cvt (E.staticPart e) |
80 : | blume | 294 | in |
81 : | blume | 309 | { exports = mkExports (), da_env = da_env, env = e } |
82 : | blume | 294 | end |
83 : | |||
84 : | val basis_pinfo = gen_pinfo basis | ||
85 : | fun cfg BASIS = basis_pinfo | ||
86 : | blume | 286 | in |
87 : | cfg | ||
88 : | end | ||
89 : | blume | 301 | (* this doesn't make much sense yet -- there aren't any singular |
90 : | * pids describing the basis *) | ||
91 : | fun pidInfo c BASIS = let | ||
92 : | val p = GenericVC.PersStamps.fromBytes | ||
93 : | (Byte.stringToBytes "0123456789abcdef") | ||
94 : | in | ||
95 : | { statpid = p, sympid = p, ctxt = GenericVC.CMStaticEnv.empty } | ||
96 : | end | ||
97 : | blume | 270 | end |
root@smlnj-gforge.cs.uchicago.edu | ViewVC Help |
Powered by ViewVC 1.0.0 |