@@ -313,10 +313,12 @@ impl CollectTypesMetadata for TyExpression {
313
313
} => {
314
314
let enum_decl = decl_engine. get_enum ( enum_ref) ;
315
315
for p in enum_decl. generic_parameters . iter ( ) {
316
- let p = p
317
- . as_type_parameter ( )
318
- . expect ( "only works for type parameters" ) ;
319
- ctx. call_site_insert ( p. type_id , call_path_binding. inner . suffix . span ( ) )
316
+ match p {
317
+ TypeParameter :: Type ( p) => {
318
+ ctx. call_site_insert ( p. type_id , call_path_binding. inner . suffix . span ( ) )
319
+ }
320
+ TypeParameter :: Const ( _) => { }
321
+ }
320
322
}
321
323
if let Some ( contents) = contents {
322
324
res. append ( & mut contents. collect_types_metadata ( handler, ctx) ?) ;
@@ -330,10 +332,12 @@ impl CollectTypesMetadata for TyExpression {
330
332
) ;
331
333
}
332
334
for p in enum_decl. generic_parameters . iter ( ) {
333
- let p = p
334
- . as_type_parameter ( )
335
- . expect ( "only works for type parameters" ) ;
336
- res. append ( & mut p. type_id . collect_types_metadata ( handler, ctx) ?) ;
335
+ match p {
336
+ TypeParameter :: Type ( p) => {
337
+ res. append ( & mut p. type_id . collect_types_metadata ( handler, ctx) ?) ;
338
+ }
339
+ TypeParameter :: Const ( _) => { }
340
+ }
337
341
}
338
342
}
339
343
AbiCast { address, .. } => {
@@ -488,6 +492,65 @@ impl MaterializeConstGenerics for TyExpression {
488
492
TyExpressionVariant :: Deref ( r) => {
489
493
r. materialize_const_generics ( engines, handler, name, value)
490
494
}
495
+ TyExpressionVariant :: MatchExp { desugared, .. } => {
496
+ desugared. materialize_const_generics ( engines, handler, name, value)
497
+ }
498
+ TyExpressionVariant :: EnumInstantiation { contents, .. } => {
499
+ if let Some ( contents) = contents. as_mut ( ) {
500
+ contents. materialize_const_generics ( engines, handler, name, value) ?;
501
+ }
502
+ Ok ( ( ) )
503
+ }
504
+ TyExpressionVariant :: EnumTag { exp } => {
505
+ exp. materialize_const_generics ( engines, handler, name, value)
506
+ }
507
+ TyExpressionVariant :: Tuple { fields } => {
508
+ for f in fields {
509
+ f. materialize_const_generics ( engines, handler, name, value) ?;
510
+ }
511
+ Ok ( ( ) )
512
+ }
513
+ TyExpressionVariant :: TupleElemAccess {
514
+ prefix,
515
+ resolved_type_of_parent,
516
+ ..
517
+ } => {
518
+ prefix. materialize_const_generics ( engines, handler, name, value) ?;
519
+ resolved_type_of_parent
520
+ . materialize_const_generics ( engines, handler, name, value) ?;
521
+ Ok ( ( ) )
522
+ }
523
+ TyExpressionVariant :: LazyOperator { lhs, rhs, .. } => {
524
+ lhs. materialize_const_generics ( engines, handler, name, value) ?;
525
+ rhs. materialize_const_generics ( engines, handler, name, value)
526
+ }
527
+ TyExpressionVariant :: AsmExpression { registers, .. } => {
528
+ for r in registers. iter_mut ( ) {
529
+ if let Some ( init) = r. initializer . as_mut ( ) {
530
+ init. materialize_const_generics ( engines, handler, name, value) ?;
531
+ }
532
+ }
533
+ Ok ( ( ) )
534
+ }
535
+ TyExpressionVariant :: ConstantExpression { .. } => Ok ( ( ) ) ,
536
+ TyExpressionVariant :: StructExpression { fields, .. } => {
537
+ for f in fields {
538
+ f. value
539
+ . materialize_const_generics ( engines, handler, name, value) ?;
540
+ }
541
+ Ok ( ( ) )
542
+ }
543
+ TyExpressionVariant :: StructFieldAccess {
544
+ prefix,
545
+ resolved_type_of_parent,
546
+ ..
547
+ } => {
548
+ prefix. materialize_const_generics ( engines, handler, name, value) ?;
549
+ resolved_type_of_parent. materialize_const_generics ( engines, handler, name, value)
550
+ }
551
+ TyExpressionVariant :: UnsafeDowncast { exp, .. } => {
552
+ exp. materialize_const_generics ( engines, handler, name, value)
553
+ }
491
554
_ => Err ( handler. emit_err (
492
555
sway_error:: error:: CompileError :: ConstGenericNotSupportedHere {
493
556
span : self . span . clone ( ) ,
0 commit comments