aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJim Blandy1992-08-19 06:19:22 +0000
committerJim Blandy1992-08-19 06:19:22 +0000
commitbc540f9f00ae5eb6392b937d3d6cd22298aa9bd9 (patch)
treef62dac2897a52fe85120f7c34ede5dc7440e4a12 /src
parent0fa3ba92d87d3825d75109ea2b7f2bb2bab18d74 (diff)
downloademacs-bc540f9f00ae5eb6392b937d3d6cd22298aa9bd9.tar.gz
emacs-bc540f9f00ae5eb6392b937d3d6cd22298aa9bd9.zip
* 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.
Diffstat (limited to 'src')
-rw-r--r--src/data.c19
1 files changed, 17 insertions, 2 deletions
diff --git a/src/data.c b/src/data.c
index f963a323d7d..9b45fc61c30 100644
--- a/src/data.c
+++ b/src/data.c
@@ -604,8 +604,19 @@ store_symval_forwarding (sym, 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;
@@ -1638,7 +1649,11 @@ Both must be numbers or markers.")
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));