1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
use crate::eval::Env;
use crate::objects::{Eval, Object, Vtable};
pub fn vtable() -> Vtable {
let vt = Vtable::new("Output");
vt.add_primitive_method_or_panic("flush", output_flush);
vt.add_primitive_method_or_panic("writeUTF8:", output_write_utf8);
vt.add_primitive_method_or_panic("toString", output_to_string);
vt
}
fn output_flush(receiver: &Object, _args: &[Object], _env: &Env) -> Eval {
receiver.output().flush();
Ok(receiver.clone())
}
fn output_write_utf8(receiver: &Object, args: &[Object], _env: &Env) -> Eval {
receiver.output().write(args[0].string_as_str());
Ok(receiver.clone())
}
fn output_to_string(receiver: &Object, _args: &[Object], env: &Env) -> Eval {
Ok(env.foo.into_string(format!("{}", receiver)))
}