diff options
| author | Richard M. Stallman | 1999-08-05 15:01:46 +0000 |
|---|---|---|
| committer | Richard M. Stallman | 1999-08-05 15:01:46 +0000 |
| commit | 6393fef266f956cd278f2b87a0a1f29bc54bd697 (patch) | |
| tree | 3ca21f7969eb79cbd0116b34bf8c937ae8ca01e0 | |
| parent | fd702fdb11193ecda62f3264004d44ffd45b2b76 (diff) | |
| download | emacs-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.el | 41 |
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) |