diff options
| author | Andrea Corallo | 2024-02-28 20:47:57 +0100 |
|---|---|---|
| committer | Andrea Corallo | 2024-02-28 20:47:57 +0100 |
| commit | 1fbe56c32761efdc8d268df80a97a9102d00e109 (patch) | |
| tree | 8d8e76c8ae43c79ef9d76b0f97c12607567664b9 /src/data.c | |
| parent | 6de60f33ed5cc438e20400aee83e1e2032773811 (diff) | |
| parent | 05195e129fc933db32c9e08a155a94bfa4d75b54 (diff) | |
| download | emacs-1fbe56c32761efdc8d268df80a97a9102d00e109.tar.gz emacs-1fbe56c32761efdc8d268df80a97a9102d00e109.zip | |
Merge remote-tracking branch 'origin/master' into 'feature/type-hierarchy'
Diffstat (limited to 'src/data.c')
| -rw-r--r-- | src/data.c | 58 |
1 files changed, 23 insertions, 35 deletions
diff --git a/src/data.c b/src/data.c index fd4b1fe4e44..c87b5317618 100644 --- a/src/data.c +++ b/src/data.c | |||
| @@ -231,6 +231,7 @@ for example, (type-of 1) returns `integer'. */) | |||
| 231 | case PVEC_BOOL_VECTOR: return Qbool_vector; | 231 | case PVEC_BOOL_VECTOR: return Qbool_vector; |
| 232 | case PVEC_FRAME: return Qframe; | 232 | case PVEC_FRAME: return Qframe; |
| 233 | case PVEC_HASH_TABLE: return Qhash_table; | 233 | case PVEC_HASH_TABLE: return Qhash_table; |
| 234 | case PVEC_OBARRAY: return Qobarray; | ||
| 234 | case PVEC_FONT: | 235 | case PVEC_FONT: |
| 235 | if (FONT_SPEC_P (object)) | 236 | if (FONT_SPEC_P (object)) |
| 236 | return Qfont_spec; | 237 | return Qfont_spec; |
| @@ -791,18 +792,16 @@ DEFUN ("bare-symbol", Fbare_symbol, Sbare_symbol, 1, 1, 0, | |||
| 791 | doc: /* Extract, if need be, the bare symbol from SYM, a symbol. */) | 792 | doc: /* Extract, if need be, the bare symbol from SYM, a symbol. */) |
| 792 | (register Lisp_Object sym) | 793 | (register Lisp_Object sym) |
| 793 | { | 794 | { |
| 794 | if (BARE_SYMBOL_P (sym)) | 795 | CHECK_SYMBOL (sym); |
| 795 | return sym; | 796 | return BARE_SYMBOL_P (sym) ? sym : XSYMBOL_WITH_POS_SYM (sym); |
| 796 | /* Type checking is done in the following macro. */ | ||
| 797 | return SYMBOL_WITH_POS_SYM (sym); | ||
| 798 | } | 797 | } |
| 799 | 798 | ||
| 800 | DEFUN ("symbol-with-pos-pos", Fsymbol_with_pos_pos, Ssymbol_with_pos_pos, 1, 1, 0, | 799 | DEFUN ("symbol-with-pos-pos", Fsymbol_with_pos_pos, Ssymbol_with_pos_pos, 1, 1, 0, |
| 801 | doc: /* Extract the position from a symbol with position. */) | 800 | doc: /* Extract the position from a symbol with position. */) |
| 802 | (register Lisp_Object ls) | 801 | (register Lisp_Object ls) |
| 803 | { | 802 | { |
| 804 | /* Type checking is done in the following macro. */ | 803 | CHECK_TYPE (SYMBOL_WITH_POS_P (ls), Qsymbol_with_pos_p, ls); |
| 805 | return SYMBOL_WITH_POS_POS (ls); | 804 | return XSYMBOL_WITH_POS_POS (ls); |
| 806 | } | 805 | } |
| 807 | 806 | ||
| 808 | DEFUN ("remove-pos-from-symbol", Fremove_pos_from_symbol, | 807 | DEFUN ("remove-pos-from-symbol", Fremove_pos_from_symbol, |
| @@ -812,7 +811,7 @@ Otherwise, return ARG unchanged. Compare with `bare-symbol'. */) | |||
| 812 | (register Lisp_Object arg) | 811 | (register Lisp_Object arg) |
| 813 | { | 812 | { |
| 814 | if (SYMBOL_WITH_POS_P (arg)) | 813 | if (SYMBOL_WITH_POS_P (arg)) |
| 815 | return (SYMBOL_WITH_POS_SYM (arg)); | 814 | return XSYMBOL_WITH_POS_SYM (arg); |
| 816 | return arg; | 815 | return arg; |
| 817 | } | 816 | } |
| 818 | 817 | ||
| @@ -823,20 +822,13 @@ POS, the position, is either a fixnum or a symbol with position from which | |||
| 823 | the position will be taken. */) | 822 | the position will be taken. */) |
| 824 | (register Lisp_Object sym, register Lisp_Object pos) | 823 | (register Lisp_Object sym, register Lisp_Object pos) |
| 825 | { | 824 | { |
| 826 | Lisp_Object bare; | 825 | Lisp_Object bare = Fbare_symbol (sym); |
| 827 | Lisp_Object position; | 826 | Lisp_Object position; |
| 828 | 827 | ||
| 829 | if (BARE_SYMBOL_P (sym)) | ||
| 830 | bare = sym; | ||
| 831 | else if (SYMBOL_WITH_POS_P (sym)) | ||
| 832 | bare = XSYMBOL_WITH_POS (sym)->sym; | ||
| 833 | else | ||
| 834 | wrong_type_argument (Qsymbolp, sym); | ||
| 835 | |||
| 836 | if (FIXNUMP (pos)) | 828 | if (FIXNUMP (pos)) |
| 837 | position = pos; | 829 | position = pos; |
| 838 | else if (SYMBOL_WITH_POS_P (pos)) | 830 | else if (SYMBOL_WITH_POS_P (pos)) |
| 839 | position = XSYMBOL_WITH_POS (pos)->pos; | 831 | position = XSYMBOL_WITH_POS_POS (pos); |
| 840 | else | 832 | else |
| 841 | wrong_type_argument (Qfixnum_or_symbol_with_pos_p, pos); | 833 | wrong_type_argument (Qfixnum_or_symbol_with_pos_p, pos); |
| 842 | 834 | ||
| @@ -1264,7 +1256,7 @@ If OBJECT is not a symbol, just return it. */) | |||
| 1264 | struct Lisp_Symbol *sym = XSYMBOL (object); | 1256 | struct Lisp_Symbol *sym = XSYMBOL (object); |
| 1265 | while (sym->u.s.redirect == SYMBOL_VARALIAS) | 1257 | while (sym->u.s.redirect == SYMBOL_VARALIAS) |
| 1266 | sym = SYMBOL_ALIAS (sym); | 1258 | sym = SYMBOL_ALIAS (sym); |
| 1267 | XSETSYMBOL (object, sym); | 1259 | object = make_lisp_symbol (sym); |
| 1268 | } | 1260 | } |
| 1269 | return object; | 1261 | return object; |
| 1270 | } | 1262 | } |
| @@ -1514,12 +1506,9 @@ swap_in_symval_forwarding (struct Lisp_Symbol *symbol, struct Lisp_Buffer_Local_ | |||
| 1514 | if (blv->fwd.fwdptr) | 1506 | if (blv->fwd.fwdptr) |
| 1515 | set_blv_value (blv, do_symval_forwarding (blv->fwd)); | 1507 | set_blv_value (blv, do_symval_forwarding (blv->fwd)); |
| 1516 | /* Choose the new binding. */ | 1508 | /* Choose the new binding. */ |
| 1517 | { | 1509 | tem1 = assq_no_quit (make_lisp_symbol (symbol), |
| 1518 | Lisp_Object var; | 1510 | BVAR (current_buffer, local_var_alist)); |
| 1519 | XSETSYMBOL (var, symbol); | 1511 | set_blv_where (blv, Fcurrent_buffer ()); |
| 1520 | tem1 = assq_no_quit (var, BVAR (current_buffer, local_var_alist)); | ||
| 1521 | set_blv_where (blv, Fcurrent_buffer ()); | ||
| 1522 | } | ||
| 1523 | if (!(blv->found = !NILP (tem1))) | 1512 | if (!(blv->found = !NILP (tem1))) |
| 1524 | tem1 = blv->defcell; | 1513 | tem1 = blv->defcell; |
| 1525 | 1514 | ||
| @@ -1663,7 +1652,8 @@ set_internal (Lisp_Object symbol, Lisp_Object newval, Lisp_Object where, | |||
| 1663 | set_blv_value (blv, do_symval_forwarding (blv->fwd)); | 1652 | set_blv_value (blv, do_symval_forwarding (blv->fwd)); |
| 1664 | 1653 | ||
| 1665 | /* Find the new binding. */ | 1654 | /* Find the new binding. */ |
| 1666 | XSETSYMBOL (symbol, sym); /* May have changed via aliasing. */ | 1655 | /* May have changed via aliasing. */ |
| 1656 | symbol = make_lisp_symbol (sym); | ||
| 1667 | Lisp_Object tem1 | 1657 | Lisp_Object tem1 |
| 1668 | = assq_no_quit (symbol, | 1658 | = assq_no_quit (symbol, |
| 1669 | BVAR (XBUFFER (where), local_var_alist)); | 1659 | BVAR (XBUFFER (where), local_var_alist)); |
| @@ -2067,13 +2057,10 @@ make_blv (struct Lisp_Symbol *sym, bool forwarded, | |||
| 2067 | union Lisp_Val_Fwd valcontents) | 2057 | union Lisp_Val_Fwd valcontents) |
| 2068 | { | 2058 | { |
| 2069 | struct Lisp_Buffer_Local_Value *blv = xmalloc (sizeof *blv); | 2059 | struct Lisp_Buffer_Local_Value *blv = xmalloc (sizeof *blv); |
| 2070 | Lisp_Object symbol; | 2060 | Lisp_Object tem = Fcons (make_lisp_symbol (sym), |
| 2071 | Lisp_Object tem; | 2061 | forwarded |
| 2072 | 2062 | ? do_symval_forwarding (valcontents.fwd) | |
| 2073 | XSETSYMBOL (symbol, sym); | 2063 | : valcontents.value); |
| 2074 | tem = Fcons (symbol, (forwarded | ||
| 2075 | ? do_symval_forwarding (valcontents.fwd) | ||
| 2076 | : valcontents.value)); | ||
| 2077 | 2064 | ||
| 2078 | /* Buffer_Local_Values cannot have as realval a buffer-local | 2065 | /* Buffer_Local_Values cannot have as realval a buffer-local |
| 2079 | or keyboard-local forwarding. */ | 2066 | or keyboard-local forwarding. */ |
| @@ -2229,7 +2216,7 @@ Instead, use `add-hook' and specify t for the LOCAL argument. */) | |||
| 2229 | } | 2216 | } |
| 2230 | 2217 | ||
| 2231 | /* Make sure this buffer has its own value of symbol. */ | 2218 | /* Make sure this buffer has its own value of symbol. */ |
| 2232 | XSETSYMBOL (variable, sym); /* Update in case of aliasing. */ | 2219 | variable = make_lisp_symbol (sym); /* Update in case of aliasing. */ |
| 2233 | tem = assq_no_quit (variable, BVAR (current_buffer, local_var_alist)); | 2220 | tem = assq_no_quit (variable, BVAR (current_buffer, local_var_alist)); |
| 2234 | if (NILP (tem)) | 2221 | if (NILP (tem)) |
| 2235 | { | 2222 | { |
| @@ -2309,7 +2296,7 @@ From now on the default value will apply in this buffer. Return VARIABLE. */) | |||
| 2309 | notify_variable_watchers (variable, Qnil, Qmakunbound, Fcurrent_buffer ()); | 2296 | notify_variable_watchers (variable, Qnil, Qmakunbound, Fcurrent_buffer ()); |
| 2310 | 2297 | ||
| 2311 | /* Get rid of this buffer's alist element, if any. */ | 2298 | /* Get rid of this buffer's alist element, if any. */ |
| 2312 | XSETSYMBOL (variable, sym); /* Propagate variable indirection. */ | 2299 | variable = make_lisp_symbol (sym); /* Propagate variable indirection. */ |
| 2313 | tem = assq_no_quit (variable, BVAR (current_buffer, local_var_alist)); | 2300 | tem = assq_no_quit (variable, BVAR (current_buffer, local_var_alist)); |
| 2314 | if (!NILP (tem)) | 2301 | if (!NILP (tem)) |
| 2315 | bset_local_var_alist | 2302 | bset_local_var_alist |
| @@ -2354,7 +2341,7 @@ Also see `buffer-local-boundp'.*/) | |||
| 2354 | Lisp_Object tmp; | 2341 | Lisp_Object tmp; |
| 2355 | struct Lisp_Buffer_Local_Value *blv = SYMBOL_BLV (sym); | 2342 | struct Lisp_Buffer_Local_Value *blv = SYMBOL_BLV (sym); |
| 2356 | XSETBUFFER (tmp, buf); | 2343 | XSETBUFFER (tmp, buf); |
| 2357 | XSETSYMBOL (variable, sym); /* Update in case of aliasing. */ | 2344 | variable = make_lisp_symbol (sym); /* Update in case of aliasing. */ |
| 2358 | 2345 | ||
| 2359 | if (EQ (blv->where, tmp)) /* The binding is already loaded. */ | 2346 | if (EQ (blv->where, tmp)) /* The binding is already loaded. */ |
| 2360 | return blv_found (blv) ? Qt : Qnil; | 2347 | return blv_found (blv) ? Qt : Qnil; |
| @@ -2404,7 +2391,7 @@ value in BUFFER, or if VARIABLE is automatically buffer-local (see | |||
| 2404 | struct Lisp_Buffer_Local_Value *blv = SYMBOL_BLV (sym); | 2391 | struct Lisp_Buffer_Local_Value *blv = SYMBOL_BLV (sym); |
| 2405 | if (blv->local_if_set) | 2392 | if (blv->local_if_set) |
| 2406 | return Qt; | 2393 | return Qt; |
| 2407 | XSETSYMBOL (variable, sym); /* Update in case of aliasing. */ | 2394 | variable = make_lisp_symbol (sym); /* Update in case of aliasing. */ |
| 2408 | return Flocal_variable_p (variable, buffer); | 2395 | return Flocal_variable_p (variable, buffer); |
| 2409 | } | 2396 | } |
| 2410 | case SYMBOL_FORWARDED: | 2397 | case SYMBOL_FORWARDED: |
| @@ -4238,6 +4225,7 @@ syms_of_data (void) | |||
| 4238 | DEFSYM (Qtreesit_parser, "treesit-parser"); | 4225 | DEFSYM (Qtreesit_parser, "treesit-parser"); |
| 4239 | DEFSYM (Qtreesit_node, "treesit-node"); | 4226 | DEFSYM (Qtreesit_node, "treesit-node"); |
| 4240 | DEFSYM (Qtreesit_compiled_query, "treesit-compiled-query"); | 4227 | DEFSYM (Qtreesit_compiled_query, "treesit-compiled-query"); |
| 4228 | DEFSYM (Qobarray, "obarray"); | ||
| 4241 | 4229 | ||
| 4242 | DEFSYM (Qdefun, "defun"); | 4230 | DEFSYM (Qdefun, "defun"); |
| 4243 | 4231 | ||