import { type Environment } from "../../env";
import { type Expr } from "../../expr";
import type { FunctionValue } from "../../function-value";
import type { FunctionParameter, FunctionType, Type } from "../../types/definitions";
import { type Value } from "../../value";
import type { EvaluatorContext, FunctionCallResult } from "../context";
export declare function checkIfFunctionParameterMatchesArgument({ functionType, definitionSiteEnclosingFunctionType, parameter, argExprs, argIndex, calleeEnv, callerEnv, context, isMethodCall, runtimeArgExprsInOrder, }: {
    functionType: FunctionType;
    definitionSiteEnclosingFunctionType?: FunctionType;
    parameter: FunctionParameter;
    argExprs: Expr[];
    argIndex: number;
    calleeEnv: Environment;
    callerEnv: Environment;
    context: EvaluatorContext;
    isMethodCall: boolean;
    runtimeArgExprsInOrder: Expr[];
}): {
    calleeEnv: Environment;
    callerEnv: Environment;
    context: EvaluatorContext;
    argValue: Value | undefined;
    argType: Type;
    parameterType: Type;
};
export declare function extractFunctionValue(value: Value | undefined): FunctionValue | undefined;
export declare function _printCallProfile(): void;
type TryToCallArgs = {
    functionValue?: FunctionValue;
    functionType: FunctionType;
    expr?: Expr;
    functionCalleeExpr?: Expr;
    argExprs: Expr[];
    callerEnv: Environment;
    context: EvaluatorContext;
    isMethodCall: boolean;
    skipSpecialization?: boolean;
    skipCtfeExecution?: boolean;
};
export declare function tryToCallFunctionWithArguments(args: TryToCallArgs): FunctionCallResult;
export declare function validateFunctionReturnType({ returnType, expr, env, context, }: {
    returnType: Type;
    expr: Expr | undefined;
    env: Environment;
    context: EvaluatorContext;
}): void;
export {};
