1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2025-12-14 18:10:32 -08:00
Commit graph

563 commits

Author SHA1 Message Date
Stefan Kangas
702cb123fa ; Fix typos 2025-02-22 14:48:29 +01:00
Paul Eggert
4da38c6321 Update copyright year to 2025
Run "TZ=UTC0 admin/update-copyright".
2025-01-01 07:39:17 +00:00
Alan Mackenzie
643e32340d CC Mode: Fix various minor indentation bugs
As part of this, introduce a second anchor point to the
syntactic symbols brace-list-intro and enum-intro, the position
of the opening brace.

* lisp/progmodes/cc-align.el
(c-lineup-item-after-paren-at-boi): New function.

* /lisp/progmodes/cc-engine.el
(c-foreign-truncate-lit-pos-cache)
(c-foreign-init-lit-pos-cache): Use
c-truncate-lit-pos/state-cache in place of an older function.
(c-no-bracelist-cache): Update its definition to exclude
conses.
(c-strip-conses): New function.
(c-inside-bracelist-p): Use c-strip-conses.
(c-add-stmt-syntax): In the "go out a block" loop, go out of a
brace at BOI when there's non-whitespace text after it.
Refactor an `if' form containing a cond form into a cond form.
Add the new second second anchor point into syntactic contexts
with brace-list-intro and enum-intro.  Anchor brace-list-close
and enum-close elements on the individual declarations in
struct, etc., variable declarations.
(c-guess-basic-syntax, CASE 20): Use the new constraint-cont
syntactic symbol.
(c-guess-basic-syntax, CASE 9B): Anchor brace-list-close and
enum-close elements on the individual declarations in struct,
etc., variable declarations.
(c-guess-basic-syntax, CASEs 9C, 9D): Add the new second anchor
point into brace-list-intro and enum-intro syntactic contexts.

* lisp/progmodes/cc-mode.el (c-locate-first-punctuation-prop):
New function.
(c-depropertize-CPP): Use c-locate-first-punctuation-prop.

* lisp/progmodes/cc-vars.el (c-offsets-alist): Amend the
entries for constraint-cont, brace-list-intro, and enum-intro,
using c-lineup-item-after-paren-at-boi.

* doc/misc/cc-mode.texi (List Line-Up): Add a description of
c-lineup-item-after-paren-at-boi.
2024-12-31 18:39:57 +00:00
Alan Mackenzie
0334b0743f CC Mode: Minor corrections and tidy ups for cache invalidation
These cache variables are c-lit-pos-cache-limit,
c-semi-near-cache-limit, c-full-near-cache-limit, and
c-state-cache-invalid-pos.

* lisp/progmodes/cc-awk.el
(c-awk-set-string-regexp-syntax-table-properties): Invalidate
the caches after changing the 'syntax-table property.

* lisp/progmodes/cc-defs.el (c-put-string-fence-trim-caches):
New macro.
(c-unmark-<-or->-as-paren): New name for c-unmark-<->-as-paren.
(Also renamed throughout CC Mode)

* lisp/progmodes/cc-engine.el (c-propertize-ml-string-opener):
Add missing cache invalidation.

* lisp/progmodes/cc-mode.el (c-neutralize-CPP-line): Remove
syntax-table properties from < and > as needed.
(c-put-syn-tab): Add missing cache invalidation.
2024-12-28 17:16:04 +00:00
Alan Mackenzie
b5f1a9e6d3 CC Mode: Optimize scanning of heavily nested brace blocks
This should have fixed bug#74357.

* lisp/progmodes/cc-engine.el (c-laomib-cache): Change the
size of this cache from 4 to 50.
(c-laomib-get-cache, c-laomib-put-cache): Use assq, memq, and
ntake or butlast, rather than looping through the cache with a
cdr loop.  No longer attempt to preserve the "largest" cache
element.
(c-looking-at-or-maybe-in-bracelist): Extend the range covered
by a c-laomib-cache element, rather than adding a second
element to the cache.
(c-no-bracelist-cache): A new cache for the use of
c-inside-bracelist-p, based on the c-parse-state cache.
(c-inside-bracelist-p): Use the new cache to call
c-looking-at-or-maybe-in-bracelist less often.

* lisp/progmodes/cc-mode.el (c-basic-common-init): Initialize
c-no-bracelist-cache.
(c-before-change): Invalidate c-no-bracelist-cache.
2024-12-01 17:30:40 +00:00
Alan Mackenzie
5340fdaade CC Mode: Fix dodgy lisp `let' form.
* lisp/progmodes/cc-engine.el (c-forward-sws): Move a `setq'
form from out of a let binding.  This form could have been
affected by the byte compiler bug bug#67116 before this was
fixed.
2024-10-16 13:21:59 +00:00
Alan Mackenzie
fdac10b216 CC Mode: Rationalize and optimize cache invalidation (2).
Replace separate syntax-table text property changes and cache
invalidation with macros which do both together.  Correct a bug
in the invocation of XEmacs's map-extents.

* lisp/progmodes/cc-defs.el (c-put-syntax-table-trim-caches)
(c-clear-syntax-table-trim-caches)
(c-clear-syntax-table-properties-trim-caches)
(c-clear-syntax-table-with-value-trim-caches)
(c-clear-syntax-table-with-value-on-char-trim-caches)
(c-put-syntax-table-properties-on-char-trim-caches): New
macros.
(c-clear-char-properties, c-clear-char-property-with-value)
(c-clear-char-property-with-value-on-char): Correct the
invocation of XEmacs's map-extents by returning nil from the
mapping function to prevent premature exit from map-extents.
(c-clear-char-property-with-value-function)
(c-clear-char-property-with-value)
(c-clear-char-property-with-value-on-char-function)
(c-clear-char-property-with-value-on-char)
(c-put-char-properties-on-char): Enhance to return the position
of the first changed char property (or nil).

* lisp/progmodes/cc-awk.el
(c-awk-set-string-regexp-syntax-table-properties)
(c-awk-set-syntax-table-properties)
* lisp/progmodes/cc-engine.el
(c-depropertize-ml-string-delims)
(c-after-change-unmark-ml-strings, c-propertize-ml-string-id)
(c-propertize-ml-string-opener, c-depropertize-ml-string)
(c-depropertize-ml-strings-in-region)
* lisp/progmodes/cc-mode.el (c-depropertize-CPP)
(c-neutralize-CPP-line, c-put-syn-tab, c-clear-syn-tab)
(c-parse-quotes-before-change, c-parse-quotes-after-change)
(c-before-change-fix-comment-escapes)
(c-after-change-fix-comment-escapes): Use the new macros from
cc-defs.el.

* lisp/progmodes/cc-mode.el
(c-trim-cache-first-punctuation-prop): Remove.
(c-depropertize-CPP): Remove calls to the above function.
2024-10-15 21:14:34 +00:00
Alan Mackenzie
4c7a6dc1a0 CC Mode: Remove search limit to fontify first decl in xdisp.c
An unneeded 10,000 character search limit prevents the full
fontification of the first declaration of xdisp.c, since the
introductory commentary is longer than that.

* lisp/progmodes/cc-engine (c-find-decl-spots): Remove the
10,000 char limit.
2024-10-05 17:28:28 +00:00
Alan Mackenzie
0a1628bf69 CC Mode: Parse C++ lambda functions more correctly
This fixes bug#72695.

* lisp/progmodes/cc-align.el (c-lineup-topmost-intro-cont): Do
not indent further a line following a closing brace of a
requires clause.

* lisp/progmodes/cc-engine.el (c-forward-keyword-clause):
Separate the handling of "any-paren-kwds" into
"type-paren-kwds" and "nontype-paren-kwds", simplifying the
handling of the latter.
(c-forward-primary-expression): Recognize (...) followed by {
as a primary expression.
(c-looking-at-or-maybe-in-bracelist): No longer recognize an
enum list as a brace list.  Remove the handling of enum lists.
(c-looking-at-c++-lambda-expression)
(c-backward-over-lambda-expression): New functions.
(c-c++-vsemi-p): Don't recognize the end of requires clauses as
virtual semicolons.
(c-guess-basic-syntax): CASE 5U - new cond arm to recognize
being after a requires clause.  These lines now get syntax
topmost-intro-cont rather than topmost-intro, and their anchor
positions are now on the topmost-intro line rather than the
previous topmost-intro-cont.
Throughout the file: simplify handling of
c-fun-name-substitute-key, where there is no need to check for
a following _ character, and introduce c-requires-clause-key
for greater accuracy in parsing, even though both of these are
just "requires".

* lisp/progmodes/cc-fonts.el (c-get-fontification-context):
Tidy up the handling of c-fun-name-substitue-key, as in
cc-engine.el.

* lisp/progmodes/cc-langs.el (c-lambda-spec-kwds)
(c-lambda-spec-key): New lang vars.
(c-fun-name-substitute-key): Now an adorned expression.
(c-requires-clause-kwds, c-requires-clause-key): New lang vars.
2024-09-27 13:42:40 +00:00
Alan Mackenzie
c2d6f191d4 CC Mode: Separate indentation of enums from that of brace lists
This will allow enums to be indented as in the GNU coding
standards without affecting brace lists.

* lisp/progmodes/cc-align.el
(c-lineup-arglist-intro-after-paren)
(c-lineup-arglist-close-under-paren)
(c-lineup-whitesmith-in-block)
(c-lineup-after-whitesmith-blocks): Amend doc strings to
indicate they can be used for enum-* syntactic symbols too.

* lisp/progmodes/cc-engine.el (c-looking-at-decl-block)
(c-backward-typed-enum-colon, c-backward-over-enum-header):
Rename c-after-brace-list-key to c-after-enum-list-key and
c-brace-list-key to c-enum-list-key.
(c-at-enum-brace): New function.
(c-inside-bracelist-p): Don't check for enums any more.
(c-add-stmt-syntax): New cond arm for enums.
(c-guess-continued-construct CASE B.6) New code for enum-open.
(c-guess-basic-syntax CASE 5A.3, CASE 7B, CASE 9, CASE 9B)
(CASE 9C, CASE 9D): Use the new function c-at-enum-brace, and
use enum-* syntactic symbols rather than brace-list-* ones
where appropriate.
(c-used-syntactic-symbols): New dynamic variable.
(c-evaluate-offset): Add handling for a different syntactic
symbol as the cdr of a c-offsets-alist element.

* lisp/progmodes/cc-fonts.el (c-get-fontification-context):
Add a call to c-at-enum-brace since c-inside-bracelist-p no
longer handles enums.
(c-font-lock-enum-body, c-font-lock-enum-tail): Condense calls
to c-backward-over-enum-header to c-at-enum-brace.
(c-basic-matchers-after): Replace a c-brace-list-decl-kwds with
c-enum-list-kwds.

* lisp/progmodes/cc-langs.el (c-enum-list-kwds)
(c-enum-list-key): New names for c-brace-list-decl-kwds and
c-brace-list-key.
(c-after-enum-list-kwds, c-after-enum-list-key): New names for
c-after-brace-list-decl-kwds and c-after-brace-list-key.
(c-enum-list-key, c-after-enum-list-key): Add code to
use a value of an old name, should a derived mode still use
that.
(c-defun-type-name-decl-kwds, c-typedef-decl-kwds)
(c-typeless-decl-kwds, c-prefix-spec-kwds)
(c-brace-id-list-kwds, c-enum-clause-introduction-re): Use
c-enum-list-kwds rather than c-brace-list-decl-kwds.

* lisp/progmodes/cc-styles.el (c-read-offset): Add "a
syntactic symbol" into an error message text.

* lisp/progmodes/cc-vars.el (c-valid-offset): Allow for a
syntactic symbol as the parameter.
(c-offsets-alist): Add new syntactic symbols enum-open,
enum-close, enum-intro, and enum-entry.

* doc/misc/cc-mode.texi (Syntactic Symbols): Add a note that
anchor points are briefly documented in cc-vars.el.  Correct
the suffix "-block-intro" to "-intro".  Remove "an enum or"
from the descriptions of the brace-list-* syntactic symbols.
Add in new descriptions for the enum-* syntactic symbols.
(Brace List Symbols): Remove references to enums.  Add a note
that enums are no longer brace-lists.
(Enum Symbols): A new subsection documenting the new enum-*
syntactic symbols.
(c-offsets-alist): Document the new possibility, syntactic
symbol, for the cdr of an alist entry.
(Brace/Paren Line-Up, List Line-Up): Note that the new enum
syntactic symbols can be handled by these lineup functions.
2024-09-24 20:45:29 +00:00
Alan Mackenzie
086cb1b590 CC Mode: fix minor errors in the fontification of enums.
1: Fix the typing of a space on the { line in an enum
specification which is the first item in a buffer.  This
defontified the enum's identifiers.
2: Fix the typing of a space on the line of the enum's last
identifier.  This defontified that identifier for
jit-lock-context-time.

* lisp/progmodes/cc-engine.el (c-forward-declarator): Cease
rejecting the identifier if there are no further tokens before
LIMIT.

* lisp/progmodes/cc-mode.el (c-fl-decl-start): Accept a
backward search as succeeding if it hits point-min.
2024-09-21 16:46:32 +00:00
Alan Mackenzie
caf7426f0c FIx spurious fontification of variable in Java Mode
This fixes bug#72126.

* lisp/progmodes/cc-engine.el (c-forward-<>-arglist): Remove
tentative type identifier from c-record-type-identifiers should
it turn out not to be a type.
2024-07-22 12:24:43 +00:00
Stefan Kangas
a6cab228d4 ; Fix typos 2024-07-18 11:46:50 +02:00
Stefan Kangas
45a20d781a ; Fix typos in symbols 2024-06-29 17:29:38 +02:00
Alan Mackenzie
71491fe6f4 Run c-unmark-<>-around-region in after-change-functions always.
This fixes bug#70435.

* lisp/progmodes/cc-engine.el (c-unmark-<>-around-region): Run
its contents in after-change-functions for a deletion, so that
c-new-BEG and c-new-END get set.  Add a new test (> end beg)
in a check for unterminated string handling.
2024-05-05 11:34:14 +00:00
Alan Mackenzie
ed85132740 CC Mode: Handle C++20's if consteval
* lisp/progmodes/cc-engine.el (c-after-conditional): Handle the
new keyword in place of a paren sexp after `if'.

* lisp/progmodes/cc-langs.el (c-negation-op-re)
(c-paren-clause-kwds, c-paren-clause-key)
(c-block-stmt-with-kwds, c-block-stmt-with-key): New
lang-consts/vars.

* if-11.cc, if-11.res: New test files.
2024-03-26 20:59:43 +00:00
Stefan Kangas
9364c28959 ; Fix typos in symbol names 2024-01-21 15:28:06 +01:00
Po Lu
ecf08f0621 Merge from savannah/emacs-29
dc4e6b1329 ; Update copyright years in more files
64b3777631 ; Run set-copyright from admin.el
8e1c56ae46 ; Add 2024 to copyright years

# Conflicts:
#	doc/misc/modus-themes.org
#	doc/misc/texinfo.tex
#	etc/NEWS
#	etc/refcards/ru-refcard.tex
#	etc/themes/modus-operandi-theme.el
#	etc/themes/modus-themes.el
#	etc/themes/modus-vivendi-theme.el
#	lib/alloca.in.h
#	lib/binary-io.h
#	lib/c-ctype.h
#	lib/c-strcasecmp.c
#	lib/c-strncasecmp.c
#	lib/careadlinkat.c
#	lib/cloexec.c
#	lib/close-stream.c
#	lib/diffseq.h
#	lib/dup2.c
#	lib/filemode.h
#	lib/fpending.c
#	lib/fpending.h
#	lib/fsusage.c
#	lib/getgroups.c
#	lib/getloadavg.c
#	lib/gettext.h
#	lib/gettime.c
#	lib/gettimeofday.c
#	lib/group-member.c
#	lib/malloc.c
#	lib/md5-stream.c
#	lib/md5.c
#	lib/md5.h
#	lib/memmem.c
#	lib/memrchr.c
#	lib/nanosleep.c
#	lib/save-cwd.h
#	lib/sha1.c
#	lib/sig2str.c
#	lib/stdlib.in.h
#	lib/strtoimax.c
#	lib/strtol.c
#	lib/strtoll.c
#	lib/time_r.c
#	lib/xalloc-oversized.h
#	lisp/auth-source-pass.el
#	lisp/emacs-lisp/lisp-mnt.el
#	lisp/emacs-lisp/timer.el
#	lisp/info-look.el
#	lisp/jit-lock.el
#	lisp/loadhist.el
#	lisp/mail/rmail.el
#	lisp/net/ntlm.el
#	lisp/net/webjump.el
#	lisp/progmodes/asm-mode.el
#	lisp/progmodes/project.el
#	lisp/progmodes/sh-script.el
#	lisp/textmodes/flyspell.el
#	lisp/textmodes/reftex-toc.el
#	lisp/textmodes/reftex.el
#	lisp/textmodes/tex-mode.el
#	lisp/url/url-gw.el
#	m4/alloca.m4
#	m4/clock_time.m4
#	m4/d-type.m4
#	m4/dirent_h.m4
#	m4/dup2.m4
#	m4/euidaccess.m4
#	m4/fchmodat.m4
#	m4/filemode.m4
#	m4/fsusage.m4
#	m4/getgroups.m4
#	m4/getloadavg.m4
#	m4/getrandom.m4
#	m4/gettime.m4
#	m4/gettimeofday.m4
#	m4/gnulib-common.m4
#	m4/group-member.m4
#	m4/inttypes.m4
#	m4/malloc.m4
#	m4/manywarnings.m4
#	m4/mempcpy.m4
#	m4/memrchr.m4
#	m4/mkostemp.m4
#	m4/mktime.m4
#	m4/nproc.m4
#	m4/nstrftime.m4
#	m4/pathmax.m4
#	m4/pipe2.m4
#	m4/pselect.m4
#	m4/pthread_sigmask.m4
#	m4/readlink.m4
#	m4/realloc.m4
#	m4/sig2str.m4
#	m4/ssize_t.m4
#	m4/stat-time.m4
#	m4/stddef_h.m4
#	m4/stdint.m4
#	m4/stdio_h.m4
#	m4/stdlib_h.m4
#	m4/stpcpy.m4
#	m4/strnlen.m4
#	m4/strtoimax.m4
#	m4/strtoll.m4
#	m4/time_h.m4
#	m4/timegm.m4
#	m4/timer_time.m4
#	m4/timespec.m4
#	m4/unistd_h.m4
#	m4/warnings.m4
#	nt/configure.bat
#	nt/preprep.c
#	test/lisp/register-tests.el
2024-01-02 10:28:14 +08:00
Po Lu
8e1c56ae46 ; Add 2024 to copyright years 2024-01-02 09:47:10 +08:00
Stefan Kangas
06a12b0ccc ; Fix typos 2023-12-10 13:22:04 +01:00
Alan Mackenzie
2fca889cfb CC Mode: Fontify int unsigned Foo;
This fixes bug#59953.  Foo now gets fontified when unsigned
comes after int.

* lisp/progmodes/cc-engine.el (c-forward-type): Refactor nested
`if' forms into a cond form.  Loop around matches for
c-opt-type-component-key, advancing over them.
2023-11-24 12:22:08 +00:00
Alan Mackenzie
36d9b8ce84 CC Mode: Add second anchor point to class-open and class-close
This fixes the second (last) part of bug#66911.  The new second
anchor points allow the indentation of braces in template
classes to be anchored on the keyword 'class' rather than the
`template' at the beginning of the statement.

* lisp/progmodes/cc-engine.el (c-add-class-syntax): Add &rest
args parameter for additional anchor points.  Pass these to
c-add-syntax.
(c-guess-continued-construct): CASE B.1: Note return value from
c-looking-at-decl-block and pass this to c-add-syntax for a
class-open construct.
(c-guess-basic-syntax): CASE 4: Duplicate anchor position for
class-open.
(c-guess-basic-syntax): CASE 5A.2: Note return value of
c-looking-at-decl-block and pass it as extra argument to
c-add-syntax for a class-open construct.
(c-guess-basic-syntax): CASE 5G: Call c-looking-at-decl-block
to determine the second anchor point for a class-close, and
pass it to c-add-class-syntax.

* doc/misc/cc-mode.texi (Class Symbols): Document the anchor
points for class-open and class-close.
2023-11-24 10:03:33 +00:00
Alan Mackenzie
9bda21ad0d CC Mode: Handle noise clauses, template arglists in any order
This fixes the first part of bug#66911.

* lisp/progmodes/cc-engine.el (c-looking-at-decl-block): Skip
back over template arglists and noise clauses in any order, no
longer assuming the noise clauses are before the template
arglist in the buffer.  When scanning forward, take noise
clauses into account.  Refactor a collection of nested `if'
forms as a cond form.
2023-11-23 16:31:52 +00:00
Alan Mackenzie
9795934965 Fix c-in-knr-argdecl to avoid false recognition of K&R
In the OP's test case, the type of a declaration was a macro
with parentheses, which confused c-in-knr-argdecl.

* lisp/progmodes/cc-engine.el (c-in-knr-argdecl): Amend this
function to return nil if a "parameter declaration" can't be
parsed as a declaration.
2023-10-13 14:27:18 +00:00
Alan Mackenzie
688c893b18 CC Mode: Fix bug in whitespace scanning functions
c-forward-sws and c-backward-sws were scanning over spaces and
linefeeds marked with the string-fence syntax-table text
property.  Fix this by (i) removing the WS text properties
c-in-sws and c-is-sws from characters when setting the
string-fence on them; (ii) checking the syntax of "space"
characters when scanning over them.

* lisp/progmodes/cc-defs.el (c-skip-ws-chars-forward)
c-skip-ws-chars-backward, c-put-string-fence): New macros.

* lisp/progmodes/cc-awk.el
(c-awk-set-string-regexp-syntax-table-properties): Use
c-put-string-fence.

* lisp/progmodes/cc-engine.el (c-beginning-of-statement-1):
Correct the determination of macro-start.
(c-forward-sws, c-backward-sws): Replace skip-chars-forward by
c-skip-ws-chars-forward and skip-chars-backward by
c-skip-ws-chars-backward.
(c-unmark-<>-around-region, c-after-change-unmark-ml-strings)
(c-propertize-ml-string-opener): Use c-put-string-fence.

* lisp/progmodes/cc-mode.el (c-put-syn-tab): Use
c-put-string-fence when appropriate.
2023-09-29 12:07:32 +00:00
Alan Mackenzie
793a416653 objc-mode: Fix exceptions in fontification.
These exceptions ("Invalid search bound (wrong side of point)")
were observed in test suite file class-24.m when moving point
up and down a line at a time.

* lisp/progmodes/cc-engine.el (c-forward-declarator): In the
c-syntactic-re-search-forward ~30 lines from the end of the
function amend the regexp for objc-mode such that "@end"
terminates the search, but "<" doesn't.

* lisp/progmodes/cc-fonts.el
(c-make-font-lock-search-function): supply a non-nil
CHECK-POINT argument to c-make-font-lock-search-form.
2023-07-04 12:43:31 +00:00
Alan Mackenzie
be437883c6 Amend the handling of c-laomib-cache.
There was unstable syntactic analysis of lines which were brace
lists.  This fixes bug#64133.

* lisp/progmodes/cc-engine.el (c-laomib-cache): Allow several
entries with the same LIM element corresponding to distinct
scanning regions.
(c-laomib-get-cache): Add new parameter START.  Adjust to be
able to have entries with the same LIM element and handle them
correctly.
(c-laomib-put-cache): Amend the handling of cache entries with
the same LIM element.
(c-looking-at-or-maybe-in-bracelist): Supply the needed new
argument to c-laomib-get-cache.  Add in a new call to
c-laomib-put-cache.
2023-06-27 20:11:48 +00:00
Alan Mackenzie
7220bbe051 Correction to patch on 2023-06-21 15:36:56 +0000.
This corrects an error where commenting out a template closer
left a subsequent closer without a syntax-table text property.

* lisp/progmodes/cc-engine.el (c-unmark-<>-around-region):
Don't scan from the inside of 2-character comment delimiters.
Replace invalid skip-syntax-forward call with a null string
argument by an invocation of
c-search-forward-non-nil-char-property.
2023-06-25 15:06:05 +00:00
Alan Mackenzie
dae8aab528 Correct handling of template markers on deletion/insertion
This fixes bug#62841.

In particular, correct the syntax-table text properties on the
remaining <...>s.

* lisp/progmodes/cc-align.el
(c-lineup-template-args-indented-from-margin): New lineup
function.

* lisp/progmodes/cc-defs.el (c-put-char-properties): New macro.
(c-search-forward-non-nil-char-property): Handle terminating
limit correctly.

* lisp/progmodes/cc-engine.el
(c-clear-<-pair-props-if-match-after)
(c-clear->-pair-props-if-match-before): Return the position
outside the matching < or >, not merely t.
(c-end-of-literal): New function.
(c-unmark-<>-around-region): New function.
(c-before-change-check-<>-operators): Refactor, calling
c-unmark-<>-around-region.
(c-<>-get-restricted): New function, extracted from
c-restore-<>-properties.
(c-restore-<>-properties): Handle ">" characters whose matching
"<" has not yet been encountered.
(c-ml-string-opener-at-or-around-point): Fix an off by one
error.
(c-backward-<>-arglist): New parameter restricted-function, a
function which calculates c-restricted-<>-arglists for the
current operation.

* lisp/progmodes/cc-fonts.el (c-font-lock-c++-using): Check
point is less than limit in the loop.

* lisp/progmodes/cc-langs.el
(c-get-state-before-change-functions)
(c-before-font-lock-functions): Add the new function
c-unmark-<>-around-region into the C++ and Java values of the
variable.

* lisp/progmodes/cc-mode.el (c-clear-string-fences)
(c-restore-string-fences): Neutralize and restore the
syntax-table properties between an unbalanced " and EOL.

* lisp/progmodes/cc-vars.el (c-offsets-alist): Put new lineup
function c-lineup-template-args-indented-from-margin into entry
for template-args-cont.

* doc/misc/cc-mode.texi (List Line-Up): Document
c-lineup-template-args-indented-from-margin.
2023-06-21 15:43:41 +00:00
Alan Mackenzie
bb7605c087 Fontify Java constructor names and arglists
This fixes bug#63328.

* lisp/progmodes/cc-engine.el (c-forward-decl-or-cast-1): New
variable got-stmt-block.  After scanning an arglist, set
got-arglist to t.  When we have as yet no identifier,
got-arglist, and scan an open brace, test the "type" for being
the name of the enclosing class.
(c-directly-in-class-called-p): Test the two names for
equality, not merely one being the head of the other.
2023-05-26 14:32:07 +00:00
Alan Mackenzie
c9cf673d50 CC Mode: Fontify function names after long stretches of macros.
This fixes bug#63322.

* lisp/progmodes/cc-engine.el (c-find-decl-spots): When a
search back over syntactic whitespace hits its limit, set
cfd-match-pos and cfd-continue-pos to cfd-start-pos.

* lisp/progmodes/cc-mode.el (c-fl-decl-start): Remove an
unneeded (and harmful) condition on (point)'s position in the
main loop.
2023-05-12 10:33:15 +00:00
Alan Mackenzie
4707f6adf6 Fontify "extern foo ();" correctly inside a function
This fixes bug#63224.

* lisp/progmodes/cc-engine.el (c-forward-type): Handle the "("
as a special case by trying to parse it with
c-forward-declarator and accepting it as a typeless function
when that fails.
2023-05-03 10:01:14 +00:00
Alan Mackenzie
dc842a71ed Improve C++ concept indentation.
This fixes bug #62386.

* lisp/progmodes/cc-engine.el (c-forward-over-compound-identifier): Don't
move forward over whitespace following the identifier.
(c-forward-primary-expression): Add parameter stop-at-end meaning don't move
forward over whitespace after the construct when non-nil.  Don't recognise a
primary expression when an open brace follows a parenthesized expression.
(c-forward-constraint-clause): Extracted from c-forward-c++-requires-clause.
Add parameter stop-at-end as above.
(c-forward-c++-requires-clause): New stop-at-end parameter as above.  Call the
new function c-forward-constraint-clause.
(c-forward-concept-fragment, c-looking-at-concept)
(c-in-requires-or-at-end-of-clause, c-c++-vsemi-p): New functions.
(c-guess-basic-syntax): New CASE 5A.7: "defun" open in a requires expression.
CASE 5F: Close of a non-class declaration level block: Move to earlier in the
function.
CASE 5D: Also check for being in or at end of a constraint.
New CASE 20: A C++ requires sub-clause.
New CASE 16G: The closing brace of a requires clause.
New CASE 17J: First "statement" inside a requires "function".
(c-forward-primary-expression, c-forward-declarator, c-forward-decl-or-cast-1)
(c-looking-at-or-maybe-in-bracelist): Amend the method of detecting end of
symbol "requires" (aka c-fun-name-substitute-key).

* lisp/progmodes/cc-fonts.el (c-get-fontification-context): Amend the method
of detecting end of symbol "requires".

* lisp/progmodes/cc-langs.el (c-at-vsemi-p-fn): Change the C++ entry to
c-c++-vsemi-p.
(c-fun-name-substitute-key): Change to an unadorned regexp.

* lisp/progmodes/cc-vars.el (c-offsets-alist): Add new syntactic symbol
constraint-cont.

* doc/misc/cc-mode.texi (Syntactic Symbols): Add an entry for contraint-cont.
(Constraint Symbols): New node under Syntactic Symbols.
2023-04-14 16:37:33 +00:00
Alan Mackenzie
e579c9cc33 CC Mode: Miscellaneous coding fixes in c-forward-type
This fixes bug #62339.

* lisp/progmodes/cc-engine.el (c-forward-type): In the implicit int handling,
respect the setting of the parameter stop-at-end.  In the case "normal
identifier", insert a missing (c-forward-syntactic-ws); this fixes the bug.
Here, correct the wrong return value `prefix' to t.
2023-04-06 09:14:56 +00:00
Alan Mackenzie
a42f4a775b CC Mode: Fix fontification problems shown by test file templates-20.cc
Also fix one problem evident in test file decls-10.cc.

* lisp/progmodes/cc-engine.el (c-brace-stack-at): Bind
c-record-type-identifiers to nil to prevent called functions recording
identifiers spuriously.
(c-forward-<>-arglist-recur): Revert the ill-advised optimization from autumn
2022 which attempted to avoid re-marking c-type text properties inside angle
bracket arglists.
(c-forward-decl-or-cast-1): Accept the semicolon at the end of "t8 * id;" as
sufficient evidence to fontify as a declaration (not a multiplication).

* lisp/progmodes/cc-fonts.el (c-font-lock-c++-using): No longer fontify the
last component of foo::bar with c-reference-face-name.
2023-04-05 13:02:12 +00:00
Mattias Engdegård
7f740b87d8 Remove ineffective uses of condition-case
* lisp/gnus/message.el (message-setup-1):
* lisp/progmodes/cc-engine.el (c-forward-single-comment):
* lisp/progmodes/ruby-mode.el (ruby-add-log-current-method):
Eliminate uses of condition-case without handlers.  These seem to have
been there for quite a long time.  This change does not affect the
behaviour of the code and makes some warnings go away.
2023-03-03 11:36:09 +01:00
Stefan Kangas
0be5f7ab63 Merge from origin/emacs-29
1769a58830 Fix some uses of 'use-dialog-box'
deef41a825 Fix hi-lock-tests when 'use-dialog-box' is non-nil
5093a53496 Fix regression due to change in face sort order by 'face-...
3e74763099 * lisp/files.el (file-equal-p): Work around Haiku stat bug.
13fd7667f9 ; * src/treesit.c: Improve sectioning.
a40b1745d4 (project-vc-backend-markers-alist): Add entry for vc-got
18e96ed7c8 project.el: Extract backend->marker association for a defvar
0a5615669a Don't completely clip into visible range in treesit_recor...
5b34fc0708 * lisp/treesit.el (treesit-node-at): Update docstring (bu...
1c7d762378 ; Minor copyedit of NEWS wrt *-ts-modes
09fad246de * lisp/calc/calc.el (calc-mode): Improve docstring.
8aad8d75aa ; Improve and update documentation of native compilation
d6e4f24372 Merge 'emacs-29' into 'feature/inhibit-native-comp-cleanup'
a555abc56d Fix order of faces in 'face-list'
b44a7ff85d Allow 'icon-title-format' to have the value t
f1f571e72a Add electric indent for preproc directives
83af806ab7 Rename 'emacs-news-toggle-tag' to 'emacs-news-cycle-tag'
5bc88b3b17 Add menu to news-mode
40f4bc4e0a ; Avoid installing VC package dependencies multiple times
1c9d81a2b4 Attempt to recognise if a VC package has no Elisp files
2550e8bb0b Fix mule-tests under en_US.UTF-8 locale
3279530993 Move block closer above declaration_list rule (bug#61531)
b18754bb17 Minor improvements in c-ts-mode and docs
3c6b726a7b Add super node as a keyword
1917c51fe6 ; Prevent ERC-induced false positive in JUnit report
b16965ef7e Delete perplexing paragraph from Gnus manual
43c62a4732 ; Fix typo
fdac69b45e ; Auto-commit of loaddefs files.
7678b7e46f Eglot: check server capability before sending didSave (bu...
a3a1ef7bd5 Fix rust-ts-mode type and module highlighting (Bug#61302)
477aa047ee rust-ts-mode: Highlight variable reassignments
5206a551c1 Improve backward compatibility of save-restriction
accd88d554 Don't indent template_string contents (bug#61503)
d97a383996 csharp-ts-mode: fontify compiler directives (bug#61512)
420d2cae84 Update to Transient v0.3.7-209-gdab1dfa
a3751b5d0c ; Raise an error if a VC package checkout is empty
6a32ba8b69 ; Fix the installation of dependencies for VC packages
4eac80fcc3 ; Prepare to update ERC version to 5.5
4f099a7217 ; Remove failing erc-reuse-buffers test
ce4a066ed1 * Generate trampolines in a temporary directory if no oth...
4bb27a5ca9 ; Minor docs copyedits
13bcff3da5 Merge branch 'emacs-29' of git.savannah.gnu.org:/srv/git/...
3d572ae0d5 Rename with/without-narrowing to with/without-restriction
d806b0e33c * lisp/repeat.el: Rename internal function and variable (...
1a64f326e0 * Fix previous change
95692f6754 Rename native-comp-deferred-compilation-deny-list
8d8464bd5a Rename native-comp-deferred-compilation into native-comp-...
5d0912f144 Rename comp-enable-subr-trampolines into native-comp-enab...
dd8b720ee7 ; * etc/NEWS: Fix typos.
909bd04cf5 ; * lisp/calendar/lunar.el: Add comments. (bug#61460)
10f2aedea9 ; * lisp/progmodes/c-ts-mode.el (c-ts-base-mode): delete ...
abfd00e5c0 * lisp/emacs-lisp/comp.el (native-comp-never-optimize-fun...
1795839bab Support `comp-enable-subr-trampolines' as string value
865758130a ; * admin/git-bisect-start: Update failing commits
b948d0d7ef Merge branch 'scratch/fix-locked-narrowing'
b6e2799aa1 * Some more `inhibit-native-compile' clean-up
dcb2379a46 Minor improvements to labeled narrowing
c0681cd347 Revert "Add new variable 'inhibit-native-compilation'"
3969a34fa1 Revert "Rename to inhibit-automatic-native-compilation"
4297039bd1 Save and restore the absence of narrowing locks
2956e54b1d Add an extensive test for labeled (locked) narrowing
79ce185ad1 Update the documentation about labeled (locked) narrowing
a6cd4553d4 Rename two long line optimizations variables
0d73e4aa26 Add specific symbols for narrowings
d8438e2bb4 Add 'without-narrowing' macro
97314447e6 Make 'narrowing-lock' and 'narrowing-unlock' internal
a4aa32bdff Fix 'save-restriction' for narrowing locks
2023-02-18 10:45:46 +01:00
Alan Mackenzie
d4346a7cc7 Add handling of the C11 _Generic construct to C Mode
This fixes bug #61481.

* lisp/progmodes/cc-engine.el (c-guess-basic-syntax): Add a new CASE 6 for
_Generic.

* lisp/progmodes/cc-fonts.el (c-fontify-types-and-refs): Use `let*' rather
than `let'.
(c-get-fontification-context): Add the new result `generic', and add handling
to determine it.
(c-font-lock-declarations): Call c-font-lock-c11-generic-clause when needed.
(c-font-lock-c11-generic-clause): New function.

* lisp/progmodes/cc-langs.el (c-generic-kwds, c-generic-key): New lang
constants/variable.
2023-02-17 09:14:10 +00:00
Alan Mackenzie
013655811a CC Mode: Prevent infinite recursion in c-determine-limit.
This was happening particularly with long-lines, possibly because the position
was inside a literal when calling c-determine-limit.

* lisp/progmodes/cc-engine.el (c-determine-limit): Guard a recursive call by
checking (- base try-size).
2023-02-05 18:01:09 +00:00
Alan Mackenzie
0a95a81d8d CC Mode: Fontify a certain foo * bar class by the asymmetric space heuristic
This fixes bug #61144.  If the space around the * is "symmetric" we leave foo
* bar unfontified, a multiplication operation.  If it is "asymmetric" we
fontify it as a pointer declaration.

* lisp/progmodes/cc-engine.el (c-fdoc-assymetric-space-about-asterisk): New
macro, extracted from c-forward-decl-or-cast-1.
(c-forward-decl-or-cast-1): Invoke the new macro twice, in CASE 16 (new) and
CASE 17.5 (the source of the macro).  In CASE 16, additionally set
unsafe-maybe when appropriate.
2023-02-03 20:55:59 +00:00
Stefan Kangas
e8db522e43 ; * lisp/progmodes/cc-engine.el: Delete trailing whitespace.
This was holding up the automatic merges due to commit hooks.
2023-01-27 11:29:47 +01:00
Stefan Kangas
5859413df2 ; * lisp/progmodes/cc-engine.el: Delete trailing whitespace.
This was holding up the automatic merges due to commit hooks.
2023-01-27 11:25:08 +01:00
Alan Mackenzie
29a8a1885d CC Mode: Don't do c-backward-syntactic-ws following a forward movement
This was happening in, e.g., c-forward-type, which moves over whitespace at
the end of the scanned type.  This WS movement can exit a comment or a macro,
such that a c-backward-syntactic-ws does not return to the desired point, but
to before the entire comment/macro.

* lisp/progmodes/cc-engine.el (c-forward-keyword-prefixed-id)
(c-forward-id-comma-list, c-forward-noise-clause, c-forward-keyword-clause)
(c-forward-name, c-forward-type): Add a new &optional parameter `stop-at-end'
which when non-nil means "do not move over syntactic WS after performing the
main job", and adapt the internals of these macros and functions accordingly.
(c-forward-declarator, c-forward-decl-or-cast-1): In the calls to
c-forward-type and c-forward-name, set the stop-at-end argument to t, and call
c-forward-sytactic-ws later.
2023-01-23 20:25:53 +00:00
Alan Mackenzie
21be03cccb CC Mode: Prevent two classes of "type" prematurely entering c-found-types
This fixes bug #60769.  The two classes of "type" are foo and bar in
"foo d(bar () ...)", where the d could be a mistyped C-M-d.

* list/progmodes/cc-engine.el (c-forward-decl-or-cast-1): New local variable
got-arglist.  Refactor a sequence of enclosed `if' forms into a `cond' form.
Set got-arglist when needed.  In CASE 2, set unsafe-maybe to inhibit foo
being entered into c-found-types.  In CASE 19, likewise set unsafe-maybe, to
inhibit bar entering c-found-types.
2023-01-19 10:59:10 +00:00
Alan Mackenzie
dbac923b9d CC Mode: On removal of "typedef", remove pertinent types from c-found-types
For this purpose, record the type names declared by typedef in a text
property, c-typedef, on the typedef.  On any change to that "typedef" or a
type, remove the old identifier(s) from c-found-types.

This should fix bug #59671.

* lisp/progmodes/cc-defs.el (c-search-forward-non-nil-char-property): New
macro.

* lisp/progmodes/cc-engine.el (c-forward-decl-or-cast-1): Move the scope of
identifier-start from the "inner" let form to the outer one.  Amend the
return value such that the middle element of the second element is now the
position of the "typedef", not merely non-nil.

* lisp/progmodes/cc-fonts.el (c-font-lock-declarators): Disregard the LIMIT
parameter when fontifying the declarators of a typedef construct.  Also in
this case, set the c-typedef text property on the "typedef" to the list of
declared types.  Amend this list when these declared types change.
(c-font-lock-single-decl): Massage the `types' argument given to
c-font-lock-declarators.
(c-font-lock-cut-off-declarators): Amend to work when the starting point of
the fontification is inside a brace block.

* lisp/progmodes/cc-mode.el (c-before-change-de-typedef)
(c-after-change-de-typedef): New functions.
(c-update-new-id): Replace the erroneous c-end-of-current-token with a clause
containing c-forward-token-2.
(c-before-change): Call c-before-change-de-typedef.
(c-after-change): Call c-after-change-de-typedef.
2023-01-17 18:15:45 +00:00
Alan Mackenzie
c1d32d9a20 CC Mode: Prevent ids in temporary "declarators" getting into c-found-types
This should fix bug #60765.  In the scenario type an identifier in front of
foo (bar, baz), as when started a new statement.  This temporarily makes the
function call a declarator, and bar and baz types.  Don't enter bar and baz
into c-found-types.

* lisp/progmodes/cc-engine.el (c-forward-decl-or-cast-1) (CASE 6): When a
'maybe type triggers this case, set `unsafe-maybe' to non-nil.
2023-01-16 17:44:44 +00:00
Eli Zaretskii
cae528457c ; Add 2023 to copyright years. 2023-01-01 05:31:12 -05:00
Stefan Kangas
2608e5edcc ; Fix typos
(cherry picked from commit a5d39e1144)
2022-12-26 10:42:02 +01:00
Alan Mackenzie
f373a23e51 CC Mode: Prevent lone ids being parsed as types unless in decl arglists
This fixes bug #59051.

* lisp/progmodes/cc-engine.el (c-forward-decl-or-cast-1): In the test for the
last invocation of c-fdoc-shift-type-backward before CASE 1, additionally
test CONTEXT not being an arglist or BACKUP-AT-TYPE being non-nil.
2022-11-29 20:22:58 +00:00
Alan Mackenzie
639adf26a1 CC Mode: Fix the "asymmetry rule" for fontifying a type followed by *
This fixes bug #59427.  We now handle correctly the case when a parenthesis
follows the * which is ambiguously a multiplication or indirection operator.
Also, we don't recognise a type thus found as a found type - the evidence is
too weak.

* lisp/progmodes/cc-engine.el (c-forward-decl-or-cast-1): Fix CASE 17.5 as
above.
2022-11-25 09:49:02 +00:00