From 783a30dd7962d53ef6b5a0852473b915d7d0afdc Mon Sep 17 00:00:00 2001 From: Ryan P Date: Fri, 26 Jun 2026 12:24:59 -0400 Subject: [PATCH] allow type aliasing of DefinedType --- crates/wac-graph/src/graph.rs | 9 ++++++++- crates/wac-parser/tests/encoding/types.wac | 7 +++++++ crates/wac-parser/tests/encoding/types.wac.result | 11 +++++++++++ 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/crates/wac-graph/src/graph.rs b/crates/wac-graph/src/graph.rs index ace9cba..719ee26 100644 --- a/crates/wac-graph/src/graph.rs +++ b/crates/wac-graph/src/graph.rs @@ -1668,7 +1668,14 @@ impl<'a> CompositionGraphEncoder<'a> { if let DefinedType::Alias(aliased @ ValueType::Defined(_)) = &self.0.types()[id] { - (ty, state.current.type_indexes[&Type::Value(*aliased)]) + if let Some(&index) = + // check if aliased had previously been exported + state.current.type_indexes.get(&Type::Value(*aliased)) + { + (ty, index) + } else { + (ty, encoder.ty(state, ty, None)) + } } else { (ty, encoder.ty(state, ty, None)) } diff --git a/crates/wac-parser/tests/encoding/types.wac b/crates/wac-parser/tests/encoding/types.wac index 5a67bce..45c79f3 100644 --- a/crates/wac-parser/tests/encoding/types.wac +++ b/crates/wac-parser/tests/encoding/types.wac @@ -118,3 +118,10 @@ type m2 = m; type o2 = o; type p2 = p; type q2 = q; + +// Test encoding of aliases to inline-created defined types +type list-alias = list; +type option-alias = option; +type result-alias = result; +type tuple-alias = tuple; +type nested-list-alias = list>; diff --git a/crates/wac-parser/tests/encoding/types.wac.result b/crates/wac-parser/tests/encoding/types.wac.result index a4c72ef..6d91ecc 100644 --- a/crates/wac-parser/tests/encoding/types.wac.result +++ b/crates/wac-parser/tests/encoding/types.wac.result @@ -170,6 +170,17 @@ (export $o2 (;58;) "o2" (type $o)) (export $p2 (;59;) "p2" (type $p)) (export $q2 (;60;) "q2" (type $q)) + (type (;61;) (list u8)) + (export $list-alias (;62;) "list-alias" (type 61)) + (type (;63;) (option string)) + (export $option-alias (;64;) "option-alias" (type 63)) + (type (;65;) (result u32 (error string))) + (export $result-alias (;66;) "result-alias" (type 65)) + (type (;67;) (tuple u8 u16)) + (export $tuple-alias (;68;) "tuple-alias" (type 67)) + (type (;69;) (list u8)) + (type (;70;) (list 69)) + (export $nested-list-alias (;71;) "nested-list-alias" (type 70)) (@producers (processed-by "wac-parser" "0.10.1") )