From a50271e0c39bad630b433e31434ef20f584bfc09 Mon Sep 17 00:00:00 2001 From: Alan Mackenzie Date: Sat, 27 Jul 2019 16:28:48 +0000 Subject: [PATCH] Java Mode: Fix handling of nested generics ending in >>>. This fixes bug #24671. * lisp/progmodes/cc-langs.el (c-multichar->-op-not->>-regexp): remove, transforming into ... (c-multichar->-op-not->>->>>-regexp) New lang const/var. * lisp/progmodes/cc-engine.el (c-forward-<>-arglist-recur): use the new c-multichar->-op-not->>->>>-regexp in place of the old c-multichar->-op-not->>-regexp. --- lisp/progmodes/cc-engine.el | 2 +- lisp/progmodes/cc-langs.el | 18 ++++++++++-------- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/lisp/progmodes/cc-engine.el b/lisp/progmodes/cc-engine.el index 1ebacb58c7f..37d4591fc96 100644 --- a/lisp/progmodes/cc-engine.el +++ b/lisp/progmodes/cc-engine.el @@ -7983,7 +7983,7 @@ comment at the start of cc-engine.el for more info." (if (save-excursion (c-backward-token-2) - (looking-at c-multichar->-op-not->>-regexp)) + (looking-at c-multichar->-op-not->>->>>-regexp)) (progn (goto-char (match-end 0)) t) ; Continue the loop. diff --git a/lisp/progmodes/cc-langs.el b/lisp/progmodes/cc-langs.el index 72c0fdd0d2d..f3dd0c6c4c9 100644 --- a/lisp/progmodes/cc-langs.el +++ b/lisp/progmodes/cc-langs.el @@ -1409,15 +1409,17 @@ operators." (c-lang-defvar c->-op-without->-cont-regexp (c-lang-const c->-op-without->-cont-regexp)) -(c-lang-defconst c-multichar->-op-not->>-regexp - ;; Regexp matching multichar tokens containing ">", except ">>" +(c-lang-defconst c-multichar->-op-not->>->>>-regexp + ;; Regexp matching multichar tokens containing ">", except ">>" and ">>>" t (c-make-keywords-re nil - (delete ">>" - (c-filter-ops (c-lang-const c-all-op-syntax-tokens) - t - "\\(.>\\|>.\\)")))) -(c-lang-defvar c-multichar->-op-not->>-regexp - (c-lang-const c-multichar->-op-not->>-regexp)) + (c--set-difference + (c-filter-ops (c-lang-const c-all-op-syntax-tokens) + t + "\\(.>\\|>.\\)") + '(">>" ">>>") + :test 'string-equal))) +(c-lang-defvar c-multichar->-op-not->>->>>-regexp + (c-lang-const c-multichar->-op-not->>->>>-regexp)) (c-lang-defconst c-:-op-cont-tokens ;; A list of second and subsequent characters of all multicharacter tokens -- 2.39.2