Mercurial > emacs
comparison src/buffer.c @ 85328:d0d527210b0c
* lisp.h (enum Lisp_Misc_Type): Del Lisp_Misc_Some_Buffer_Local_Value.
(XMISCANY): New macro.
(XMISCTYPE): Use it.
(struct Lisp_Misc_Any): New type.
(union Lisp_Misc): Use it.
(struct Lisp_Buffer_Local_Value): Add `local_if_set' bit.
* data.c (Fboundp, store_symval_forwarding, swap_in_global_binding)
(find_symbol_value, set_internal, default_value, Fset_default)
(Fmake_variable_buffer_local, Fmake_local_variable)
(Fkill_local_variable, Fmake_variable_frame_local, Flocal_variable_p)
(Flocal_variable_if_set_p, Fvariable_binding_locus):
The SOME_BUFFER_LOCAL_VALUEP distinction is replaced by local_if_set.
* alloc.c (allocate_buffer): Set the size and tag.
(allocate_misc, mark_maybe_object, mark_object, survives_gc_p):
Use XMISCANY.
(die): Follow the GNU convention for error messages.
* print.c (print_object): SOME_BUFFER_LOCAL_VALUEP -> local_if_set.
* buffer.c (Fget_buffer_create, Fmake_indirect_buffer): Don't set the
tag any more.
(set_buffer_internal_1):
* frame.c (store_frame_param):
* eval.c (specbind):
* xdisp.c (select_frame_for_redisplay): Drop SOME_BUFFER_LOCAL_VALUEP.
author | Stefan Monnier <monnier@iro.umontreal.ca> |
---|---|
date | Tue, 16 Oct 2007 15:42:58 +0000 |
parents | 86224da3fd17 |
children | 79043dac5524 1251cabc40b7 |
comparison
equal
deleted
inserted
replaced
85327:84eaa97c1d65 | 85328:d0d527210b0c |
---|---|
358 | 358 |
359 if (SCHARS (name) == 0) | 359 if (SCHARS (name) == 0) |
360 error ("Empty string for buffer name is not allowed"); | 360 error ("Empty string for buffer name is not allowed"); |
361 | 361 |
362 b = (struct buffer *) allocate_buffer (); | 362 b = (struct buffer *) allocate_buffer (); |
363 | |
364 b->size = sizeof (struct buffer) / sizeof (EMACS_INT); | |
365 | 363 |
366 /* An ordinary buffer uses its own struct buffer_text. */ | 364 /* An ordinary buffer uses its own struct buffer_text. */ |
367 b->text = &b->own_text; | 365 b->text = &b->own_text; |
368 b->base_buffer = 0; | 366 b->base_buffer = 0; |
369 | 367 |
414 | 412 |
415 name = Fcopy_sequence (name); | 413 name = Fcopy_sequence (name); |
416 STRING_SET_INTERVALS (name, NULL_INTERVAL); | 414 STRING_SET_INTERVALS (name, NULL_INTERVAL); |
417 b->name = name; | 415 b->name = name; |
418 | 416 |
419 if (SREF (name, 0) != ' ') | 417 b->undo_list = (SREF (name, 0) != ' ') ? Qnil : Qt; |
420 b->undo_list = Qnil; | |
421 else | |
422 b->undo_list = Qt; | |
423 | 418 |
424 reset_buffer (b); | 419 reset_buffer (b); |
425 reset_buffer_local_variables (b, 1); | 420 reset_buffer_local_variables (b, 1); |
426 | 421 |
427 b->mark = Fmake_marker (); | 422 b->mark = Fmake_marker (); |
428 BUF_MARKERS (b) = NULL; | 423 BUF_MARKERS (b) = NULL; |
429 b->name = name; | 424 b->name = name; |
430 | 425 |
431 /* Put this in the alist of all live buffers. */ | 426 /* Put this in the alist of all live buffers. */ |
432 XSETPVECTYPE (b, PVEC_BUFFER); | |
433 XSETBUFFER (buf, b); | 427 XSETBUFFER (buf, b); |
434 Vbuffer_alist = nconc2 (Vbuffer_alist, Fcons (Fcons (name, buf), Qnil)); | 428 Vbuffer_alist = nconc2 (Vbuffer_alist, Fcons (Fcons (name, buf), Qnil)); |
435 | 429 |
436 /* An error in calling the function here (should someone redefine it) | 430 /* An error in calling the function here (should someone redefine it) |
437 can lead to infinite regress until you run out of stack. rms | 431 can lead to infinite regress until you run out of stack. rms |
565 | 559 |
566 if (SCHARS (name) == 0) | 560 if (SCHARS (name) == 0) |
567 error ("Empty string for buffer name is not allowed"); | 561 error ("Empty string for buffer name is not allowed"); |
568 | 562 |
569 b = (struct buffer *) allocate_buffer (); | 563 b = (struct buffer *) allocate_buffer (); |
570 b->size = sizeof (struct buffer) / sizeof (EMACS_INT); | 564 |
571 XSETPVECTYPE (b, PVEC_BUFFER); | 565 b->base_buffer = (XBUFFER (base_buffer)->base_buffer |
572 | 566 ? XBUFFER (base_buffer)->base_buffer |
573 if (XBUFFER (base_buffer)->base_buffer) | 567 : XBUFFER (base_buffer)); |
574 b->base_buffer = XBUFFER (base_buffer)->base_buffer; | |
575 else | |
576 b->base_buffer = XBUFFER (base_buffer); | |
577 | 568 |
578 /* Use the base buffer's text object. */ | 569 /* Use the base buffer's text object. */ |
579 b->text = b->base_buffer->text; | 570 b->text = b->base_buffer->text; |
580 | 571 |
581 BUF_BEGV (b) = BUF_BEGV (b->base_buffer); | 572 BUF_BEGV (b) = BUF_BEGV (b->base_buffer); |
1916 to find and update any that forward into C variables. */ | 1907 to find and update any that forward into C variables. */ |
1917 | 1908 |
1918 for (tail = b->local_var_alist; CONSP (tail); tail = XCDR (tail)) | 1909 for (tail = b->local_var_alist; CONSP (tail); tail = XCDR (tail)) |
1919 { | 1910 { |
1920 valcontents = SYMBOL_VALUE (XCAR (XCAR (tail))); | 1911 valcontents = SYMBOL_VALUE (XCAR (XCAR (tail))); |
1921 if ((BUFFER_LOCAL_VALUEP (valcontents) | 1912 if ((BUFFER_LOCAL_VALUEP (valcontents)) |
1922 || SOME_BUFFER_LOCAL_VALUEP (valcontents)) | |
1923 && (tem = XBUFFER_LOCAL_VALUE (valcontents)->realvalue, | 1913 && (tem = XBUFFER_LOCAL_VALUE (valcontents)->realvalue, |
1924 (BOOLFWDP (tem) || INTFWDP (tem) || OBJFWDP (tem)))) | 1914 (BOOLFWDP (tem) || INTFWDP (tem) || OBJFWDP (tem)))) |
1925 /* Just reference the variable | 1915 /* Just reference the variable |
1926 to cause it to become set for this buffer. */ | 1916 to cause it to become set for this buffer. */ |
1927 Fsymbol_value (XCAR (XCAR (tail))); | 1917 Fsymbol_value (XCAR (XCAR (tail))); |
1931 | 1921 |
1932 if (old_buf) | 1922 if (old_buf) |
1933 for (tail = old_buf->local_var_alist; CONSP (tail); tail = XCDR (tail)) | 1923 for (tail = old_buf->local_var_alist; CONSP (tail); tail = XCDR (tail)) |
1934 { | 1924 { |
1935 valcontents = SYMBOL_VALUE (XCAR (XCAR (tail))); | 1925 valcontents = SYMBOL_VALUE (XCAR (XCAR (tail))); |
1936 if ((BUFFER_LOCAL_VALUEP (valcontents) | 1926 if ((BUFFER_LOCAL_VALUEP (valcontents)) |
1937 || SOME_BUFFER_LOCAL_VALUEP (valcontents)) | |
1938 && (tem = XBUFFER_LOCAL_VALUE (valcontents)->realvalue, | 1927 && (tem = XBUFFER_LOCAL_VALUE (valcontents)->realvalue, |
1939 (BOOLFWDP (tem) || INTFWDP (tem) || OBJFWDP (tem)))) | 1928 (BOOLFWDP (tem) || INTFWDP (tem) || OBJFWDP (tem)))) |
1940 /* Just reference the variable | 1929 /* Just reference the variable |
1941 to cause it to become set for this buffer. */ | 1930 to cause it to become set for this buffer. */ |
1942 Fsymbol_value (XCAR (XCAR (tail))); | 1931 Fsymbol_value (XCAR (XCAR (tail))); |
2491 reset_buffer_local_variables (current_buffer, 0); | 2480 reset_buffer_local_variables (current_buffer, 0); |
2492 | 2481 |
2493 /* Any which are supposed to be permanent, | 2482 /* Any which are supposed to be permanent, |
2494 make local again, with the same values they had. */ | 2483 make local again, with the same values they had. */ |
2495 | 2484 |
2496 for (alist = oalist; !NILP (alist); alist = XCDR (alist)) | 2485 for (alist = oalist; CONSP (alist); alist = XCDR (alist)) |
2497 { | 2486 { |
2498 sym = XCAR (XCAR (alist)); | 2487 sym = XCAR (XCAR (alist)); |
2499 tem = Fget (sym, Qpermanent_local); | 2488 tem = Fget (sym, Qpermanent_local); |
2500 if (! NILP (tem)) | 2489 if (! NILP (tem)) |
2501 { | 2490 { |
2521 Lisp_Object oalist, alist, sym, tem, buffer; | 2510 Lisp_Object oalist, alist, sym, tem, buffer; |
2522 | 2511 |
2523 XSETBUFFER (buffer, b); | 2512 XSETBUFFER (buffer, b); |
2524 oalist = b->local_var_alist; | 2513 oalist = b->local_var_alist; |
2525 | 2514 |
2526 for (alist = oalist; !NILP (alist); alist = XCDR (alist)) | 2515 for (alist = oalist; CONSP (alist); alist = XCDR (alist)) |
2527 { | 2516 { |
2528 sym = XCAR (XCAR (alist)); | 2517 sym = XCAR (XCAR (alist)); |
2529 | 2518 |
2530 /* Need not do anything if some other buffer's binding is now encached. */ | 2519 /* Need not do anything if some other buffer's binding is now encached. */ |
2531 tem = XBUFFER_LOCAL_VALUE (SYMBOL_VALUE (sym))->buffer; | 2520 tem = XBUFFER_LOCAL_VALUE (SYMBOL_VALUE (sym))->buffer; |