src/Tools/Code/code_ml.ML
changeset 59456 180555df34ea
parent 59323 468bd3aedfa1
child 61129 774752af4a1f
equal deleted inserted replaced
59455:2bd467b71d15 59456:180555df34ea
    48   | tuplify print fxy [x] = SOME (print fxy x)
    48   | tuplify print fxy [x] = SOME (print fxy x)
    49   | tuplify print _ xs = SOME (enum "," "(" ")" (map (print NOBR) xs));
    49   | tuplify print _ xs = SOME (enum "," "(" ")" (map (print NOBR) xs));
    50 
    50 
    51 
    51 
    52 (** SML serializer **)
    52 (** SML serializer **)
       
    53 
       
    54 fun print_char_any_ml s =
       
    55   if Symbol.is_char s then ML_Syntax.print_char s else "\\092" ^ unprefix "\\" s;
       
    56 
       
    57 val print_string_any_ml = quote o implode o map print_char_any_ml o Symbol.explode;
    53 
    58 
    54 fun print_sml_stmt tyco_syntax const_syntax reserved is_constr deresolve =
    59 fun print_sml_stmt tyco_syntax const_syntax reserved is_constr deresolve =
    55   let
    60   let
    56     val deresolve_const = deresolve o Constant;
    61     val deresolve_const = deresolve o Constant;
    57     val deresolve_class = deresolve o Type_Class;
    62     val deresolve_class = deresolve o Type_Class;
   248             :: deresolve_const const
   253             :: deresolve_const const
   249             :: replicate n "_"
   254             :: replicate n "_"
   250             @ "="
   255             @ "="
   251             :: "raise"
   256             :: "raise"
   252             :: "Fail"
   257             :: "Fail"
   253             @@ ML_Syntax.print_string const
   258             @@ print_string_any_ml const
   254           ))
   259           ))
   255       | print_stmt _ (ML_Val binding) =
   260       | print_stmt _ (ML_Val binding) =
   256           let
   261           let
   257             val (sig_p, p) = print_def (K false) true "val" binding
   262             val (sig_p, p) = print_def (K false) true "val" binding
   258           in pair
   263           in pair
   352     @| str ("end; (*struct " ^ name ^ "*)")
   357     @| str ("end; (*struct " ^ name ^ "*)")
   353   );
   358   );
   354 
   359 
   355 val literals_sml = Literals {
   360 val literals_sml = Literals {
   356   literal_char = prefix "#" o quote o ML_Syntax.print_char,
   361   literal_char = prefix "#" o quote o ML_Syntax.print_char,
   357   literal_string = quote o translate_string ML_Syntax.print_char,
   362   literal_string = print_string_any_ml,
   358   literal_numeral = fn k => "(" ^ string_of_int k ^ " : IntInf.int)",
   363   literal_numeral = fn k => "(" ^ string_of_int k ^ " : IntInf.int)",
   359   literal_list = enum "," "[" "]",
   364   literal_list = enum "," "[" "]",
   360   infix_cons = (7, "::")
   365   infix_cons = (7, "::")
   361 };
   366 };
   362 
   367