diff options
-rw-r--r-- | pretyping/pattern.ml | 2 | ||||
-rw-r--r-- | pretyping/pattern.mli | 2 | ||||
-rw-r--r-- | tactics/tacinterp.ml | 2 |
3 files changed, 3 insertions, 3 deletions
diff --git a/pretyping/pattern.ml b/pretyping/pattern.ml index 1453aa218..979ecb0b1 100644 --- a/pretyping/pattern.ml +++ b/pretyping/pattern.ml @@ -132,7 +132,7 @@ let map_pattern_with_binders g f l = function let map_pattern f = map_pattern_with_binders (fun () -> ()) (fun () -> f) () let rec instantiate_pattern lvar = function - | PVar id as x -> (try List.assoc id lvar with Not_found -> x) + | PVar id as x -> (try Lazy.force(List.assoc id lvar) with Not_found -> x) | (PFix _ | PCoFix _) -> error ("Not instantiable pattern") | c -> map_pattern (instantiate_pattern lvar) c diff --git a/pretyping/pattern.mli b/pretyping/pattern.mli index 2ecb85ba4..ee0eefade 100644 --- a/pretyping/pattern.mli +++ b/pretyping/pattern.mli @@ -76,6 +76,6 @@ val pattern_of_rawconstr : rawconstr -> patvar list * constr_pattern val instantiate_pattern : - (identifier * constr_pattern) list -> constr_pattern -> constr_pattern + (identifier * constr_pattern Lazy.t) list -> constr_pattern -> constr_pattern val lift_pattern : int -> constr_pattern -> constr_pattern diff --git a/tactics/tacinterp.ml b/tactics/tacinterp.ml index fef9ba95a..0c7f65c2a 100644 --- a/tactics/tacinterp.ml +++ b/tactics/tacinterp.ml @@ -916,7 +916,7 @@ let give_context ctxt = function (* Reads a pattern by substituing vars of lfun *) let eval_pattern lfun c = - let lvar = List.map (fun (id,c) -> (id,pattern_of_constr c)) lfun in + let lvar = List.map (fun (id,c) -> (id,lazy(pattern_of_constr c))) lfun in instantiate_pattern lvar c let read_pattern evc env lfun = function |