UNPKG

calcium-lang

Version:
36 lines 1.14 kB
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