1- use crate :: { Primitive , SigNode , Uiua , UiuaResult , Value } ;
1+ use crate :: { Array , Boxed , Primitive , SigNode , Uiua , UiuaResult , Value } ;
22
33pub fn recur ( is_leaf : SigNode , children : SigNode , combine : SigNode , env : & mut Uiua ) -> UiuaResult {
44 // Signature validation
@@ -95,7 +95,9 @@ pub fn recur(is_leaf: SigNode, children: SigNode, combine: SigNode, env: &mut Ui
9595 . all ( |val| matches ! ( val, Value :: Box ( _) ) && val. rank ( ) <= 1 )
9696 {
9797 let mut child_nodes = child_nodes. into_iter ( ) ;
98- let mut val = child_nodes. next ( ) . unwrap ( ) ;
98+ let mut val = child_nodes
99+ . next ( )
100+ . unwrap_or_else ( || Array :: < Boxed > :: default ( ) . into ( ) ) ;
99101 for child in child_nodes {
100102 val = val. join ( child, false , env) ?;
101103 }
@@ -146,6 +148,7 @@ pub fn recur(is_leaf: SigNode, children: SigNode, combine: SigNode, env: &mut Ui
146148 } ;
147149 if this_is_leaf {
148150 // This is a leaf node
151+ // println!("{value:?} is a leaf node");
149152 if let Some ( parent) = parent {
150153 stack[ parent] . child_nodes . as_mut ( ) . unwrap ( ) . push ( value) ;
151154 } else {
@@ -158,9 +161,9 @@ pub fn recur(is_leaf: SigNode, children: SigNode, combine: SigNode, env: &mut Ui
158161 env. push ( value. clone ( ) ) ;
159162 env. exec ( children. clone ( ) ) ?;
160163 let children = env. pop ( "child nodes" ) ?;
164+ // println!("{value:?} has children {children:?}");
161165 if children. row_count ( ) > 0 {
162166 let index = stack. len ( ) ;
163- // println!("{value:?} has children {children:?}");
164167 stack. push ( RecNode {
165168 parent,
166169 value,
0 commit comments