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)
}