Skip to content

Commit 0ef84a3

Browse files
Merge pull request #190 from sumleo/fix/remove-node-definition-name
Fix panic in remove_node for Definition nodes
2 parents 45487dc + d9233d7 commit 0ef84a3

File tree

1 file changed

+18
-1
lines changed

1 file changed

+18
-1
lines changed

crates/wac-graph/src/graph.rs

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1038,7 +1038,7 @@ impl CompositionGraph {
10381038
if let NodeKind::Definition = node.kind {
10391039
log::debug!(
10401040
"removing type definition `{name}`",
1041-
name = node.name.as_ref().unwrap()
1041+
name = node.export.as_ref().unwrap()
10421042
);
10431043
let removed = self.defined.remove(&node.item_kind.ty());
10441044
assert!(removed.is_some());
@@ -1969,6 +1969,23 @@ mod test {
19691969
));
19701970
}
19711971

1972+
#[test]
1973+
fn it_can_remove_a_type_definition() {
1974+
let mut graph = CompositionGraph::new();
1975+
let ty_id = graph
1976+
.types_mut()
1977+
.add_defined_type(DefinedType::Alias(ValueType::Primitive(PrimitiveType::S32)));
1978+
let node_id = graph
1979+
.define_type("foo", Type::Value(ValueType::Defined(ty_id)))
1980+
.unwrap();
1981+
1982+
// Definition nodes store their name in `export`, not `name`.
1983+
// Removing a definition node should not panic.
1984+
graph.remove_node(node_id);
1985+
1986+
// Verify the definition and export were cleaned up
1987+
assert!(graph.get_export("foo").is_none());
1988+
}
19721989
#[test]
19731990
fn it_cleans_up_exports_on_unregister_package() {
19741991
let mut graph = CompositionGraph::new();

0 commit comments

Comments
 (0)