aboutsummaryrefslogtreecommitdiffstats
path: root/src/data.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/data.c')
-rw-r--r--src/data.c23
1 files changed, 12 insertions, 11 deletions
diff --git a/src/data.c b/src/data.c
index 476d28eadbc..c1699aeae73 100644
--- a/src/data.c
+++ b/src/data.c
@@ -1122,20 +1122,21 @@ store_symval_forwarding (lispfwd valcontents, Lisp_Object newval,
1122 int offset = XBUFFER_OBJFWD (valcontents)->offset; 1122 int offset = XBUFFER_OBJFWD (valcontents)->offset;
1123 Lisp_Object predicate = XBUFFER_OBJFWD (valcontents)->predicate; 1123 Lisp_Object predicate = XBUFFER_OBJFWD (valcontents)->predicate;
1124 1124
1125 if (!NILP (newval)) 1125 if (!NILP (newval) && !NILP (predicate))
1126 { 1126 {
1127 if (SYMBOLP (predicate)) 1127 eassert (SYMBOLP (predicate));
1128 Lisp_Object choiceprop = Fget (predicate, Qchoice);
1129 if (!NILP (choiceprop))
1128 { 1130 {
1129 Lisp_Object prop; 1131 if (NILP (Fmemq (newval, choiceprop)))
1130 1132 wrong_choice (choiceprop, newval);
1131 if ((prop = Fget (predicate, Qchoice), !NILP (prop))) 1133 }
1132 { 1134 else
1133 if (NILP (Fmemq (newval, prop))) 1135 {
1134 wrong_choice (prop, newval); 1136 Lisp_Object rangeprop = Fget (predicate, Qrange);
1135 } 1137 if (CONSP (rangeprop))
1136 else if ((prop = Fget (predicate, Qrange), !NILP (prop)))
1137 { 1138 {
1138 Lisp_Object min = XCAR (prop), max = XCDR (prop); 1139 Lisp_Object min = XCAR (rangeprop), max = XCDR (rangeprop);
1139 if (! NUMBERP (newval) 1140 if (! NUMBERP (newval)
1140 || NILP (CALLN (Fleq, min, newval, max))) 1141 || NILP (CALLN (Fleq, min, newval, max)))
1141 wrong_range (min, max, newval); 1142 wrong_range (min, max, newval);