/**
 * @import { Word } from "@helios-lang/compiler-utils"
 * @typedef {import("@helios-lang/ir").SourceMappedStringI} SourceMappedStringI
 */
/**
 * Function argument class
 */
export class FuncArg extends NameTypePair {
    /**
     * @param {SourceMappedStringI} bodyIR
     * @param {string} name
     * @param {SourceMappedStringI} defaultIR
     * @returns {SourceMappedStringI}
     */
    static wrapWithDefaultInternal(bodyIR: SourceMappedStringI, name: string, defaultIR: SourceMappedStringI): SourceMappedStringI;
    /**
     * @param {Word} name
     * @param {Expr | undefined} typeExpr
     * @param {Expr | undefined} defaultValueExpr
     */
    constructor(name: Word, typeExpr: Expr | undefined, defaultValueExpr?: Expr | undefined);
    /**
     * @private
     * @readonly
     * @type {Expr | undefined}
     */
    private readonly _defaultValueExpr;
    /**
     * @type {boolean}
     */
    get isOptional(): boolean;
    /**
     * @param {Scope} scope
     */
    evalDefault(scope: Scope): void;
    /**
     * @param {Scope} scope
     * @returns {ArgType}
     */
    evalArgType(scope: Scope): ArgType;
    /**
     * (argName) -> {
     *   <bodyIR>
     * }(
     *   ifThenElse(
     * 		__useoptarg__argName,
     *  	() -> {
     *        argName
     *      },
     *      () -> {
     *        <defaultValueExpr>
     *      }
     *   )()
     * )
     * TODO: indentation
     * @param {ToIRContext} ctx
     * @param {SourceMappedStringI} bodyIR
     * @returns {SourceMappedStringI}
     */
    wrapWithDefault(ctx: ToIRContext, bodyIR: SourceMappedStringI): SourceMappedStringI;
}
export type SourceMappedStringI = import("@helios-lang/ir").SourceMappedStringI;
import { NameTypePair } from "./NameTypePair.js";
import { Scope } from "../scopes/index.js";
import { ArgType } from "../typecheck/index.js";
import { ToIRContext } from "../codegen/ToIRContext.js";
import type { Word } from "@helios-lang/compiler-utils";
import { Expr } from "./Expr.js";
//# sourceMappingURL=FuncArg.d.ts.map