Partially correct fontification of "(b*3)", and the like, in C++ Mode
This problem is caused by the fundamental ambiguity in C++ between argument declarations and initialisation clauses. * lisp/progmodes/cc-fonts.el (c-font-lock-declarations): If we have an open paren preceded by an arithmetic operator, we give this the context nil, not 'arglist. * lisp/progmodes/cc-langs.el (c-arithmetic-operators, c-arithmetic-op-regexp): New lang consts and vars.
This commit is contained in:
parent
0d19e69184
commit
11b81a54d5
2 changed files with 23 additions and 0 deletions
|
@ -1311,6 +1311,13 @@ casts and declarations are fontified. Used on level 2 and higher."
|
|||
;; multiline declaration.
|
||||
(c-put-char-property (1- match-pos)
|
||||
'c-type 'c-decl-arg-start))
|
||||
;; Got an open paren preceded by an arith operator.
|
||||
((and (eq (char-before match-pos) ?\()
|
||||
(save-excursion
|
||||
(and (zerop (c-backward-token-2 2))
|
||||
(looking-at c-arithmetic-op-regexp))))
|
||||
(setq context nil
|
||||
c-restricted-<>-arglists nil))
|
||||
(t (setq context 'arglist
|
||||
c-restricted-<>-arglists t))))
|
||||
|
||||
|
|
|
@ -1248,6 +1248,22 @@ operators."
|
|||
(c-lang-defvar c-assignment-op-regexp
|
||||
(c-lang-const c-assignment-op-regexp))
|
||||
|
||||
(c-lang-defconst c-arithmetic-operators
|
||||
"List of all arithmetic operators, including \"+=\", etc."
|
||||
;; Note: in the following, there are too many operators for AWK and IDL.
|
||||
t (append (c-lang-const c-assignment-operators)
|
||||
'("+" "-" "*" "/" "%"
|
||||
"<<" ">>"
|
||||
"<" ">" "<=" ">="
|
||||
"==" "!="
|
||||
"&" "^" "|"
|
||||
"&&" "||")))
|
||||
|
||||
(c-lang-defconst c-arithmetic-op-regexp
|
||||
t (c-make-keywords-re nil
|
||||
(c-lang-const c-arithmetic-operators)))
|
||||
(c-lang-defvar c-arithmetic-op-regexp (c-lang-const c-arithmetic-op-regexp))
|
||||
|
||||
(c-lang-defconst c-:$-multichar-token-regexp
|
||||
;; Regexp matching all tokens ending in ":" which are longer than one char.
|
||||
;; Currently (2016-01-07) only used in C++ Mode.
|
||||
|
|
Loading…
Add table
Reference in a new issue