import { ExpressionValue } from "../../value/ExpressionValue.js";
import { FuncArg } from "./FuncArg.js";
import { ExprEvalError, ExprEvalResult } from "../ExprEvalResult.js";
import { ExprType } from "../../type/ExprType.js";
import { ParserRuleContext } from "antlr4ng";
import { FunctionExpr } from "./FunctionExpr.js";
import { Expr } from "../Expr.js";
import { LocalizedText } from "../../documentation/Documentation.js";
export declare abstract class Func {
    protected name: string;
    protected formalArguments: Array<FuncArg<unknown>>;
    protected documentationRef?: LocalizedText;
    protected constructor(name: string, args: Array<FuncArg<unknown>>);
    abstract getReturnType(argumentTypes: Array<ExprType>): ExprType;
    withDocumentation(documentation: LocalizedText): this;
    getDocumentation(): LocalizedText | undefined;
    getFormalArguments(): ReadonlyArray<FuncArg<unknown>>;
    getSignatureLabel(displayName?: string): string;
    checkArgumentsAndGetReturnType(argumentTypes: Array<[ParserRuleContext, ExprType]>, ctx: any): ExprType;
    protected checkArgumentTypes(providedArgumentTypes: Array<[ParserRuleContext, ExprType]>, ctx: any): void;
    getName(): string;
    evaluate(callingExpr: FunctionExpr, funcArgs: Array<ExprEvalResult<ExpressionValue>>): ExprEvalResult<ExpressionValue>;
    protected abstract calculateResult(callingExpr: FunctionExpr, evaluatedArguments: Map<string, ExpressionValue>): ExprEvalResult<ExpressionValue>;
    protected transformArguments(callingExpr: Expr<any>, evaluatedArguments: Map<string, ExprEvalResult<ExpressionValue>>): void;
    protected getArgumentValues(callingExpr: FunctionExpr, provided: Array<ExprEvalResult<ExpressionValue>>): Map<string, ExprEvalResult<ExpressionValue>> | ExprEvalError;
    private checkArgs;
}
