diff options
Diffstat (limited to 'numeric.rb')
| -rw-r--r-- | numeric.rb | 94 |
1 files changed, 56 insertions, 38 deletions
diff --git a/numeric.rb b/numeric.rb index 898b257fe4..306561943d 100644 --- a/numeric.rb +++ b/numeric.rb @@ -1,4 +1,14 @@ class Numeric + # call-seq: + # dup -> self + # + # Returns +self+. + # + # Related: Numeric#clone. + # + def dup + self + end # call-seq: # real? -> true or false @@ -70,13 +80,27 @@ class Numeric end alias conj conjugate + + # call-seq: + # +self -> self + # + # Returns +self+. + # + def +@ + self + end end class Integer # call-seq: - # -int -> integer + # -self -> integer + # + # Returns +self+, negated: + # + # -1 # => -1 + # -(-1) # => 1 + # -0 # => 0 # - # Returns +self+, negated. def -@ Primitive.attr! :leaf Primitive.cexpr! 'rb_int_uminus(self)' @@ -241,36 +265,6 @@ class Integer self end - # call-seq: - # downto(limit) {|i| ... } -> self - # downto(limit) -> enumerator - # - # Calls the given block with each integer value from +self+ down to +limit+; - # returns +self+: - # - # a = [] - # 10.downto(5) {|i| a << i } # => 10 - # a # => [10, 9, 8, 7, 6, 5] - # a = [] - # 0.downto(-5) {|i| a << i } # => 0 - # a # => [0, -1, -2, -3, -4, -5] - # 4.downto(5) {|i| fail 'Cannot happen' } # => 4 - # - # With no block given, returns an Enumerator. - def downto to - Primitive.attr! :inline_block - unless defined?(yield) - return Primitive.cexpr! 'SIZED_ENUMERATOR(self, 1, &to, int_downto_size)' - end - - from = self - while from >= to - yield from - from = from.pred - end - self - end - # call-seq: # to_i -> self # @@ -332,6 +326,29 @@ class Integer def denominator 1 end + + with_jit do + if Primitive.rb_builtin_basic_definition_p(:downto) + undef :downto + + def downto(to) # :nodoc: + Primitive.attr! :inline_block, :c_trace + + # When no block is given, return an Enumerator that enumerates from `self` to `to`. + # Not using `block_given?` and `to_enum` to keep them unaffected by redefinitions. + unless defined?(yield) + return Primitive.cexpr! 'SIZED_ENUMERATOR(self, 1, &to, int_downto_size)' + end + + from = self + while from >= to + yield from + from = from.pred + end + self + end + end + end end class Float @@ -358,15 +375,16 @@ class Float Primitive.cexpr! 'rb_float_abs(self)' end - def magnitude - Primitive.attr! :leaf - Primitive.cexpr! 'rb_float_abs(self)' - end + alias magnitude abs # call-seq: - # -float -> float + # -self -> float + # + # Returns +self+, negated: # - # Returns +self+, negated. + # -3.14 # => -3.14 + # -(-3.14) # => 3.14 + # -0.0 # => -0.0 # def -@ Primitive.attr! :leaf |
