/**
 * @typedef {import("@helios-lang/compiler-utils").Site} Site
 */
/**
 * Parent class of EnumSwitchExpr and DataSwitchExpr
 */
export class SwitchExpr extends Expr {
    /**
     * @param {Site} site
     * @param {Site} dotSite
     * @param {Expr} controlExpr - input value of the switch
     * @param {SwitchCase[]} cases
     * @param {SwitchDefault | undefined} defaultCase
     */
    constructor(site: Site, dotSite: Site, controlExpr: Expr, cases: SwitchCase[], defaultCase?: SwitchDefault | undefined);
    /**
     * @type {Site}
     */
    dotSite: Site;
    /**
     * @private
     * @readonly
     * @type {Expr}
     */
    private readonly _controlExpr;
    /**
     * @private
     * @readonly
     * @type {SwitchCase[]}
     */
    private readonly _cases;
    /**
     * @private
     * @type {SwitchDefault | undefined}
     */
    private _defaultCase;
    get controlExpr(): Expr;
    get cases(): SwitchCase[];
    /**
     * @type {SwitchDefault | undefined}
     */
    get defaultCase(): SwitchDefault | undefined;
    /**
     * If there isn't enough coverage then we can simply set the default case to void, so the other branches can be error, print or assert
     */
    setDefaultCaseToVoid(): void;
}
export type Site = import("@helios-lang/compiler-utils").Site;
import { Expr } from "./Expr.js";
import { SwitchCase } from "./SwitchCase.js";
import { SwitchDefault } from "./SwitchDefault.js";
//# sourceMappingURL=SwitchExpr.d.ts.map