beamr 0.6.3

A Rust runtime with the BEAM's execution model, targeting Gleam
Documentation
use crate::error::LoadError;

pub(crate) fn opcode_arity(opcode: u8) -> Result<usize, LoadError> {
    let arity = match opcode {
        1 => 1,
        2 => 3,
        4 => 2,
        5 => 3,
        6 => 2,
        7 => 2,
        8 => 3,
        9 => 2,
        10 => 4,
        11 => 5,
        12 => 2,
        13 => 3,
        14 => 2,
        16 => 2,
        18 => 1,
        19 | 20 | 21 | 22 | 73 | 133 | 149 | 160 | 161 | 179 => 0,
        23 => 2,
        24 => 1,
        25 => 1,
        26 => 2,
        39..=44 => 3,
        45..=53 => 2,
        55..=57 => 2,
        58 => 3,
        59 => 3,
        60 => 3,
        61 => 1,
        62 => 2,
        63 => 1,
        64 => 2,
        65 => 3,
        66 => 3,
        67 => 3,
        69 => 3,
        72 => 1,
        74 => 1,
        75 => 1,
        77 => 2,
        78 => 2,
        96 => 2,
        97 => 2,
        98..=101 => 4,
        102 => 3,
        103 => 1,
        104 => 2,
        105 => 1,
        106 => 1,
        107 => 1,
        108 => 2,
        112 => 1,
        113 => 2,
        114 => 2,
        115 => 3,
        117 => 7,
        118 => 7,
        119 => 7,
        120 => 5,
        121 => 3,
        124 => 5,
        125 => 6,
        129 => 2,
        131 => 3,
        132 => 4,
        136 => 2,
        138 => 5,
        139 => 4,
        140 => 5,
        141 => 4,
        142 => 5,
        143 => 4,
        152 => 7,
        153 => 1,
        154 => 5,
        155 => 5,
        156 => 2,
        157 => 3,
        158 => 3,
        159 => 4,
        162 => 2,
        163 => 2,
        164 => 2,
        165 => 3,
        166 => 4,
        167 => 3,
        168 => 2,
        169 => 2,
        170 => 4,
        171 => 3,
        172 => 1,
        173 => 1,
        174 => 2,
        175 | 176 => 1,
        177 => 6,
        178 => 3,
        180 => 1,
        181 => 5,
        182 => 3,
        183 => 2,
        184 => 4,
        other => {
            return Err(LoadError::DecodeError(format!(
                "unsupported opcode {other}"
            )));
        }
    };
    Ok(arity)
}