295 checking for behaviors." |
295 checking for behaviors." |
296 |
296 |
297 %{ /* NOCONTEXT */ |
297 %{ /* NOCONTEXT */ |
298 /* this is defined as a primitive to get defines from stc.h */ |
298 /* this is defined as a primitive to get defines from stc.h */ |
299 |
299 |
300 RETURN ( _MKSMALLINT(BEHAVIOR_INSTS) ); |
300 RETURN ( __MKSMALLINT(BEHAVIOR_INSTS) ); |
301 %} |
301 %} |
302 |
302 |
303 "consistency check: |
303 "consistency check: |
304 all class-entries must be behaviors; |
304 all class-entries must be behaviors; |
305 all behaviors must be flagged so (in its class's flags) |
305 all behaviors must be flagged so (in its class's flags) |
1363 * the following ugly code is nothing more than a __new() followed |
1363 * the following ugly code is nothing more than a __new() followed |
1364 * by a nilling of the new instance. |
1364 * by a nilling of the new instance. |
1365 * Unrolled for a bit more speed since this is one of the central object |
1365 * Unrolled for a bit more speed since this is one of the central object |
1366 * allocation methods in the system |
1366 * allocation methods in the system |
1367 */ |
1367 */ |
1368 nInstVars = _intVal(_INST(instSize)); |
1368 nInstVars = __intVal(__INST(instSize)); |
1369 instsize = OHDR_SIZE + __OBJS2BYTES__(nInstVars); |
1369 instsize = OHDR_SIZE + __OBJS2BYTES__(nInstVars); |
1370 |
1370 |
1371 newobj = (OBJ) __newNextPtr; |
1371 newobj = (OBJ) __newNextPtr; |
1372 nextPtr = ((char *)newobj) + instsize; |
1372 nextPtr = ((char *)newobj) + instsize; |
1373 |
1373 |
1390 __newNextPtr = nextPtr; |
1390 __newNextPtr = nextPtr; |
1391 } |
1391 } |
1392 #endif |
1392 #endif |
1393 |
1393 |
1394 ok: |
1394 ok: |
1395 _InstPtr(newobj)->o_class = self; |
1395 __InstPtr(newobj)->o_class = self; |
1396 __qSTORE(newobj, self); |
1396 __qSTORE(newobj, self); |
1397 |
1397 |
1398 if (nInstVars) { |
1398 if (nInstVars) { |
1399 #if defined(memset4) && defined(FAST_OBJECT_MEMSET4) || defined(FAST_MEMSET4) |
1399 #if defined(memset4) && defined(FAST_OBJECT_MEMSET4) || defined(FAST_MEMSET4) |
1400 memset4(_InstPtr(newobj)->i_instvars, nil, nInstVars); |
1400 memset4(__InstPtr(newobj)->i_instvars, nil, nInstVars); |
1401 #else |
1401 #else |
1402 REGISTER OBJ *op; |
1402 REGISTER OBJ *op; |
1403 |
1403 |
1404 op = _InstPtr(newobj)->i_instvars; |
1404 op = __InstPtr(newobj)->i_instvars; |
1405 |
1405 |
1406 # if !defined(NEGATIVE_ADDRESSES) |
1406 # if !defined(NEGATIVE_ADDRESSES) |
1407 /* |
1407 /* |
1408 * knowing that nil is 0 |
1408 * knowing that nil is 0 |
1409 */ |
1409 */ |
1536 REGISTER OBJ *op; |
1536 REGISTER OBJ *op; |
1537 float *fp; |
1537 float *fp; |
1538 double *dp; |
1538 double *dp; |
1539 |
1539 |
1540 if (__isSmallInteger(anInteger)) { |
1540 if (__isSmallInteger(anInteger)) { |
1541 nindexedinstvars = _intVal(anInteger); |
1541 nindexedinstvars = __intVal(anInteger); |
1542 if (nindexedinstvars >= 0) { |
1542 if (nindexedinstvars >= 0) { |
1543 nInstVars = _intVal(_INST(instSize)); |
1543 nInstVars = __intVal(__INST(instSize)); |
1544 flags = _intVal(_INST(flags)) & ARRAYMASK; |
1544 flags = __intVal(__INST(flags)) & ARRAYMASK; |
1545 switch (flags) { |
1545 switch (flags) { |
1546 case BYTEARRAY: |
1546 case BYTEARRAY: |
1547 instsize = OHDR_SIZE + nindexedinstvars; |
1547 instsize = OHDR_SIZE + nindexedinstvars; |
1548 if (nInstVars == 0) { |
1548 if (nInstVars == 0) { |
1549 if (__CanDoQuickNew(instsize)) { |
1549 if (__CanDoQuickNew(instsize)) { |
1550 /* |
1550 /* |
1551 * the most common case |
1551 * the most common case |
1552 */ |
1552 */ |
1553 __qCheckedNew(newobj, instsize); |
1553 __qCheckedNew(newobj, instsize); |
1554 _InstPtr(newobj)->o_class = self; |
1554 __InstPtr(newobj)->o_class = self; |
1555 #if defined(memset4) && defined(FAST_ARRAY_MEMSET4) || defined(FAST_MEMSET4) |
1555 #if defined(memset4) && defined(FAST_ARRAY_MEMSET4) || defined(FAST_MEMSET4) |
1556 nInstVars = nindexedinstvars >> 2; |
1556 nInstVars = nindexedinstvars >> 2; |
1557 if (nindexedinstvars & 3) nInstVars++; |
1557 if (nindexedinstvars & 3) nInstVars++; |
1558 memset4(_InstPtr(newobj)->i_instvars, 0, nInstVars); |
1558 memset4(__InstPtr(newobj)->i_instvars, 0, nInstVars); |
1559 #else |
1559 #else |
1560 # if defined(FAST_ARRAY_MEMSET) && ! defined(NEGATIVE_ADDRESSES) |
1560 # if defined(FAST_ARRAY_MEMSET) && ! defined(NEGATIVE_ADDRESSES) |
1561 memset(_InstPtr(newobj)->i_instvars, 0, nindexedinstvars); |
1561 memset(__InstPtr(newobj)->i_instvars, 0, nindexedinstvars); |
1562 # else |
1562 # else |
1563 cp = (char *)_InstPtr(newobj)->i_instvars; |
1563 cp = (char *)__InstPtr(newobj)->i_instvars; |
1564 while (nindexedinstvars >= sizeof(long)) { |
1564 while (nindexedinstvars >= sizeof(long)) { |
1565 *(long *)cp = 0; |
1565 *(long *)cp = 0; |
1566 cp += sizeof(long); |
1566 cp += sizeof(long); |
1567 nindexedinstvars -= sizeof(long); |
1567 nindexedinstvars -= sizeof(long); |
1568 } |
1568 } |
1579 __qNew(newobj, instsize, SENDER); |
1579 __qNew(newobj, instsize, SENDER); |
1580 __UNPROTECT_CONTEXT__ |
1580 __UNPROTECT_CONTEXT__ |
1581 if (newobj == nil) { |
1581 if (newobj == nil) { |
1582 break; |
1582 break; |
1583 } |
1583 } |
1584 _InstPtr(newobj)->o_class = self; |
1584 __InstPtr(newobj)->o_class = self; |
1585 __qSTORE(newobj, self); |
1585 __qSTORE(newobj, self); |
1586 |
1586 |
1587 #if defined(memset4) && defined(FAST_ARRAY_MEMSET4) || defined(FAST_MEMSET4) |
1587 #if defined(memset4) && defined(FAST_ARRAY_MEMSET4) || defined(FAST_MEMSET4) |
1588 nInstVars = (instsize-OHDR_SIZE) >> 2; |
1588 nInstVars = (instsize-OHDR_SIZE) >> 2; |
1589 if (instsize & 3) nInstVars++; |
1589 if (instsize & 3) nInstVars++; |
1590 memset4(_InstPtr(newobj)->i_instvars, 0, nInstVars); |
1590 memset4(__InstPtr(newobj)->i_instvars, 0, nInstVars); |
1591 #else |
1591 #else |
1592 # if defined(FAST_ARRAY_MEMSET) && ! defined(NEGATIVE_ADDRESSES) |
1592 # if defined(FAST_ARRAY_MEMSET) && ! defined(NEGATIVE_ADDRESSES) |
1593 /* |
1593 /* |
1594 * knowing that nil is 0 |
1594 * knowing that nil is 0 |
1595 */ |
1595 */ |
1596 memset(_InstPtr(newobj)->i_instvars, 0, instsize-OHDR_SIZE); |
1596 memset(__InstPtr(newobj)->i_instvars, 0, instsize-OHDR_SIZE); |
1597 # else |
1597 # else |
1598 op = _InstPtr(newobj)->i_instvars; |
1598 op = __InstPtr(newobj)->i_instvars; |
1599 while (nInstVars--) |
1599 while (nInstVars--) |
1600 *op++ = nil; |
1600 *op++ = nil; |
1601 cp = (char *)op; |
1601 cp = (char *)op; |
1602 while (nindexedinstvars >= sizeof(long)) { |
1602 while (nindexedinstvars >= sizeof(long)) { |
1603 *(long *)cp = 0; |
1603 *(long *)cp = 0; |
1619 __qNew(newobj, instsize, SENDER); |
1619 __qNew(newobj, instsize, SENDER); |
1620 __UNPROTECT_CONTEXT__ |
1620 __UNPROTECT_CONTEXT__ |
1621 if (newobj == nil) { |
1621 if (newobj == nil) { |
1622 break; |
1622 break; |
1623 } |
1623 } |
1624 _InstPtr(newobj)->o_class = self; |
1624 __InstPtr(newobj)->o_class = self; |
1625 __qSTORE(newobj, self); |
1625 __qSTORE(newobj, self); |
1626 |
1626 |
1627 #if defined(FAST_ARRAY_MEMSET) && ! defined(NEGATIVE_ADDRESSES) |
1627 #if defined(FAST_ARRAY_MEMSET) && ! defined(NEGATIVE_ADDRESSES) |
1628 /* |
1628 /* |
1629 * knowing that nil is 0 |
1629 * knowing that nil is 0 |
1630 */ |
1630 */ |
1631 memset(_InstPtr(newobj)->i_instvars, 0, instsize - OHDR_SIZE); |
1631 memset(__InstPtr(newobj)->i_instvars, 0, instsize - OHDR_SIZE); |
1632 #else |
1632 #else |
1633 op = _InstPtr(newobj)->i_instvars; |
1633 op = __InstPtr(newobj)->i_instvars; |
1634 while (nInstVars--) |
1634 while (nInstVars--) |
1635 *op++ = nil; |
1635 *op++ = nil; |
1636 sp = (short *)op; |
1636 sp = (short *)op; |
1637 while (nindexedinstvars--) |
1637 while (nindexedinstvars--) |
1638 *sp++ = 0; |
1638 *sp++ = 0; |
1648 __qAlignedNew(newobj, instsize, SENDER); |
1648 __qAlignedNew(newobj, instsize, SENDER); |
1649 __UNPROTECT_CONTEXT__ |
1649 __UNPROTECT_CONTEXT__ |
1650 if (newobj == nil) { |
1650 if (newobj == nil) { |
1651 break; |
1651 break; |
1652 } |
1652 } |
1653 _InstPtr(newobj)->o_class = self; |
1653 __InstPtr(newobj)->o_class = self; |
1654 __qSTORE(newobj, self); |
1654 __qSTORE(newobj, self); |
1655 |
1655 |
1656 #if defined(memset4) && defined(FAST_ARRAY_MEMSET4) || defined(FAST_MEMSET4) |
1656 #if defined(memset4) && defined(FAST_ARRAY_MEMSET4) || defined(FAST_MEMSET4) |
1657 /* |
1657 /* |
1658 * knowing that nil is 0 |
1658 * knowing that nil is 0 |
1659 */ |
1659 */ |
1660 memset4(_InstPtr(newobj)->i_instvars, 0, nInstVars + nindexedinstvars); |
1660 memset4(__InstPtr(newobj)->i_instvars, 0, nInstVars + nindexedinstvars); |
1661 #else |
1661 #else |
1662 # if defined(FAST_ARRAY_MEMSET) && ! defined(NEGATIVE_ADDRESSES) |
1662 # if defined(FAST_ARRAY_MEMSET) && ! defined(NEGATIVE_ADDRESSES) |
1663 /* |
1663 /* |
1664 * knowing that nil is 0 |
1664 * knowing that nil is 0 |
1665 */ |
1665 */ |
1666 memset(_InstPtr(newobj)->i_instvars, 0, instsize - OHDR_SIZE); |
1666 memset(__InstPtr(newobj)->i_instvars, 0, instsize - OHDR_SIZE); |
1667 # else |
1667 # else |
1668 op = _InstPtr(newobj)->i_instvars; |
1668 op = __InstPtr(newobj)->i_instvars; |
1669 while (nInstVars--) |
1669 while (nInstVars--) |
1670 *op++ = nil; |
1670 *op++ = nil; |
1671 lp = (long *)op; |
1671 lp = (long *)op; |
1672 while (nindexedinstvars--) |
1672 while (nindexedinstvars--) |
1673 *lp++ = 0; |
1673 *lp++ = 0; |
1685 __qNew(newobj, instsize, SENDER); |
1685 __qNew(newobj, instsize, SENDER); |
1686 __UNPROTECT_CONTEXT__ |
1686 __UNPROTECT_CONTEXT__ |
1687 if (newobj == nil) { |
1687 if (newobj == nil) { |
1688 break; |
1688 break; |
1689 } |
1689 } |
1690 _InstPtr(newobj)->o_class = self; |
1690 __InstPtr(newobj)->o_class = self; |
1691 __qSTORE(newobj, self); |
1691 __qSTORE(newobj, self); |
1692 |
1692 |
1693 op = _InstPtr(newobj)->i_instvars; |
1693 op = __InstPtr(newobj)->i_instvars; |
1694 # if defined(mips) /* knowin that float 0.0 is all-zeros */ |
1694 # if defined(mips) /* knowin that float 0.0 is all-zeros */ |
1695 memset(_InstPtr(newobj)->i_instvars, 0, instsize - OHDR_SIZE); |
1695 memset(__InstPtr(newobj)->i_instvars, 0, instsize - OHDR_SIZE); |
1696 # else |
1696 # else |
1697 while (nInstVars--) |
1697 while (nInstVars--) |
1698 *op++ = nil; |
1698 *op++ = nil; |
1699 fp = (float *)op; |
1699 fp = (float *)op; |
1700 while (nindexedinstvars--) |
1700 while (nindexedinstvars--) |
1712 __qAlignedNew(newobj, instsize, SENDER); |
1712 __qAlignedNew(newobj, instsize, SENDER); |
1713 __UNPROTECT_CONTEXT__ |
1713 __UNPROTECT_CONTEXT__ |
1714 if (newobj == nil) { |
1714 if (newobj == nil) { |
1715 break; |
1715 break; |
1716 } |
1716 } |
1717 _InstPtr(newobj)->o_class = self; |
1717 __InstPtr(newobj)->o_class = self; |
1718 __qSTORE(newobj, self); |
1718 __qSTORE(newobj, self); |
1719 |
1719 |
1720 op = _InstPtr(newobj)->i_instvars; |
1720 op = __InstPtr(newobj)->i_instvars; |
1721 while (nInstVars--) |
1721 while (nInstVars--) |
1722 *op++ = nil; |
1722 *op++ = nil; |
1723 #ifdef NEED_DOUBLE_ALIGN |
1723 #ifdef NEED_DOUBLE_ALIGN |
1724 /* |
1724 /* |
1725 * care for double alignment |
1725 * care for double alignment |
1742 __qAlignedNew(newobj, instsize, SENDER); |
1742 __qAlignedNew(newobj, instsize, SENDER); |
1743 __UNPROTECT_CONTEXT__ |
1743 __UNPROTECT_CONTEXT__ |
1744 if (newobj == nil) { |
1744 if (newobj == nil) { |
1745 break; |
1745 break; |
1746 } |
1746 } |
1747 _InstPtr(newobj)->o_class = self; |
1747 __InstPtr(newobj)->o_class = self; |
1748 __qSTORE(newobj, self); |
1748 __qSTORE(newobj, self); |
1749 |
1749 |
1750 #if defined(memset4) && defined(FAST_ARRAY_MEMSET4) || defined(FAST_MEMSET4) |
1750 #if defined(memset4) && defined(FAST_ARRAY_MEMSET4) || defined(FAST_MEMSET4) |
1751 memset4(_InstPtr(newobj)->i_instvars, nil, nInstVars); |
1751 memset4(__InstPtr(newobj)->i_instvars, nil, nInstVars); |
1752 #else |
1752 #else |
1753 # if !defined(NEGATIVE_ADDRESSES) |
1753 # if !defined(NEGATIVE_ADDRESSES) |
1754 /* |
1754 /* |
1755 * knowing that nil is 0 |
1755 * knowing that nil is 0 |
1756 */ |
1756 */ |
1763 #ifdef sparc |
1763 #ifdef sparc |
1764 # define FAST_ARRAY_MEMSET_DOUBLES_UNROLLED |
1764 # define FAST_ARRAY_MEMSET_DOUBLES_UNROLLED |
1765 #endif |
1765 #endif |
1766 |
1766 |
1767 # if defined(FAST_ARRAY_MEMSET_DOUBLES_UNROLLED) |
1767 # if defined(FAST_ARRAY_MEMSET_DOUBLES_UNROLLED) |
1768 op = _InstPtr(newobj)->i_instvars; |
1768 op = __InstPtr(newobj)->i_instvars; |
1769 if (nInstVars > 8) { |
1769 if (nInstVars > 8) { |
1770 *op++ = nil; /* for alignment */ |
1770 *op++ = nil; /* for alignment */ |
1771 nInstVars--; |
1771 nInstVars--; |
1772 while (nInstVars >= 8) { |
1772 while (nInstVars >= 8) { |
1773 *(double *)op = 0.0; |
1773 *(double *)op = 0.0; |
1782 *op++ = 0; |
1782 *op++ = 0; |
1783 nInstVars--; |
1783 nInstVars--; |
1784 } |
1784 } |
1785 # else |
1785 # else |
1786 # if defined(FAST_ARRAY_MEMSET_LONGLONG_UNROLLED) |
1786 # if defined(FAST_ARRAY_MEMSET_LONGLONG_UNROLLED) |
1787 op = _InstPtr(newobj)->i_instvars; |
1787 op = __InstPtr(newobj)->i_instvars; |
1788 if (nInstVars > 8) { |
1788 if (nInstVars > 8) { |
1789 *op++ = nil; /* for alignment */ |
1789 *op++ = nil; /* for alignment */ |
1790 nInstVars--; |
1790 nInstVars--; |
1791 while (nInstVars >= 8) { |
1791 while (nInstVars >= 8) { |
1792 *(long long *)op = 0; |
1792 *(long long *)op = 0; |
1831 __qAlignedNew(newobj, instsize, SENDER); |
1831 __qAlignedNew(newobj, instsize, SENDER); |
1832 __UNPROTECT_CONTEXT__ |
1832 __UNPROTECT_CONTEXT__ |
1833 if (newobj == nil) { |
1833 if (newobj == nil) { |
1834 break; |
1834 break; |
1835 } |
1835 } |
1836 _InstPtr(newobj)->o_class = self; |
1836 __InstPtr(newobj)->o_class = self; |
1837 __qSTORE(newobj, self); |
1837 __qSTORE(newobj, self); |
1838 |
1838 |
1839 if (nInstVars) { |
1839 if (nInstVars) { |
1840 #if defined(memset4) && defined(FAST_OBJECT_MEMSET4) || defined(FAST_MEMSET4) |
1840 #if defined(memset4) && defined(FAST_OBJECT_MEMSET4) || defined(FAST_MEMSET4) |
1841 memset4(_InstPtr(newobj)->i_instvars, nil, nInstVars); |
1841 memset4(__InstPtr(newobj)->i_instvars, nil, nInstVars); |
1842 #else |
1842 #else |
1843 # if defined(FAST_MEMSET) && ! defined(NEGATIVE_ADDRESSES) |
1843 # if defined(FAST_MEMSET) && ! defined(NEGATIVE_ADDRESSES) |
1844 /* |
1844 /* |
1845 * knowing that nil is 0 |
1845 * knowing that nil is 0 |
1846 */ |
1846 */ |
1847 memset(_InstPtr(newobj)->i_instvars, 0, instsize - OHDR_SIZE); |
1847 memset(__InstPtr(newobj)->i_instvars, 0, instsize - OHDR_SIZE); |
1848 # else |
1848 # else |
1849 op = _InstPtr(newobj)->i_instvars; |
1849 op = __InstPtr(newobj)->i_instvars; |
1850 do { |
1850 do { |
1851 *op++ = nil; |
1851 *op++ = nil; |
1852 } while (--nInstVars); |
1852 } while (--nInstVars); |
1853 # endif |
1853 # endif |
1854 #endif |
1854 #endif |
2601 "this could also be defined as: |
2601 "this could also be defined as: |
2602 ^ (flags bitAnd:(Behavior maskIndexType)) == Behavior flagBytes |
2602 ^ (flags bitAnd:(Behavior maskIndexType)) == Behavior flagBytes |
2603 " |
2603 " |
2604 %{ /* NOCONTEXT */ |
2604 %{ /* NOCONTEXT */ |
2605 |
2605 |
2606 RETURN ( (((INT)(_INST(flags)) & __MASKSMALLINT(ARRAYMASK)) == __MASKSMALLINT(BYTEARRAY)) ? true : false ); |
2606 RETURN ( (((INT)(__INST(flags)) & __MASKSMALLINT(ARRAYMASK)) == __MASKSMALLINT(BYTEARRAY)) ? true : false ); |
2607 %} |
2607 %} |
2608 ! |
2608 ! |
2609 |
2609 |
2610 isDoubles |
2610 isDoubles |
2611 "return true, if instances have indexed double instance variables" |
2611 "return true, if instances have indexed double instance variables" |
2613 "this could also be defined as: |
2613 "this could also be defined as: |
2614 ^ (flags bitAnd:(Behavior maskIndexType)) == Behavior flagDoubles |
2614 ^ (flags bitAnd:(Behavior maskIndexType)) == Behavior flagDoubles |
2615 " |
2615 " |
2616 %{ /* NOCONTEXT */ |
2616 %{ /* NOCONTEXT */ |
2617 |
2617 |
2618 RETURN ( (((INT)(_INST(flags)) & __MASKSMALLINT(ARRAYMASK)) == __MASKSMALLINT(DOUBLEARRAY)) ? true : false ); |
2618 RETURN ( (((INT)(__INST(flags)) & __MASKSMALLINT(ARRAYMASK)) == __MASKSMALLINT(DOUBLEARRAY)) ? true : false ); |
2619 %} |
2619 %} |
2620 ! |
2620 ! |
2621 |
2621 |
2622 isFixed |
2622 isFixed |
2623 "return true, if instances do not have indexed instance variables" |
2623 "return true, if instances do not have indexed instance variables" |
2638 "this could also be defined as: |
2638 "this could also be defined as: |
2639 ^ (flags bitAnd:(Behavior maskIndexType)) == Behavior flagFloats |
2639 ^ (flags bitAnd:(Behavior maskIndexType)) == Behavior flagFloats |
2640 " |
2640 " |
2641 %{ /* NOCONTEXT */ |
2641 %{ /* NOCONTEXT */ |
2642 |
2642 |
2643 RETURN ( (((INT)(_INST(flags)) & __MASKSMALLINT(ARRAYMASK)) == __MASKSMALLINT(FLOATARRAY)) ? true : false ); |
2643 RETURN ( (((INT)(__INST(flags)) & __MASKSMALLINT(ARRAYMASK)) == __MASKSMALLINT(FLOATARRAY)) ? true : false ); |
2644 %} |
2644 %} |
2645 ! |
2645 ! |
2646 |
2646 |
2647 isFloatsOrDoubles |
2647 isFloatsOrDoubles |
2648 "return true, if instances have indexed float or double instance variables" |
2648 "return true, if instances have indexed float or double instance variables" |
2649 |
2649 |
2650 %{ /* NOCONTEXT */ |
2650 %{ /* NOCONTEXT */ |
2651 |
2651 |
2652 int what; |
2652 int what; |
2653 |
2653 |
2654 what = (INT)(_INST(flags)) & __MASKSMALLINT(ARRAYMASK); |
2654 what = (INT)(__INST(flags)) & __MASKSMALLINT(ARRAYMASK); |
2655 RETURN (( (what == __MASKSMALLINT(FLOATARRAY)) |
2655 RETURN (( (what == __MASKSMALLINT(FLOATARRAY)) |
2656 || (what == __MASKSMALLINT(DOUBLEARRAY))) ? true : false ); |
2656 || (what == __MASKSMALLINT(DOUBLEARRAY))) ? true : false ); |
2657 %} |
2657 %} |
2658 " |
2658 " |
2659 (Object new) class isFloatsOrDoubles |
2659 (Object new) class isFloatsOrDoubles |
2671 "this could also be defined as: |
2671 "this could also be defined as: |
2672 ^ (flags bitAnd:(Behavior maskIndexType)) == Behavior flagLongs |
2672 ^ (flags bitAnd:(Behavior maskIndexType)) == Behavior flagLongs |
2673 " |
2673 " |
2674 %{ /* NOCONTEXT */ |
2674 %{ /* NOCONTEXT */ |
2675 |
2675 |
2676 RETURN ( (((INT)(_INST(flags)) & __MASKSMALLINT(ARRAYMASK)) == __MASKSMALLINT(LONGARRAY)) ? true : false ); |
2676 RETURN ( (((INT)(__INST(flags)) & __MASKSMALLINT(ARRAYMASK)) == __MASKSMALLINT(LONGARRAY)) ? true : false ); |
2677 %} |
2677 %} |
2678 ! |
2678 ! |
2679 |
2679 |
2680 isPointers |
2680 isPointers |
2681 "return true, if instances have pointer instance variables |
2681 "return true, if instances have pointer instance variables |
2752 "this could also be defined as: |
2752 "this could also be defined as: |
2753 ^ (flags bitAnd:(Behavior maskIndexType)) == Behavior flagWords |
2753 ^ (flags bitAnd:(Behavior maskIndexType)) == Behavior flagWords |
2754 " |
2754 " |
2755 %{ /* NOCONTEXT */ |
2755 %{ /* NOCONTEXT */ |
2756 |
2756 |
2757 RETURN ( (((INT)(_INST(flags)) & __MASKSMALLINT(ARRAYMASK)) == __MASKSMALLINT(WORDARRAY)) ? true : false ); |
2757 RETURN ( (((INT)(__INST(flags)) & __MASKSMALLINT(ARRAYMASK)) == __MASKSMALLINT(WORDARRAY)) ? true : false ); |
2758 %} |
2758 %} |
2759 ! |
2759 ! |
2760 |
2760 |
2761 lookupMethodFor:aSelector |
2761 lookupMethodFor:aSelector |
2762 "return the method, which would be executed if aSelector was sent to |
2762 "return the method, which would be executed if aSelector was sent to |
2843 |
2843 |
2844 nInstvars := self instSize. |
2844 nInstvars := self instSize. |
2845 %{ |
2845 %{ |
2846 int nBytes; |
2846 int nBytes; |
2847 |
2847 |
2848 nBytes = _intVal(nInstvars) * sizeof(OBJ) + OHDR_SIZE; |
2848 nBytes = __intVal(nInstvars) * sizeof(OBJ) + OHDR_SIZE; |
2849 if (__isSmallInteger(n)) { |
2849 if (__isSmallInteger(n)) { |
2850 int nIndex; |
2850 int nIndex; |
2851 |
2851 |
2852 nIndex = _intVal(n); |
2852 nIndex = __intVal(n); |
2853 switch (_intVal(_INST(flags)) & ARRAYMASK) { |
2853 switch (__intVal(__INST(flags)) & ARRAYMASK) { |
2854 case BYTEARRAY: |
2854 case BYTEARRAY: |
2855 nBytes += nIndex; |
2855 nBytes += nIndex; |
2856 if (nBytes & (ALIGN - 1)) { |
2856 if (nBytes & (ALIGN - 1)) { |
2857 nBytes = (nBytes & ~(ALIGN - 1)) + ALIGN; |
2857 nBytes = (nBytes & ~(ALIGN - 1)) + ALIGN; |
2858 } |
2858 } |