aboutsummaryrefslogtreecommitdiffstats
path: root/src/data.c
diff options
context:
space:
mode:
authorAndrea Corallo2024-02-28 20:47:57 +0100
committerAndrea Corallo2024-02-28 20:47:57 +0100
commit1fbe56c32761efdc8d268df80a97a9102d00e109 (patch)
tree8d8e76c8ae43c79ef9d76b0f97c12607567664b9 /src/data.c
parent6de60f33ed5cc438e20400aee83e1e2032773811 (diff)
parent05195e129fc933db32c9e08a155a94bfa4d75b54 (diff)
downloademacs-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.c58
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
800DEFUN ("symbol-with-pos-pos", Fsymbol_with_pos_pos, Ssymbol_with_pos_pos, 1, 1, 0, 799DEFUN ("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
808DEFUN ("remove-pos-from-symbol", Fremove_pos_from_symbol, 807DEFUN ("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
823the position will be taken. */) 822the 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