562 if (__isBlockLike(aBlock) |
562 if (__isBlockLike(aBlock) |
563 && ((codeVal = __BlockInstPtr(aBlock)->b_code) != (OBJFUNC)nil) |
563 && ((codeVal = __BlockInstPtr(aBlock)->b_code) != (OBJFUNC)nil) |
564 && (__BlockInstPtr(aBlock)->b_nargs == __MKSMALLINT(1))) { |
564 && (__BlockInstPtr(aBlock)->b_nargs == __MKSMALLINT(1))) { |
565 #ifdef NEW_BLOCK_CALL |
565 #ifdef NEW_BLOCK_CALL |
566 for (; index < nIndex; index++) { |
566 for (; index < nIndex; index++) { |
567 if (InterruptPending != nil) __interruptL(CONARG); |
|
568 |
|
569 element = __InstPtr(self)->i_instvars[index]; |
567 element = __InstPtr(self)->i_instvars[index]; |
570 if (element != nil) { |
568 if (element != nil) { |
|
569 if (InterruptPending != nil) { |
|
570 __interruptL(CONARG); |
|
571 /* refetch; who knows what is done in the interrupt ... */ |
|
572 element = __InstPtr(self)->i_instvars[index]; |
|
573 } |
571 element = __WEAK_READ__(self, element); |
574 element = __WEAK_READ__(self, element); |
572 if (element != nil) { |
575 if (element != nil) { |
573 (*codeVal)(aBlock, element); |
576 (*codeVal)(aBlock, element); |
574 } |
577 } |
575 } |
578 } |
580 if ((rHome == nil) || (__qSpace(rHome) >= STACKSPACE)) { |
583 if ((rHome == nil) || (__qSpace(rHome) >= STACKSPACE)) { |
581 /* |
584 /* |
582 * home will not move - keep in in a register |
585 * home will not move - keep in in a register |
583 */ |
586 */ |
584 for (; index < nIndex; index++) { |
587 for (; index < nIndex; index++) { |
585 if (InterruptPending != nil) __interruptL(CONARG); |
|
586 |
|
587 element = __InstPtr(self)->i_instvars[index]; |
588 element = __InstPtr(self)->i_instvars[index]; |
588 if (element != nil) { |
589 if (element != nil) { |
|
590 if (InterruptPending != nil) { |
|
591 __interruptL(CONARG); |
|
592 /* refetch; who knows what is done in the interrupt ... */ |
|
593 element = __InstPtr(self)->i_instvars[index]; |
|
594 } |
589 element = __WEAK_READ__(self, element); |
595 element = __WEAK_READ__(self, element); |
590 if (element != nil) { |
596 if (element != nil) { |
591 (*codeVal)(rHome, element); |
597 (*codeVal)(rHome, element); |
592 } |
598 } |
593 } |
599 } |
594 } |
600 } |
595 } else { |
601 } else { |
596 for (; index < nIndex; index++) { |
602 for (; index < nIndex; index++) { |
597 if (InterruptPending != nil) __interruptL(@line CONARG); |
|
598 |
|
599 element = __InstPtr(self)->i_instvars[index]; |
603 element = __InstPtr(self)->i_instvars[index]; |
600 if (element != nil) { |
604 if (element != nil) { |
|
605 if (InterruptPending != nil) { |
|
606 __interruptL(@line CONARG); |
|
607 /* refetch; who knows what is done in the interrupt ... */ |
|
608 element = __InstPtr(self)->i_instvars[index]; |
|
609 } |
601 element = __WEAK_READ__(self, element); |
610 element = __WEAK_READ__(self, element); |
602 if (element != nil) { |
611 if (element != nil) { |
603 (*codeVal)(home, element); |
612 (*codeVal)(home, element); |
604 } |
613 } |
605 } |
614 } |
606 } |
615 } |
607 } |
616 } |
608 #endif |
617 #endif |
609 } else { |
618 } else { |
610 for (; index < nIndex; index++) { |
619 for (; index < nIndex; index++) { |
611 if (InterruptPending != nil) __interruptL(@line CONARG); |
|
612 |
|
613 element = __InstPtr(self)->i_instvars[index]; |
620 element = __InstPtr(self)->i_instvars[index]; |
614 if (element != nil) { |
621 if (element != nil) { |
|
622 if (InterruptPending != nil) { |
|
623 __interruptL(@line CONARG); |
|
624 /* refetch; who knows what is done in the interrupt ... */ |
|
625 element = __InstPtr(self)->i_instvars[index]; |
|
626 } |
615 element = __WEAK_READ__(self, element); |
627 element = __WEAK_READ__(self, element); |
616 if (element != nil) { |
628 if (element != nil) { |
617 (*val.ilc_func)(aBlock, |
629 (*val.ilc_func)(aBlock, |
618 @symbol(value:), |
630 @symbol(value:), |
619 nil, &val, |
631 nil, &val, |