[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] /srv/bzr/emacs/trunk r111471: Omit buffer_slot_type_mismat
From: |
Dmitry Antipov |
Subject: |
[Emacs-diffs] /srv/bzr/emacs/trunk r111471: Omit buffer_slot_type_mismatch and use generic predicates to enforce |
Date: |
Thu, 10 Jan 2013 14:30:16 +0400 |
User-agent: |
Bazaar (2.5.0) |
------------------------------------------------------------
revno: 111471
committer: Dmitry Antipov <address@hidden>
branch nick: trunk
timestamp: Thu 2013-01-10 14:30:16 +0400
message:
Omit buffer_slot_type_mismatch and use generic predicates to enforce
the type of per-buffer values where appropriate.
* src/lisp.h (struct Lisp_Buffer_Objfwd): Rename slottype member to
predicate, which is how it's really used now. Adjust comment.
* src/buffer.h (buffer_slot_type_mismatch): Remove prototype.
* src/buffer.c (buffer_slot_type_mismatch): Remove.
(DEFVAR_PER_BUFFER, defvar_per_buffer): Rename type argument to
predicate. Adjust comment.
(syms_of_buffer): Use Qsymbolp for major-mode. Use Qintegerp for
fill-column, left-margin, tab-width, buffer-saved-size,
left-margin-width, right-margin-width, left-fringe-width,
right-fringe-width, scroll-bar-width and buffer-display-count.
Use Qstringp for default-directory, buffer-file-name,
buffer-file-truename and buffer-auto-save-file-name. Use Qfloatp for
scroll-up-aggressively and scroll-down-aggressively. Use Qnumberp for
line-spacing.
* src/data.c (store_symval_forwarding): Adjust to call the predicate.
* lisp/cus-start.el (toplevel): Only allow float values for
scroll-up-aggressively and scroll-down-aggressively.
Allow any number for line-spacing.
modified:
lisp/ChangeLog
lisp/cus-start.el
src/ChangeLog
src/buffer.c
src/buffer.h
src/data.c
src/lisp.h
=== modified file 'lisp/ChangeLog'
--- a/lisp/ChangeLog 2013-01-10 05:05:24 +0000
+++ b/lisp/ChangeLog 2013-01-10 10:30:16 +0000
@@ -1,3 +1,9 @@
+2013-01-10 Dmitry Antipov <address@hidden>
+
+ * cus-start.el (toplevel): Only allow float values for
+ scroll-up-aggressively and scroll-down-aggressively.
+ Allow any number for line-spacing.
+
2013-01-10 Stefan Monnier <address@hidden>
* doc-view.el (doc-view-pdfdraw-program): Allow "pdfdraw" name.
=== modified file 'lisp/cus-start.el'
--- a/lisp/cus-start.el 2013-01-02 16:13:04 +0000
+++ b/lisp/cus-start.el 2013-01-10 10:30:16 +0000
@@ -115,12 +115,12 @@
(const :tag "On the right" (down . right))))
(other :tag "On left, no arrows" t)))
(scroll-up-aggressively windows
- (choice (const :tag "off" nil) number)
+ (choice (const :tag "off" nil) float)
"21.1")
(scroll-down-aggressively windows
- (choice (const :tag "off" nil) number)
+ (choice (const :tag "off" nil) float)
"21.1")
- (line-spacing display (choice (const :tag "none" nil) integer)
+ (line-spacing display (choice (const :tag "none" nil) number)
"22.1")
(cursor-in-non-selected-windows
cursor boolean nil
=== modified file 'src/ChangeLog'
--- a/src/ChangeLog 2013-01-09 15:07:01 +0000
+++ b/src/ChangeLog 2013-01-10 10:30:16 +0000
@@ -1,3 +1,23 @@
+2013-01-10 Dmitry Antipov <address@hidden>
+
+ Omit buffer_slot_type_mismatch and use generic predicates to enforce
+ the type of per-buffer values where appropriate.
+ * lisp.h (struct Lisp_Buffer_Objfwd): Rename slottype member to
+ predicate, which is how it's really used now. Adjust comment.
+ * buffer.h (buffer_slot_type_mismatch): Remove prototype.
+ * buffer.c (buffer_slot_type_mismatch): Remove.
+ (DEFVAR_PER_BUFFER, defvar_per_buffer): Rename type argument to
+ predicate. Adjust comment.
+ (syms_of_buffer): Use Qsymbolp for major-mode. Use Qintegerp for
+ fill-column, left-margin, tab-width, buffer-saved-size,
+ left-margin-width, right-margin-width, left-fringe-width,
+ right-fringe-width, scroll-bar-width and buffer-display-count.
+ Use Qstringp for default-directory, buffer-file-name,
+ buffer-file-truename and buffer-auto-save-file-name. Use Qfloatp for
+ scroll-up-aggressively and scroll-down-aggressively. Use Qnumberp for
+ line-spacing.
+ * data.c (store_symval_forwarding): Adjust to call the predicate.
+
2013-01-09 Juanma Barranquero <address@hidden>
* w32.c (get_name_and_id, acl_set_file):
=== modified file 'src/buffer.c'
--- a/src/buffer.c 2013-01-09 13:50:22 +0000
+++ b/src/buffer.c 2013-01-10 10:30:16 +0000
@@ -4576,27 +4576,7 @@
for (; CONSP (hit_list); hit_list = XCDR (hit_list))
Fdelete_overlay (XCAR (hit_list));
}
-
-/* Somebody has tried to store a value with an unacceptable type
- in the slot with offset OFFSET. */
-
-void
-buffer_slot_type_mismatch (Lisp_Object newval, int type)
-{
- Lisp_Object predicate;
-
- switch (type)
- {
- case_Lisp_Int: predicate = Qintegerp; break;
- case Lisp_String: predicate = Qstringp; break;
- case Lisp_Symbol: predicate = Qsymbolp; break;
- default: emacs_abort ();
- }
-
- wrong_type_argument (predicate, newval);
-}
-
-
+
/***********************************************************************
Allocation with mmap
***********************************************************************/
@@ -5370,25 +5350,23 @@
free (pwd);
}
-/* Similar to defvar_lisp but define a variable whose value is the Lisp
- Object stored in the current buffer. address is the address of the slot
- in the buffer that is current now. */
+/* Similar to defvar_lisp but define a variable whose value is the
+ Lisp_Object stored in the current buffer. LNAME is the Lisp-level
+ variable name. VNAME is the name of the buffer slot. PREDICATE
+ is nil for a general Lisp variable. If PREDICATE is non-nil, then
+ only Lisp values that satisfies the PREDICATE are allowed (except
+ that nil is allowed too). DOC is a dummy where you write the doc
+ string as a comment. */
-/* TYPE is nil for a general Lisp variable.
- An integer specifies a type; then only Lisp values
- with that type code are allowed (except that nil is allowed too).
- LNAME is the Lisp-level variable name.
- VNAME is the name of the buffer slot.
- DOC is a dummy where you write the doc string as a comment. */
-#define DEFVAR_PER_BUFFER(lname, vname, type, doc) \
- do { \
- static struct Lisp_Buffer_Objfwd bo_fwd; \
- defvar_per_buffer (&bo_fwd, lname, vname, type); \
+#define DEFVAR_PER_BUFFER(lname, vname, predicate, doc) \
+ do { \
+ static struct Lisp_Buffer_Objfwd bo_fwd; \
+ defvar_per_buffer (&bo_fwd, lname, vname, predicate); \
} while (0)
static void
defvar_per_buffer (struct Lisp_Buffer_Objfwd *bo_fwd, const char *namestring,
- Lisp_Object *address, Lisp_Object type)
+ Lisp_Object *address, Lisp_Object predicate)
{
struct Lisp_Symbol *sym;
int offset;
@@ -5398,7 +5376,7 @@
bo_fwd->type = Lisp_Fwd_Buffer_Obj;
bo_fwd->offset = offset;
- bo_fwd->slottype = type;
+ bo_fwd->predicate = predicate;
sym->declared_special = 1;
sym->redirect = SYMBOL_FORWARDED;
{
@@ -5661,7 +5639,7 @@
doc: /* Value of `major-mode' for new buffers. */);
DEFVAR_PER_BUFFER ("major-mode", &BVAR (current_buffer, major_mode),
- make_number (Lisp_Symbol),
+ Qsymbolp,
doc: /* Symbol for current buffer's major mode.
The default value (normally `fundamental-mode') affects new buffers.
A value of nil means to use the current buffer's major mode, provided
@@ -5692,17 +5670,17 @@
doc: /* Non-nil if searches and matches should ignore
case. */);
DEFVAR_PER_BUFFER ("fill-column", &BVAR (current_buffer, fill_column),
- make_number (Lisp_Int0),
+ Qintegerp,
doc: /* Column beyond which automatic line-wrapping should
happen.
Interactively, you can set the buffer local value using \\[set-fill-column].
*/);
DEFVAR_PER_BUFFER ("left-margin", &BVAR (current_buffer, left_margin),
- make_number (Lisp_Int0),
+ Qintegerp,
doc: /* Column for the default `indent-line-function' to
indent to.
Linefeed indents to this column in Fundamental mode. */);
DEFVAR_PER_BUFFER ("tab-width", &BVAR (current_buffer, tab_width),
- make_number (Lisp_Int0),
+ Qintegerp,
doc: /* Distance between tab stops (for display of tab
characters), in columns.
This should be an integer greater than zero. */);
@@ -5787,7 +5765,7 @@
`visual-line-mode'. */);
DEFVAR_PER_BUFFER ("default-directory", &BVAR (current_buffer, directory),
- make_number (Lisp_String),
+ Qstringp,
doc: /* Name of default directory of current buffer.
Should end with slash.
To interactively change the default directory, use command `cd'. */);
@@ -5800,18 +5778,18 @@
its value may not be a list of functions. */);
DEFVAR_PER_BUFFER ("buffer-file-name", &BVAR (current_buffer, filename),
- make_number (Lisp_String),
+ Qstringp,
doc: /* Name of file visited in current buffer, or nil if
not visiting a file. */);
DEFVAR_PER_BUFFER ("buffer-file-truename", &BVAR (current_buffer,
file_truename),
- make_number (Lisp_String),
+ Qstringp,
doc: /* Abbreviated truename of file visited in current
buffer, or nil if none.
The truename of a file is calculated by `file-truename'
and then abbreviated with `abbreviate-file-name'. */);
DEFVAR_PER_BUFFER ("buffer-auto-save-file-name",
&BVAR (current_buffer, auto_save_file_name),
- make_number (Lisp_String),
+ Qstringp,
doc: /* Name of file for auto-saving current buffer.
If it is nil, that means don't auto-save this buffer. */);
@@ -5823,7 +5801,7 @@
Backing up is done before the first time the file is saved. */);
DEFVAR_PER_BUFFER ("buffer-saved-size", &BVAR (current_buffer, save_length),
- make_number (Lisp_Int0),
+ Qintegerp,
doc: /* Length of current buffer when last read in, saved
or auto-saved.
0 initially.
-1 means auto-saving turned off until next real save.
@@ -5893,23 +5871,23 @@
See also the functions `display-table-slot' and `set-display-table-slot'. */);
DEFVAR_PER_BUFFER ("left-margin-width", &BVAR (current_buffer,
left_margin_cols),
- Qnil,
+ Qintegerp,
doc: /* Width of left marginal area for display of a
buffer.
A value of nil means no marginal area. */);
DEFVAR_PER_BUFFER ("right-margin-width", &BVAR (current_buffer,
right_margin_cols),
- Qnil,
+ Qintegerp,
doc: /* Width of right marginal area for display of a
buffer.
A value of nil means no marginal area. */);
DEFVAR_PER_BUFFER ("left-fringe-width", &BVAR (current_buffer,
left_fringe_width),
- Qnil,
+ Qintegerp,
doc: /* Width of this buffer's left fringe (in pixels).
A value of 0 means no left fringe is shown in this buffer's window.
A value of nil means to use the left fringe width from the window's frame.
*/);
DEFVAR_PER_BUFFER ("right-fringe-width", &BVAR (current_buffer,
right_fringe_width),
- Qnil,
+ Qintegerp,
doc: /* Width of this buffer's right fringe (in pixels).
A value of 0 means no right fringe is shown in this buffer's window.
A value of nil means to use the right fringe width from the window's frame.
*/);
@@ -5920,7 +5898,7 @@
A value of nil means to display fringes between margins and buffer text. */);
DEFVAR_PER_BUFFER ("scroll-bar-width", &BVAR (current_buffer,
scroll_bar_width),
- Qnil,
+ Qintegerp,
doc: /* Width of this buffer's scroll bars in pixels.
A value of nil means to use the scroll bar width from the window's frame. */);
@@ -6000,7 +5978,7 @@
cursor type. */);
DEFVAR_PER_BUFFER ("scroll-up-aggressively",
- &BVAR (current_buffer, scroll_up_aggressively), Qnil,
+ &BVAR (current_buffer, scroll_up_aggressively), Qfloatp,
doc: /* How far to scroll windows upward.
If you move point off the bottom, the window scrolls automatically.
This variable controls how far it scrolls. The value nil, the default,
@@ -6013,7 +5991,7 @@
between 0.0 and 1.0, inclusive. */);
DEFVAR_PER_BUFFER ("scroll-down-aggressively",
- &BVAR (current_buffer, scroll_down_aggressively), Qnil,
+ &BVAR (current_buffer, scroll_down_aggressively), Qfloatp,
doc: /* How far to scroll windows downward.
If you move point off the top, the window scrolls automatically.
This variable controls how far it scrolls. The value nil, the default,
@@ -6167,7 +6145,7 @@
and they have an ellipsis as well if ELLIPSIS is non-nil. */);
DEFVAR_PER_BUFFER ("buffer-display-count",
- &BVAR (current_buffer, display_count), Qnil,
+ &BVAR (current_buffer, display_count), Qintegerp,
doc: /* A number incremented each time this buffer is
displayed in a window.
The function `set-window-buffer' increments it. */);
@@ -6226,7 +6204,7 @@
`cursor-in-non-selected-windows'. */);
DEFVAR_PER_BUFFER ("line-spacing",
- &BVAR (current_buffer, extra_line_spacing), Qnil,
+ &BVAR (current_buffer, extra_line_spacing), Qnumberp,
doc: /* Additional space to put between lines when
displaying a buffer.
The space is measured in pixels, and put below lines on graphic displays,
see `display-graphic-p'.
=== modified file 'src/buffer.h'
--- a/src/buffer.h 2013-01-09 13:50:22 +0000
+++ b/src/buffer.h 2013-01-10 10:30:16 +0000
@@ -1078,7 +1078,6 @@
extern void set_buffer_temp (struct buffer *);
extern Lisp_Object buffer_local_value_1 (Lisp_Object, Lisp_Object);
extern void record_buffer (Lisp_Object);
-extern _Noreturn void buffer_slot_type_mismatch (Lisp_Object, int);
extern void fix_overlays_before (struct buffer *, ptrdiff_t, ptrdiff_t);
extern void mmap_set_vars (bool);
=== modified file 'src/data.c'
--- a/src/data.c 2013-01-02 16:13:04 +0000
+++ b/src/data.c 2013-01-10 10:30:16 +0000
@@ -914,13 +914,11 @@
case Lisp_Fwd_Buffer_Obj:
{
int offset = XBUFFER_OBJFWD (valcontents)->offset;
- Lisp_Object type = XBUFFER_OBJFWD (valcontents)->slottype;
+ Lisp_Object predicate = XBUFFER_OBJFWD (valcontents)->predicate;
- if (!(NILP (type) || NILP (newval)
- || (XINT (type) == Lisp_Int0
- ? INTEGERP (newval)
- : XTYPE (newval) == XINT (type))))
- buffer_slot_type_mismatch (newval, XINT (type));
+ if (!NILP (predicate) && !NILP (newval)
+ && NILP (call1 (predicate, newval)))
+ wrong_type_argument (predicate, newval);
if (buf == NULL)
buf = current_buffer;
=== modified file 'src/lisp.h'
--- a/src/lisp.h 2013-01-09 13:50:22 +0000
+++ b/src/lisp.h 2013-01-10 10:30:16 +0000
@@ -1450,7 +1450,8 @@
{
enum Lisp_Fwd_Type type; /* = Lisp_Fwd_Buffer_Obj */
int offset;
- Lisp_Object slottype; /* Qnil, Lisp_Int, Lisp_Symbol, or Lisp_String. */
+ /* One of Qnil, Qintegerp, Qsymbolp, Qstringp, Qfloatp or Qnumberp. */
+ Lisp_Object predicate;
};
/* struct Lisp_Buffer_Local_Value is used in a symbol value cell when
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] /srv/bzr/emacs/trunk r111471: Omit buffer_slot_type_mismatch and use generic predicates to enforce,
Dmitry Antipov <=