calcium-lang
Version:
Calcium language interpreter
27 lines • 986 B
JavaScript
import { Kind } from "../runtime/block";
import { InvalidBreak } from "../error";
/**
* break a loop
*/
export default class Break {
constructor() { }
execute(env) {
while (true) {
const block = env.blocks.pop();
if ((block === null || block === void 0 ? void 0 : block.kind) === Kind.While ||
(block === null || block === void 0 ? void 0 : block.kind) === Kind.ForRange ||
(block === null || block === void 0 ? void 0 : block.kind) === Kind.ForEach) {
env.address.shift(-1);
break;
}
else if ((block === null || block === void 0 ? void 0 : block.kind) === Kind.Ifs || (block === null || block === void 0 ? void 0 : block.kind) === Kind.IfElifElse) {
env.address.shift(-1);
continue;
}
else {
throw new InvalidBreak();
}
}
}
}
//# sourceMappingURL=break.js.map