fn add(vm: &mut VM, self_val: Value, args: &Args2) -> VMResult {
    args.check_args_num(1)?;
    let time = {
        let rval = self_val.rvalue();
        match rval.kind() {
            ObjKind::TIME => rval.time().clone(),
            _ => unreachable!(),
        }
    };
    let arg0 = vm[0];
    match arg0.unpack() {
        RV::Integer(i) => {
            let res = time + Duration::seconds(i);
            Ok(Value::time(vm.globals.get_class(self_val), res))
        }
        RV::Float(f) => {
            let offset = (f * 1000.0 * 1000.0 * 1000.0) as i64;
            let res = time + Duration::nanoseconds(offset);
            Ok(Value::time(vm.globals.get_class(self_val), res))
        }
        _ => return Err(VMError::undefined_op("+", arg0, self_val)),
    }
}
self + other -> Time
https://docs.ruby-lang.org/ja/latest/method/Time/i/=2b.html
ruruby/src/builtin/time.rs