comparison src/core_env.sml @ 807:61a1f5c5ae2c

Mutual datatypes through Effectize
author Adam Chlipala <adamc@hcoop.net>
date Sat, 16 May 2009 15:45:12 -0400
parents 8688e01ae469
children b2311dfb3158
comparison
equal deleted inserted replaced
806:0e554bfd6d6a 807:61a1f5c5ae2c
299 | SOME x => x 299 | SOME x => x
300 300
301 fun declBinds env (d, loc) = 301 fun declBinds env (d, loc) =
302 case d of 302 case d of
303 DCon (x, n, k, c) => pushCNamed env x n k (SOME c) 303 DCon (x, n, k, c) => pushCNamed env x n k (SOME c)
304 | DDatatype (x, n, xs, xncs) => 304 | DDatatype dts =>
305 let 305 foldl (fn ((x, n, xs, xncs), env) =>
306 val env = pushDatatype env x n xs xncs 306 let
307 val env = pushCNamed env x n (KType, loc) NONE 307 val env = pushDatatype env x n xs xncs
308 in 308 val env = pushCNamed env x n (KType, loc) NONE
309 foldl (fn ((x', n', NONE), env) => pushENamed env x' n' (CNamed n, loc) NONE "" 309 in
310 | ((x', n', SOME t), env) => pushENamed env x' n' (TFun (t, (CNamed n, loc)), loc) NONE "") 310 foldl (fn ((x', n', NONE), env) => pushENamed env x' n' (CNamed n, loc) NONE ""
311 env xncs 311 | ((x', n', SOME t), env) => pushENamed env x' n' (TFun (t, (CNamed n, loc)), loc) NONE "")
312 end 312 env xncs
313 end) env dts
313 | DVal (x, n, t, e, s) => pushENamed env x n t (SOME e) s 314 | DVal (x, n, t, e, s) => pushENamed env x n t (SOME e) s
314 | DValRec vis => foldl (fn ((x, n, t, e, s), env) => pushENamed env x n t NONE s) env vis 315 | DValRec vis => foldl (fn ((x, n, t, e, s), env) => pushENamed env x n t NONE s) env vis
315 | DExport _ => env 316 | DExport _ => env
316 | DTable (x, n, c, s, _, pc, _, cc) => 317 | DTable (x, n, c, s, _, pc, _, cc) =>
317 let 318 let