accept and ignore '+' and '-' before precision integers
git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@14830 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02master
parent
8f7b47a137
commit
11fdab809d
|
@ -1421,11 +1421,22 @@ let fmt_ebb_of_string str =
|
|||
(_, _, e, f) fmt_ebb =
|
||||
fun pct_ind str_ind end_ind plus sharp space ign pad ->
|
||||
if str_ind = end_ind then unexpected_end_of_format end_ind;
|
||||
match str.[str_ind] with
|
||||
| '0' .. '9' ->
|
||||
let parse_literal str_ind =
|
||||
let new_ind, prec = parse_positive str_ind end_ind 0 in
|
||||
parse_conversion pct_ind (new_ind + 1) end_ind plus sharp space ign pad
|
||||
(Lit_precision prec) str.[new_ind]
|
||||
(Lit_precision prec) str.[new_ind] in
|
||||
match str.[str_ind] with
|
||||
| '0' .. '9' -> parse_literal str_ind
|
||||
| ('+' | '-') when legacy_behavior ->
|
||||
(* Legacy mode would accept and ignore '+' or '-' before the
|
||||
integer describing the desired precision; not that this
|
||||
cannot happen for padding width, as '+' and '-' already have
|
||||
a semantics there.
|
||||
|
||||
That said, the idea (supported by this tweak) that width and
|
||||
precision literals are "integer literals" in the OCaml sense is
|
||||
still blatantly wrong, as 123_456 or 0xFF are rejected. *)
|
||||
parse_literal (str_ind + 1)
|
||||
| '*' ->
|
||||
parse_after_precision pct_ind (str_ind + 1) end_ind plus sharp space ign
|
||||
pad Arg_precision
|
||||
|
|
|
@ -562,7 +562,7 @@ type prec_option = int option
|
|||
(* Type used in Format_subst_ty and Format_subst constructors as "a proof"
|
||||
of '->' number equality between two ('d, 'e) relations. *)
|
||||
(* See the scanf implementation of "%(...%)". *)
|
||||
(* Not meaningfull for Printf and Format since "%r" is Scanf specific. *)
|
||||
(* Not meaningful for Printf and Format since "%r" is Scanf specific. *)
|
||||
type ('d1, 'e1, 'd2, 'e2) reader_nb_unifier =
|
||||
| Zero_reader :
|
||||
('d1, 'd1, 'd2, 'd2) reader_nb_unifier
|
||||
|
|
Loading…
Reference in New Issue