From 4ee80a3d42a0d080fc7f06e94a15468653afb9d6 Mon Sep 17 00:00:00 2001 From: Dong-hee Na Date: Mon, 29 Jul 2019 01:23:40 +0900 Subject: [PATCH 1/3] 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 694c1916c74..7610dd5af26 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 0affb002d96..48f0408f1b1 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) From 5bfa4cec7c42fc3699c8a7d4110b58511d33bc91 Mon Sep 17 00:00:00 2001 From: Dong-hee Na Date: Wed, 31 Jul 2019 16:34:00 +0900 Subject: [PATCH 2/3] ascii: Improve test --- tests/snippets/builtin_ascii.py | 4 +++- vm/src/builtins.rs | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/tests/snippets/builtin_ascii.py b/tests/snippets/builtin_ascii.py index 7610dd5af26..2132723c6b2 100644 --- a/tests/snippets/builtin_ascii.py +++ b/tests/snippets/builtin_ascii.py @@ -2,4 +2,6 @@ assert ascii('안녕 세상') == "'\\uc548\\ub155 \\uc138\\uc0c1'" assert ascii('안녕 RustPython') == "'\\uc548\\ub155 RustPython'" assert ascii(5) == '5' -assert ascii(chr(0x10001)) == "'\\U00010001'" \ No newline at end of file +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 48f0408f1b1..0ac6946a7b3 100644 --- a/vm/src/builtins.rs +++ b/vm/src/builtins.rs @@ -66,7 +66,7 @@ fn builtin_ascii(obj: PyObjectRef, vm: &VirtualMachine) -> PyResult { if c.is_ascii() { ascii.push(c); } else if (c as i64) < 0x10000 { - let hex = format!("\\u{:x}", c as i64); + let hex = format!("\\u{:04x}", c as i64); ascii.push_str(&hex); } else { let hex = format!("\\U{:08x}", c as i64); From fafeed14502b9f79ccef1a17c2baddad0722125f Mon Sep 17 00:00:00 2001 From: Dong-hee Na Date: Wed, 31 Jul 2019 19:44:06 +0900 Subject: [PATCH 3/3] ascii: Apply codereview --- vm/src/builtins.rs | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/vm/src/builtins.rs b/vm/src/builtins.rs index 0ac6946a7b3..a6a041a00e1 100644 --- a/vm/src/builtins.rs +++ b/vm/src/builtins.rs @@ -64,13 +64,15 @@ 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 if (c as i64) < 0x10000 { - let hex = format!("\\u{:04x}", c as i64); - ascii.push_str(&hex); + ascii.push(c) } else { - let hex = format!("\\U{:08x}", c as i64); - ascii.push_str(&hex); + let c = c as i64; + let hex = if c < 0x10000 { + format!("\\u{:04x}", c) + } else { + format!("\\U{:08x}", c) + }; + ascii.push_str(&hex) } } Ok(ascii)