| ... | @@ -534,15 +534,24 @@ pub const Type = extern union { | ... | @@ -534,15 +534,24 @@ pub const Type = extern union { |
| 534 | return a_data.error_set.eql(b_data.error_set) and a_data.payload.eql(b_data.payload); | 534 | return a_data.error_set.eql(b_data.error_set) and a_data.payload.eql(b_data.payload); |
| 535 | }, | 535 | }, |
| 536 | .ErrorSet => { | 536 | .ErrorSet => { |
| 537 | const a_is_anyerror = a.tag() == .anyerror; | 537 | if (a.tag() == .anyerror and b.tag() == .anyerror) { |
| 538 | const b_is_anyerror = b.tag() == .anyerror; | 538 | return true; |
| | 539 | } |
| 539 | | 540 | |
| 540 | if (a_is_anyerror and b_is_anyerror) return true; | 541 | if (a.tag() == .error_set and b.tag() == .error_set) { |
| 541 | if (a_is_anyerror or b_is_anyerror) return false; | 542 | return a.castTag(.error_set).?.data.owner_decl == b.castTag(.error_set).?.data.owner_decl; |
| | 543 | } |
| 542 | | 544 | |
| 543 | std.debug.panic("TODO implement Type equality comparison of {} and {}", .{ | 545 | if (a.tag() == .error_set_inferred and b.tag() == .error_set_inferred) { |
| 544 | a.tag(), b.tag(), | 546 | return a.castTag(.error_set_inferred).?.data.func == b.castTag(.error_set_inferred).?.data.func; |
| 545 | }); | 547 | } |
| | 548 | |
| | 549 | if (a.tag() == .error_set_single and b.tag() == .error_set_single) { |
| | 550 | const a_data = a.castTag(.error_set_single).?.data; |
| | 551 | const b_data = b.castTag(.error_set_single).?.data; |
| | 552 | return std.mem.eql(u8, a_data, b_data); |
| | 553 | } |
| | 554 | return false; |
| 546 | }, | 555 | }, |
| 547 | .Opaque, | 556 | .Opaque, |
| 548 | .Float, | 557 | .Float, |