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 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}