@@ -202,7 +202,7 @@ fn exec_one(cf: &mut CallFrame, stack: &mut Stack, store: &mut Store, module: &M
202202 cf. enter_block (
203203 BlockFrame :: new (
204204 cf. instr_ptr ,
205- cf. instr_ptr + end_offset,
205+ cf. instr_ptr + end_offset as usize ,
206206 stack. values . len ( ) ,
207207 BlockType :: If ,
208208 & args,
@@ -217,25 +217,25 @@ fn exec_one(cf: &mut CallFrame, stack: &mut Stack, store: &mut Store, module: &M
217217 // falsy value is on the top of the stack
218218 if let Some ( else_offset) = else_offset {
219219 let label = BlockFrame :: new (
220- cf. instr_ptr + else_offset,
221- cf. instr_ptr + end_offset,
220+ cf. instr_ptr + else_offset as usize ,
221+ cf. instr_ptr + end_offset as usize ,
222222 stack. values . len ( ) ,
223223 BlockType :: Else ,
224224 & args,
225225 module,
226226 ) ;
227- cf. instr_ptr += else_offset;
227+ cf. instr_ptr += else_offset as usize ;
228228 cf. enter_block ( label, & mut stack. values , & mut stack. blocks ) ;
229229 } else {
230- cf. instr_ptr += end_offset;
230+ cf. instr_ptr += end_offset as usize ;
231231 }
232232 }
233233
234234 Loop ( args, end_offset) => {
235235 cf. enter_block (
236236 BlockFrame :: new (
237237 cf. instr_ptr ,
238- cf. instr_ptr + end_offset,
238+ cf. instr_ptr + end_offset as usize ,
239239 stack. values . len ( ) ,
240240 BlockType :: Loop ,
241241 & args,
@@ -250,7 +250,7 @@ fn exec_one(cf: &mut CallFrame, stack: &mut Stack, store: &mut Store, module: &M
250250 cf. enter_block (
251251 BlockFrame :: new (
252252 cf. instr_ptr ,
253- cf. instr_ptr + end_offset,
253+ cf. instr_ptr + end_offset as usize ,
254254 stack. values . len ( ) , // - params,
255255 BlockType :: Block ,
256256 & args,
@@ -262,7 +262,7 @@ fn exec_one(cf: &mut CallFrame, stack: &mut Stack, store: &mut Store, module: &M
262262 }
263263
264264 BrTable ( default, len) => {
265- let instr = cf. instructions ( ) [ cf. instr_ptr + 1 ..cf. instr_ptr + 1 + len]
265+ let instr = cf. instructions ( ) [ cf. instr_ptr + 1 ..cf. instr_ptr + 1 + len as usize ]
266266 . iter ( )
267267 . map ( |i| match i {
268268 BrLabel ( l) => Ok ( * l) ,
@@ -273,7 +273,7 @@ fn exec_one(cf: &mut CallFrame, stack: &mut Stack, store: &mut Store, module: &M
273273 } )
274274 . collect :: < Result < Vec < _ > > > ( ) ?;
275275
276- if unlikely ( instr. len ( ) != len) {
276+ if unlikely ( instr. len ( ) != len as usize ) {
277277 panic ! (
278278 "Expected {} BrLabel instructions, got {}, this should have been validated by the parser" ,
279279 len,
@@ -319,7 +319,7 @@ fn exec_one(cf: &mut CallFrame, stack: &mut Stack, store: &mut Store, module: &M
319319
320320 let res_count = block. results ;
321321 stack. values . truncate_keep ( block. stack_ptr , res_count) ;
322- cf. instr_ptr += end_offset;
322+ cf. instr_ptr += end_offset as usize ;
323323 }
324324
325325 EndBlockFrame => {
@@ -409,7 +409,7 @@ fn exec_one(cf: &mut CallFrame, stack: &mut Stack, store: &mut Store, module: &M
409409 // copy between two memories
410410 let mem2 = store. get_mem ( module. resolve_mem_addr ( to) as usize ) ?;
411411 let mut mem2 = mem2. borrow_mut ( ) ;
412- mem2. copy_from_slice ( dst as usize , mem. load ( src as usize , 0 , size as usize ) ?) ?;
412+ mem2. copy_from_slice ( dst as usize , mem. load ( src as usize , size as usize ) ?) ?;
413413 }
414414 }
415415
@@ -447,7 +447,7 @@ fn exec_one(cf: &mut CallFrame, stack: &mut Stack, store: &mut Store, module: &M
447447 let data = & data[ offset..( offset + size) ] ;
448448
449449 // mem.store checks bounds
450- mem. store ( dst, 0 , data, size ) ?;
450+ mem. store ( dst, size , data) ?;
451451 }
452452
453453 DataDrop ( data_index) => {
@@ -704,6 +704,11 @@ fn exec_one(cf: &mut CallFrame, stack: &mut Stack, store: &mut Store, module: &M
704704 stack. values . push ( cf. get_local ( b as usize ) ) ;
705705 }
706706
707+ LocalGetSet ( a, b) => {
708+ let a = cf. get_local ( a as usize ) ;
709+ cf. set_local ( b as usize , a) ;
710+ }
711+
707712 // I64Xor + I64Const + I64RotL
708713 I64XorConstRotl ( rotate_by) => {
709714 let val = stack. values . pop_t :: < i64 > ( ) ?;
0 commit comments