@@ -1568,191 +1568,8 @@ fn constrs_eq(cs: &[@constr], ds: &[@constr]) -> bool {
1568
1568
ret true;
1569
1569
}
1570
1570
1571
- fn equal_type_structures ( a : & sty , b : & sty ) -> bool {
1572
- fn equal_mt ( a : & mt , b : & mt ) -> bool {
1573
- ret a. mut == b. mut && eq_ty ( a. ty , b. ty ) ;
1574
- }
1575
- fn equal_fn ( args_a : & [ arg ] , rty_a : & t , args_b : & [ arg ] , rty_b : & t ) ->
1576
- bool {
1577
- if !eq_ty ( rty_a, rty_b) { ret false ; }
1578
- let len = vec:: len :: < arg > ( args_a) ;
1579
- if len != vec:: len :: < arg > ( args_b) { ret false ; }
1580
- let i = 0 u;
1581
- while i < len {
1582
- let arg_a = args_a. ( i) ;
1583
- let arg_b = args_b. ( i) ;
1584
- if arg_a. mode != arg_b. mode { ret false ; }
1585
- if !eq_ty ( arg_a. ty , arg_b. ty ) { ret false ; }
1586
- i += 1 u;
1587
- }
1588
- ret true;
1589
- }
1590
- fn equal_def ( did_a : & ast:: def_id , did_b : & ast:: def_id ) -> bool {
1591
- ret did_a. crate == did_b. crate && did_a. node == did_b. node ;
1592
- }
1593
- alt a {
1594
- ty_nil. { alt b { ty_nil. { ret true; } _ { ret false; } } }
1595
- ty_bot. { alt b { ty_bot. { ret true; } _ { ret false; } } }
1596
- ty_bool. { alt b { ty_bool. { ret true; } _ { ret false; } } }
1597
- ty_int. { alt b { ty_int. { ret true; } _ { ret false; } } }
1598
- ty_float. { alt b { ty_float. { ret true; } _ { ret false; } } }
1599
- ty_uint. { alt b { ty_uint. { ret true; } _ { ret false; } } }
1600
- ty_machine ( tm_a) {
1601
- alt b {
1602
- ty_machine( tm_b) {
1603
- ret hash_type_structure ( a) == hash_type_structure ( b) ;
1604
- }
1605
- _ { ret false ; }
1606
- }
1607
- }
1608
- ty_char. { alt b { ty_char. { ret true; } _ { ret false; } } }
1609
- ty_str. { alt b { ty_str. { ret true; } _ { ret false; } } }
1610
- ty_istr. { alt b { ty_istr. { ret true; } _ { ret false; } } }
1611
- ty_tag ( id_a, tys_a) {
1612
- alt b {
1613
- ty_tag( id_b, tys_b) {
1614
- if !equal_def ( id_a, id_b) { ret false ; }
1615
- let len = vec:: len :: < t > ( tys_a) ;
1616
- if len != vec:: len :: < t > ( tys_b) { ret false ; }
1617
- let i = 0 u;
1618
- while i < len {
1619
- if !eq_ty ( tys_a. ( i) , tys_b. ( i) ) { ret false ; }
1620
- i += 1 u;
1621
- }
1622
- ret true;
1623
- }
1624
- _ { ret false ; }
1625
- }
1626
- }
1627
- ty_box ( mt_a) {
1628
- alt b { ty_box( mt_b) { ret equal_mt( mt_a, mt_b) ; } _ { ret false ; } }
1629
- }
1630
- ty_vec ( mt_a) {
1631
- alt b { ty_vec( mt_b) { ret equal_mt( mt_a, mt_b) ; } _ { ret false ; } }
1632
- }
1633
- ty_ptr ( mt_a) {
1634
- alt b { ty_ptr( mt_b) { ret equal_mt( mt_a, mt_b) ; } _ { ret false ; } }
1635
- }
1636
- ty_rec ( flds_a) {
1637
- alt b {
1638
- ty_rec( flds_b) {
1639
- let len = vec:: len :: < field > ( flds_a) ;
1640
- if len != vec:: len :: < field > ( flds_b) { ret false ; }
1641
- let i = 0 u;
1642
- while i < len {
1643
- let fld_a = flds_a. ( i) ;
1644
- let fld_b = flds_b. ( i) ;
1645
- if !str:: eq ( fld_a. ident , fld_b. ident ) ||
1646
- !equal_mt ( fld_a. mt , fld_b. mt ) {
1647
- ret false ;
1648
- }
1649
- i += 1 u;
1650
- }
1651
- ret true;
1652
- }
1653
- _ { ret false ; }
1654
- }
1655
- }
1656
- ty_tup ( ts_a) {
1657
- alt ( b) {
1658
- ty_tup ( ts_b) {
1659
- let len = vec:: len ( ts_a) ;
1660
- if len != vec:: len ( ts_b) { ret false ; }
1661
- let i = 0 u;
1662
- while i < len {
1663
- if !eq_ty ( ts_a. ( i) , ts_b. ( i) ) { ret false ; }
1664
- i += 1 u;
1665
- }
1666
- ret true;
1667
- }
1668
- _ { ret false ; }
1669
- }
1670
- }
1671
-
1672
- ty_fn ( p_a, args_a, rty_a, cf_a, constrs_a) {
1673
- alt b {
1674
- ty_fn( p_b, args_b, rty_b, cf_b, constrs_b) {
1675
- ret p_a == p_b && cf_a == cf_b && constrs_eq ( constrs_a, constrs_b)
1676
- && equal_fn ( args_a, rty_a, args_b, rty_b) ;
1677
- }
1678
- _ { ret false ; }
1679
- }
1680
- }
1681
- ty_native_fn ( abi_a, args_a, rty_a) {
1682
- alt b {
1683
- ty_native_fn( abi_b, args_b, rty_b) {
1684
- ret abi_a == abi_b && equal_fn ( args_a, rty_a, args_b, rty_b) ;
1685
- }
1686
- _ { ret false ; }
1687
- }
1688
- }
1689
- ty_obj ( methods_a) {
1690
- alt b {
1691
- ty_obj( methods_b) {
1692
- let len = vec:: len :: < method > ( methods_a) ;
1693
- if len != vec:: len :: < method > ( methods_b) { ret false ; }
1694
- let i = 0 u;
1695
- while i < len {
1696
- let m_a = methods_a. ( i) ;
1697
- let m_b = methods_b. ( i) ;
1698
- if m_a. proto != m_b. proto || !str:: eq ( m_a. ident , m_b. ident ) ||
1699
- !equal_fn ( m_a. inputs , m_a. output , m_b. inputs ,
1700
- m_b. output ) {
1701
- ret false ;
1702
- }
1703
- i += 1 u;
1704
- }
1705
- ret true;
1706
- }
1707
- _ { ret false ; }
1708
- }
1709
- }
1710
- ty_res ( id_a, inner_a, tps_a) {
1711
- alt b {
1712
- ty_res( id_b, inner_b, tps_b) {
1713
- if !equal_def ( id_a, id_b) || !eq_ty ( inner_a, inner_b) {
1714
- ret false ;
1715
- }
1716
- let i = 0 u;
1717
- for tp_a: t in tps_a {
1718
- if !eq_ty ( tp_a, tps_b. ( i) ) { ret false ; }
1719
- i += 1 u;
1720
- }
1721
- ret true;
1722
- }
1723
- _ { ret false ; }
1724
- }
1725
- }
1726
- ty_var ( v_a) {
1727
- alt b { ty_var( v_b) { ret v_a == v_b; } _ { ret false ; } }
1728
- }
1729
- ty_param ( pid_a, k_a) {
1730
- alt b { ty_param( pid_b, k_b) { ret pid_a == pid_b && k_a == k_b; }
1731
- _ { ret false ; } }
1732
- }
1733
- ty_type. { alt b { ty_type. { ret true; } _ { ret false; } } }
1734
- ty_native ( a_id) {
1735
- alt b {
1736
- ty_native( b_id) {
1737
- ret a_id. crate == b_id. crate && a_id. node == b_id. node ;
1738
- }
1739
- _ { ret false ; }
1740
- }
1741
- }
1742
- ty_uniq ( t_a) {
1743
- alt b {
1744
- ty_uniq( t_b) { ret t_a == t_b; }
1745
- _ { ret false ; }
1746
- }
1747
- }
1748
- }
1749
- }
1750
-
1751
-
1752
1571
// An expensive type equality function. This function is private to this
1753
1572
// module.
1754
- //
1755
- // FIXME: Use structural comparison, but this loops forever and segfaults.
1756
1573
fn eq_raw_ty ( a : & @raw_t , b : & @raw_t ) -> bool {
1757
1574
// Check hashes (fast path).
1758
1575
@@ -1770,7 +1587,7 @@ fn eq_raw_ty(a: &@raw_t, b: &@raw_t) -> bool {
1770
1587
}
1771
1588
// Check structures.
1772
1589
1773
- ret equal_type_structures ( a. struct , b. struct ) ;
1590
+ ret a. struct == b. struct ;
1774
1591
}
1775
1592
1776
1593
0 commit comments