mlld
Version:
mlld: llm scripting language
77 lines (75 loc) • 2.34 kB
JavaScript
import { isBuiltinEffect } from './chunk-6WXCVSUP.mjs';
import { __name } from './chunk-NJQWMXLH.mjs';
// interpreter/eval/pipeline/effects-attachment.ts
function attachBuiltinEffects(pipeline) {
const functional = [];
const pendingLeadingEffects = [];
let hadLeadingEffects = false;
for (const stage of pipeline) {
if (Array.isArray(stage)) {
const { functionalPipeline: group, hadLeadingEffects: inner } = attachBuiltinEffects(stage);
if (pendingLeadingEffects.length > 0 && group.length > 0) {
for (const cmd2 of group) {
const command = cmd2;
command.effects = [
...command.effects || [],
...pendingLeadingEffects
];
}
pendingLeadingEffects.length = 0;
}
if (group.length > 0) {
functional.push(group);
}
hadLeadingEffects = hadLeadingEffects || inner;
continue;
}
const name = stage.rawIdentifier;
if (isBuiltinEffect(name)) {
if (functional.length > 0) {
const prev = functional[functional.length - 1];
if (Array.isArray(prev)) {
for (const pcmd of prev) {
const command = pcmd;
command.effects = [
...command.effects || [],
stage
];
}
} else {
const prevCmd = prev;
prevCmd.effects = [
...prevCmd.effects || [],
stage
];
}
} else {
pendingLeadingEffects.push(stage);
hadLeadingEffects = true;
}
continue;
}
const cmd = { ...stage };
if (pendingLeadingEffects.length > 0) {
cmd.effects = [...cmd.effects || [], ...pendingLeadingEffects];
pendingLeadingEffects.length = 0;
}
functional.push(cmd);
}
if (functional.length === 0 && pendingLeadingEffects.length > 0) {
functional.push({
rawIdentifier: "__identity__",
identifier: [],
args: [],
fields: [],
rawArgs: [],
effects: [...pendingLeadingEffects]
});
pendingLeadingEffects.length = 0;
}
return { functionalPipeline: functional, hadLeadingEffects };
}
__name(attachBuiltinEffects, "attachBuiltinEffects");
export { attachBuiltinEffects };
//# sourceMappingURL=chunk-MOU2QELE.mjs.map
//# sourceMappingURL=chunk-MOU2QELE.mjs.map