/** * primitives.ts — codegen が直呼びできる安定 primitive 公開面(bc#36 / typed-codegen.md §3.4)。 * * これは **A0 = 公開面の確定**(emitter 生成ロジックは A1/#37)。生成コードが * 「細粒度 primitive を呼ぶ」ための callable surface。 * * 最重要規律: **演算子意味論は再実装しない**、かつ **codegen は IR を出力しない**(bc no-ir * invariant)。各 native primitive は被演算子を**評価済み Value**(短絡系は遅延 thunk)で受け、 * 意味論 SSoT の value-core(expr-eval.ts の arithCore/compareCore/makeObjCore/… — `evaluate` の * 各アームと同一実装)へ委譲する。よって意味論(INT_OVERFLOW / PRECISION_LOSS / MOD_ZERO / * NULL_REF / TYPE_MISMATCH / FORBIDDEN_KEY / 短絡 / code-point 順 等)は `evaluate` と完全一致 * (実装が一本なので発散不能)。生 IR の実行が要る経路(ir exec surface)は `evaluate` を直接使う。 * * これに加えて runPlan / bounded 並行 / skip・unproduced / hydration helper を再エクスポート * または薄く公開する(いずれも既存実装を SSoT として共有)。 */ import { type Value, type Scope } from "./expr-eval.js"; import { type RelationKind } from "./plan.js"; /** Expression IR ノード型(`ir` exec surface / evaluate が解釈する。native primitive は使わない)。 */ export type Expr = unknown; /** 遅延評価される被演算子(短絡 and/or/cond/coalesce 用)。 */ export type Thunk = () => Value; /** 参照(native scope walk。中間 null は NULL_REF)。path は静的 string[]。 */ export declare function ref(path: string[], scope: Scope): Value; /** null 安全参照(中間 null は null 伝播)。 */ export declare function refOpt(path: string[], scope: Scope): Value; /** `{int:"..."}` リテラル。 */ export declare function intLit(literal: string): Value; /** `{float:n}` リテラル。 */ export declare function floatLit(n: number): Value; /** bare number リテラル(§2.3 分類)。 */ export declare function numberLit(n: number): Value; /** object 構築(キー順・__proto__ は値評価前に FORBIDDEN_KEY)。値は遅延 thunk。 */ export declare function obj(entries: Array<[string, Thunk]>): Value; /** array 構築(要素は評価済み Value、左→右順)。 */ export declare function arr(elems: Value[]): Value; /** 加算/減算/乗算(int×int checked / float×float finite / 混在 TYPE_MISMATCH)。 */ export declare function add(a: Value, b: Value): Value; export declare function sub(a: Value, b: Value): Value; export declare function mul(a: Value, b: Value): Value; /** 単項マイナス。 */ export declare function neg(a: Value): Value; /** 除算(常に float)。 */ export declare function div(a: Value, b: Value): Value; /** 剰余。 */ export declare function mod(a: Value, b: Value): Value; /** 文字列連結(string のみ。要素は評価済み Value)。 */ export declare function concat(parts: Value[]): Value; /** 等価/非等価。 */ export declare function eq(a: Value, b: Value): Value; export declare function ne(a: Value, b: Value): Value; /** 比較(同一型 int/float/string、string は code-point 順)。 */ export declare function lt(a: Value, b: Value): Value; export declare function le(a: Value, b: Value): Value; export declare function gt(a: Value, b: Value): Value; export declare function ge(a: Value, b: Value): Value; /** 論理積(短絡: 左辺 false なら右辺 thunk は呼ばない)。 */ export declare function and(a: Thunk, b: Thunk): Value; /** 論理和(短絡: 左辺 true なら右辺 thunk は呼ばない)。 */ export declare function or(a: Thunk, b: Thunk): Value; /** 論理否定(strict bool)。被演算子は評価済み。 */ export declare function not(a: Value): Value; /** null 合体(左が null のときだけ右 thunk を評価)。 */ export declare function coalesce(a: Thunk, b: Thunk): Value; /** 条件(strict bool。採用側 thunk のみ評価)。 */ export declare function cond(c: Thunk, then: Thunk, els: Thunk): Value; /** 配列長(配列のみ)。 */ export declare function len(a: Value): Value; /** * mapWithConcurrency — 入力順を保存し、in-flight を `concurrency` で上限する bounded 並行 map。 * execution-plan.md §4 の determinism 規律(output[i]=worker(items[i]) / 完了順非依存 / * FIFO dispatch)を単体 primitive として公開する。runPlanAsync 内の同名機構と同一規律。 * * @param items 入力(順序保存の基準)。 * @param concurrency 同時 in-flight 上限(<=1 で逐次)。 * @param worker 各要素の非同期処理(`worker(item, index)`)。 * @returns `items` と同じ長さ・順序の結果配列。 */ export declare function mapWithConcurrency(items: readonly T[], concurrency: number, worker: (item: T, index: number) => R | Promise): Promise; /** * 未生成 Port(Skip)の表現値を返す。single→null / connection→空 connection。 * 判定 SSoT は plan.ts の {@link unproducedValueSSoT}(§2 末尾)。ここはそれを生成コード向けに * 再公開する公開面であり、literal を写さない("connection → 空 connection、それ以外 → null" の決定は * plan.ts に 1 箇所)。 */ export declare function unproducedValue(kind: RelationKind | undefined): Value; /** connection relation の未生成 = {items:[],cursor:null}(unproducedValue("connection") の明示版)。 */ export declare function skipConnection(): Value; //# sourceMappingURL=primitives.d.ts.map