aboutsummaryrefslogtreecommitdiff
path: root/parsing
diff options
context:
space:
mode:
authorherbelin2009-07-15 10:52:40 +0000
committerherbelin2009-07-15 10:52:40 +0000
commit013fd8526b66aedff2a7ef4919bb9b2203ea89f1 (patch)
treefd4f4bd35926820a3c5c48bc320ee13c4e13624a /parsing
parent1cb6d3b235b03ccba046dee70b22d9f2e8dd8192 (diff)
- Granted wish #2138 (support for local binders in syntax of Record fields).
- Add tests related to commits 12229 (bug #2117) and 12241 (bug #2139). git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@12242 85f007b7-540e-0410-9357-904b9bb8a0f7
Diffstat (limited to 'parsing')
-rw-r--r--parsing/g_vernac.ml422
-rw-r--r--parsing/prettyp.ml6
2 files changed, 17 insertions, 11 deletions
diff --git a/parsing/g_vernac.ml4 b/parsing/g_vernac.ml4
index 5b4e9ce04a..387ee2b030 100644
--- a/parsing/g_vernac.ml4
+++ b/parsing/g_vernac.ml4
@@ -329,16 +329,22 @@ GEXTEND Gram
record_field:
[ [ bd = record_binder; ntn = decl_notation -> bd,ntn ] ]
;
+ record_binder_body:
+ [ [ l = binders_let; oc = of_type_with_opt_coercion;
+ t = lconstr -> fun id -> (oc,AssumExpr (id,mkCProdN loc l t))
+ | l = binders_let; oc = of_type_with_opt_coercion;
+ t = lconstr; ":="; b = lconstr -> fun id ->
+ (oc,DefExpr (id,mkCLambdaN loc l b,Some (mkCProdN loc l t)))
+ | l = binders_let; ":="; b = lconstr -> fun id ->
+ match b with
+ | CCast(_,b, Rawterm.CastConv (_, t)) ->
+ (false,DefExpr(id,mkCLambdaN loc l b,Some (mkCProdN loc l t)))
+ | _ ->
+ (false,DefExpr(id,mkCLambdaN loc l b,None)) ] ]
+ ;
record_binder:
[ [ id = name -> (false,AssumExpr(id,CHole (loc, None)))
- | id = name; oc = of_type_with_opt_coercion; t = lconstr ->
- (oc,AssumExpr (id,t))
- | id = name; oc = of_type_with_opt_coercion;
- t = lconstr; ":="; b = lconstr -> (oc,DefExpr (id,b,Some t))
- | id = name; ":="; b = lconstr ->
- match b with
- CCast(_,b, Rawterm.CastConv (_, t)) -> (false,DefExpr(id,b,Some t))
- | _ -> (false,DefExpr(id,b,None)) ] ]
+ | id = name; f = record_binder_body -> f id ] ]
;
assum_list:
[ [ bl = LIST1 assum_coe -> bl | b = simple_assum_coe -> [b] ] ]
diff --git a/parsing/prettyp.ml b/parsing/prettyp.ml
index f00e5f0a1d..cf88256bcd 100644
--- a/parsing/prettyp.ml
+++ b/parsing/prettyp.ml
@@ -350,10 +350,10 @@ let pr_record (sp,tyi) =
str ": " ++ pr_lconstr_env envpar arity ++ brk(1,2) ++
str ":= " ++ pr_id cstrnames.(0)) ++
brk(1,2) ++
- hv 2 (str "{" ++
- prlist_with_sep (fun () -> str ";" ++ brk(1,0))
+ hv 2 (str "{ " ++
+ prlist_with_sep (fun () -> str ";" ++ brk(2,0))
(fun (id,b,c) ->
- str " " ++ pr_id id ++ str (if b then " : " else " := ") ++
+ pr_id id ++ str (if b then " : " else " := ") ++
pr_lconstr_env envpar c) fields) ++ str" }")
let gallina_print_inductive sp =