nanvm_lib/vm/string/
debug.rs1use crate::{
2 common::sized_index::SizedIndex,
3 vm::{IVm, String},
4};
5use core::{
6 fmt::{Debug, Formatter, Result, Write},
7 ops::RangeInclusive,
8};
9
10impl<A: IVm> Debug for String<A> {
11 fn fmt(&self, f: &mut Formatter<'_>) -> Result {
12 const DOUBLE_QUOTE: u16 = '"' as u16;
13 const BACKSLASH: u16 = '\\' as u16;
14 const PRINTABLE_ASCII: RangeInclusive<u16> = 0x20..=0x7F;
15 f.write_char('"')?;
16 for i in 0..self.length() {
17 match self[i] {
18 DOUBLE_QUOTE => f.write_str("\\\"")?,
19 BACKSLASH => f.write_str("\\\\")?,
20 c => {
21 if PRINTABLE_ASCII.contains(&c) {
22 f.write_char(c as u8 as char)?;
23 } else {
24 write!(f, "\\u{c:04X}")?;
25 }
26 }
27 }
28 }
29 f.write_char('"')
30 }
31}