@@ -338,23 +338,19 @@ pub struct Arguments<'a> {
|
338 | 338 | impl<'a> Arguments<'a> { |
339 | 339 | #[inline] |
340 | 340 | #[rustc_const_unstable(feature = "const_fmt_arguments_new", issue = "none")] |
341 | | -pub const fn new_const(pieces: &'a [&'static str]) -> Self { |
342 | | -if pieces.len() > 1 { |
343 | | -// Since panic!() expands to panic_fmt(format_args!()), using panic! here is both a |
344 | | -// bit silly and also significantly increases the amount of MIR generated by panics. |
345 | | -crate::panicking::panic_nounwind("invalid args"); |
346 | | -} |
| 341 | +pub const fn new_const<const N: usize>(pieces: &'a [&'static str; N]) -> Self { |
| 342 | +const { assert!(N <= 1) }; |
347 | 343 | Arguments { pieces, fmt: None, args: &[] } |
348 | 344 | } |
349 | 345 | |
350 | 346 | /// When using the format_args!() macro, this function is used to generate the |
351 | 347 | /// Arguments structure. |
352 | 348 | #[inline] |
353 | | -pub fn new_v1(pieces: &'a [&'static str], args: &'a [rt::Argument<'a>]) -> Arguments<'a> { |
354 | | -if pieces.len() < args.len() || pieces.len() > args.len() + 1 { |
355 | | - // See Arguments::new_const for why we don't use panic!. |
356 | | - crate::panicking::panic_nounwind("invalid args"); |
357 | | -} |
| 349 | +pub fn new_v1<const P: usize, const A: usize>( |
| 350 | +pieces: &'a [&'static str; P], |
| 351 | +args: &'a [rt::Argument<'a>; A], |
| 352 | +) -> Arguments<'a> { |
| 353 | +const { assert!(P >= A && P <= A + 1, "invalid args") } |
358 | 354 | Arguments { pieces, fmt: None, args } |
359 | 355 | } |
360 | 356 | |
|