Wasm: reuse existing SkipBytes code for opcodes

This commit is contained in:
Brian Carroll 2022-01-12 08:26:18 +00:00
parent 8a01c3f98a
commit 7a4593170c
2 changed files with 27 additions and 22 deletions

View File

@ -278,38 +278,25 @@ impl SkipBytes for OpCode {
*cursor += 1 + 8;
}
Leb32x1 => {
let i = *cursor + 1;
*cursor = skip_leb(bytes, i, 5);
*cursor += 1;
u32::skip_bytes(bytes, cursor);
}
Leb64x1 => {
let i = *cursor + 1;
*cursor = skip_leb(bytes, i, 10);
*cursor += 1;
u64::skip_bytes(bytes, cursor);
}
Leb32x2 => {
let mut i = *cursor + 1;
i = skip_leb(bytes, i, 5);
i = skip_leb(bytes, i, 5);
*cursor = i;
*cursor += 1;
u32::skip_bytes(bytes, cursor);
u32::skip_bytes(bytes, cursor);
}
BrTable => {
*cursor += 1;
let n_labels = 1 + parse_u32_or_panic(bytes, cursor);
let mut i = *cursor;
for _ in 0..n_labels {
i = skip_leb(bytes, i, 5);
u32::skip_bytes(bytes, cursor);
}
*cursor = i;
}
}
}
}
#[inline(always)]
fn skip_leb(bytes: &[u8], mut i: usize, max_len: usize) -> usize {
let imax = i + max_len;
while (bytes[i] & 0x80 != 0) && (i < imax) {
i += 1;
}
debug_assert!(i < imax);
i + 1
}

View File

@ -268,7 +268,25 @@ pub trait SkipBytes {
impl SkipBytes for u32 {
fn skip_bytes(bytes: &[u8], cursor: &mut usize) {
parse_u32_or_panic(bytes, cursor);
let imax = 5;
let mut i = *cursor;
while (bytes[i] & 0x80 != 0) && (i < imax) {
i += 1;
}
debug_assert!(i < imax);
*cursor = i + 1
}
}
impl SkipBytes for u64 {
fn skip_bytes(bytes: &[u8], cursor: &mut usize) {
let imax = 10;
let mut i = *cursor;
while (bytes[i] & 0x80 != 0) && (i < imax) {
i += 1;
}
debug_assert!(i < imax);
*cursor = i + 1
}
}