diff options
Diffstat (limited to 'src/data.c')
| -rw-r--r-- | src/data.c | 46 |
1 files changed, 23 insertions, 23 deletions
diff --git a/src/data.c b/src/data.c index 7928a1dc41d..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); |
| @@ -1301,15 +1302,13 @@ set_internal (Lisp_Object symbol, Lisp_Object newval, Lisp_Object where, | |||
| 1301 | enum Set_Internal_Bind bindflag) | 1302 | enum Set_Internal_Bind bindflag) |
| 1302 | { | 1303 | { |
| 1303 | bool voide = EQ (newval, Qunbound); | 1304 | bool voide = EQ (newval, Qunbound); |
| 1304 | struct Lisp_Symbol *sym; | ||
| 1305 | Lisp_Object tem1; | ||
| 1306 | 1305 | ||
| 1307 | /* If restoring in a dead buffer, do nothing. */ | 1306 | /* If restoring in a dead buffer, do nothing. */ |
| 1308 | /* if (BUFFERP (where) && NILP (XBUFFER (where)->name)) | 1307 | /* if (BUFFERP (where) && NILP (XBUFFER (where)->name)) |
| 1309 | return; */ | 1308 | return; */ |
| 1310 | 1309 | ||
| 1311 | CHECK_SYMBOL (symbol); | 1310 | CHECK_SYMBOL (symbol); |
| 1312 | sym = XSYMBOL (symbol); | 1311 | struct Lisp_Symbol *sym = XSYMBOL (symbol); |
| 1313 | switch (sym->u.s.trapped_write) | 1312 | switch (sym->u.s.trapped_write) |
| 1314 | { | 1313 | { |
| 1315 | case SYMBOL_NOWRITE: | 1314 | case SYMBOL_NOWRITE: |
| @@ -1328,9 +1327,10 @@ set_internal (Lisp_Object symbol, Lisp_Object newval, Lisp_Object where, | |||
| 1328 | bindflag == SET_INTERNAL_UNBIND? Qunlet : | 1327 | bindflag == SET_INTERNAL_UNBIND? Qunlet : |
| 1329 | voide? Qmakunbound : Qset), | 1328 | voide? Qmakunbound : Qset), |
| 1330 | where); | 1329 | where); |
| 1331 | /* FALLTHROUGH! */ | 1330 | break; |
| 1331 | |||
| 1332 | case SYMBOL_UNTRAPPED_WRITE: | 1332 | case SYMBOL_UNTRAPPED_WRITE: |
| 1333 | break; | 1333 | break; |
| 1334 | 1334 | ||
| 1335 | default: emacs_abort (); | 1335 | default: emacs_abort (); |
| 1336 | } | 1336 | } |
| @@ -1363,8 +1363,9 @@ set_internal (Lisp_Object symbol, Lisp_Object newval, Lisp_Object where, | |||
| 1363 | 1363 | ||
| 1364 | /* Find the new binding. */ | 1364 | /* Find the new binding. */ |
| 1365 | XSETSYMBOL (symbol, sym); /* May have changed via aliasing. */ | 1365 | XSETSYMBOL (symbol, sym); /* May have changed via aliasing. */ |
| 1366 | tem1 = assq_no_quit (symbol, | 1366 | Lisp_Object tem1 |
| 1367 | BVAR (XBUFFER (where), local_var_alist)); | 1367 | = assq_no_quit (symbol, |
| 1368 | BVAR (XBUFFER (where), local_var_alist)); | ||
| 1368 | set_blv_where (blv, where); | 1369 | set_blv_where (blv, where); |
| 1369 | blv->found = true; | 1370 | blv->found = true; |
| 1370 | 1371 | ||
| @@ -1649,10 +1650,8 @@ void | |||
| 1649 | set_default_internal (Lisp_Object symbol, Lisp_Object value, | 1650 | set_default_internal (Lisp_Object symbol, Lisp_Object value, |
| 1650 | enum Set_Internal_Bind bindflag) | 1651 | enum Set_Internal_Bind bindflag) |
| 1651 | { | 1652 | { |
| 1652 | struct Lisp_Symbol *sym; | ||
| 1653 | |||
| 1654 | CHECK_SYMBOL (symbol); | 1653 | CHECK_SYMBOL (symbol); |
| 1655 | sym = XSYMBOL (symbol); | 1654 | struct Lisp_Symbol *sym = XSYMBOL (symbol); |
| 1656 | switch (sym->u.s.trapped_write) | 1655 | switch (sym->u.s.trapped_write) |
| 1657 | { | 1656 | { |
| 1658 | case SYMBOL_NOWRITE: | 1657 | case SYMBOL_NOWRITE: |
| @@ -1669,9 +1668,10 @@ set_default_internal (Lisp_Object symbol, Lisp_Object value, | |||
| 1669 | /* Setting due to thread switching doesn't count. */ | 1668 | /* Setting due to thread switching doesn't count. */ |
| 1670 | && bindflag != SET_INTERNAL_THREAD_SWITCH) | 1669 | && bindflag != SET_INTERNAL_THREAD_SWITCH) |
| 1671 | notify_variable_watchers (symbol, value, Qset_default, Qnil); | 1670 | notify_variable_watchers (symbol, value, Qset_default, Qnil); |
| 1672 | /* FALLTHROUGH! */ | 1671 | break; |
| 1672 | |||
| 1673 | case SYMBOL_UNTRAPPED_WRITE: | 1673 | case SYMBOL_UNTRAPPED_WRITE: |
| 1674 | break; | 1674 | break; |
| 1675 | 1675 | ||
| 1676 | default: emacs_abort (); | 1676 | default: emacs_abort (); |
| 1677 | } | 1677 | } |