[MLton-commit] r7541
Matthew Fluet
fluet at mlton.org
Fri Jun 10 12:46:04 PDT 2011
Check sizes of word constants in case expressions in SSA and SSA2 ILs.
----------------------------------------------------------------------
U mlton/trunk/mlton/ssa/analyze.fun
U mlton/trunk/mlton/ssa/analyze2.fun
----------------------------------------------------------------------
Modified: mlton/trunk/mlton/ssa/analyze.fun
===================================================================
--- mlton/trunk/mlton/ssa/analyze.fun 2011-06-10 19:45:59 UTC (rev 7540)
+++ mlton/trunk/mlton/ssa/analyze.fun 2011-06-10 19:46:02 UTC (rev 7541)
@@ -1,4 +1,5 @@
-(* Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh
+(* Copyright (C) 2011 Matthew Fluet.
+ * Copyright (C) 1999-2006 Henry Cejtin, Matthew Fluet, Suresh
* Jagannathan, and Stephen Weeks.
* Copyright (C) 1997-2000 NEC Research Institute.
*
@@ -126,23 +127,34 @@
end
| Case {test, cases, default, ...} =>
- let val test = value test
+ let
+ val test = value test
fun ensureNullary j =
if 0 = Vector.length (labelValues j)
then ()
else Error.bug (concat ["Analyze.loopTransfer: Case:",
Label.toString j,
" must be nullary"])
- fun doit (s, cs, filter: 'a * 'b -> unit) =
- (filter (test, s)
- ; Vector.foreach (cs, fn (_, j) => ensureNullary j))
+ fun ensureSize (w, s) =
+ if WordSize.equals (s, WordX.size w)
+ then ()
+ else Error.bug (concat ["Analyze.loopTransfer: Case:",
+ WordX.toString w,
+ " must be size ",
+ WordSize.toString s])
+ fun doitWord (s, cs) =
+ (ignore (filterWord (test, s))
+ ; Vector.foreach (cs, fn (w, j) =>
+ (ensureSize (w, s)
+ ; ensureNullary j)))
+ fun doitCon cs =
+ Vector.foreach (cs, fn (c, j) =>
+ filter (test, c, labelValues j))
datatype z = datatype Cases.t
val _ =
case cases of
- Con cases =>
- Vector.foreach (cases, fn (c, j) =>
- filter (test, c, labelValues j))
- | Word (s, cs) => doit (s, cs, filterWord)
+ Con cs => doitCon cs
+ | Word (s, cs) => doitWord (s, cs)
val _ = Option.app (default, ensureNullary)
in ()
end
Modified: mlton/trunk/mlton/ssa/analyze2.fun
===================================================================
--- mlton/trunk/mlton/ssa/analyze2.fun 2011-06-10 19:45:59 UTC (rev 7540)
+++ mlton/trunk/mlton/ssa/analyze2.fun 2011-06-10 19:46:02 UTC (rev 7541)
@@ -1,4 +1,5 @@
-(* Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh
+(* Copyright (C) 2011 Matthew Fluet.
+ * Copyright (C) 1999-2007 Henry Cejtin, Matthew Fluet, Suresh
* Jagannathan, and Stephen Weeks.
* Copyright (C) 1997-2000 NEC Research Institute.
*
@@ -123,35 +124,46 @@
end
| Case {test, cases, default, ...} =>
- let val test = value test
+ let
+ val test = value test
+ fun ensureSize (w, s) =
+ if WordSize.equals (s, WordX.size w)
+ then ()
+ else Error.bug (concat ["Analyze.loopTransfer: Case:",
+ WordX.toString w,
+ " must be size ",
+ WordSize.toString s])
fun ensureNullary j =
if 0 = Vector.length (labelValues j)
then ()
else Error.bug (concat ["Analyze2.loopTransfer: Case:",
Label.toString j,
" must be nullary"])
- fun doit (s, cs, filter: 'a * 'b -> unit) =
- (filter (test, s)
- ; Vector.foreach (cs, fn (_, j) => ensureNullary j))
+ fun doitWord (s, cs) =
+ (ignore (filterWord (test, s))
+ ; Vector.foreach (cs, fn (w, j) =>
+ (ensureSize (w, s)
+ ; ensureNullary j)))
+ fun doitCon cs =
+ Vector.foreach
+ (cs, fn (c, j) =>
+ let
+ val v = labelValues j
+ val variant =
+ case Vector.length v of
+ 0 => NONE
+ | 1 => SOME (Vector.sub (v, 0))
+ | _ => Error.bug "Analyze2.loopTransfer: Case:conApp with >1 arg"
+ in
+ filter {con = c,
+ test = test,
+ variant = variant}
+ end)
datatype z = datatype Cases.t
val _ =
case cases of
- Con cases =>
- Vector.foreach
- (cases, fn (c, j) =>
- let
- val v = labelValues j
- val variant =
- case Vector.length v of
- 0 => NONE
- | 1 => SOME (Vector.sub (v, 0))
- | _ => Error.bug "Analyze2.loopTransfer: Case:conApp with >1 arg"
- in
- filter {con = c,
- test = test,
- variant = variant}
- end)
- | Word (s, cs) => doit (s, cs, filterWord)
+ Con cs => doitCon cs
+ | Word (s, cs) => doitWord (s, cs)
val _ = Option.app (default, ensureNullary)
in ()
end
More information about the MLton-commit
mailing list