summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/cjr_print.sml25
1 files changed, 13 insertions, 12 deletions
diff --git a/src/cjr_print.sml b/src/cjr_print.sml
index ee7792a5..bbbe5c8b 100644
--- a/src/cjr_print.sml
+++ b/src/cjr_print.sml
@@ -2603,18 +2603,19 @@ fun p_file env (ds, ps) =
global_initializers := [])
(* First, pull out all of the enumerated types, to be declared first. *)
- val (ds, enums) = ListUtil.foldlMap (fn (d, enums) =>
- case #1 d of
- DDatatype dts =>
- let
- val (enum, other) = List.partition (fn (Enum, _, _, _) => true
- | _ => false) dts
- in
- ((DDatatype other, #2 d),
- List.revAppend (enum, enums))
- end
- | _ => (d, enums))
- [] ds
+ val (ds, enums) = ListUtil.foldlMapPartial (fn (d, enums) =>
+ case #1 d of
+ DDatatype dts =>
+ let
+ val (enum, other) = List.partition (fn (Enum, _, _, _) => true
+ | _ => false) dts
+ in
+ (SOME (DDatatype other, #2 d),
+ List.revAppend (enum, enums))
+ end
+ | DDatatypeForward (Enum, _, _) => (NONE, enums)
+ | _ => (SOME d, enums))
+ [] ds
val ds = (DDatatype enums, ErrorMsg.dummySpan) :: ds