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