diff options
| author | herbelin | 2009-07-15 10:52:40 +0000 |
|---|---|---|
| committer | herbelin | 2009-07-15 10:52:40 +0000 |
| commit | 013fd8526b66aedff2a7ef4919bb9b2203ea89f1 (patch) | |
| tree | fd4f4bd35926820a3c5c48bc320ee13c4e13624a /parsing | |
| parent | 1cb6d3b235b03ccba046dee70b22d9f2e8dd8192 (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.ml4 | 22 | ||||
| -rw-r--r-- | parsing/prettyp.ml | 6 |
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 = |
