import type { AwaitAnalysisResult, AwaitPoint, CapturedVariable } from "../../evaluator/async/await-analysis";
import { type Expr } from "../../expr";
import type { DynType, SomeType, StructType, Type } from "../../types/definitions";
import type { FunctionGenerationContext } from "../functions/context";
export interface CrossBoundaryResult {
    crossBoundaryIds: Set<string>;
    awaitFutureTempVarAliases: Map<string, string>;
    variableSegments: Map<string, Set<number>>;
}
export declare function computeCrossBoundaryVariables(bodyExpr: Expr, analysis: AwaitAnalysisResult): CrossBoundaryResult;
export interface OverlappingSlot {
    fieldName: string;
    cType: string;
    variableNames: string[];
}
export interface OverlappingStorageResult {
    slotAliases: Map<string, string>;
    slots: OverlappingSlot[];
}
export declare function computeOverlappingSlots(crossBoundaryIds: Set<string>, variableSegments: Map<string, Set<number>>, capturedVariables: CapturedVariable[], awaitFutureTempVarAliases: Map<string, string>, context: FunctionGenerationContext): OverlappingStorageResult;
export declare function getFutureFieldName(awaitPoint: AwaitPoint, analysis: AwaitAnalysisResult): string;
export declare function isIoFutureType(type: Type | undefined): boolean;
export interface StateMachineInfo {
    structName: string;
    resumeFunctionName: string;
    analysis: AwaitAnalysisResult;
}
export declare function generateResumeFunctionDeclaration(info: StateMachineInfo, context: FunctionGenerationContext): void;
export declare function getStateMachineFieldName(variableId: string, kind?: "outer" | "local", aliases?: Map<string, string>): string;
export declare function generateAsyncBlockResumeFunction(bodyExpr: Expr, asyncBlockId: string, structName: string, resumeFunctionName: string, analysis: AwaitAnalysisResult, futureType: SomeType | DynType, captureType: StructType | undefined, context: FunctionGenerationContext): string[];
