]> git.eshelyaron.com Git - emacs.git/commitdiff
Handle C++17's constexpr keyword in if statements
authorAlan Mackenzie <acm@muc.de>
Wed, 28 Mar 2018 19:39:30 +0000 (19:39 +0000)
committerAlan Mackenzie <acm@muc.de>
Wed, 28 Mar 2018 19:39:30 +0000 (19:39 +0000)
* lisp/progmodes/cc-engine.el (c-after-conditional): Test for matches to
c-block-stmt-hangon-key.

* lisp/progmodes/cc-langs.el (c-block-stmt-hangon-kwds): New lang const.
(c-block-stmt-hangon-key): New lang const/var matching any element of the
above.

lisp/progmodes/cc-engine.el
lisp/progmodes/cc-langs.el

index 05926c48b040423e7602196b6329b33f0c9e9342..26ce2c919e8f02b223e48e328ce5c88e85c5562a 100644 (file)
@@ -9847,9 +9847,15 @@ comment at the start of cc-engine.el for more info."
   ;; This function might do hidden buffer changes.
   (save-excursion
     (and (zerop (c-backward-token-2 1 t lim))
+        (if (looking-at c-block-stmt-hangon-key)
+            (zerop (c-backward-token-2 1 t lim))
+          t)
         (or (looking-at c-block-stmt-1-key)
             (and (eq (char-after) ?\()
                  (zerop (c-backward-token-2 1 t lim))
+                 (if (looking-at c-block-stmt-hangon-key)
+                     (zerop (c-backward-token-2 1 t lim))
+                   t)
                  (or (looking-at c-block-stmt-2-key)
                      (looking-at c-block-stmt-1-2-key))))
         (point))))
index 98cfd2073d160f2c199d99133bb89b025d4f0591..8fa253f30450257abc85e44df41c6d1a9a5731ca 100644 (file)
@@ -2587,6 +2587,17 @@ Keywords here should also be in `c-block-stmt-1-kwds'."
                                  (c-lang-const c-block-stmt-2-kwds))
                          :test 'string-equal))
 
+(c-lang-defconst c-block-stmt-hangon-kwds
+  "Keywords which may directly follow a member of `c-block-stmt-1/2-kwds'."
+  t nil
+  c++ '("constexpr"))
+
+(c-lang-defconst c-block-stmt-hangon-key
+  ;; Regexp matching a "hangon" keyword in a `c-block-stmt-1/2-kwds'
+  ;; construct.
+  t (c-make-keywords-re t (c-lang-const c-block-stmt-hangon-kwds)))
+(c-lang-defvar c-block-stmt-hangon-key (c-lang-const c-block-stmt-hangon-key))
+
 (c-lang-defconst c-opt-block-stmt-key
   ;; Regexp matching the start of any statement that has a
   ;; substatement (except a bare block).  Nil in languages that