/** * Main boolean-condition lowering (toBooleanConditionAst, emitBooleanConditionAst) * * In TypeScript, any value can be used in a boolean context (truthy/falsy). * In C#, only boolean expressions are valid conditions (if/while/for/?:/!). * * This module provides the main boolean-condition lowering functions * that dispatch to appropriate truthiness checks based on type. * * IMPORTANT: * - This operates on IR + emitted AST; it must not import emitExpressionAst to avoid cycles. * - Callers provide an emit function. */ import type { IrExpression } from "@tsonic/frontend"; import type { EmitterContext } from "../../types.js"; import type { CSharpExpressionAst } from "../format/backend-ast/types.js"; export type EmitExprAstFn = (expr: IrExpression, context: EmitterContext) => [CSharpExpressionAst, EmitterContext]; /** * Convert an expression to a valid C# boolean condition, returning a typed AST node. * * Rules (deterministic): * - Booleans: use as-is * - Reference types (objects, arrays, dictionaries, unions, ...): runtime truthiness * - Strings: `!string.IsNullOrEmpty(expr)` * - Numbers: JS truthiness check: false iff 0 or NaN * - int: `expr != 0` * - char: `expr != '\0'` * - null/undefined literals: `false` */ export declare const toBooleanConditionAst: (expr: IrExpression, emittedAst: CSharpExpressionAst, context: EmitterContext) => [CSharpExpressionAst, EmitterContext]; /** * Emit a boolean-context expression as a typed AST node. * * Special-cases logical &&/|| into proper binaryExpression AST nodes * with printer-handled parenthesization. */ export declare const emitBooleanConditionAst: (expr: IrExpression, emitExprAst: EmitExprAstFn, context: EmitterContext) => [CSharpExpressionAst, EmitterContext]; //# sourceMappingURL=boolean-condition-main.d.ts.map