/**
 * Lowering: TypeScript AST → IR
 *
 * Converts TypeScript AST to our IR representation
 */
import ts from 'typescript';
import type { IRProgram } from '../ir/types.js';
export declare class IRLowering {
    private builder;
    private typeChecker;
    private declaredVariables;
    lower(program: ts.Program): IRProgram;
    private lowerModule;
    private lowerDeclaration;
    private lowerFunction;
    private lowerClass;
    private lowerMethod;
    /**
     * Lower a function body to AST-level IR statements
     */
    private lowerFunctionBody;
    /**
     * Lower a TypeScript statement to AST-level IR statement
     */
    private lowerStatementAST;
    /**
     * Lower a TypeScript expression to AST-level IR expression
     */
    private lowerExpression;
    /**
     * Convert SSA-level IRExpr to AST-level IRExpression
     * Temporary helper during transition period
     */
    private convertExprToExpression;
    /**
     * Lower SSA block (for backward compatibility)
     * TODO: Phase out once we convert AST-level statements to SSA blocks
     */
    private lowerBlock;
    private lowerStatement;
    private lowerExpr;
    private lowerArrowFunction;
    private lowerBinaryExpr;
    private lowerUnaryExpr;
    private getCompoundAssignmentOp;
    private lowerCallExpr;
    private getBinaryOp;
    private getUnaryOp;
    private lowerTypeNode;
    /**
     * Normalize a union type to simplify common patterns
     */
    private normalizeUnion;
    private lowerType;
    private inferType;
    private convertTsTypeToIRType;
    private lowerTemplateExpression;
    private convertToString;
}
//# sourceMappingURL=lowering.d.ts.map