diff -r e97b22500a5c -r 970e1466028d src/Tools/Code/code_ml.ML --- a/src/Tools/Code/code_ml.ML Fri Jan 22 13:38:28 2010 +0100 +++ b/src/Tools/Code/code_ml.ML Fri Jan 22 13:38:28 2010 +0100 @@ -354,9 +354,9 @@ val literals_sml = Literals { literal_char = prefix "#" o quote o ML_Syntax.print_char, literal_string = quote o translate_string ML_Syntax.print_char, - literal_numeral = fn unbounded => fn k => - if unbounded then "(" ^ string_of_int k ^ " : IntInf.int)" - else string_of_int k, + literal_numeral = fn k => "(" ^ string_of_int k ^ " : IntInf.int)", + literal_positive_numeral = fn k => "(" ^ string_of_int k ^ " : IntInf.int)", + literal_naive_numeral = string_of_int, literal_list = enum "," "[" "]", infix_cons = (7, "::") }; @@ -687,18 +687,17 @@ val s = if i < 32 orelse i = 34 orelse i = 39 orelse i = 92 orelse i > 126 then chr i else c in s end; - fun bignum_ocaml k = if k <= 1073741823 - then "(Big_int.big_int_of_int " ^ string_of_int k ^ ")" - else "(Big_int.big_int_of_string " ^ quote (string_of_int k) ^ ")" + fun numeral_ocaml k = if k < 0 + then "(Big_int.minus_big_int " ^ numeral_ocaml (~ k) ^ ")" + else if k <= 1073741823 + then "(Big_int.big_int_of_int " ^ string_of_int k ^ ")" + else "(Big_int.big_int_of_string " ^ quote (string_of_int k) ^ ")" in Literals { literal_char = Library.enclose "'" "'" o char_ocaml, literal_string = quote o translate_string char_ocaml, - literal_numeral = fn unbounded => fn k => if k >= 0 then - if unbounded then bignum_ocaml k - else string_of_int k - else - if unbounded then "(Big_int.minus_big_int " ^ bignum_ocaml (~ k) ^ ")" - else (Library.enclose "(" ")" o prefix "-" o string_of_int o op ~) k, + literal_numeral = numeral_ocaml, + literal_positive_numeral = numeral_ocaml, + literal_naive_numeral = numeral_ocaml, literal_list = enum ";" "[" "]", infix_cons = (6, "::") } end; @@ -975,7 +974,7 @@ ])) #> fold (Code_Target.add_reserved target_SML) ML_Syntax.reserved_names #> fold (Code_Target.add_reserved target_SML) - ["o" (*dictionary projections use it already*), "Fail", "div", "mod" (*standard infixes*)] + ["o" (*dictionary projections use it already*), "Fail", "div", "mod" (*standard infixes*), "IntInf"] #> fold (Code_Target.add_reserved target_OCaml) [ "and", "as", "assert", "begin", "class", "constraint", "do", "done", "downto", "else", "end", "exception", @@ -985,6 +984,6 @@ "sig", "struct", "then", "to", "true", "try", "type", "val", "virtual", "when", "while", "with" ] - #> fold (Code_Target.add_reserved target_OCaml) ["failwith", "mod"]; + #> fold (Code_Target.add_reserved target_OCaml) ["failwith", "mod", "Big_int"]; end; (*struct*)