calcium-lang
Version:
Calcium language interpreter
36 lines • 1.14 kB
JavaScript
import { default as Sym } from "../symbol";
import { Block, Kind, Result } from "../runtime/block";
import { evaluate } from "../util";
/**
* a foreach loop that don't use a function to get an iterable
*/
export default class ForEach {
/**
*
* @param elemName the identifier of the retrieved object
* @param iterable must refer to an iterable object
*/
constructor(elemName, iterable) {
this.elemName = elemName;
this.iterable = iterable;
}
execute(env) {
const iterableObj = evaluate(this.iterable, env);
const iterator = Reflect.get(iterableObj, Sym.iter);
const block = new Block(Kind.ForEach, env.address, (env) => {
const nextValue = iterator.next();
if (nextValue === undefined) {
return false;
}
else {
env.context.register(this.elemName, nextValue);
return true;
}
}, (env) => {
block.willEnter(env);
return Result.Jumpped;
});
block.willEnter(env);
}
}
//# sourceMappingURL=forEach.js.map