import type { ProgramContext } from "../../../program-context.js";
import type { IrExpression, IrType } from "../../../types.js";
export declare const containsTypeParameter: (type: IrType | undefined, seen?: WeakSet<object>) => boolean;
export declare const getDirectStructuralMemberType: (receiverType: IrType | undefined, memberName: string) => IrType | undefined;
export declare const getAuthoritativeDirectCalleeParameterTypes: (callee: IrExpression, argumentCount: number, ctx: ProgramContext) => readonly (IrType | undefined)[] | undefined;
export declare const invocationTypesEquivalent: (left: IrType | undefined, right: IrType | undefined, ctx: ProgramContext) => boolean;
export declare const normalizeFinalizedInvocationArguments: (argumentsList: readonly IrExpression[], parameterTypes: readonly (IrType | undefined)[] | undefined, surfaceParameterTypes: readonly (IrType | undefined)[] | undefined, ctx: ProgramContext) => readonly IrExpression[];
export declare const shouldPreferExactMemberType: (currentType: IrType | undefined, exactType: IrType | undefined, ctx: ProgramContext) => exactType is IrType;
export declare const choosePreferredExactTypeArray: (candidates: readonly (readonly (IrType | undefined)[] | undefined)[], ctx: ProgramContext) => readonly (IrType | undefined)[] | undefined;
export declare const selectDeterministicSourceBackedParameterType: (parameterType: IrType | undefined, actualArgType: IrType | undefined, ctx: ProgramContext) => IrType | undefined;
export declare const expandAuthoritativeSourceBackedSurfaceType: (type: IrType | undefined, ctx: ProgramContext, seen?: ReadonlySet<string>, options?: {
    readonly preserveCarrierIdentity?: boolean;
}) => IrType | undefined;
export declare const deriveInvocationTypeSubstitutions: (parameterTypes: readonly (IrType | undefined)[], actualArgTypes: readonly (IrType | undefined)[] | undefined, returnType: IrType, expectedType: IrType | undefined, methodTypeParameterNames: readonly string[], explicitTypeArgs: readonly IrType[] | undefined, ctx: ProgramContext) => ReadonlyMap<string, IrType> | undefined;
type InvocationFinalizationInput = {
    readonly ctx: ProgramContext;
    readonly callee: IrExpression;
    readonly receiverType: IrType | undefined;
    readonly callableType: Extract<IrType, {
        kind: "functionType";
    }> | undefined;
    readonly argumentCount: number;
    readonly argTypes: readonly (IrType | undefined)[];
    readonly explicitTypeArgs: readonly IrType[] | undefined;
    readonly expectedType: IrType | undefined;
    readonly boundGlobalParameterTypes: readonly (IrType | undefined)[] | undefined;
    readonly authoritativeBoundGlobalSurfaceParameterTypes: readonly (IrType | undefined)[] | undefined;
    readonly authoritativeBoundGlobalReturnType: IrType | undefined;
    readonly sourceBackedParameterTypes: readonly (IrType | undefined)[] | undefined;
    readonly sourceBackedSurfaceParameterTypes: readonly (IrType | undefined)[] | undefined;
    readonly sourceBackedReturnType: IrType | undefined;
    readonly ambientBoundGlobalSurfaceParameterTypes: readonly (IrType | undefined)[] | undefined;
    readonly authoritativeDirectParameterTypes: readonly (IrType | undefined)[] | undefined;
    readonly resolvedParameterTypes: readonly (IrType | undefined)[] | undefined;
    readonly resolvedSurfaceParameterTypes: readonly (IrType | undefined)[] | undefined;
    readonly resolvedReturnType: IrType | undefined;
    readonly fallbackParameterTypes: readonly (IrType | undefined)[] | undefined;
    readonly fallbackSurfaceParameterTypes: readonly (IrType | undefined)[] | undefined;
    readonly exactParameterCandidates: readonly (readonly (IrType | undefined)[] | undefined)[];
    readonly exactSurfaceParameterCandidates: readonly (readonly (IrType | undefined)[] | undefined)[];
    readonly exactReturnCandidates: readonly (IrType | undefined)[];
    readonly preserveDirectSurfaceIdentity: boolean;
};
type InvocationFinalizationResult = {
    readonly parameterTypes: readonly (IrType | undefined)[] | undefined;
    readonly surfaceParameterTypes: readonly (IrType | undefined)[] | undefined;
    readonly sourceBackedParameterTypes: readonly (IrType | undefined)[] | undefined;
    readonly sourceBackedSurfaceParameterTypes: readonly (IrType | undefined)[] | undefined;
    readonly sourceBackedReturnType: IrType | undefined;
    readonly exactParameterTypes: readonly (IrType | undefined)[] | undefined;
    readonly exactSurfaceParameterTypes: readonly (IrType | undefined)[] | undefined;
    readonly exactReturnType: IrType | undefined;
};
export declare const finalizeInvocationMetadata: ({ ctx, callee, receiverType, callableType, argumentCount, argTypes, explicitTypeArgs, expectedType, boundGlobalParameterTypes, authoritativeBoundGlobalSurfaceParameterTypes, authoritativeBoundGlobalReturnType, sourceBackedParameterTypes, sourceBackedSurfaceParameterTypes, sourceBackedReturnType, ambientBoundGlobalSurfaceParameterTypes, resolvedParameterTypes, resolvedSurfaceParameterTypes, resolvedReturnType, fallbackParameterTypes, fallbackSurfaceParameterTypes, exactParameterCandidates, exactSurfaceParameterCandidates, exactReturnCandidates, preserveDirectSurfaceIdentity: _preserveDirectSurfaceIdentity, }: InvocationFinalizationInput) => InvocationFinalizationResult;
export {};
//# sourceMappingURL=invocation-finalization.d.ts.map