diff --git a/tests/snippets/builtin_ascii.py b/tests/snippets/builtin_ascii.py index 694c1916c..2132723c6 100644 --- a/tests/snippets/builtin_ascii.py +++ b/tests/snippets/builtin_ascii.py @@ -1,4 +1,7 @@ assert ascii('hello world') == "'hello world'" assert ascii('안녕 세상') == "'\\uc548\\ub155 \\uc138\\uc0c1'" assert ascii('안녕 RustPython') == "'\\uc548\\ub155 RustPython'" -assert ascii(5) == '5' \ No newline at end of file +assert ascii(5) == '5' +assert ascii(chr(0x10001)) == "'\\U00010001'" +assert ascii(chr(0x9999)) == "'\\u9999'" +assert ascii(chr(0x0A)) == "'\\n'" \ No newline at end of file diff --git a/vm/src/builtins.rs b/vm/src/builtins.rs index 0affb002d..a6a041a00 100644 --- a/vm/src/builtins.rs +++ b/vm/src/builtins.rs @@ -66,7 +66,12 @@ fn builtin_ascii(obj: PyObjectRef, vm: &VirtualMachine) -> PyResult { if c.is_ascii() { ascii.push(c) } else { - let hex = format!("\\u{:x}", c as i64); + let c = c as i64; + let hex = if c < 0x10000 { + format!("\\u{:04x}", c) + } else { + format!("\\U{:08x}", c) + }; ascii.push_str(&hex) } }