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:
Bob Nystrom
2013-12-25 15:01:45 -08:00
parent 2b65e47747
commit 507e89d3b3
12 changed files with 209 additions and 44 deletions
+25
View File
@@ -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) }
}