| 137 | } |
| 138 | |
| 139 | pub(crate) fn init(&mut self, offset: i64, init: &[TableElement]) -> Result<(), Trap> { |
| 140 | let offset = offset as usize; |
| 141 | let end = offset.checked_add(init.len()).ok_or(crate::Trap::TableOutOfBounds { |
| 142 | offset, |
| 143 | len: init.len(), |
| 144 | max: self.elements.len(), |
| 145 | })?; |
| 146 | |
| 147 | if end > self.elements.len() || end < offset { |
| 148 | return Err(crate::Trap::TableOutOfBounds { offset, len: init.len(), max: self.elements.len() }); |
| 149 | } |
| 150 | self.elements[offset..end].copy_from_slice(init); |
| 151 | Ok(()) |
| 152 | } |
| 153 | } |
| 154 | |
| 155 | #[derive(Clone, Copy)] |