Commit graph

521 commits

Author SHA1 Message Date
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
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
Alan Mackenzie
3208a42c47 CC Mode: Make it scroll fast over buffers with only #define's
* lisp/progmodes/cc-engine.el (c-forward-over-token): New LIMIT parameter

* lisp/progmodes/cc-langs.el (c-anchored-hash-define-no-parens): Replace
ill-formed regular expression (which mixed \\sw and character alternative)
with simpler efficient regexp.

* lisp/progmodes/cc-mode.el (c-fl-decl-end): New forward limit LIM+ used in
c-forward-declarator and c-forward-over-token.
2022-11-24 10:51:03 +00:00
Stefan Kangas
5e8c62ffca ; Fix typos 2022-11-23 05:49:22 +01:00
Stefan Kangas
f7ee6609ae ; Fix typos (prefer US spelling) 2022-11-18 13:06:55 +01:00
Alan Mackenzie
ca3cc92e14 CC Mode: Make implicit int types following specifiers fontify correctly
This fixes bug #59267.  It applies to C Mode only, and refers to constructs
like "register count;" which are implicitly of int type.

* lisp/progmodes/cc-engine.el (c-forward-type): Use the new regexp
c-maybe-typeless-specifier-re in place of c-opt-type-modifier-prefix-key.  Add
an extra arm to the main cond form to handle the construct, and another to
handle "extern "C" foo_t my_foo;".
(c-forward-decl-or-cast-1): Adapt to handle the result no-id from
c-forward-type.

* lisp/progmodes/cc-langs.el (c-maybe-typeless-specifier-re): New lang
const/var.
2022-11-17 10:36:59 +00:00
Stefan Kangas
93036209fa ; Fix typos (duplicate words) 2022-11-17 09:34:24 +01:00
Alan Mackenzie
7e493b1773 CC Mode: Prevent over-eager recognition of a variable as a found type
This fixes bug #59233.  It occurred in the C source code fragment

    open_replies = alloca (nproviders )

, where typing a * before the closing parenthesis caused nproviders to be
prematurely recognized as a type.

* lisp/progmodes/cc-engine.el (c-forward-decl-or-cast-1): CASE 18 - set
unsafe-maybe to t, when needed.
2022-11-14 09:47:14 +00:00
Stefan Kangas
6f48b46b03 ; Fix typos 2022-11-11 15:52:37 +01:00
Alan Mackenzie
78144156b0 Optimize c-bs-interval, changing its value from 5000 to 2000
* lisp/progmodes/cc-engine.el (c-bs-interval): This optimization speeds
forward scrolling in a C Mode buffer by ~2.4%, backward scrolling by ~1.8%.
2022-11-09 21:28:18 +00:00
Alan Mackenzie
5fa0fcf18b CC Mode: Improve accuracy of recognition of bitfields
* lisp/progmodes/cc-engine.el (c-forward-decl-or-cast-1): When we've got two
identifiers followed by a colon, additionally check for a number (or
identifier) followed by a semicolon or comma before concluding we have a
bitfield.
2022-11-08 14:55:40 +00:00
Alan Mackenzie
b8134a7eba CC Mode: Stabilize the fontification in the presence of "register" keywords
This fixes bug #58883.

* lisp/progmodes/cc-engine.el (c-forward-decl-or-cast-1): New variable
unsafe-maybe.  Set it in CASE 10 rather than setting c-record-type-identifiers
to nil.  Near the end of the function, when unsafe-maybe is set, bind
c-promote-possible-types to 'just-one rather than t around the call to
c-forward-type.
2022-11-08 11:53:37 +00:00
Alan Mackenzie
c19ca5eb7f CC Mode: Fix infinite loop in c-brace-stack-at.
This fixes bug #59038.  The infinite loop occurred with a buffer containing
Base-64 encoded text rather than appropriate C Mode text.

* lisp/progmodes/cc-engine.el (c-update-brace-stack): Don't execute
c-beginning-of-current-token unless the previous c-syntactic-re-search-forward
has succeeded at least once.
2022-11-07 12:20:07 +00:00
Alan Mackenzie
622724e95d CC Mode: Fontify cast types without adding them to c-found-types
* lisp/progmodes/cc-engine.el (c-forward-type): Test for the special new
value `just-one' of c-promote-possible-types, and if found, fontify the type,
but don't add it to c-found-types.
(c-forward-decl-or-cast-1): Add the new &optional parameter inside-macro.
Whilst checking for a cast construct, analyze the text following the closing
paren more rigorously.
Check for, and allow, the closing paren of a macro arglist before the putative
cast construct.

* lisp/progmodes/cc-fonts.el (c-font-lock-declarations): In the lambda
function, pass the parameter inside-macro to c-forward-decl-or-cast-1.

* lisp/progmodes/cc-langs.el (c-primary-expr-regexp-details): New
c-lang-defvar which calculates `c-primary-expr-regexp' and three match
numbers for various sub-expressions in the regexp.
(c-primary-expr-regexp): Now extracted from `c-primary-expr-regexp-details'.
(c-per-++---match, c-per-&*+--match, c-per-\(-match): New
c-lang-defconsts/vars extracted from `c-primary-expr-regexp-details'.
2022-10-28 17:50:33 +00:00
Alan Mackenzie
b7e59b9e19 c-find-decl-spots: Replace an arbitrary search limit by a parameter
The old arbitrary limit led to errors thrown whilst fontifying large areas of
syntactic whitespace containing "#undef", as in src/comp.c.

* lisp/progmodes/cc-engine.el (c-find-decl-spots): Replace the limit argument
to two calls of c-forward-syntactic-ws by the parameter `cfd-limit'.
2022-10-26 16:02:49 +00:00
Alan Mackenzie
fb8276a17c CC Mode: Cease adding types to found-types too eagerly
This fixes bug #58537 and bug #58539.

* lisp/progmodes/cc-engine.el (c-forward-type): Remove trailing whitespace
from an identifier before passing it to c-add-type.
(c-forward-decl-or-cast-1): CASE 3: Do not recognize two consecutive
identifiers as type + variable/function unless certain conditions are met.
CASE 10: Do not recognize the "type" as a found type unless certain condtions
are met.  (Near end): Do not recognize the identifier in a cast as a type
unless certain conditions are met.

* lisp/progmodes/cc-fonts.el (c-get-fontification-context): Recognize being
in declaration parens when there is a syntactially wrong "foo ((bar))"
preceding the match position.

* lisp/progmodes/cc-mode.el (c-update-new-id): Set c-new-id-is-type
unconditionally to nil to prevent a second identifier being wrongly marked as
a type.
2022-10-19 14:52:14 +00:00
Alan Mackenzie
c2b79d9148 CC Mode: Don't fontify as types variables with the same names as struct tags
This fixes bug #58534.

* lisp/progmodes/cc-engine.el (c-forward-type): Only regard "struct" keywords
which create self contained types (e.g. C++'s "typename") as creating found
types.

* lisp/progmodes/cc-langs.el (c-self-contained-typename-kwds
(c-self-contained-typename-key): New language consts and variable.
2022-10-17 20:33:26 +00:00
Alan Mackenzie
3da935d533 Correctly fontify C++'s operator"" _tag (...)
Give both the "" and _tag font-lock-function-name-face.  Also correct the
fontification of an inherited class name when there is an attribute between
the class name being declared and the colon introducing the inheritance.

* lisp/progmodes/cc-engine.el (c-forward-over-colon-type-list): New function.
(c-forward-keyword-clause): Use the above new function instead of a
looking-at.
(c-forward-name, c-forward-declarator): Accept both the "" and the tag as part
of the name.

* lisp/progmodes/cc-fonts.el (c-font-lock-declarators): Fontify the "" (which
already has font-lock-string-face) and the tag with
font-lock-function-name-face.

* lisp/progmodes/cc-langs.el (c-overloadable-operators): Add "" to this list.
(c-sub-colon-type-list-re): New lang-const and lang-var.
2022-10-14 17:40:26 +00:00
Alan Mackenzie
121c3d44be CC Mode: Make c-forward-declarator move over a suffix after parens, e.g. const
Also tidy up several inaccuracies in the code.

* lisp/progmodes/cc-engine.el (c-forward-decl-arglist): Move point for modes
other than C++ Mode.
(c-forward-declarator): Move over a suffix following arglist parens
(e.g. const).  Set the ARGLIST element of the return value to non-nil on
encountering an unbalanced open parenthesis.  Don't move forward out of
enclosing parens.

* lisp/progmodes/cc-mode.el (c-fl-decl-end): Handle being in a multi-line
string.  Move forward over token after declarator.
2022-10-04 13:22:32 +00:00
Alan Mackenzie
a18918df0b CC Mode: Refactor c-forward-delarator and callers
c-forward-declarator now moves over a complete declarator, including any
arglist expression, but possibly not including certain C++20 constructs.

* lisp/progmodes/cc-engine.el (c-forward-decl-arglist): New function,
extracted from c-do-declarators.
(c-forward-declarator): Extend the result list by one element, denoting
whether the function parsed an argument list.  Insert special handling for a
C++ operator<op> construct.  If there is a parenthesis expression, and it is
an argument list, move forward over it.
(c-do-declarators): Append an optional parameter, cdd-anon-accepted
instructing the function to handle declarators without identifiers.  Extract
c-forward-decl-arglist.

* lisp/progmodes/cc-fonts.el (c-font-lock-declarators): New &optional
parameter accept-anon, as above.  Analyze and use the identifier location
returned by c-do-declarators, rather than using c-last-identifier-range.
(c-font-lock-single-decl): Determine accept-anon from the context, passing it
as argument to c-font-lock-declarators.

* lisp/progmodes/cc-langs.el (c-opt-identifier-prefix-key): Make a
c-lang-defvar out of this existing c-lang-defconst.

* lisp/progmodes/cc-mode.el (c-fl-decl-end): Adapt for the new
c-forward-declarator which now moves over arglists.  Amend better to handle
certain syntactically invalid constructs in C++.
2022-09-29 15:22:42 +00:00
Alan Mackenzie
07e6bbb9bc CC Mode: Handle C++20 concepts
* lisp/progmodes/cc-align.el (c-lineup-topmost-intro-cont): Amend so as not to
indent lines following a requires line.

* lisp/progmodes/cc-engine.el (c-forward-primary-expression)
(c-forward-c++-requires-clause): New functions.
(c-forward-declarator): Skip forward over any trailing requires clause.
(c-forward-decl-or-cast-1): Skip requires clauses before and after the type.
Amend the second element of the return list to include information on two
consecutive identifiers in <...>.
(c-looking-at-or-maybe-in-bracelist): Don't recognize braces in requires
expressions as brace lists.
(c-guess-basic-syntax): CASE 5D.7: New case to handle the continuation of a
"concept foo = " line.

* lisp/progmodes/cc-fonts.el (c-basic-matchers-before): Add a new clause to
handle the declaration of a concept.
(c-get-fontification-context): Treat the arglist of a requires construct as a
declaration arglist.

* lisp/progmodes/cc-langs.el (c-equals-nontype-decl-kwds/key)
(c-fun-name-substitute-kwds/key, c-pre-concept-<>-kwds/key): New
c-lang-consts/vars.
(c-constant-key): New c-lang-var.
(c-type-decl-suffix-key): Include "requires" in the keywords matched.

* lisp/progmodes/cc-mode.el (c-fl-decl-start): Fix an off by one error.  Use
equal rather than eq to compare two syntax contexts.
2022-09-26 19:20:54 +00:00
Alan Mackenzie
a057d41c75 CC Mode: Handle C++20 modules
* lisp/progmodes/cc-engine.el (c-before-after-change-check-c++-modules): New
function.
(c-forward-<>-arglist): Add special handling for "import <...>".

* lisp/progmodes/cc-fonts.el (c-preprocessor-face-name): Add extra "fallback"
face after font-lock-reference-face, namely font-lock-constant-face.
(c-cpp-matchers): Don't fontify the <> delimiters for XEmacs in #include <..>.
(c-basic-matchers-before): Add c-font-lock-c++-modules to the C++ value.
(c-forward-c++-module-name, c-forward-c++-module-partition-name)
(c-font-lock-c++-modules): New functions.

* lisp/progmodes/cc-langs.el (c-get-state-before-change-functions)
(c-before-font-lock-functions): Include
c-before-after-change-check-c++-modules in the C++ value of these variables.
(c-module-name-re): New c-lang-const/var.
(c-other-decl-kwds): Add a C++ value "export".
(c-<>-sexp-kwds): Add a new component c-import-<>-kwds.
(c-import-<>-kwds, c-module-kwds): New c-lang-consts.
(c-module-key): New c-lang-const/var.
2022-09-15 19:54:22 +00:00
Alan Mackenzie
71b7ad0cf7 C++ Mode: Fontify functions correctly with commas in template expressions
This fixes bug #57318.

Also apply an optimization which marks generic expressions as already
analyzed, thus avoiding repeating this analysis when not needed.  This
optimization prevents the fix slowing down scrolling when the C++ source has
lots of template structures.

* lisp/progmodes/cc-engine.el (top-level) Near the beginning of the file, add
a comment describing the new text property c-<>-c-types-set.
(c-update-brace-stack): Bind c-restricted-<>-arglists to nil rather than t
around the call to c-forward-<>-arglist.
(c-forward-<>-arglist-recur): Allow the abbreviated analysis of a generic
expression also when the opening < is marked with a c-<>-c-types-set text
property.  Set this property at the same time as the c-type properties are set
on the commas inside the template structure.

* lisp/progmodes/cc-fonts.el (c-font-lock-complex-decl-prepare): Clear the
c-<>-c-types-set text property, along with c-type, from the region being
fontified.
2022-08-31 18:46:06 +00:00
Alan Mackenzie
233c91d32a CC Mode: Fontify correctly a brace list element followed only by syntactic WS
This fixes a regression introduced in the fix for bug #56841 on 2022-08-24.

* lisp/progmodes/cc-engine (c-forward-declarator): Allow point to be at EOB
after the call to c-forward-name, rather than rejecting it as an invalid
declarator.  Also reindent a section of this function.
2022-08-26 15:51:21 +00:00
Alan Mackenzie
78923c5f4e C++ Mode - Fontify "class Foo {\n ~Foo() noexcept;" correctly
This fixes bug #49787.

* lisp/progmodes/cc-engine.el (c-forward-decl-or-cast-1): (In `if' form just
before CASE 8) Remove the (not ...) around the (looking-at
c-after-suffixed-type-maybe-decl-key).

* lisp/progmodes/cc-fonts.el (c-font-lock-complex-decl-prepare): Add
`c-not-decl' to the values of c-type which are erased at the start of a
fontification.
2022-08-24 19:27:32 +00:00
Alan Mackenzie
3835255a38 CC Mode: Fontify args correctly when arglist closing ) is not on the same line
This fixes bug #56841.

* lisp/progmodes/cc-engine.el (c-forward-declarator): Fix an off-by-one
comparing the position after a c-forward-name with a limit.

* lisp/progmodes/cc-mode.el (c-fl-decl-end): Handle correctly point starting
inside a literal.  Insert a missing c-backward-syntactic-ws in the handling of
C++ attributes.  Correctly handle an unmatched (.  Better handle point
starting inside a [ or (.  Tidy up the handling of syntactic whitespace at the
end of the buffer.
2022-08-24 14:45:46 +00:00
Stefan Kangas
76bcbe5f93 Merge from origin/emacs-28
e0f54c62ec CC Mode: fontify variables/functions after line comments e...
2c6a94c5b8 ; Correct the meaning of "cf." in tips.texi
2022-07-30 06:30:23 +02:00
Alan Mackenzie
e0f54c62ec CC Mode: fontify variables/functions after line comments ending in spaces
* lisp/progmodes/cc-engine.el (c-forward-comment-minus-1): Take account of
spaces preceding a linefeed when scanning a putative line comment end.
2022-07-29 20:18:58 +00:00
Alan Mackenzie
9b44824620 CC Mode: Add accurate handling for backslash in C line and block comments
This is needed to handle the idiosyncratic meaning of backslash in comments in
the C and C++ standards.

* lisp/progmodes/cc-engine.el: Correct a spelling error.

* lisp/progmodes/cc-mode.el (c-before-change-fix-comment-escapes)
(c-after-change-fix-comment-escapes): New functions.

* lisp/progmodes/cc-langs.el (c-get-state-before-change-functions): Add
c-before-change-fix-comment-escapes to the C/Objc and C++ values.
(c-before-font-lock-functions): Add c-after-change-fix-comment-escapes to the
C/Objc and C++ values.
2022-06-18 16:41:57 +00:00
Alan Mackenzie
ba1508ed17 CC Mode: Fix infinite loop in noise macro near end of buffer
This fixes bug #55771.  Also fix an inaccuracy in c-defun-name-1 with the same
cause.

* lisp/progmodes/cc-cmds.el (c-defun-name-1)
* lisp/progmodes/cc-engine.el (c-forward-noise-clause): Check the return
value of c-forward-token-2 and act upon it when not zero.
2022-06-18 11:23:06 +00:00
Alan Mackenzie
3ef68c2d7a CC Mode: Correct a rare error in the state cache
* lisp/progmodes/cc-engine.el (c-append-lower-brace-pair-to-state-cache): Do
not record a position in a macro as the starting position in
c-state-brace-pair-desert.  Instead record the position at the beginning of
that macro.
2022-05-17 11:26:05 +00:00
Stefan Kangas
09674074b5 ; Fix typos 2022-05-15 11:15:06 +02:00
Alan Mackenzie
f93c94996c CC Mode: Fix bug in c-parse-state. Fixes bug #55181.
* lisp/progmodes/cc-engine.el (c-state-cache-lower-good-pos): When in a
literal, return the start of that literal as a "good pos", not the parameter
POS.
2022-05-08 13:16:46 +00:00
Alan Mackenzie
02b521ad74 CC Mode: Fix unwanted fontification of function call as function declaration
This happens when the enclosing function's return type is a struct, etc.  This
fixes bug #54743;

* lisp/progmodes/cc-engine.el (c-update-brace-stack): Replace "(" by ")" in a
`member' call.
2022-04-10 12:20:39 +00:00
Eli Zaretskii
dcd76bd48d Merge from origin/emacs-28
836be7a112 ; * etc/refcards/ru-refcard.tex: Update Copyright year.
86cbc6ee4a * lisp/net/tramp-sh.el: Adapt copyright year
ebe8772f65 ; Minor fixes related to copyright years
23c1ee6989 ; * test/manual/etags/ETAGS.good_N: Adjust to copyright ye...
8d3fc7ec89 * src/xfaces.c (face_for_font): Make 'hash' be uintptr_t.
19dcb237b5 ; Add 2022 to copyright years.

# Conflicts:
#	etc/NEWS
#	etc/refcards/ru-refcard.tex
#	lib/cdefs.h
#	lisp/erc/erc-dcc.el
#	lisp/erc/erc-imenu.el
#	lisp/erc/erc-replace.el
#	lisp/image-dired.el
#	lisp/progmodes/xref.el
#	m4/alloca.m4
#	m4/byteswap.m4
#	m4/errno_h.m4
#	m4/getopt.m4
#	m4/gnulib-common.m4
#	m4/inttypes.m4
#	m4/stddef_h.m4
#	m4/stdint.m4
#	m4/sys_socket_h.m4
2022-01-01 07:03:03 -05:00
Eli Zaretskii
19dcb237b5 ; Add 2022 to copyright years. 2022-01-01 02:45:51 -05:00
Alan Mackenzie
cc9ac56081 CC Mode: Prevent rapid alternation of fontification of "found types"
This fixes bug #52863.

* lisp/progmodes/cc-engine.el (c-forward-decl-or-cast-1): When a new type is
found, postpone entering it into c-found-types (and thus triggering the
fontification of that type throughout the buffer) until the end of the
function, when we're sure that the "type" found actually is a type.
2021-12-30 11:35:24 +00:00
Stefan Kangas
a3129af331 Merge from origin/emacs-28
06545bc0cc CC Mode: c-update-brace-stack: After struct foo *, do not ...
f11779f01b Improve documentation of 'M-X' and related features

# Conflicts:
#	etc/NEWS
2021-12-30 06:30:43 +01:00
Alan Mackenzie
06545bc0cc CC Mode: c-update-brace-stack: After struct foo *, do not expect a brace.
This fixes bug #52796.

* lisp/progmodes/cc-engine.el (c-update-brace-stack): Handle a "*" like a
semicolon, cancelling the expectation of a brace.

* lisp/progmodes/cc-langs.el (c-brace-stack-thing-key): Add a "*" into the
sets of significant characters.
2021-12-29 19:05:11 +00:00
Stefan Kangas
fa2e812894 Merge from origin/emacs-28
aa1d7dd867 ; * etc/AUTHORS: Update.
6294e60205 ; * admin/authors.el (authors-aliases): More fixes.
40fc31ea28 ; * ChangeLog.3: Update.
2be090d5d3 ; * ChangeLog.3: Minor fixes.
9963b11bf7 ; * admin/authors.el (authors-aliases): Further updates.
50b40e1d4f ; * lisp/org/ob-julia.el: Fix Author header for authors.el.
84166ea2e6 CC Mode: Recognise "struct foo {" as introducing a type de...
2021-12-02 17:34:10 +01:00
Alan Mackenzie
84166ea2e6 CC Mode: Recognise "struct foo {" as introducing a type declaration
This fixes bug #52157.

* lisp/progmodes/cc-engine.el (c-forward-decl-or-cast-1): If such a construct
is parsed, set the flag at-type-decl which is part of the function's return
value.
2021-12-01 15:41:09 +00:00
Alan Mackenzie
60a8583420 C++ Mode: Fix incoorect background fontification of <
Where c-record-found-types gets "bound" to itself, we postpone the calling of
c-fontify-new-type on possible new found types until these are confirmed by
the return from the function tentatively finding these types, for exmaple
c-forward-<>-arglist.  We check this "binding" by testing the value of
c-record-found-types.

Correct the background fontification algorithm.

* lisp/progmodes/cc-engine.el (c-record-found-types): Move the definition to
earlier in the file.
(c-add-type-1): Check additionally c-record-found-types is nil before calling
c-fontify-new-found-type.
(c-forward-<>-arglist, c-forward-type): On return from a function which
collects found types in c-record-found-types, call c-fontify-new-found-types
for each such type.

* lisp/progmodes/c-fonts.el (c-force-redisplay): Actually fontify the new
found type.
(c-fontify-new-found-type): Test for font-lock-mode being enabled.  Remove the
spurious condition on the `fontified' text property being nil before causing
c-force-redisplay to get called.
2021-11-13 11:58:26 +00:00
Alan Mackenzie
b3a5ad14c1 CC Mode: minor amendments more accurately to handle virtual semicolons, etc.
* lisp/progmodes/cc-engine.el (c-laomib-loop): Check for a virtual semicolon
as well as a ;.
(c-guess-basic-syntax): CASE 5D - Use c-crosses-statement-barrier-p to check
whether we've gone back past a virtual semicolon.
2021-10-26 20:13:18 +00:00
Alan Mackenzie
5f150387f1 * lisp/progmodes/cc-engine.el (c-fontify-new-found-type): Declare near BO File 2021-10-26 16:58:07 +00:00