//! A basic `Variable` implementation.
//!
//! Frontends can use any indexing scheme they see fit and
//! generate the appropriate `Variable` instances.
//!
//! Note: The `Variable` is used by Cranelift to index into densely allocated
//! arrays containing information about your mutable variables
//! Thus, make sure that Variable's indexes are allocated contiguously and
//! starting at `0`.

use core::u32;
use cranelift_codegen::entity::entity_impl;

/// An opaque reference to a variable.
#[derive(Copy, Clone, PartialEq, Eq)]
pub struct Variable(u32);

entity_impl!(Variable, "var");

impl Variable {
    /// Create a new Variable with the given index.
    #[deprecated = "Use Variable::from_u32 instead"]
    pub fn with_u32(index: u32) -> Self {
        Variable::from_u32(index)
    }
}
