src/HOL/Tools/string_code.ML
changeset 52435 6646bb548c6b
parent 51160 599ff65b85e2
child 55147 bce3dbc11f95
equal deleted inserted replaced
52434:cbb94074682b 52435:6646bb548c6b
    56              of SOME p => p
    56              of SOME p => p
    57               | NONE =>
    57               | NONE =>
    58                   Code_Printer.literal_list literals (map (pr vars Code_Printer.NOBR) ts))
    58                   Code_Printer.literal_list literals (map (pr vars Code_Printer.NOBR) ts))
    59         | NONE =>
    59         | NONE =>
    60             List_Code.default_list (Code_Printer.infix_cons literals) (pr vars) fxy t1 t2;
    60             List_Code.default_list (Code_Printer.infix_cons literals) (pr vars) fxy t1 t2;
    61   in Code_Target.add_const_syntax target
    61   in
    62     @{const_name Cons} (SOME (Code_Printer.complex_const_syntax (2, (cs_summa, pretty))))
    62     Code_Target.set_printings (Code_Symbol.Constant (@{const_name Cons},
       
    63       [(target, SOME (Code_Printer.complex_const_syntax (2, (cs_summa, pretty))))]))
    63   end;
    64   end;
    64 
    65 
    65 fun add_literal_char target =
    66 fun add_literal_char target =
    66   let
    67   let
    67     fun pretty literals nibbles' _ thm _ _ [(t1, _), (t2, _)] =
    68     fun pretty literals nibbles' _ thm _ _ [(t1, _), (t2, _)] =
    68       case decode_char nibbles' (t1, t2)
    69       case decode_char nibbles' (t1, t2)
    69        of SOME c => (Code_Printer.str o Code_Printer.literal_char literals) c
    70        of SOME c => (Code_Printer.str o Code_Printer.literal_char literals) c
    70         | NONE => Code_Printer.eqn_error thm "Illegal character expression";
    71         | NONE => Code_Printer.eqn_error thm "Illegal character expression";
    71   in Code_Target.add_const_syntax target
    72   in
    72     @{const_name Char} (SOME (Code_Printer.complex_const_syntax (2, (cs_nibbles, pretty))))
    73     Code_Target.set_printings (Code_Symbol.Constant (@{const_name Char},
       
    74       [(target, SOME (Code_Printer.complex_const_syntax (2, (cs_nibbles, pretty))))]))
    73   end;
    75   end;
    74 
    76 
    75 fun add_literal_string target =
    77 fun add_literal_string target =
    76   let
    78   let
    77     fun pretty literals (nil' :: cons' :: char' :: nibbles') _ thm _ _ [(t, _)] =
    79     fun pretty literals (nil' :: cons' :: char' :: nibbles') _ thm _ _ [(t, _)] =
    78       case List_Code.implode_list nil' cons' t
    80       case List_Code.implode_list nil' cons' t
    79        of SOME ts => (case implode_string literals char' nibbles' ts
    81        of SOME ts => (case implode_string literals char' nibbles' ts
    80              of SOME p => p
    82              of SOME p => p
    81               | NONE => Code_Printer.eqn_error thm "Illegal message expression")
    83               | NONE => Code_Printer.eqn_error thm "Illegal message expression")
    82         | NONE => Code_Printer.eqn_error thm "Illegal message expression";
    84         | NONE => Code_Printer.eqn_error thm "Illegal message expression";
    83   in Code_Target.add_const_syntax target 
    85   in
    84     @{const_name STR} (SOME (Code_Printer.complex_const_syntax (1, (cs_summa, pretty))))
    86     Code_Target.set_printings (Code_Symbol.Constant (@{const_name STR},
       
    87       [(target, SOME (Code_Printer.complex_const_syntax (1, (cs_summa, pretty))))]))
    85   end;
    88   end;
    86 
    89 
    87 end;
    90 end;