From: Martin S. <ma...@ly...> - 2002-07-25 16:02:36
|
"James KANZE" <jk...@ca...> wrote: > When entering the following start of a class: > > class X > { > X(Y* py) > : a( py->f() ) > , > > I get a "scan error, unbalanced parentheses" message. > > I suspect that this is somehow due to the parser considering the > in > the -> as having to do with templates -- at any rate, the message > disappears if I use (*py).f(). You are correct. It's a known bug and the following patch fixes it. Thank you. *** cc-engine.el 2001/02/21 18:15:14 5.184 --- cc-engine.el 2001/10/24 15:13:36 *************** *** 1024,1054 **** (if (eq (char-after) ?,) (forward-char 1) (c-backward-syntactic-ws limit)) ! (c-with-syntax-table (if (c-major-mode-is 'c++-mode) ! c++-template-syntax-table ! (syntax-table)) ! (while (and (< limit (point)) ! (eq (char-before) ?,)) ! ;; this will catch member inits with multiple ! ;; line arglists ! (forward-char -1) ! (c-backward-syntactic-ws) ! (if (eq (char-before) ?\)) ! (c-backward-sexp 2) (c-backward-sexp 1)) ! ;; Skip over any template arg to the class. ! (if (eq (char-after) ?<) ! (c-backward-sexp 1)) ! ;; Skip backwards over a fully::qualified::name. ! (c-backward-syntactic-ws limit) ! (while (and (eq (char-before) ?:) ! (save-excursion ! (forward-char -1) ! (eq (char-before) ?:))) ! (backward-char 2) ! (c-backward-sexp 1)) ! ;; now continue checking ! (c-backward-syntactic-ws limit))) (and (< limit (point)) (eq (char-before) ?:))) --- 1024,1053 ---- (if (eq (char-after) ?,) (forward-char 1) (c-backward-syntactic-ws limit)) ! (while (and (< limit (point)) ! (eq (char-before) ?,)) ! ;; this will catch member inits with multiple ! ;; line arglists ! (forward-char -1) ! (c-backward-syntactic-ws limit) ! (if (eq (char-before) ?\)) (c-backward-sexp 1)) ! (c-backward-syntactic-ws limit) ! ;; Skip over any template arg to the class. ! (if (eq (char-before) ?>) ! (c-with-syntax-table c++-template-syntax-table ! (c-backward-sexp 1))) ! (c-backward-sexp 1) ! (c-backward-syntactic-ws limit) ! ;; Skip backwards over a fully::qualified::name. ! (while (and (eq (char-before) ?:) ! (save-excursion ! (forward-char -1) ! (eq (char-before) ?:))) ! (backward-char 2) ! (c-backward-sexp 1)) ! ;; now continue checking ! (c-backward-syntactic-ws limit)) (and (< limit (point)) (eq (char-before) ?:))) |