/** * Truthiness evaluation helpers (AST construction + runtime truthiness) * * This module provides: * - AST construction helpers for boolean-context lowering * - The runtime truthiness switch expression builder * - Type coercion and analysis helpers for boolean contexts * - The `isBooleanType` predicate * * IMPORTANT: * - This operates on IR + emitted AST; it must not import emitExpressionAst to avoid cycles. */ import type { IrExpression, IrType } from "@tsonic/frontend"; import type { EmitterContext } from "../../types.js"; import type { CSharpExpressionAst, CSharpPatternAst, CSharpPredefinedTypeKeyword, CSharpTypeAst } from "../format/backend-ast/types.js"; export declare const stripGlobalPrefix: (name: string) => string; /** * Coerce CLR primitive reference types (System.Boolean, System.Int32, ...) to IR primitiveType. * * This prevents boolean-context lowering from emitting `x != null` for CLR value types, * which is both semantically wrong and can silently miscompile (it compiles with boxing). */ export declare const coerceClrPrimitiveToPrimitiveType: (type: IrType) => IrType | undefined; /** * Expressions that are always boolean in JS/TS, even if the IR is missing inferredType. * * This makes boolean-context emission robust: comparisons and `!expr` are already valid * C# conditions and should not be rewritten to `!= null` fallbacks. */ export declare const isInherentlyBooleanExpression: (expr: IrExpression) => boolean; /** Wrap an AST expression in parentheses if it has lower precedence than `is` (relational = 10). */ export declare const wrapForIs: (ast: CSharpExpressionAst) => CSharpExpressionAst; export declare const identifierExpr: (name: string) => CSharpExpressionAst; export declare const typeReferenceExpr: (type: CSharpTypeAst) => CSharpExpressionAst; export declare const predefinedType: (keyword: CSharpPredefinedTypeKeyword) => CSharpTypeAst; export declare const identifierType: (name: string) => CSharpTypeAst; export declare const castExpr: (type: CSharpTypeAst, expression: CSharpExpressionAst) => CSharpExpressionAst; export declare const typePattern: (type: CSharpTypeAst) => CSharpPatternAst; export declare const notEqualsExpr: (left: CSharpExpressionAst, right: CSharpExpressionAst) => CSharpExpressionAst; export declare const andExpr: (left: CSharpExpressionAst, right: CSharpExpressionAst) => CSharpExpressionAst; export declare const notExpr: (operand: CSharpExpressionAst) => CSharpExpressionAst; export declare const staticMemberExpr: (typeExpr: CSharpExpressionAst, memberName: string) => CSharpExpressionAst; export declare const callExpr: (callee: CSharpExpressionAst, args: readonly CSharpExpressionAst[]) => CSharpExpressionAst; export declare const makeSwitchArm: (pattern: CSharpPatternAst, expression: CSharpExpressionAst) => { readonly pattern: CSharpPatternAst; readonly expression: CSharpExpressionAst; }; export declare const buildTruthySwitchAst: (tmp: string) => CSharpExpressionAst; export declare const emitRuntimeTruthinessConditionAst: (emittedAst: CSharpExpressionAst, context: EmitterContext) => [CSharpExpressionAst, EmitterContext]; export declare const resolveLocalTypeAlias: (type: IrType, context: EmitterContext) => IrType; export declare const getLiteralUnionBasePrimitive: (types: readonly IrType[]) => "string" | "number" | "boolean" | undefined; /** * Whether a type is boolean. * * Used by callers that need a fast check (e.g., logical operator selection). */ export declare const isBooleanType: (type: IrType | undefined) => boolean; //# sourceMappingURL=truthiness-evaluation.d.ts.map