aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard M. Stallman1999-08-05 15:01:46 +0000
committerRichard M. Stallman1999-08-05 15:01:46 +0000
commit6393fef266f956cd278f2b87a0a1f29bc54bd697 (patch)
tree3ca21f7969eb79cbd0116b34bf8c937ae8ca01e0
parentfd702fdb11193ecda62f3264004d44ffd45b2b76 (diff)
downloademacs-6393fef266f956cd278f2b87a0a1f29bc54bd697.tar.gz
emacs-6393fef266f956cd278f2b87a0a1f29bc54bd697.zip
(c-inside-bracelist-p): Tighter test for
Java anonymous array expressions ("new Foo[] {.. bracelist ..}").
-rw-r--r--lisp/progmodes/cc-engine.el41
1 files changed, 26 insertions, 15 deletions
diff --git a/lisp/progmodes/cc-engine.el b/lisp/progmodes/cc-engine.el
index 1111e071800..fccb032e62c 100644
--- a/lisp/progmodes/cc-engine.el
+++ b/lisp/progmodes/cc-engine.el
@@ -1100,8 +1100,26 @@ brace."
1100 (cdr (car brace-state)) 1100 (cdr (car brace-state))
1101 (car brace-state)) 1101 (car brace-state))
1102 braceassignp 'dontknow) 1102 braceassignp 'dontknow)
1103 (while (and (eq braceassignp 'dontknow) 1103 (c-backward-token-1 1 t lim)
1104 (zerop (c-backward-token-1 1 t lim))) 1104 ;; Checks to do only on the first sexp before the brace.
1105 (when (and (c-major-mode-is 'java-mode)
1106 (eq (char-after) ?\[))
1107 ;; In Java, an initialization brace list may follow
1108 ;; directly after "new Foo[]", so check for a "new"
1109 ;; earlier.
1110 (while (eq braceassignp 'dontknow)
1111 (setq braceassignp
1112 (cond ((/= (c-backward-token-1 1 t lim) 0) nil)
1113 ((looking-at "new\\>") t)
1114 ((looking-at "\\sw\\|\\s_\\|[.[]")
1115 ;; Carry on looking if this is an
1116 ;; identifier (may contain "." in Java)
1117 ;; or another "[]" sexp.
1118 'dontknow)
1119 (t nil)))))
1120 ;; Checks to do on all sexps before the brace, up to the
1121 ;; beginning of the statement.
1122 (while (eq braceassignp 'dontknow)
1105 (cond ((eq (char-after) ?\;) 1123 (cond ((eq (char-after) ?\;)
1106 (setq braceassignp nil)) 1124 (setq braceassignp nil))
1107 ((and class-key 1125 ((and class-key
@@ -1130,22 +1148,15 @@ brace."
1130 (and (c-major-mode-is 'c++-mode) 1148 (and (c-major-mode-is 'c++-mode)
1131 (eq (char-before) ?<) 1149 (eq (char-before) ?<)
1132 (not (c-crosses-statement-barrier-p 1150 (not (c-crosses-statement-barrier-p
1133 here pos<)) 1151 pos< here))
1134 (not (c-in-literal)) 1152 (not (c-in-literal))
1135 ))) 1153 )))
1136 nil) 1154 nil)
1137 (t t))))) 1155 (t t))))))
1138 ((eq (char-after) ?\[) 1156 (if (and (eq braceassignp 'dontknow)
1139 ;; In Java, an initialization brace list may 1157 (/= (c-backward-token-1 1 t lim) 0))
1140 ;; follow "new Foo[]", so check for []. Got to 1158 (setq braceassignp nil)))
1141 ;; watch out for the C++ "operator[]" defun, 1159 (if (not braceassignp)
1142 ;; though.
1143 (setq braceassignp
1144 (save-excursion
1145 (c-backward-token-1)
1146 (not (looking-at "operator\\>")))))
1147 ))
1148 (if (memq braceassignp '(nil dontknow))
1149 (if (eq (char-after) ?\;) 1160 (if (eq (char-after) ?\;)
1150 ;; Brace lists can't contain a semicolon, so we're done. 1161 ;; Brace lists can't contain a semicolon, so we're done.
1151 (setq containing-sexp nil) 1162 (setq containing-sexp nil)