import { types as t } from "@marko/compiler";
import { type Binding } from "./bindings";
import { type Reason, type Reasons } from "./reasons";
import { type Section } from "./sections";
import { type Sources } from "./sources";
export declare function isSameReason(a: Reason | undefined, b: Reason | undefined): boolean;
export declare function buildGroupMask(groups: {
    value: number | t.Expression | undefined;
    names: string;
}[]): t.Expression | undefined;
export declare function getScopeReasonStatement(section: Section): t.Statement;
export declare function getWriteReason(binding: Binding): Sources | undefined;
export declare function getBranchWriteReason(section: Section): Sources | undefined;
export declare function getWriteGuard(section: Section, reason: undefined | Reason, omitUnconditional: boolean): t.Expression | undefined;
export declare function getWriteGuardForAny(section: Section, reasons: undefined | Reasons, omitUnconditional: boolean): t.Expression | undefined;
export declare function getExprIfWritten<T extends undefined | Reason, R extends (T extends {} ? t.Expression : undefined)>(section: Section, reason: T, expr: t.Expression): R;
