/**
 * NumericKind - Represents all CLR numeric types that Tsonic supports.
 *
 * This module provides:
 * - NumericKind type union
 * - Mapping from Tsonic type names to CLR kinds
 * - Range bounds for compile-time literal validation
 * - C# binary operator promotion rules
 */
/**
 * Represents all CLR numeric types that Tsonic supports.
 * These map to specific C# primitive types.
 */
export type NumericKind = "SByte" | "Byte" | "Int16" | "UInt16" | "Int32" | "UInt32" | "Int64" | "UInt64" | "Single" | "Double";
/**
 * Maps Tsonic type alias names to CLR numeric kinds.
 * Used to recognize numeric intent from TypeScript annotations.
 */
export declare const TSONIC_TO_NUMERIC_KIND: ReadonlyMap<string, NumericKind>;
/**
 * Maps CLR numeric kinds back to C# type names for emission.
 */
export declare const NUMERIC_KIND_TO_CSHARP: ReadonlyMap<NumericKind, string>;
/**
 * Range bounds for compile-time literal validation.
 * Uses bigint for exact integer range checking.
 * Float ranges are marked as 0n - they require different validation.
 */
export declare const NUMERIC_RANGES: ReadonlyMap<NumericKind, {
    readonly min: bigint;
    readonly max: bigint;
}>;
/**
 * Check if a numeric kind is an integer type (not floating point).
 */
export declare const isIntegerKind: (kind: NumericKind) => boolean;
/**
 * Check if a numeric kind is a signed type.
 */
export declare const isSignedKind: (kind: NumericKind) => boolean;
/**
 * C# binary operator result type promotion.
 * Returns the result type when two numeric kinds are combined with +, -, *, /, %.
 *
 * Rules (per C# spec):
 * 1. If either is double, result is double
 * 2. If either is float, result is float
 * 3. If either is ulong, result is ulong
 * 4. If either is long, result is long
 * 5. If either is uint and other is sbyte/short/int, result is long
 * 6. If either is uint, result is uint
 * 7. Otherwise, result is int (byte, sbyte, short, ushort all promote to int)
 */
export declare const getBinaryResultKind: (left: NumericKind, right: NumericKind) => NumericKind;
/**
 * Check if a literal value fits within the range of a numeric kind.
 * Returns true if the value is valid for the target kind.
 *
 * For integer kinds: checks exact range
 * For floating kinds: currently always returns true (could add precision checks)
 */
export declare const literalFitsInKind: (value: number, kind: NumericKind) => boolean;
/**
 * Check if conversion from source to target is a widening (safe) conversion.
 * Widening never loses data; narrowing may.
 */
export declare const isWideningConversion: (source: NumericKind, target: NumericKind) => boolean;
//# sourceMappingURL=numeric-kind.d.ts.map