Range operators!
Added ".." and "..." infix operators. Num implements them to
return Range objects. Those in turn implement the iterator
protocol, so now numeric for loops are easy:
for (i in 1..10) { ... }
I also cleaned up the Wren benchmarks to use this.
In the process, I discovered the method_call benchmark really
just showed loop peformance, so I unrolled the loops in all of
the languages to stress method calls.
This commit is contained in:
@@ -21,3 +21,28 @@ class List {
|
||||
return result
|
||||
}
|
||||
}
|
||||
|
||||
class Range {
|
||||
new(min, max) {
|
||||
_min = min
|
||||
_max = max
|
||||
}
|
||||
|
||||
min { return _min }
|
||||
max { return _max }
|
||||
|
||||
iterate(previous) {
|
||||
if (previous == null) return _min
|
||||
if (previous == _max) return false
|
||||
return previous + 1
|
||||
}
|
||||
|
||||
iteratorValue(iterator) {
|
||||
return iterator
|
||||
}
|
||||
}
|
||||
|
||||
class Num {
|
||||
.. other { return new Range(this, other) }
|
||||
... other { return new Range(this, other - 1) }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user