/// A reader for the table section of a WebAssembly module. pubtype TableSectionReader<'a> = SectionLimited<'a, Table<'a>>;
/// Type information about a table defined in the table section of a WebAssembly /// module. #[derive(Clone, Debug)] pubstruct Table<'a> { /// The type of this table, including its element type and its limits. pub ty: TableType, /// The initialization expression for the table. pub init: TableInit<'a>,
}
/// Different modes of initializing a table. #[derive(Clone, Debug)] pubenum TableInit<'a> { /// The table is initialized to all null elements.
RefNull, /// Each element in the table is initialized with the specified constant /// expression.
Expr(ConstExpr<'a>),
}
impl<'a> FromReader<'a> for Table<'a> { fn from_reader(reader: &mut BinaryReader<'a>) -> Result<Self> { let has_init_expr = if reader.peek()? == 0x40 {
reader.read_u8()?; true
} else { false
};
if has_init_expr { if reader.read_u8()? != 0x00 {
bail!(reader.original_position() - 1, "invalid table encoding");
}
}
let ty = reader.read::<TableType>()?; let init = if has_init_expr {
TableInit::Expr(reader.read()?)
} else {
TableInit::RefNull
};
Ok(Table { ty, init })
}
}
impl<'a> FromReader<'a> for TableType { fn from_reader(reader: &mut BinaryReader<'a>) -> Result<Self> { let element_type = reader.read()?; let pos = reader.original_position(); let flags = reader.read_u8()?; if (flags & !0b111) != 0 {
bail!(pos, "invalid table resizable limits flags");
} let has_max = (flags & 0b001) != 0; let shared = (flags & 0b010) != 0; let table64 = (flags & 0b100) != 0;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.