From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Spencer Baugh Newsgroups: gmane.emacs.devel Subject: [PATCH 06/10] Disallow using BVAR as an lvalue Date: Thu, 19 Nov 2020 10:38:10 -0500 Message-ID: <20201119153814.17541-7-sbaugh@catern.com> References: <87mtzil519.fsf@catern.com> Mime-Version: 1.0 Content-Transfer-Encoding: 8bit Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="2331"; mail-complaints-to="usenet@ciao.gmane.io" Cc: Spencer Baugh , Arnold Noronha , Stefan Monnier , Dmitry Gutov To: emacs-devel@gnu.org Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Thu Nov 19 16:42:19 2020 Return-path: Envelope-to: ged-emacs-devel@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1kfm4g-0000Sq-I3 for ged-emacs-devel@m.gmane-mx.org; Thu, 19 Nov 2020 16:42:18 +0100 Original-Received: from localhost ([::1]:56174 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kfm4f-0001pT-Hd for ged-emacs-devel@m.gmane-mx.org; Thu, 19 Nov 2020 10:42:17 -0500 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:40888) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kfm0t-0005MP-7A for emacs-devel@gnu.org; Thu, 19 Nov 2020 10:38:23 -0500 Original-Received: from venus.catern.com ([68.183.49.163]:54690) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kfm0q-0000do-1g for emacs-devel@gnu.org; Thu, 19 Nov 2020 10:38:22 -0500 Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=98.7.229.235; helo=localhost; envelope-from=sbaugh@catern.com; receiver= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=catern.com; s=mail; t=1605800298; bh=go1D9BbHIxTr6PfWyDITyaI3+PUHtv2raOnMt1J9lpc=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=Ft3I6l0R32dnjE1ufdZOAHHL94KXAeLM36Jgu83EHKVuXbMSwo5gA2e17zwE07Cav e2wjkOeQUXkt9a2GRQKiIzR4EoMjw5i3J5cogIm7WeTFA82XncaqdrBXkM5Ctv3Cjo 8NDpwxEuwIHPY856JADgQiwnh60PMnoG4NwRmo5E= Original-Received: from localhost (cpe-98-7-229-235.nyc.res.rr.com [98.7.229.235]) by venus.catern.com (Postfix) with ESMTPSA id CB3FC2DDAB9; Thu, 19 Nov 2020 15:38:18 +0000 (UTC) X-Mailer: git-send-email 2.28.0 In-Reply-To: <87mtzil519.fsf@catern.com> Received-SPF: pass client-ip=68.183.49.163; envelope-from=sbaugh@catern.com; helo=venus.catern.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/11/19 09:22:08 X-ACL-Warn: Detected OS = Linux 3.11 and newer X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.io gmane.emacs.devel:259435 Archived-At: This is a prerequisite for later changing BVAR into a function call. buffer.c keeps the ability to directly access struct buffer Lisp fields; it has to change to using the new local macro BVAR_DIRECT for this. buffer.c exclusively uses this ability to access the special struct buffer instances: buffer_local_flags, buffer_local_symbols, and buffer_defaults. None of those should fall back to looking up variables in buffer_defaults. --- src/buffer.c | 104 ++++++++++++++++++++++++++------------------------- src/buffer.h | 2 +- 2 files changed, 54 insertions(+), 52 deletions(-) diff --git a/src/buffer.c b/src/buffer.c index ba03fed3b9..6bcf1ad596 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -89,6 +89,8 @@ struct buffer buffer_local_symbols; #define PER_BUFFER_SYMBOL(OFFSET) \ (*(Lisp_Object *)((OFFSET) + (char *) &buffer_local_symbols)) +#define BVAR_DIRECT(buf, field) ((buf)->field ## _) + /* Maximum length of an overlay vector. */ #define OVERLAY_COUNT_MAX \ ((ptrdiff_t) min (MOST_POSITIVE_FIXNUM, \ @@ -5183,53 +5185,53 @@ init_buffer_once (void) bset_last_selected_window (&buffer_local_flags, make_fixnum (0)); idx = 1; - XSETFASTINT (BVAR (&buffer_local_flags, mode_line_format), idx); ++idx; - XSETFASTINT (BVAR (&buffer_local_flags, abbrev_mode), idx); ++idx; - XSETFASTINT (BVAR (&buffer_local_flags, overwrite_mode), idx); ++idx; - XSETFASTINT (BVAR (&buffer_local_flags, case_fold_search), idx); ++idx; - XSETFASTINT (BVAR (&buffer_local_flags, auto_fill_function), idx); ++idx; - XSETFASTINT (BVAR (&buffer_local_flags, selective_display), idx); ++idx; - XSETFASTINT (BVAR (&buffer_local_flags, selective_display_ellipses), idx); ++idx; - XSETFASTINT (BVAR (&buffer_local_flags, tab_width), idx); ++idx; - XSETFASTINT (BVAR (&buffer_local_flags, truncate_lines), idx); + XSETFASTINT (BVAR_DIRECT (&buffer_local_flags, mode_line_format), idx); ++idx; + XSETFASTINT (BVAR_DIRECT (&buffer_local_flags, abbrev_mode), idx); ++idx; + XSETFASTINT (BVAR_DIRECT (&buffer_local_flags, overwrite_mode), idx); ++idx; + XSETFASTINT (BVAR_DIRECT (&buffer_local_flags, case_fold_search), idx); ++idx; + XSETFASTINT (BVAR_DIRECT (&buffer_local_flags, auto_fill_function), idx); ++idx; + XSETFASTINT (BVAR_DIRECT (&buffer_local_flags, selective_display), idx); ++idx; + XSETFASTINT (BVAR_DIRECT (&buffer_local_flags, selective_display_ellipses), idx); ++idx; + XSETFASTINT (BVAR_DIRECT (&buffer_local_flags, tab_width), idx); ++idx; + XSETFASTINT (BVAR_DIRECT (&buffer_local_flags, truncate_lines), idx); /* Make this one a permanent local. */ buffer_permanent_local_flags[idx++] = 1; - XSETFASTINT (BVAR (&buffer_local_flags, word_wrap), idx); ++idx; - XSETFASTINT (BVAR (&buffer_local_flags, ctl_arrow), idx); ++idx; - XSETFASTINT (BVAR (&buffer_local_flags, fill_column), idx); ++idx; - XSETFASTINT (BVAR (&buffer_local_flags, left_margin), idx); ++idx; - XSETFASTINT (BVAR (&buffer_local_flags, abbrev_table), idx); ++idx; - XSETFASTINT (BVAR (&buffer_local_flags, display_table), idx); ++idx; - XSETFASTINT (BVAR (&buffer_local_flags, syntax_table), idx); ++idx; - XSETFASTINT (BVAR (&buffer_local_flags, cache_long_scans), idx); ++idx; - XSETFASTINT (BVAR (&buffer_local_flags, category_table), idx); ++idx; - XSETFASTINT (BVAR (&buffer_local_flags, bidi_display_reordering), idx); ++idx; - XSETFASTINT (BVAR (&buffer_local_flags, bidi_paragraph_direction), idx); ++idx; - XSETFASTINT (BVAR (&buffer_local_flags, bidi_paragraph_separate_re), idx); ++idx; - XSETFASTINT (BVAR (&buffer_local_flags, bidi_paragraph_start_re), idx); ++idx; - XSETFASTINT (BVAR (&buffer_local_flags, buffer_file_coding_system), idx); + XSETFASTINT (BVAR_DIRECT (&buffer_local_flags, word_wrap), idx); ++idx; + XSETFASTINT (BVAR_DIRECT (&buffer_local_flags, ctl_arrow), idx); ++idx; + XSETFASTINT (BVAR_DIRECT (&buffer_local_flags, fill_column), idx); ++idx; + XSETFASTINT (BVAR_DIRECT (&buffer_local_flags, left_margin), idx); ++idx; + XSETFASTINT (BVAR_DIRECT (&buffer_local_flags, abbrev_table), idx); ++idx; + XSETFASTINT (BVAR_DIRECT (&buffer_local_flags, display_table), idx); ++idx; + XSETFASTINT (BVAR_DIRECT (&buffer_local_flags, syntax_table), idx); ++idx; + XSETFASTINT (BVAR_DIRECT (&buffer_local_flags, cache_long_scans), idx); ++idx; + XSETFASTINT (BVAR_DIRECT (&buffer_local_flags, category_table), idx); ++idx; + XSETFASTINT (BVAR_DIRECT (&buffer_local_flags, bidi_display_reordering), idx); ++idx; + XSETFASTINT (BVAR_DIRECT (&buffer_local_flags, bidi_paragraph_direction), idx); ++idx; + XSETFASTINT (BVAR_DIRECT (&buffer_local_flags, bidi_paragraph_separate_re), idx); ++idx; + XSETFASTINT (BVAR_DIRECT (&buffer_local_flags, bidi_paragraph_start_re), idx); ++idx; + XSETFASTINT (BVAR_DIRECT (&buffer_local_flags, buffer_file_coding_system), idx); /* Make this one a permanent local. */ buffer_permanent_local_flags[idx++] = 1; - XSETFASTINT (BVAR (&buffer_local_flags, left_margin_cols), idx); ++idx; - XSETFASTINT (BVAR (&buffer_local_flags, right_margin_cols), idx); ++idx; - XSETFASTINT (BVAR (&buffer_local_flags, left_fringe_width), idx); ++idx; - XSETFASTINT (BVAR (&buffer_local_flags, right_fringe_width), idx); ++idx; - XSETFASTINT (BVAR (&buffer_local_flags, fringes_outside_margins), idx); ++idx; - XSETFASTINT (BVAR (&buffer_local_flags, scroll_bar_width), idx); ++idx; - XSETFASTINT (BVAR (&buffer_local_flags, scroll_bar_height), idx); ++idx; - XSETFASTINT (BVAR (&buffer_local_flags, vertical_scroll_bar_type), idx); ++idx; - XSETFASTINT (BVAR (&buffer_local_flags, horizontal_scroll_bar_type), idx); ++idx; - XSETFASTINT (BVAR (&buffer_local_flags, indicate_empty_lines), idx); ++idx; - XSETFASTINT (BVAR (&buffer_local_flags, indicate_buffer_boundaries), idx); ++idx; - XSETFASTINT (BVAR (&buffer_local_flags, fringe_indicator_alist), idx); ++idx; - XSETFASTINT (BVAR (&buffer_local_flags, fringe_cursor_alist), idx); ++idx; - XSETFASTINT (BVAR (&buffer_local_flags, scroll_up_aggressively), idx); ++idx; - XSETFASTINT (BVAR (&buffer_local_flags, scroll_down_aggressively), idx); ++idx; - XSETFASTINT (BVAR (&buffer_local_flags, header_line_format), idx); ++idx; - XSETFASTINT (BVAR (&buffer_local_flags, tab_line_format), idx); ++idx; - XSETFASTINT (BVAR (&buffer_local_flags, cursor_type), idx); ++idx; - XSETFASTINT (BVAR (&buffer_local_flags, extra_line_spacing), idx); ++idx; - XSETFASTINT (BVAR (&buffer_local_flags, cursor_in_non_selected_windows), idx); ++idx; + XSETFASTINT (BVAR_DIRECT (&buffer_local_flags, left_margin_cols), idx); ++idx; + XSETFASTINT (BVAR_DIRECT (&buffer_local_flags, right_margin_cols), idx); ++idx; + XSETFASTINT (BVAR_DIRECT (&buffer_local_flags, left_fringe_width), idx); ++idx; + XSETFASTINT (BVAR_DIRECT (&buffer_local_flags, right_fringe_width), idx); ++idx; + XSETFASTINT (BVAR_DIRECT (&buffer_local_flags, fringes_outside_margins), idx); ++idx; + XSETFASTINT (BVAR_DIRECT (&buffer_local_flags, scroll_bar_width), idx); ++idx; + XSETFASTINT (BVAR_DIRECT (&buffer_local_flags, scroll_bar_height), idx); ++idx; + XSETFASTINT (BVAR_DIRECT (&buffer_local_flags, vertical_scroll_bar_type), idx); ++idx; + XSETFASTINT (BVAR_DIRECT (&buffer_local_flags, horizontal_scroll_bar_type), idx); ++idx; + XSETFASTINT (BVAR_DIRECT (&buffer_local_flags, indicate_empty_lines), idx); ++idx; + XSETFASTINT (BVAR_DIRECT (&buffer_local_flags, indicate_buffer_boundaries), idx); ++idx; + XSETFASTINT (BVAR_DIRECT (&buffer_local_flags, fringe_indicator_alist), idx); ++idx; + XSETFASTINT (BVAR_DIRECT (&buffer_local_flags, fringe_cursor_alist), idx); ++idx; + XSETFASTINT (BVAR_DIRECT (&buffer_local_flags, scroll_up_aggressively), idx); ++idx; + XSETFASTINT (BVAR_DIRECT (&buffer_local_flags, scroll_down_aggressively), idx); ++idx; + XSETFASTINT (BVAR_DIRECT (&buffer_local_flags, header_line_format), idx); ++idx; + XSETFASTINT (BVAR_DIRECT (&buffer_local_flags, tab_line_format), idx); ++idx; + XSETFASTINT (BVAR_DIRECT (&buffer_local_flags, cursor_type), idx); ++idx; + XSETFASTINT (BVAR_DIRECT (&buffer_local_flags, extra_line_spacing), idx); ++idx; + XSETFASTINT (BVAR_DIRECT (&buffer_local_flags, cursor_in_non_selected_windows), idx); ++idx; /* buffer_local_flags contains no pointers, so it's safe to treat it as a blob for pdumper. */ @@ -5244,9 +5246,9 @@ init_buffer_once (void) /* Make sure all markable slots in buffer_defaults are initialized reasonably, so mark_buffer won't choke. */ reset_buffer (&buffer_defaults); - eassert (NILP (BVAR (&buffer_defaults, name))); + eassert (NILP (BVAR_DIRECT (&buffer_defaults, name))); reset_buffer_local_variables (&buffer_defaults, 1); - eassert (NILP (BVAR (&buffer_local_symbols, name))); + eassert (NILP (BVAR_DIRECT (&buffer_local_symbols, name))); reset_buffer (&buffer_local_symbols); reset_buffer_local_variables (&buffer_local_symbols, 1); /* Prevent GC from getting confused. */ @@ -5289,7 +5291,7 @@ init_buffer_once (void) set_buffer_overlays_after (&buffer_defaults, NULL); buffer_defaults.overlay_center = BEG; - XSETFASTINT (BVAR (&buffer_defaults, tab_width), 8); + XSETFASTINT (BVAR_DIRECT (&buffer_defaults, tab_width), 8); bset_truncate_lines (&buffer_defaults, Qnil); bset_word_wrap (&buffer_defaults, Qnil); bset_ctl_arrow (&buffer_defaults, Qt); @@ -5303,13 +5305,13 @@ init_buffer_once (void) bset_enable_multibyte_characters (&buffer_defaults, Qt); bset_buffer_file_coding_system (&buffer_defaults, Qnil); - XSETFASTINT (BVAR (&buffer_defaults, fill_column), 70); - XSETFASTINT (BVAR (&buffer_defaults, left_margin), 0); + XSETFASTINT (BVAR_DIRECT (&buffer_defaults, fill_column), 70); + XSETFASTINT (BVAR_DIRECT (&buffer_defaults, left_margin), 0); bset_cache_long_scans (&buffer_defaults, Qt); bset_file_truename (&buffer_defaults, Qnil); - XSETFASTINT (BVAR (&buffer_defaults, display_count), 0); - XSETFASTINT (BVAR (&buffer_defaults, left_margin_cols), 0); - XSETFASTINT (BVAR (&buffer_defaults, right_margin_cols), 0); + XSETFASTINT (BVAR_DIRECT (&buffer_defaults, display_count), 0); + XSETFASTINT (BVAR_DIRECT (&buffer_defaults, left_margin_cols), 0); + XSETFASTINT (BVAR_DIRECT (&buffer_defaults, right_margin_cols), 0); bset_left_fringe_width (&buffer_defaults, Qnil); bset_right_fringe_width (&buffer_defaults, Qnil); bset_fringes_outside_margins (&buffer_defaults, Qnil); diff --git a/src/buffer.h b/src/buffer.h index 0b26c56e89..ae2d785aff 100644 --- a/src/buffer.h +++ b/src/buffer.h @@ -282,7 +282,7 @@ struct buffer_text /* Most code should use this macro to access Lisp fields in struct buffer. */ -#define BVAR(buf, field) ((buf)->field ## _) +#define BVAR(buf, field) ((void)0, (buf)->field ## _) /* Access a BVAR from buffer_defaults */ #define BVAR_DEFAULT(field) (buffer_defaults.field ## _) -- 2.28.0