kaon/core/
io.rs

1use std::rc::Rc;
2
3use crate::common::{Value, ImmutableString, Class, Varidic};
4use crate::runtime::Vm;
5
6pub fn print(vm: &mut Vm, args: Varidic<Value>) {
7    let stdout = &vm.context
8        .as_ref()
9        .borrow()
10        .settings
11        .stdout;
12    
13    for (pos, value) in args.iter().enumerate() {
14        stdout.write(value.to_string().as_bytes()).unwrap();
15
16        // don't print a trailing space
17        if pos != args.len() - 1 {
18            stdout.write(" ".as_bytes()).unwrap();
19        }
20    }
21
22    stdout.writeln("").unwrap();
23}
24
25fn readline(vm: &mut Vm) -> ImmutableString {
26    let stdin = &vm.context.as_ref().borrow().settings.stdin;
27
28    ImmutableString::from(stdin.read_line().unwrap().unwrap())
29}
30
31pub(crate) fn make_class() -> Rc<Class> {
32    let system = Class::new("System");
33
34    system.register_static("print", print);
35    system.register_static("readline", readline);
36
37    system
38}