/**
 * Call-site analysis — Argument passing & binding resolution
 *
 * Argument modifiers, binding resolution helpers, and parameter mode
 * detection for call/new expression converters. Split from
 * call-site-analysis.ts for file-size compliance.
 */
import * as ts from "typescript";
import { IrType } from "../../../types.js";
import type { ProgramContext } from "../../../program-context.js";
import { convertExpression } from "../../../expression-converter.js";
import type { CallSiteArgModifier } from "./call-site-analysis-unification.js";
/**
 * Unwrap call-site argument modifier markers.
 *
 * @tsonic/core/lang.js exports compile-time-only intrinsics:
 * - out(x)   → emit `out x` at the call site
 * - ref(x)   → emit `ref x`
 * - inref(x) → emit `in x`
 *
 * These markers must be erased by the compiler and must never reach emission as
 * normal calls.
 */
export declare const unwrapCallSiteArgumentModifier: (expr: ts.Expression) => {
    readonly expression: ts.Expression;
    readonly modifier?: CallSiteArgModifier;
};
export declare const applyCallSiteArgumentModifiers: (base: readonly ("value" | "ref" | "out" | "in")[] | undefined, overrides: readonly (CallSiteArgModifier | undefined)[], argCount: number, ctx: ProgramContext, node: ts.CallExpression | ts.NewExpression) => readonly ("value" | "ref" | "out" | "in")[] | undefined;
/**
 * Extract argument passing modes from resolved signature.
 * Returns array aligned with arguments, indicating ref/out/in/value for each.
 *
 * ALICE'S SPEC: Uses TypeSystem to get parameter modes.
 * Parameter modes were normalized in Binding at registration time.
 */
export declare const extractArgumentPassing: (node: ts.CallExpression | ts.NewExpression, ctx: ProgramContext) => readonly ("value" | "ref" | "out" | "in")[] | undefined;
export declare const extractArgumentPassingFromParameterModifiers: (modifiers: readonly {
    readonly index: number;
    readonly modifier: "ref" | "out" | "in";
}[], argCount: number) => readonly ("value" | "ref" | "out" | "in")[] | undefined;
/**
 * Extract argument passing modes from CLR bindings for the *selected overload*.
 *
 * CRITICAL: Methods can be overloaded, and overloads can differ in ref/out/in modifiers.
 * We must not attach a single overload's modifiers to the member access itself.
 *
 * This resolver selects the best-matching binding overload using the call's argument
 * types, then applies that overload's parameterModifiers.
 */
export declare const extractArgumentPassingFromBinding: (callee: ReturnType<typeof convertExpression>, argCount: number, ctx: ProgramContext, parameterTypes: readonly (IrType | undefined)[] | undefined, argTypes: readonly (IrType | undefined)[] | undefined) => readonly ("value" | "ref" | "out" | "in")[] | undefined;
//# sourceMappingURL=call-site-analysis-argument-passing.d.ts.map