summaryrefslogtreecommitdiffstats
path: root/third_party/rust/wasm-smith/src/core/encode.rs
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/rust/wasm-smith/src/core/encode.rs')
-rw-r--r--third_party/rust/wasm-smith/src/core/encode.rs41
1 files changed, 18 insertions, 23 deletions
diff --git a/third_party/rust/wasm-smith/src/core/encode.rs b/third_party/rust/wasm-smith/src/core/encode.rs
index 7c781dc731..5a661509a6 100644
--- a/third_party/rust/wasm-smith/src/core/encode.rs
+++ b/third_party/rust/wasm-smith/src/core/encode.rs
@@ -1,5 +1,4 @@
use super::*;
-use std::convert::TryFrom;
impl Module {
/// Encode this Wasm module into bytes.
@@ -122,12 +121,22 @@ impl Module {
}
fn encode_tables(&self, module: &mut wasm_encoder::Module) {
- if self.num_defined_tables == 0 {
+ if self.defined_tables.is_empty() {
return;
}
let mut tables = wasm_encoder::TableSection::new();
- for t in self.tables[self.tables.len() - self.num_defined_tables..].iter() {
- tables.table(*t);
+ for (t, init) in self.tables[self.tables.len() - self.defined_tables.len()..]
+ .iter()
+ .zip(&self.defined_tables)
+ {
+ match init {
+ Some(init) => {
+ tables.table_with_init(*t, init);
+ }
+ None => {
+ tables.table(*t);
+ }
+ }
}
module.section(&tables);
}
@@ -150,10 +159,7 @@ impl Module {
let mut globals = wasm_encoder::GlobalSection::new();
for (idx, expr) in &self.defined_globals {
let ty = &self.globals[*idx as usize];
- match expr {
- GlobalInitExpr::ConstExpr(expr) => globals.global(*ty, expr),
- GlobalInitExpr::FuncRef(func) => globals.global(*ty, &ConstExpr::ref_func(*func)),
- };
+ globals.global(*ty, expr);
}
module.section(&globals);
}
@@ -180,24 +186,13 @@ impl Module {
return;
}
let mut elems = wasm_encoder::ElementSection::new();
- let mut exps = vec![];
for el in &self.elems {
let elements = match &el.items {
- Elements::Expressions(es) => {
- exps.clear();
- exps.extend(es.iter().map(|e| {
- // TODO(nagisa): generate global.get of imported ref globals too.
- match e {
- Some(i) => match el.ty {
- RefType::FUNCREF => wasm_encoder::ConstExpr::ref_func(*i),
- _ => unreachable!(),
- },
- None => wasm_encoder::ConstExpr::ref_null(el.ty.heap_type),
- }
- }));
- wasm_encoder::Elements::Expressions(el.ty, &exps)
+ Elements::Expressions(es) => wasm_encoder::Elements::Expressions(el.ty, es),
+ Elements::Functions(fs) => {
+ assert_eq!(el.ty, RefType::FUNCREF);
+ wasm_encoder::Elements::Functions(fs)
}
- Elements::Functions(fs) => wasm_encoder::Elements::Functions(fs),
};
match &el.kind {
ElementKind::Active { table, offset } => {