feat: replace Wren Range class with native C object for performance

Remove the Range class definition from corelib.wren and implement it as a native C type with ObjRange struct, adding native methods for from, to, min, max, iterate, and iteratorValue. Move range operator handling from Num class to native num_dotDot and num_dotDotDot functions. Update VM to support OBJ_RANGE type in marking, printing, and type checking. Add comprehensive test suite for range operations including ordered, backwards, and exclusive ranges.
This commit is contained in:
Bob Nystrom
2014-01-20 16:45:15 +00:00
parent d758f63212
commit ebb47d30e6
15 changed files with 291 additions and 88 deletions
+26
View File
@@ -0,0 +1,26 @@
// Ordered range.
IO.print((2..5).min) // expect: 2
IO.print((3..3).min) // expect: 3
IO.print((0..3).min) // expect: 0
IO.print((-5..3).min) // expect: -5
IO.print((-5..-2).min) // expect: -5
// Backwards range.
IO.print((5..2).min) // expect: 2
IO.print((3..0).min) // expect: 0
IO.print((3..-5).min) // expect: -5
IO.print((-2..-5).min) // expect: -5
// Exclusive ordered range.
IO.print((2...5).min) // expect: 2
IO.print((3...3).min) // expect: 2
IO.print((0...3).min) // expect: 0
IO.print((-5...3).min) // expect: -5
IO.print((-5...-2).min) // expect: -5
// Exclusive backwards range.
// TODO: Is this what we want? "..." always means "subtract 1"?
IO.print((5...2).min) // expect: 1
IO.print((3...0).min) // expect: -1
IO.print((3...-5).min) // expect: -6
IO.print((-2...-5).min) // expect: -6