@@ -8,9 +8,10 @@ use wac_types::{
88 Variant , WorldId ,
99} ;
1010use wasm_encoder:: {
11- Alias , ComponentBuilder , ComponentExportKind , ComponentOuterAliasKind , ComponentType ,
12- ComponentTypeEncoder , ComponentTypeRef , ComponentValType , CoreTypeEncoder , EntityType ,
13- GlobalType , InstanceType , MemoryType , ModuleType , TableType , TagKind , TagType , TypeBounds ,
11+ Alias , ComponentBuilder , ComponentCoreTypeEncoder , ComponentExportKind ,
12+ ComponentOuterAliasKind , ComponentType , ComponentTypeEncoder , ComponentTypeRef ,
13+ ComponentValType , EntityType , GlobalType , InstanceType , MemoryType , ModuleType , TableType ,
14+ TagKind , TagType , TypeBounds ,
1415} ;
1516
1617/// A type used to abstract the API differences between a component builder,
@@ -55,7 +56,7 @@ impl Encodable {
5556 }
5657 }
5758
58- fn core_type ( & mut self ) -> CoreTypeEncoder {
59+ fn core_type ( & mut self ) -> ComponentCoreTypeEncoder {
5960 match self {
6061 Encodable :: Builder ( t) => t. core_type ( ) . 1 ,
6162 Encodable :: Instance ( t) => t. core_type ( ) ,
@@ -268,6 +269,9 @@ impl<'a> TypeEncoder<'a> {
268269 DefinedType :: Alias ( ValueType :: Borrow ( id) ) => self . borrow ( state, * id) ,
269270 DefinedType :: Alias ( ValueType :: Own ( id) ) => self . own ( state, * id) ,
270271 DefinedType :: Alias ( ValueType :: Defined ( id) ) => self . defined ( state, * id) ,
272+ DefinedType :: Stream ( ty) => self . stream ( state, * ty) ,
273+ DefinedType :: Future ( ty) => self . future ( state, * ty) ,
274+ DefinedType :: ErrorContext => self . error_context ( state) ,
271275 } ;
272276
273277 log:: debug!( "defined type encoded to type index {index}" ) ;
@@ -476,25 +480,36 @@ impl<'a> TypeEncoder<'a> {
476480 element_type,
477481 initial,
478482 maximum,
483+ table64,
484+ shared,
479485 } => EntityType :: Table ( TableType {
480486 element_type : ( * element_type) . into ( ) ,
481487 minimum : * initial,
482488 maximum : * maximum,
489+ table64 : * table64,
490+ shared : * shared,
483491 } ) ,
484492 CoreExtern :: Memory {
485493 memory64,
486494 shared,
487495 initial,
488496 maximum,
497+ page_size_log2,
489498 } => EntityType :: Memory ( MemoryType {
490499 minimum : * initial,
491500 maximum : * maximum,
492501 memory64 : * memory64,
493502 shared : * shared,
503+ page_size_log2 : * page_size_log2,
494504 } ) ,
495- CoreExtern :: Global { val_type, mutable } => EntityType :: Global ( GlobalType {
505+ CoreExtern :: Global {
506+ val_type,
507+ mutable,
508+ shared,
509+ } => EntityType :: Global ( GlobalType {
496510 val_type : ( * val_type) . into ( ) ,
497511 mutable : * mutable,
512+ shared : * shared,
498513 } ) ,
499514 CoreExtern :: Tag ( func) => {
500515 let index = encodable. type_count ( ) ;
@@ -554,6 +569,26 @@ impl<'a> TypeEncoder<'a> {
554569 index
555570 }
556571
572+ fn stream ( & self , state : & mut State , ty : Option < ValueType > ) -> u32 {
573+ let ty = ty. map ( |ty| self . value_type ( state, ty) ) ;
574+ let index = state. current . encodable . type_count ( ) ;
575+ state. current . encodable . ty ( ) . defined_type ( ) . stream ( ty) ;
576+ index
577+ }
578+
579+ fn future ( & self , state : & mut State , ty : Option < ValueType > ) -> u32 {
580+ let ty = ty. map ( |ty| self . value_type ( state, ty) ) ;
581+ let index = state. current . encodable . type_count ( ) ;
582+ state. current . encodable . ty ( ) . defined_type ( ) . future ( ty) ;
583+ index
584+ }
585+
586+ fn error_context ( & self , state : & mut State ) -> u32 {
587+ let index = state. current . encodable . type_count ( ) ;
588+ state. current . encodable . ty ( ) . defined_type ( ) . error_context ( ) ;
589+ index
590+ }
591+
557592 fn option ( & self , state : & mut State , ty : ValueType ) -> u32 {
558593 let ty = self . value_type ( state, ty) ;
559594 let index = state. current . encodable . type_count ( ) ;
0 commit comments