diff options
author | Xavier Leroy <xavier.leroy@inria.fr> | 1998-04-15 17:46:35 +0000 |
---|---|---|
committer | Xavier Leroy <xavier.leroy@inria.fr> | 1998-04-15 17:46:35 +0000 |
commit | b19c2dbdd061056f6a2ce30eaaeff85a919eea8f (patch) | |
tree | f878bb95dfa1acb5a573340f2f3ee43b12c7d877 | |
parent | 648be3084bf5c20782f4a8c67d77872debd116cd (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.ml | 9 |
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) |