Mercurial > urweb
comparison src/shake.sml @ 1112:7a31e0cf25e9
Proper C-side deserialization; Shake.sliceDb
author | Adam Chlipala <adamc@hcoop.net> |
---|---|
date | Sun, 03 Jan 2010 12:47:27 -0500 |
parents | 72670131dace |
children | c316ca3c9ec6 |
comparison
equal
deleted
inserted
replaced
1111:e1d738870086 | 1112:7a31e0cf25e9 |
---|---|
27 | 27 |
28 (* Remove unused definitions from a file *) | 28 (* Remove unused definitions from a file *) |
29 | 29 |
30 structure Shake :> SHAKE = struct | 30 structure Shake :> SHAKE = struct |
31 | 31 |
32 val sliceDb = ref false | |
33 | |
32 open Core | 34 open Core |
33 | 35 |
34 structure U = CoreUtil | 36 structure U = CoreUtil |
35 | 37 |
36 structure IS = IntBinarySet | 38 structure IS = IntBinarySet |
65 ENamed n => (IS.add (es, n), cs) | 67 ENamed n => (IS.add (es, n), cs) |
66 | _ => st} | 68 | _ => st} |
67 | 69 |
68 val (usedE, usedC) = | 70 val (usedE, usedC) = |
69 List.foldl | 71 List.foldl |
70 (fn ((DExport (_, n, _), _), (usedE, usedC)) => (IS.add (usedE, n), usedC) | 72 (fn ((DExport (_, n, _), _), st as (usedE, usedC)) => |
73 if !sliceDb then | |
74 st | |
75 else | |
76 (IS.add (usedE, n), usedC) | |
71 | ((DTable (_, _, c, _, pe, pc, ce, cc), _), (usedE, usedC)) => | 77 | ((DTable (_, _, c, _, pe, pc, ce, cc), _), (usedE, usedC)) => |
72 let | 78 let |
73 val usedC = usedVarsC usedC c | 79 val usedC = usedVarsC usedC c |
74 val usedC = usedVarsC usedC pc | 80 val usedC = usedVarsC usedC pc |
75 val usedC = usedVarsC usedC cc | 81 val usedC = usedVarsC usedC cc |
77 val (usedE, usedC) = usedVars (usedE, usedC) pe | 83 val (usedE, usedC) = usedVars (usedE, usedC) pe |
78 val (usedE, usedC) = usedVars (usedE, usedC) ce | 84 val (usedE, usedC) = usedVars (usedE, usedC) ce |
79 in | 85 in |
80 (usedE, usedC) | 86 (usedE, usedC) |
81 end | 87 end |
82 | ((DTask (e1, e2), _), st) => usedVars (usedVars st e1) e2 | 88 | ((DTask (e1, e2), _), st) => |
89 if !sliceDb then | |
90 st | |
91 else | |
92 usedVars (usedVars st e1) e2 | |
83 | (_, acc) => acc) (IS.empty, IS.empty) file | 93 | (_, acc) => acc) (IS.empty, IS.empty) file |
84 | 94 |
85 val (cdef, edef) = foldl (fn ((DCon (_, n, _, c), _), (cdef, edef)) => (IM.insert (cdef, n, [c]), edef) | 95 val (cdef, edef) = foldl (fn ((DCon (_, n, _, c), _), (cdef, edef)) => (IM.insert (cdef, n, [c]), edef) |
86 | ((DDatatype dts, _), (cdef, edef)) => | 96 | ((DDatatype dts, _), (cdef, edef)) => |
87 (foldl (fn ((_, n, _, xncs), cdef) => | 97 (foldl (fn ((_, n, _, xncs), cdef) => |
184 in | 194 in |
185 List.filter (fn (DCon (_, n, _, _), _) => IS.member (#con s, n) | 195 List.filter (fn (DCon (_, n, _, _), _) => IS.member (#con s, n) |
186 | (DDatatype dts, _) => List.exists (fn (_, n, _, _) => IS.member (#con s, n)) dts | 196 | (DDatatype dts, _) => List.exists (fn (_, n, _, _) => IS.member (#con s, n)) dts |
187 | (DVal (_, n, _, _, _), _) => IS.member (#exp s, n) | 197 | (DVal (_, n, _, _, _), _) => IS.member (#exp s, n) |
188 | (DValRec vis, _) => List.exists (fn (_, n, _, _, _) => IS.member (#exp s, n)) vis | 198 | (DValRec vis, _) => List.exists (fn (_, n, _, _, _) => IS.member (#exp s, n)) vis |
189 | (DExport _, _) => true | 199 | (DExport _, _) => not (!sliceDb) |
190 | (DView _, _) => true | 200 | (DView _, _) => true |
191 | (DSequence _, _) => true | 201 | (DSequence _, _) => true |
192 | (DTable _, _) => true | 202 | (DTable _, _) => true |
193 | (DDatabase _, _) => true | 203 | (DDatabase _, _) => not (!sliceDb) |
194 | (DCookie _, _) => true | 204 | (DCookie _, _) => not (!sliceDb) |
195 | (DStyle _, _) => true | 205 | (DStyle _, _) => not (!sliceDb) |
196 | (DTask _, _) => true) file | 206 | (DTask _, _) => not (!sliceDb)) file |
197 end | 207 end |
198 | 208 |
199 end | 209 end |