pub(crate) fn eval_proc(
        &mut self,
        proc: Value,
        self_value: impl Into<Option<Value>>,
        args: &Args,
    ) -> VMResult {
        self.stack_push(Value::nil());
        let args = self.stack_push_args(&args);
        self.invoke_proc(proc, self_value, &args)?.handle(self)
    }
Execute the Proc object with given `args`, and push the returned value on the stack.
ruruby/src/vm/executor/method.rs