Mercurial > urweb
comparison src/shake.sml @ 247:5c50b17f5e4a
Corify tables
author | Adam Chlipala <adamc@hcoop.net> |
---|---|
date | Sun, 31 Aug 2008 09:00:28 -0400 |
parents | 9bbf4d383381 |
children | d5b12daa9b47 |
comparison
equal
deleted
inserted
replaced
246:3aa010e97db9 | 247:5c50b17f5e4a |
---|---|
39 type free = { | 39 type free = { |
40 con : IS.set, | 40 con : IS.set, |
41 exp : IS.set | 41 exp : IS.set |
42 } | 42 } |
43 | 43 |
44 val dummye = (EPrim (Prim.String ""), ErrorMsg.dummySpan) | |
45 | |
44 fun shake file = | 46 fun shake file = |
45 let | 47 let |
46 val page_es = List.foldl | 48 val page_es = List.foldl |
47 (fn ((DExport (_, n), _), page_es) => n :: page_es | 49 (fn ((DExport (_, n), _), page_es) => n :: page_es |
48 | (_, page_es) => page_es) [] file | 50 | (_, page_es) => page_es) [] file |
51 | ((DDatatype (_, n, _, xncs), _), (cdef, edef)) => | 53 | ((DDatatype (_, n, _, xncs), _), (cdef, edef)) => |
52 (IM.insert (cdef, n, List.mapPartial #3 xncs), edef) | 54 (IM.insert (cdef, n, List.mapPartial #3 xncs), edef) |
53 | ((DVal (_, n, t, e, _), _), (cdef, edef)) => (cdef, IM.insert (edef, n, (t, e))) | 55 | ((DVal (_, n, t, e, _), _), (cdef, edef)) => (cdef, IM.insert (edef, n, (t, e))) |
54 | ((DValRec vis, _), (cdef, edef)) => | 56 | ((DValRec vis, _), (cdef, edef)) => |
55 (cdef, foldl (fn ((_, n, t, e, _), edef) => IM.insert (edef, n, (t, e))) edef vis) | 57 (cdef, foldl (fn ((_, n, t, e, _), edef) => IM.insert (edef, n, (t, e))) edef vis) |
56 | ((DExport _, _), acc) => acc) | 58 | ((DExport _, _), acc) => acc |
59 | ((DTable (_, n, c, _), _), (cdef, edef)) => | |
60 (cdef, IM.insert (edef, n, (c, dummye)))) | |
57 (IM.empty, IM.empty) file | 61 (IM.empty, IM.empty) file |
58 | 62 |
59 fun kind (_, s) = s | 63 fun kind (_, s) = s |
60 | 64 |
61 fun con (c, s) = | 65 fun con (c, s) = |
103 in | 107 in |
104 List.filter (fn (DCon (_, n, _, _), _) => IS.member (#con s, n) | 108 List.filter (fn (DCon (_, n, _, _), _) => IS.member (#con s, n) |
105 | (DDatatype (_, n, _, _), _) => IS.member (#con s, n) | 109 | (DDatatype (_, n, _, _), _) => IS.member (#con s, n) |
106 | (DVal (_, n, _, _, _), _) => IS.member (#exp s, n) | 110 | (DVal (_, n, _, _, _), _) => IS.member (#exp s, n) |
107 | (DValRec vis, _) => List.exists (fn (_, n, _, _, _) => IS.member (#exp s, n)) vis | 111 | (DValRec vis, _) => List.exists (fn (_, n, _, _, _) => IS.member (#exp s, n)) vis |
108 | (DExport _, _) => true) file | 112 | (DExport _, _) => true |
113 | (DTable _, _) => true) file | |
109 end | 114 end |
110 | 115 |
111 end | 116 end |