import { type Environment, type Frame, type Variable } from "./env";
import type { AwaitAnalysisResult } from "./evaluator/async/await-analysis-types";
import type { EvaluatorContext } from "./evaluator/context";
import type { EffectAnalysisResult } from "./evaluator/effects/effect-analysis-types";
import { type Token } from "./token";
import type { FunctionType, StructType, Type } from "./types/definitions";
import { type ArrayValue, type ComptimeListValue, type StructValue, type TraitValue, type TupleValue, type Value } from "./value";
import { ValueTag } from "./value-tag";
export type Path = string[];
export type PathCollection = Path[];
export type ComptimeRef = {
    kind: "array";
    arrayValue: ArrayValue;
    index: number;
} | {
    kind: "comptime_list";
    listValue: ComptimeListValue;
    index: number;
} | {
    kind: "struct";
    structValue: StructValue;
    fieldIndex: number;
} | {
    kind: "tuple";
    tupleValue: TupleValue;
    fieldIndex: number;
};
export declare function pathContainsPath(path1: Path, path2: Path): boolean;
export declare function pathCollectionConflictsWithPathCollection(collection1: PathCollection, collection2: PathCollection): boolean;
export declare function pathConflictsWithPath(path1: Path, path2: Path): boolean;
export declare enum ExprTag {
    Atom = "Atom",
    FnCall = "FnCall"
}
export interface RuntimeDestructuring {
    label: string;
    type: Type;
    variableName: string;
}
export type ControlFlowFlags = {
    return?: boolean;
    unwind?: boolean;
    break?: boolean;
    continue?: boolean;
};
export declare function controlFlowOf(kind: "return" | "unwind" | "break" | "continue"): ControlFlowFlags;
export declare function hasControlFlow(cf: ControlFlowFlags | undefined, kind: "return" | "unwind" | "break" | "continue"): boolean;
export declare function hasAnyControlFlow(cf: ControlFlowFlags | undefined): boolean;
export declare function mergeControlFlows(flows: ControlFlowFlags[]): ControlFlowFlags;
export declare function controlFlowToString(cf: ControlFlowFlags): string;
export interface EvaluatedExprData {
    env: Environment;
    type: Type;
    value?: Value;
    convertedRuntimeType?: Type;
    variableName?: string;
    originType?: Type;
    isAccessingProperty?: boolean;
    pathCollection: PathCollection;
    runtimeArgExprsInOrder?: Expr[];
    runtimeDestructurings?: RuntimeDestructuring[];
    controlFlow?: ControlFlowFlags;
    dynCallTraitValues?: TraitValue[];
    caseExecuted?: boolean;
    isPrimitiveMatch?: boolean;
    primitivePatternValues?: (Value | undefined)[];
    docComment?: string;
    deferredDupExpressions?: Expr[];
    deferredDropExpressions?: Expr[];
    earlyReturnOnlyDeferredDropExpressions?: Expr[];
    consumedVariableDropExpressions?: Expr[];
    asyncStackSize?: Expr;
    asyncStateMachineStructName?: string;
    captureType?: StructType;
    awaitAnalysis?: AwaitAnalysisResult;
    effectAnalysis?: EffectAnalysisResult;
    closureFunctionValue?: Value & {
        tag: ValueTag.Function;
    };
    macroExpansion?: Expr;
    poppedEnvFrame?: Frame;
    originalExpr?: Expr;
    sourceVariable?: Variable;
    comptimeRef?: ComptimeRef;
    indexTraitPtrType?: Type;
    indexMethodType?: FunctionType;
    indexMethodValue?: Value;
    isIndexTraitAddressOf?: boolean;
    isReturnSlot?: boolean;
    isCompileTimeOnlyAssignment?: boolean;
    isAnonymousFunctionDefinition?: boolean;
    comptimeUnrolledBodies?: Expr[];
}
export type AtomExpr = {
    tag: ExprTag.Atom;
    token: Token;
    $?: EvaluatedExprData | undefined;
};
export type FnCallExpr = {
    tag: ExprTag.FnCall;
    func: Expr;
    args: Expr[];
    isInfix?: boolean;
    token: Token;
    $?: EvaluatedExprData | undefined;
};
export declare function cloneExpr(expr: Expr): Expr;
export type Expr = AtomExpr | FnCallExpr;
export declare function exprIsFunctionCall(expr: Expr | undefined): expr is FnCallExpr;
export declare function exprIsAtom(expr: Expr | undefined): expr is AtomExpr;
export declare function exprIsAtomOf(expr: Expr, values: string | string[]): boolean;
export declare function exprIsAtomAndOperator(expr: Expr): boolean;
export declare function exprIsFunctionCallOf(expr: Expr, funcNames: string | string[], argumentCount?: number): boolean;
export declare function expectExprToBeFunctionCallOf(expr: Expr, expectedFunctionName: string | string[], expectedArgCount?: number): void;
export declare function expectExprToHaveBeenEvaluated(expr: Expr, errorMessage?: string): EvaluatedExprData;
export declare function exprsAreEqual(expr1: Expr, expr2: Expr): boolean;
export declare const BuiltinKeywords: {
    comptime: string[];
    runtime: string[];
    ref: string[];
    forall: string[];
    where: string[];
    quote: string[];
    unquote: string[];
    unquote_splicing: string[];
    return: string[];
    recur: string[];
    fn: string[];
    unsafe_fn: string[];
    ctl: string[];
    unwind: string[];
    extern: string[];
    cond: string[];
    type: string[];
    match: string[];
    test: string[];
    atomic: string[];
    struct: string[];
    object: string[];
    newtype: string[];
    enum: string[];
    union: string[];
    trait: string[];
    impl: string[];
    Impl: string[];
    begin: string[];
    import: string[];
    export: string[];
    open: string[];
    clone: string[];
    break: string[];
    continue: string[];
    while: string[];
    if: string[];
    op_and: string[];
    op_or: string[];
    gensym: string[];
    dyn: string[];
    Dyn: string[];
    Fn: string[];
    c_include: string[];
    undefined: string[];
    null: string[];
    true: string[];
    false: string[];
    unique: string[];
    Ptr: string[];
    Iso: string[];
    Tuple: string[];
    Array: string[];
    Slice: string[];
    Future: string[];
    Concrete: string[];
    Type: string[];
    Trait: string[];
    ComptimeList: string[];
    tuple: string[];
    array: string[];
    comptime_list: string[];
};
export declare const BuiltinFunctions: {
    comptime_expect_error: string[];
    comptime_assert: string[];
    comptime_print: string[];
    comptime_fn: string[];
    va_start: string[];
    __yo_array_fill: string[];
    typeof: string[];
    sizeof: string[];
    alignof: string[];
    typeid: string[];
    downcast: string[];
    consume: string[];
    unsafe: string[];
    pragma: string[];
    macro_expand: string[];
    as: string[];
    the: string[];
    do: string[];
    rc: string;
    __yo_thread_set_maximum_threads: string[];
    __yo_ptr_add: string[];
    __yo_ptr_sub: string[];
    __yo_ptr_diff: string[];
    __yo_ptr_eq: string[];
    __yo_ptr_neq: string[];
    __yo_ptr_lt: string[];
    __yo_ptr_lte: string[];
    __yo_ptr_gt: string[];
    __yo_ptr_gte: string[];
    __yo_address_of: string[];
    __yo_ptr_deref: string[];
    __yo_ptr_set: string[];
    __yo_str_from_raw_parts: string[];
    __yo_str_len: string[];
    __yo_str_ptr: string[];
    __yo_str_byte: string[];
    __yo_array_index: string[];
    __yo_comptime_array_index: string[];
    __yo_as: string[];
    __yo_expr_is_atom: string[];
    __yo_expr_is_fn_call: string[];
    __yo_expr_get_callee: string[];
    __yo_expr_get_args: string[];
    __yo_expr_to_string: string[];
    __yo_expr_eq: string[];
    __yo_comptime_list_car: string[];
    __yo_comptime_list_cdr: string[];
    __yo_comptime_list_cons: string[];
    __yo_comptime_list_append: string[];
    __yo_comptime_list_length: string[];
    __yo_comptime_list_element_type: string[];
    __yo_comptime_list_get: string[];
    __yo_comptime_list_index: string[];
    __yo_comptime_list_index_range: string[];
    __yo_comptime_list_index_range_inclusive: string[];
    __yo_comptime_int_add: string[];
    __yo_comptime_int_sub: string[];
    __yo_comptime_int_mul: string[];
    __yo_comptime_int_div: string[];
    __yo_comptime_int_mod: string[];
    __yo_comptime_int_eq: string[];
    __yo_comptime_int_neq: string[];
    __yo_comptime_int_lt: string[];
    __yo_comptime_int_lte: string[];
    __yo_comptime_int_gt: string[];
    __yo_comptime_int_gte: string[];
    __yo_comptime_int_bit_and: string[];
    __yo_comptime_int_bit_or: string[];
    __yo_comptime_int_bit_xor: string[];
    __yo_comptime_int_shl: string[];
    __yo_comptime_int_shr: string[];
    __yo_comptime_int_neg: string[];
    __yo_comptime_int_bit_not: string[];
    __yo_comptime_int_to_comptime_string: string[];
    __yo_comptime_float_add: string[];
    __yo_comptime_float_sub: string[];
    __yo_comptime_float_mul: string[];
    __yo_comptime_float_div: string[];
    __yo_comptime_float_eq: string[];
    __yo_comptime_float_neq: string[];
    __yo_comptime_float_lt: string[];
    __yo_comptime_float_lte: string[];
    __yo_comptime_float_gt: string[];
    __yo_comptime_float_gte: string[];
    __yo_comptime_float_neg: string[];
    __yo_comptime_float_to_comptime_string: string[];
    __yo_comptime_u8_add: string[];
    __yo_comptime_u8_sub: string[];
    __yo_comptime_u8_mul: string[];
    __yo_comptime_u8_div: string[];
    __yo_comptime_u8_mod: string[];
    __yo_comptime_u8_eq: string[];
    __yo_comptime_u8_neq: string[];
    __yo_comptime_u8_lt: string[];
    __yo_comptime_u8_lte: string[];
    __yo_comptime_u8_gt: string[];
    __yo_comptime_u8_gte: string[];
    __yo_comptime_u8_neg: string[];
    __yo_comptime_u8_bit_and: string[];
    __yo_comptime_u8_bit_or: string[];
    __yo_comptime_u8_bit_xor: string[];
    __yo_comptime_u8_bit_not: string[];
    __yo_comptime_u8_shl: string[];
    __yo_comptime_u8_shr: string[];
    __yo_comptime_u8_to_comptime_string: string[];
    __yo_comptime_i8_add: string[];
    __yo_comptime_i8_sub: string[];
    __yo_comptime_i8_mul: string[];
    __yo_comptime_i8_div: string[];
    __yo_comptime_i8_mod: string[];
    __yo_comptime_i8_eq: string[];
    __yo_comptime_i8_neq: string[];
    __yo_comptime_i8_lt: string[];
    __yo_comptime_i8_lte: string[];
    __yo_comptime_i8_gt: string[];
    __yo_comptime_i8_gte: string[];
    __yo_comptime_i8_neg: string[];
    __yo_comptime_i8_bit_and: string[];
    __yo_comptime_i8_bit_or: string[];
    __yo_comptime_i8_bit_xor: string[];
    __yo_comptime_i8_bit_not: string[];
    __yo_comptime_i8_shl: string[];
    __yo_comptime_i8_shr: string[];
    __yo_comptime_i8_to_comptime_string: string[];
    __yo_comptime_u16_add: string[];
    __yo_comptime_u16_sub: string[];
    __yo_comptime_u16_mul: string[];
    __yo_comptime_u16_div: string[];
    __yo_comptime_u16_mod: string[];
    __yo_comptime_u16_eq: string[];
    __yo_comptime_u16_neq: string[];
    __yo_comptime_u16_lt: string[];
    __yo_comptime_u16_lte: string[];
    __yo_comptime_u16_gt: string[];
    __yo_comptime_u16_gte: string[];
    __yo_comptime_u16_neg: string[];
    __yo_comptime_u16_bit_and: string[];
    __yo_comptime_u16_bit_or: string[];
    __yo_comptime_u16_bit_xor: string[];
    __yo_comptime_u16_bit_not: string[];
    __yo_comptime_u16_shl: string[];
    __yo_comptime_u16_shr: string[];
    __yo_comptime_u16_to_comptime_string: string[];
    __yo_comptime_i16_add: string[];
    __yo_comptime_i16_sub: string[];
    __yo_comptime_i16_mul: string[];
    __yo_comptime_i16_div: string[];
    __yo_comptime_i16_mod: string[];
    __yo_comptime_i16_eq: string[];
    __yo_comptime_i16_neq: string[];
    __yo_comptime_i16_lt: string[];
    __yo_comptime_i16_lte: string[];
    __yo_comptime_i16_gt: string[];
    __yo_comptime_i16_gte: string[];
    __yo_comptime_i16_neg: string[];
    __yo_comptime_i16_bit_and: string[];
    __yo_comptime_i16_bit_or: string[];
    __yo_comptime_i16_bit_xor: string[];
    __yo_comptime_i16_bit_not: string[];
    __yo_comptime_i16_shl: string[];
    __yo_comptime_i16_shr: string[];
    __yo_comptime_i16_to_comptime_string: string[];
    __yo_comptime_u32_add: string[];
    __yo_comptime_u32_sub: string[];
    __yo_comptime_u32_mul: string[];
    __yo_comptime_u32_div: string[];
    __yo_comptime_u32_mod: string[];
    __yo_comptime_u32_eq: string[];
    __yo_comptime_u32_neq: string[];
    __yo_comptime_u32_lt: string[];
    __yo_comptime_u32_lte: string[];
    __yo_comptime_u32_gt: string[];
    __yo_comptime_u32_gte: string[];
    __yo_comptime_u32_neg: string[];
    __yo_comptime_u32_bit_and: string[];
    __yo_comptime_u32_bit_or: string[];
    __yo_comptime_u32_bit_xor: string[];
    __yo_comptime_u32_bit_not: string[];
    __yo_comptime_u32_shl: string[];
    __yo_comptime_u32_shr: string[];
    __yo_comptime_u32_to_comptime_string: string[];
    __yo_comptime_i32_add: string[];
    __yo_comptime_i32_sub: string[];
    __yo_comptime_i32_mul: string[];
    __yo_comptime_i32_div: string[];
    __yo_comptime_i32_mod: string[];
    __yo_comptime_i32_eq: string[];
    __yo_comptime_i32_neq: string[];
    __yo_comptime_i32_lt: string[];
    __yo_comptime_i32_lte: string[];
    __yo_comptime_i32_gt: string[];
    __yo_comptime_i32_gte: string[];
    __yo_comptime_i32_neg: string[];
    __yo_comptime_i32_bit_and: string[];
    __yo_comptime_i32_bit_or: string[];
    __yo_comptime_i32_bit_xor: string[];
    __yo_comptime_i32_bit_not: string[];
    __yo_comptime_i32_shl: string[];
    __yo_comptime_i32_shr: string[];
    __yo_comptime_i32_to_comptime_string: string[];
    __yo_comptime_u64_add: string[];
    __yo_comptime_u64_sub: string[];
    __yo_comptime_u64_mul: string[];
    __yo_comptime_u64_div: string[];
    __yo_comptime_u64_mod: string[];
    __yo_comptime_u64_eq: string[];
    __yo_comptime_u64_neq: string[];
    __yo_comptime_u64_lt: string[];
    __yo_comptime_u64_lte: string[];
    __yo_comptime_u64_gt: string[];
    __yo_comptime_u64_gte: string[];
    __yo_comptime_u64_neg: string[];
    __yo_comptime_u64_bit_and: string[];
    __yo_comptime_u64_bit_or: string[];
    __yo_comptime_u64_bit_xor: string[];
    __yo_comptime_u64_bit_not: string[];
    __yo_comptime_u64_shl: string[];
    __yo_comptime_u64_shr: string[];
    __yo_comptime_u64_to_comptime_string: string[];
    __yo_comptime_i64_add: string[];
    __yo_comptime_i64_sub: string[];
    __yo_comptime_i64_mul: string[];
    __yo_comptime_i64_div: string[];
    __yo_comptime_i64_mod: string[];
    __yo_comptime_i64_eq: string[];
    __yo_comptime_i64_neq: string[];
    __yo_comptime_i64_lt: string[];
    __yo_comptime_i64_lte: string[];
    __yo_comptime_i64_gt: string[];
    __yo_comptime_i64_gte: string[];
    __yo_comptime_i64_neg: string[];
    __yo_comptime_i64_bit_and: string[];
    __yo_comptime_i64_bit_or: string[];
    __yo_comptime_i64_bit_xor: string[];
    __yo_comptime_i64_bit_not: string[];
    __yo_comptime_i64_shl: string[];
    __yo_comptime_i64_shr: string[];
    __yo_comptime_i64_to_comptime_string: string[];
    __yo_comptime_usize_add: string[];
    __yo_comptime_usize_sub: string[];
    __yo_comptime_usize_mul: string[];
    __yo_comptime_usize_div: string[];
    __yo_comptime_usize_mod: string[];
    __yo_comptime_usize_eq: string[];
    __yo_comptime_usize_neq: string[];
    __yo_comptime_usize_lt: string[];
    __yo_comptime_usize_lte: string[];
    __yo_comptime_usize_gt: string[];
    __yo_comptime_usize_gte: string[];
    __yo_comptime_usize_neg: string[];
    __yo_comptime_usize_bit_and: string[];
    __yo_comptime_usize_bit_or: string[];
    __yo_comptime_usize_bit_xor: string[];
    __yo_comptime_usize_bit_not: string[];
    __yo_comptime_usize_shl: string[];
    __yo_comptime_usize_shr: string[];
    __yo_comptime_usize_to_comptime_string: string[];
    __yo_comptime_isize_add: string[];
    __yo_comptime_isize_sub: string[];
    __yo_comptime_isize_mul: string[];
    __yo_comptime_isize_div: string[];
    __yo_comptime_isize_mod: string[];
    __yo_comptime_isize_eq: string[];
    __yo_comptime_isize_neq: string[];
    __yo_comptime_isize_lt: string[];
    __yo_comptime_isize_lte: string[];
    __yo_comptime_isize_gt: string[];
    __yo_comptime_isize_gte: string[];
    __yo_comptime_isize_neg: string[];
    __yo_comptime_isize_bit_and: string[];
    __yo_comptime_isize_bit_or: string[];
    __yo_comptime_isize_bit_xor: string[];
    __yo_comptime_isize_bit_not: string[];
    __yo_comptime_isize_shl: string[];
    __yo_comptime_isize_shr: string[];
    __yo_comptime_isize_to_comptime_string: string[];
    __yo_comptime_f32_add: string[];
    __yo_comptime_f32_sub: string[];
    __yo_comptime_f32_mul: string[];
    __yo_comptime_f32_div: string[];
    __yo_comptime_f32_eq: string[];
    __yo_comptime_f32_neq: string[];
    __yo_comptime_f32_lt: string[];
    __yo_comptime_f32_lte: string[];
    __yo_comptime_f32_gt: string[];
    __yo_comptime_f32_gte: string[];
    __yo_comptime_f32_neg: string[];
    __yo_comptime_f32_to_comptime_string: string[];
    __yo_comptime_f64_add: string[];
    __yo_comptime_f64_sub: string[];
    __yo_comptime_f64_mul: string[];
    __yo_comptime_f64_div: string[];
    __yo_comptime_f64_eq: string[];
    __yo_comptime_f64_neq: string[];
    __yo_comptime_f64_lt: string[];
    __yo_comptime_f64_lte: string[];
    __yo_comptime_f64_gt: string[];
    __yo_comptime_f64_gte: string[];
    __yo_comptime_f64_neg: string[];
    __yo_comptime_f64_to_comptime_string: string[];
    __yo_comptime_bool_and: string[];
    __yo_comptime_bool_or: string[];
    __yo_comptime_bool_eq: string[];
    __yo_comptime_bool_neq: string[];
    __yo_comptime_bool_not: string[];
    __yo_comptime_bool_to_comptime_string: string[];
    __yo_comptime_string_concat: string[];
    __yo_comptime_string_eq: string[];
    __yo_comptime_string_neq: string[];
    __yo_comptime_string_lt: string[];
    __yo_comptime_string_lte: string[];
    __yo_comptime_string_gt: string[];
    __yo_comptime_string_gte: string[];
    __yo_comptime_string_length: string[];
    __yo_comptime_string_to_upper: string[];
    __yo_comptime_string_to_lower: string[];
    __yo_comptime_string_slice: string[];
    __yo_comptime_string_index: string[];
    __yo_comptime_string_index_range: string[];
    __yo_comptime_string_index_range_inclusive: string[];
    __yo_type_to_comptime_string: string[];
    __yo_type_contains_rc_type: string[];
    __yo_type_can_form_rc_cycle: string[];
    __yo_are_types_compatible: string[];
    __yo_are_types_equal: string[];
    __yo_type_impls: string[];
    __yo_type_get_info: string[];
    comptime_eval: string[];
    derive: string[];
    derive_rule: string[];
    __yo_comptime_string_to_expr: string[];
    __yo_type_join_fields: string[];
    __yo_type_map_variants: string[];
    __yo_var_print_info: string[];
    __yo_var_is_owning_the_rc_value: string[];
    __yo_var_has_other_aliases: string[];
    __yo_op_add: string[];
    __yo_op_sub: string[];
    __yo_op_mul: string[];
    __yo_op_div: string[];
    __yo_op_mod: string[];
    __yo_op_neg: string[];
    __yo_op_eq: string[];
    __yo_op_neq: string[];
    __yo_op_lt: string[];
    __yo_op_lte: string[];
    __yo_op_gt: string[];
    __yo_op_gte: string[];
    __yo_op_not: string[];
    __yo_op_bit_and: string[];
    __yo_op_bit_or: string[];
    __yo_op_bit_xor: string[];
    __yo_op_bit_complement: string[];
    __yo_op_bit_left_shift: string[];
    __yo_op_bit_right_shift: string[];
    c_include: string[];
    panic: string[];
    __yo_decr_rc: string[];
    __yo_incr_rc: string[];
    __yo_decr_rc_atomic: string[];
    __yo_incr_rc_atomic: string[];
    __yo_rc_own: string[];
    __yo_iso_extract: string[];
    __yo_iso_dispose: string[];
    __yo_gc_collect: string[];
    __yo_dyn_drop: string[];
    __yo_dyn_dup: string[];
    __yo_sometype_drop: string[];
    __yo_sometype_dup: string[];
    ___drop: string[];
    ___dispose: string[];
    ___dup: string[];
    dispose: string[];
    __yo_drop_array_element: string[];
    __yo_dup_array_element: string[];
    __yo_drop_tuple_element: string[];
    __yo_dup_tuple_element: string[];
    __yo_noop: string[];
    __yo_return_self: string[];
    __yo_borrow_assert_unborrowed: string[];
    __yo_ms_sleep: string[];
    __yo_getrandom: string[];
    __yo_arc4random_buf: string[];
    __yo_bcrypt_gen_random: string[];
    __yo_getentropy: string[];
    __yo_maybe_uninit_new: string[];
    __yo_maybe_uninit_as_ptr: string[];
    __yo_maybe_uninit_assume_init: string[];
    __yo_process_platform: string[];
    __yo_process_arch: string[];
    __yo_pointer_size_bits: string[];
    __yo_build_executable: string[];
    __yo_build_static_library: string[];
    __yo_build_shared_library: string[];
    __yo_build_test: string[];
    __yo_build_run: string[];
    __yo_build_step: string[];
    __yo_build_step_depend_on: string[];
    __yo_build_link: string[];
    __yo_build_link_system_library: string[];
    __yo_build_target_host: string[];
    __yo_build_target_parse: string[];
    __yo_build_dependency: string[];
    __yo_build_path_dependency: string[];
    __yo_build_system_library: string[];
    __yo_build_option: string[];
    __yo_build_dep_artifact: string[];
    __yo_build_module: string[];
    __yo_build_module_link: string[];
    __yo_build_add_import: string[];
    __yo_build_add_cflags: string[];
    __yo_build_dep_module: string[];
    __yo_build_doc: string[];
    asm: string[];
    global_asm: string[];
    requires: string[];
    ensures: string[];
    invariant: string[];
    ghost: string[];
    ghost_fn: string[];
    old: string[];
};
export declare function exprIsInfixOperatorFunctionCall(expr: Expr): boolean;
export interface ExprToStringConfig {
    prettyPrint?: boolean;
    indentSize?: number;
    maxLineLength?: number;
    indentLevel?: number;
}
export declare function exprToString(expr: Expr, config?: ExprToStringConfig): string;
export declare function consumeCaseBodyTempVar(evaluatedBody: Expr, env: Environment): Environment;
export declare function attachTempVariableToExpr(expr: Expr, isOwningTheRcValue: boolean, isOwningTheSameRcValueAs?: Variable, isRef?: boolean): void;
export declare function mergeAndCheckEnvs(env: Environment, bodies: Expr[]): Environment;
export declare function replaceFuncCallExprWithFuncCallExpr(funcExpr: FnCallExpr, newFuncExpr: FnCallExpr): void;
export declare function replaceFuncCallExprWithAtomExpr(funcExpr: FnCallExpr, newAtomExpr: AtomExpr): void;
export declare function replaceExprWithFuncCallExpr(expr: Expr, newFuncExpr: FnCallExpr): void;
export declare function replaceExprWithAtomExpr(expr: Expr, newAtomExpr: AtomExpr): void;
export declare function setExprAsConsumed(expr: Expr, env: Environment, allowConsumeAgain?: boolean): Environment;
export declare function setExprAsNeedsToCallDup(expr: Expr, context: EvaluatorContext): void;
export declare function requireExprNotConsumed(expr: Expr, env: Environment): void;
