246 let |
246 let |
247 val fmts = List.mapPartial xprod_to_fmt xprods; |
247 val fmts = List.mapPartial xprod_to_fmt xprods; |
248 val tab = fold f fmts (mode_tab prtabs mode); |
248 val tab = fold f fmts (mode_tab prtabs mode); |
249 in AList.update (op =) (mode, tab) prtabs end; |
249 in AList.update (op =) (mode, tab) prtabs end; |
250 |
250 |
251 fun extend_prtabs m = change_prtabs (curry Symtab.update_multi) m; |
251 fun extend_prtabs m = change_prtabs Symtab.curried_update_multi m; |
252 fun remove_prtabs m = change_prtabs (Symtab.remove_multi (op =)) m; |
252 fun remove_prtabs m = change_prtabs (Symtab.remove_multi (op =)) m; |
253 |
253 |
254 fun merge_prtabs prtabs1 prtabs2 = |
254 fun merge_prtabs prtabs1 prtabs2 = |
255 let |
255 let |
256 val modes = distinct (map fst (prtabs1 @ prtabs2)); |
256 val modes = distinct (map fst (prtabs1 @ prtabs2)); |
328 let |
328 let |
329 val nargs = length args; |
329 val nargs = length args; |
330 |
330 |
331 (*find matching table entry, or print as prefix / postfix*) |
331 (*find matching table entry, or print as prefix / postfix*) |
332 fun prnt ([], []) = prefixT tup |
332 fun prnt ([], []) = prefixT tup |
333 | prnt ([], tb :: tbs) = prnt (Symtab.lookup_multi (tb, a), tbs) |
333 | prnt ([], tb :: tbs) = prnt (Symtab.curried_lookup_multi tb a, tbs) |
334 | prnt ((pr, n, p') :: prnps, tbs) = |
334 | prnt ((pr, n, p') :: prnps, tbs) = |
335 if nargs = n then parT (pr, args, p, p') |
335 if nargs = n then parT (pr, args, p, p') |
336 else if nargs > n andalso not type_mode then |
336 else if nargs > n andalso not type_mode then |
337 astT (appT (splitT n ([c], args)), p) |
337 astT (appT (splitT n ([c], args)), p) |
338 else prnt (prnps, tbs); |
338 else prnt (prnps, tbs); |