1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
use crate::eval::Env;
use crate::objects::{Eval, Object, Vtable};

pub fn vtable() -> Vtable {
    let vt = Vtable::new("Input");
    vt.add_primitive_method_or_panic("readline", input_readline);
    vt
}

fn input_readline(receiver: &Object, _args: &[Object], env: &Env) -> Eval {
    match receiver.input().readline() {
        Some(line) => Ok(env.foo.into_string(line)),
        // FIXME: Nil would make more sense, or a specific EOF object
        None => Ok(env.foo.make_boolean(false)),
    }
}