From 8418ea8bb86d5e205e3bc11c5d034e112418500e Mon Sep 17 00:00:00 2001 From: matz Date: Tue, 30 Jan 2007 04:27:04 +0000 Subject: * numeric.c (int_pred): add Integer#pred corresponding Integer#succ. [RCR#5] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@11596 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- numeric.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'numeric.c') diff --git a/numeric.c b/numeric.c index 43fbfe8638..aa5c275606 100644 --- a/numeric.c +++ b/numeric.c @@ -1766,6 +1766,26 @@ int_succ(VALUE num) return rb_funcall(num, '+', 1, INT2FIX(1)); } +/* + * call-seq: + * int.pred => integer + * + * Returns the Integer equal to int - 1. + * + * 1.pred #=> 0 + * (-1).pred #=> -2 + */ + +static VALUE +int_pred(VALUE num) +{ + if (FIXNUM_P(num)) { + long i = FIX2LONG(num) - 1; + return LONG2NUM(i); + } + return rb_funcall(num, '-', 1, INT2FIX(1)); +} + /* * call-seq: * int.chr => string @@ -2948,6 +2968,7 @@ Init_Numeric(void) rb_include_module(rb_cInteger, rb_mPrecision); rb_define_method(rb_cInteger, "succ", int_succ, 0); rb_define_method(rb_cInteger, "next", int_succ, 0); + rb_define_method(rb_cInteger, "pred", int_pred, 0); rb_define_method(rb_cInteger, "chr", int_chr, 0); rb_define_method(rb_cInteger, "to_i", int_to_i, 0); rb_define_method(rb_cInteger, "to_int", int_to_i, 0); -- cgit v1.2.3