summaryrefslogtreecommitdiff
path: root/numeric.rb
diff options
context:
space:
mode:
Diffstat (limited to 'numeric.rb')
-rw-r--r--numeric.rb94
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