diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/alloc.c | 12 | ||||
| -rw-r--r-- | src/buffer.c | 4 | ||||
| -rw-r--r-- | src/data.c | 33 | ||||
| -rw-r--r-- | src/eval.c | 2 | ||||
| -rw-r--r-- | src/lisp.h | 1 |
5 files changed, 31 insertions, 21 deletions
diff --git a/src/alloc.c b/src/alloc.c index 16257469aa6..2ffd2415447 100644 --- a/src/alloc.c +++ b/src/alloc.c | |||
| @@ -3960,7 +3960,7 @@ Its value is void, and its function definition and property list are nil. */) | |||
| 3960 | if (symbol_free_list) | 3960 | if (symbol_free_list) |
| 3961 | { | 3961 | { |
| 3962 | ASAN_UNPOISON_SYMBOL (symbol_free_list); | 3962 | ASAN_UNPOISON_SYMBOL (symbol_free_list); |
| 3963 | val = make_lisp_symbol (symbol_free_list); | 3963 | XSETSYMBOL (val, symbol_free_list); |
| 3964 | symbol_free_list = symbol_free_list->u.s.next; | 3964 | symbol_free_list = symbol_free_list->u.s.next; |
| 3965 | } | 3965 | } |
| 3966 | else | 3966 | else |
| @@ -3976,7 +3976,7 @@ Its value is void, and its function definition and property list are nil. */) | |||
| 3976 | } | 3976 | } |
| 3977 | 3977 | ||
| 3978 | ASAN_UNPOISON_SYMBOL (&symbol_block->symbols[symbol_block_index]); | 3978 | ASAN_UNPOISON_SYMBOL (&symbol_block->symbols[symbol_block_index]); |
| 3979 | val = make_lisp_symbol (&symbol_block->symbols[symbol_block_index]); | 3979 | XSETSYMBOL (val, &symbol_block->symbols[symbol_block_index]); |
| 3980 | symbol_block_index++; | 3980 | symbol_block_index++; |
| 3981 | } | 3981 | } |
| 3982 | 3982 | ||
| @@ -7398,8 +7398,12 @@ process_mark_stack (ptrdiff_t base_sp) | |||
| 7398 | mark_stack_push_value (SYMBOL_VAL (ptr)); | 7398 | mark_stack_push_value (SYMBOL_VAL (ptr)); |
| 7399 | break; | 7399 | break; |
| 7400 | case SYMBOL_VARALIAS: | 7400 | case SYMBOL_VARALIAS: |
| 7401 | mark_stack_push_value (make_lisp_symbol (SYMBOL_ALIAS (ptr))); | 7401 | { |
| 7402 | break; | 7402 | Lisp_Object tem; |
| 7403 | XSETSYMBOL (tem, SYMBOL_ALIAS (ptr)); | ||
| 7404 | mark_stack_push_value (tem); | ||
| 7405 | break; | ||
| 7406 | } | ||
| 7403 | case SYMBOL_LOCALIZED: | 7407 | case SYMBOL_LOCALIZED: |
| 7404 | { | 7408 | { |
| 7405 | struct Lisp_Buffer_Local_Value *blv = SYMBOL_BLV (ptr); | 7409 | struct Lisp_Buffer_Local_Value *blv = SYMBOL_BLV (ptr); |
diff --git a/src/buffer.c b/src/buffer.c index 9f55a8813fa..43a9249528c 100644 --- a/src/buffer.c +++ b/src/buffer.c | |||
| @@ -1340,7 +1340,7 @@ buffer_local_value (Lisp_Object variable, Lisp_Object buffer) | |||
| 1340 | case SYMBOL_LOCALIZED: | 1340 | case SYMBOL_LOCALIZED: |
| 1341 | { /* Look in local_var_alist. */ | 1341 | { /* Look in local_var_alist. */ |
| 1342 | struct Lisp_Buffer_Local_Value *blv = SYMBOL_BLV (sym); | 1342 | struct Lisp_Buffer_Local_Value *blv = SYMBOL_BLV (sym); |
| 1343 | variable = make_lisp_symbol (sym); /* Update In case of aliasing. */ | 1343 | XSETSYMBOL (variable, sym); /* Update In case of aliasing. */ |
| 1344 | result = assq_no_quit (variable, BVAR (buf, local_var_alist)); | 1344 | result = assq_no_quit (variable, BVAR (buf, local_var_alist)); |
| 1345 | if (!NILP (result)) | 1345 | if (!NILP (result)) |
| 1346 | { | 1346 | { |
| @@ -4985,7 +4985,7 @@ defvar_per_buffer (struct Lisp_Buffer_Objfwd *bo_fwd, const char *namestring, | |||
| 4985 | sym->u.s.declared_special = true; | 4985 | sym->u.s.declared_special = true; |
| 4986 | sym->u.s.redirect = SYMBOL_FORWARDED; | 4986 | sym->u.s.redirect = SYMBOL_FORWARDED; |
| 4987 | SET_SYMBOL_FWD (sym, bo_fwd); | 4987 | SET_SYMBOL_FWD (sym, bo_fwd); |
| 4988 | PER_BUFFER_SYMBOL (offset) = make_lisp_symbol (sym); | 4988 | XSETSYMBOL (PER_BUFFER_SYMBOL (offset), sym); |
| 4989 | 4989 | ||
| 4990 | if (PER_BUFFER_IDX (offset) == 0) | 4990 | if (PER_BUFFER_IDX (offset) == 0) |
| 4991 | /* Did a DEFVAR_PER_BUFFER without initializing the corresponding | 4991 | /* Did a DEFVAR_PER_BUFFER without initializing the corresponding |
diff --git a/src/data.c b/src/data.c index c87b5317618..df08eaf8102 100644 --- a/src/data.c +++ b/src/data.c | |||
| @@ -1256,7 +1256,7 @@ If OBJECT is not a symbol, just return it. */) | |||
| 1256 | struct Lisp_Symbol *sym = XSYMBOL (object); | 1256 | struct Lisp_Symbol *sym = XSYMBOL (object); |
| 1257 | while (sym->u.s.redirect == SYMBOL_VARALIAS) | 1257 | while (sym->u.s.redirect == SYMBOL_VARALIAS) |
| 1258 | sym = SYMBOL_ALIAS (sym); | 1258 | sym = SYMBOL_ALIAS (sym); |
| 1259 | object = make_lisp_symbol (sym); | 1259 | XSETSYMBOL (object, sym); |
| 1260 | } | 1260 | } |
| 1261 | return object; | 1261 | return object; |
| 1262 | } | 1262 | } |
| @@ -1506,9 +1506,12 @@ swap_in_symval_forwarding (struct Lisp_Symbol *symbol, struct Lisp_Buffer_Local_ | |||
| 1506 | if (blv->fwd.fwdptr) | 1506 | if (blv->fwd.fwdptr) |
| 1507 | set_blv_value (blv, do_symval_forwarding (blv->fwd)); | 1507 | set_blv_value (blv, do_symval_forwarding (blv->fwd)); |
| 1508 | /* Choose the new binding. */ | 1508 | /* Choose the new binding. */ |
| 1509 | tem1 = assq_no_quit (make_lisp_symbol (symbol), | 1509 | { |
| 1510 | BVAR (current_buffer, local_var_alist)); | 1510 | Lisp_Object var; |
| 1511 | set_blv_where (blv, Fcurrent_buffer ()); | 1511 | XSETSYMBOL (var, symbol); |
| 1512 | tem1 = assq_no_quit (var, BVAR (current_buffer, local_var_alist)); | ||
| 1513 | set_blv_where (blv, Fcurrent_buffer ()); | ||
| 1514 | } | ||
| 1512 | if (!(blv->found = !NILP (tem1))) | 1515 | if (!(blv->found = !NILP (tem1))) |
| 1513 | tem1 = blv->defcell; | 1516 | tem1 = blv->defcell; |
| 1514 | 1517 | ||
| @@ -1652,8 +1655,7 @@ set_internal (Lisp_Object symbol, Lisp_Object newval, Lisp_Object where, | |||
| 1652 | set_blv_value (blv, do_symval_forwarding (blv->fwd)); | 1655 | set_blv_value (blv, do_symval_forwarding (blv->fwd)); |
| 1653 | 1656 | ||
| 1654 | /* Find the new binding. */ | 1657 | /* Find the new binding. */ |
| 1655 | /* May have changed via aliasing. */ | 1658 | XSETSYMBOL (symbol, sym); /* May have changed via aliasing. */ |
| 1656 | symbol = make_lisp_symbol (sym); | ||
| 1657 | Lisp_Object tem1 | 1659 | Lisp_Object tem1 |
| 1658 | = assq_no_quit (symbol, | 1660 | = assq_no_quit (symbol, |
| 1659 | BVAR (XBUFFER (where), local_var_alist)); | 1661 | BVAR (XBUFFER (where), local_var_alist)); |
| @@ -2057,10 +2059,13 @@ make_blv (struct Lisp_Symbol *sym, bool forwarded, | |||
| 2057 | union Lisp_Val_Fwd valcontents) | 2059 | union Lisp_Val_Fwd valcontents) |
| 2058 | { | 2060 | { |
| 2059 | struct Lisp_Buffer_Local_Value *blv = xmalloc (sizeof *blv); | 2061 | struct Lisp_Buffer_Local_Value *blv = xmalloc (sizeof *blv); |
| 2060 | Lisp_Object tem = Fcons (make_lisp_symbol (sym), | 2062 | Lisp_Object symbol; |
| 2061 | forwarded | 2063 | Lisp_Object tem; |
| 2062 | ? do_symval_forwarding (valcontents.fwd) | 2064 | |
| 2063 | : valcontents.value); | 2065 | XSETSYMBOL (symbol, sym); |
| 2066 | tem = Fcons (symbol, (forwarded | ||
| 2067 | ? do_symval_forwarding (valcontents.fwd) | ||
| 2068 | : valcontents.value)); | ||
| 2064 | 2069 | ||
| 2065 | /* Buffer_Local_Values cannot have as realval a buffer-local | 2070 | /* Buffer_Local_Values cannot have as realval a buffer-local |
| 2066 | or keyboard-local forwarding. */ | 2071 | or keyboard-local forwarding. */ |
| @@ -2216,7 +2221,7 @@ Instead, use `add-hook' and specify t for the LOCAL argument. */) | |||
| 2216 | } | 2221 | } |
| 2217 | 2222 | ||
| 2218 | /* Make sure this buffer has its own value of symbol. */ | 2223 | /* Make sure this buffer has its own value of symbol. */ |
| 2219 | variable = make_lisp_symbol (sym); /* Update in case of aliasing. */ | 2224 | XSETSYMBOL (variable, sym); /* Update in case of aliasing. */ |
| 2220 | tem = assq_no_quit (variable, BVAR (current_buffer, local_var_alist)); | 2225 | tem = assq_no_quit (variable, BVAR (current_buffer, local_var_alist)); |
| 2221 | if (NILP (tem)) | 2226 | if (NILP (tem)) |
| 2222 | { | 2227 | { |
| @@ -2296,7 +2301,7 @@ From now on the default value will apply in this buffer. Return VARIABLE. */) | |||
| 2296 | notify_variable_watchers (variable, Qnil, Qmakunbound, Fcurrent_buffer ()); | 2301 | notify_variable_watchers (variable, Qnil, Qmakunbound, Fcurrent_buffer ()); |
| 2297 | 2302 | ||
| 2298 | /* Get rid of this buffer's alist element, if any. */ | 2303 | /* Get rid of this buffer's alist element, if any. */ |
| 2299 | variable = make_lisp_symbol (sym); /* Propagate variable indirection. */ | 2304 | XSETSYMBOL (variable, sym); /* Propagate variable indirection. */ |
| 2300 | tem = assq_no_quit (variable, BVAR (current_buffer, local_var_alist)); | 2305 | tem = assq_no_quit (variable, BVAR (current_buffer, local_var_alist)); |
| 2301 | if (!NILP (tem)) | 2306 | if (!NILP (tem)) |
| 2302 | bset_local_var_alist | 2307 | bset_local_var_alist |
| @@ -2341,7 +2346,7 @@ Also see `buffer-local-boundp'.*/) | |||
| 2341 | Lisp_Object tmp; | 2346 | Lisp_Object tmp; |
| 2342 | struct Lisp_Buffer_Local_Value *blv = SYMBOL_BLV (sym); | 2347 | struct Lisp_Buffer_Local_Value *blv = SYMBOL_BLV (sym); |
| 2343 | XSETBUFFER (tmp, buf); | 2348 | XSETBUFFER (tmp, buf); |
| 2344 | variable = make_lisp_symbol (sym); /* Update in case of aliasing. */ | 2349 | XSETSYMBOL (variable, sym); /* Update in case of aliasing. */ |
| 2345 | 2350 | ||
| 2346 | if (EQ (blv->where, tmp)) /* The binding is already loaded. */ | 2351 | if (EQ (blv->where, tmp)) /* The binding is already loaded. */ |
| 2347 | return blv_found (blv) ? Qt : Qnil; | 2352 | return blv_found (blv) ? Qt : Qnil; |
| @@ -2391,7 +2396,7 @@ value in BUFFER, or if VARIABLE is automatically buffer-local (see | |||
| 2391 | struct Lisp_Buffer_Local_Value *blv = SYMBOL_BLV (sym); | 2396 | struct Lisp_Buffer_Local_Value *blv = SYMBOL_BLV (sym); |
| 2392 | if (blv->local_if_set) | 2397 | if (blv->local_if_set) |
| 2393 | return Qt; | 2398 | return Qt; |
| 2394 | variable = make_lisp_symbol (sym); /* Update in case of aliasing. */ | 2399 | XSETSYMBOL (variable, sym); /* Update in case of aliasing. */ |
| 2395 | return Flocal_variable_p (variable, buffer); | 2400 | return Flocal_variable_p (variable, buffer); |
| 2396 | } | 2401 | } |
| 2397 | case SYMBOL_FORWARDED: | 2402 | case SYMBOL_FORWARDED: |
diff --git a/src/eval.c b/src/eval.c index 9d3b98eb359..95eb21909d2 100644 --- a/src/eval.c +++ b/src/eval.c | |||
| @@ -3475,7 +3475,7 @@ specbind (Lisp_Object symbol, Lisp_Object value) | |||
| 3475 | switch (sym->u.s.redirect) | 3475 | switch (sym->u.s.redirect) |
| 3476 | { | 3476 | { |
| 3477 | case SYMBOL_VARALIAS: | 3477 | case SYMBOL_VARALIAS: |
| 3478 | sym = SYMBOL_ALIAS (sym); symbol = make_lisp_symbol (sym); goto start; | 3478 | sym = SYMBOL_ALIAS (sym); XSETSYMBOL (symbol, sym); goto start; |
| 3479 | case SYMBOL_PLAINVAL: | 3479 | case SYMBOL_PLAINVAL: |
| 3480 | /* The most common case is that of a non-constant symbol with a | 3480 | /* The most common case is that of a non-constant symbol with a |
| 3481 | trivial value. Make that as fast as we can. */ | 3481 | trivial value. Make that as fast as we can. */ |
diff --git a/src/lisp.h b/src/lisp.h index 4fc44745211..f353e4956eb 100644 --- a/src/lisp.h +++ b/src/lisp.h | |||
| @@ -1380,6 +1380,7 @@ make_lisp_ptr (void *ptr, enum Lisp_Type type) | |||
| 1380 | #define XSETCONS(a, b) ((a) = make_lisp_ptr (b, Lisp_Cons)) | 1380 | #define XSETCONS(a, b) ((a) = make_lisp_ptr (b, Lisp_Cons)) |
| 1381 | #define XSETVECTOR(a, b) ((a) = make_lisp_ptr (b, Lisp_Vectorlike)) | 1381 | #define XSETVECTOR(a, b) ((a) = make_lisp_ptr (b, Lisp_Vectorlike)) |
| 1382 | #define XSETSTRING(a, b) ((a) = make_lisp_ptr (b, Lisp_String)) | 1382 | #define XSETSTRING(a, b) ((a) = make_lisp_ptr (b, Lisp_String)) |
| 1383 | #define XSETSYMBOL(a, b) ((a) = make_lisp_symbol (b)) | ||
| 1383 | #define XSETFLOAT(a, b) ((a) = make_lisp_ptr (b, Lisp_Float)) | 1384 | #define XSETFLOAT(a, b) ((a) = make_lisp_ptr (b, Lisp_Float)) |
| 1384 | 1385 | ||
| 1385 | /* Return a Lisp_Object value that does not correspond to any object. | 1386 | /* Return a Lisp_Object value that does not correspond to any object. |