Skip to content

Commit ce457e1

Browse files
committed
Get rid of EscapeDebugInner.
1 parent 49a8ba0 commit ce457e1

File tree

4 files changed

+210
-92
lines changed

4 files changed

+210
-92
lines changed

library/core/src/ascii.rs

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,10 @@
99
1010
#![stable(feature = "core_ascii", since = "1.26.0")]
1111

12+
use crate::escape::{AlwaysEscaped, EscapeIterInner};
13+
use crate::fmt;
1214
use crate::iter::FusedIterator;
1315
use crate::num::NonZero;
14-
use crate::{escape, fmt};
1516

1617
mod ascii_char;
1718
#[unstable(feature = "ascii_char", issue = "110998")]
@@ -24,7 +25,7 @@ pub use ascii_char::AsciiChar as Char;
2425
#[must_use = "iterators are lazy and do nothing unless consumed"]
2526
#[stable(feature = "rust1", since = "1.0.0")]
2627
#[derive(Clone)]
27-
pub struct EscapeDefault(escape::EscapeIterInner<4>);
28+
pub struct EscapeDefault(EscapeIterInner<4, AlwaysEscaped>);
2829

2930
/// Returns an iterator that produces an escaped version of a `u8`.
3031
///
@@ -96,17 +97,12 @@ pub fn escape_default(c: u8) -> EscapeDefault {
9697
impl EscapeDefault {
9798
#[inline]
9899
pub(crate) const fn new(c: u8) -> Self {
99-
Self(escape::EscapeIterInner::ascii(c))
100+
Self(EscapeIterInner::ascii(c))
100101
}
101102

102103
#[inline]
103104
pub(crate) fn empty() -> Self {
104-
Self(escape::EscapeIterInner::empty())
105-
}
106-
107-
#[inline]
108-
pub(crate) fn as_str(&self) -> &str {
109-
self.0.as_str()
105+
Self(EscapeIterInner::empty())
110106
}
111107
}
112108

@@ -168,7 +164,7 @@ impl FusedIterator for EscapeDefault {}
168164
#[stable(feature = "ascii_escape_display", since = "1.39.0")]
169165
impl fmt::Display for EscapeDefault {
170166
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
171-
f.write_str(self.0.as_str())
167+
fmt::Display::fmt(&self.0, f)
172168
}
173169
}
174170

library/core/src/char/mod.rs

Lines changed: 19 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ pub use self::methods::{encode_utf8_raw, encode_utf8_raw_unchecked}; // perma-un
4444
use crate::ascii;
4545
pub(crate) use self::methods::EscapeDebugExtArgs;
4646
use crate::error::Error;
47-
use crate::escape;
47+
use crate::escape::{AlwaysEscaped, EscapeIterInner, MaybeEscaped};
4848
use crate::fmt::{self, Write};
4949
use crate::iter::{FusedIterator, TrustedLen, TrustedRandomAccess, TrustedRandomAccessNoCoerce};
5050
use crate::num::NonZero;
@@ -161,12 +161,12 @@ pub const fn from_digit(num: u32, radix: u32) -> Option<char> {
161161
/// [`escape_unicode`]: char::escape_unicode
162162
#[derive(Clone, Debug)]
163163
#[stable(feature = "rust1", since = "1.0.0")]
164-
pub struct EscapeUnicode(escape::EscapeIterInner<10>);
164+
pub struct EscapeUnicode(EscapeIterInner<10, AlwaysEscaped>);
165165

166166
impl EscapeUnicode {
167167
#[inline]
168168
const fn new(c: char) -> Self {
169-
Self(escape::EscapeIterInner::unicode(c))
169+
Self(EscapeIterInner::unicode(c))
170170
}
171171
}
172172

@@ -215,7 +215,7 @@ impl FusedIterator for EscapeUnicode {}
215215
#[stable(feature = "char_struct_display", since = "1.16.0")]
216216
impl fmt::Display for EscapeUnicode {
217217
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
218-
f.write_str(self.0.as_str())
218+
fmt::Display::fmt(&self.0, f)
219219
}
220220
}
221221

@@ -227,22 +227,22 @@ impl fmt::Display for EscapeUnicode {
227227
/// [`escape_default`]: char::escape_default
228228
#[derive(Clone, Debug)]
229229
#[stable(feature = "rust1", since = "1.0.0")]
230-
pub struct EscapeDefault(escape::EscapeIterInner<10>);
230+
pub struct EscapeDefault(EscapeIterInner<10, AlwaysEscaped>);
231231

232232
impl EscapeDefault {
233233
#[inline]
234234
const fn printable(c: ascii::Char) -> Self {
235-
Self(escape::EscapeIterInner::ascii(c.to_u8()))
235+
Self(EscapeIterInner::ascii(c.to_u8()))
236236
}
237237

238238
#[inline]
239239
const fn backslash(c: ascii::Char) -> Self {
240-
Self(escape::EscapeIterInner::backslash(c))
240+
Self(EscapeIterInner::backslash(c))
241241
}
242242

243243
#[inline]
244244
const fn unicode(c: char) -> Self {
245-
Self(escape::EscapeIterInner::unicode(c))
245+
Self(EscapeIterInner::unicode(c))
246246
}
247247
}
248248

@@ -290,8 +290,9 @@ impl FusedIterator for EscapeDefault {}
290290

291291
#[stable(feature = "char_struct_display", since = "1.16.0")]
292292
impl fmt::Display for EscapeDefault {
293+
#[inline]
293294
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
294-
f.write_str(self.0.as_str())
295+
fmt::Display::fmt(&self.0, f)
295296
}
296297
}
297298

@@ -303,37 +304,22 @@ impl fmt::Display for EscapeDefault {
303304
/// [`escape_debug`]: char::escape_debug
304305
#[stable(feature = "char_escape_debug", since = "1.20.0")]
305306
#[derive(Clone, Debug)]
306-
pub struct EscapeDebug(EscapeDebugInner);
307-
308-
#[derive(Clone, Debug)]
309-
// Note: It’s possible to manually encode the EscapeDebugInner inside of
310-
// EscapeIterInner (e.g. with alive=254..255 indicating that data[0..4] holds
311-
// a char) which would likely result in a more optimised code. For now we use
312-
// the option easier to implement.
313-
enum EscapeDebugInner {
314-
Bytes(escape::EscapeIterInner<10>),
315-
Char(char),
316-
}
307+
pub struct EscapeDebug(EscapeIterInner<10, MaybeEscaped>);
317308

318309
impl EscapeDebug {
319310
#[inline]
320311
const fn printable(chr: char) -> Self {
321-
Self(EscapeDebugInner::Char(chr))
312+
Self(EscapeIterInner::printable(chr))
322313
}
323314

324315
#[inline]
325316
const fn backslash(c: ascii::Char) -> Self {
326-
Self(EscapeDebugInner::Bytes(escape::EscapeIterInner::backslash(c)))
317+
Self(EscapeIterInner::backslash(c))
327318
}
328319

329320
#[inline]
330321
const fn unicode(c: char) -> Self {
331-
Self(EscapeDebugInner::Bytes(escape::EscapeIterInner::unicode(c)))
332-
}
333-
334-
#[inline]
335-
fn clear(&mut self) {
336-
self.0 = EscapeDebugInner::Bytes(escape::EscapeIterInner::empty());
322+
Self(EscapeIterInner::unicode(c))
337323
}
338324
}
339325

@@ -343,13 +329,7 @@ impl Iterator for EscapeDebug {
343329

344330
#[inline]
345331
fn next(&mut self) -> Option<char> {
346-
match self.0 {
347-
EscapeDebugInner::Bytes(ref mut bytes) => bytes.next().map(char::from),
348-
EscapeDebugInner::Char(chr) => {
349-
self.clear();
350-
Some(chr)
351-
}
352-
}
332+
self.0.next()
353333
}
354334

355335
#[inline]
@@ -367,10 +347,7 @@ impl Iterator for EscapeDebug {
367347
#[stable(feature = "char_escape_debug", since = "1.20.0")]
368348
impl ExactSizeIterator for EscapeDebug {
369349
fn len(&self) -> usize {
370-
match &self.0 {
371-
EscapeDebugInner::Bytes(bytes) => bytes.len(),
372-
EscapeDebugInner::Char(_) => 1,
373-
}
350+
self.0.len()
374351
}
375352
}
376353

@@ -379,11 +356,9 @@ impl FusedIterator for EscapeDebug {}
379356

380357
#[stable(feature = "char_escape_debug", since = "1.20.0")]
381358
impl fmt::Display for EscapeDebug {
359+
#[inline]
382360
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
383-
match &self.0 {
384-
EscapeDebugInner::Bytes(bytes) => f.write_str(bytes.as_str()),
385-
EscapeDebugInner::Char(chr) => f.write_char(*chr),
386-
}
361+
fmt::Display::fmt(&self.0, f)
387362
}
388363
}
389364

@@ -480,6 +455,7 @@ macro_rules! casemappingiter_impls {
480455

481456
#[stable(feature = "char_struct_display", since = "1.16.0")]
482457
impl fmt::Display for $ITER_NAME {
458+
#[inline]
483459
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
484460
fmt::Display::fmt(&self.0, f)
485461
}

0 commit comments

Comments
 (0)