src/Tools/Code/code_target.ML
changeset 37844 f26becedaeb1
parent 37840 a3632a0b7d6c
child 37863 7f113caabcf4
child 37876 48116a1764c5
--- a/src/Tools/Code/code_target.ML	Fri Jul 16 13:58:37 2010 +0200
+++ b/src/Tools/Code/code_target.ML	Fri Jul 16 14:11:08 2010 +0200
@@ -425,32 +425,32 @@
 fun read_inst thy (raw_tyco, raw_class) =
   (read_class thy raw_class, read_tyco thy raw_tyco);
 
-fun gen_add_syntax (mapp, upd, del) prep_x prep_syn check target raw_x some_raw_syn thy =
+fun gen_add_syntax (mapp, upd, del) prep_x prep_syn target raw_x some_raw_syn thy =
   let
     val x = prep_x thy raw_x;
-    fun make_syn raw_syn = (check thy x raw_syn: unit; prep_syn raw_syn);
-  in case some_raw_syn
-   of SOME raw_syn => (map_name_syntax target o mapp) (upd (x, make_syn raw_syn)) thy
-    | NONE => (map_name_syntax target o mapp) (del x) thy
-  end;
+    val change = case some_raw_syn
+     of SOME raw_syn => upd (x, prep_syn thy x raw_syn)
+      | NONE => del x;
+  in (map_name_syntax target o mapp) change thy end;
 
 fun gen_add_syntax_class prep_class =
-  gen_add_syntax (apfst o apfst, Symtab.update, Symtab.delete_safe) prep_class I ((K o K o K) ());
+  gen_add_syntax (apfst o apfst, Symtab.update, Symtab.delete_safe) prep_class ((K o K) I);
 
 fun gen_add_syntax_inst prep_inst =
-  gen_add_syntax (apfst o apsnd, Symreltab.update, Symreltab.delete_safe) prep_inst I ((K o K o K) ());
+  gen_add_syntax (apfst o apsnd, Symreltab.update, Symreltab.delete_safe) prep_inst ((K o K) I);
 
 fun gen_add_syntax_tyco prep_tyco =
-  gen_add_syntax (apsnd o apfst, Symtab.update, Symtab.delete_safe) prep_tyco I
-    (fn thy => fn tyco => fn (n, _) => if n <> Sign.arity_number thy tyco
+  gen_add_syntax (apsnd o apfst, Symtab.update, Symtab.delete_safe) prep_tyco
+    (fn thy => fn tyco => fn syn => if fst syn <> Sign.arity_number thy tyco
       then error ("Number of arguments mismatch in syntax for type constructor " ^ quote tyco)
-      else ());
+      else syn);
 
-fun gen_add_syntax_const prep_const prep_syn check_raw_syn =
-  gen_add_syntax (apsnd o apsnd, Symtab.update, Symtab.delete_safe) prep_const prep_syn
-    (fn thy => fn c => fn (n, _) => if n > Code.args_number thy c
+fun gen_add_syntax_const prep_const prep_syn =
+  gen_add_syntax (apsnd o apsnd, Symtab.update, Symtab.delete_safe) prep_const
+    (fn thy => fn c => fn raw_syn => let val syn = prep_syn raw_syn in
+      if fst syn > Code.args_number thy c
       then error ("Too many arguments in syntax for constant " ^ quote c)
-      else ()) check_raw_syn;
+      else syn end);
 
 fun add_reserved target =
   let