LogoChemical Docs
Ctrl+K

Unions

Unions are low-level memory structures where all members share the same memory location. They are primarily used for C interoperability or extreme memory optimization and are generally unsafe.

Basic Unions

union IntFloat {

    var i : int

    var f : float

}



var u = IntFloat { i : 42 }

// u.f will reinterpret the same bytes as float



// when you try to initialize a union, you must initialize only a single member

var u2 = IntFloat { i : 234, f : 0.324f } // ❌ error: only a single member can be initialized

CAUTION
Accessing a different union member than the one that was set is undefined behavior. The compiler does not track which member is active.

Unions with Nested Structs

Unions can contain anonymous structs for complex layouts:

union Storage {

    struct {

        var data : *char

        var length : size_t

    } heap;

    struct {

        var buffer : [16]char

        var length : uchar

    } sso;

}



var s : Storage

s.sso.buffer[0] = 'H'

s.sso.length = 1

Methods on Unions

Unions can have methods just like structs:

union IntFloatUnion {

    var a : int

    var b : float

    

    func give_int(&self) : int {

        return a

    }

    

    func give_float(&self) : float {

        return b

    }

}



var u = IntFloatUnion { a : 12 }

u.give_int()  // Returns 12