/**
 * Numeric Helper Functions for Literal Type Inference
 *
 * These functions determine whether a numeric literal is an integer (Int32)
 * or floating-point (Double) based on the raw lexeme.
 *
 * Key rule: The SOURCE TEXT determines the type, not the numeric value.
 * - Integer literals (42, 0xFF, 0b101) → Int32
 * - Floating literals (42.0, 3.14, 1e3) → Double
 */
import { NumericKind } from "./numeric-kind.js";
/**
 * Check if a raw lexeme represents a valid integer (no decimal point, no exponent).
 * This is critical for correctness - we must validate the SOURCE text, not the JS number.
 * Supports numeric separators (underscores) per JS/TS syntax: 1_000_000, 0xFF_FF, etc.
 *
 * Invalid underscore placement (rejected):
 * - Double underscores: 1__2
 * - Leading underscore: _123
 * - Trailing underscore: 123_
 * - Underscore after prefix: 0x_FF, 0b_10, 0o_77
 */
export declare const isValidIntegerLexeme: (raw: string) => boolean;
/**
 * Parse a raw lexeme as a BigInt for precise range checking.
 * Returns undefined if parsing fails.
 * Strips numeric separators (underscores) before parsing.
 *
 * INVARIANT: Only call this AFTER isValidIntegerLexeme(raw) returns true.
 */
export declare const parseBigIntFromRaw: (raw: string) => bigint | undefined;
/**
 * Check if a BigInt value fits within the range of a numeric kind.
 */
export declare const bigIntFitsInKind: (value: bigint, kind: NumericKind) => boolean;
/**
 * Infer the numeric kind from a raw literal lexeme.
 *
 * Rules:
 * - Integer literals (no decimal, no exponent, fits in Int32) → Int32
 * - Integer literals (fits in Int64 but not Int32) → Int64
 * - Everything else (floating point, very large integers) → Double
 *
 * This function is used at IR build time to attach numericIntent to literals.
 */
export declare const inferNumericKindFromRaw: (raw: string) => NumericKind;
//# sourceMappingURL=numeric-helpers.d.ts.map