1
- use crate :: { Primitive , SigNode , Uiua , UiuaResult , Value } ;
1
+ use crate :: { Array , Boxed , Primitive , SigNode , Uiua , UiuaResult , Value } ;
2
2
3
3
pub fn recur ( is_leaf : SigNode , children : SigNode , combine : SigNode , env : & mut Uiua ) -> UiuaResult {
4
4
// Signature validation
@@ -95,7 +95,9 @@ pub fn recur(is_leaf: SigNode, children: SigNode, combine: SigNode, env: &mut Ui
95
95
. all ( |val| matches ! ( val, Value :: Box ( _) ) && val. rank ( ) <= 1 )
96
96
{
97
97
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 ( ) ) ;
99
101
for child in child_nodes {
100
102
val = val. join ( child, false , env) ?;
101
103
}
@@ -146,6 +148,7 @@ pub fn recur(is_leaf: SigNode, children: SigNode, combine: SigNode, env: &mut Ui
146
148
} ;
147
149
if this_is_leaf {
148
150
// This is a leaf node
151
+ // println!("{value:?} is a leaf node");
149
152
if let Some ( parent) = parent {
150
153
stack[ parent] . child_nodes . as_mut ( ) . unwrap ( ) . push ( value) ;
151
154
} else {
@@ -158,9 +161,9 @@ pub fn recur(is_leaf: SigNode, children: SigNode, combine: SigNode, env: &mut Ui
158
161
env. push ( value. clone ( ) ) ;
159
162
env. exec ( children. clone ( ) ) ?;
160
163
let children = env. pop ( "child nodes" ) ?;
164
+ // println!("{value:?} has children {children:?}");
161
165
if children. row_count ( ) > 0 {
162
166
let index = stack. len ( ) ;
163
- // println!("{value:?} has children {children:?}");
164
167
stack. push ( RecNode {
165
168
parent,
166
169
value,
0 commit comments