@kalada/core 0.2.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +62 -3
- package/dist/kalada-v1/canonical-input.cjs +133 -0
- package/dist/kalada-v1/canonical-input.cjs.map +1 -0
- package/dist/kalada-v1/canonical-input.d.cts +26 -0
- package/dist/kalada-v1/canonical-input.d.ts +26 -0
- package/dist/kalada-v1/canonical-input.js +122 -0
- package/dist/kalada-v1/canonical-input.js.map +1 -0
- package/dist/kalada-v1/canonicalize.cjs +93 -130
- package/dist/kalada-v1/canonicalize.cjs.map +1 -1
- package/dist/kalada-v1/canonicalize.d.cts +1 -0
- package/dist/kalada-v1/canonicalize.d.ts +1 -0
- package/dist/kalada-v1/canonicalize.js +71 -108
- package/dist/kalada-v1/canonicalize.js.map +1 -1
- package/dist/kalada-v1/codec.cjs +24 -0
- package/dist/kalada-v1/codec.cjs.map +1 -1
- package/dist/kalada-v1/codec.d.cts +5 -0
- package/dist/kalada-v1/codec.d.ts +5 -0
- package/dist/kalada-v1/codec.js +24 -0
- package/dist/kalada-v1/codec.js.map +1 -1
- package/dist/kalada-v1/compile.cjs +24 -1
- package/dist/kalada-v1/compile.cjs.map +1 -1
- package/dist/kalada-v1/compile.d.cts +1 -0
- package/dist/kalada-v1/compile.d.ts +1 -0
- package/dist/kalada-v1/compile.js +25 -2
- package/dist/kalada-v1/compile.js.map +1 -1
- package/dist/kalada-v1/dependencies.cjs +55 -2
- package/dist/kalada-v1/dependencies.cjs.map +1 -1
- package/dist/kalada-v1/dependencies.d.cts +1 -0
- package/dist/kalada-v1/dependencies.d.ts +1 -0
- package/dist/kalada-v1/dependencies.js +55 -2
- package/dist/kalada-v1/dependencies.js.map +1 -1
- package/dist/kalada-v1/diagnostics.cjs +29 -4
- package/dist/kalada-v1/diagnostics.cjs.map +1 -1
- package/dist/kalada-v1/diagnostics.d.cts +5 -3
- package/dist/kalada-v1/diagnostics.d.ts +5 -3
- package/dist/kalada-v1/diagnostics.js +29 -4
- package/dist/kalada-v1/diagnostics.js.map +1 -1
- package/dist/kalada-v1/evaluate.cjs +23 -117
- package/dist/kalada-v1/evaluate.cjs.map +1 -1
- package/dist/kalada-v1/evaluate.d.cts +4 -2
- package/dist/kalada-v1/evaluate.d.ts +4 -2
- package/dist/kalada-v1/evaluate.js +24 -118
- package/dist/kalada-v1/evaluate.js.map +1 -1
- package/dist/kalada-v1/evaluation-delivery.cjs +286 -0
- package/dist/kalada-v1/evaluation-delivery.cjs.map +1 -0
- package/dist/kalada-v1/evaluation-delivery.d.cts +13 -0
- package/dist/kalada-v1/evaluation-delivery.d.ts +13 -0
- package/dist/kalada-v1/evaluation-delivery.js +284 -0
- package/dist/kalada-v1/evaluation-delivery.js.map +1 -0
- package/dist/kalada-v1/evaluation-frames.cjs +16 -0
- package/dist/kalada-v1/evaluation-frames.cjs.map +1 -0
- package/dist/kalada-v1/evaluation-frames.d.cts +83 -0
- package/dist/kalada-v1/evaluation-frames.d.ts +83 -0
- package/dist/kalada-v1/evaluation-frames.js +14 -0
- package/dist/kalada-v1/evaluation-frames.js.map +1 -0
- package/dist/kalada-v1/evaluation-machine.cjs +226 -0
- package/dist/kalada-v1/evaluation-machine.cjs.map +1 -0
- package/dist/kalada-v1/evaluation-machine.d.cts +9 -0
- package/dist/kalada-v1/evaluation-machine.d.ts +9 -0
- package/dist/kalada-v1/evaluation-machine.js +224 -0
- package/dist/kalada-v1/evaluation-machine.js.map +1 -0
- package/dist/kalada-v1/evaluation-resolution.cjs +80 -0
- package/dist/kalada-v1/evaluation-resolution.cjs.map +1 -0
- package/dist/kalada-v1/evaluation-resolution.d.cts +11 -0
- package/dist/kalada-v1/evaluation-resolution.d.ts +11 -0
- package/dist/kalada-v1/evaluation-resolution.js +78 -0
- package/dist/kalada-v1/evaluation-resolution.js.map +1 -0
- package/dist/kalada-v1/evaluation-state.cjs +94 -0
- package/dist/kalada-v1/evaluation-state.cjs.map +1 -0
- package/dist/kalada-v1/evaluation-state.d.cts +38 -0
- package/dist/kalada-v1/evaluation-state.d.ts +38 -0
- package/dist/kalada-v1/evaluation-state.js +81 -0
- package/dist/kalada-v1/evaluation-state.js.map +1 -0
- package/dist/kalada-v1/factories.cjs +46 -0
- package/dist/kalada-v1/factories.cjs.map +1 -1
- package/dist/kalada-v1/factories.d.cts +24 -1
- package/dist/kalada-v1/factories.d.ts +24 -1
- package/dist/kalada-v1/factories.js +46 -0
- package/dist/kalada-v1/factories.js.map +1 -1
- package/dist/kalada-v1/function-contracts.cjs +150 -0
- package/dist/kalada-v1/function-contracts.cjs.map +1 -0
- package/dist/kalada-v1/function-contracts.d.cts +15 -0
- package/dist/kalada-v1/function-contracts.d.ts +15 -0
- package/dist/kalada-v1/function-contracts.js +144 -0
- package/dist/kalada-v1/function-contracts.js.map +1 -0
- package/dist/kalada-v1/index.cjs +30 -0
- package/dist/kalada-v1/index.d.cts +5 -3
- package/dist/kalada-v1/index.d.ts +5 -3
- package/dist/kalada-v1/index.js +4 -2
- package/dist/kalada-v1/limits.cjs +23 -2
- package/dist/kalada-v1/limits.cjs.map +1 -1
- package/dist/kalada-v1/limits.d.cts +6 -3
- package/dist/kalada-v1/limits.d.ts +6 -3
- package/dist/kalada-v1/limits.js +23 -3
- package/dist/kalada-v1/limits.js.map +1 -1
- package/dist/kalada-v1/runtime-values.cjs +112 -0
- package/dist/kalada-v1/runtime-values.cjs.map +1 -0
- package/dist/kalada-v1/runtime-values.d.cts +35 -0
- package/dist/kalada-v1/runtime-values.d.ts +35 -0
- package/dist/kalada-v1/runtime-values.js +105 -0
- package/dist/kalada-v1/runtime-values.js.map +1 -0
- package/dist/kalada-v1/schemas.cjs +136 -3
- package/dist/kalada-v1/schemas.cjs.map +1 -1
- package/dist/kalada-v1/schemas.d.cts +2 -1
- package/dist/kalada-v1/schemas.d.ts +2 -1
- package/dist/kalada-v1/schemas.js +137 -5
- package/dist/kalada-v1/schemas.js.map +1 -1
- package/dist/kalada-v1/static-analysis.cjs +177 -0
- package/dist/kalada-v1/static-analysis.cjs.map +1 -0
- package/dist/kalada-v1/static-analysis.d.cts +9 -0
- package/dist/kalada-v1/static-analysis.d.ts +9 -0
- package/dist/kalada-v1/static-analysis.js +175 -0
- package/dist/kalada-v1/static-analysis.js.map +1 -0
- package/dist/kalada-v1/static-types.cjs +229 -0
- package/dist/kalada-v1/static-types.cjs.map +1 -0
- package/dist/kalada-v1/static-types.d.cts +8 -0
- package/dist/kalada-v1/static-types.d.ts +8 -0
- package/dist/kalada-v1/static-types.js +227 -0
- package/dist/kalada-v1/static-types.js.map +1 -0
- package/dist/kalada-v1/temporal-evaluation.cjs +95 -0
- package/dist/kalada-v1/temporal-evaluation.cjs.map +1 -0
- package/dist/kalada-v1/temporal-evaluation.d.cts +18 -0
- package/dist/kalada-v1/temporal-evaluation.d.ts +18 -0
- package/dist/kalada-v1/temporal-evaluation.js +90 -0
- package/dist/kalada-v1/temporal-evaluation.js.map +1 -0
- package/dist/kalada-v1/temporal.cjs +42 -0
- package/dist/kalada-v1/temporal.cjs.map +1 -0
- package/dist/kalada-v1/temporal.d.cts +22 -0
- package/dist/kalada-v1/temporal.d.ts +22 -0
- package/dist/kalada-v1/temporal.js +37 -0
- package/dist/kalada-v1/temporal.js.map +1 -0
- package/dist/kalada-v1/types.d.cts +108 -5
- package/dist/kalada-v1/types.d.ts +108 -5
- package/dist/kalada-v1/values.cjs +13 -1
- package/dist/kalada-v1/values.cjs.map +1 -1
- package/dist/kalada-v1/values.d.cts +2 -1
- package/dist/kalada-v1/values.d.ts +2 -1
- package/dist/kalada-v1/values.js +13 -1
- package/dist/kalada-v1/values.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/kalada-v1/evaluation-delivery.ts"],"names":["arm"],"mappings":"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","file":"evaluation-delivery.js","sourcesContent":["import { type EvaluationFrame, functionEnvironment, type Path } from \"./evaluation-frames.js\";\nimport {\n charge,\n deliver,\n ensureCapacity,\n evaluate,\n fail,\n type MachineState,\n push,\n reserveCollectionIteration,\n} from \"./evaluation-state.js\";\nimport { cloneJson, type JsonValue } from \"./json.js\";\nimport {\n callableType,\n isCallable,\n matchesType,\n type RuntimeEnvironment,\n type RuntimeValue,\n type UserClosure,\n} from \"./runtime-values.js\";\nimport { isDuration, isInstant } from \"./temporal.js\";\nimport { applyTemporalBinary } from \"./temporal-evaluation.js\";\nimport type { KaladaV1Expression } from \"./types.js\";\nimport { isOption, isResult, type KaladaValue, Option, Result } from \"./values.js\";\n\nexport function deliverFrame<R extends JsonValue>(state: MachineState<R>): void {\n const frame = state.stack[state.stack.length - 1] as EvaluationFrame<R>;\n switch (frame.kind) {\n case \"binding\":\n deliverBinding(frame, state);\n break;\n case \"constructor\":\n deliverConstructor(frame, state);\n break;\n case \"match\":\n deliverMatch(frame, state);\n break;\n case \"temporal-binary\":\n deliverTemporal(frame, state);\n break;\n case \"function-group-body\":\n restore(frame.outer, state);\n break;\n case \"call-callee\":\n deliverCallee(frame, state);\n break;\n case \"call-arguments\":\n deliverArgument(frame, state);\n break;\n case \"user-return\":\n deliverReturn(frame, state);\n break;\n case \"core-iteration\":\n deliverCoreCallback(frame, state);\n break;\n }\n}\n\nfunction deliverBinding<R extends JsonValue>(\n frame: Extract<EvaluationFrame<R>, { kind: \"binding\" }>,\n state: MachineState<R>,\n): void {\n if (frame.phase === \"body\") {\n restore(frame.outer, state);\n return;\n }\n frame.phase = \"body\";\n const nested = new Map(state.environment);\n nested.set(frame.name, state.value as RuntimeValue);\n evaluate(frame.body, [...frame.path, \"body\"], nested, state);\n}\n\nfunction deliverConstructor<R extends JsonValue>(\n frame: Extract<EvaluationFrame<R>, { kind: \"constructor\" }>,\n state: MachineState<R>,\n): void {\n state.stack.pop();\n const value = state.value as RuntimeValue;\n if (isCallable(value)) fail(\"KALADA_FUNCTION_ESCAPE\", [...frame.path, \"value\"]);\n if (frame.type === \"Option\") deliver(Option.some(value), state);\n else deliver(frame.variant === \"ok\" ? Result.ok(value) : Result.err(value), state);\n}\n\nfunction deliverMatch<R extends JsonValue>(\n frame: Extract<EvaluationFrame<R>, { kind: \"match\" }>,\n state: MachineState<R>,\n): void {\n if (frame.phase === \"arm\") {\n restore(frame.outer, state);\n return;\n }\n const value = state.value as RuntimeValue;\n const valid = !isCallable(value) && (frame.type === \"Option\" ? isOption(value) : isResult(value));\n if (!valid) fail(\"KALADA_MATCH_TYPE_MISMATCH\", [...frame.path, \"value\"]);\n const variant = (value as ReturnType<typeof Option.none> | ReturnType<typeof Result.ok>).variant;\n const index = frame.arms.findIndex((arm) => arm.variant === variant);\n const arm = frame.arms[index];\n if (!arm) fail(\"KALADA_INVALID_INPUT\", [...frame.path, \"arms\"]);\n frame.phase = \"arm\";\n frame.scrutinee = value;\n frame.selected = index;\n evaluate(\n arm.body,\n [...frame.path, \"arms\", index, \"body\"],\n bindArm(frame.outer, arm.binding, value),\n state,\n );\n}\n\nfunction bindArm(\n environment: RuntimeEnvironment,\n name: string | undefined,\n value: RuntimeValue,\n): RuntimeEnvironment {\n if (!name || isCallable(value) || (isOption(value) && value.variant === \"none\"))\n return environment;\n const nested = new Map(environment);\n if (isOption(value) || isResult(value)) nested.set(name, value.value);\n return nested;\n}\n\nfunction deliverTemporal<R extends JsonValue>(\n frame: Extract<EvaluationFrame<R>, { kind: \"temporal-binary\" }>,\n state: MachineState<R>,\n): void {\n const value = state.value as RuntimeValue;\n if (isCallable(value) || (!isInstant(value) && !isDuration(value))) {\n fail(\"KALADA_TEMPORAL_TYPE_MISMATCH\", [...frame.path, frame.phase]);\n }\n if (frame.phase === \"left\") {\n frame.phase = \"right\";\n frame.left = value;\n evaluate(frame.right, [...frame.path, \"right\"], state.environment, state);\n return;\n }\n state.stack.pop();\n const output = applyTemporalBinary(\n frame.expressionKind,\n frame.operator,\n frame.left as KaladaValue,\n value,\n [...frame.path, \"right\"],\n );\n deliver(output, state);\n}\n\nfunction deliverCallee<R extends JsonValue>(\n frame: Extract<EvaluationFrame<R>, { kind: \"call-callee\" }>,\n state: MachineState<R>,\n): void {\n charge([...frame.path, \"callee\"], state);\n state.stack.pop();\n const callable = state.value as RuntimeValue;\n if (!isCallable(callable)) fail(\"KALADA_NOT_CALLABLE\", [...frame.path, \"callee\"]);\n const expected = callable.callable === \"user\" ? callable.parameters.length : 2;\n if (frame.arguments.length !== expected)\n fail(\"KALADA_FUNCTION_ARITY\", [...frame.path, \"arguments\"]);\n if (frame.arguments.length === 0) {\n dispatch(callable, [], frame.path, state);\n return;\n }\n push(\n {\n kind: \"call-arguments\",\n phase: \"argument\",\n path: frame.path,\n callable,\n arguments: frame.arguments,\n values: [],\n index: 0,\n },\n [...frame.path, \"arguments\"],\n state,\n );\n evaluate(\n frame.arguments[0] as KaladaV1Expression<R>,\n [...frame.path, \"arguments\", 0],\n state.environment,\n state,\n );\n}\n\nfunction deliverArgument<R extends JsonValue>(\n frame: Extract<EvaluationFrame<R>, { kind: \"call-arguments\" }>,\n state: MachineState<R>,\n): void {\n const path = [...frame.path, \"arguments\", frame.index];\n charge(path, state);\n const callable = frame.callable;\n if (!isCallable(callable)) fail(\"KALADA_NOT_CALLABLE\", [...frame.path, \"callee\"]);\n const type = callableType(callable).parameters[frame.index];\n if (type && !matchesType(state.value as RuntimeValue, type))\n fail(\"KALADA_FUNCTION_TYPE_MISMATCH\", path);\n frame.values.push(state.value as RuntimeValue);\n frame.index += 1;\n if (frame.index < frame.arguments.length) {\n evaluate(\n frame.arguments[frame.index] as KaladaV1Expression<R>,\n [...frame.path, \"arguments\", frame.index],\n state.environment,\n state,\n );\n return;\n }\n state.stack.pop();\n dispatch(callable, frame.values, frame.path, state);\n}\n\nfunction dispatch<R extends JsonValue>(\n callable: RuntimeValue,\n values: readonly RuntimeValue[],\n path: Path,\n state: MachineState<R>,\n): void {\n if (!isCallable(callable)) fail(\"KALADA_NOT_CALLABLE\", [...path, \"callee\"]);\n if (callable.callable === \"core\") {\n dispatchCore(callable.name, values, path, state);\n return;\n }\n dispatchUser(callable as UserClosure<R>, values, path, state);\n}\n\nfunction dispatchUser<R extends JsonValue>(\n closure: UserClosure<R>,\n values: readonly RuntimeValue[],\n path: Path,\n state: MachineState<R>,\n): void {\n if (state.callDepth >= state.limits.maxCallDepth) fail(\"KALADA_CALL_DEPTH_LIMIT\", path);\n ensureCapacity(path, state);\n charge(path, state);\n state.callDepth += 1;\n state.stack.push({\n kind: \"user-return\",\n phase: \"body\",\n path,\n name: closure.name,\n returns: closure.returns,\n caller: state.environment,\n });\n evaluate(closure.body, [...closure.path, \"body\"], functionEnvironment(closure, values), state);\n}\n\nfunction dispatchCore<R extends JsonValue>(\n operator: Extract<EvaluationFrame<R>, { kind: \"core-iteration\" }>[\"operator\"],\n values: readonly RuntimeValue[],\n path: Path,\n state: MachineState<R>,\n): void {\n const input = values[0] as readonly JsonValue[];\n if (input.length > state.limits.maxCollectionLength) {\n fail(\"KALADA_COLLECTION_LIMIT\", [...path, \"arguments\", 0]);\n }\n if (state.callDepth >= state.limits.maxCallDepth) fail(\"KALADA_CALL_DEPTH_LIMIT\", path);\n ensureCapacity(path, state);\n charge(path, state);\n state.callDepth += 1;\n const frame: Extract<EvaluationFrame<R>, { kind: \"core-iteration\" }> = {\n kind: \"core-iteration\",\n phase: \"ready\",\n path,\n operator,\n callback: values[1] as RuntimeValue,\n input,\n index: 0,\n partial: operator === \"some\" ? false : operator === \"every\" ? true : [],\n };\n state.stack.push(frame);\n if (input.length === 0) finishCore(frame, state);\n else dispatchCoreCallback(frame, state);\n}\n\nfunction dispatchCoreCallback<R extends JsonValue>(\n frame: Extract<EvaluationFrame<R>, { kind: \"core-iteration\" }>,\n state: MachineState<R>,\n): void {\n frame.phase = \"callback\";\n reserveCollectionIteration(frame.path, state);\n dispatch(\n frame.callback,\n [frame.input[frame.index] as JsonValue, frame.index],\n [...frame.path, \"arguments\", 1],\n state,\n );\n}\n\nfunction deliverCoreCallback<R extends JsonValue>(\n frame: Extract<EvaluationFrame<R>, { kind: \"core-iteration\" }>,\n state: MachineState<R>,\n): void {\n charge(frame.path, state);\n const value = state.value as RuntimeValue;\n validateCoreResult(frame, value);\n updateCoreResult(frame, value as JsonValue | boolean);\n if (coreFinished(frame, value)) {\n finishCore(frame, state);\n return;\n }\n frame.index += 1;\n if (frame.index === frame.input.length) finishCore(frame, state);\n else dispatchCoreCallback(frame, state);\n}\n\nfunction validateCoreResult<R extends JsonValue>(\n frame: Extract<EvaluationFrame<R>, { kind: \"core-iteration\" }>,\n value: RuntimeValue,\n): void {\n const expected = {\n kind: \"primitive-type\",\n name: frame.operator === \"map\" ? \"json\" : \"boolean\",\n } as const;\n if (!matchesType(value, expected)) {\n fail(\"KALADA_COLLECTION_TYPE_MISMATCH\", [...frame.path, \"arguments\", 1]);\n }\n}\n\nfunction updateCoreResult<R extends JsonValue>(\n frame: Extract<EvaluationFrame<R>, { kind: \"core-iteration\" }>,\n value: JsonValue | boolean,\n): void {\n if (frame.operator === \"map\") (frame.partial as JsonValue[]).push(value as JsonValue);\n if (frame.operator === \"filter\" && value) {\n (frame.partial as JsonValue[]).push(frame.input[frame.index] as JsonValue);\n }\n if (frame.operator === \"some\" && value) frame.partial = true;\n if (frame.operator === \"every\" && !value) frame.partial = false;\n}\n\nfunction coreFinished<R extends JsonValue>(\n frame: Extract<EvaluationFrame<R>, { kind: \"core-iteration\" }>,\n value: RuntimeValue,\n): boolean {\n return (\n (frame.operator === \"some\" && value === true) || (frame.operator === \"every\" && value === false)\n );\n}\n\nfunction finishCore<R extends JsonValue>(\n frame: Extract<EvaluationFrame<R>, { kind: \"core-iteration\" }>,\n state: MachineState<R>,\n): void {\n const output = Array.isArray(frame.partial)\n ? validateCollectionOutput(frame.partial, frame.path, state)\n : frame.partial;\n state.stack.pop();\n state.callDepth -= 1;\n deliver(output, state);\n}\n\nfunction validateCollectionOutput<R extends JsonValue>(\n output: JsonValue[],\n path: Path,\n state: MachineState<R>,\n): JsonValue[] {\n try {\n cloneJson(output, {\n maxDepth: state.limits.maxValueDepth,\n maxNodes: state.limits.maxValueNodes,\n maxStringLength: state.limits.maxStringLength,\n });\n } catch {\n fail(\"KALADA_LIMIT_EXCEEDED\", path);\n }\n return Object.freeze(output) as JsonValue[];\n}\n\nfunction deliverReturn<R extends JsonValue>(\n frame: Extract<EvaluationFrame<R>, { kind: \"user-return\" }>,\n state: MachineState<R>,\n): void {\n charge(frame.path, state);\n state.stack.pop();\n state.environment = frame.caller;\n state.callDepth -= 1;\n if (!matchesType(state.value as RuntimeValue, frame.returns))\n fail(\"KALADA_FUNCTION_TYPE_MISMATCH\", frame.path);\n}\n\nfunction restore<R extends JsonValue>(\n environment: RuntimeEnvironment,\n state: MachineState<R>,\n): void {\n state.stack.pop();\n state.environment = environment;\n}\n"]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
function functionEnvironment(closure, values) {
|
|
4
|
+
const output = new Map(closure.captures);
|
|
5
|
+
closure.recursive?.names.forEach((name, index) => {
|
|
6
|
+
output.set(name, closure.recursive?.closures[index]);
|
|
7
|
+
});
|
|
8
|
+
closure.parameters.forEach((parameter, index) => {
|
|
9
|
+
output.set(parameter.name, values[index]);
|
|
10
|
+
});
|
|
11
|
+
return output;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
exports.functionEnvironment = functionEnvironment;
|
|
15
|
+
//# sourceMappingURL=evaluation-frames.cjs.map
|
|
16
|
+
//# sourceMappingURL=evaluation-frames.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/kalada-v1/evaluation-frames.ts"],"names":[],"mappings":";;AAqFO,SAAS,mBAAA,CACd,SACA,MAAA,EACoB;AACpB,EAAA,MAAM,MAAA,GAAS,IAAI,GAAA,CAAI,OAAA,CAAQ,QAAQ,CAAA;AACvC,EAAA,OAAA,CAAQ,SAAA,EAAW,KAAA,CAAM,OAAA,CAAQ,CAAC,MAAM,KAAA,KAAU;AAChD,IAAA,MAAA,CAAO,IAAI,IAAA,EAAM,OAAA,CAAQ,SAAA,EAAW,QAAA,CAAS,KAAK,CAAmB,CAAA;AAAA,EACvE,CAAC,CAAA;AACD,EAAA,OAAA,CAAQ,UAAA,CAAW,OAAA,CAAQ,CAAC,SAAA,EAAW,KAAA,KAAU;AAC/C,IAAA,MAAA,CAAO,GAAA,CAAI,SAAA,CAAU,IAAA,EAAM,MAAA,CAAO,KAAK,CAAiB,CAAA;AAAA,EAC1D,CAAC,CAAA;AACD,EAAA,OAAO,MAAA;AACT","file":"evaluation-frames.cjs","sourcesContent":["import type { JsonValue } from \"./json.js\";\nimport type { RuntimeEnvironment, RuntimeValue, UserClosure } from \"./runtime-values.js\";\nimport type { KaladaCoreFunctionName, KaladaType, KaladaV1Expression, MatchArm } from \"./types.js\";\n\nexport type Path = readonly (string | number)[];\ntype Expression<R extends JsonValue> = KaladaV1Expression<R>;\n\nexport type EvaluationFrame<R extends JsonValue> =\n | {\n kind: \"binding\";\n phase: \"value\" | \"body\";\n path: Path;\n name: string;\n body: Expression<R>;\n outer: RuntimeEnvironment;\n }\n | {\n kind: \"constructor\";\n phase: \"payload\";\n path: Path;\n type: \"Option\" | \"Result\";\n variant: \"some\" | \"ok\" | \"err\";\n }\n | {\n kind: \"match\";\n phase: \"scrutinee\" | \"arm\";\n path: Path;\n type: \"Option\" | \"Result\";\n arms: readonly MatchArm<R>[];\n outer: RuntimeEnvironment;\n scrutinee: RuntimeValue | null;\n selected: number | null;\n }\n | {\n kind: \"temporal-binary\";\n phase: \"left\" | \"right\";\n path: Path;\n expressionKind: \"temporal-arithmetic\" | \"temporal-comparison\";\n operator: string;\n right: Expression<R>;\n left: RuntimeValue | null;\n }\n | {\n kind: \"function-group-body\";\n phase: \"body\";\n path: Path;\n body: Expression<R>;\n outer: RuntimeEnvironment;\n group: RuntimeEnvironment;\n }\n | { kind: \"call-callee\"; phase: \"callee\"; path: Path; arguments: readonly Expression<R>[] }\n | {\n kind: \"call-arguments\";\n phase: \"argument\";\n path: Path;\n callable: RuntimeValue;\n arguments: readonly Expression<R>[];\n values: RuntimeValue[];\n index: number;\n }\n | {\n kind: \"user-return\";\n phase: \"body\";\n path: Path;\n name: string | null;\n returns: KaladaType;\n caller: RuntimeEnvironment;\n }\n | {\n kind: \"core-iteration\";\n phase: \"ready\" | \"callback\";\n path: Path;\n operator: KaladaCoreFunctionName;\n callback: RuntimeValue;\n input: readonly JsonValue[];\n index: number;\n partial: JsonValue[] | boolean;\n };\n\nexport interface EvaluationTask<R extends JsonValue> {\n readonly node: Expression<R>;\n readonly path: Path;\n readonly environment: RuntimeEnvironment;\n}\n\nexport function functionEnvironment<R extends JsonValue>(\n closure: UserClosure<R>,\n values: readonly RuntimeValue[],\n): RuntimeEnvironment {\n const output = new Map(closure.captures);\n closure.recursive?.names.forEach((name, index) => {\n output.set(name, closure.recursive?.closures[index] as UserClosure<R>);\n });\n closure.parameters.forEach((parameter, index) => {\n output.set(parameter.name, values[index] as RuntimeValue);\n });\n return output;\n}\n"]}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { JsonValue } from './json.cjs';
|
|
2
|
+
import { RuntimeEnvironment, RuntimeValue, UserClosure } from './runtime-values.cjs';
|
|
3
|
+
import { KaladaV1Expression, MatchArm, KaladaType, KaladaCoreFunctionName } from './types.cjs';
|
|
4
|
+
import './values.cjs';
|
|
5
|
+
import './temporal.cjs';
|
|
6
|
+
|
|
7
|
+
type Path = readonly (string | number)[];
|
|
8
|
+
type Expression<R extends JsonValue> = KaladaV1Expression<R>;
|
|
9
|
+
type EvaluationFrame<R extends JsonValue> = {
|
|
10
|
+
kind: "binding";
|
|
11
|
+
phase: "value" | "body";
|
|
12
|
+
path: Path;
|
|
13
|
+
name: string;
|
|
14
|
+
body: Expression<R>;
|
|
15
|
+
outer: RuntimeEnvironment;
|
|
16
|
+
} | {
|
|
17
|
+
kind: "constructor";
|
|
18
|
+
phase: "payload";
|
|
19
|
+
path: Path;
|
|
20
|
+
type: "Option" | "Result";
|
|
21
|
+
variant: "some" | "ok" | "err";
|
|
22
|
+
} | {
|
|
23
|
+
kind: "match";
|
|
24
|
+
phase: "scrutinee" | "arm";
|
|
25
|
+
path: Path;
|
|
26
|
+
type: "Option" | "Result";
|
|
27
|
+
arms: readonly MatchArm<R>[];
|
|
28
|
+
outer: RuntimeEnvironment;
|
|
29
|
+
scrutinee: RuntimeValue | null;
|
|
30
|
+
selected: number | null;
|
|
31
|
+
} | {
|
|
32
|
+
kind: "temporal-binary";
|
|
33
|
+
phase: "left" | "right";
|
|
34
|
+
path: Path;
|
|
35
|
+
expressionKind: "temporal-arithmetic" | "temporal-comparison";
|
|
36
|
+
operator: string;
|
|
37
|
+
right: Expression<R>;
|
|
38
|
+
left: RuntimeValue | null;
|
|
39
|
+
} | {
|
|
40
|
+
kind: "function-group-body";
|
|
41
|
+
phase: "body";
|
|
42
|
+
path: Path;
|
|
43
|
+
body: Expression<R>;
|
|
44
|
+
outer: RuntimeEnvironment;
|
|
45
|
+
group: RuntimeEnvironment;
|
|
46
|
+
} | {
|
|
47
|
+
kind: "call-callee";
|
|
48
|
+
phase: "callee";
|
|
49
|
+
path: Path;
|
|
50
|
+
arguments: readonly Expression<R>[];
|
|
51
|
+
} | {
|
|
52
|
+
kind: "call-arguments";
|
|
53
|
+
phase: "argument";
|
|
54
|
+
path: Path;
|
|
55
|
+
callable: RuntimeValue;
|
|
56
|
+
arguments: readonly Expression<R>[];
|
|
57
|
+
values: RuntimeValue[];
|
|
58
|
+
index: number;
|
|
59
|
+
} | {
|
|
60
|
+
kind: "user-return";
|
|
61
|
+
phase: "body";
|
|
62
|
+
path: Path;
|
|
63
|
+
name: string | null;
|
|
64
|
+
returns: KaladaType;
|
|
65
|
+
caller: RuntimeEnvironment;
|
|
66
|
+
} | {
|
|
67
|
+
kind: "core-iteration";
|
|
68
|
+
phase: "ready" | "callback";
|
|
69
|
+
path: Path;
|
|
70
|
+
operator: KaladaCoreFunctionName;
|
|
71
|
+
callback: RuntimeValue;
|
|
72
|
+
input: readonly JsonValue[];
|
|
73
|
+
index: number;
|
|
74
|
+
partial: JsonValue[] | boolean;
|
|
75
|
+
};
|
|
76
|
+
interface EvaluationTask<R extends JsonValue> {
|
|
77
|
+
readonly node: Expression<R>;
|
|
78
|
+
readonly path: Path;
|
|
79
|
+
readonly environment: RuntimeEnvironment;
|
|
80
|
+
}
|
|
81
|
+
declare function functionEnvironment<R extends JsonValue>(closure: UserClosure<R>, values: readonly RuntimeValue[]): RuntimeEnvironment;
|
|
82
|
+
|
|
83
|
+
export { type EvaluationFrame, type EvaluationTask, type Path, functionEnvironment };
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { JsonValue } from './json.js';
|
|
2
|
+
import { RuntimeEnvironment, RuntimeValue, UserClosure } from './runtime-values.js';
|
|
3
|
+
import { KaladaV1Expression, MatchArm, KaladaType, KaladaCoreFunctionName } from './types.js';
|
|
4
|
+
import './values.js';
|
|
5
|
+
import './temporal.js';
|
|
6
|
+
|
|
7
|
+
type Path = readonly (string | number)[];
|
|
8
|
+
type Expression<R extends JsonValue> = KaladaV1Expression<R>;
|
|
9
|
+
type EvaluationFrame<R extends JsonValue> = {
|
|
10
|
+
kind: "binding";
|
|
11
|
+
phase: "value" | "body";
|
|
12
|
+
path: Path;
|
|
13
|
+
name: string;
|
|
14
|
+
body: Expression<R>;
|
|
15
|
+
outer: RuntimeEnvironment;
|
|
16
|
+
} | {
|
|
17
|
+
kind: "constructor";
|
|
18
|
+
phase: "payload";
|
|
19
|
+
path: Path;
|
|
20
|
+
type: "Option" | "Result";
|
|
21
|
+
variant: "some" | "ok" | "err";
|
|
22
|
+
} | {
|
|
23
|
+
kind: "match";
|
|
24
|
+
phase: "scrutinee" | "arm";
|
|
25
|
+
path: Path;
|
|
26
|
+
type: "Option" | "Result";
|
|
27
|
+
arms: readonly MatchArm<R>[];
|
|
28
|
+
outer: RuntimeEnvironment;
|
|
29
|
+
scrutinee: RuntimeValue | null;
|
|
30
|
+
selected: number | null;
|
|
31
|
+
} | {
|
|
32
|
+
kind: "temporal-binary";
|
|
33
|
+
phase: "left" | "right";
|
|
34
|
+
path: Path;
|
|
35
|
+
expressionKind: "temporal-arithmetic" | "temporal-comparison";
|
|
36
|
+
operator: string;
|
|
37
|
+
right: Expression<R>;
|
|
38
|
+
left: RuntimeValue | null;
|
|
39
|
+
} | {
|
|
40
|
+
kind: "function-group-body";
|
|
41
|
+
phase: "body";
|
|
42
|
+
path: Path;
|
|
43
|
+
body: Expression<R>;
|
|
44
|
+
outer: RuntimeEnvironment;
|
|
45
|
+
group: RuntimeEnvironment;
|
|
46
|
+
} | {
|
|
47
|
+
kind: "call-callee";
|
|
48
|
+
phase: "callee";
|
|
49
|
+
path: Path;
|
|
50
|
+
arguments: readonly Expression<R>[];
|
|
51
|
+
} | {
|
|
52
|
+
kind: "call-arguments";
|
|
53
|
+
phase: "argument";
|
|
54
|
+
path: Path;
|
|
55
|
+
callable: RuntimeValue;
|
|
56
|
+
arguments: readonly Expression<R>[];
|
|
57
|
+
values: RuntimeValue[];
|
|
58
|
+
index: number;
|
|
59
|
+
} | {
|
|
60
|
+
kind: "user-return";
|
|
61
|
+
phase: "body";
|
|
62
|
+
path: Path;
|
|
63
|
+
name: string | null;
|
|
64
|
+
returns: KaladaType;
|
|
65
|
+
caller: RuntimeEnvironment;
|
|
66
|
+
} | {
|
|
67
|
+
kind: "core-iteration";
|
|
68
|
+
phase: "ready" | "callback";
|
|
69
|
+
path: Path;
|
|
70
|
+
operator: KaladaCoreFunctionName;
|
|
71
|
+
callback: RuntimeValue;
|
|
72
|
+
input: readonly JsonValue[];
|
|
73
|
+
index: number;
|
|
74
|
+
partial: JsonValue[] | boolean;
|
|
75
|
+
};
|
|
76
|
+
interface EvaluationTask<R extends JsonValue> {
|
|
77
|
+
readonly node: Expression<R>;
|
|
78
|
+
readonly path: Path;
|
|
79
|
+
readonly environment: RuntimeEnvironment;
|
|
80
|
+
}
|
|
81
|
+
declare function functionEnvironment<R extends JsonValue>(closure: UserClosure<R>, values: readonly RuntimeValue[]): RuntimeEnvironment;
|
|
82
|
+
|
|
83
|
+
export { type EvaluationFrame, type EvaluationTask, type Path, functionEnvironment };
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
function functionEnvironment(closure, values) {
|
|
2
|
+
const output = new Map(closure.captures);
|
|
3
|
+
closure.recursive?.names.forEach((name, index) => {
|
|
4
|
+
output.set(name, closure.recursive?.closures[index]);
|
|
5
|
+
});
|
|
6
|
+
closure.parameters.forEach((parameter, index) => {
|
|
7
|
+
output.set(parameter.name, values[index]);
|
|
8
|
+
});
|
|
9
|
+
return output;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export { functionEnvironment };
|
|
13
|
+
//# sourceMappingURL=evaluation-frames.js.map
|
|
14
|
+
//# sourceMappingURL=evaluation-frames.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/kalada-v1/evaluation-frames.ts"],"names":[],"mappings":"AAqFO,SAAS,mBAAA,CACd,SACA,MAAA,EACoB;AACpB,EAAA,MAAM,MAAA,GAAS,IAAI,GAAA,CAAI,OAAA,CAAQ,QAAQ,CAAA;AACvC,EAAA,OAAA,CAAQ,SAAA,EAAW,KAAA,CAAM,OAAA,CAAQ,CAAC,MAAM,KAAA,KAAU;AAChD,IAAA,MAAA,CAAO,IAAI,IAAA,EAAM,OAAA,CAAQ,SAAA,EAAW,QAAA,CAAS,KAAK,CAAmB,CAAA;AAAA,EACvE,CAAC,CAAA;AACD,EAAA,OAAA,CAAQ,UAAA,CAAW,OAAA,CAAQ,CAAC,SAAA,EAAW,KAAA,KAAU;AAC/C,IAAA,MAAA,CAAO,GAAA,CAAI,SAAA,CAAU,IAAA,EAAM,MAAA,CAAO,KAAK,CAAiB,CAAA;AAAA,EAC1D,CAAC,CAAA;AACD,EAAA,OAAO,MAAA;AACT","file":"evaluation-frames.js","sourcesContent":["import type { JsonValue } from \"./json.js\";\nimport type { RuntimeEnvironment, RuntimeValue, UserClosure } from \"./runtime-values.js\";\nimport type { KaladaCoreFunctionName, KaladaType, KaladaV1Expression, MatchArm } from \"./types.js\";\n\nexport type Path = readonly (string | number)[];\ntype Expression<R extends JsonValue> = KaladaV1Expression<R>;\n\nexport type EvaluationFrame<R extends JsonValue> =\n | {\n kind: \"binding\";\n phase: \"value\" | \"body\";\n path: Path;\n name: string;\n body: Expression<R>;\n outer: RuntimeEnvironment;\n }\n | {\n kind: \"constructor\";\n phase: \"payload\";\n path: Path;\n type: \"Option\" | \"Result\";\n variant: \"some\" | \"ok\" | \"err\";\n }\n | {\n kind: \"match\";\n phase: \"scrutinee\" | \"arm\";\n path: Path;\n type: \"Option\" | \"Result\";\n arms: readonly MatchArm<R>[];\n outer: RuntimeEnvironment;\n scrutinee: RuntimeValue | null;\n selected: number | null;\n }\n | {\n kind: \"temporal-binary\";\n phase: \"left\" | \"right\";\n path: Path;\n expressionKind: \"temporal-arithmetic\" | \"temporal-comparison\";\n operator: string;\n right: Expression<R>;\n left: RuntimeValue | null;\n }\n | {\n kind: \"function-group-body\";\n phase: \"body\";\n path: Path;\n body: Expression<R>;\n outer: RuntimeEnvironment;\n group: RuntimeEnvironment;\n }\n | { kind: \"call-callee\"; phase: \"callee\"; path: Path; arguments: readonly Expression<R>[] }\n | {\n kind: \"call-arguments\";\n phase: \"argument\";\n path: Path;\n callable: RuntimeValue;\n arguments: readonly Expression<R>[];\n values: RuntimeValue[];\n index: number;\n }\n | {\n kind: \"user-return\";\n phase: \"body\";\n path: Path;\n name: string | null;\n returns: KaladaType;\n caller: RuntimeEnvironment;\n }\n | {\n kind: \"core-iteration\";\n phase: \"ready\" | \"callback\";\n path: Path;\n operator: KaladaCoreFunctionName;\n callback: RuntimeValue;\n input: readonly JsonValue[];\n index: number;\n partial: JsonValue[] | boolean;\n };\n\nexport interface EvaluationTask<R extends JsonValue> {\n readonly node: Expression<R>;\n readonly path: Path;\n readonly environment: RuntimeEnvironment;\n}\n\nexport function functionEnvironment<R extends JsonValue>(\n closure: UserClosure<R>,\n values: readonly RuntimeValue[],\n): RuntimeEnvironment {\n const output = new Map(closure.captures);\n closure.recursive?.names.forEach((name, index) => {\n output.set(name, closure.recursive?.closures[index] as UserClosure<R>);\n });\n closure.parameters.forEach((parameter, index) => {\n output.set(parameter.name, values[index] as RuntimeValue);\n });\n return output;\n}\n"]}
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var diagnostics_js = require('./diagnostics.js');
|
|
4
|
+
var evaluationDelivery_js = require('./evaluation-delivery.js');
|
|
5
|
+
var evaluationResolution_js = require('./evaluation-resolution.js');
|
|
6
|
+
var evaluationState_js = require('./evaluation-state.js');
|
|
7
|
+
var runtimeValues_js = require('./runtime-values.js');
|
|
8
|
+
var temporalEvaluation_js = require('./temporal-evaluation.js');
|
|
9
|
+
var values_js = require('./values.js');
|
|
10
|
+
|
|
11
|
+
const FUNCTION_RUNTIME_DIAGNOSTICS = /* @__PURE__ */ new Set([
|
|
12
|
+
"KALADA_CAPTURE_LIMIT",
|
|
13
|
+
"KALADA_NOT_CALLABLE",
|
|
14
|
+
"KALADA_FUNCTION_ARITY",
|
|
15
|
+
"KALADA_FUNCTION_TYPE_MISMATCH",
|
|
16
|
+
"KALADA_CLOSURE_LIMIT",
|
|
17
|
+
"KALADA_CALL_DEPTH_LIMIT",
|
|
18
|
+
"KALADA_CONTINUATION_LIMIT",
|
|
19
|
+
"KALADA_COLLECTION_TYPE_MISMATCH",
|
|
20
|
+
"KALADA_COLLECTION_LIMIT",
|
|
21
|
+
"KALADA_FUNCTION_ESCAPE"
|
|
22
|
+
]);
|
|
23
|
+
function runEvaluation(expression, resolve, limits, functions, instant) {
|
|
24
|
+
const environment = /* @__PURE__ */ new Map();
|
|
25
|
+
const state = {
|
|
26
|
+
resolve,
|
|
27
|
+
limits,
|
|
28
|
+
captures: evaluationState_js.captureMap(functions),
|
|
29
|
+
instant,
|
|
30
|
+
stack: [],
|
|
31
|
+
task: { node: expression, path: ["expression"], environment },
|
|
32
|
+
value: null,
|
|
33
|
+
environment,
|
|
34
|
+
steps: 0,
|
|
35
|
+
closures: 0,
|
|
36
|
+
captured: 0,
|
|
37
|
+
callDepth: 0,
|
|
38
|
+
collectionIterations: 0
|
|
39
|
+
};
|
|
40
|
+
try {
|
|
41
|
+
return runLoop(state);
|
|
42
|
+
} catch (error) {
|
|
43
|
+
if (!(error instanceof diagnostics_js.KaladaFailure) || error.context) throw error;
|
|
44
|
+
const context = evaluationState_js.diagnosticContext(state);
|
|
45
|
+
const includeContext = context.length > 0 || FUNCTION_RUNTIME_DIAGNOSTICS.has(error.code);
|
|
46
|
+
evaluationState_js.unwind(state);
|
|
47
|
+
throw new diagnostics_js.KaladaFailure(error.code, error.path, includeContext ? context : void 0);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
function runLoop(state) {
|
|
51
|
+
while (true) {
|
|
52
|
+
const result = advance(state);
|
|
53
|
+
if (result !== void 0) return result;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
function advance(state) {
|
|
57
|
+
if (state.task) {
|
|
58
|
+
evaluateTask(state);
|
|
59
|
+
return void 0;
|
|
60
|
+
}
|
|
61
|
+
if (state.stack.length > 0) {
|
|
62
|
+
evaluationDelivery_js.deliverFrame(state);
|
|
63
|
+
return void 0;
|
|
64
|
+
}
|
|
65
|
+
const value = state.value;
|
|
66
|
+
if (runtimeValues_js.isCallable(value)) evaluationState_js.fail("KALADA_FUNCTION_ESCAPE", ["expression"]);
|
|
67
|
+
return value;
|
|
68
|
+
}
|
|
69
|
+
function evaluateTask(state) {
|
|
70
|
+
const task = state.task;
|
|
71
|
+
state.task = null;
|
|
72
|
+
state.environment = task.environment;
|
|
73
|
+
evaluationState_js.charge(task.path, state);
|
|
74
|
+
const { node, path } = task;
|
|
75
|
+
switch (node.kind) {
|
|
76
|
+
case "literal":
|
|
77
|
+
evaluationState_js.deliver(node.value, state);
|
|
78
|
+
break;
|
|
79
|
+
case "ref":
|
|
80
|
+
evaluateReference(node.ref, path, state);
|
|
81
|
+
break;
|
|
82
|
+
case "binding":
|
|
83
|
+
enterBinding(node, path, state);
|
|
84
|
+
break;
|
|
85
|
+
case "option":
|
|
86
|
+
case "result":
|
|
87
|
+
enterConstructor(node, path, state);
|
|
88
|
+
break;
|
|
89
|
+
case "match":
|
|
90
|
+
enterMatch(node, path, state);
|
|
91
|
+
break;
|
|
92
|
+
case "function":
|
|
93
|
+
evaluationState_js.deliver(materializeFunction(node, path, state), state);
|
|
94
|
+
break;
|
|
95
|
+
case "function-group":
|
|
96
|
+
enterGroup(node, path, state);
|
|
97
|
+
break;
|
|
98
|
+
case "call":
|
|
99
|
+
enterCall(node, path, state);
|
|
100
|
+
break;
|
|
101
|
+
case "core-function":
|
|
102
|
+
evaluationState_js.deliver(runtimeValues_js.coreCallable(node.name), state);
|
|
103
|
+
break;
|
|
104
|
+
case "temporal-arithmetic":
|
|
105
|
+
case "temporal-comparison":
|
|
106
|
+
enterTemporal(node, path, state);
|
|
107
|
+
break;
|
|
108
|
+
default:
|
|
109
|
+
evaluationState_js.deliver(temporalEvaluation_js.temporalLeaf(node, path, state.instant), state);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
function evaluateReference(reference, path, state) {
|
|
113
|
+
if (typeof reference === "string" && state.environment.has(reference)) {
|
|
114
|
+
evaluationState_js.deliver(state.environment.get(reference), state);
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
evaluationState_js.deliver(evaluationResolution_js.resolveReference(reference, path, state.resolve, state.limits), state);
|
|
118
|
+
}
|
|
119
|
+
function enterBinding(node, path, state) {
|
|
120
|
+
evaluationState_js.push(
|
|
121
|
+
{
|
|
122
|
+
kind: "binding",
|
|
123
|
+
phase: "value",
|
|
124
|
+
path,
|
|
125
|
+
name: node.name,
|
|
126
|
+
body: node.body,
|
|
127
|
+
outer: state.environment
|
|
128
|
+
},
|
|
129
|
+
[...path, "value"],
|
|
130
|
+
state
|
|
131
|
+
);
|
|
132
|
+
evaluationState_js.evaluate(node.value, [...path, "value"], state.environment, state);
|
|
133
|
+
}
|
|
134
|
+
function enterConstructor(node, path, state) {
|
|
135
|
+
if (node.kind === "option" && node.variant === "none") {
|
|
136
|
+
evaluationState_js.deliver(values_js.Option.none(), state);
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
const type = node.kind === "option" ? "Option" : "Result";
|
|
140
|
+
evaluationState_js.push(
|
|
141
|
+
{ kind: "constructor", phase: "payload", path, type, variant: node.variant },
|
|
142
|
+
[...path, "value"],
|
|
143
|
+
state
|
|
144
|
+
);
|
|
145
|
+
evaluationState_js.evaluate(node.value, [...path, "value"], state.environment, state);
|
|
146
|
+
}
|
|
147
|
+
function enterMatch(node, path, state) {
|
|
148
|
+
evaluationState_js.push(
|
|
149
|
+
{
|
|
150
|
+
kind: "match",
|
|
151
|
+
phase: "scrutinee",
|
|
152
|
+
path,
|
|
153
|
+
type: node.type,
|
|
154
|
+
arms: node.arms,
|
|
155
|
+
outer: state.environment,
|
|
156
|
+
scrutinee: null,
|
|
157
|
+
selected: null
|
|
158
|
+
},
|
|
159
|
+
[...path, "value"],
|
|
160
|
+
state
|
|
161
|
+
);
|
|
162
|
+
evaluationState_js.evaluate(node.value, [...path, "value"], state.environment, state);
|
|
163
|
+
}
|
|
164
|
+
function enterTemporal(node, path, state) {
|
|
165
|
+
evaluationState_js.push(
|
|
166
|
+
{
|
|
167
|
+
kind: "temporal-binary",
|
|
168
|
+
phase: "left",
|
|
169
|
+
path,
|
|
170
|
+
expressionKind: node.kind,
|
|
171
|
+
operator: node.operator,
|
|
172
|
+
right: node.right,
|
|
173
|
+
left: null
|
|
174
|
+
},
|
|
175
|
+
[...path, "left"],
|
|
176
|
+
state
|
|
177
|
+
);
|
|
178
|
+
evaluationState_js.evaluate(node.left, [...path, "left"], state.environment, state);
|
|
179
|
+
}
|
|
180
|
+
function enterCall(node, path, state) {
|
|
181
|
+
evaluationState_js.push(
|
|
182
|
+
{ kind: "call-callee", phase: "callee", path, arguments: node.arguments },
|
|
183
|
+
[...path, "callee"],
|
|
184
|
+
state
|
|
185
|
+
);
|
|
186
|
+
evaluationState_js.evaluate(node.callee, [...path, "callee"], state.environment, state);
|
|
187
|
+
}
|
|
188
|
+
function enterGroup(node, path, state) {
|
|
189
|
+
const names = Object.freeze(node.functions.map((item) => item.name));
|
|
190
|
+
const closures = [];
|
|
191
|
+
const recursive = { names, closures };
|
|
192
|
+
node.functions.forEach((member, index) => {
|
|
193
|
+
const memberPath = [...path, "functions", index];
|
|
194
|
+
evaluationState_js.reserveClosure(memberPath, state);
|
|
195
|
+
const captured = evaluationState_js.copyCaptures(memberPath, state);
|
|
196
|
+
closures.push(runtimeValues_js.closureFromMember(member, memberPath, captured, recursive));
|
|
197
|
+
});
|
|
198
|
+
Object.freeze(closures);
|
|
199
|
+
Object.freeze(recursive);
|
|
200
|
+
const group = new Map(state.environment);
|
|
201
|
+
names.forEach((name, index) => {
|
|
202
|
+
group.set(name, closures[index]);
|
|
203
|
+
});
|
|
204
|
+
evaluationState_js.push(
|
|
205
|
+
{
|
|
206
|
+
kind: "function-group-body",
|
|
207
|
+
phase: "body",
|
|
208
|
+
path,
|
|
209
|
+
body: node.body,
|
|
210
|
+
outer: state.environment,
|
|
211
|
+
group
|
|
212
|
+
},
|
|
213
|
+
[...path, "body"],
|
|
214
|
+
state
|
|
215
|
+
);
|
|
216
|
+
evaluationState_js.evaluate(node.body, [...path, "body"], group, state);
|
|
217
|
+
}
|
|
218
|
+
function materializeFunction(node, path, state) {
|
|
219
|
+
evaluationState_js.reserveClosure(path, state);
|
|
220
|
+
const captures = evaluationState_js.copyCaptures(path, state);
|
|
221
|
+
return runtimeValues_js.closureFromExpression(node, path, captures);
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
exports.runEvaluation = runEvaluation;
|
|
225
|
+
//# sourceMappingURL=evaluation-machine.cjs.map
|
|
226
|
+
//# sourceMappingURL=evaluation-machine.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/kalada-v1/evaluation-machine.ts"],"names":["captureMap","KaladaFailure","diagnosticContext","unwind","deliverFrame","isCallable","charge","deliver","coreCallable","temporalLeaf","resolveReference","push","evaluate","Option","reserveClosure","copyCaptures","closureFromMember","closureFromExpression"],"mappings":"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","file":"evaluation-machine.cjs","sourcesContent":["import { KaladaFailure } from \"./diagnostics.js\";\nimport { deliverFrame } from \"./evaluation-delivery.js\";\nimport type { EvaluationTask, Path } from \"./evaluation-frames.js\";\nimport { resolveReference } from \"./evaluation-resolution.js\";\nimport {\n captureMap,\n charge,\n copyCaptures,\n deliver,\n diagnosticContext,\n evaluate,\n fail,\n type MachineState,\n push,\n reserveClosure,\n unwind,\n} from \"./evaluation-state.js\";\nimport type { JsonValue } from \"./json.js\";\nimport type { ResolvedKaladaV1Limits } from \"./limits.js\";\nimport {\n closureFromExpression,\n closureFromMember,\n coreCallable,\n isCallable,\n type RecursiveEnvironment,\n type RuntimeValue,\n type UserClosure,\n} from \"./runtime-values.js\";\nimport type { InstantValue } from \"./temporal.js\";\nimport { temporalLeaf } from \"./temporal-evaluation.js\";\nimport type { KaladaV1Expression, KaladaV1FunctionCapture, KaladaV1Resolver } from \"./types.js\";\nimport { type KaladaValue, Option } from \"./values.js\";\n\nconst FUNCTION_RUNTIME_DIAGNOSTICS = new Set([\n \"KALADA_CAPTURE_LIMIT\",\n \"KALADA_NOT_CALLABLE\",\n \"KALADA_FUNCTION_ARITY\",\n \"KALADA_FUNCTION_TYPE_MISMATCH\",\n \"KALADA_CLOSURE_LIMIT\",\n \"KALADA_CALL_DEPTH_LIMIT\",\n \"KALADA_CONTINUATION_LIMIT\",\n \"KALADA_COLLECTION_TYPE_MISMATCH\",\n \"KALADA_COLLECTION_LIMIT\",\n \"KALADA_FUNCTION_ESCAPE\",\n]);\n\nexport function runEvaluation<R extends JsonValue>(\n expression: KaladaV1Expression<R>,\n resolve: KaladaV1Resolver<R>,\n limits: ResolvedKaladaV1Limits,\n functions: readonly KaladaV1FunctionCapture[],\n instant: InstantValue | undefined,\n): KaladaValue {\n const environment = new Map<string, RuntimeValue>();\n const state: MachineState<R> = {\n resolve,\n limits,\n captures: captureMap(functions),\n instant,\n stack: [],\n task: { node: expression, path: [\"expression\"], environment },\n value: null,\n environment,\n steps: 0,\n closures: 0,\n captured: 0,\n callDepth: 0,\n collectionIterations: 0,\n };\n try {\n return runLoop(state);\n } catch (error) {\n if (!(error instanceof KaladaFailure) || error.context) throw error;\n const context = diagnosticContext(state);\n const includeContext = context.length > 0 || FUNCTION_RUNTIME_DIAGNOSTICS.has(error.code);\n unwind(state);\n throw new KaladaFailure(error.code, error.path, includeContext ? context : undefined);\n }\n}\n\nfunction runLoop<R extends JsonValue>(state: MachineState<R>): KaladaValue {\n while (true) {\n const result = advance(state);\n if (result !== undefined) return result;\n }\n}\n\nfunction advance<R extends JsonValue>(state: MachineState<R>): KaladaValue | undefined {\n if (state.task) {\n evaluateTask(state);\n return undefined;\n }\n if (state.stack.length > 0) {\n deliverFrame(state);\n return undefined;\n }\n const value = state.value as RuntimeValue;\n if (isCallable(value)) fail(\"KALADA_FUNCTION_ESCAPE\", [\"expression\"]);\n return value;\n}\n\nfunction evaluateTask<R extends JsonValue>(state: MachineState<R>): void {\n const task = state.task as EvaluationTask<R>;\n state.task = null;\n state.environment = task.environment;\n charge(task.path, state);\n const { node, path } = task;\n switch (node.kind) {\n case \"literal\":\n deliver(node.value, state);\n break;\n case \"ref\":\n evaluateReference(node.ref, path, state);\n break;\n case \"binding\":\n enterBinding(node, path, state);\n break;\n case \"option\":\n case \"result\":\n enterConstructor(node, path, state);\n break;\n case \"match\":\n enterMatch(node, path, state);\n break;\n case \"function\":\n deliver(materializeFunction(node, path, state), state);\n break;\n case \"function-group\":\n enterGroup(node, path, state);\n break;\n case \"call\":\n enterCall(node, path, state);\n break;\n case \"core-function\":\n deliver(coreCallable(node.name), state);\n break;\n case \"temporal-arithmetic\":\n case \"temporal-comparison\":\n enterTemporal(node, path, state);\n break;\n default:\n deliver(temporalLeaf(node, path, state.instant), state);\n }\n}\n\nfunction evaluateReference<R extends JsonValue>(\n reference: R,\n path: Path,\n state: MachineState<R>,\n): void {\n if (typeof reference === \"string\" && state.environment.has(reference)) {\n deliver(state.environment.get(reference) as RuntimeValue, state);\n return;\n }\n deliver(resolveReference(reference, path, state.resolve, state.limits), state);\n}\n\nfunction enterBinding<R extends JsonValue>(\n node: Extract<KaladaV1Expression<R>, { kind: \"binding\" }>,\n path: Path,\n state: MachineState<R>,\n): void {\n push(\n {\n kind: \"binding\",\n phase: \"value\",\n path,\n name: node.name,\n body: node.body,\n outer: state.environment,\n },\n [...path, \"value\"],\n state,\n );\n evaluate(node.value, [...path, \"value\"], state.environment, state);\n}\n\nfunction enterConstructor<R extends JsonValue>(\n node: Extract<KaladaV1Expression<R>, { kind: \"option\" | \"result\" }>,\n path: Path,\n state: MachineState<R>,\n): void {\n if (node.kind === \"option\" && node.variant === \"none\") {\n deliver(Option.none(), state);\n return;\n }\n const type = node.kind === \"option\" ? \"Option\" : \"Result\";\n push(\n { kind: \"constructor\", phase: \"payload\", path, type, variant: node.variant },\n [...path, \"value\"],\n state,\n );\n evaluate(node.value, [...path, \"value\"], state.environment, state);\n}\n\nfunction enterMatch<R extends JsonValue>(\n node: Extract<KaladaV1Expression<R>, { kind: \"match\" }>,\n path: Path,\n state: MachineState<R>,\n): void {\n push(\n {\n kind: \"match\",\n phase: \"scrutinee\",\n path,\n type: node.type,\n arms: node.arms,\n outer: state.environment,\n scrutinee: null,\n selected: null,\n },\n [...path, \"value\"],\n state,\n );\n evaluate(node.value, [...path, \"value\"], state.environment, state);\n}\n\nfunction enterTemporal<R extends JsonValue>(\n node: Extract<KaladaV1Expression<R>, { kind: \"temporal-arithmetic\" | \"temporal-comparison\" }>,\n path: Path,\n state: MachineState<R>,\n): void {\n push(\n {\n kind: \"temporal-binary\",\n phase: \"left\",\n path,\n expressionKind: node.kind,\n operator: node.operator,\n right: node.right,\n left: null,\n },\n [...path, \"left\"],\n state,\n );\n evaluate(node.left, [...path, \"left\"], state.environment, state);\n}\n\nfunction enterCall<R extends JsonValue>(\n node: Extract<KaladaV1Expression<R>, { kind: \"call\" }>,\n path: Path,\n state: MachineState<R>,\n): void {\n push(\n { kind: \"call-callee\", phase: \"callee\", path, arguments: node.arguments },\n [...path, \"callee\"],\n state,\n );\n evaluate(node.callee, [...path, \"callee\"], state.environment, state);\n}\n\nfunction enterGroup<R extends JsonValue>(\n node: Extract<KaladaV1Expression<R>, { kind: \"function-group\" }>,\n path: Path,\n state: MachineState<R>,\n): void {\n const names = Object.freeze(node.functions.map((item) => item.name));\n const closures: UserClosure<R>[] = [];\n const recursive = { names, closures } as RecursiveEnvironment<R>;\n node.functions.forEach((member, index) => {\n const memberPath = [...path, \"functions\", index];\n reserveClosure(memberPath, state);\n const captured = copyCaptures(memberPath, state);\n closures.push(closureFromMember(member, memberPath, captured, recursive));\n });\n Object.freeze(closures);\n Object.freeze(recursive);\n const group = new Map(state.environment);\n names.forEach((name, index) => {\n group.set(name, closures[index] as UserClosure<R>);\n });\n push(\n {\n kind: \"function-group-body\",\n phase: \"body\",\n path,\n body: node.body,\n outer: state.environment,\n group,\n },\n [...path, \"body\"],\n state,\n );\n evaluate(node.body, [...path, \"body\"], group, state);\n}\n\nfunction materializeFunction<R extends JsonValue>(\n node: Extract<KaladaV1Expression<R>, { kind: \"function\" }>,\n path: Path,\n state: MachineState<R>,\n): UserClosure<R> {\n reserveClosure(path, state);\n const captures = copyCaptures(path, state);\n return closureFromExpression(node, path, captures);\n}\n"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { JsonValue } from './json.cjs';
|
|
2
|
+
import { ResolvedKaladaV1Limits } from './limits.cjs';
|
|
3
|
+
import { InstantValue } from './temporal.cjs';
|
|
4
|
+
import { KaladaV1Expression, KaladaV1Resolver, KaladaV1FunctionCapture } from './types.cjs';
|
|
5
|
+
import { KaladaValue } from './values.cjs';
|
|
6
|
+
|
|
7
|
+
declare function runEvaluation<R extends JsonValue>(expression: KaladaV1Expression<R>, resolve: KaladaV1Resolver<R>, limits: ResolvedKaladaV1Limits, functions: readonly KaladaV1FunctionCapture[], instant: InstantValue | undefined): KaladaValue;
|
|
8
|
+
|
|
9
|
+
export { runEvaluation };
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { JsonValue } from './json.js';
|
|
2
|
+
import { ResolvedKaladaV1Limits } from './limits.js';
|
|
3
|
+
import { InstantValue } from './temporal.js';
|
|
4
|
+
import { KaladaV1Expression, KaladaV1Resolver, KaladaV1FunctionCapture } from './types.js';
|
|
5
|
+
import { KaladaValue } from './values.js';
|
|
6
|
+
|
|
7
|
+
declare function runEvaluation<R extends JsonValue>(expression: KaladaV1Expression<R>, resolve: KaladaV1Resolver<R>, limits: ResolvedKaladaV1Limits, functions: readonly KaladaV1FunctionCapture[], instant: InstantValue | undefined): KaladaValue;
|
|
8
|
+
|
|
9
|
+
export { runEvaluation };
|