@@ -310,18 +310,25 @@ def_instruction! {
310310 /// Pops all fields for a fixed list off the stack and then composes them
311311 /// into an array.
312312 FixedSizeListLift {
313- elements : & ' a Type ,
313+ element : & ' a Type ,
314314 size: u32 ,
315315 id: TypeId ,
316316 } : [ * size as usize ] => [ 1 ] ,
317317
318318 /// Pops an array off the stack, decomposes the elements and then pushes them onto the stack.
319319 FixedSizeListLower {
320- elements : & ' a Type ,
320+ element : & ' a Type ,
321321 size: u32 ,
322322 id: TypeId ,
323323 } : [ 1 ] => [ * size as usize ] ,
324324
325+ /// Pops an array and an address off the stack, passes each element to a block
326+ FixedSizeListLowerBlock {
327+ element: & ' a Type ,
328+ size: u32 ,
329+ id: TypeId ,
330+ } : [ 2 ] => [ 0 ] ,
331+
325332 /// Pushes an operand onto the stack representing the list item from
326333 /// each iteration of the list.
327334 ///
@@ -1373,7 +1380,7 @@ impl<'a, B: Bindgen> Generator<'a, B> {
13731380 TypeDefKind :: Unknown => unreachable ! ( ) ,
13741381 TypeDefKind :: FixedSizeList ( ty, size) => {
13751382 self . emit ( & FixedSizeListLower {
1376- elements : ty,
1383+ element : ty,
13771384 size : * size,
13781385 id,
13791386 } ) ;
@@ -1593,7 +1600,7 @@ impl<'a, B: Bindgen> Generator<'a, B> {
15931600 self . lift ( ty) ;
15941601 }
15951602 self . emit ( & FixedSizeListLift {
1596- elements : ty,
1603+ element : ty,
15971604 size : * size,
15981605 id,
15991606 } ) ;
@@ -1758,7 +1765,7 @@ impl<'a, B: Bindgen> Generator<'a, B> {
17581765 }
17591766
17601767 TypeDefKind :: Unknown => unreachable ! ( ) ,
1761- TypeDefKind :: FixedSizeList ( ty , size) => {
1768+ TypeDefKind :: FixedSizeList ( element , size) => {
17621769 // let increment = self.bindgen.sizes().size(ty);
17631770 // let mut position = offset;
17641771// let resultvar = self.stack[0];
@@ -1768,11 +1775,29 @@ impl<'a, B: Bindgen> Generator<'a, B> {
17681775 // self.write_to_memory(ty, addr.clone(), position);
17691776 // position = position + increment;
17701777 // }
1771- self . emit ( & FixedSizeListLower {
1772- elements : ty,
1773- size : * size,
1774- id,
1775- } ) ;
1778+ // @@@@
1779+ // self.emit(&FixedSizeListLower {
1780+ // elements: ty,
1781+ // size: *size,
1782+ // id,
1783+ // });
1784+
1785+ // resembles write_list_to_memory
1786+ self . push_block ( ) ;
1787+ self . emit ( & IterElem { element } ) ;
1788+ self . emit ( & IterBasePointer ) ;
1789+ let elem_addr = self . stack . pop ( ) . unwrap ( ) ;
1790+ self . write_to_memory ( element, elem_addr, Default :: default ( ) ) ;
1791+ self . finish_block ( 0 ) ;
1792+ // let target = self.stack.pop().unwrap();
1793+ self . stack . push ( addr) ;
1794+ self . emit ( & FixedSizeListLowerBlock { element, size : * size, id } ) ;
1795+
1796+ // for idx in 0..*size {
1797+ // //self.write_fields_to_memory(tuple.types.iter(), addr, offset);
1798+ // self.emit(&FixedSizeListLowerElement { elements: ty, idx, });
1799+ // self.write_to_memory(ty, addr.clone(), offset + (field_offset));
1800+ // }
17761801 }
17771802 } ,
17781803 }
@@ -1968,7 +1993,7 @@ impl<'a, B: Bindgen> Generator<'a, B> {
19681993 position = position + increment;
19691994 }
19701995 self . emit ( & FixedSizeListLift {
1971- elements : ty,
1996+ element : ty,
19721997 size : * size,
19731998 id,
19741999 } ) ;
0 commit comments