Skip to content

Commit 785be0e

Browse files
chore: general cleanup, improve simd macros
Signed-off-by: Henry <mail@henrygressmann.de>
1 parent f6027eb commit 785be0e

7 files changed

Lines changed: 293 additions & 773 deletions

File tree

‎crates/tinywasm/src/interpreter/executor/mod.rs‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1024,7 +1024,7 @@ impl<'store> Executor<'store> {
10241024
let type_addr = self.module.resolve_type_addr(type_index);
10251025
let field_count =
10261026
self.store.state.get_type(type_addr).as_struct().expect("validated struct.new type").fields.len();
1027-
self.store.state.check_gc_allocation(type_addr, field_count)?;
1027+
self.store.state.gc.check_allocation(field_count, self.store.state.gc_type_has_references(type_addr))?;
10281028
let mut values = Vec::new();
10291029
cold_err!(values.try_reserve_exact(field_count)).map_err(|_| Trap::OutOfMemory)?;
10301030
if default {
@@ -1082,7 +1082,7 @@ impl<'store> Executor<'store> {
10821082
let type_addr = self.module.resolve_type_addr(type_index);
10831083
let storage = self.store.state.get_type(type_addr).as_array().expect("validated array.new type").field.storage;
10841084
let len = u32::stack_pop(&mut self.store.value_stack) as usize;
1085-
self.store.state.check_gc_allocation(type_addr, len)?;
1085+
self.store.state.gc.check_allocation(len, self.store.state.gc_type_has_references(type_addr))?;
10861086
let value = if default { default_value(storage) } else { pop_value(&mut self.store.value_stack, storage) };
10871087
let mut values = Vec::new();
10881088
cold_err!(values.try_reserve_exact(len)).map_err(|_| Trap::OutOfMemory)?;
@@ -1098,7 +1098,7 @@ impl<'store> Executor<'store> {
10981098
let storage =
10991099
self.store.state.get_type(type_addr).as_array().expect("validated array.new_fixed type").field.storage;
11001100
let len = len as usize;
1101-
self.store.state.check_gc_allocation(type_addr, len)?;
1101+
self.store.state.gc.check_allocation(len, self.store.state.gc_type_has_references(type_addr))?;
11021102
let mut values = Vec::new();
11031103
cold_err!(values.try_reserve_exact(len)).map_err(|_| Trap::OutOfMemory)?;
11041104
for _ in 0..len {
@@ -1199,7 +1199,7 @@ impl<'store> Executor<'store> {
11991199
let data_addr = self.module.resolve_data_addr(data_index);
12001200
let data = self.store.state.data[data_addr as usize].data.as_deref().unwrap_or(&[]);
12011201
data_range(storage, data, src, len)?;
1202-
self.store.state.check_gc_allocation(type_addr, len)?;
1202+
self.store.state.gc.check_allocation(len, self.store.state.gc_type_has_references(type_addr))?;
12031203
let values = decode_data(storage, data, src, len)?;
12041204
self.push_gc_object(type_addr, values)
12051205
}
@@ -1213,7 +1213,7 @@ impl<'store> Executor<'store> {
12131213
let type_addr = self.module.resolve_type_addr(type_index);
12141214
let elem_addr = self.module.resolve_elem_addr(elem_index);
12151215
let items = self.store.state.elements[elem_addr as usize].items_range(src, len)?;
1216-
self.store.state.check_gc_allocation(type_addr, len)?;
1216+
self.store.state.gc.check_allocation(len, self.store.state.gc_type_has_references(type_addr))?;
12171217
let mut values = Vec::new();
12181218
cold_err!(values.try_reserve_exact(len)).map_err(|_| Trap::OutOfMemory)?;
12191219
values.extend(items.iter().copied().map(RuntimeValue::ValueRef));

0 commit comments

Comments
 (0)