Skip to content

Commit 6e5af89

Browse files
committed
Get rid of equal_type_structures. Closes #514.
1 parent ddc2076 commit 6e5af89

File tree

1 file changed

+1
-184
lines changed

1 file changed

+1
-184
lines changed

src/comp/middle/ty.rs

Lines changed: 1 addition & 184 deletions
Original file line numberDiff line numberDiff line change
@@ -1568,191 +1568,8 @@ fn constrs_eq(cs: &[@constr], ds: &[@constr]) -> bool {
15681568
ret true;
15691569
}
15701570

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 = 0u;
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 += 1u;
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 = 0u;
1618-
while i < len {
1619-
if !eq_ty(tys_a.(i), tys_b.(i)) { ret false; }
1620-
i += 1u;
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 = 0u;
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 += 1u;
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 = 0u;
1662-
while i < len {
1663-
if !eq_ty(ts_a.(i), ts_b.(i)) { ret false; }
1664-
i += 1u;
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 = 0u;
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 += 1u;
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 = 0u;
1717-
for tp_a: t in tps_a {
1718-
if !eq_ty(tp_a, tps_b.(i)) { ret false; }
1719-
i += 1u;
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-
17521571
// An expensive type equality function. This function is private to this
17531572
// module.
1754-
//
1755-
// FIXME: Use structural comparison, but this loops forever and segfaults.
17561573
fn eq_raw_ty(a: &@raw_t, b: &@raw_t) -> bool {
17571574
// Check hashes (fast path).
17581575

@@ -1770,7 +1587,7 @@ fn eq_raw_ty(a: &@raw_t, b: &@raw_t) -> bool {
17701587
}
17711588
// Check structures.
17721589

1773-
ret equal_type_structures(a.struct, b.struct);
1590+
ret a.struct == b.struct;
17741591
}
17751592

17761593

0 commit comments

Comments
 (0)