summaryrefslogtreecommitdiff
path: root/lisp
diff options
context:
space:
mode:
Diffstat (limited to 'lisp')
-rw-r--r--lisp/progmodes/c-mode.el11
1 files changed, 8 insertions, 3 deletions
diff --git a/lisp/progmodes/c-mode.el b/lisp/progmodes/c-mode.el
index 56db49bc5c5..7bdfbdf8031 100644
--- a/lisp/progmodes/c-mode.el
+++ b/lisp/progmodes/c-mode.el
@@ -127,6 +127,11 @@ If you do not want a leading newline before braces then use:
(defconst c-tab-always-indent t
"*Non-nil means TAB in C mode should always reindent the current line,
regardless of where in the line point is when the TAB command is used.")
+
+;;; Regular expression used internally to recognize labels in switch
+;;; statements.
+(defconst c-switch-label-regexp "case[ \t'/(]\\|default\\(\\S_\\|'\\)")
+
(defun c-mode ()
"Major mode for editing C code.
@@ -423,7 +428,7 @@ preserving the comment indentation or line-starting decorations."
;; So quickly rule out most other uses of colon
;; and do no indentation for them.
(and (eq last-command-char ?:)
- (not (looking-at "case[ \t'/(]\\|default\\>"))
+ (not (looking-at c-switch-label-regexp))
(save-excursion
(skip-chars-forward "a-zA-Z0-9_$")
(skip-chars-forward " \t")
@@ -515,7 +520,7 @@ Return the amount the indentation changed by."
(t
(skip-chars-forward " \t")
(if (listp indent) (setq indent (car indent)))
- (cond ((or (looking-at "case[ \t'/(]\\|default\\>")
+ (cond ((or (looking-at c-switch-label-regexp)
(and (looking-at "[A-Za-z]")
(save-excursion
(forward-sexp 1)
@@ -1079,7 +1084,7 @@ ENDPOS is encountered."
(setcar indent-stack
(setq this-indent val))))
;; Adjust line indentation according to its contents
- (if (or (looking-at "case[ \t'/(]\\|default\\>")
+ (if (or (looking-at c-switch-label-regexp)
(and (looking-at "[A-Za-z]")
(save-excursion
(forward-sexp 1)