Commit 846f5040 authored by Martin Stjernholm's avatar Martin Stjernholm
Browse files

(c-lineup-math): Don't align the operators "!=", "<=" and ">=" as assignment

operators.

(c-assignment-operators): New language constant that only contains the
assignment operators.

(c-assignment-op-regexp): New language variable used by c-lineup-math'.
parent a02a0f3d
......@@ -708,18 +708,20 @@ arglist-cont-nonempty."
(save-excursion
(beginning-of-line)
(when (c-syntactic-re-search-forward
;; This regexp avoids matches on ==.
"\\(\\=\\|[^=]\\)=\\([^=]\\|$\\)"
(c-point 'eol) t t)
(setq equalp (- (match-beginning 2) (c-point 'boi))))))
c-assignment-op-regexp
(c-point 'eol) t t t)
(setq equalp (- (or (match-beginning 1)
(match-end 0))
(c-point 'boi))))))
(save-excursion
(goto-char startpos)
(if (or (if (c-syntactic-re-search-forward
"\\(\\=\\|[^=]\\)=\\([^=]\\|$\\)"
(min endpos (c-point 'eol)) t t)
c-assignment-op-regexp
(min endpos (c-point 'eol)) t t t)
(progn
(goto-char (match-beginning 2))
(goto-char (or (match-beginning 1)
(match-end 0)))
nil)
t)
(save-excursion
......
......@@ -544,6 +544,15 @@ submatch surrounds the directive name."
'("defined"))
pike '("defined" "efun" "constant"))
(c-lang-defconst c-assignment-operators
"List of all assignment operators."
t '("=" "*=" "/=" "%=" "+=" "-=" ">>=" "<<=" "&=" "^=" "|=")
java (append (c-lang-const c-assignment-operators)
'(">>>="))
c++ (append (c-lang-const c-assignment-operators)
'("and_eq" "or_eq" "xor_eq"))
idl nil)
(c-lang-defconst c-operators
"List describing all operators, along with their precedence and
associativity. The order in the list corresponds to the precedence of
......@@ -686,11 +695,7 @@ since CC Mode treats every identifier as an expression."
(right-assoc-sequence "?" ":")
;; Assignment.
(right-assoc "=" "*=" "/=" "%=" "+=" "-=" ">>=" "<<=" "&=" "^=" "|="
,@(when (c-major-mode-is 'java-mode)
'(">>>="))
,@(when (c-major-mode-is 'c++-mode)
'("and_eq" "or_eq" "xor_eq")))
(right-assoc ,@(c-lang-const c-assignment-operators))
;; Exception.
,@(when (c-major-mode-is 'c++-mode)
......@@ -788,6 +793,23 @@ operators."
(c-lang-defvar c-nonsymbol-token-regexp
(c-lang-const c-nonsymbol-token-regexp))
(c-lang-defconst c-assignment-op-regexp
;; Regexp matching all assignment operators and only them. The
;; beginning of the first submatch is used to detect the end of the
;; token, along with the end of the whole match.
t (if (c-lang-const c-assignment-operators)
(concat
;; Need special case for "=" since it's a prefix of "==".
"=\\([^=]\\|$\\)"
"\\|"
(c-make-keywords-re nil
(set-difference (c-lang-const c-assignment-operators)
'("=")
:test 'string-equal)))
"\\<\\>"))
(c-lang-defvar c-assignment-op-regexp
(c-lang-const c-assignment-op-regexp))
(c-lang-defconst c-<-op-cont-regexp
;; Regexp matching the second and subsequent characters of all
;; multicharacter tokens that begin with "<".
......@@ -1441,7 +1463,7 @@ assumed to be set if this isn't nil."
(c-lang-defconst c-opt-<>-sexp-key
;; Adorned regexp matching keywords that can be followed by an angle
;; bracket sexp.
;; bracket sexp. Always set when `c-recognize-<>-arglists' is.
t (if (c-lang-const c-recognize-<>-arglists)
(c-make-keywords-re t (c-lang-const c-<>-sexp-kwds))))
(c-lang-defvar c-opt-<>-sexp-key (c-lang-const c-opt-<>-sexp-key))
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment