import { type Expr, type IInst, Tag } from '.';
export interface IStore {
    /**
     * Variables definition
     */
    readonly variables: Map<bigint, Variable>;
    /**
     * mappings definition
     */
    readonly mappings: {
        [location: string]: {
            name: string | undefined;
            structs: bigint[];
            keys: Expr[][];
            values: Expr[];
        };
    };
}
/**
 *
 */
export declare class Variable {
    label: string | null;
    readonly types: Expr[];
    readonly index: number;
    constructor(label: string | null, types: Expr[], index: number);
}
export declare class MappingStore implements IInst {
    readonly slot: Expr;
    readonly mappings: IStore['mappings'];
    readonly location: number;
    readonly items: Expr[];
    readonly data: Expr;
    readonly structlocation?: bigint | undefined;
    readonly name = "MappingStore";
    constructor(slot: Expr, mappings: IStore['mappings'], location: number, items: Expr[], data: Expr, structlocation?: bigint | undefined);
    eval(): MappingStore;
}
export declare class SStore {
    readonly slot: Expr;
    readonly data: Expr;
    readonly variable: Variable | undefined;
    readonly name = "SStore";
    constructor(slot: Expr, data: Expr, variable: Variable | undefined);
    eval(): SStore;
}
export declare class MappingLoad extends Tag {
    readonly slot: Expr;
    readonly mappings: IStore['mappings'];
    readonly location: number;
    readonly items: Expr[];
    readonly structlocation?: bigint | undefined;
    readonly tag = "MappingLoad";
    constructor(slot: Expr, mappings: IStore['mappings'], location: number, items: Expr[], structlocation?: bigint | undefined);
    eval(): this;
}
export declare class SLoad extends Tag {
    readonly slot: Expr;
    readonly variable: Variable | undefined;
    readonly tag = "SLoad";
    constructor(slot: Expr, variable: Variable | undefined);
    eval(): Expr;
}
