diff options
| author | herbelin | 2006-01-04 16:16:31 +0000 |
|---|---|---|
| committer | herbelin | 2006-01-04 16:16:31 +0000 |
| commit | a654c3d6b12ba834fd2a00ea34179a5123045d38 (patch) | |
| tree | 63d115982e72fa8d44229c99f8c444cd248002df | |
| parent | 741a761f3fc30f1ef8243a37eeccf6eb9ca47169 (diff) | |
Achèvement du commit incomplet de la révision 1.110 (cvs log toplevel/metasyntax.ml) sur les formats de notations récursives + ajout de cassure par défaut en cas de notation récursive sans séparateurs
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@7783 85f007b7-540e-0410-9357-904b9bb8a0f7
| -rw-r--r-- | toplevel/metasyntax.ml | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/toplevel/metasyntax.ml b/toplevel/metasyntax.ml index 97a6c4ca96..bb6333ffcb 100644 --- a/toplevel/metasyntax.ml +++ b/toplevel/metasyntax.ml @@ -475,8 +475,12 @@ let make_hunks etyps symbols from = | SProdList (m,sl) :: prods -> let i = list_index m vars in let _,prec = precedence_of_entry_type from (List.nth typs (i-1)) in - (* We add NonTerminal for simulation but remove it afterwards *) - let _,sl' = list_sep_last (make NoBreak (sl@[NonTerminal m])) in + let sl' = + (* If no separator: add a break *) + if sl = [] then add_break 1 [] + (* We add NonTerminal for simulation but remove it afterwards *) + else snd (list_sep_last (make NoBreak (sl@[NonTerminal m]))) + in UnpListMetaVar (i,prec,sl') :: make CanBreak prods | [] -> [] @@ -536,6 +540,14 @@ let hunks_of_format (from,(vars,typs)) symfmt = symbs', UnpBox (a,b') :: l | symbs, (UnpCut _ as u) :: fmt -> let symbs, l = aux (symbs,fmt) in symbs, u :: l + | SProdList (m,sl) :: symbs, fmt -> + let i = list_index m vars in + let _,prec = precedence_of_entry_type from (List.nth typs (i-1)) in + let slfmt,fmt = read_recursive_format sl fmt in + let sl, slfmt = aux (sl,slfmt) in + if sl <> [] then error_format (); + let symbs, l = aux (symbs,fmt) in + symbs, UnpListMetaVar (i,prec,slfmt) :: l | symbs, [] -> symbs, [] | _, _ -> error_format () in |
