Struct wasm_encoder::CodeSection
source · pub struct CodeSection { /* private fields */ }
Expand description
An encoder for the code section.
Code sections are only supported for modules.
§Example
use wasm_encoder::{
CodeSection, Function, FunctionSection, Instruction, Module,
TypeSection, ValType
};
let mut types = TypeSection::new();
types.function(vec![], vec![ValType::I32]);
let mut functions = FunctionSection::new();
let type_index = 0;
functions.function(type_index);
let locals = vec![];
let mut func = Function::new(locals);
func.instruction(&Instruction::I32Const(42));
let mut code = CodeSection::new();
code.function(&func);
let mut module = Module::new();
module
.section(&types)
.section(&functions)
.section(&code);
let wasm_bytes = module.finish();
Implementations§
source§impl CodeSection
impl CodeSection
sourcepub fn byte_len(&self) -> usize
pub fn byte_len(&self) -> usize
The number of bytes already added to this section.
This number doesn’t include the vector length that precedes the code entries, since it has a variable size that isn’t known until all functions are added.
sourcepub fn function(&mut self, func: &Function) -> &mut Self
pub fn function(&mut self, func: &Function) -> &mut Self
Write a function body into this code section.
sourcepub fn raw(&mut self, data: &[u8]) -> &mut Self
pub fn raw(&mut self, data: &[u8]) -> &mut Self
Add a raw byte slice into this code section as a function body.
The length prefix of the function body will be automatically prepended, and should not be included in the raw byte slice.
§Example
You can use the raw
method to copy an already-encoded function body
into a new code section encoder:
// id, size, # entries, entry
let code_section = [10, 6, 1, 4, 0, 65, 0, 11];
// Parse the code section.
let reader = BinaryReader::new(&code_section, 0, WasmFeatures::all());
let reader = CodeSectionReader::new(reader).unwrap();
let body = reader.into_iter().next().unwrap().unwrap();
let body_range = body.range();
// Add the body to a new code section encoder by copying bytes rather
// than re-parsing and re-encoding it.
let mut encoder = wasm_encoder::CodeSection::new();
encoder.raw(&code_section[body_range.start..body_range.end]);
Trait Implementations§
source§impl Clone for CodeSection
impl Clone for CodeSection
source§fn clone(&self) -> CodeSection
fn clone(&self) -> CodeSection
Returns a copy of the value. Read more
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source
. Read moresource§impl Debug for CodeSection
impl Debug for CodeSection
source§impl Default for CodeSection
impl Default for CodeSection
source§fn default() -> CodeSection
fn default() -> CodeSection
Returns the “default value” for a type. Read more
source§impl Encode for CodeSection
impl Encode for CodeSection
Auto Trait Implementations§
impl Freeze for CodeSection
impl RefUnwindSafe for CodeSection
impl Send for CodeSection
impl Sync for CodeSection
impl Unpin for CodeSection
impl UnwindSafe for CodeSection
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
🔬This is a nightly-only experimental API. (
clone_to_uninit
)