From 97c2b41003076b099668430ca69df09a6c53f8c9 Mon Sep 17 00:00:00 2001 From: herbelin Date: Fri, 6 Feb 2009 10:48:02 +0000 Subject: Fixing #2044 (bad printing of primitive notation at the head of coercion to funclass) [added a new notation output test as the initial one is quite saturated in miscellaneous notations]. git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@11886 85f007b7-540e-0410-9357-904b9bb8a0f7 --- interp/constrextern.ml | 13 ++++++++++--- test-suite/output/Notations2.out | 2 ++ test-suite/output/Notations2.v | 7 +++++++ 3 files changed, 19 insertions(+), 3 deletions(-) create mode 100644 test-suite/output/Notations2.out create mode 100644 test-suite/output/Notations2.v diff --git a/interp/constrextern.ml b/interp/constrextern.ml index 237ffb55b8..91a9eeefaf 100644 --- a/interp/constrextern.ml +++ b/interp/constrextern.ml @@ -555,9 +555,16 @@ let rec remove_coercions inctx = function let l = list_skipn n args in let (a,l) = match l with a::l -> (a,l) | [] -> assert false in (* Recursively remove the head coercions *) - (match remove_coercions true a with - | RApp (_,a,l') -> RApp (loc,a,l'@l) - | a -> RApp (loc,a,l)) + let a' = remove_coercions true a in + (* Don't flatten App's in case of funclass so that + (atomic) notations on [a] work; should be compatible + since printer does not care whether App's are + collapsed or not and notations with an implicit + coercion using funclass either would have already + been confused with ordinary application or would have need + a surrounding context and the coercion to funclass would + have been made explicit to match *) + if l = [] then a' else RApp (loc,a',l) | _ -> c with Not_found -> c) | c -> c diff --git a/test-suite/output/Notations2.out b/test-suite/output/Notations2.out new file mode 100644 index 0000000000..8a18a9d855 --- /dev/null +++ b/test-suite/output/Notations2.out @@ -0,0 +1,2 @@ +2 3 + : PAIR diff --git a/test-suite/output/Notations2.v b/test-suite/output/Notations2.v new file mode 100644 index 0000000000..039771d5d5 --- /dev/null +++ b/test-suite/output/Notations2.v @@ -0,0 +1,7 @@ +(**********************************************************************) +(* Test call to primitive printers in presence of coercion to *) +(* functions (cf bug #2044) *) + +Inductive PAIR := P (n1:nat) (n2:nat). +Coercion P : nat >-> Funclass. +Check (2 3). -- cgit v1.2.3