Mercurial > emacs
comparison src/data.c @ 1002:65f15f1961d8
* data.c [USG] (Frem): Call fmod, rather than drem. Rah.
* data.c (store_symval_forwarding): When storing through a
Lisp_Buffer_Objfwd, check if the slot requires a particular type,
and report an error if the types clash.
author | Jim Blandy <jimb@redhat.com> |
---|---|
date | Wed, 19 Aug 1992 06:19:22 +0000 |
parents | 62dd28940dc6 |
children | 7afcf7be0d30 |
comparison
equal
deleted
inserted
replaced
1001:c1ebe69206df | 1002:65f15f1961d8 |
---|---|
602 case Lisp_Objfwd: | 602 case Lisp_Objfwd: |
603 *XOBJFWD (valcontents) = newval; | 603 *XOBJFWD (valcontents) = newval; |
604 break; | 604 break; |
605 | 605 |
606 case Lisp_Buffer_Objfwd: | 606 case Lisp_Buffer_Objfwd: |
607 *(Lisp_Object *)(XUINT (valcontents) + (char *)current_buffer) = newval; | 607 { |
608 break; | 608 unsigned int offset = XUINT (valcontents); |
609 Lisp_Object type = | |
610 *(Lisp_Object *)(offset + (char *)&buffer_local_types); | |
611 | |
612 if (! NILP (type) && ! NILP (newval) | |
613 && XTYPE (newval) != XINT (type)) | |
614 buffer_slot_type_mismatch (valcontents, newval); | |
615 | |
616 *(Lisp_Object *)(XUINT (valcontents) + (char *)current_buffer) | |
617 = newval; | |
618 break; | |
619 } | |
609 | 620 |
610 default: | 621 default: |
611 valcontents = XSYMBOL (sym)->value; | 622 valcontents = XSYMBOL (sym)->value; |
612 if (XTYPE (valcontents) == Lisp_Buffer_Local_Value | 623 if (XTYPE (valcontents) == Lisp_Buffer_Local_Value |
613 || XTYPE (valcontents) == Lisp_Some_Buffer_Local_Value) | 624 || XTYPE (valcontents) == Lisp_Some_Buffer_Local_Value) |
1636 { | 1647 { |
1637 double f1, f2; | 1648 double f1, f2; |
1638 | 1649 |
1639 f1 = XTYPE (num1) == Lisp_Float ? XFLOAT (num1)->data : XINT (num1); | 1650 f1 = XTYPE (num1) == Lisp_Float ? XFLOAT (num1)->data : XINT (num1); |
1640 f2 = XTYPE (num2) == Lisp_Float ? XFLOAT (num2)->data : XINT (num2); | 1651 f2 = XTYPE (num2) == Lisp_Float ? XFLOAT (num2)->data : XINT (num2); |
1652 #ifdef USG | |
1653 f1 = fmod (f1, f2); | |
1654 #else | |
1641 f1 = drem (f1, f2); | 1655 f1 = drem (f1, f2); |
1656 #endif | |
1642 if (f1 < 0) | 1657 if (f1 < 0) |
1643 f1 += f2; | 1658 f1 += f2; |
1644 return (make_float (f1)); | 1659 return (make_float (f1)); |
1645 } | 1660 } |
1646 #else /* not LISP_FLOAT_TYPE */ | 1661 #else /* not LISP_FLOAT_TYPE */ |