@@ -161,7 +161,8 @@ impl<'a> CheckInterfacesVisitor<'a> {
161161 return None ;
162162 }
163163 Some ( cm)
164- if !cm. type_ . eq_user ( & parent_member. type_ ) || cm. mode != parent_member. mode =>
164+ if !cm. type_ . eq_user ( & parent_member. type_ )
165+ || !cm. mode . eq_user ( & parent_member. mode ) =>
165166 {
166167 self . state . handler . emit_err (
167168 CheckInterfacesError :: conflicting_record_field (
@@ -424,12 +425,12 @@ impl<'a> CheckInterfacesVisitor<'a> {
424425 // Parameter types must match.
425426 input_a. type_ . eq_user ( & input_b. type_ ) &&
426427 // Parameter modes must match.
427- input_a. mode == input_b. mode
428+ input_a. mode . eq_user ( & input_b. mode )
428429 } ) &&
429430
430431 // Output must match.
431432 a. output . len ( ) == b. output . len ( ) &&
432- a. output . iter ( ) . zip ( b. output . iter ( ) ) . all ( |( output_a, output_b) | output_a. type_ . eq_user ( & output_b. type_ ) && output_a. mode == output_b. mode ) &&
433+ a. output . iter ( ) . zip ( b. output . iter ( ) ) . all ( |( output_a, output_b) | output_a. type_ . eq_user ( & output_b. type_ ) && output_a. mode . eq_user ( & output_b. mode ) ) &&
433434
434435 // Const parameters must match.
435436 a. const_parameters . len ( ) == b. const_parameters . len ( ) &&
@@ -456,14 +457,14 @@ impl<'a> CheckInterfacesVisitor<'a> {
456457 // Parameter types must match.
457458 func_input. type_ . eq_user ( & proto_input. type_ ) &&
458459 // Parameter modes must match.
459- func_input. mode == proto_input. mode
460+ func_input. mode . eq_user ( & proto_input. mode )
460461 } ) &&
461462
462463 // Output must match.
463464 func. output . len ( ) == proto. output . len ( ) &&
464465
465466 func. output . iter ( ) . zip ( proto. output . iter ( ) ) . all (
466- |( func_output, proto_output) | func_output. type_ . eq_user ( & proto_output. type_ ) && func_output. mode == proto_output. mode ) &&
467+ |( func_output, proto_output) | func_output. type_ . eq_user ( & proto_output. type_ ) && func_output. mode . eq_user ( & proto_output. mode ) ) &&
467468
468469 // Const parameters must match.
469470 func. const_parameters . len ( ) == proto. const_parameters . len ( ) &&
@@ -506,7 +507,7 @@ impl<'a> CheckInterfacesVisitor<'a> {
506507 child. members . iter ( ) . any ( |child_member| {
507508 child_member. identifier . name == parent_member. identifier . name
508509 && child_member. type_ . eq_user ( & parent_member. type_ )
509- && child_member. mode == parent_member. mode
510+ && child_member. mode . eq_user ( & parent_member. mode )
510511 } )
511512 } )
512513 }
@@ -523,7 +524,7 @@ impl<'a> CheckInterfacesVisitor<'a> {
523524 None => return Some ( ( required_member. identifier . name , required_member, None ) ) ,
524525 Some ( actual_member) => {
525526 if !actual_member. type_ . eq_user ( & required_member. type_ )
526- || actual_member. mode != required_member. mode
527+ || ! actual_member. mode . eq_user ( & required_member. mode )
527528 {
528529 return Some ( ( required_member. identifier . name , required_member, Some ( actual_member) ) ) ;
529530 }
0 commit comments