]> git.eshelyaron.com Git - emacs.git/commitdiff
Make Java try-with-resources statement parse properly.
authorAlan Mackenzie <acm@muc.de>
Sat, 27 Jul 2013 12:07:43 +0000 (12:07 +0000)
committerAlan Mackenzie <acm@muc.de>
Sat, 27 Jul 2013 12:07:43 +0000 (12:07 +0000)
progmodes/cc-langs.el (c-block-stmt-1-2-kwds, c-block-stmt-1-2-key): New
language constants/variables.
progmodes/cc-engine.el (c-beginning-of-statement-1, c-after-conditional): Adapt
to deal with c-block-stmt-1-2-key.
progmodes/cc-fonts.el (c-font-lock-declarations): Adapt to deal with
c-block-stmt-1-2-key.

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

index 42ad403583b35f394caf07ece89201bcc17034a9..e74c4ffe486ef8badd88492e3b4fef7cb34b6cae 100644 (file)
@@ -1,3 +1,13 @@
+2013-07-27  Alan Mackenzie  <acm@muc.de>
+
+       Make Java try-with-resources statement parse properly.
+       * progmodes/cc-langs.el (c-block-stmt-1-2-kwds)
+       (c-block-stmt-1-2-key): New language constants/variables.
+       * progmodes/cc-engine.el (c-beginning-of-statement-1)
+       (c-after-conditional): Adapt to deal with c-block-stmt-1-2-key.
+       * progmodes/cc-fonts.el (c-font-lock-declarations): Adapt to deal
+       with c-block-stmet-1-2-key.
+
 2013-07-27  Juanma Barranquero  <lekktu@gmail.com>
 
        * desktop.el (desktop--make-frame): Apply most frame parameters after
index a3bd000a4f333c4389abfdca2e08149737d52fd5..c2ff5011a0e27b93bb04625f87ed9a5d041101d9 100644 (file)
@@ -1135,9 +1135,13 @@ comment at the start of cc-engine.el for more info."
                   (not (memq sym '(boundary ignore nil))))
          ;; Need to investigate closer whether we've crossed
          ;; between a substatement and its containing statement.
-         (if (setq saved (if (looking-at c-block-stmt-1-key)
-                             ptok
-                           pptok))
+         (if (setq saved
+                   (cond ((and (looking-at c-block-stmt-1-2-key)
+                               (eq (char-after ptok) ?\())
+                          pptok)
+                         ((looking-at c-block-stmt-1-key)
+                          ptok)
+                         (t pptok)))
              (cond ((> start saved) (setq pos saved))
                    ((= start saved) (setq ret 'up)))))
 
@@ -7988,7 +7992,8 @@ comment at the start of cc-engine.el for more info."
         (or (looking-at c-block-stmt-1-key)
             (and (eq (char-after) ?\()
                  (zerop (c-backward-token-2 1 t lim))
-                 (looking-at c-block-stmt-2-key)))
+                 (or (looking-at c-block-stmt-2-key)
+                     (looking-at c-block-stmt-1-2-key))))
         (point))))
 
 (defun c-after-special-operator-id (&optional lim)
index 6a4bfd9e875401094d8cc1821bf6d29a5807fedf..4e8ce6bac2824eeddfb3485e7421b6ef816f74f1 100644 (file)
@@ -1307,7 +1307,8 @@ casts and declarations are fontified.  Used on level 2 and higher."
                            (goto-char match-pos)
                            (backward-char)
                            (c-backward-token-2)
-                           (looking-at c-block-stmt-2-key)))
+                           (or (looking-at c-block-stmt-2-key)
+                               (looking-at c-block-stmt-1-2-key))))
                     (setq context nil
                           c-restricted-<>-arglists t))
                    ;; Near BOB.
index af52ad53aad23de410faa8928532dbea4b3eff1c..4e488344e165ebd30b03b74151143dd880f29686 100644 (file)
@@ -2187,6 +2187,18 @@ identifiers that follows the type in a normal declaration."
   t (c-make-keywords-re t (c-lang-const c-block-stmt-1-kwds)))
 (c-lang-defvar c-block-stmt-1-key (c-lang-const c-block-stmt-1-key))
 
+(c-lang-defconst c-block-stmt-1-2-kwds
+  "Statement keywords optionally followed by a paren sexp.
+Keywords here should also be in `c-block-stmt-1-kwds'."
+  t nil
+  java '("try"))
+
+(c-lang-defconst c-block-stmt-1-2-key
+  ;; Regexp matching the start of a statement which may be followed by a
+  ;; paren sexp and will then be followed by a substatement.
+  t (c-make-keywords-re t (c-lang-const c-block-stmt-1-2-kwds)))
+(c-lang-defvar c-block-stmt-1-2-key (c-lang-const c-block-stmt-1-2-key))
+
 (c-lang-defconst c-block-stmt-2-kwds
   "Statement keywords followed by a paren sexp and then by a substatement."
   t    '("for" "if" "switch" "while")