Skip to content

Commit 74b0733

Browse files
committed
Implement string module constants
1 parent 950dbd1 commit 74b0733

File tree

3 files changed

+54
-0
lines changed

3 files changed

+54
-0
lines changed

tests/snippets/string.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import string
2+
3+
4+
assert string.ascii_letters == 'abcdefghijklmnopqrstuvwxyz'
5+
assert string.ascii_lowercase == 'abcdefghijklmnopqrstuvwxyz'
6+
assert string.ascii_uppercase == 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
7+
assert string.digits == '0123456789'
8+
assert string.hexdigits == '0123456789abcdefABCDEF'
9+
assert string.octdigits == '01234567'
10+
assert string.printable == '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~ \t\n\r\x0b\x0c'
11+
assert string.punctuation == '!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'
12+
assert string.whitespace == ' \t\n\r\x0b\x0c'

vm/src/stdlib/mod.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ mod math;
66
mod pystruct;
77
mod random;
88
mod re;
9+
mod string;
910
mod time_module;
1011
mod tokenize;
1112
mod types;
@@ -25,6 +26,7 @@ pub fn get_module_inits() -> HashMap<String, StdlibInitFunc> {
2526
modules.insert("math".to_string(), math::mk_module as StdlibInitFunc);
2627
modules.insert("re".to_string(), re::mk_module as StdlibInitFunc);
2728
modules.insert("random".to_string(), random::mk_module as StdlibInitFunc);
29+
modules.insert("string".to_string(), string::mk_module as StdlibInitFunc);
2830
modules.insert("struct".to_string(), pystruct::mk_module as StdlibInitFunc);
2931
modules.insert("time".to_string(), time_module::mk_module as StdlibInitFunc);
3032
modules.insert(

vm/src/stdlib/string.rs

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
/* String builtin module
2+
*
3+
*
4+
*/
5+
6+
use super::super::pyobject::{PyContext, PyObjectRef};
7+
8+
pub fn mk_module(ctx: &PyContext) -> PyObjectRef {
9+
let py_mod = ctx.new_module(&"string".to_string(), ctx.new_scope(None));
10+
11+
let ascii_letters = "abcdefghijklmnopqrstuvwxyz".to_string();
12+
let ascii_uppercase = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".to_string();
13+
let digits = "0123456789".to_string();
14+
let hexdigits = "0123456789abcdefABCDEF".to_string();
15+
let octdigits = "01234567".to_string();
16+
let printable = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~ \t\n\r\x0b\x0c".to_string();
17+
let punctuation = "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~".to_string();
18+
let whitespace = " \t\n\r\x0b\x0c".to_string();
19+
20+
// Constants:
21+
ctx.set_attr(&py_mod, "ascii_letters", ctx.new_str(ascii_letters.clone()));
22+
ctx.set_attr(
23+
&py_mod,
24+
"ascii_lowercase",
25+
ctx.new_str(ascii_letters.clone()),
26+
);
27+
ctx.set_attr(
28+
&py_mod,
29+
"ascii_uppercase",
30+
ctx.new_str(ascii_uppercase.clone()),
31+
);
32+
ctx.set_attr(&py_mod, "digits", ctx.new_str(digits.clone()));
33+
ctx.set_attr(&py_mod, "hexdigits", ctx.new_str(hexdigits.clone()));
34+
ctx.set_attr(&py_mod, "octdigits", ctx.new_str(octdigits.clone()));
35+
ctx.set_attr(&py_mod, "printable", ctx.new_str(printable.clone()));
36+
ctx.set_attr(&py_mod, "punctuation", ctx.new_str(punctuation.clone()));
37+
ctx.set_attr(&py_mod, "whitespace", ctx.new_str(whitespace.clone()));
38+
39+
py_mod
40+
}

0 commit comments

Comments
 (0)