@@ -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 ///
@@ -1403,7 +1410,7 @@ impl<'a, B: Bindgen> Generator<'a, B> {
14031410 TypeDefKind :: Unknown => unreachable ! ( ) ,
14041411 TypeDefKind :: FixedSizeList ( ty, size) => {
14051412 self . emit ( & FixedSizeListLower {
1406- elements : ty,
1413+ element : ty,
14071414 size : * size,
14081415 id,
14091416 } ) ;
@@ -1616,7 +1623,7 @@ impl<'a, B: Bindgen> Generator<'a, B> {
16161623 self . lift ( ty) ;
16171624 }
16181625 self . emit ( & FixedSizeListLift {
1619- elements : ty,
1626+ element : ty,
16201627 size : * size,
16211628 id,
16221629 } ) ;
@@ -1778,7 +1785,7 @@ impl<'a, B: Bindgen> Generator<'a, B> {
17781785 }
17791786
17801787 TypeDefKind :: Unknown => unreachable ! ( ) ,
1781- TypeDefKind :: FixedSizeList ( ty , size) => {
1788+ TypeDefKind :: FixedSizeList ( element , size) => {
17821789 // let increment = self.bindgen.sizes().size(ty);
17831790 // let mut position = offset;
17841791 // let resultvar = self.stack[0];
@@ -1788,11 +1795,29 @@ impl<'a, B: Bindgen> Generator<'a, B> {
17881795 // self.write_to_memory(ty, addr.clone(), position);
17891796 // position = position + increment;
17901797 // }
1791- self . emit ( & FixedSizeListLower {
1792- elements : ty,
1793- size : * size,
1794- id,
1795- } ) ;
1798+ // @@@@
1799+ // self.emit(&FixedSizeListLower {
1800+ // elements: ty,
1801+ // size: *size,
1802+ // id,
1803+ // });
1804+
1805+ // resembles write_list_to_memory
1806+ self . push_block ( ) ;
1807+ self . emit ( & IterElem { element } ) ;
1808+ self . emit ( & IterBasePointer ) ;
1809+ let elem_addr = self . stack . pop ( ) . unwrap ( ) ;
1810+ self . write_to_memory ( element, elem_addr, Default :: default ( ) ) ;
1811+ self . finish_block ( 0 ) ;
1812+ // let target = self.stack.pop().unwrap();
1813+ self . stack . push ( addr) ;
1814+ self . emit ( & FixedSizeListLowerBlock { element, size : * size, id } ) ;
1815+
1816+ // for idx in 0..*size {
1817+ // //self.write_fields_to_memory(tuple.types.iter(), addr, offset);
1818+ // self.emit(&FixedSizeListLowerElement { elements: ty, idx, });
1819+ // self.write_to_memory(ty, addr.clone(), offset + (field_offset));
1820+ // }
17961821 }
17971822 } ,
17981823 }
@@ -1988,7 +2013,7 @@ impl<'a, B: Bindgen> Generator<'a, B> {
19882013 position = position + increment;
19892014 }
19902015 self . emit ( & FixedSizeListLift {
1991- elements : ty,
2016+ element : ty,
19922017 size : * size,
19932018 id,
19942019 } ) ;
0 commit comments