Freeze Enumerator::ArithmeticSequence objects
Now, all Ranges are frozen (#15504).
Enumerator::ArithmeticSequence is very similar to Range, just with an extra
They're essentially already immutable, except that one could use set instance variables, but it seems of little use.
So, should we make Enumerator::ArithmeticSequence frozen too?
Updated by Eregon (Benoit Daloze) 25 days ago
I just realized, this is problematic because
Enumerator::ArithmeticSequence is a subclass of
Enumerator and not of
If it was a subclass of Range then I think it would be fine to freeze it.
But since it subclasses Enumerator, it has mutating methods like
 pry(main)> enum = (1..5).step(2) => ((1..5).step(2))  pry(main)> enum.next => 1  pry(main)> enum.next => 3  pry(main)> enum.next => 5  pry(main)> enum.next StopIteration: iteration reached an end from (pry):11:in `next'
mrkn (Kenta Murata) do you remember why ArithmeticSequence is an Enumerator subclass and not a Range subclass?
Updated by Eregon (Benoit Daloze) 13 days ago
- Status changed from Open to Rejected
Right, that makes sense, thanks for the reply.
Interestingly it seems
Enumerator#next is still allowed even if the Enumerator is frozen, even though it is a kind of mutation.
I think that's a bug.
ArithmeticSequence has state through being an Enumerator, I think it's not reasonable to freeze, so I'll reject this issue.