calcium-lang
Version:
Calcium language interpreter
45 lines • 1.2 kB
JavaScript
import { retrieveValue } from "../util";
import createIterator from "../factory/iterator";
import { createInt } from "../factory";
/**
* built-in `range()` function
* @param args start, stop, step
* @param env
* @returns a range object (i.e. iterator)
*/
const range = (args, env) => {
let start, stop, step;
if (args.length === 1) {
start = 0;
stop = retrieveValue(args[0], env);
step = 1;
}
else if (args.length === 2) {
start = retrieveValue(args[0], env);
stop = retrieveValue(args[1], env);
step = 1;
}
else {
start = retrieveValue(args[0], env);
stop = retrieveValue(args[1], env);
step = retrieveValue(args[2], env);
}
let counter = null;
const rangeObject = createIterator({
name: "range object",
next: (index) => {
if (counter === null) {
counter = start;
}
else {
counter += step;
}
if (counter >= stop)
return null;
return createInt(counter);
},
});
return rangeObject;
};
export default range;
//# sourceMappingURL=range.js.map