Skip to content

Commit 08b5280

Browse files
committed
Simplify and raise errors eagerly
1 parent fccc58e commit 08b5280

File tree

3 files changed

+21
-29
lines changed

3 files changed

+21
-29
lines changed

src/main/ruby/truffleruby/core/kernel.rb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -492,11 +492,11 @@ def rand(limit = nil)
492492
Truffle::RandomOperations.rand_range(randomizer, limit)
493493
else
494494
max = Primitive.rb_to_int(limit)
495-
if max != 0
496-
v = Truffle::RandomOperations.rand_int(randomizer, max, false)
497-
return v unless Primitive.nil?(v)
495+
if max == 0
496+
randomizer.random_float
497+
else
498+
Truffle::RandomOperations.rand_int(randomizer, max, false)
498499
end
499-
randomizer.random_float
500500
end
501501
end
502502
module_function :rand

src/main/ruby/truffleruby/core/random.rb

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,7 @@ def self.srand(seed = undefined)
6767
end
6868

6969
def self.rand(limit = undefined)
70-
r = Truffle::RandomOperations.random(Primitive.thread_randomizer, limit)
71-
Truffle::RandomOperations.check_random_number(r, limit)
70+
Truffle::RandomOperations.random(Primitive.thread_randomizer, limit)
7271
end
7372

7473
def self.urandom(size)
@@ -89,8 +88,7 @@ def initialize(seed = undefined)
8988
end
9089

9190
def rand(limit = undefined)
92-
r = Truffle::RandomOperations.random(@randomizer, limit)
93-
Truffle::RandomOperations.check_random_number(r, limit)
91+
Truffle::RandomOperations.random(@randomizer, limit)
9492
end
9593

9694
def seed
@@ -124,14 +122,12 @@ def random_number(limit = undefined)
124122
Truffle::CustomRandomizer.new(self)
125123
end
126124

127-
v = Truffle::RandomOperations.random(randomizer, limit, ArgumentError)
128-
if v
129-
v
130-
elsif Primitive.nil?(v)
131-
randomizer.random_float
132-
else
133-
Truffle::RandomOperations.invalid_argument(limit)
125+
# Weird case, spec'd for SecureRandom.random_number
126+
if Primitive.object_kind_of?(limit, Numeric) and limit <= 0
127+
return randomizer.random_float
134128
end
129+
130+
Truffle::RandomOperations.random(randomizer, limit, ArgumentError)
135131
end
136132
alias_method :rand, :random_number
137133
end

src/main/ruby/truffleruby/core/truffle/random_operations.rb

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ def self.random(randomizer, limit, error = TypeError)
1717
return randomizer.random_float
1818
end
1919

20-
return nil if Primitive.nil?(limit)
20+
invalid_argument(limit) if Primitive.nil?(limit)
2121

2222
unless Primitive.object_kind_of?(limit, Float)
2323
if limit_int = Truffle::Type.rb_check_to_integer(limit, :to_int)
@@ -28,7 +28,7 @@ def self.random(randomizer, limit, error = TypeError)
2828
limit_float = Truffle::Type.rb_check_to_float(limit)
2929
if !Primitive.nil?(limit_float)
3030
if limit_float < 0.0
31-
nil
31+
invalid_argument(limit)
3232
else
3333
check_float(limit_float)
3434
r = randomizer.random_float
@@ -47,19 +47,14 @@ def self.check_float(value)
4747
value
4848
end
4949

50-
def self.check_random_number(value, limit)
51-
invalid_argument(limit) if Primitive.nil?(value)
52-
value
53-
end
54-
5550
def self.invalid_argument(limit)
5651
raise ArgumentError, "invalid argument - #{limit}"
5752
end
5853

5954
def self.rand_int(randomizer, limit, restricted)
60-
return nil if limit == 0
55+
invalid_argument(limit) if limit == 0
6156
if limit < 0
62-
return nil if restricted
57+
invalid_argument(limit) if restricted
6358
limit = -limit
6459
end
6560
randomizer.random_integer(limit - 1)
@@ -73,8 +68,11 @@ def self.rand_range(randomizer, range)
7368
if !Primitive.object_kind_of?(diff, Float) &&
7469
!Primitive.nil?(v = Truffle::Type.rb_check_to_integer(diff, :to_int))
7570
max = exclude_end ? v - 1 : v
76-
v = nil
77-
v = randomizer.random_integer(max) if max >= 0
71+
if max >= 0
72+
v = randomizer.random_integer(max)
73+
else
74+
invalid_argument(range)
75+
end
7876
elsif !Primitive.nil?(v = Truffle::Type.rb_check_to_float(diff))
7977
scale = 1
8078
max = v
@@ -100,7 +98,7 @@ def self.rand_range(randomizer, range)
10098
elsif max == 0.0 && !exclude_end
10199
v = 0.0
102100
else
103-
v = nil
101+
invalid_argument(range)
104102
end
105103
end
106104

@@ -109,8 +107,6 @@ def self.rand_range(randomizer, range)
109107
end
110108

111109
case v
112-
when NilClass
113-
v
114110
when Float
115111
f = Truffle::Type.rb_check_to_float(b)
116112
return v + f unless Primitive.nil?(f)

0 commit comments

Comments
 (0)