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