Skip to content

Commit 3ba1753

Browse files
committed
fix a crash in recur
1 parent d5928a9 commit 3ba1753

File tree

1 file changed

+6
-3
lines changed

1 file changed

+6
-3
lines changed

src/algorithm/recur.rs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use crate::{Primitive, SigNode, Uiua, UiuaResult, Value};
1+
use crate::{Array, Boxed, Primitive, SigNode, Uiua, UiuaResult, Value};
22

33
pub 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

Comments
 (0)