From 4ee80a3d42a0d080fc7f06e94a15468653afb9d6 Mon Sep 17 00:00:00 2001 From: Dong-hee Na Date: Mon, 29 Jul 2019 01:23:40 +0900 Subject: [PATCH] builtin: Fix hex format of ascii --- tests/snippets/builtin_ascii.py | 3 ++- vm/src/builtins.rs | 9 ++++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/tests/snippets/builtin_ascii.py b/tests/snippets/builtin_ascii.py index 694c1916c..7610dd5af 100644 --- a/tests/snippets/builtin_ascii.py +++ b/tests/snippets/builtin_ascii.py @@ -1,4 +1,5 @@ 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'" \ No newline at end of file diff --git a/vm/src/builtins.rs b/vm/src/builtins.rs index 0affb002d..48f0408f1 100644 --- a/vm/src/builtins.rs +++ b/vm/src/builtins.rs @@ -64,10 +64,13 @@ fn builtin_ascii(obj: PyObjectRef, vm: &VirtualMachine) -> PyResult { let mut ascii = String::new(); for c in repr.value.chars() { if c.is_ascii() { - ascii.push(c) - } else { + ascii.push(c); + } else if (c as i64) < 0x10000 { let hex = format!("\\u{:x}", c as i64); - ascii.push_str(&hex) + ascii.push_str(&hex); + } else { + let hex = format!("\\U{:08x}", c as i64); + ascii.push_str(&hex); } } Ok(ascii)