summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorXavier Leroy <xavier.leroy@inria.fr>1998-04-15 17:46:35 +0000
committerXavier Leroy <xavier.leroy@inria.fr>1998-04-15 17:46:35 +0000
commitb19c2dbdd061056f6a2ce30eaaeff85a919eea8f (patch)
treef878bb95dfa1acb5a573340f2f3ee43b12c7d877
parent648be3084bf5c20782f4a8c67d77872debd116cd (diff)
Oubli d'un cas dans iter_pattern.
Bug dans le typage des formats du style "%" git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@1923 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
-rw-r--r--typing/typecore.ml9
1 files changed, 5 insertions, 4 deletions
diff --git a/typing/typecore.ml b/typing/typecore.ml
index f8bd2d949..b2597f7fc 100644
--- a/typing/typecore.ml
+++ b/typing/typecore.ml
@@ -221,6 +221,8 @@ let rec iter_pattern f p =
| Tpat_or (p, p') ->
iter_pattern f p;
iter_pattern f p'
+ | Tpat_array pl ->
+ List.iter (iter_pattern f) pl
(* Generalization criterion for expressions *)
@@ -261,9 +263,8 @@ let type_format loc fmt =
match fmt.[i] with
'%' ->
let j = skip_args(i+1) in
- begin match String.unsafe_get fmt j with
- (* We're using unsafe_get here so that if j = String.length fmt,
- we'll fall in the catch-all case of the match *)
+ if j >= len then raise(Error(loc, Bad_format "%"));
+ begin match fmt.[j] with
'%' ->
scan_format (j+1)
| 's' ->
@@ -780,7 +781,7 @@ and type_let env rec_flag spat_sexp_list =
List.iter2
(fun pat exp ->
if not (is_nonexpansive exp) then
- iter_pattern (fun pat ->make_nongen pat.pat_type) pat)
+ iter_pattern (fun pat -> make_nongen pat.pat_type) pat)
pat_list exp_list;
List.iter
(fun pat -> iter_pattern (fun pat -> generalize pat.pat_type) pat)