Mercurial > emacs
annotate lisp/progmodes/cc-engine.el @ 106625:1c02cbe4881b
*** empty log message ***
author | Eli Zaretskii <eliz@gnu.org> |
---|---|
date | Sat, 19 Dec 2009 14:16:47 +0000 |
parents | b913cb685ed4 |
children | 1d1d5d9bd884 |
rev | line source |
---|---|
18720 | 1 ;;; cc-engine.el --- core syntax guessing engine for CC mode |
2 | |
74372 | 3 ;; Copyright (C) 1985, 1987, 1992, 1993, 1994, 1995, 1996, 1997, 1998, |
100908 | 4 ;; 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 |
75347 | 5 ;; Free Software Foundation, Inc. |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
6 |
75307 | 7 ;; Authors: 2001- Alan Mackenzie |
8 ;; 1998- Martin Stjernholm | |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
9 ;; 1992-1999 Barry A. Warsaw |
101112
0685234e527d
Comment (minor header format fixes).
Glenn Morris <rgm@gnu.org>
parents:
100908
diff
changeset
|
10 ;; 1987 Dave Detlefs |
0685234e527d
Comment (minor header format fixes).
Glenn Morris <rgm@gnu.org>
parents:
100908
diff
changeset
|
11 ;; 1987 Stewart Clamen |
18720 | 12 ;; 1985 Richard M. Stallman |
24282 | 13 ;; Maintainer: bug-cc-mode@gnu.org |
18720 | 14 ;; Created: 22-Apr-1997 (split from cc-mode.el) |
20142 | 15 ;; Version: See cc-mode.el |
18720 | 16 ;; Keywords: c languages oop |
17 | |
18 ;; This file is part of GNU Emacs. | |
19 | |
94673
52b7a8c22af5
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
93975
diff
changeset
|
20 ;; GNU Emacs is free software: you can redistribute it and/or modify |
18720 | 21 ;; it under the terms of the GNU General Public License as published by |
94673
52b7a8c22af5
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
93975
diff
changeset
|
22 ;; the Free Software Foundation, either version 3 of the License, or |
52b7a8c22af5
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
93975
diff
changeset
|
23 ;; (at your option) any later version. |
18720 | 24 |
25 ;; GNU Emacs is distributed in the hope that it will be useful, | |
26 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
27 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
28 ;; GNU General Public License for more details. | |
29 | |
30 ;; You should have received a copy of the GNU General Public License | |
94673
52b7a8c22af5
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
93975
diff
changeset
|
31 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. |
18720 | 32 |
38422
7a94f1c588c4
Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents:
36920
diff
changeset
|
33 ;;; Commentary: |
7a94f1c588c4
Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents:
36920
diff
changeset
|
34 |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
35 ;; The functions which have docstring documentation can be considered |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
36 ;; part of an API which other packages can use in CC Mode buffers. |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
37 ;; Otoh, undocumented functions and functions with the documentation |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
38 ;; in comments are considered purely internal and can change semantics |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
39 ;; or even disappear in the future. |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
40 ;; |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
41 ;; (This policy applies to CC Mode as a whole, not just this file. It |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
42 ;; probably also applies to many other Emacs packages, but here it's |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
43 ;; clearly spelled out.) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
44 |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
45 ;; Hidden buffer changes |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
46 ;; |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
47 ;; Various functions in CC Mode use text properties for caching and |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
48 ;; syntactic markup purposes, and those of them that might modify such |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
49 ;; properties but still don't modify the buffer in a visible way are |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
50 ;; said to do "hidden buffer changes". They should be used within |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
51 ;; `c-save-buffer-state' or a similar function that saves and restores |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
52 ;; buffer modifiedness, disables buffer change hooks, etc. |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
53 ;; |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
54 ;; Interactive functions are assumed to not do hidden buffer changes, |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
55 ;; except in the specific parts of them that do real changes. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
56 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
57 ;; Lineup functions are assumed to do hidden buffer changes. They |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
58 ;; must not do real changes, though. |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
59 ;; |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
60 ;; All other functions that do hidden buffer changes have that noted |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
61 ;; in their doc string or comment. |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
62 ;; |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
63 ;; The intention with this system is to avoid wrapping every leaf |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
64 ;; function that do hidden buffer changes inside |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
65 ;; `c-save-buffer-state'. It should be used as near the top of the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
66 ;; interactive functions as possible. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
67 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
68 ;; Functions called during font locking are allowed to do hidden |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
69 ;; buffer changes since the font-lock package run them in a context |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
70 ;; similar to `c-save-buffer-state' (in fact, that function is heavily |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
71 ;; inspired by `save-buffer-state' in the font-lock package). |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
72 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
73 ;; Use of text properties |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
74 ;; |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
75 ;; CC Mode uses several text properties internally to mark up various |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
76 ;; positions, e.g. to improve speed and to eliminate glitches in |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
77 ;; interactive refontification. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
78 ;; |
51829
d508ffa43505
2003-07-08 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents:
51714
diff
changeset
|
79 ;; Note: This doc is for internal use only. Other packages should not |
d508ffa43505
2003-07-08 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents:
51714
diff
changeset
|
80 ;; assume that these text properties are used as described here. |
d508ffa43505
2003-07-08 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents:
51714
diff
changeset
|
81 ;; |
106395
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
82 ;; 'category |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
83 ;; Used for "indirection". With its help, some other property can |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
84 ;; be cheaply and easily switched on or off everywhere it occurs. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
85 ;; |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
86 ;; 'syntax-table |
80157
e67a400370f5
Set of changes so that "obtrusive" syntactic elements in a
Alan Mackenzie <acm@muc.de>
parents:
79953
diff
changeset
|
87 ;; Used to modify the syntax of some characters. It is used to |
e67a400370f5
Set of changes so that "obtrusive" syntactic elements in a
Alan Mackenzie <acm@muc.de>
parents:
79953
diff
changeset
|
88 ;; mark the "<" and ">" of angle bracket parens with paren syntax, and |
e67a400370f5
Set of changes so that "obtrusive" syntactic elements in a
Alan Mackenzie <acm@muc.de>
parents:
79953
diff
changeset
|
89 ;; to "hide" obtrusive characters in preprocessor lines. |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
90 ;; |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
91 ;; This property is used on single characters and is therefore |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
92 ;; always treated as front and rear nonsticky (or start and end open |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
93 ;; in XEmacs vocabulary). It's therefore installed on |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
94 ;; `text-property-default-nonsticky' if that variable exists (Emacs |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
95 ;; >= 21). |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
96 ;; |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
97 ;; 'c-is-sws and 'c-in-sws |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
98 ;; Used by `c-forward-syntactic-ws' and `c-backward-syntactic-ws' to |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
99 ;; speed them up. See the comment blurb before `c-put-is-sws' |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
100 ;; below for further details. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
101 ;; |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
102 ;; 'c-type |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
103 ;; This property is used on single characters to mark positions with |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
104 ;; special syntactic relevance of various sorts. Its primary use is |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
105 ;; to avoid glitches when multiline constructs are refontified |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
106 ;; interactively (on font lock decoration level 3). It's cleared in |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
107 ;; a region before it's fontified and is then put on relevant chars |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
108 ;; in that region as they are encountered during the fontification. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
109 ;; The value specifies the kind of position: |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
110 ;; |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
111 ;; 'c-decl-arg-start |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
112 ;; Put on the last char of the token preceding each declaration |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
113 ;; inside a declaration style arglist (typically in a function |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
114 ;; prototype). |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
115 ;; |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
116 ;; 'c-decl-end |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
117 ;; Put on the last char of the token preceding a declaration. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
118 ;; This is used in cases where declaration boundaries can't be |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
119 ;; recognized simply by looking for a token like ";" or "}". |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
120 ;; `c-type-decl-end-used' must be set if this is used (see also |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
121 ;; `c-find-decl-spots'). |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
122 ;; |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
123 ;; 'c-<>-arg-sep |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
124 ;; Put on the commas that separate arguments in angle bracket |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
125 ;; arglists like C++ template arglists. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
126 ;; |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
127 ;; 'c-decl-id-start and 'c-decl-type-start |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
128 ;; Put on the last char of the token preceding each declarator |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
129 ;; in the declarator list of a declaration. They are also used |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
130 ;; between the identifiers cases like enum declarations. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
131 ;; 'c-decl-type-start is used when the declarators are types, |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
132 ;; 'c-decl-id-start otherwise. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
133 ;; |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
134 ;; 'c-awk-NL-prop |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
135 ;; Used in AWK mode to mark the various kinds of newlines. See |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
136 ;; cc-awk.el. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
137 |
38422
7a94f1c588c4
Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents:
36920
diff
changeset
|
138 ;;; Code: |
7a94f1c588c4
Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents:
36920
diff
changeset
|
139 |
26817 | 140 (eval-when-compile |
141 (let ((load-path | |
36920 | 142 (if (and (boundp 'byte-compile-dest-file) |
143 (stringp byte-compile-dest-file)) | |
144 (cons (file-name-directory byte-compile-dest-file) load-path) | |
26817 | 145 load-path))) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
146 (load "cc-bytecomp" nil t))) |
36920 | 147 |
148 (cc-require 'cc-defs) | |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
149 (cc-require-when-compile 'cc-langs) |
36920 | 150 (cc-require 'cc-vars) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
151 |
36920 | 152 ;; Silence the compiler. |
153 (cc-bytecomp-defun buffer-syntactic-context) ; XEmacs | |
26817 | 154 |
18720 | 155 |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
156 ;; Make declarations for all the `c-lang-defvar' variables in cc-langs. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
157 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
158 (defmacro c-declare-lang-variables () |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
159 `(progn |
51888
b5a29d6f2851
(c-declare-lang-variables): Don't use mapcan.
Richard M. Stallman <rms@gnu.org>
parents:
51829
diff
changeset
|
160 ,@(apply 'nconc |
b5a29d6f2851
(c-declare-lang-variables): Don't use mapcan.
Richard M. Stallman <rms@gnu.org>
parents:
51829
diff
changeset
|
161 (mapcar (lambda (init) |
b5a29d6f2851
(c-declare-lang-variables): Don't use mapcan.
Richard M. Stallman <rms@gnu.org>
parents:
51829
diff
changeset
|
162 `(,(if (elt init 2) |
b5a29d6f2851
(c-declare-lang-variables): Don't use mapcan.
Richard M. Stallman <rms@gnu.org>
parents:
51829
diff
changeset
|
163 `(defvar ,(car init) nil ,(elt init 2)) |
b5a29d6f2851
(c-declare-lang-variables): Don't use mapcan.
Richard M. Stallman <rms@gnu.org>
parents:
51829
diff
changeset
|
164 `(defvar ,(car init) nil)) |
b5a29d6f2851
(c-declare-lang-variables): Don't use mapcan.
Richard M. Stallman <rms@gnu.org>
parents:
51829
diff
changeset
|
165 (make-variable-buffer-local ',(car init)))) |
b5a29d6f2851
(c-declare-lang-variables): Don't use mapcan.
Richard M. Stallman <rms@gnu.org>
parents:
51829
diff
changeset
|
166 (cdr c-lang-variable-inits))))) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
167 (c-declare-lang-variables) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
168 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
169 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
170 ;;; Internal state variables. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
171 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
172 ;; Internal state of hungry delete key feature |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
173 (defvar c-hungry-delete-key nil) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
174 (make-variable-buffer-local 'c-hungry-delete-key) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
175 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
176 ;; The electric flag (toggled by `c-toggle-electric-state'). |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
177 ;; If t, electric actions (like automatic reindentation, and (if |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
178 ;; c-auto-newline is also set) auto newlining) will happen when an electric |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
179 ;; key like `{' is pressed (or an electric keyword like `else'). |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
180 (defvar c-electric-flag t) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
181 (make-variable-buffer-local 'c-electric-flag) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
182 |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
183 ;; Internal state of auto newline feature. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
184 (defvar c-auto-newline nil) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
185 (make-variable-buffer-local 'c-auto-newline) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
186 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
187 ;; Included in the mode line to indicate the active submodes. |
69140
3d8b060d10fb
cc-align.el, cc-awk.el, cc-bytecomp.el, cc-cmds.el, cc-compat.el,
Alan Mackenzie <acm@muc.de>
parents:
68773
diff
changeset
|
188 ;; (defvar c-submode-indicators nil) |
3d8b060d10fb
cc-align.el, cc-awk.el, cc-bytecomp.el, cc-cmds.el, cc-compat.el,
Alan Mackenzie <acm@muc.de>
parents:
68773
diff
changeset
|
189 ;; (make-variable-buffer-local 'c-submode-indicators) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
190 |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
191 (defun c-calculate-state (arg prevstate) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
192 ;; Calculate the new state of PREVSTATE, t or nil, based on arg. If |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
193 ;; arg is nil or zero, toggle the state. If arg is negative, turn |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
194 ;; the state off, and if arg is positive, turn the state on |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
195 (if (or (not arg) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
196 (zerop (setq arg (prefix-numeric-value arg)))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
197 (not prevstate) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
198 (> arg 0))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
199 |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
200 ;; Dynamically bound cache for `c-in-literal'. |
36920 | 201 (defvar c-in-literal-cache t) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
202 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
203 |
53073
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
204 ;; Basic handling of preprocessor directives. |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
205 |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
206 ;; This is a dynamically bound cache used together with |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
207 ;; `c-query-macro-start' and `c-query-and-set-macro-start'. It only |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
208 ;; works as long as point doesn't cross a macro boundary. |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
209 (defvar c-macro-start 'unknown) |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
210 |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
211 (defsubst c-query-and-set-macro-start () |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
212 (if (symbolp c-macro-start) |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
213 (setq c-macro-start (save-excursion |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
214 (c-save-buffer-state () |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
215 (and (c-beginning-of-macro) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
216 (point))))) |
53073
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
217 c-macro-start)) |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
218 |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
219 (defsubst c-query-macro-start () |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
220 (if (symbolp c-macro-start) |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
221 (save-excursion |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
222 (c-save-buffer-state () |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
223 (and (c-beginning-of-macro) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
224 (point)))) |
53073
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
225 c-macro-start)) |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
226 |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
227 (defun c-beginning-of-macro (&optional lim) |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
228 "Go to the beginning of a preprocessor directive. |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
229 Leave point at the beginning of the directive and return t if in one, |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
230 otherwise return nil and leave point unchanged. |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
231 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
232 Note that this function might do hidden buffer changes. See the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
233 comment at the start of cc-engine.el for more info." |
53073
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
234 (when c-opt-cpp-prefix |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
235 (let ((here (point))) |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
236 (save-restriction |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
237 (if lim (narrow-to-region lim (point-max))) |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
238 (beginning-of-line) |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
239 (while (eq (char-before (1- (point))) ?\\) |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
240 (forward-line -1)) |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
241 (back-to-indentation) |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
242 (if (and (<= (point) here) |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
243 (looking-at c-opt-cpp-start)) |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
244 t |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
245 (goto-char here) |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
246 nil))))) |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
247 |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
248 (defun c-end-of-macro () |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
249 "Go to the end of a preprocessor directive. |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
250 More accurately, move the point to the end of the closest following |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
251 line that doesn't end with a line continuation backslash - no check is |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
252 done that the point is inside a cpp directive to begin with. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
253 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
254 Note that this function might do hidden buffer changes. See the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
255 comment at the start of cc-engine.el for more info." |
53073
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
256 (while (progn |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
257 (end-of-line) |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
258 (when (and (eq (char-before) ?\\) |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
259 (not (eobp))) |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
260 (forward-char) |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
261 t)))) |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
262 |
106395
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
263 (defun c-syntactic-end-of-macro () |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
264 ;; Go to the end of a CPP directive, or a "safe" pos just before. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
265 ;; |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
266 ;; This is normally the end of the next non-escaped line. A "safe" |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
267 ;; position is one not within a string or comment. (The EOL on a line |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
268 ;; comment is NOT "safe"). |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
269 ;; |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
270 ;; This function must only be called from the beginning of a CPP construct. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
271 ;; |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
272 ;; Note that this function might do hidden buffer changes. See the comment |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
273 ;; at the start of cc-engine.el for more info. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
274 (let* ((here (point)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
275 (there (progn (c-end-of-macro) (point))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
276 (s (parse-partial-sexp here there))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
277 (while (and (or (nth 3 s) ; in a string |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
278 (nth 4 s)) ; in a comment (maybe at end of line comment) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
279 (> there here)) ; No infinite loops, please. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
280 (setq there (1- (nth 8 s))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
281 (setq s (parse-partial-sexp here there))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
282 (point))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
283 |
75027
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
284 (defun c-forward-over-cpp-define-id () |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
285 ;; Assuming point is at the "#" that introduces a preprocessor |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
286 ;; directive, it's moved forward to the end of the identifier which is |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
287 ;; "#define"d (or whatever c-opt-cpp-macro-define specifies). Non-nil |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
288 ;; is returned in this case, in all other cases nil is returned and |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
289 ;; point isn't moved. |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
290 ;; |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
291 ;; This function might do hidden buffer changes. |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
292 (when (and c-opt-cpp-macro-define-id |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
293 (looking-at c-opt-cpp-macro-define-id)) |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
294 (goto-char (match-end 0)))) |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
295 |
53073
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
296 (defun c-forward-to-cpp-define-body () |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
297 ;; Assuming point is at the "#" that introduces a preprocessor |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
298 ;; directive, it's moved forward to the start of the definition body |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
299 ;; if it's a "#define" (or whatever c-opt-cpp-macro-define |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
300 ;; specifies). Non-nil is returned in this case, in all other cases |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
301 ;; nil is returned and point isn't moved. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
302 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
303 ;; This function might do hidden buffer changes. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
304 (when (and c-opt-cpp-macro-define-start |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
305 (looking-at c-opt-cpp-macro-define-start) |
53073
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
306 (not (= (match-end 0) (c-point 'eol)))) |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
307 (goto-char (match-end 0)))) |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
308 |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
309 |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
310 ;;; Basic utility functions. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
311 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
312 (defun c-syntactic-content (from to paren-level) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
313 ;; Return the given region as a string where all syntactic |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
314 ;; whitespace is removed or, where necessary, replaced with a single |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
315 ;; space. If PAREN-LEVEL is given then all parens in the region are |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
316 ;; collapsed to "()", "[]" etc. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
317 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
318 ;; This function might do hidden buffer changes. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
319 |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
320 (save-excursion |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
321 (save-restriction |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
322 (narrow-to-region from to) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
323 (goto-char from) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
324 (let* ((parts (list nil)) (tail parts) pos in-paren) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
325 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
326 (while (re-search-forward c-syntactic-ws-start to t) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
327 (goto-char (setq pos (match-beginning 0))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
328 (c-forward-syntactic-ws) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
329 (if (= (point) pos) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
330 (forward-char) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
331 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
332 (when paren-level |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
333 (save-excursion |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
334 (setq in-paren (= (car (parse-partial-sexp from pos 1)) 1) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
335 pos (point)))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
336 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
337 (if (and (> pos from) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
338 (< (point) to) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
339 (looking-at "\\w\\|\\s_") |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
340 (save-excursion |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
341 (goto-char (1- pos)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
342 (looking-at "\\w\\|\\s_"))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
343 (progn |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
344 (setcdr tail (list (buffer-substring-no-properties from pos) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
345 " ")) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
346 (setq tail (cddr tail))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
347 (setcdr tail (list (buffer-substring-no-properties from pos))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
348 (setq tail (cdr tail))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
349 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
350 (when in-paren |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
351 (when (= (car (parse-partial-sexp pos to -1)) -1) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
352 (setcdr tail (list (buffer-substring-no-properties |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
353 (1- (point)) (point)))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
354 (setq tail (cdr tail)))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
355 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
356 (setq from (point)))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
357 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
358 (setcdr tail (list (buffer-substring-no-properties from to))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
359 (apply 'concat (cdr parts)))))) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
360 |
53073
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
361 (defun c-shift-line-indentation (shift-amt) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
362 ;; Shift the indentation of the current line with the specified |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
363 ;; amount (positive inwards). The buffer is modified only if |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
364 ;; SHIFT-AMT isn't equal to zero. |
53073
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
365 (let ((pos (- (point-max) (point))) |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
366 (c-macro-start c-macro-start) |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
367 tmp-char-inserted) |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
368 (if (zerop shift-amt) |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
369 nil |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
370 ;; If we're on an empty line inside a macro, we take the point |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
371 ;; to be at the current indentation and shift it to the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
372 ;; appropriate column. This way we don't treat the extra |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
373 ;; whitespace out to the line continuation as indentation. |
53073
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
374 (when (and (c-query-and-set-macro-start) |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
375 (looking-at "[ \t]*\\\\$") |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
376 (save-excursion |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
377 (skip-chars-backward " \t") |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
378 (bolp))) |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
379 (insert ?x) |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
380 (backward-char) |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
381 (setq tmp-char-inserted t)) |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
382 (unwind-protect |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
383 (let ((col (current-indentation))) |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
384 (delete-region (c-point 'bol) (c-point 'boi)) |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
385 (beginning-of-line) |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
386 (indent-to (+ col shift-amt))) |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
387 (when tmp-char-inserted |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
388 (delete-char 1)))) |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
389 ;; If initial point was within line's indentation and we're not on |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
390 ;; a line with a line continuation in a macro, position after the |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
391 ;; indentation. Else stay at same point in text. |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
392 (if (and (< (point) (c-point 'boi)) |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
393 (not tmp-char-inserted)) |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
394 (back-to-indentation) |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
395 (if (> (- (point-max) pos) (point)) |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
396 (goto-char (- (point-max) pos)))))) |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
397 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
398 (defsubst c-keyword-sym (keyword) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
399 ;; Return non-nil if the string KEYWORD is a known keyword. More |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
400 ;; precisely, the value is the symbol for the keyword in |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
401 ;; `c-keywords-obarray'. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
402 (intern-soft keyword c-keywords-obarray)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
403 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
404 (defsubst c-keyword-member (keyword-sym lang-constant) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
405 ;; Return non-nil if the symbol KEYWORD-SYM, as returned by |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
406 ;; `c-keyword-sym', is a member of LANG-CONSTANT, which is the name |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
407 ;; of a language constant that ends with "-kwds". If KEYWORD-SYM is |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
408 ;; nil then the result is nil. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
409 (get keyword-sym lang-constant)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
410 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
411 ;; String syntax chars, suitable for skip-syntax-(forward|backward). |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
412 (defconst c-string-syntax (if (memq 'gen-string-delim c-emacs-features) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
413 "\"|" |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
414 "\"")) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
415 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
416 ;; Regexp matching string limit syntax. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
417 (defconst c-string-limit-regexp (if (memq 'gen-string-delim c-emacs-features) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
418 "\\s\"\\|\\s|" |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
419 "\\s\"")) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
420 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
421 ;; Regexp matching WS followed by string limit syntax. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
422 (defconst c-ws*-string-limit-regexp |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
423 (concat "[ \t]*\\(" c-string-limit-regexp "\\)")) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
424 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
425 ;; Holds formatted error strings for the few cases where parse errors |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
426 ;; are reported. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
427 (defvar c-parsing-error nil) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
428 (make-variable-buffer-local 'c-parsing-error) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
429 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
430 (defun c-echo-parsing-error (&optional quiet) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
431 (when (and c-report-syntactic-errors c-parsing-error (not quiet)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
432 (c-benign-error "%s" c-parsing-error)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
433 c-parsing-error) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
434 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
435 ;; Faces given to comments and string literals. This is used in some |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
436 ;; situations to speed up recognition; it isn't mandatory that font |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
437 ;; locking is in use. This variable is extended with the face in |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
438 ;; `c-doc-face-name' when fontification is activated in cc-fonts.el. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
439 (defvar c-literal-faces |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
440 (append '(font-lock-comment-face font-lock-string-face) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
441 (when (facep 'font-lock-comment-delimiter-face) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
442 ;; New in Emacs 22. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
443 '(font-lock-comment-delimiter-face)))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
444 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
445 (defsubst c-put-c-type-property (pos value) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
446 ;; Put a c-type property with the given value at POS. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
447 (c-put-char-property pos 'c-type value)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
448 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
449 (defun c-clear-c-type-property (from to value) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
450 ;; Remove all occurences of the c-type property that has the given |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
451 ;; value in the region between FROM and TO. VALUE is assumed to not |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
452 ;; be nil. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
453 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
454 ;; Note: This assumes that c-type is put on single chars only; it's |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
455 ;; very inefficient if matching properties cover large regions. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
456 (save-excursion |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
457 (goto-char from) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
458 (while (progn |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
459 (when (eq (get-text-property (point) 'c-type) value) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
460 (c-clear-char-property (point) 'c-type)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
461 (goto-char (next-single-property-change (point) 'c-type nil to)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
462 (< (point) to))))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
463 |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
464 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
465 ;; Some debug tools to visualize various special positions. This |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
466 ;; debug code isn't as portable as the rest of CC Mode. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
467 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
468 (cc-bytecomp-defun overlays-in) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
469 (cc-bytecomp-defun overlay-get) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
470 (cc-bytecomp-defun overlay-start) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
471 (cc-bytecomp-defun overlay-end) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
472 (cc-bytecomp-defun delete-overlay) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
473 (cc-bytecomp-defun overlay-put) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
474 (cc-bytecomp-defun make-overlay) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
475 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
476 (defun c-debug-add-face (beg end face) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
477 (c-save-buffer-state ((overlays (overlays-in beg end)) overlay) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
478 (while overlays |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
479 (setq overlay (car overlays) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
480 overlays (cdr overlays)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
481 (when (eq (overlay-get overlay 'face) face) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
482 (setq beg (min beg (overlay-start overlay)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
483 end (max end (overlay-end overlay))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
484 (delete-overlay overlay))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
485 (overlay-put (make-overlay beg end) 'face face))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
486 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
487 (defun c-debug-remove-face (beg end face) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
488 (c-save-buffer-state ((overlays (overlays-in beg end)) overlay |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
489 (ol-beg beg) (ol-end end)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
490 (while overlays |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
491 (setq overlay (car overlays) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
492 overlays (cdr overlays)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
493 (when (eq (overlay-get overlay 'face) face) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
494 (setq ol-beg (min ol-beg (overlay-start overlay)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
495 ol-end (max ol-end (overlay-end overlay))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
496 (delete-overlay overlay))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
497 (when (< ol-beg beg) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
498 (overlay-put (make-overlay ol-beg beg) 'face face)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
499 (when (> ol-end end) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
500 (overlay-put (make-overlay end ol-end) 'face face)))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
501 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
502 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
503 ;; `c-beginning-of-statement-1' and accompanying stuff. |
36920 | 504 |
18844
6b269c4ad2eb
(c-maybe-labelp): Add defvar.
Richard M. Stallman <rms@gnu.org>
parents:
18720
diff
changeset
|
505 ;; KLUDGE ALERT: c-maybe-labelp is used to pass information between |
6b269c4ad2eb
(c-maybe-labelp): Add defvar.
Richard M. Stallman <rms@gnu.org>
parents:
18720
diff
changeset
|
506 ;; c-crosses-statement-barrier-p and c-beginning-of-statement-1. A |
6b269c4ad2eb
(c-maybe-labelp): Add defvar.
Richard M. Stallman <rms@gnu.org>
parents:
18720
diff
changeset
|
507 ;; better way should be implemented, but this will at least shut up |
6b269c4ad2eb
(c-maybe-labelp): Add defvar.
Richard M. Stallman <rms@gnu.org>
parents:
18720
diff
changeset
|
508 ;; the byte compiler. |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
509 (defvar c-maybe-labelp) |
18844
6b269c4ad2eb
(c-maybe-labelp): Add defvar.
Richard M. Stallman <rms@gnu.org>
parents:
18720
diff
changeset
|
510 |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
511 ;; New awk-compatible version of c-beginning-of-statement-1, ACM 2002/6/22 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
512 |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
513 ;; Macros used internally in c-beginning-of-statement-1 for the |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
514 ;; automaton actions. |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
515 (defmacro c-bos-push-state () |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
516 '(setq stack (cons (cons state saved-pos) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
517 stack))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
518 (defmacro c-bos-pop-state (&optional do-if-done) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
519 `(if (setq state (car (car stack)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
520 saved-pos (cdr (car stack)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
521 stack (cdr stack)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
522 t |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
523 ,do-if-done |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
524 (throw 'loop nil))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
525 (defmacro c-bos-pop-state-and-retry () |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
526 '(throw 'loop (setq state (car (car stack)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
527 saved-pos (cdr (car stack)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
528 ;; Throw nil if stack is empty, else throw non-nil. |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
529 stack (cdr stack)))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
530 (defmacro c-bos-save-pos () |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
531 '(setq saved-pos (vector pos tok ptok pptok))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
532 (defmacro c-bos-restore-pos () |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
533 '(unless (eq (elt saved-pos 0) start) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
534 (setq pos (elt saved-pos 0) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
535 tok (elt saved-pos 1) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
536 ptok (elt saved-pos 2) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
537 pptok (elt saved-pos 3)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
538 (goto-char pos) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
539 (setq sym nil))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
540 (defmacro c-bos-save-error-info (missing got) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
541 `(setq saved-pos (vector pos ,missing ,got))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
542 (defmacro c-bos-report-error () |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
543 '(unless noerror |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
544 (setq c-parsing-error |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
545 (format "No matching `%s' found for `%s' on line %d" |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
546 (elt saved-pos 1) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
547 (elt saved-pos 2) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
548 (1+ (count-lines (point-min) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
549 (c-point 'bol (elt saved-pos 0)))))))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
550 |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
551 (defun c-beginning-of-statement-1 (&optional lim ignore-labels |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
552 noerror comma-delim) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
553 "Move to the start of the current statement or declaration, or to |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
554 the previous one if already at the beginning of one. Only |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
555 statements/declarations on the same level are considered, i.e. don't |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
556 move into or out of sexps (not even normal expression parentheses). |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
557 |
98693
69a04789c5f0
Amend several doc strings and comments.
Alan Mackenzie <acm@muc.de>
parents:
96145
diff
changeset
|
558 If point is already at the earliest statment within braces or parens, |
69a04789c5f0
Amend several doc strings and comments.
Alan Mackenzie <acm@muc.de>
parents:
96145
diff
changeset
|
559 this function doesn't move back into any whitespace preceding it; it |
69a04789c5f0
Amend several doc strings and comments.
Alan Mackenzie <acm@muc.de>
parents:
96145
diff
changeset
|
560 returns 'same in this case. |
69a04789c5f0
Amend several doc strings and comments.
Alan Mackenzie <acm@muc.de>
parents:
96145
diff
changeset
|
561 |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
562 Stop at statement continuation tokens like \"else\", \"catch\", |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
563 \"finally\" and the \"while\" in \"do ... while\" if the start point |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
564 is within the continuation. If starting at such a token, move to the |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
565 corresponding statement start. If at the beginning of a statement, |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
566 move to the closest containing statement if there is any. This might |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
567 also stop at a continuation clause. |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
568 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
569 Labels are treated as part of the following statements if |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
570 IGNORE-LABELS is non-nil. (FIXME: Doesn't work if we stop at a known |
69140
3d8b060d10fb
cc-align.el, cc-awk.el, cc-bytecomp.el, cc-cmds.el, cc-compat.el,
Alan Mackenzie <acm@muc.de>
parents:
68773
diff
changeset
|
571 statement start keyword.) Otherwise, each label is treated as a |
3d8b060d10fb
cc-align.el, cc-awk.el, cc-bytecomp.el, cc-cmds.el, cc-compat.el,
Alan Mackenzie <acm@muc.de>
parents:
68773
diff
changeset
|
572 separate statement. |
3d8b060d10fb
cc-align.el, cc-awk.el, cc-bytecomp.el, cc-cmds.el, cc-compat.el,
Alan Mackenzie <acm@muc.de>
parents:
68773
diff
changeset
|
573 |
3d8b060d10fb
cc-align.el, cc-awk.el, cc-bytecomp.el, cc-cmds.el, cc-compat.el,
Alan Mackenzie <acm@muc.de>
parents:
68773
diff
changeset
|
574 Macros are ignored \(i.e. skipped over) unless point is within one, in |
3d8b060d10fb
cc-align.el, cc-awk.el, cc-bytecomp.el, cc-cmds.el, cc-compat.el,
Alan Mackenzie <acm@muc.de>
parents:
68773
diff
changeset
|
575 which case the content of the macro is treated as normal code. Aside |
3d8b060d10fb
cc-align.el, cc-awk.el, cc-bytecomp.el, cc-cmds.el, cc-compat.el,
Alan Mackenzie <acm@muc.de>
parents:
68773
diff
changeset
|
576 from any normal statement starts found in it, stop at the first token |
3d8b060d10fb
cc-align.el, cc-awk.el, cc-bytecomp.el, cc-cmds.el, cc-compat.el,
Alan Mackenzie <acm@muc.de>
parents:
68773
diff
changeset
|
577 of the content in the macro, i.e. the expression of an \"#if\" or the |
3d8b060d10fb
cc-align.el, cc-awk.el, cc-bytecomp.el, cc-cmds.el, cc-compat.el,
Alan Mackenzie <acm@muc.de>
parents:
68773
diff
changeset
|
578 start of the definition in a \"#define\". Also stop at start of |
3d8b060d10fb
cc-align.el, cc-awk.el, cc-bytecomp.el, cc-cmds.el, cc-compat.el,
Alan Mackenzie <acm@muc.de>
parents:
68773
diff
changeset
|
579 macros before leaving them. |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
580 |
98693
69a04789c5f0
Amend several doc strings and comments.
Alan Mackenzie <acm@muc.de>
parents:
96145
diff
changeset
|
581 Return: |
102168
4f3b9ebc200a
cc-engine.el (c-beginning-of-statement-1): Enhance to parse case clauses
Alan Mackenzie <acm@muc.de>
parents:
101112
diff
changeset
|
582 'label if stopped at a label or \"case...:\" or \"default:\"; |
98693
69a04789c5f0
Amend several doc strings and comments.
Alan Mackenzie <acm@muc.de>
parents:
96145
diff
changeset
|
583 'same if stopped at the beginning of the current statement; |
69a04789c5f0
Amend several doc strings and comments.
Alan Mackenzie <acm@muc.de>
parents:
96145
diff
changeset
|
584 'up if stepped to a containing statement; |
69a04789c5f0
Amend several doc strings and comments.
Alan Mackenzie <acm@muc.de>
parents:
96145
diff
changeset
|
585 'previous if stepped to a preceding statement; |
69a04789c5f0
Amend several doc strings and comments.
Alan Mackenzie <acm@muc.de>
parents:
96145
diff
changeset
|
586 'beginning if stepped from a statement continuation clause to |
69a04789c5f0
Amend several doc strings and comments.
Alan Mackenzie <acm@muc.de>
parents:
96145
diff
changeset
|
587 its start clause; or |
69a04789c5f0
Amend several doc strings and comments.
Alan Mackenzie <acm@muc.de>
parents:
96145
diff
changeset
|
588 'macro if stepped to a macro start. |
69a04789c5f0
Amend several doc strings and comments.
Alan Mackenzie <acm@muc.de>
parents:
96145
diff
changeset
|
589 Note that 'same and not 'label is returned if stopped at the same |
69a04789c5f0
Amend several doc strings and comments.
Alan Mackenzie <acm@muc.de>
parents:
96145
diff
changeset
|
590 label without crossing the colon character. |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
591 |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
592 LIM may be given to limit the search. If the search hits the limit, |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
593 point will be left at the closest following token, or at the start |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
594 position if that is less ('same is returned in this case). |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
595 |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
596 NOERROR turns off error logging to `c-parsing-error'. |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
597 |
69140
3d8b060d10fb
cc-align.el, cc-awk.el, cc-bytecomp.el, cc-cmds.el, cc-compat.el,
Alan Mackenzie <acm@muc.de>
parents:
68773
diff
changeset
|
598 Normally only ';' and virtual semicolons are considered to delimit |
3d8b060d10fb
cc-align.el, cc-awk.el, cc-bytecomp.el, cc-cmds.el, cc-compat.el,
Alan Mackenzie <acm@muc.de>
parents:
68773
diff
changeset
|
599 statements, but if COMMA-DELIM is non-nil then ',' is treated |
3d8b060d10fb
cc-align.el, cc-awk.el, cc-bytecomp.el, cc-cmds.el, cc-compat.el,
Alan Mackenzie <acm@muc.de>
parents:
68773
diff
changeset
|
600 as a delimiter too. |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
601 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
602 Note that this function might do hidden buffer changes. See the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
603 comment at the start of cc-engine.el for more info." |
18720 | 604 |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
605 ;; The bulk of this function is a pushdown automaton that looks at statement |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
606 ;; boundaries and the tokens (such as "while") in c-opt-block-stmt-key. Its |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
607 ;; purpose is to keep track of nested statements, ensuring that such |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
608 ;; statments are skipped over in their entirety (somewhat akin to what C-M-p |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
609 ;; does with nested braces/brackets/parentheses). |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
610 ;; |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
611 ;; Note: The position of a boundary is the following token. |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
612 ;; |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
613 ;; Beginning with the current token (the one following point), move back one |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
614 ;; sexp at a time (where a sexp is, more or less, either a token or the |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
615 ;; entire contents of a brace/bracket/paren pair). Each time a statement |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
616 ;; boundary is crossed or a "while"-like token is found, update the state of |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
617 ;; the PDA. Stop at the beginning of a statement when the stack (holding |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
618 ;; nested statement info) is empty and the position has been moved. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
619 ;; |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
620 ;; The following variables constitute the PDA: |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
621 ;; |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
622 ;; sym: This is either the "while"-like token (e.g. 'for) we've just |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
623 ;; scanned back over, 'boundary if we've just gone back over a |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
624 ;; statement boundary, or nil otherwise. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
625 ;; state: takes one of the values (nil else else-boundary while |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
626 ;; while-boundary catch catch-boundary). |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
627 ;; nil means "no "while"-like token yet scanned". |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
628 ;; 'else, for example, means "just gone back over an else". |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
629 ;; 'else-boundary means "just gone back over a statement boundary |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
630 ;; immediately after having gone back over an else". |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
631 ;; saved-pos: A vector of either saved positions (tok ptok pptok, etc.) or |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
632 ;; of error reporting information. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
633 ;; stack: The stack onto which the PDA pushes its state. Each entry |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
634 ;; consists of a saved value of state and saved-pos. An entry is |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
635 ;; pushed when we move back over a "continuation" token (e.g. else) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
636 ;; and popped when we encounter the corresponding opening token |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
637 ;; (e.g. if). |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
638 ;; |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
639 ;; |
79408
a29ca195b71e
(c-crosses-statement-barrier-p): Fix typo in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents:
78656
diff
changeset
|
640 ;; The following diagram briefly outlines the PDA. |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
641 ;; |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
642 ;; Common state: |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
643 ;; "else": Push state, goto state `else'. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
644 ;; "while": Push state, goto state `while'. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
645 ;; "catch" or "finally": Push state, goto state `catch'. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
646 ;; boundary: Pop state. |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
647 ;; other: Do nothing special. |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
648 ;; |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
649 ;; State `else': |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
650 ;; boundary: Goto state `else-boundary'. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
651 ;; other: Error, pop state, retry token. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
652 ;; |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
653 ;; State `else-boundary': |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
654 ;; "if": Pop state. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
655 ;; boundary: Error, pop state. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
656 ;; other: See common state. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
657 ;; |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
658 ;; State `while': |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
659 ;; boundary: Save position, goto state `while-boundary'. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
660 ;; other: Pop state, retry token. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
661 ;; |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
662 ;; State `while-boundary': |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
663 ;; "do": Pop state. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
664 ;; boundary: Restore position if it's not at start, pop state. [*see below] |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
665 ;; other: See common state. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
666 ;; |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
667 ;; State `catch': |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
668 ;; boundary: Goto state `catch-boundary'. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
669 ;; other: Error, pop state, retry token. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
670 ;; |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
671 ;; State `catch-boundary': |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
672 ;; "try": Pop state. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
673 ;; "catch": Goto state `catch'. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
674 ;; boundary: Error, pop state. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
675 ;; other: See common state. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
676 ;; |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
677 ;; [*] In the `while-boundary' state, we had pushed a 'while state, and were |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
678 ;; searching for a "do" which would have opened a do-while. If we didn't |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
679 ;; find it, we discard the analysis done since the "while", go back to this |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
680 ;; token in the buffer and restart the scanning there, this time WITHOUT |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
681 ;; pushing the 'while state onto the stack. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
682 ;; |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
683 ;; In addition to the above there is some special handling of labels |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
684 ;; and macros. |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
685 |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
686 (let ((case-fold-search nil) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
687 (start (point)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
688 macro-start |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
689 (delims (if comma-delim '(?\; ?,) '(?\;))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
690 (c-stmt-delim-chars (if comma-delim |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
691 c-stmt-delim-chars-with-comma |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
692 c-stmt-delim-chars)) |
102168
4f3b9ebc200a
cc-engine.el (c-beginning-of-statement-1): Enhance to parse case clauses
Alan Mackenzie <acm@muc.de>
parents:
101112
diff
changeset
|
693 c-in-literal-cache c-maybe-labelp after-case:-pos saved |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
694 ;; Current position. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
695 pos |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
696 ;; Position of last stmt boundary character (e.g. ;). |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
697 boundary-pos |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
698 ;; The position of the last sexp or bound that follows the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
699 ;; first found colon, i.e. the start of the nonlabel part of |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
700 ;; the statement. It's `start' if a colon is found just after |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
701 ;; the start. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
702 after-labels-pos |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
703 ;; Like `after-labels-pos', but the first such position inside |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
704 ;; a label, i.e. the start of the last label before the start |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
705 ;; of the nonlabel part of the statement. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
706 last-label-pos |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
707 ;; The last position where a label is possible provided the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
708 ;; statement started there. It's nil as long as no invalid |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
709 ;; label content has been found (according to |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
710 ;; `c-nonlabel-token-key'. It's `start' if no valid label |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
711 ;; content was found in the label. Note that we might still |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
712 ;; regard it a label if it starts with `c-label-kwds'. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
713 label-good-pos |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
714 ;; Symbol just scanned back over (e.g. 'while or 'boundary). |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
715 ;; See above. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
716 sym |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
717 ;; Current state in the automaton. See above. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
718 state |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
719 ;; Current saved positions. See above. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
720 saved-pos |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
721 ;; Stack of conses (state . saved-pos). |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
722 stack |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
723 ;; Regexp which matches "for", "if", etc. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
724 (cond-key (or c-opt-block-stmt-key |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
725 "\\<\\>")) ; Matches nothing. |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
726 ;; Return value. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
727 (ret 'same) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
728 ;; Positions of the last three sexps or bounds we've stopped at. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
729 tok ptok pptok) |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
730 |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
731 (save-restriction |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
732 (if lim (narrow-to-region lim (point-max))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
733 |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
734 (if (save-excursion |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
735 (and (c-beginning-of-macro) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
736 (/= (point) start))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
737 (setq macro-start (point))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
738 |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
739 ;; Try to skip back over unary operator characters, to register |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
740 ;; that we've moved. |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
741 (while (progn |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
742 (setq pos (point)) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
743 (c-backward-syntactic-ws) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
744 ;; Protect post-++/-- operators just before a virtual semicolon. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
745 (and (not (c-at-vsemi-p)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
746 (/= (skip-chars-backward "-+!*&~@`#") 0)))) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
747 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
748 ;; Skip back over any semicolon here. If it was a bare semicolon, we're |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
749 ;; done. Later on we ignore the boundaries for statements that don't |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
750 ;; contain any sexp. The only thing that is affected is that the error |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
751 ;; checking is a little less strict, and we really don't bother. |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
752 (if (and (memq (char-before) delims) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
753 (progn (forward-char -1) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
754 (setq saved (point)) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
755 (c-backward-syntactic-ws) |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
756 (or (memq (char-before) delims) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
757 (memq (char-before) '(?: nil)) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
758 (eq (char-syntax (char-before)) ?\() |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
759 (c-at-vsemi-p)))) |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
760 (setq ret 'previous |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
761 pos saved) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
762 |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
763 ;; Begin at start and not pos to detect macros if we stand |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
764 ;; directly after the #. |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
765 (goto-char start) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
766 (if (looking-at "\\<\\|\\W") |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
767 ;; Record this as the first token if not starting inside it. |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
768 (setq tok start)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
769 |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
770 ;; The following while loop goes back one sexp (balanced parens, |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
771 ;; etc. with contents, or symbol or suchlike) each iteration. This |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
772 ;; movement is accomplished with a call to scan-sexps approx 130 lines |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
773 ;; below. |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
774 (while |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
775 (catch 'loop ;; Throw nil to break, non-nil to continue. |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
776 (cond |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
777 ((save-excursion |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
778 (and macro-start ; Always NIL for AWK. |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
779 (progn (skip-chars-backward " \t") |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
780 (eq (char-before) ?#)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
781 (progn (setq saved (1- (point))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
782 (beginning-of-line) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
783 (not (eq (char-before (1- (point))) ?\\))) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
784 (looking-at c-opt-cpp-start) |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
785 (progn (skip-chars-forward " \t") |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
786 (eq (point) saved)))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
787 (goto-char saved) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
788 (if (and (c-forward-to-cpp-define-body) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
789 (progn (c-forward-syntactic-ws start) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
790 (< (point) start))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
791 ;; Stop at the first token in the content of the macro. |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
792 (setq pos (point) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
793 ignore-labels t) ; Avoid the label check on exit. |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
794 (setq pos saved |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
795 ret 'macro |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
796 ignore-labels t)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
797 (throw 'loop nil)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
798 |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
799 ;; Do a round through the automaton if we've just passed a |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
800 ;; statement boundary or passed a "while"-like token. |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
801 ((or sym |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
802 (and (looking-at cond-key) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
803 (setq sym (intern (match-string 1))))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
804 |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
805 (when (and (< pos start) (null stack)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
806 (throw 'loop nil)) |
18720 | 807 |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
808 ;; The PDA state handling. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
809 ;; |
53073
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
810 ;; Refer to the description of the PDA in the opening |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
811 ;; comments. In the following OR form, the first leaf |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
812 ;; attempts to handles one of the specific actions detailed |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
813 ;; (e.g., finding token "if" whilst in state `else-boundary'). |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
814 ;; We drop through to the second leaf (which handles common |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
815 ;; state) if no specific handler is found in the first cond. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
816 ;; If a parsing error is detected (e.g. an "else" with no |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
817 ;; preceding "if"), we throw to the enclosing catch. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
818 ;; |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
819 ;; Note that the (eq state 'else) means |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
820 ;; "we've just passed an else", NOT "we're looking for an |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
821 ;; else". |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
822 (or (cond |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
823 ((eq state 'else) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
824 (if (eq sym 'boundary) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
825 (setq state 'else-boundary) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
826 (c-bos-report-error) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
827 (c-bos-pop-state-and-retry))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
828 |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
829 ((eq state 'else-boundary) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
830 (cond ((eq sym 'if) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
831 (c-bos-pop-state (setq ret 'beginning))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
832 ((eq sym 'boundary) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
833 (c-bos-report-error) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
834 (c-bos-pop-state)))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
835 |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
836 ((eq state 'while) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
837 (if (and (eq sym 'boundary) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
838 ;; Since this can cause backtracking we do a |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
839 ;; little more careful analysis to avoid it: |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
840 ;; If there's a label in front of the while |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
841 ;; it can't be part of a do-while. |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
842 (not after-labels-pos)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
843 (progn (c-bos-save-pos) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
844 (setq state 'while-boundary)) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
845 (c-bos-pop-state-and-retry))) ; Can't be a do-while |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
846 |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
847 ((eq state 'while-boundary) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
848 (cond ((eq sym 'do) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
849 (c-bos-pop-state (setq ret 'beginning))) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
850 ((eq sym 'boundary) ; isn't a do-while |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
851 (c-bos-restore-pos) ; the position of the while |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
852 (c-bos-pop-state)))) ; no longer searching for do. |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
853 |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
854 ((eq state 'catch) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
855 (if (eq sym 'boundary) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
856 (setq state 'catch-boundary) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
857 (c-bos-report-error) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
858 (c-bos-pop-state-and-retry))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
859 |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
860 ((eq state 'catch-boundary) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
861 (cond |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
862 ((eq sym 'try) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
863 (c-bos-pop-state (setq ret 'beginning))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
864 ((eq sym 'catch) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
865 (setq state 'catch)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
866 ((eq sym 'boundary) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
867 (c-bos-report-error) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
868 (c-bos-pop-state))))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
869 |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
870 ;; This is state common. We get here when the previous |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
871 ;; cond statement found no particular state handler. |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
872 (cond ((eq sym 'boundary) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
873 ;; If we have a boundary at the start |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
874 ;; position we push a frame to go to the |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
875 ;; previous statement. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
876 (if (>= pos start) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
877 (c-bos-push-state) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
878 (c-bos-pop-state))) |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
879 ((eq sym 'else) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
880 (c-bos-push-state) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
881 (c-bos-save-error-info 'if 'else) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
882 (setq state 'else)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
883 ((eq sym 'while) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
884 ;; Is this a real while, or a do-while? |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
885 ;; The next `when' triggers unless we are SURE that |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
886 ;; the `while' is not the tailend of a `do-while'. |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
887 (when (or (not pptok) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
888 (memq (char-after pptok) delims) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
889 ;; The following kludge is to prevent |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
890 ;; infinite recursion when called from |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
891 ;; c-awk-after-if-for-while-condition-p, |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
892 ;; or the like. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
893 (and (eq (point) start) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
894 (c-vsemi-status-unknown-p)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
895 (c-at-vsemi-p pptok)) |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
896 ;; Since this can cause backtracking we do a |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
897 ;; little more careful analysis to avoid it: If |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
898 ;; the while isn't followed by a (possibly |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
899 ;; virtual) semicolon it can't be a do-while. |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
900 (c-bos-push-state) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
901 (setq state 'while))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
902 ((memq sym '(catch finally)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
903 (c-bos-push-state) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
904 (c-bos-save-error-info 'try sym) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
905 (setq state 'catch)))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
906 |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
907 (when c-maybe-labelp |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
908 ;; We're either past a statement boundary or at the |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
909 ;; start of a statement, so throw away any label data |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
910 ;; for the previous one. |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
911 (setq after-labels-pos nil |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
912 last-label-pos nil |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
913 c-maybe-labelp nil)))) |
18720 | 914 |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
915 ;; Step to the previous sexp, but not if we crossed a |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
916 ;; boundary, since that doesn't consume an sexp. |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
917 (if (eq sym 'boundary) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
918 (setq ret 'previous) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
919 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
920 ;; HERE IS THE SINGLE PLACE INSIDE THE PDA LOOP WHERE WE MOVE |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
921 ;; BACKWARDS THROUGH THE SOURCE. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
922 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
923 ;; This is typically fast with the caching done by |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
924 ;; c-(backward|forward)-sws. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
925 (c-backward-syntactic-ws) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
926 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
927 (let ((before-sws-pos (point)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
928 ;; Set as long as we have to continue jumping by sexps. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
929 ;; It's the position to use as end in the next round. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
930 sexp-loop-continue-pos |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
931 ;; The end position of the area to search for statement |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
932 ;; barriers in this round. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
933 (sexp-loop-end-pos pos)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
934 |
69140
3d8b060d10fb
cc-align.el, cc-awk.el, cc-bytecomp.el, cc-cmds.el, cc-compat.el,
Alan Mackenzie <acm@muc.de>
parents:
68773
diff
changeset
|
935 ;; The following while goes back one sexp per iteration. |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
936 (while |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
937 (progn |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
938 (unless (c-safe (c-backward-sexp) t) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
939 ;; Give up if we hit an unbalanced block. Since the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
940 ;; stack won't be empty the code below will report a |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
941 ;; suitable error. |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
942 (throw 'loop nil)) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
943 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
944 ;; Check if the sexp movement crossed a statement or |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
945 ;; declaration boundary. But first modify the point |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
946 ;; so that `c-crosses-statement-barrier-p' only looks |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
947 ;; at the non-sexp chars following the sexp. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
948 (save-excursion |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
949 (when (setq |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
950 boundary-pos |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
951 (cond |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
952 ((if macro-start |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
953 nil |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
954 (save-excursion |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
955 (when (c-beginning-of-macro) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
956 ;; Set continuation position in case |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
957 ;; `c-crosses-statement-barrier-p' |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
958 ;; doesn't detect anything below. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
959 (setq sexp-loop-continue-pos (point))))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
960 ;; If the sexp movement took us into a |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
961 ;; macro then there were only some non-sexp |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
962 ;; chars after it. Skip out of the macro |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
963 ;; to analyze them but not the non-sexp |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
964 ;; chars that might be inside the macro. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
965 (c-end-of-macro) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
966 (c-crosses-statement-barrier-p |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
967 (point) sexp-loop-end-pos)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
968 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
969 ((and |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
970 (eq (char-after) ?{) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
971 (not (c-looking-at-inexpr-block lim nil t))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
972 ;; Passed a block sexp. That's a boundary |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
973 ;; alright. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
974 (point)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
975 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
976 ((looking-at "\\s\(") |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
977 ;; Passed some other paren. Only analyze |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
978 ;; the non-sexp chars after it. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
979 (goto-char (1+ (c-down-list-backward |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
980 before-sws-pos))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
981 ;; We're at a valid token start position |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
982 ;; (outside the `save-excursion') if |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
983 ;; `c-crosses-statement-barrier-p' failed. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
984 (c-crosses-statement-barrier-p |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
985 (point) sexp-loop-end-pos)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
986 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
987 (t |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
988 ;; Passed a symbol sexp or line |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
989 ;; continuation. It doesn't matter that |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
990 ;; it's included in the analyzed region. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
991 (if (c-crosses-statement-barrier-p |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
992 (point) sexp-loop-end-pos) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
993 t |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
994 ;; If it was a line continuation then we |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
995 ;; have to continue looping. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
996 (if (looking-at "\\\\$") |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
997 (setq sexp-loop-continue-pos (point))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
998 nil)))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
999 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1000 (setq pptok ptok |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1001 ptok tok |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1002 tok boundary-pos |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1003 sym 'boundary) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1004 ;; Like a C "continue". Analyze the next sexp. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1005 (throw 'loop t))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1006 |
102168
4f3b9ebc200a
cc-engine.el (c-beginning-of-statement-1): Enhance to parse case clauses
Alan Mackenzie <acm@muc.de>
parents:
101112
diff
changeset
|
1007 sexp-loop-continue-pos) ; End of "go back a sexp" loop condition. |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1008 (goto-char sexp-loop-continue-pos) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1009 (setq sexp-loop-end-pos sexp-loop-continue-pos |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1010 sexp-loop-continue-pos nil)))) |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
1011 |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
1012 ;; ObjC method def? |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
1013 (when (and c-opt-method-key |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
1014 (setq saved (c-in-method-def-p))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
1015 (setq pos saved |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
1016 ignore-labels t) ; Avoid the label check on exit. |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
1017 (throw 'loop nil)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
1018 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1019 ;; Handle labels. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1020 (unless (eq ignore-labels t) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1021 (when (numberp c-maybe-labelp) |
69140
3d8b060d10fb
cc-align.el, cc-awk.el, cc-bytecomp.el, cc-cmds.el, cc-compat.el,
Alan Mackenzie <acm@muc.de>
parents:
68773
diff
changeset
|
1022 ;; `c-crosses-statement-barrier-p' has found a colon, so we |
3d8b060d10fb
cc-align.el, cc-awk.el, cc-bytecomp.el, cc-cmds.el, cc-compat.el,
Alan Mackenzie <acm@muc.de>
parents:
68773
diff
changeset
|
1023 ;; might be in a label now. Have we got a real label |
3d8b060d10fb
cc-align.el, cc-awk.el, cc-bytecomp.el, cc-cmds.el, cc-compat.el,
Alan Mackenzie <acm@muc.de>
parents:
68773
diff
changeset
|
1024 ;; (including a case label) or something like C++'s "public:"? |
102168
4f3b9ebc200a
cc-engine.el (c-beginning-of-statement-1): Enhance to parse case clauses
Alan Mackenzie <acm@muc.de>
parents:
101112
diff
changeset
|
1025 ;; A case label might use an expression rather than a token. |
4f3b9ebc200a
cc-engine.el (c-beginning-of-statement-1): Enhance to parse case clauses
Alan Mackenzie <acm@muc.de>
parents:
101112
diff
changeset
|
1026 (setq after-case:-pos (or tok start)) |
4f3b9ebc200a
cc-engine.el (c-beginning-of-statement-1): Enhance to parse case clauses
Alan Mackenzie <acm@muc.de>
parents:
101112
diff
changeset
|
1027 (if (looking-at c-nonlabel-token-key) ; e.g. "while" or "'a'" |
4f3b9ebc200a
cc-engine.el (c-beginning-of-statement-1): Enhance to parse case clauses
Alan Mackenzie <acm@muc.de>
parents:
101112
diff
changeset
|
1028 (setq c-maybe-labelp nil) |
4f3b9ebc200a
cc-engine.el (c-beginning-of-statement-1): Enhance to parse case clauses
Alan Mackenzie <acm@muc.de>
parents:
101112
diff
changeset
|
1029 (if after-labels-pos ; Have we already encountered a label? |
4f3b9ebc200a
cc-engine.el (c-beginning-of-statement-1): Enhance to parse case clauses
Alan Mackenzie <acm@muc.de>
parents:
101112
diff
changeset
|
1030 (if (not last-label-pos) |
4f3b9ebc200a
cc-engine.el (c-beginning-of-statement-1): Enhance to parse case clauses
Alan Mackenzie <acm@muc.de>
parents:
101112
diff
changeset
|
1031 (setq last-label-pos (or tok start))) |
4f3b9ebc200a
cc-engine.el (c-beginning-of-statement-1): Enhance to parse case clauses
Alan Mackenzie <acm@muc.de>
parents:
101112
diff
changeset
|
1032 (setq after-labels-pos (or tok start))) |
4f3b9ebc200a
cc-engine.el (c-beginning-of-statement-1): Enhance to parse case clauses
Alan Mackenzie <acm@muc.de>
parents:
101112
diff
changeset
|
1033 (setq c-maybe-labelp t |
4f3b9ebc200a
cc-engine.el (c-beginning-of-statement-1): Enhance to parse case clauses
Alan Mackenzie <acm@muc.de>
parents:
101112
diff
changeset
|
1034 label-good-pos nil))) ; bogus "label" |
69140
3d8b060d10fb
cc-align.el, cc-awk.el, cc-bytecomp.el, cc-cmds.el, cc-compat.el,
Alan Mackenzie <acm@muc.de>
parents:
68773
diff
changeset
|
1035 |
3d8b060d10fb
cc-align.el, cc-awk.el, cc-bytecomp.el, cc-cmds.el, cc-compat.el,
Alan Mackenzie <acm@muc.de>
parents:
68773
diff
changeset
|
1036 (when (and (not label-good-pos) ; i.e. no invalid "label"'s yet |
3d8b060d10fb
cc-align.el, cc-awk.el, cc-bytecomp.el, cc-cmds.el, cc-compat.el,
Alan Mackenzie <acm@muc.de>
parents:
68773
diff
changeset
|
1037 ; been found. |
3d8b060d10fb
cc-align.el, cc-awk.el, cc-bytecomp.el, cc-cmds.el, cc-compat.el,
Alan Mackenzie <acm@muc.de>
parents:
68773
diff
changeset
|
1038 (looking-at c-nonlabel-token-key)) ; e.g. "while :" |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1039 ;; We're in a potential label and it's the first |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1040 ;; time we've found something that isn't allowed in |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1041 ;; one. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1042 (setq label-good-pos (or tok start)))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1043 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1044 ;; We've moved back by a sexp, so update the token positions. |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
1045 (setq sym nil |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
1046 pptok ptok |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
1047 ptok tok |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
1048 tok (point) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1049 pos tok))) ; Not nil (for the while loop). |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
1050 |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
1051 ;; If the stack isn't empty there might be errors to report. |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
1052 (while stack |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
1053 (if (and (vectorp saved-pos) (eq (length saved-pos) 3)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
1054 (c-bos-report-error)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
1055 (setq saved-pos (cdr (car stack)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
1056 stack (cdr stack))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
1057 |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
1058 (when (and (eq ret 'same) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
1059 (not (memq sym '(boundary ignore nil)))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
1060 ;; Need to investigate closer whether we've crossed |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
1061 ;; between a substatement and its containing statement. |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
1062 (if (setq saved (if (looking-at c-block-stmt-1-key) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
1063 ptok |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
1064 pptok)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
1065 (cond ((> start saved) (setq pos saved)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
1066 ((= start saved) (setq ret 'up))))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
1067 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1068 (when (and (not ignore-labels) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1069 (eq c-maybe-labelp t) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1070 (not (eq ret 'beginning)) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1071 after-labels-pos |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1072 (or (not label-good-pos) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1073 (<= label-good-pos pos) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1074 (progn |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1075 (goto-char (if (and last-label-pos |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1076 (< last-label-pos start)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1077 last-label-pos |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1078 pos)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1079 (looking-at c-label-kwds-regexp)))) |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
1080 ;; We're in a label. Maybe we should step to the statement |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
1081 ;; after it. |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
1082 (if (< after-labels-pos start) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
1083 (setq pos after-labels-pos) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
1084 (setq ret 'label) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1085 (if (and last-label-pos (< last-label-pos start)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1086 ;; Might have jumped over several labels. Go to the last one. |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
1087 (setq pos last-label-pos))))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
1088 |
102168
4f3b9ebc200a
cc-engine.el (c-beginning-of-statement-1): Enhance to parse case clauses
Alan Mackenzie <acm@muc.de>
parents:
101112
diff
changeset
|
1089 ;; Have we got "case <expression>:"? |
4f3b9ebc200a
cc-engine.el (c-beginning-of-statement-1): Enhance to parse case clauses
Alan Mackenzie <acm@muc.de>
parents:
101112
diff
changeset
|
1090 (goto-char pos) |
4f3b9ebc200a
cc-engine.el (c-beginning-of-statement-1): Enhance to parse case clauses
Alan Mackenzie <acm@muc.de>
parents:
101112
diff
changeset
|
1091 (when (and after-case:-pos |
4f3b9ebc200a
cc-engine.el (c-beginning-of-statement-1): Enhance to parse case clauses
Alan Mackenzie <acm@muc.de>
parents:
101112
diff
changeset
|
1092 (not (eq ret 'beginning)) |
4f3b9ebc200a
cc-engine.el (c-beginning-of-statement-1): Enhance to parse case clauses
Alan Mackenzie <acm@muc.de>
parents:
101112
diff
changeset
|
1093 (looking-at c-case-kwds-regexp)) |
4f3b9ebc200a
cc-engine.el (c-beginning-of-statement-1): Enhance to parse case clauses
Alan Mackenzie <acm@muc.de>
parents:
101112
diff
changeset
|
1094 (if (< after-case:-pos start) |
105206
60cf2b54da00
cc-langs.el (c-nonlabel-token-key): Allow quoted character constants (as
Alan Mackenzie <acm@muc.de>
parents:
104693
diff
changeset
|
1095 (setq pos after-case:-pos)) |
60cf2b54da00
cc-langs.el (c-nonlabel-token-key): Allow quoted character constants (as
Alan Mackenzie <acm@muc.de>
parents:
104693
diff
changeset
|
1096 (if (eq ret 'same) |
60cf2b54da00
cc-langs.el (c-nonlabel-token-key): Allow quoted character constants (as
Alan Mackenzie <acm@muc.de>
parents:
104693
diff
changeset
|
1097 (setq ret 'label))) |
102168
4f3b9ebc200a
cc-engine.el (c-beginning-of-statement-1): Enhance to parse case clauses
Alan Mackenzie <acm@muc.de>
parents:
101112
diff
changeset
|
1098 |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
1099 ;; Skip over the unary operators that can start the statement. |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
1100 (while (progn |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1101 (c-backward-syntactic-ws) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1102 ;; protect AWK post-inc/decrement operators, etc. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1103 (and (not (c-at-vsemi-p (point))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1104 (/= (skip-chars-backward "-+!*&~@`#") 0))) |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
1105 (setq pos (point))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
1106 (goto-char pos) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
1107 ret))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
1108 |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
1109 (defun c-crosses-statement-barrier-p (from to) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
1110 "Return non-nil if buffer positions FROM to TO cross one or more |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
1111 statement or declaration boundaries. The returned value is actually |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1112 the position of the earliest boundary char. FROM must not be within |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1113 a string or comment. |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
1114 |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
1115 The variable `c-maybe-labelp' is set to the position of the first `:' that |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
1116 might start a label (i.e. not part of `::' and not preceded by `?'). If a |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1117 single `?' is found, then `c-maybe-labelp' is cleared. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1118 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1119 For AWK, a statement which is terminated by an EOL (not a \; or a }) is |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1120 regarded as having a \"virtual semicolon\" immediately after the last token on |
79408
a29ca195b71e
(c-crosses-statement-barrier-p): Fix typo in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents:
78656
diff
changeset
|
1121 the line. If this virtual semicolon is _at_ from, the function recognizes it. |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1122 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1123 Note that this function might do hidden buffer changes. See the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1124 comment at the start of cc-engine.el for more info." |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
1125 (let ((skip-chars c-stmt-delim-chars) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
1126 lit-range) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
1127 (save-excursion |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
1128 (catch 'done |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
1129 (goto-char from) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
1130 (while (progn (skip-chars-forward skip-chars to) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
1131 (< (point) to)) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1132 (cond |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1133 ((setq lit-range (c-literal-limits from)) ; Have we landed in a string/comment? |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1134 (goto-char (cdr lit-range))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1135 ((eq (char-after) ?:) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1136 (forward-char) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1137 (if (and (eq (char-after) ?:) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1138 (< (point) to)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1139 ;; Ignore scope operators. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1140 (forward-char) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1141 (setq c-maybe-labelp (1- (point))))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1142 ((eq (char-after) ??) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1143 ;; A question mark. Can't be a label, so stop |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1144 ;; looking for more : and ?. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1145 (setq c-maybe-labelp nil |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1146 skip-chars (substring c-stmt-delim-chars 0 -2))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1147 ((memq (char-after) '(?# ?\n ?\r)) ; A virtual semicolon? |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1148 (if (and (eq (char-before) ?\\) (memq (char-after) '(?\n ?\r))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1149 (backward-char)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1150 (skip-chars-backward " \t" from) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1151 (if (c-at-vsemi-p) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1152 (throw 'done (point)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1153 (forward-line))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1154 (t (throw 'done (point))))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1155 ;; In trailing space after an as yet undetected virtual semicolon? |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1156 (c-backward-syntactic-ws from) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1157 (if (and (< (point) to) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1158 (c-at-vsemi-p)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1159 (point) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1160 nil))))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1161 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1162 (defun c-at-statement-start-p () |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1163 "Return non-nil if the point is at the first token in a statement |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1164 or somewhere in the syntactic whitespace before it. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1165 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1166 A \"statement\" here is not restricted to those inside code blocks. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1167 Any kind of declaration-like construct that occur outside function |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1168 bodies is also considered a \"statement\". |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1169 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1170 Note that this function might do hidden buffer changes. See the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1171 comment at the start of cc-engine.el for more info." |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1172 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1173 (save-excursion |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1174 (let ((end (point)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1175 c-maybe-labelp) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1176 (c-syntactic-skip-backward (substring c-stmt-delim-chars 1) nil t) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1177 (or (bobp) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1178 (eq (char-before) ?}) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1179 (and (eq (char-before) ?{) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1180 (not (and c-special-brace-lists |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1181 (progn (backward-char) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1182 (c-looking-at-special-brace-list))))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1183 (c-crosses-statement-barrier-p (point) end))))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1184 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1185 (defun c-at-expression-start-p () |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1186 "Return non-nil if the point is at the first token in an expression or |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1187 statement, or somewhere in the syntactic whitespace before it. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1188 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1189 An \"expression\" here is a bit different from the normal language |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1190 grammar sense: It's any sequence of expression tokens except commas, |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1191 unless they are enclosed inside parentheses of some kind. Also, an |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1192 expression never continues past an enclosing parenthesis, but it might |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1193 contain parenthesis pairs of any sort except braces. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1194 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1195 Since expressions never cross statement boundaries, this function also |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1196 recognizes statement beginnings, just like `c-at-statement-start-p'. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1197 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1198 Note that this function might do hidden buffer changes. See the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1199 comment at the start of cc-engine.el for more info." |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1200 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1201 (save-excursion |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1202 (let ((end (point)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1203 (c-stmt-delim-chars c-stmt-delim-chars-with-comma) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1204 c-maybe-labelp) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1205 (c-syntactic-skip-backward (substring c-stmt-delim-chars 1) nil t) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1206 (or (bobp) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1207 (memq (char-before) '(?{ ?})) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1208 (save-excursion (backward-char) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1209 (looking-at "\\s(")) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1210 (c-crosses-statement-barrier-p (point) end))))) |
18720 | 1211 |
1212 | |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1213 ;; A set of functions that covers various idiosyncrasies in |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1214 ;; implementations of `forward-comment'. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1215 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1216 ;; Note: Some emacsen considers incorrectly that any line comment |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1217 ;; ending with a backslash continues to the next line. I can't think |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1218 ;; of any way to work around that in a reliable way without changing |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1219 ;; the buffer, though. Suggestions welcome. ;) (No, temporarily |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1220 ;; changing the syntax for backslash doesn't work since we must treat |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1221 ;; escapes in string literals correctly.) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1222 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1223 (defun c-forward-single-comment () |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1224 "Move forward past whitespace and the closest following comment, if any. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1225 Return t if a comment was found, nil otherwise. In either case, the |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1226 point is moved past the following whitespace. Line continuations, |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1227 i.e. a backslashes followed by line breaks, are treated as whitespace. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1228 The line breaks that end line comments are considered to be the |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1229 comment enders, so the point will be put on the beginning of the next |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1230 line if it moved past a line comment. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1231 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1232 This function does not do any hidden buffer changes." |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1233 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1234 (let ((start (point))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1235 (when (looking-at "\\([ \t\n\r\f\v]\\|\\\\[\n\r]\\)+") |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1236 (goto-char (match-end 0))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1237 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1238 (when (forward-comment 1) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1239 (if (eobp) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1240 ;; Some emacsen (e.g. XEmacs 21) return t when moving |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1241 ;; forwards at eob. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1242 nil |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1243 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1244 ;; Emacs includes the ending newline in a b-style (c++) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1245 ;; comment, but XEmacs doesn't. We depend on the Emacs |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1246 ;; behavior (which also is symmetric). |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1247 (if (and (eolp) (elt (parse-partial-sexp start (point)) 7)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1248 (condition-case nil (forward-char 1))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1249 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1250 t)))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1251 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1252 (defsubst c-forward-comments () |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1253 "Move forward past all following whitespace and comments. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1254 Line continuations, i.e. a backslashes followed by line breaks, are |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1255 treated as whitespace. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1256 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1257 Note that this function might do hidden buffer changes. See the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1258 comment at the start of cc-engine.el for more info." |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1259 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1260 (while (or |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1261 ;; If forward-comment in at least XEmacs 21 is given a large |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1262 ;; positive value, it'll loop all the way through if it hits |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1263 ;; eob. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1264 (and (forward-comment 5) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1265 ;; Some emacsen (e.g. XEmacs 21) return t when moving |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1266 ;; forwards at eob. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1267 (not (eobp))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1268 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1269 (when (looking-at "\\\\[\n\r]") |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1270 (forward-char 2) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1271 t)))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1272 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1273 (defun c-backward-single-comment () |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1274 "Move backward past whitespace and the closest preceding comment, if any. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1275 Return t if a comment was found, nil otherwise. In either case, the |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1276 point is moved past the preceding whitespace. Line continuations, |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1277 i.e. a backslashes followed by line breaks, are treated as whitespace. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1278 The line breaks that end line comments are considered to be the |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1279 comment enders, so the point cannot be at the end of the same line to |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1280 move over a line comment. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1281 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1282 This function does not do any hidden buffer changes." |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1283 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1284 (let ((start (point))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1285 ;; When we got newline terminated comments, forward-comment in all |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1286 ;; supported emacsen so far will stop at eol of each line not |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1287 ;; ending with a comment when moving backwards. This corrects for |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1288 ;; that, and at the same time handles line continuations. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1289 (while (progn |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1290 (skip-chars-backward " \t\n\r\f\v") |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1291 (and (looking-at "[\n\r]") |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1292 (eq (char-before) ?\\))) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1293 (backward-char)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1294 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1295 (if (bobp) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1296 ;; Some emacsen (e.g. Emacs 19.34) return t when moving |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1297 ;; backwards at bob. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1298 nil |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1299 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1300 ;; Leave point after the closest following newline if we've |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1301 ;; backed up over any above, since forward-comment won't move |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1302 ;; backward over a line comment if point is at the end of the |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1303 ;; same line. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1304 (re-search-forward "\\=\\s *[\n\r]" start t) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1305 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1306 (if (if (forward-comment -1) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1307 (if (eolp) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1308 ;; If forward-comment above succeeded and we're at eol |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1309 ;; then the newline we moved over above didn't end a |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1310 ;; line comment, so we give it another go. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1311 (forward-comment -1) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1312 t)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1313 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1314 ;; Emacs <= 20 and XEmacs move back over the closer of a |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1315 ;; block comment that lacks an opener. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1316 (if (looking-at "\\*/") |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1317 (progn (forward-char 2) nil) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1318 t))))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1319 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1320 (defsubst c-backward-comments () |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1321 "Move backward past all preceding whitespace and comments. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1322 Line continuations, i.e. a backslashes followed by line breaks, are |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1323 treated as whitespace. The line breaks that end line comments are |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1324 considered to be the comment enders, so the point cannot be at the end |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1325 of the same line to move over a line comment. Unlike |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1326 c-backward-syntactic-ws, this function doesn't move back over |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1327 preprocessor directives. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1328 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1329 Note that this function might do hidden buffer changes. See the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1330 comment at the start of cc-engine.el for more info." |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1331 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1332 (let ((start (point))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1333 (while (and |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1334 ;; `forward-comment' in some emacsen (e.g. XEmacs 21.4) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1335 ;; return t when moving backwards at bob. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1336 (not (bobp)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1337 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1338 (if (forward-comment -1) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1339 (if (looking-at "\\*/") |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1340 ;; Emacs <= 20 and XEmacs move back over the |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1341 ;; closer of a block comment that lacks an opener. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1342 (progn (forward-char 2) nil) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1343 t) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1344 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1345 ;; XEmacs treats line continuations as whitespace but |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1346 ;; only in the backward direction, which seems a bit |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1347 ;; odd. Anyway, this is necessary for Emacs. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1348 (when (and (looking-at "[\n\r]") |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1349 (eq (char-before) ?\\) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1350 (< (point) start)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1351 (backward-char) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1352 t)))))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1353 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1354 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1355 ;; Tools for skipping over syntactic whitespace. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1356 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1357 ;; The following functions use text properties to cache searches over |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1358 ;; large regions of syntactic whitespace. It works as follows: |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1359 ;; |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1360 ;; o If a syntactic whitespace region contains anything but simple |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1361 ;; whitespace (i.e. space, tab and line breaks), the text property |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1362 ;; `c-in-sws' is put over it. At places where we have stopped |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1363 ;; within that region there's also a `c-is-sws' text property. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1364 ;; That since there typically are nested whitespace inside that |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1365 ;; must be handled separately, e.g. whitespace inside a comment or |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1366 ;; cpp directive. Thus, from one point with `c-is-sws' it's safe |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1367 ;; to jump to another point with that property within the same |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1368 ;; `c-in-sws' region. It can be likened to a ladder where |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1369 ;; `c-in-sws' marks the bars and `c-is-sws' the rungs. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1370 ;; |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1371 ;; o The `c-is-sws' property is put on the simple whitespace chars at |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1372 ;; a "rung position" and also maybe on the first following char. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1373 ;; As many characters as can be conveniently found in this range |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1374 ;; are marked, but no assumption can be made that the whole range |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1375 ;; is marked (it could be clobbered by later changes, for |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1376 ;; instance). |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1377 ;; |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1378 ;; Note that some part of the beginning of a sequence of simple |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1379 ;; whitespace might be part of the end of a preceding line comment |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1380 ;; or cpp directive and must not be considered part of the "rung". |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1381 ;; Such whitespace is some amount of horizontal whitespace followed |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1382 ;; by a newline. In the case of cpp directives it could also be |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1383 ;; two newlines with horizontal whitespace between them. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1384 ;; |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1385 ;; The reason to include the first following char is to cope with |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1386 ;; "rung positions" that doesn't have any ordinary whitespace. If |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1387 ;; `c-is-sws' is put on a token character it does not have |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1388 ;; `c-in-sws' set simultaneously. That's the only case when that |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1389 ;; can occur, and the reason for not extending the `c-in-sws' |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1390 ;; region to cover it is that the `c-in-sws' region could then be |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1391 ;; accidentally merged with a following one if the token is only |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1392 ;; one character long. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1393 ;; |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1394 ;; o On buffer changes the `c-in-sws' and `c-is-sws' properties are |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1395 ;; removed in the changed region. If the change was inside |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1396 ;; syntactic whitespace that means that the "ladder" is broken, but |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1397 ;; a later call to `c-forward-sws' or `c-backward-sws' will use the |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1398 ;; parts on either side and use an ordinary search only to "repair" |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1399 ;; the gap. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1400 ;; |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1401 ;; Special care needs to be taken if a region is removed: If there |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1402 ;; are `c-in-sws' on both sides of it which do not connect inside |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1403 ;; the region then they can't be joined. If e.g. a marked macro is |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1404 ;; broken, syntactic whitespace inside the new text might be |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1405 ;; marked. If those marks would become connected with the old |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1406 ;; `c-in-sws' range around the macro then we could get a ladder |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1407 ;; with one end outside the macro and the other at some whitespace |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1408 ;; within it. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1409 ;; |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1410 ;; The main motivation for this system is to increase the speed in |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1411 ;; skipping over the large whitespace regions that can occur at the |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1412 ;; top level in e.g. header files that contain a lot of comments and |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1413 ;; cpp directives. For small comments inside code it's probably |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1414 ;; slower than using `forward-comment' straightforwardly, but speed is |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1415 ;; not a significant factor there anyway. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1416 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1417 ; (defface c-debug-is-sws-face |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1418 ; '((t (:background "GreenYellow"))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1419 ; "Debug face to mark the `c-is-sws' property.") |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1420 ; (defface c-debug-in-sws-face |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1421 ; '((t (:underline t))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1422 ; "Debug face to mark the `c-in-sws' property.") |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1423 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1424 ; (defun c-debug-put-sws-faces () |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1425 ; ;; Put the sws debug faces on all the `c-is-sws' and `c-in-sws' |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1426 ; ;; properties in the buffer. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1427 ; (interactive) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1428 ; (save-excursion |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1429 ; (c-save-buffer-state (in-face) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1430 ; (goto-char (point-min)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1431 ; (setq in-face (if (get-text-property (point) 'c-is-sws) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1432 ; (point))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1433 ; (while (progn |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1434 ; (goto-char (next-single-property-change |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1435 ; (point) 'c-is-sws nil (point-max))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1436 ; (if in-face |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1437 ; (progn |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1438 ; (c-debug-add-face in-face (point) 'c-debug-is-sws-face) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1439 ; (setq in-face nil)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1440 ; (setq in-face (point))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1441 ; (not (eobp)))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1442 ; (goto-char (point-min)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1443 ; (setq in-face (if (get-text-property (point) 'c-in-sws) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1444 ; (point))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1445 ; (while (progn |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1446 ; (goto-char (next-single-property-change |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1447 ; (point) 'c-in-sws nil (point-max))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1448 ; (if in-face |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1449 ; (progn |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1450 ; (c-debug-add-face in-face (point) 'c-debug-in-sws-face) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1451 ; (setq in-face nil)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1452 ; (setq in-face (point))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1453 ; (not (eobp))))))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1454 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1455 (defmacro c-debug-sws-msg (&rest args) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1456 ;;`(message ,@args) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1457 ) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1458 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1459 (defmacro c-put-is-sws (beg end) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1460 ;; This macro does a hidden buffer change. |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1461 `(let ((beg ,beg) (end ,end)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1462 (put-text-property beg end 'c-is-sws t) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1463 ,@(when (facep 'c-debug-is-sws-face) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1464 `((c-debug-add-face beg end 'c-debug-is-sws-face))))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1465 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1466 (defmacro c-put-in-sws (beg end) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1467 ;; This macro does a hidden buffer change. |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1468 `(let ((beg ,beg) (end ,end)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1469 (put-text-property beg end 'c-in-sws t) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1470 ,@(when (facep 'c-debug-is-sws-face) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1471 `((c-debug-add-face beg end 'c-debug-in-sws-face))))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1472 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1473 (defmacro c-remove-is-sws (beg end) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1474 ;; This macro does a hidden buffer change. |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1475 `(let ((beg ,beg) (end ,end)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1476 (remove-text-properties beg end '(c-is-sws nil)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1477 ,@(when (facep 'c-debug-is-sws-face) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1478 `((c-debug-remove-face beg end 'c-debug-is-sws-face))))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1479 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1480 (defmacro c-remove-in-sws (beg end) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1481 ;; This macro does a hidden buffer change. |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1482 `(let ((beg ,beg) (end ,end)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1483 (remove-text-properties beg end '(c-in-sws nil)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1484 ,@(when (facep 'c-debug-is-sws-face) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1485 `((c-debug-remove-face beg end 'c-debug-in-sws-face))))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1486 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1487 (defmacro c-remove-is-and-in-sws (beg end) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1488 ;; This macro does a hidden buffer change. |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1489 `(let ((beg ,beg) (end ,end)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1490 (remove-text-properties beg end '(c-is-sws nil c-in-sws nil)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1491 ,@(when (facep 'c-debug-is-sws-face) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1492 `((c-debug-remove-face beg end 'c-debug-is-sws-face) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1493 (c-debug-remove-face beg end 'c-debug-in-sws-face))))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1494 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1495 (defsubst c-invalidate-sws-region-after (beg end) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1496 ;; Called from `after-change-functions'. Note that if |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1497 ;; `c-forward-sws' or `c-backward-sws' are used outside |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1498 ;; `c-save-buffer-state' or similar then this will remove the cache |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1499 ;; properties right after they're added. |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1500 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1501 ;; This function does hidden buffer changes. |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1502 |
20914
8f189ffad604
(c-forward-syntactic-ws, c-backward-syntactic-ws):
Richard M. Stallman <rms@gnu.org>
parents:
20142
diff
changeset
|
1503 (save-excursion |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1504 ;; Adjust the end to remove the properties in any following simple |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1505 ;; ws up to and including the next line break, if there is any |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1506 ;; after the changed region. This is necessary e.g. when a rung |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1507 ;; marked empty line is converted to a line comment by inserting |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1508 ;; "//" before the line break. In that case the line break would |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1509 ;; keep the rung mark which could make a later `c-backward-sws' |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1510 ;; move into the line comment instead of over it. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1511 (goto-char end) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1512 (skip-chars-forward " \t\f\v") |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1513 (when (and (eolp) (not (eobp))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1514 (setq end (1+ (point))))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1515 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1516 (when (and (= beg end) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1517 (get-text-property beg 'c-in-sws) |
56646
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
1518 (> beg (point-min)) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1519 (get-text-property (1- beg) 'c-in-sws)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1520 ;; Ensure that an `c-in-sws' range gets broken. Note that it isn't |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1521 ;; safe to keep a range that was continuous before the change. E.g: |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1522 ;; |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1523 ;; #define foo |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1524 ;; \ |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1525 ;; bar |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1526 ;; |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1527 ;; There can be a "ladder" between "#" and "b". Now, if the newline |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1528 ;; after "foo" is removed then "bar" will become part of the cpp |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1529 ;; directive instead of a syntactically relevant token. In that |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1530 ;; case there's no longer syntactic ws from "#" to "b". |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1531 (setq beg (1- beg))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1532 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1533 (c-debug-sws-msg "c-invalidate-sws-region-after [%s..%s]" beg end) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1534 (c-remove-is-and-in-sws beg end)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1535 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1536 (defun c-forward-sws () |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1537 ;; Used by `c-forward-syntactic-ws' to implement the unbounded search. |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1538 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1539 ;; This function might do hidden buffer changes. |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1540 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1541 (let (;; `rung-pos' is set to a position as early as possible in the |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1542 ;; unmarked part of the simple ws region. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1543 (rung-pos (point)) next-rung-pos rung-end-pos last-put-in-sws-pos |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1544 rung-is-marked next-rung-is-marked simple-ws-end |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1545 ;; `safe-start' is set when it's safe to cache the start position. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1546 ;; It's not set if we've initially skipped over comments and line |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1547 ;; continuations since we might have gone out through the end of a |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1548 ;; macro then. This provision makes `c-forward-sws' not populate the |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1549 ;; cache in the majority of cases, but otoh is `c-backward-sws' by far |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1550 ;; more common. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1551 safe-start) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1552 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1553 ;; Skip simple ws and do a quick check on the following character to see |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1554 ;; if it's anything that can't start syntactic ws, so we can bail out |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1555 ;; early in the majority of cases when there just are a few ws chars. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1556 (skip-chars-forward " \t\n\r\f\v") |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1557 (when (looking-at c-syntactic-ws-start) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1558 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1559 (setq rung-end-pos (min (1+ (point)) (point-max))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1560 (if (setq rung-is-marked (text-property-any rung-pos rung-end-pos |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1561 'c-is-sws t)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1562 ;; Find the last rung position to avoid setting properties in all |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1563 ;; the cases when the marked rung is complete. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1564 ;; (`next-single-property-change' is certain to move at least one |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1565 ;; step forward.) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1566 (setq rung-pos (1- (next-single-property-change |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1567 rung-is-marked 'c-is-sws nil rung-end-pos))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1568 ;; Got no marked rung here. Since the simple ws might have started |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1569 ;; inside a line comment or cpp directive we must set `rung-pos' as |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1570 ;; high as possible. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1571 (setq rung-pos (point))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1572 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1573 (while |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1574 (progn |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1575 (while |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1576 (when (and rung-is-marked |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1577 (get-text-property (point) 'c-in-sws)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1578 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1579 ;; The following search is the main reason that `c-in-sws' |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1580 ;; and `c-is-sws' aren't combined to one property. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1581 (goto-char (next-single-property-change |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1582 (point) 'c-in-sws nil (point-max))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1583 (unless (get-text-property (point) 'c-is-sws) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1584 ;; If the `c-in-sws' region extended past the last |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1585 ;; `c-is-sws' char we have to go back a bit. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1586 (or (get-text-property (1- (point)) 'c-is-sws) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1587 (goto-char (previous-single-property-change |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1588 (point) 'c-is-sws))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1589 (backward-char)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1590 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1591 (c-debug-sws-msg |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1592 "c-forward-sws cached move %s -> %s (max %s)" |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1593 rung-pos (point) (point-max)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1594 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1595 (setq rung-pos (point)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1596 (and (> (skip-chars-forward " \t\n\r\f\v") 0) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1597 (not (eobp)))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1598 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1599 ;; We'll loop here if there is simple ws after the last rung. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1600 ;; That means that there's been some change in it and it's |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1601 ;; possible that we've stepped into another ladder, so extend |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1602 ;; the previous one to join with it if there is one, and try to |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1603 ;; use the cache again. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1604 (c-debug-sws-msg |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1605 "c-forward-sws extending rung with [%s..%s] (max %s)" |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1606 (1+ rung-pos) (1+ (point)) (point-max)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1607 (unless (get-text-property (point) 'c-is-sws) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1608 ;; Remove any `c-in-sws' property from the last char of |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1609 ;; the rung before we mark it with `c-is-sws', so that we |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1610 ;; won't connect with the remains of a broken "ladder". |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1611 (c-remove-in-sws (point) (1+ (point)))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1612 (c-put-is-sws (1+ rung-pos) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1613 (1+ (point))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1614 (c-put-in-sws rung-pos |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1615 (setq rung-pos (point) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1616 last-put-in-sws-pos rung-pos))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1617 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1618 (setq simple-ws-end (point)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1619 (c-forward-comments) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1620 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1621 (cond |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1622 ((/= (point) simple-ws-end) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1623 ;; Skipped over comments. Don't cache at eob in case the buffer |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1624 ;; is narrowed. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1625 (not (eobp))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1626 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1627 ((save-excursion |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1628 (and c-opt-cpp-prefix |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1629 (looking-at c-opt-cpp-start) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1630 (progn (skip-chars-backward " \t") |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1631 (bolp)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1632 (or (bobp) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1633 (progn (backward-char) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1634 (not (eq (char-before) ?\\)))))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1635 ;; Skip a preprocessor directive. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1636 (end-of-line) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1637 (while (and (eq (char-before) ?\\) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1638 (= (forward-line 1) 0)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1639 (end-of-line)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1640 (forward-line 1) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1641 (setq safe-start t) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1642 ;; Don't cache at eob in case the buffer is narrowed. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1643 (not (eobp))))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1644 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1645 ;; We've searched over a piece of non-white syntactic ws. See if this |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1646 ;; can be cached. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1647 (setq next-rung-pos (point)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1648 (skip-chars-forward " \t\n\r\f\v") |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1649 (setq rung-end-pos (min (1+ (point)) (point-max))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1650 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1651 (if (or |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1652 ;; Cache if we haven't skipped comments only, and if we started |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1653 ;; either from a marked rung or from a completely uncached |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1654 ;; position. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1655 (and safe-start |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1656 (or rung-is-marked |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1657 (not (get-text-property simple-ws-end 'c-in-sws)))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1658 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1659 ;; See if there's a marked rung in the encountered simple ws. If |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1660 ;; so then we can cache, unless `safe-start' is nil. Even then |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1661 ;; we need to do this to check if the cache can be used for the |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1662 ;; next step. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1663 (and (setq next-rung-is-marked |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1664 (text-property-any next-rung-pos rung-end-pos |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1665 'c-is-sws t)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1666 safe-start)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1667 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1668 (progn |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1669 (c-debug-sws-msg |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1670 "c-forward-sws caching [%s..%s] - [%s..%s] (max %s)" |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1671 rung-pos (1+ simple-ws-end) next-rung-pos rung-end-pos |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1672 (point-max)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1673 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1674 ;; Remove the properties for any nested ws that might be cached. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1675 ;; Only necessary for `c-is-sws' since `c-in-sws' will be set |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1676 ;; anyway. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1677 (c-remove-is-sws (1+ simple-ws-end) next-rung-pos) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1678 (unless (and rung-is-marked (= rung-pos simple-ws-end)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1679 (c-put-is-sws rung-pos |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1680 (1+ simple-ws-end)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1681 (setq rung-is-marked t)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1682 (c-put-in-sws rung-pos |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1683 (setq rung-pos (point) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1684 last-put-in-sws-pos rung-pos)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1685 (unless (get-text-property (1- rung-end-pos) 'c-is-sws) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1686 ;; Remove any `c-in-sws' property from the last char of |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1687 ;; the rung before we mark it with `c-is-sws', so that we |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1688 ;; won't connect with the remains of a broken "ladder". |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1689 (c-remove-in-sws (1- rung-end-pos) rung-end-pos)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1690 (c-put-is-sws next-rung-pos |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1691 rung-end-pos)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1692 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1693 (c-debug-sws-msg |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1694 "c-forward-sws not caching [%s..%s] - [%s..%s] (max %s)" |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1695 rung-pos (1+ simple-ws-end) next-rung-pos rung-end-pos |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1696 (point-max)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1697 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1698 ;; Set `rung-pos' for the next rung. It's the same thing here as |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1699 ;; initially, except that the rung position is set as early as |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1700 ;; possible since we can't be in the ending ws of a line comment or |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1701 ;; cpp directive now. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1702 (if (setq rung-is-marked next-rung-is-marked) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1703 (setq rung-pos (1- (next-single-property-change |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1704 rung-is-marked 'c-is-sws nil rung-end-pos))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1705 (setq rung-pos next-rung-pos)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1706 (setq safe-start t))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1707 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1708 ;; Make sure that the newly marked `c-in-sws' region doesn't connect to |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1709 ;; another one after the point (which might occur when editing inside a |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1710 ;; comment or macro). |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1711 (when (eq last-put-in-sws-pos (point)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1712 (cond ((< last-put-in-sws-pos (point-max)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1713 (c-debug-sws-msg |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1714 "c-forward-sws clearing at %s for cache separation" |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1715 last-put-in-sws-pos) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1716 (c-remove-in-sws last-put-in-sws-pos |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1717 (1+ last-put-in-sws-pos))) |
24282 | 1718 (t |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1719 ;; If at eob we have to clear the last character before the end |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1720 ;; instead since the buffer might be narrowed and there might |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1721 ;; be a `c-in-sws' after (point-max). In this case it's |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1722 ;; necessary to clear both properties. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1723 (c-debug-sws-msg |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1724 "c-forward-sws clearing thoroughly at %s for cache separation" |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1725 (1- last-put-in-sws-pos)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1726 (c-remove-is-and-in-sws (1- last-put-in-sws-pos) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1727 last-put-in-sws-pos)))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1728 ))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1729 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1730 (defun c-backward-sws () |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1731 ;; Used by `c-backward-syntactic-ws' to implement the unbounded search. |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1732 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1733 ;; This function might do hidden buffer changes. |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1734 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1735 (let (;; `rung-pos' is set to a position as late as possible in the unmarked |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1736 ;; part of the simple ws region. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1737 (rung-pos (point)) next-rung-pos last-put-in-sws-pos |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1738 rung-is-marked simple-ws-beg cmt-skip-pos) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1739 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1740 ;; Skip simple horizontal ws and do a quick check on the preceding |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1741 ;; character to see if it's anying that can't end syntactic ws, so we can |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1742 ;; bail out early in the majority of cases when there just are a few ws |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1743 ;; chars. Newlines are complicated in the backward direction, so we can't |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1744 ;; skip over them. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1745 (skip-chars-backward " \t\f") |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1746 (when (and (not (bobp)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1747 (save-excursion |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1748 (backward-char) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1749 (looking-at c-syntactic-ws-end))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1750 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1751 ;; Try to find a rung position in the simple ws preceding point, so that |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1752 ;; we can get a cache hit even if the last bit of the simple ws has |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1753 ;; changed recently. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1754 (setq simple-ws-beg (point)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1755 (skip-chars-backward " \t\n\r\f\v") |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1756 (if (setq rung-is-marked (text-property-any |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1757 (point) (min (1+ rung-pos) (point-max)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1758 'c-is-sws t)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1759 ;; `rung-pos' will be the earliest marked position, which means that |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1760 ;; there might be later unmarked parts in the simple ws region. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1761 ;; It's not worth the effort to fix that; the last part of the |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1762 ;; simple ws is also typically edited often, so it could be wasted. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1763 (goto-char (setq rung-pos rung-is-marked)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1764 (goto-char simple-ws-beg)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1765 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1766 (while |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1767 (progn |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1768 (while |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1769 (when (and rung-is-marked |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1770 (not (bobp)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1771 (get-text-property (1- (point)) 'c-in-sws)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1772 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1773 ;; The following search is the main reason that `c-in-sws' |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1774 ;; and `c-is-sws' aren't combined to one property. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1775 (goto-char (previous-single-property-change |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1776 (point) 'c-in-sws nil (point-min))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1777 (unless (get-text-property (point) 'c-is-sws) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1778 ;; If the `c-in-sws' region extended past the first |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1779 ;; `c-is-sws' char we have to go forward a bit. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1780 (goto-char (next-single-property-change |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1781 (point) 'c-is-sws))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1782 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1783 (c-debug-sws-msg |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1784 "c-backward-sws cached move %s <- %s (min %s)" |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1785 (point) rung-pos (point-min)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1786 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1787 (setq rung-pos (point)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1788 (if (and (< (min (skip-chars-backward " \t\f\v") |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1789 (progn |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1790 (setq simple-ws-beg (point)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1791 (skip-chars-backward " \t\n\r\f\v"))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1792 0) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1793 (setq rung-is-marked |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1794 (text-property-any (point) rung-pos |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1795 'c-is-sws t))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1796 t |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1797 (goto-char simple-ws-beg) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1798 nil)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1799 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1800 ;; We'll loop here if there is simple ws before the first rung. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1801 ;; That means that there's been some change in it and it's |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1802 ;; possible that we've stepped into another ladder, so extend |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1803 ;; the previous one to join with it if there is one, and try to |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1804 ;; use the cache again. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1805 (c-debug-sws-msg |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1806 "c-backward-sws extending rung with [%s..%s] (min %s)" |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1807 rung-is-marked rung-pos (point-min)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1808 (unless (get-text-property (1- rung-pos) 'c-is-sws) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1809 ;; Remove any `c-in-sws' property from the last char of |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1810 ;; the rung before we mark it with `c-is-sws', so that we |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1811 ;; won't connect with the remains of a broken "ladder". |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1812 (c-remove-in-sws (1- rung-pos) rung-pos)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1813 (c-put-is-sws rung-is-marked |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1814 rung-pos) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1815 (c-put-in-sws rung-is-marked |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1816 (1- rung-pos)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1817 (setq rung-pos rung-is-marked |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1818 last-put-in-sws-pos rung-pos)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1819 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1820 (c-backward-comments) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1821 (setq cmt-skip-pos (point)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1822 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1823 (cond |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1824 ((and c-opt-cpp-prefix |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1825 (/= cmt-skip-pos simple-ws-beg) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1826 (c-beginning-of-macro)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1827 ;; Inside a cpp directive. See if it should be skipped over. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1828 (let ((cpp-beg (point))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1829 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1830 ;; Move back over all line continuations in the region skipped |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1831 ;; over by `c-backward-comments'. If we go past it then we |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1832 ;; started inside the cpp directive. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1833 (goto-char simple-ws-beg) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1834 (beginning-of-line) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1835 (while (and (> (point) cmt-skip-pos) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1836 (progn (backward-char) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1837 (eq (char-before) ?\\))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1838 (beginning-of-line)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1839 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1840 (if (< (point) cmt-skip-pos) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1841 ;; Don't move past the cpp directive if we began inside |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1842 ;; it. Note that the position at the end of the last line |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1843 ;; of the macro is also considered to be within it. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1844 (progn (goto-char cmt-skip-pos) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1845 nil) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1846 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1847 ;; It's worthwhile to spend a little bit of effort on finding |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1848 ;; the end of the macro, to get a good `simple-ws-beg' |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1849 ;; position for the cache. Note that `c-backward-comments' |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1850 ;; could have stepped over some comments before going into |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1851 ;; the macro, and then `simple-ws-beg' must be kept on the |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1852 ;; same side of those comments. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1853 (goto-char simple-ws-beg) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1854 (skip-chars-backward " \t\n\r\f\v") |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1855 (if (eq (char-before) ?\\) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1856 (forward-char)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1857 (forward-line 1) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1858 (if (< (point) simple-ws-beg) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1859 ;; Might happen if comments after the macro were skipped |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1860 ;; over. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1861 (setq simple-ws-beg (point))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1862 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1863 (goto-char cpp-beg) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1864 t))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1865 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1866 ((/= (save-excursion |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1867 (skip-chars-forward " \t\n\r\f\v" simple-ws-beg) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1868 (setq next-rung-pos (point))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1869 simple-ws-beg) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1870 ;; Skipped over comments. Must put point at the end of |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1871 ;; the simple ws at point since we might be after a line |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1872 ;; comment or cpp directive that's been partially |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1873 ;; narrowed out, and we can't risk marking the simple ws |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1874 ;; at the end of it. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1875 (goto-char next-rung-pos) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1876 t))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1877 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1878 ;; We've searched over a piece of non-white syntactic ws. See if this |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1879 ;; can be cached. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1880 (setq next-rung-pos (point)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1881 (skip-chars-backward " \t\f\v") |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1882 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1883 (if (or |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1884 ;; Cache if we started either from a marked rung or from a |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1885 ;; completely uncached position. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1886 rung-is-marked |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1887 (not (get-text-property (1- simple-ws-beg) 'c-in-sws)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1888 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1889 ;; Cache if there's a marked rung in the encountered simple ws. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1890 (save-excursion |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1891 (skip-chars-backward " \t\n\r\f\v") |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1892 (text-property-any (point) (min (1+ next-rung-pos) (point-max)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1893 'c-is-sws t))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1894 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1895 (progn |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1896 (c-debug-sws-msg |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1897 "c-backward-sws caching [%s..%s] - [%s..%s] (min %s)" |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1898 (point) (1+ next-rung-pos) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1899 simple-ws-beg (min (1+ rung-pos) (point-max)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1900 (point-min)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1901 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1902 ;; Remove the properties for any nested ws that might be cached. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1903 ;; Only necessary for `c-is-sws' since `c-in-sws' will be set |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1904 ;; anyway. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1905 (c-remove-is-sws (1+ next-rung-pos) simple-ws-beg) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1906 (unless (and rung-is-marked (= simple-ws-beg rung-pos)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1907 (let ((rung-end-pos (min (1+ rung-pos) (point-max)))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1908 (unless (get-text-property (1- rung-end-pos) 'c-is-sws) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1909 ;; Remove any `c-in-sws' property from the last char of |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1910 ;; the rung before we mark it with `c-is-sws', so that we |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1911 ;; won't connect with the remains of a broken "ladder". |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1912 (c-remove-in-sws (1- rung-end-pos) rung-end-pos)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1913 (c-put-is-sws simple-ws-beg |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1914 rung-end-pos) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1915 (setq rung-is-marked t))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1916 (c-put-in-sws (setq simple-ws-beg (point) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1917 last-put-in-sws-pos simple-ws-beg) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1918 rung-pos) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1919 (c-put-is-sws (setq rung-pos simple-ws-beg) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1920 (1+ next-rung-pos))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1921 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1922 (c-debug-sws-msg |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1923 "c-backward-sws not caching [%s..%s] - [%s..%s] (min %s)" |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1924 (point) (1+ next-rung-pos) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1925 simple-ws-beg (min (1+ rung-pos) (point-max)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1926 (point-min)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1927 (setq rung-pos next-rung-pos |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1928 simple-ws-beg (point)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1929 )) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1930 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1931 ;; Make sure that the newly marked `c-in-sws' region doesn't connect to |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1932 ;; another one before the point (which might occur when editing inside a |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1933 ;; comment or macro). |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1934 (when (eq last-put-in-sws-pos (point)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1935 (cond ((< (point-min) last-put-in-sws-pos) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1936 (c-debug-sws-msg |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1937 "c-backward-sws clearing at %s for cache separation" |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1938 (1- last-put-in-sws-pos)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1939 (c-remove-in-sws (1- last-put-in-sws-pos) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1940 last-put-in-sws-pos)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1941 ((> (point-min) 1) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1942 ;; If at bob and the buffer is narrowed, we have to clear the |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1943 ;; character we're standing on instead since there might be a |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1944 ;; `c-in-sws' before (point-min). In this case it's necessary |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1945 ;; to clear both properties. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1946 (c-debug-sws-msg |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1947 "c-backward-sws clearing thoroughly at %s for cache separation" |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1948 last-put-in-sws-pos) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1949 (c-remove-is-and-in-sws last-put-in-sws-pos |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1950 (1+ last-put-in-sws-pos))))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
1951 ))) |
20914
8f189ffad604
(c-forward-syntactic-ws, c-backward-syntactic-ws):
Richard M. Stallman <rms@gnu.org>
parents:
20142
diff
changeset
|
1952 |
18720 | 1953 |
76400
4dc5b2641221
(c-partial-ws-p, c-unfind-type, c-trim-found-types): new functions.
Alan Mackenzie <acm@muc.de>
parents:
75623
diff
changeset
|
1954 ;; Other whitespace tools |
4dc5b2641221
(c-partial-ws-p, c-unfind-type, c-trim-found-types): new functions.
Alan Mackenzie <acm@muc.de>
parents:
75623
diff
changeset
|
1955 (defun c-partial-ws-p (beg end) |
4dc5b2641221
(c-partial-ws-p, c-unfind-type, c-trim-found-types): new functions.
Alan Mackenzie <acm@muc.de>
parents:
75623
diff
changeset
|
1956 ;; Is the region (beg end) WS, and is there WS (or BOB/EOB) next to the |
4dc5b2641221
(c-partial-ws-p, c-unfind-type, c-trim-found-types): new functions.
Alan Mackenzie <acm@muc.de>
parents:
75623
diff
changeset
|
1957 ;; region? This is a "heuristic" function. ..... |
79408
a29ca195b71e
(c-crosses-statement-barrier-p): Fix typo in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents:
78656
diff
changeset
|
1958 ;; |
76723 | 1959 ;; The motivation for the second bit is to check whether removing this |
1960 ;; region would coalesce two symbols. | |
76400
4dc5b2641221
(c-partial-ws-p, c-unfind-type, c-trim-found-types): new functions.
Alan Mackenzie <acm@muc.de>
parents:
75623
diff
changeset
|
1961 ;; |
4dc5b2641221
(c-partial-ws-p, c-unfind-type, c-trim-found-types): new functions.
Alan Mackenzie <acm@muc.de>
parents:
75623
diff
changeset
|
1962 ;; FIXME!!! This function doesn't check virtual semicolons in any way. Be |
4dc5b2641221
(c-partial-ws-p, c-unfind-type, c-trim-found-types): new functions.
Alan Mackenzie <acm@muc.de>
parents:
75623
diff
changeset
|
1963 ;; careful about using this function for, e.g. AWK. (2007/3/7) |
4dc5b2641221
(c-partial-ws-p, c-unfind-type, c-trim-found-types): new functions.
Alan Mackenzie <acm@muc.de>
parents:
75623
diff
changeset
|
1964 (save-excursion |
4dc5b2641221
(c-partial-ws-p, c-unfind-type, c-trim-found-types): new functions.
Alan Mackenzie <acm@muc.de>
parents:
75623
diff
changeset
|
1965 (let ((end+1 (min (1+ end) (point-max)))) |
4dc5b2641221
(c-partial-ws-p, c-unfind-type, c-trim-found-types): new functions.
Alan Mackenzie <acm@muc.de>
parents:
75623
diff
changeset
|
1966 (or (progn (goto-char (max (point-min) (1- beg))) |
4dc5b2641221
(c-partial-ws-p, c-unfind-type, c-trim-found-types): new functions.
Alan Mackenzie <acm@muc.de>
parents:
75623
diff
changeset
|
1967 (c-skip-ws-forward end) |
4dc5b2641221
(c-partial-ws-p, c-unfind-type, c-trim-found-types): new functions.
Alan Mackenzie <acm@muc.de>
parents:
75623
diff
changeset
|
1968 (eq (point) end)) |
4dc5b2641221
(c-partial-ws-p, c-unfind-type, c-trim-found-types): new functions.
Alan Mackenzie <acm@muc.de>
parents:
75623
diff
changeset
|
1969 (progn (goto-char beg) |
4dc5b2641221
(c-partial-ws-p, c-unfind-type, c-trim-found-types): new functions.
Alan Mackenzie <acm@muc.de>
parents:
75623
diff
changeset
|
1970 (c-skip-ws-forward end+1) |
4dc5b2641221
(c-partial-ws-p, c-unfind-type, c-trim-found-types): new functions.
Alan Mackenzie <acm@muc.de>
parents:
75623
diff
changeset
|
1971 (eq (point) end+1)))))) |
4dc5b2641221
(c-partial-ws-p, c-unfind-type, c-trim-found-types): new functions.
Alan Mackenzie <acm@muc.de>
parents:
75623
diff
changeset
|
1972 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1973 ;; A system for finding noteworthy parens before the point. |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
1974 |
106395
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
1975 (defconst c-state-cache-too-far 5000) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
1976 ;; A maximum comfortable scanning distance, e.g. between |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
1977 ;; `c-state-cache-good-pos' and "HERE" (where we call c-parse-state). When |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
1978 ;; this distance is exceeded, we take "emergency meausures", e.g. by clearing |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
1979 ;; the cache and starting again from point-min or a beginning of defun. This |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
1980 ;; value can be tuned for efficiency or set to a lower value for testing. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
1981 |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
1982 (defvar c-state-cache nil) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
1983 (make-variable-buffer-local 'c-state-cache) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
1984 ;; The state cache used by `c-parse-state' to cut down the amount of |
106395
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
1985 ;; searching. It's the result from some earlier `c-parse-state' call. See |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
1986 ;; `c-parse-state''s doc string for details of its structure. |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1987 ;; |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
1988 ;; The use of the cached info is more effective if the next |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
1989 ;; `c-parse-state' call is on a line close by the one the cached state |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
1990 ;; was made at; the cache can actually slow down a little if the |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
1991 ;; cached state was made very far back in the buffer. The cache is |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
1992 ;; most effective if `c-parse-state' is used on each line while moving |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
1993 ;; forward. |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
1994 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1995 (defvar c-state-cache-good-pos 1) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
1996 (make-variable-buffer-local 'c-state-cache-good-pos) |
106395
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
1997 ;; This is a position where `c-state-cache' is known to be correct, or |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
1998 ;; nil (see below). It's a position inside one of the recorded unclosed |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
1999 ;; parens or the top level, but not further nested inside any literal or |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2000 ;; subparen that is closed before the last recorded position. |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
2001 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
2002 ;; The exact position is chosen to try to be close to yet earlier than |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
2003 ;; the position where `c-state-cache' will be called next. Right now |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
2004 ;; the heuristic is to set it to the position after the last found |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
2005 ;; closing paren (of any type) before the line on which |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
2006 ;; `c-parse-state' was called. That is chosen primarily to work well |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
2007 ;; with refontification of the current line. |
106395
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2008 ;; |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2009 ;; 2009-07-28: When `c-state-point-min' and the last position where |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2010 ;; `c-parse-state' or for which `c-invalidate-state-cache' was called, are |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2011 ;; both in the same literal, there is no such "good position", and |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2012 ;; c-state-cache-good-pos is then nil. This is the ONLY circumstance in which |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2013 ;; it can be nil. In this case, `c-state-point-min-literal' will be non-nil. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2014 ;; |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2015 ;; 2009-06-12: In a brace desert, c-state-cache-good-pos may also be in |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2016 ;; the middle of the desert, as long as it is not within a brace pair |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2017 ;; recorded in `c-state-cache' or a paren/bracket pair. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2018 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2019 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2020 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2021 ;; We maintain a simple cache of positions which aren't in a literal, so as to |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2022 ;; speed up testing for non-literality. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2023 (defconst c-state-nonlit-pos-interval 10000) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2024 ;; The approximate interval between entries in `c-state-nonlit-pos-cache'. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2025 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2026 (defvar c-state-nonlit-pos-cache nil) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2027 (make-variable-buffer-local 'c-state-nonlit-pos-cache) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2028 ;; A list of buffer positions which are known not to be in a literal. This is |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2029 ;; ordered with higher positions at the front of the list. Only those which |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2030 ;; are less than `c-state-nonlit-pos-cache-limit' are valid. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2031 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2032 (defvar c-state-nonlit-pos-cache-limit 1) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2033 (make-variable-buffer-local 'c-state-nonlit-pos-cache-limit) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2034 ;; An upper limit on valid entries in `c-state-nonlit-pos-cache'. This is |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2035 ;; reduced by buffer changes, and increased by invocations of |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2036 ;; `c-state-literal-at'. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2037 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2038 (defsubst c-state-pp-to-literal (from to) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2039 ;; Do a parse-partial-sexp from FROM to TO, returning the bounds of any |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2040 ;; literal at TO as a cons, otherwise NIL. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2041 ;; FROM must not be in a literal, and the buffer should already be wide |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2042 ;; enough. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2043 (save-excursion |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2044 (let ((s (parse-partial-sexp from to))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2045 (when (or (nth 3 s) (nth 4 s)) ; in a string or comment |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2046 (parse-partial-sexp (point) (point-max) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2047 nil ; TARGETDEPTH |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2048 nil ; STOPBEFORE |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2049 s ; OLDSTATE |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2050 'syntax-table) ; stop at end of literal |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2051 (cons (nth 8 s) (point)))))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2052 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2053 (defun c-state-literal-at (here) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2054 ;; If position HERE is inside a literal, return (START . END), the |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2055 ;; boundaries of the literal (which may be outside the accessible bit of the |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2056 ;; buffer). Otherwise, return nil. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2057 ;; |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2058 ;; This function is almost the same as `c-literal-limits'. It differs in |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2059 ;; that it is a lower level function, and that it rigourously follows the |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2060 ;; syntax from BOB, whereas `c-literal-limits' uses a "local" safe position. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2061 (save-restriction |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2062 (widen) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2063 (save-excursion |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2064 (let ((c c-state-nonlit-pos-cache) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2065 pos npos lit) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2066 ;; Trim the cache to take account of buffer changes. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2067 (while (and c (> (car c) c-state-nonlit-pos-cache-limit)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2068 (setq c (cdr c))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2069 (setq c-state-nonlit-pos-cache c) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2070 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2071 (while (and c (> (car c) here)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2072 (setq c (cdr c))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2073 (setq pos (or (car c) (point-min))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2074 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2075 (while (<= (setq npos (+ pos c-state-nonlit-pos-interval)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2076 here) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2077 (setq lit (c-state-pp-to-literal pos npos)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2078 (setq pos (or (cdr lit) npos)) ; end of literal containing npos. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2079 (setq c-state-nonlit-pos-cache (cons pos c-state-nonlit-pos-cache))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2080 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2081 (if (> pos c-state-nonlit-pos-cache-limit) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2082 (setq c-state-nonlit-pos-cache-limit pos)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2083 (if (< pos here) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2084 (setq lit (c-state-pp-to-literal pos here))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2085 lit)))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2086 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2087 (defsubst c-state-lit-beg (pos) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2088 ;; Return the start of the literal containing POS, or POS itself. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2089 (or (car (c-state-literal-at pos)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2090 pos)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2091 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2092 (defsubst c-state-cache-non-literal-place (pos state) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2093 ;; Return a position outside of a string/comment at or before POS. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2094 ;; STATE is the parse-partial-sexp state at POS. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2095 (if (or (nth 3 state) ; in a string? |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2096 (nth 4 state)) ; in a comment? |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2097 (nth 8 state) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2098 pos)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2099 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2100 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2101 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2102 ;; Stuff to do with point-min, and coping with any literal there. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2103 (defvar c-state-point-min 1) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2104 (make-variable-buffer-local 'c-state-point-min) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2105 ;; This is (point-min) when `c-state-cache' was last calculated. A change of |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2106 ;; narrowing is likely to affect the parens that are visible before the point. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2107 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2108 (defvar c-state-point-min-lit-type nil) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2109 (make-variable-buffer-local 'c-state-point-min-lit-type) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2110 (defvar c-state-point-min-lit-start nil) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2111 (make-variable-buffer-local 'c-state-point-min-lit-start) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2112 ;; These two variables define the literal, if any, containing point-min. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2113 ;; Their values are, respectively, 'string, c, or c++, and the start of the |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2114 ;; literal. If there's no literal there, they're both nil. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2115 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2116 (defvar c-state-min-scan-pos 1) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2117 (make-variable-buffer-local 'c-state-min-scan-pos) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2118 ;; This is the earliest buffer-pos from which scanning can be done. It is |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2119 ;; either the end of the literal containing point-min, or point-min itself. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2120 ;; It becomes nil if the buffer is changed earlier than this point. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2121 (defun c-state-get-min-scan-pos () |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2122 ;; Return the lowest valid scanning pos. This will be the end of the |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2123 ;; literal enclosing point-min, or point-min itself. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2124 (or c-state-min-scan-pos |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2125 (save-restriction |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2126 (save-excursion |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2127 (widen) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2128 (goto-char c-state-point-min-lit-start) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2129 (if (eq c-state-point-min-lit-type 'string) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2130 (forward-sexp) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2131 (forward-comment 1)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2132 (setq c-state-min-scan-pos (point)))))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2133 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2134 (defun c-state-mark-point-min-literal () |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2135 ;; Determine the properties of any literal containing POINT-MIN, setting the |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2136 ;; variables `c-state-point-min-lit-type', `c-state-point-min-lit-start', |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2137 ;; and `c-state-min-scan-pos' accordingly. The return value is meaningless. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2138 (let ((p-min (point-min)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2139 lit) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2140 (save-restriction |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2141 (widen) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2142 (setq lit (c-state-literal-at p-min)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2143 (if lit |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2144 (setq c-state-point-min-lit-type |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2145 (save-excursion |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2146 (goto-char (car lit)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2147 (cond |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2148 ((looking-at c-block-comment-start-regexp) 'c) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2149 ((looking-at c-line-comment-starter) 'c++) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2150 (t 'string))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2151 c-state-point-min-lit-start (car lit) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2152 c-state-min-scan-pos (cdr lit)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2153 (setq c-state-point-min-lit-type nil |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2154 c-state-point-min-lit-start nil |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2155 c-state-min-scan-pos p-min))))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2156 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2157 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2158 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2159 ;; A variable which signals a brace dessert - helpful for reducing the number |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2160 ;; of fruitless backward scans. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2161 (defvar c-state-brace-pair-desert nil) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2162 (make-variable-buffer-local 'c-state-brace-pair-desert) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2163 ;; Used only in `c-append-lower-brace-pair-to-state-cache'. It is set when an |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2164 ;; that defun has searched backwards for a brace pair and not found one. Its |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2165 ;; value is either nil or a cons (PA . FROM), where PA is the position of the |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2166 ;; enclosing opening paren/brace/bracket which bounds the backwards search (or |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2167 ;; nil when at top level) and FROM is where the backward search started. It |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2168 ;; is reset to nil in `c-invalidate-state-cache'. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2169 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2170 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2171 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2172 ;; Lowish level functions/macros which work directly on `c-state-cache', or a |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2173 ;; list of like structure. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2174 (defmacro c-state-cache-top-lparen (&optional cache) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2175 ;; Return the address of the top left brace/bracket/paren recorded in CACHE |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2176 ;; (default `c-state-cache') (or nil). |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2177 (let ((cash (or cache 'c-state-cache))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2178 `(if (consp (car ,cash)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2179 (caar ,cash) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2180 (car ,cash)))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2181 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2182 (defmacro c-state-cache-top-paren (&optional cache) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2183 ;; Return the address of the latest brace/bracket/paren (whether left or |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2184 ;; right) recorded in CACHE (default `c-state-cache') or nil. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2185 (let ((cash (or cache 'c-state-cache))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2186 `(if (consp (car ,cash)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2187 (cdar ,cash) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2188 (car ,cash)))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2189 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2190 (defmacro c-state-cache-after-top-paren (&optional cache) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2191 ;; Return the position just after the latest brace/bracket/paren (whether |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2192 ;; left or right) recorded in CACHE (default `c-state-cache') or nil. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2193 (let ((cash (or cache 'c-state-cache))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2194 `(if (consp (car ,cash)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2195 (cdar ,cash) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2196 (and (car ,cash) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2197 (1+ (car ,cash)))))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2198 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2199 (defun c-get-cache-scan-pos (here) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2200 ;; From the state-cache, determine the buffer position from which we might |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2201 ;; scan forward to HERE to update this cache. This position will be just |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2202 ;; after a paren/brace/bracket recorded in the cache, if possible, otherwise |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2203 ;; return the earliest position in the accessible region which isn't within |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2204 ;; a literal. If the visible portion of the buffer is entirely within a |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2205 ;; literal, return NIL. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2206 (let ((c c-state-cache) elt) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2207 ;(while (>= (or (c-state-cache-top-lparen c) 1) here) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2208 (while (and c |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2209 (>= (c-state-cache-top-lparen c) here)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2210 (setq c (cdr c))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2211 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2212 (setq elt (car c)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2213 (cond |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2214 ((consp elt) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2215 (if (> (cdr elt) here) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2216 (1+ (car elt)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2217 (cdr elt))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2218 (elt (1+ elt)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2219 ((<= (c-state-get-min-scan-pos) here) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2220 (c-state-get-min-scan-pos)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2221 (t nil)))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2222 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2223 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2224 ;; Variables which keep track of preprocessor constructs. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2225 (defvar c-state-old-cpp-beg nil) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2226 (make-variable-buffer-local 'c-state-old-cpp-beg) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2227 (defvar c-state-old-cpp-end nil) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2228 (make-variable-buffer-local 'c-state-old-cpp-end) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2229 ;; These are the limits of the macro containing point at the previous call of |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2230 ;; `c-parse-state', or nil. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2231 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2232 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2233 ;; Defuns which analyse the buffer, yet don't change `c-state-cache'. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2234 (defun c-get-fallback-scan-pos (here) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2235 ;; Return a start position for building `c-state-cache' from |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2236 ;; scratch. This will be at the top level, 2 defuns back. |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
2237 (save-excursion |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
2238 ;; Go back 2 bods, but ignore any bogus positions returned by |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
2239 ;; beginning-of-defun (i.e. open paren in column zero). |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
2240 (goto-char here) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
2241 (let ((cnt 2)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
2242 (while (not (or (bobp) (zerop cnt))) |
106395
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2243 (c-beginning-of-defun-1) ; Pure elisp BOD. |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
2244 (if (eq (char-after) ?\{) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
2245 (setq cnt (1- cnt))))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
2246 (point))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
2247 |
106395
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2248 (defun c-state-balance-parens-backwards (here top) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2249 ;; Return the position of the opening paren/brace/bracket before HERE which |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2250 ;; matches the outermost close p/b/b between HERE and TOP, like this: |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2251 ;; |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2252 ;; ...................................... |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2253 ;; | | |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2254 ;; ( [ ( ........... ) ( ) ] ) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2255 ;; ^ ^ ^ |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2256 ;; | | | |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2257 ;; return HERE TOP |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2258 ;; |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2259 ;; If there aren't enough opening paren/brace/brackets, return the position |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2260 ;; of the outermost one found, or HERE it there are none. If there are no |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2261 ;; closeing p/b/bs between HERE and TOP, return HERE. HERE and TOP must not |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2262 ;; be inside literals. Only the accessible portion of the buffer will be |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2263 ;; scanned. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2264 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2265 ;; PART 1: scan from `here' up to `top', accumulating ")"s which enclose |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2266 ;; `here'. Go round the next loop each time we pass over such a ")". These |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2267 ;; probably match "("s before `here'. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2268 (let (pos pa ren+1 lonely-rens) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2269 (save-excursion |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2270 (save-restriction |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2271 (narrow-to-region (point-min) top) ; This can move point, sometimes. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2272 (setq pos here) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2273 (c-safe |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2274 (while |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2275 (setq ren+1 (scan-lists pos 1 1)) ; might signal |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2276 (setq lonely-rens (cons ren+1 lonely-rens) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2277 pos ren+1))))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2278 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2279 ;; PART 2: Scan back before `here' searching for the "("s |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2280 ;; matching/mismatching the ")"s found above. We only need to direct the |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2281 ;; caller to scan when we've encountered unmatched right parens. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2282 (when lonely-rens |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2283 (setq pos here) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2284 (c-safe |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2285 (while |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2286 (and lonely-rens ; actual values aren't used. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2287 (setq pa (scan-lists pos -1 1))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2288 (setq pos pa) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2289 (setq lonely-rens (cdr lonely-rens)))) ;) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2290 ) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2291 pos)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2292 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2293 (defun c-parse-state-get-strategy (here good-pos) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2294 ;; Determine the scanning strategy for adjusting `c-parse-state', attempting |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2295 ;; to minimise the amount of scanning. HERE is the pertinent position in |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2296 ;; the buffer, GOOD-POS is a position where `c-state-cache' (possibly with |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2297 ;; its head trimmed) is known to be good, or nil if there is no such |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2298 ;; position. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2299 ;; |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2300 ;; The return value is a list, one of the following: |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2301 ;; |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2302 ;; o - ('forward CACHE-POS START-POINT) - scan forward from START-POINT, |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2303 ;; which is not less than CACHE-POS. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2304 ;; o - ('backward CACHE-POS nil) - scan backwards (from HERE). |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2305 ;; o - ('BOD nil START-POINT) - scan forwards from START-POINT, which is at the |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2306 ;; top level. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2307 ;; o - ('IN-LIT nil nil) - point is inside the literal containing point-min. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2308 ;; , where CACHE-POS is the highest position recorded in `c-state-cache' at |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2309 ;; or below HERE. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2310 (let ((cache-pos (c-get-cache-scan-pos here)) ; highest position below HERE in cache (or 1) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2311 BOD-pos ; position of 2nd BOD before HERE. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2312 strategy ; 'forward, 'backward, 'BOD, or 'IN-LIT. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2313 start-point |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2314 how-far) ; putative scanning distance. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2315 (setq good-pos (or good-pos (c-state-get-min-scan-pos))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2316 (cond |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2317 ((< here (c-state-get-min-scan-pos)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2318 (setq strategy 'IN-LIT |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2319 start-point nil |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2320 cache-pos nil |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2321 how-far 0)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2322 ((<= good-pos here) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2323 (setq strategy 'forward |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2324 start-point (max good-pos cache-pos) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2325 how-far (- here start-point))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2326 ((< (- good-pos here) (- here cache-pos)) ; FIXME!!! ; apply some sort of weighting. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2327 (setq strategy 'backward |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2328 how-far (- good-pos here))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2329 (t |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2330 (setq strategy 'forward |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2331 how-far (- here cache-pos) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2332 start-point cache-pos))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2333 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2334 ;; Might we be better off starting from the top level, two defuns back, |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2335 ;; instead? |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2336 (when (> how-far c-state-cache-too-far) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2337 (setq BOD-pos (c-get-fallback-scan-pos here)) ; somewhat EXPENSIVE!!! |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2338 (if (< (- here BOD-pos) how-far) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2339 (setq strategy 'BOD |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2340 start-point BOD-pos))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2341 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2342 (list |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2343 strategy |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2344 (and (memq strategy '(forward backward)) cache-pos) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2345 (and (memq strategy '(forward BOD)) start-point)))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2346 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2347 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2348 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2349 ;; Routines which change `c-state-cache' and associated values. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2350 (defun c-renarrow-state-cache () |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2351 ;; The region (more precisely, point-min) has changed since we |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2352 ;; calculated `c-state-cache'. Amend `c-state-cache' accordingly. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2353 (if (< (point-min) c-state-point-min) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2354 ;; If point-min has MOVED BACKWARDS then we drop the state completely. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2355 ;; It would be possible to do a better job here and recalculate the top |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2356 ;; only. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2357 (progn |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2358 (c-state-mark-point-min-literal) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2359 (setq c-state-cache nil |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2360 c-state-cache-good-pos c-state-min-scan-pos |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2361 c-state-brace-pair-desert nil)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2362 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2363 ;; point-min has MOVED FORWARD. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2364 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2365 ;; Is the new point-min inside a (different) literal? |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2366 (unless (and c-state-point-min-lit-start ; at prev. point-min |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2367 (< (point-min) (c-state-get-min-scan-pos))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2368 (c-state-mark-point-min-literal)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2369 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2370 ;; Cut off a bit of the tail from `c-state-cache'. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2371 (let ((ptr (cons nil c-state-cache)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2372 pa) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2373 (while (and (setq pa (c-state-cache-top-lparen (cdr ptr))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2374 (>= pa (point-min))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2375 (setq ptr (cdr ptr))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2376 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2377 (when (consp ptr) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2378 (if (eq (cdr ptr) c-state-cache) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2379 (setq c-state-cache nil |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2380 c-state-cache-good-pos c-state-min-scan-pos) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2381 (setcdr ptr nil) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2382 (setq c-state-cache-good-pos (1+ (c-state-cache-top-lparen)))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2383 ))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2384 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2385 (setq c-state-point-min (point-min))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2386 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2387 (defun c-append-lower-brace-pair-to-state-cache (from &optional upper-lim) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2388 ;; If there is a brace pair preceding FROM in the buffer (not necessarily |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2389 ;; immediately preceding), push a cons onto `c-state-cache' to represent it. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2390 ;; FROM must not be inside a literal. If UPPER-LIM is non-nil, we append |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2391 ;; the highest brace pair whose "}" is below UPPER-LIM. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2392 ;; |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2393 ;; Return non-nil when this has been done. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2394 ;; |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2395 ;; This routine should be fast. Since it can get called a LOT, we maintain |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2396 ;; `c-state-brace-pair-desert', a small cache of "failures", such that we |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2397 ;; reduce the time wasted in repeated fruitless searches in brace deserts. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2398 (save-excursion |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2399 (save-restriction |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2400 (let ((bra from) ce ; Positions of "{" and "}". |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2401 new-cons |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2402 (cache-pos (c-state-cache-top-lparen)) ; might be nil. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2403 (macro-start-or-from |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2404 (progn (goto-char from) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2405 (c-beginning-of-macro) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2406 (point)))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2407 (or upper-lim (setq upper-lim from)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2408 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2409 ;; If we're essentially repeating a fruitless search, just give up. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2410 (unless (and c-state-brace-pair-desert |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2411 (eq cache-pos (car c-state-brace-pair-desert)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2412 (<= from (cdr c-state-brace-pair-desert))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2413 ;; Only search what we absolutely need to: |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2414 (if (and c-state-brace-pair-desert |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2415 (> from (cdr c-state-brace-pair-desert))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2416 (narrow-to-region (cdr c-state-brace-pair-desert) (point-max))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2417 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2418 ;; In the next pair of nested loops, the inner one moves back past a |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2419 ;; pair of (mis-)matching parens or brackets; the outer one moves |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2420 ;; back over a sequence of unmatched close brace/paren/bracket each |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2421 ;; time round. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2422 (while |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2423 (progn |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2424 (c-safe |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2425 (while |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2426 (and (setq ce (scan-lists bra -1 -1)) ; back past )/]/}; might signal |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2427 (setq bra (scan-lists ce -1 1)) ; back past (/[/{; might signal |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2428 (or (> ce upper-lim) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2429 (not (eq (char-after bra) ?\{)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2430 (and (goto-char bra) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2431 (c-beginning-of-macro) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2432 (< (point) macro-start-or-from)))))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2433 (and ce (< ce bra))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2434 (setq bra ce)) ; If we just backed over an unbalanced closing |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2435 ; brace, ignore it. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2436 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2437 (if (and ce (< bra ce) (eq (char-after bra) ?\{)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2438 ;; We've found the desired brace-pair. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2439 (progn |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2440 (setq new-cons (cons bra (1+ ce))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2441 (cond |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2442 ((consp (car c-state-cache)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2443 (setcar c-state-cache new-cons)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2444 ((and (numberp (car c-state-cache)) ; probably never happens |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2445 (< ce (car c-state-cache))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2446 (setcdr c-state-cache |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2447 (cons new-cons (cdr c-state-cache)))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2448 (t (setq c-state-cache (cons new-cons c-state-cache))))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2449 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2450 ;; We haven't found a brace pair. Record this. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2451 (setq c-state-brace-pair-desert (cons cache-pos from)))))))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2452 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2453 (defsubst c-state-push-any-brace-pair (bra+1 macro-start-or-here) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2454 ;; If BRA+1 is nil, do nothing. Otherwise, BRA+1 is the buffer position |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2455 ;; following a {, and that brace has a (mis-)matching } (or ]), and we |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2456 ;; "push" "a" brace pair onto `c-state-cache'. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2457 ;; |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2458 ;; Here "push" means overwrite the top element if it's itself a brace-pair, |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2459 ;; otherwise push it normally. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2460 ;; |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2461 ;; The brace pair we push is normally the one surrounding BRA+1, but if the |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2462 ;; latter is inside a macro, not being a macro containing |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2463 ;; MACRO-START-OR-HERE, we scan backwards through the buffer for a non-macro |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2464 ;; base pair. This latter case is assumed to be rare. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2465 ;; |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2466 ;; Note: POINT is not preserved in this routine. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2467 (if bra+1 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2468 (if (or (> bra+1 macro-start-or-here) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2469 (progn (goto-char bra+1) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2470 (not (c-beginning-of-macro)))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2471 (setq c-state-cache |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2472 (cons (cons (1- bra+1) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2473 (scan-lists bra+1 1 1)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2474 (if (consp (car c-state-cache)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2475 (cdr c-state-cache) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2476 c-state-cache))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2477 ;; N.B. This defsubst codes one method for the simple, normal case, |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2478 ;; and a more sophisticated, slower way for the general case. Don't |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2479 ;; eliminate this defsubst - it's a speed optimisation. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2480 (c-append-lower-brace-pair-to-state-cache (1- bra+1))))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2481 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2482 (defun c-append-to-state-cache (from) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2483 ;; Scan the buffer from FROM to (point-max), adding elements into |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2484 ;; `c-state-cache' for braces etc. Return a candidate for |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2485 ;; `c-state-cache-good-pos'. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2486 ;; |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2487 ;; FROM must be after the latest brace/paren/bracket in `c-state-cache', if |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2488 ;; any. Typically, it is immediately after it. It must not be inside a |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2489 ;; literal. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2490 (let ((here-bol (c-point 'bol (point-max))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2491 (macro-start-or-here |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2492 (save-excursion (goto-char (point-max)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2493 (if (c-beginning-of-macro) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2494 (point) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2495 (point-max)))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2496 pa+1 ; pos just after an opening PAren (or brace). |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2497 (ren+1 from) ; usually a pos just after an closing paREN etc. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2498 ; Is actually the pos. to scan for a (/{/[ from, |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2499 ; which sometimes is after a silly )/}/]. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2500 paren+1 ; Pos after some opening or closing paren. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2501 paren+1s ; A list of `paren+1's; used to determine a |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2502 ; good-pos. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2503 bra+1 ce+1 ; just after L/R bra-ces. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2504 bra+1s ; list of OLD values of bra+1. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2505 mstart) ; start of a macro. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2506 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2507 (save-excursion |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2508 ;; Each time round the following loop, we enter a succesively deeper |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2509 ;; level of brace/paren nesting. (Except sometimes we "continue at |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2510 ;; the existing level".) `pa+1' is a pos inside an opening |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2511 ;; brace/paren/bracket, usually just after it. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2512 (while |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2513 (progn |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2514 ;; Each time round the next loop moves forward over an opening then |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2515 ;; a closing brace/bracket/paren. This loop is white hot, so it |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2516 ;; plays ugly tricks to go fast. DON'T PUT ANYTHING INTO THIS |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2517 ;; LOOP WHICH ISN'T ABSOLUTELY NECESSARY!!! It terminates when a |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2518 ;; call of `scan-lists' signals an error, which happens when there |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2519 ;; are no more b/b/p's to scan. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2520 (c-safe |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2521 (while t |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2522 (setq pa+1 (scan-lists ren+1 1 -1) ; Into (/{/[; might signal |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2523 paren+1s (cons pa+1 paren+1s)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2524 (setq ren+1 (scan-lists pa+1 1 1)) ; Out of )/}/]; might signal |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2525 (if (and (eq (char-before pa+1) ?{)) ; Check for a macro later. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2526 (setq bra+1 pa+1)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2527 (setcar paren+1s ren+1))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2528 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2529 (if (and pa+1 (> pa+1 ren+1)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2530 ;; We've just entered a deeper nesting level. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2531 (progn |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2532 ;; Insert the brace pair (if present) and the single open |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2533 ;; paren/brace/bracket into `c-state-cache' It cannot be |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2534 ;; inside a macro, except one around point, because of what |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2535 ;; `c-neutralize-syntax-in-CPP' has done. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2536 (c-state-push-any-brace-pair bra+1 macro-start-or-here) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2537 ;; Insert the opening brace/bracket/paren position. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2538 (setq c-state-cache (cons (1- pa+1) c-state-cache)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2539 ;; Clear admin stuff for the next more nested part of the scan. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2540 (setq ren+1 pa+1 pa+1 nil bra+1 nil bra+1s nil) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2541 t) ; Carry on the loop |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2542 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2543 ;; All open p/b/b's at this nesting level, if any, have probably |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2544 ;; been closed by matching/mismatching ones. We're probably |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2545 ;; finished - we just need to check for having found an |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2546 ;; unmatched )/}/], which we ignore. Such a )/}/] can't be in a |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2547 ;; macro, due the action of `c-neutralize-syntax-in-CPP'. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2548 (c-safe (setq ren+1 (scan-lists ren+1 1 1)))))) ; acts as loop control. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2549 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2550 ;; Record the final, innermost, brace-pair if there is one. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2551 (c-state-push-any-brace-pair bra+1 macro-start-or-here) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2552 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2553 ;; Determine a good pos |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2554 (while (and (setq paren+1 (car paren+1s)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2555 (> (if (> paren+1 macro-start-or-here) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2556 paren+1 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2557 (goto-char paren+1) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2558 (setq mstart (and (c-beginning-of-macro) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2559 (point))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2560 (or mstart paren+1)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2561 here-bol)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2562 (setq paren+1s (cdr paren+1s))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2563 (cond |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2564 ((and paren+1 mstart) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2565 (min paren+1 mstart)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2566 (paren+1) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2567 (t from))))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2568 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2569 (defun c-remove-stale-state-cache (good-pos pps-point) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2570 ;; Remove stale entries from the `c-cache-state', i.e. those which will |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2571 ;; not be in it when it is amended for position (point-max). |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2572 ;; Additionally, the "outermost" open-brace entry before (point-max) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2573 ;; will be converted to a cons if the matching close-brace is scanned. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2574 ;; |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2575 ;; GOOD-POS is a "maximal" "safe position" - there must be no open |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2576 ;; parens/braces/brackets between GOOD-POS and (point-max). |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2577 ;; |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2578 ;; As a second thing, calculate the result of parse-partial-sexp at |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2579 ;; PPS-POINT, w.r.t. GOOD-POS. The motivation here is that |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2580 ;; `c-state-cache-good-pos' may become PPS-POINT, but the caller may need to |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2581 ;; adjust it to get outside a string/comment. (Sorry about this! The code |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2582 ;; needs to be FAST). |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2583 ;; |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2584 ;; Return a list (GOOD-POS SCAN-BACK-POS PPS-STATE), where |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2585 ;; o - GOOD-POS is a position where the new value `c-state-cache' is known |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2586 ;; to be good (we aim for this to be as high as possible); |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2587 ;; o - SCAN-BACK-POS, if not nil, indicates there may be a brace pair |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2588 ;; preceding POS which needs to be recorded in `c-state-cache'. It is a |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2589 ;; position to scan backwards from. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2590 ;; o - PPS-STATE is the parse-partial-sexp state at PPS-POINT. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2591 (save-restriction |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2592 (narrow-to-region 1 (point-max)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2593 (save-excursion |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2594 (let* ((in-macro-start ; point-max or beginning of macro containing it |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2595 (save-excursion |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2596 (goto-char (point-max)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2597 (and (c-beginning-of-macro) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2598 (point)))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2599 (good-pos-actual-macro-start ; Start of macro containing good-pos |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2600 ; or nil |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2601 (and (< good-pos (point-max)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2602 (save-excursion |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2603 (goto-char good-pos) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2604 (and (c-beginning-of-macro) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2605 (point))))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2606 (good-pos-actual-macro-end ; End of this macro, (maybe |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2607 ; (point-max)), or nil. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2608 (and good-pos-actual-macro-start |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2609 (save-excursion |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2610 (goto-char good-pos-actual-macro-start) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2611 (c-end-of-macro) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2612 (point)))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2613 pps-state ; Will be 9 or 10 elements long. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2614 pos |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2615 upper-lim ; ,beyond which `c-state-cache' entries are removed |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2616 scan-back-pos |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2617 pair-beg pps-point-state target-depth) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2618 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2619 ;; Remove entries beyond (point-max). Also remove any entries inside |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2620 ;; a macro, unless (point-max) is in the same macro. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2621 (setq upper-lim |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2622 (if (or (null c-state-old-cpp-beg) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2623 (and (> (point-max) c-state-old-cpp-beg) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2624 (< (point-max) c-state-old-cpp-end))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2625 (point-max) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2626 (min (point-max) c-state-old-cpp-beg))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2627 (while (and c-state-cache (> (c-state-cache-top-lparen) upper-lim)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2628 (setq c-state-cache (cdr c-state-cache))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2629 ;; If `upper-lim' is inside the last recorded brace pair, remove its |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2630 ;; RBrace and indicate we'll need to search backwards for a previous |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2631 ;; brace pair. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2632 (when (and c-state-cache |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2633 (consp (car c-state-cache)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2634 (> (cdar c-state-cache) upper-lim)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2635 (setcar c-state-cache (caar c-state-cache)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2636 (setq scan-back-pos (car c-state-cache))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2637 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2638 ;; The next loop jumps forward out of a nested level of parens each |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2639 ;; time round; the corresponding elements in `c-state-cache' are |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2640 ;; removed. `pos' is just after the brace-pair or the open paren at |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2641 ;; (car c-state-cache). There can be no open parens/braces/brackets |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2642 ;; between `good-pos'/`good-pos-actual-macro-start' and (point-max), |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2643 ;; due to the interface spec to this function. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2644 (setq pos (if good-pos-actual-macro-end |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2645 (1+ good-pos-actual-macro-end) ; get outside the macro as |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2646 ; marked by a `category' text property. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2647 good-pos)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2648 (goto-char pos) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2649 (while (and c-state-cache |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2650 (< (point) (point-max))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2651 (cond |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2652 ((null pps-state) ; first time through |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2653 (setq target-depth -1)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2654 ((eq (car pps-state) target-depth) ; found closing ),},] |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2655 (setq target-depth (1- (car pps-state)))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2656 ;; Do nothing when we've merely reached pps-point. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2657 ) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2658 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2659 ;; Scan! |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2660 (setq pps-state |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2661 (parse-partial-sexp |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2662 (point) (if (< (point) pps-point) pps-point (point-max)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2663 target-depth |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2664 nil pps-state)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2665 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2666 (if (= (point) pps-point) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2667 (setq pps-point-state pps-state)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2668 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2669 (when (eq (car pps-state) target-depth) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2670 (setq pos (point)) ; POS is now just after an R-paren/brace. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2671 (cond |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2672 ((and (consp (car c-state-cache)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2673 (eq (point) (cdar c-state-cache))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2674 ;; We've just moved out of the paren pair containing the brace-pair |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2675 ;; at (car c-state-cache). `pair-beg' is where the open paren is, |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2676 ;; and is potentially where the open brace of a cons in |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2677 ;; c-state-cache will be. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2678 (setq pair-beg (car-safe (cdr c-state-cache)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2679 c-state-cache (cdr-safe (cdr c-state-cache)))) ; remove {}pair + containing Lparen. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2680 ((numberp (car c-state-cache)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2681 (setq pair-beg (car c-state-cache) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2682 c-state-cache (cdr c-state-cache))) ; remove this |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2683 ; containing Lparen |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2684 ((numberp (cadr c-state-cache)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2685 (setq pair-beg (cadr c-state-cache) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2686 c-state-cache (cddr c-state-cache))) ; Remove a paren pair |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2687 ; together with enclosed brace pair. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2688 ;; (t nil) ; Ignore an unmated Rparen. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2689 ))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2690 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2691 (if (< (point) pps-point) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2692 (setq pps-state (parse-partial-sexp (point) pps-point |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2693 nil nil ; TARGETDEPTH, STOPBEFORE |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2694 pps-state))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2695 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2696 ;; If the last paren pair we moved out of was actually a brace pair, |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2697 ;; insert it into `c-state-cache'. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2698 (when (and pair-beg (eq (char-after pair-beg) ?{)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2699 (if (consp (car-safe c-state-cache)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2700 (setq c-state-cache (cdr c-state-cache))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2701 (setq c-state-cache (cons (cons pair-beg pos) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2702 c-state-cache))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2703 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2704 (list pos scan-back-pos pps-state))))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2705 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2706 (defun c-remove-stale-state-cache-backwards (here cache-pos) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2707 ;; Strip stale elements of `c-state-cache' by moving backwards through the |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2708 ;; buffer, and inform the caller of the scenario detected. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2709 ;; |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2710 ;; HERE is the position we're setting `c-state-cache' for. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2711 ;; CACHE-POS is just after the latest recorded position in `c-state-cache' |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2712 ;; before HERE, or a position at or near point-min which isn't in a |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2713 ;; literal. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2714 ;; |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2715 ;; This function must only be called only when (> `c-state-cache-good-pos' |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2716 ;; HERE). Usually the gap between CACHE-POS and HERE is large. It is thus |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2717 ;; optimised to eliminate (or minimise) scanning between these two |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2718 ;; positions. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2719 ;; |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2720 ;; Return a three element list (GOOD-POS SCAN-BACK-POS FWD-FLAG), where: |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2721 ;; o - GOOD-POS is a "good position", where `c-state-cache' is valid, or |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2722 ;; could become so after missing elements are inserted into |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2723 ;; `c-state-cache'. This is JUST AFTER an opening or closing |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2724 ;; brace/paren/bracket which is already in `c-state-cache' or just before |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2725 ;; one otherwise. exceptionally (when there's no such b/p/b handy) the BOL |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2726 ;; before `here''s line, or the start of the literal containing it. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2727 ;; o - SCAN-BACK-POS, if non-nil, indicates there may be a brace pair |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2728 ;; preceding POS which isn't recorded in `c-state-cache'. It is a position |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2729 ;; to scan backwards from. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2730 ;; o - FWD-FLAG, if non-nil, indicates there may be parens/braces between |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2731 ;; POS and HERE which aren't recorded in `c-state-cache'. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2732 ;; |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2733 ;; The comments in this defun use "paren" to mean parenthesis or square |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2734 ;; bracket (as contrasted with a brace), and "(" and ")" likewise. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2735 ;; |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2736 ;; . {..} (..) (..) ( .. { } ) (...) ( .... . ..) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2737 ;; | | | | | | |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2738 ;; CP E here D C good |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2739 (let ((pos c-state-cache-good-pos) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2740 pa ren ; positions of "(" and ")" |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2741 dropped-cons ; whether the last element dropped from `c-state-cache' |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2742 ; was a cons (representing a brace-pair) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2743 good-pos ; see above. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2744 lit ; (START . END) of a literal containing some point. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2745 here-lit-start here-lit-end ; bounds of literal containing `here' |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2746 ; or `here' itself. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2747 (here-bol (c-point 'bol here)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2748 (too-far-back (max (- here c-state-cache-too-far) 1))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2749 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2750 ;; Remove completely irrelevant entries from `c-state-cache'. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2751 (while (and c-state-cache |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2752 (>= (setq pa (c-state-cache-top-lparen)) here)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2753 (setq dropped-cons (consp (car c-state-cache))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2754 (setq c-state-cache (cdr c-state-cache)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2755 (setq pos pa)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2756 ;; At this stage, (> pos here); |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2757 ;; (< (c-state-cache-top-lparen) here) (or is nil). |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2758 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2759 ;; CASE 1: The top of the cache is a brace pair which now encloses `here'. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2760 ;; As good-pos, return the address. of the "{". |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2761 (if (and (consp (car c-state-cache)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2762 (> (cdar c-state-cache) here)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2763 ;; Since we've no knowledge of what's inside these braces, we have no |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2764 ;; alternative but to direct the caller to scan the buffer from the |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2765 ;; opening brace. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2766 (progn |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2767 (setq pos (caar c-state-cache)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2768 (setcar c-state-cache pos) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2769 (list (1+ pos) pos t)) ; return value. We've just converted a brace |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2770 ; pair entry into a { entry, so the caller |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2771 ; needs to search for a brace pair before the |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2772 ; {. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2773 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2774 ;; ;; `here' might be inside a literal. Check for this. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2775 (setq lit (c-state-literal-at here) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2776 here-lit-start (or (car lit) here) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2777 here-lit-end (or (cdr lit) here)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2778 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2779 ;; `here' might be nested inside any depth of parens (or brackets but |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2780 ;; not braces). Scan backwards to find the outermost such opening |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2781 ;; paren, if there is one. This will be the scan position to return. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2782 (save-restriction |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2783 (narrow-to-region cache-pos (point-max)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2784 (setq pos (c-state-balance-parens-backwards here-lit-end pos))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2785 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2786 (if (< pos here-lit-start) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2787 ;; CASE 2: Address of outermost ( or [ which now encloses `here', |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2788 ;; but didn't enclose the (previous) `c-state-cache-good-pos'. If |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2789 ;; there is a brace pair preceding this, it will already be in |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2790 ;; `c-state-cache', unless there was a brace pair after it, |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2791 ;; i.e. there'll only be one to scan for if we've just deleted one. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2792 (list pos (and dropped-cons pos) t) ; Return value. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2793 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2794 ;; `here' isn't enclosed in a (previously unrecorded) bracket/paren. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2795 ;; Further forward scanning isn't needed, but we still need to find a |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2796 ;; GOOD-POS. Step out of all enclosing "("s on HERE's line. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2797 (save-restriction |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2798 (narrow-to-region here-bol (point-max)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2799 (setq pos here-lit-start) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2800 (c-safe (while (setq pa (scan-lists pos -1 1)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2801 (setq pos pa)))) ; might signal |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2802 (if (setq ren (c-safe-scan-lists pos -1 -1 too-far-back)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2803 ;; CASE 3: After a }/)/] before `here''s BOL. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2804 (list (1+ ren) (and dropped-cons pos) nil) ; Return value |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2805 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2806 ;; CASE 4; Best of a bad job: BOL before `here-bol', or beginning of |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2807 ;; literal containing it. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2808 (setq good-pos (c-state-lit-beg (c-point 'bopl here-bol))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2809 (list good-pos (and dropped-cons good-pos) nil)))))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2810 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2811 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2812 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2813 ;; Externally visible routines. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2814 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2815 (defun c-state-cache-init () |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2816 (setq c-state-cache nil |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2817 c-state-cache-good-pos 1 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2818 c-state-nonlit-pos-cache nil |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2819 c-state-nonlit-pos-cache-limit 1 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2820 c-state-brace-pair-desert nil |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2821 c-state-point-min 1 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2822 c-state-point-min-lit-type nil |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2823 c-state-point-min-lit-start nil |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2824 c-state-min-scan-pos 1 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2825 c-state-old-cpp-beg nil |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2826 c-state-old-cpp-end nil) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2827 (c-state-mark-point-min-literal)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2828 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2829 (defun c-invalidate-state-cache-1 (here) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2830 ;; Invalidate all info on `c-state-cache' that applies to the buffer at HERE |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2831 ;; or higher and set `c-state-cache-good-pos' accordingly. The cache is |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2832 ;; left in a consistent state. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2833 ;; |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2834 ;; This is much like `c-whack-state-after', but it never changes a paren |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2835 ;; pair element into an open paren element. Doing that would mean that the |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2836 ;; new open paren wouldn't have the required preceding paren pair element. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2837 ;; |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2838 ;; This function is called from c-after-change. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2839 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2840 ;; The cache of non-literals: |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2841 (if (< here c-state-nonlit-pos-cache-limit) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2842 (setq c-state-nonlit-pos-cache-limit here)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2843 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2844 ;; `c-state-cache': |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2845 ;; Case 1: if `here' is in a literal containing point-min, everything |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2846 ;; becomes (or is already) nil. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2847 (if (or (null c-state-cache-good-pos) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2848 (< here (c-state-get-min-scan-pos))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2849 (setq c-state-cache nil |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2850 c-state-cache-good-pos nil |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2851 c-state-min-scan-pos nil) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2852 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2853 ;;; Truncate `c-state-cache' and set `c-state-cache-good-pos' to a value below |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2854 ;;; `here'. To maintain its consistency, we may need to insert a new brace |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2855 ;;; pair. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2856 (let ((here-bol (c-point 'bol here)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2857 too-high-pa ; recorded {/(/[ next above here, or nil. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2858 dropped-cons ; was the last removed element a brace pair? |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2859 pa) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2860 ;; The easy bit - knock over-the-top bits off `c-state-cache'. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2861 (while (and c-state-cache |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2862 (>= (setq pa (c-state-cache-top-paren)) here)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2863 (setq dropped-cons (consp (car c-state-cache)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2864 too-high-pa (c-state-cache-top-lparen) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2865 c-state-cache (cdr c-state-cache))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2866 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2867 ;; Do we need to add in an earlier brace pair, having lopped one off? |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2868 (if (and dropped-cons |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2869 (< too-high-pa (+ here c-state-cache-too-far))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2870 (c-append-lower-brace-pair-to-state-cache too-high-pa here-bol)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2871 (setq c-state-cache-good-pos (or (c-state-cache-after-top-paren) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2872 (c-state-get-min-scan-pos))))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2873 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2874 ;; The brace-pair desert marker: |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2875 (when (car c-state-brace-pair-desert) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2876 (if (< here (car c-state-brace-pair-desert)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2877 (setq c-state-brace-pair-desert nil) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2878 (if (< here (cdr c-state-brace-pair-desert)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2879 (setcdr c-state-brace-pair-desert here))))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2880 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2881 (defun c-parse-state-1 () |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2882 ;; Find and record all noteworthy parens between some good point earlier in |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2883 ;; the file and point. That good point is at least the beginning of the |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2884 ;; top-level construct we are in, or the beginning of the preceding |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2885 ;; top-level construct if we aren't in one. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2886 ;; |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2887 ;; The returned value is a list of the noteworthy parens with the last one |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2888 ;; first. If an element in the list is an integer, it's the position of an |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2889 ;; open paren (of any type) which has not been closed before the point. If |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2890 ;; an element is a cons, it gives the position of a closed BRACE paren |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2891 ;; pair[*]; the car is the start brace position and the cdr is the position |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2892 ;; following the closing brace. Only the last closed brace paren pair |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2893 ;; before each open paren and before the point is recorded, and thus the |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2894 ;; state never contains two cons elements in succession. When a close brace |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2895 ;; has no matching open brace (e.g., the matching brace is outside the |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2896 ;; visible region), it is not represented in the returned value. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2897 ;; |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2898 ;; [*] N.B. The close "brace" might be a mismatching close bracket or paren. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2899 ;; This defun explicitly treats mismatching parens/braces/brackets as |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2900 ;; matching. It is the open brace which makes it a "brace" pair. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2901 ;; |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2902 ;; If POINT is within a macro, open parens and brace pairs within |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2903 ;; THIS macro MIGHT be recorded. This depends on whether their |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2904 ;; syntactic properties have been suppressed by |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2905 ;; `c-neutralize-syntax-in-CPP'. This might need fixing (2008-12-11). |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
2906 ;; |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
2907 ;; Currently no characters which are given paren syntax with the |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
2908 ;; syntax-table property are recorded, i.e. angle bracket arglist |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
2909 ;; parens are never present here. Note that this might change. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
2910 ;; |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
2911 ;; BUG: This function doesn't cope entirely well with unbalanced |
106395
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2912 ;; parens in macros. (2008-12-11: this has probably been resolved |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2913 ;; by the function `c-neutralize-syntax-in-CPP'.) E.g. in the |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2914 ;; following case the brace before the macro isn't balanced with the |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2915 ;; one after it: |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
2916 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
2917 ;; { |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
2918 ;; #define X { |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
2919 ;; } |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
2920 ;; |
106395
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2921 ;; Note to maintainers: this function DOES get called with point |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2922 ;; within comments and strings, so don't assume it doesn't! |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2923 ;; |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
2924 ;; This function might do hidden buffer changes. |
106395
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2925 (let* ((here (point)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2926 (here-bopl (c-point 'bopl)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2927 strategy ; 'forward, 'backward etc.. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2928 ;; Candidate positions to start scanning from: |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2929 cache-pos ; highest position below HERE already existing in |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2930 ; cache (or 1). |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2931 good-pos |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2932 start-point |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2933 bopl-state |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2934 res |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2935 scan-backward-pos scan-forward-p) ; used for 'backward. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2936 ;; If POINT-MIN has changed, adjust the cache |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2937 (unless (= (point-min) c-state-point-min) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2938 (c-renarrow-state-cache)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2939 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2940 ;; Strategy? |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2941 (setq res (c-parse-state-get-strategy here c-state-cache-good-pos) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2942 strategy (car res) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2943 cache-pos (cadr res) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2944 start-point (nth 2 res)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2945 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2946 (when (eq strategy 'BOD) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2947 (setq c-state-cache nil |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2948 c-state-cache-good-pos start-point)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2949 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2950 ;; SCAN! |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2951 (save-restriction |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2952 (cond |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2953 ((memq strategy '(forward BOD)) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
2954 (narrow-to-region (point-min) here) |
106395
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2955 (setq res (c-remove-stale-state-cache start-point here-bopl)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2956 (setq cache-pos (car res) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2957 scan-backward-pos (cadr res) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2958 bopl-state (car (cddr res))) ; will be nil if (< here-bopl |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2959 ; start-point) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2960 (if scan-backward-pos |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2961 (c-append-lower-brace-pair-to-state-cache scan-backward-pos)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2962 (setq good-pos |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2963 (c-append-to-state-cache cache-pos)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2964 (setq c-state-cache-good-pos |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2965 (if (and bopl-state |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2966 (< good-pos (- here c-state-cache-too-far))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2967 (c-state-cache-non-literal-place here-bopl bopl-state) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2968 good-pos))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2969 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2970 ((eq strategy 'backward) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2971 (setq res (c-remove-stale-state-cache-backwards here cache-pos) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2972 good-pos (car res) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2973 scan-backward-pos (cadr res) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2974 scan-forward-p (car (cddr res))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2975 (if scan-backward-pos |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2976 (c-append-lower-brace-pair-to-state-cache |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2977 scan-backward-pos)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2978 (setq c-state-cache-good-pos |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2979 (if scan-forward-p |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2980 (progn (narrow-to-region (point-min) here) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2981 (c-append-to-state-cache good-pos)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2982 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2983 (c-get-cache-scan-pos good-pos)))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2984 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2985 (t ; (eq strategy 'IN-LIT) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2986 (setq c-state-cache nil |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2987 c-state-cache-good-pos nil))))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2988 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2989 c-state-cache) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2990 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2991 (defun c-invalidate-state-cache (here) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2992 ;; This is a wrapper over `c-invalidate-state-cache-1'. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2993 ;; |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2994 ;; It suppresses the syntactic effect of the < and > (template) brackets and |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2995 ;; of all parens in preprocessor constructs, except for any such construct |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2996 ;; containing point. We can then call `c-invalidate-state-cache-1' without |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2997 ;; worrying further about macros and template delimiters. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2998 (c-with-<->-as-parens-suppressed |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
2999 (if c-state-old-cpp-beg |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
3000 (c-with-all-but-one-cpps-commented-out |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
3001 c-state-old-cpp-beg c-state-old-cpp-end |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
3002 (c-invalidate-state-cache-1 here)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
3003 (c-with-cpps-commented-out |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
3004 (c-invalidate-state-cache-1 here))))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
3005 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
3006 (defun c-parse-state () |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
3007 ;; This is a wrapper over `c-parse-state-1'. See that function for a |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
3008 ;; description of the functionality and return value. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
3009 ;; |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
3010 ;; It suppresses the syntactic effect of the < and > (template) brackets and |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
3011 ;; of all parens in preprocessor constructs, except for any such construct |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
3012 ;; containing point. We can then call `c-parse-state-1' without worrying |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
3013 ;; further about macros and template delimiters. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
3014 (let (here-cpp-beg here-cpp-end) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
3015 (save-excursion |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
3016 (when (c-beginning-of-macro) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
3017 (setq here-cpp-beg (point)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
3018 (unless |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
3019 (> (setq here-cpp-end (c-syntactic-end-of-macro)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
3020 here-cpp-beg) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
3021 (setq here-cpp-beg nil here-cpp-end nil)))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
3022 ;; FIXME!!! Put in a `condition-case' here to protect the integrity of the |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
3023 ;; subsystem. |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
3024 (prog1 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
3025 (c-with-<->-as-parens-suppressed |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
3026 (if (and here-cpp-beg (> here-cpp-end here-cpp-beg)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
3027 (c-with-all-but-one-cpps-commented-out |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
3028 here-cpp-beg here-cpp-end |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
3029 (c-parse-state-1)) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
3030 (c-with-cpps-commented-out |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
3031 (c-parse-state-1)))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
3032 (setq c-state-old-cpp-beg here-cpp-beg |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
3033 c-state-old-cpp-end here-cpp-end)))) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
3034 |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
3035 ;; Debug tool to catch cache inconsistencies. This is called from |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
3036 ;; 000tests.el. |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
3037 (defvar c-debug-parse-state nil) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
3038 (unless (fboundp 'c-real-parse-state) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
3039 (fset 'c-real-parse-state (symbol-function 'c-parse-state))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
3040 (cc-bytecomp-defun c-real-parse-state) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
3041 (defun c-debug-parse-state () |
106395
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
3042 (let ((here (point)) (res1 (c-real-parse-state)) res2) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3043 (let ((c-state-cache nil) |
106395
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
3044 (c-state-cache-good-pos 1) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
3045 (c-state-nonlit-pos-cache nil) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
3046 (c-state-nonlit-pos-cache-limit 1) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
3047 (c-state-brace-pair-desert nil) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
3048 (c-state-point-min 1) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
3049 (c-state-point-min-lit-type nil) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
3050 (c-state-point-min-lit-start nil) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
3051 (c-state-min-scan-pos 1) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
3052 (c-state-old-cpp-beg nil) |
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
3053 (c-state-old-cpp-end nil)) |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
3054 (setq res2 (c-real-parse-state))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
3055 (unless (equal res1 res2) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3056 ;; The cache can actually go further back due to the ad-hoc way |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3057 ;; the first paren is found, so try to whack off a bit of its |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3058 ;; start before complaining. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3059 (save-excursion |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3060 (goto-char (or (c-least-enclosing-brace res2) (point))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3061 (c-beginning-of-defun-1) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3062 (while (not (or (bobp) (eq (char-after) ?{))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3063 (c-beginning-of-defun-1)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3064 (unless (equal (c-whack-state-before (point) res1) res2) |
106395
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
3065 (message (concat "c-parse-state inconsistency at %s: " |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3066 "using cache: %s, from scratch: %s") |
106395
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
3067 here res1 res2)))) |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
3068 res1)) |
106395
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
3069 |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
3070 (defun c-toggle-parse-state-debug (&optional arg) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
3071 (interactive "P") |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
3072 (setq c-debug-parse-state (c-calculate-state arg c-debug-parse-state)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
3073 (fset 'c-parse-state (symbol-function (if c-debug-parse-state |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
3074 'c-debug-parse-state |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
3075 'c-real-parse-state))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
3076 (c-keep-region-active)) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3077 (when c-debug-parse-state |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3078 (c-toggle-parse-state-debug 1)) |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
3079 |
106395
f2b36fb84bf7
Enhance `c-parse-state' to run efficiently in "brace desserts".
Alan Mackenzie <acm@muc.de>
parents:
105424
diff
changeset
|
3080 |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
3081 (defun c-whack-state-before (bufpos paren-state) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
3082 ;; Whack off any state information from PAREN-STATE which lies |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
3083 ;; before BUFPOS. Not destructive on PAREN-STATE. |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
3084 (let* ((newstate (list nil)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
3085 (ptr newstate) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
3086 car) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
3087 (while paren-state |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
3088 (setq car (car paren-state) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
3089 paren-state (cdr paren-state)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
3090 (if (< (if (consp car) (car car) car) bufpos) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
3091 (setq paren-state nil) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
3092 (setcdr ptr (list car)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
3093 (setq ptr (cdr ptr)))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
3094 (cdr newstate))) |
18720 | 3095 |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
3096 (defun c-whack-state-after (bufpos paren-state) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
3097 ;; Whack off any state information from PAREN-STATE which lies at or |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
3098 ;; after BUFPOS. Not destructive on PAREN-STATE. |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
3099 (catch 'done |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
3100 (while paren-state |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
3101 (let ((car (car paren-state))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
3102 (if (consp car) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
3103 ;; just check the car, because in a balanced brace |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
3104 ;; expression, it must be impossible for the corresponding |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
3105 ;; close brace to be before point, but the open brace to |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
3106 ;; be after. |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
3107 (if (<= bufpos (car car)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
3108 nil ; whack it off |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
3109 (if (< bufpos (cdr car)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
3110 ;; its possible that the open brace is before |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
3111 ;; bufpos, but the close brace is after. In that |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
3112 ;; case, convert this to a non-cons element. The |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
3113 ;; rest of the state is before bufpos, so we're |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
3114 ;; done. |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
3115 (throw 'done (cons (car car) (cdr paren-state))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
3116 ;; we know that both the open and close braces are |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
3117 ;; before bufpos, so we also know that everything else |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
3118 ;; on state is before bufpos. |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
3119 (throw 'done paren-state))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
3120 (if (<= bufpos car) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
3121 nil ; whack it off |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
3122 ;; it's before bufpos, so everything else should too. |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
3123 (throw 'done paren-state))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
3124 (setq paren-state (cdr paren-state))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
3125 nil))) |
18720 | 3126 |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3127 (defun c-most-enclosing-brace (paren-state &optional bufpos) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3128 ;; Return the bufpos of the innermost enclosing open paren before |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3129 ;; bufpos, or nil if none was found. |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3130 (let (enclosingp) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3131 (or bufpos (setq bufpos 134217727)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3132 (while paren-state |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3133 (setq enclosingp (car paren-state) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3134 paren-state (cdr paren-state)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3135 (if (or (consp enclosingp) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3136 (>= enclosingp bufpos)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3137 (setq enclosingp nil) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3138 (setq paren-state nil))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3139 enclosingp)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3140 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3141 (defun c-least-enclosing-brace (paren-state) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3142 ;; Return the bufpos of the outermost enclosing open paren, or nil |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3143 ;; if none was found. |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3144 (let (pos elem) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3145 (while paren-state |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3146 (setq elem (car paren-state) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3147 paren-state (cdr paren-state)) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3148 (if (integerp elem) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3149 (setq pos elem))) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3150 pos)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3151 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3152 (defun c-safe-position (bufpos paren-state) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3153 ;; Return the closest "safe" position recorded on PAREN-STATE that |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3154 ;; is higher up than BUFPOS. Return nil if PAREN-STATE doesn't |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3155 ;; contain any. Return nil if BUFPOS is nil, which is useful to |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3156 ;; find the closest limit before a given limit that might be nil. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3157 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3158 ;; A "safe" position is a position at or after a recorded open |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3159 ;; paren, or after a recorded close paren. The returned position is |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3160 ;; thus either the first position after a close brace, or the first |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3161 ;; position after an enclosing paren, or at the enclosing paren in |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3162 ;; case BUFPOS is immediately after it. |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3163 (when bufpos |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3164 (let (elem) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3165 (catch 'done |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3166 (while paren-state |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3167 (setq elem (car paren-state)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3168 (if (consp elem) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3169 (cond ((< (cdr elem) bufpos) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3170 (throw 'done (cdr elem))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3171 ((< (car elem) bufpos) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3172 ;; See below. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3173 (throw 'done (min (1+ (car elem)) bufpos)))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3174 (if (< elem bufpos) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3175 ;; elem is the position at and not after the opening paren, so |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3176 ;; we can go forward one more step unless it's equal to |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3177 ;; bufpos. This is useful in some cases avoid an extra paren |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3178 ;; level between the safe position and bufpos. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3179 (throw 'done (min (1+ elem) bufpos)))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3180 (setq paren-state (cdr paren-state))))))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3181 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3182 (defun c-beginning-of-syntax () |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3183 ;; This is used for `font-lock-beginning-of-syntax-function'. It |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3184 ;; goes to the closest previous point that is known to be outside |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3185 ;; any string literal or comment. `c-state-cache' is used if it has |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3186 ;; a position in the vicinity. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3187 (let* ((paren-state c-state-cache) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3188 elem |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3189 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3190 (pos (catch 'done |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3191 ;; Note: Similar code in `c-safe-position'. The |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3192 ;; difference is that we accept a safe position at |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3193 ;; the point and don't bother to go forward past open |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3194 ;; parens. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3195 (while paren-state |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3196 (setq elem (car paren-state)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3197 (if (consp elem) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3198 (cond ((<= (cdr elem) (point)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3199 (throw 'done (cdr elem))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3200 ((<= (car elem) (point)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3201 (throw 'done (car elem)))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3202 (if (<= elem (point)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3203 (throw 'done elem))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3204 (setq paren-state (cdr paren-state))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3205 (point-min)))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3206 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3207 (if (> pos (- (point) 4000)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3208 (goto-char pos) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3209 ;; The position is far back. Try `c-beginning-of-defun-1' |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3210 ;; (although we can't be entirely sure it will go to a position |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3211 ;; outside a comment or string in current emacsen). FIXME: |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3212 ;; Consult `syntax-ppss' here. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3213 (c-beginning-of-defun-1) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3214 (if (< (point) pos) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3215 (goto-char pos))))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3216 |
18720 | 3217 |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3218 ;; Tools for scanning identifiers and other tokens. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3219 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3220 (defun c-on-identifier () |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3221 "Return non-nil if the point is on or directly after an identifier. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3222 Keywords are recognized and not considered identifiers. If an |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3223 identifier is detected, the returned value is its starting position. |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3224 If an identifier ends at the point and another begins at it \(can only |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3225 happen in Pike) then the point for the preceding one is returned. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3226 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3227 Note that this function might do hidden buffer changes. See the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3228 comment at the start of cc-engine.el for more info." |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3229 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3230 ;; FIXME: Shouldn't this function handle "operator" in C++? |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3231 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3232 (save-excursion |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3233 (skip-syntax-backward "w_") |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3234 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3235 (or |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3236 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3237 ;; Check for a normal (non-keyword) identifier. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3238 (and (looking-at c-symbol-start) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3239 (not (looking-at c-keywords-regexp)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3240 (point)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3241 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3242 (when (c-major-mode-is 'pike-mode) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3243 ;; Handle the `<operator> syntax in Pike. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3244 (let ((pos (point))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3245 (skip-chars-backward "-!%&*+/<=>^|~[]()") |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3246 (and (if (< (skip-chars-backward "`") 0) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3247 t |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3248 (goto-char pos) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3249 (eq (char-after) ?\`)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3250 (looking-at c-symbol-key) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3251 (>= (match-end 0) pos) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3252 (point)))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3253 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3254 ;; Handle the "operator +" syntax in C++. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3255 (when (and c-overloadable-operators-regexp |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3256 (= (c-backward-token-2 0) 0)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3257 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3258 (cond ((and (looking-at c-overloadable-operators-regexp) |
75027
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
3259 (or (not c-opt-op-identifier-prefix) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3260 (and (= (c-backward-token-2 1) 0) |
75027
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
3261 (looking-at c-opt-op-identifier-prefix)))) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3262 (point)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3263 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3264 ((save-excursion |
75027
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
3265 (and c-opt-op-identifier-prefix |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
3266 (looking-at c-opt-op-identifier-prefix) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3267 (= (c-forward-token-2 1) 0) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3268 (looking-at c-overloadable-operators-regexp))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3269 (point)))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3270 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3271 ))) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3272 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3273 (defsubst c-simple-skip-symbol-backward () |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3274 ;; If the point is at the end of a symbol then skip backward to the |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3275 ;; beginning of it. Don't move otherwise. Return non-nil if point |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3276 ;; moved. |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3277 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3278 ;; This function might do hidden buffer changes. |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3279 (or (< (skip-syntax-backward "w_") 0) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3280 (and (c-major-mode-is 'pike-mode) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3281 ;; Handle the `<operator> syntax in Pike. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3282 (let ((pos (point))) |
56646
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3283 (if (and (< (skip-chars-backward "-!%&*+/<=>^|~[]()") 0) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3284 (< (skip-chars-backward "`") 0) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3285 (looking-at c-symbol-key) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3286 (>= (match-end 0) pos)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3287 t |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3288 (goto-char pos) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3289 nil))))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3290 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3291 (defun c-beginning-of-current-token (&optional back-limit) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3292 ;; Move to the beginning of the current token. Do not move if not |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3293 ;; in the middle of one. BACK-LIMIT may be used to bound the |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3294 ;; backward search; if given it's assumed to be at the boundary |
98693
69a04789c5f0
Amend several doc strings and comments.
Alan Mackenzie <acm@muc.de>
parents:
96145
diff
changeset
|
3295 ;; between two tokens. Return non-nil if the point is moved, nil |
76400
4dc5b2641221
(c-partial-ws-p, c-unfind-type, c-trim-found-types): new functions.
Alan Mackenzie <acm@muc.de>
parents:
75623
diff
changeset
|
3296 ;; otherwise. |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3297 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3298 ;; This function might do hidden buffer changes. |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3299 (let ((start (point))) |
76400
4dc5b2641221
(c-partial-ws-p, c-unfind-type, c-trim-found-types): new functions.
Alan Mackenzie <acm@muc.de>
parents:
75623
diff
changeset
|
3300 (if (looking-at "\\w\\|\\s_") |
4dc5b2641221
(c-partial-ws-p, c-unfind-type, c-trim-found-types): new functions.
Alan Mackenzie <acm@muc.de>
parents:
75623
diff
changeset
|
3301 (skip-syntax-backward "w_" back-limit) |
4dc5b2641221
(c-partial-ws-p, c-unfind-type, c-trim-found-types): new functions.
Alan Mackenzie <acm@muc.de>
parents:
75623
diff
changeset
|
3302 (when (< (skip-syntax-backward ".()" back-limit) 0) |
4dc5b2641221
(c-partial-ws-p, c-unfind-type, c-trim-found-types): new functions.
Alan Mackenzie <acm@muc.de>
parents:
75623
diff
changeset
|
3303 (while (let ((pos (or (and (looking-at c-nonsymbol-token-regexp) |
4dc5b2641221
(c-partial-ws-p, c-unfind-type, c-trim-found-types): new functions.
Alan Mackenzie <acm@muc.de>
parents:
75623
diff
changeset
|
3304 (match-end 0)) |
4dc5b2641221
(c-partial-ws-p, c-unfind-type, c-trim-found-types): new functions.
Alan Mackenzie <acm@muc.de>
parents:
75623
diff
changeset
|
3305 ;; `c-nonsymbol-token-regexp' should always match |
4dc5b2641221
(c-partial-ws-p, c-unfind-type, c-trim-found-types): new functions.
Alan Mackenzie <acm@muc.de>
parents:
75623
diff
changeset
|
3306 ;; since we've skipped backward over punctuator |
4dc5b2641221
(c-partial-ws-p, c-unfind-type, c-trim-found-types): new functions.
Alan Mackenzie <acm@muc.de>
parents:
75623
diff
changeset
|
3307 ;; or paren syntax, but consume one char in case |
4dc5b2641221
(c-partial-ws-p, c-unfind-type, c-trim-found-types): new functions.
Alan Mackenzie <acm@muc.de>
parents:
75623
diff
changeset
|
3308 ;; it doesn't so that we don't leave point before |
4dc5b2641221
(c-partial-ws-p, c-unfind-type, c-trim-found-types): new functions.
Alan Mackenzie <acm@muc.de>
parents:
75623
diff
changeset
|
3309 ;; some earlier incorrect token. |
4dc5b2641221
(c-partial-ws-p, c-unfind-type, c-trim-found-types): new functions.
Alan Mackenzie <acm@muc.de>
parents:
75623
diff
changeset
|
3310 (1+ (point))))) |
4dc5b2641221
(c-partial-ws-p, c-unfind-type, c-trim-found-types): new functions.
Alan Mackenzie <acm@muc.de>
parents:
75623
diff
changeset
|
3311 (if (<= pos start) |
4dc5b2641221
(c-partial-ws-p, c-unfind-type, c-trim-found-types): new functions.
Alan Mackenzie <acm@muc.de>
parents:
75623
diff
changeset
|
3312 (goto-char pos)))))) |
4dc5b2641221
(c-partial-ws-p, c-unfind-type, c-trim-found-types): new functions.
Alan Mackenzie <acm@muc.de>
parents:
75623
diff
changeset
|
3313 (< (point) start))) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3314 |
52107
3a5379a0d7f3
2003-08-01 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents:
51947
diff
changeset
|
3315 (defun c-end-of-current-token (&optional back-limit) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3316 ;; Move to the end of the current token. Do not move if not in the |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3317 ;; middle of one. BACK-LIMIT may be used to bound the backward |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3318 ;; search; if given it's assumed to be at the boundary between two |
52107
3a5379a0d7f3
2003-08-01 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents:
51947
diff
changeset
|
3319 ;; tokens. Return non-nil if the point is moved, nil otherwise. |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3320 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3321 ;; This function might do hidden buffer changes. |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3322 (let ((start (point))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3323 (cond ((< (skip-syntax-backward "w_" (1- start)) 0) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3324 (skip-syntax-forward "w_")) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3325 ((< (skip-syntax-backward ".()" back-limit) 0) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3326 (while (progn |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3327 (if (looking-at c-nonsymbol-token-regexp) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3328 (goto-char (match-end 0)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3329 ;; `c-nonsymbol-token-regexp' should always match since |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3330 ;; we've skipped backward over punctuator or paren |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3331 ;; syntax, but move forward in case it doesn't so that |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3332 ;; we don't leave point earlier than we started with. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3333 (forward-char)) |
52107
3a5379a0d7f3
2003-08-01 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents:
51947
diff
changeset
|
3334 (< (point) start))))) |
3a5379a0d7f3
2003-08-01 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents:
51947
diff
changeset
|
3335 (> (point) start))) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3336 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3337 (defconst c-jump-syntax-balanced |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3338 (if (memq 'gen-string-delim c-emacs-features) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3339 "\\w\\|\\s_\\|\\s\(\\|\\s\)\\|\\s\"\\|\\s|" |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3340 "\\w\\|\\s_\\|\\s\(\\|\\s\)\\|\\s\"")) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3341 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3342 (defconst c-jump-syntax-unbalanced |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3343 (if (memq 'gen-string-delim c-emacs-features) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3344 "\\w\\|\\s_\\|\\s\"\\|\\s|" |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3345 "\\w\\|\\s_\\|\\s\"")) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3346 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3347 (defun c-forward-token-2 (&optional count balanced limit) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3348 "Move forward by tokens. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3349 A token is defined as all symbols and identifiers which aren't |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3350 syntactic whitespace \(note that multicharacter tokens like \"==\" are |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3351 treated properly). Point is always either left at the beginning of a |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3352 token or not moved at all. COUNT specifies the number of tokens to |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3353 move; a negative COUNT moves in the opposite direction. A COUNT of 0 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3354 moves to the next token beginning only if not already at one. If |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3355 BALANCED is true, move over balanced parens, otherwise move into them. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3356 Also, if BALANCED is true, never move out of an enclosing paren. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3357 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3358 LIMIT sets the limit for the movement and defaults to the point limit. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3359 The case when LIMIT is set in the middle of a token, comment or macro |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3360 is handled correctly, i.e. the point won't be left there. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3361 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3362 Return the number of tokens left to move \(positive or negative). If |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3363 BALANCED is true, a move over a balanced paren counts as one. Note |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3364 that if COUNT is 0 and no appropriate token beginning is found, 1 will |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3365 be returned. Thus, a return value of 0 guarantees that point is at |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3366 the requested position and a return value less \(without signs) than |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3367 COUNT guarantees that point is at the beginning of some token. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3368 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3369 Note that this function might do hidden buffer changes. See the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3370 comment at the start of cc-engine.el for more info." |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3371 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3372 (or count (setq count 1)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3373 (if (< count 0) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3374 (- (c-backward-token-2 (- count) balanced limit)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3375 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3376 (let ((jump-syntax (if balanced |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3377 c-jump-syntax-balanced |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3378 c-jump-syntax-unbalanced)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3379 (last (point)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3380 (prev (point))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3381 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3382 (if (zerop count) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3383 ;; If count is zero we should jump if in the middle of a token. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3384 (c-end-of-current-token)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3385 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3386 (save-restriction |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3387 (if limit (narrow-to-region (point-min) limit)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3388 (if (/= (point) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3389 (progn (c-forward-syntactic-ws) (point))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3390 ;; Skip whitespace. Count this as a move if we did in |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3391 ;; fact move. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3392 (setq count (max (1- count) 0))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3393 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3394 (if (eobp) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3395 ;; Moved out of bounds. Make sure the returned count isn't zero. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3396 (progn |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3397 (if (zerop count) (setq count 1)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3398 (goto-char last)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3399 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3400 ;; Use `condition-case' to avoid having the limit tests |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3401 ;; inside the loop. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3402 (condition-case nil |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3403 (while (and |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3404 (> count 0) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3405 (progn |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3406 (setq last (point)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3407 (cond ((looking-at jump-syntax) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3408 (goto-char (scan-sexps (point) 1)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3409 t) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3410 ((looking-at c-nonsymbol-token-regexp) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3411 (goto-char (match-end 0)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3412 t) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3413 ;; `c-nonsymbol-token-regexp' above should always |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3414 ;; match if there are correct tokens. Try to |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3415 ;; widen to see if the limit was set in the |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3416 ;; middle of one, else fall back to treating |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3417 ;; the offending thing as a one character token. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3418 ((and limit |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3419 (save-restriction |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3420 (widen) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3421 (looking-at c-nonsymbol-token-regexp))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3422 nil) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3423 (t |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3424 (forward-char) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3425 t)))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3426 (c-forward-syntactic-ws) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3427 (setq prev last |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3428 count (1- count))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3429 (error (goto-char last))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3430 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3431 (when (eobp) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3432 (goto-char prev) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3433 (setq count (1+ count))))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3434 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3435 count))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3436 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3437 (defun c-backward-token-2 (&optional count balanced limit) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3438 "Move backward by tokens. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3439 See `c-forward-token-2' for details." |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3440 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3441 (or count (setq count 1)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3442 (if (< count 0) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3443 (- (c-forward-token-2 (- count) balanced limit)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3444 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3445 (or limit (setq limit (point-min))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3446 (let ((jump-syntax (if balanced |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3447 c-jump-syntax-balanced |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3448 c-jump-syntax-unbalanced)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3449 (last (point))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3450 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3451 (if (zerop count) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3452 ;; The count is zero so try to skip to the beginning of the |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3453 ;; current token. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3454 (if (> (point) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3455 (progn (c-beginning-of-current-token) (point))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3456 (if (< (point) limit) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3457 ;; The limit is inside the same token, so return 1. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3458 (setq count 1)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3459 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3460 ;; We're not in the middle of a token. If there's |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3461 ;; whitespace after the point then we must move backward, |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3462 ;; so set count to 1 in that case. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3463 (and (looking-at c-syntactic-ws-start) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3464 ;; If we're looking at a '#' that might start a cpp |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3465 ;; directive then we have to do a more elaborate check. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3466 (or (/= (char-after) ?#) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3467 (not c-opt-cpp-prefix) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3468 (save-excursion |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3469 (and (= (point) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3470 (progn (beginning-of-line) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3471 (looking-at "[ \t]*") |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3472 (match-end 0))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3473 (or (bobp) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3474 (progn (backward-char) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3475 (not (eq (char-before) ?\\))))))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3476 (setq count 1)))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3477 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3478 ;; Use `condition-case' to avoid having to check for buffer |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3479 ;; limits in `backward-char', `scan-sexps' and `goto-char' below. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3480 (condition-case nil |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3481 (while (and |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3482 (> count 0) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3483 (progn |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3484 (c-backward-syntactic-ws) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3485 (backward-char) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3486 (if (looking-at jump-syntax) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3487 (goto-char (scan-sexps (1+ (point)) -1)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3488 ;; This can be very inefficient if there's a long |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3489 ;; sequence of operator tokens without any separation. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3490 ;; That doesn't happen in practice, anyway. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3491 (c-beginning-of-current-token)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3492 (>= (point) limit))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3493 (setq last (point) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3494 count (1- count))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3495 (error (goto-char last))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3496 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3497 (if (< (point) limit) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3498 (goto-char last)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3499 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3500 count))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3501 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3502 (defun c-forward-token-1 (&optional count balanced limit) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3503 "Like `c-forward-token-2' but doesn't treat multicharacter operator |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3504 tokens like \"==\" as single tokens, i.e. all sequences of symbol |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3505 characters are jumped over character by character. This function is |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3506 for compatibility only; it's only a wrapper over `c-forward-token-2'." |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3507 (let ((c-nonsymbol-token-regexp "\\s.\\|\\s\(\\|\\s\)")) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3508 (c-forward-token-2 count balanced limit))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3509 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3510 (defun c-backward-token-1 (&optional count balanced limit) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3511 "Like `c-backward-token-2' but doesn't treat multicharacter operator |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3512 tokens like \"==\" as single tokens, i.e. all sequences of symbol |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3513 characters are jumped over character by character. This function is |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3514 for compatibility only; it's only a wrapper over `c-backward-token-2'." |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3515 (let ((c-nonsymbol-token-regexp "\\s.\\|\\s\(\\|\\s\)")) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3516 (c-backward-token-2 count balanced limit))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3517 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3518 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3519 ;; Tools for doing searches restricted to syntactically relevant text. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3520 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3521 (defun c-syntactic-re-search-forward (regexp &optional bound noerror |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3522 paren-level not-inside-token |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3523 lookbehind-submatch) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3524 "Like `re-search-forward', but only report matches that are found |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3525 in syntactically significant text. I.e. matches in comments, macros |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3526 or string literals are ignored. The start point is assumed to be |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3527 outside any comment, macro or string literal, or else the content of |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3528 that region is taken as syntactically significant text. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3529 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3530 If PAREN-LEVEL is non-nil, an additional restriction is added to |
56646
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3531 ignore matches in nested paren sexps. The search will also not go |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3532 outside the current list sexp, which has the effect that if the point |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3533 should be moved to BOUND when no match is found \(i.e. NOERROR is |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3534 neither nil nor t), then it will be at the closing paren if the end of |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3535 the current list sexp is encountered first. |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3536 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3537 If NOT-INSIDE-TOKEN is non-nil, matches in the middle of tokens are |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3538 ignored. Things like multicharacter operators and special symbols |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3539 \(e.g. \"`()\" in Pike) are handled but currently not floating point |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3540 constants. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3541 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3542 If LOOKBEHIND-SUBMATCH is non-nil, it's taken as a number of a |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3543 subexpression in REGEXP. The end of that submatch is used as the |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3544 position to check for syntactic significance. If LOOKBEHIND-SUBMATCH |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3545 isn't used or if that subexpression didn't match then the start |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3546 position of the whole match is used instead. The \"look behind\" |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3547 subexpression is never tested before the starting position, so it |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3548 might be a good idea to include \\=\\= as a match alternative in it. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3549 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3550 Optimization note: Matches might be missed if the \"look behind\" |
56646
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3551 subexpression can match the end of nonwhite syntactic whitespace, |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3552 i.e. the end of comments or cpp directives. This since the function |
56646
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3553 skips over such things before resuming the search. It's on the other |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3554 hand not safe to assume that the \"look behind\" subexpression never |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3555 matches syntactic whitespace. |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3556 |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3557 Bug: Unbalanced parens inside cpp directives are currently not handled |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3558 correctly \(i.e. they don't get ignored as they should) when |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3559 PAREN-LEVEL is set. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3560 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3561 Note that this function might do hidden buffer changes. See the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3562 comment at the start of cc-engine.el for more info." |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3563 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3564 (or bound (setq bound (point-max))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3565 (if paren-level (setq paren-level -1)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3566 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3567 ;;(message "c-syntactic-re-search-forward %s %s %S" (point) bound regexp) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3568 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3569 (let ((start (point)) |
56646
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3570 tmp |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3571 ;; Start position for the last search. |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3572 search-pos |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3573 ;; The `parse-partial-sexp' state between the start position |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3574 ;; and the point. |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3575 state |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3576 ;; The current position after the last state update. The next |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3577 ;; `parse-partial-sexp' continues from here. |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3578 (state-pos (point)) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3579 ;; The position at which to check the state and the state |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3580 ;; there. This is separate from `state-pos' since we might |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3581 ;; need to back up before doing the next search round. |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3582 check-pos check-state |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3583 ;; Last position known to end a token. |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3584 (last-token-end-pos (point-min)) |
56646
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3585 ;; Set when a valid match is found. |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3586 found) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3587 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3588 (condition-case err |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3589 (while |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3590 (and |
56646
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3591 (progn |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3592 (setq search-pos (point)) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3593 (re-search-forward regexp bound noerror)) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3594 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3595 (progn |
56646
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3596 (setq state (parse-partial-sexp |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3597 state-pos (match-beginning 0) paren-level nil state) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3598 state-pos (point)) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3599 (if (setq check-pos (and lookbehind-submatch |
56646
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3600 (or (not paren-level) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3601 (>= (car state) 0)) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3602 (match-end lookbehind-submatch))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3603 (setq check-state (parse-partial-sexp |
56646
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3604 state-pos check-pos paren-level nil state)) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3605 (setq check-pos state-pos |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3606 check-state state)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3607 |
56646
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3608 ;; NOTE: If we got a look behind subexpression and get |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3609 ;; an insignificant match in something that isn't |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3610 ;; syntactic whitespace (i.e. strings or in nested |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3611 ;; parentheses), then we can never skip more than a |
56646
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3612 ;; single character from the match start position |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3613 ;; (i.e. `state-pos' here) before continuing the |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3614 ;; search. That since the look behind subexpression |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3615 ;; might match the end of the insignificant region in |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3616 ;; the next search. |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3617 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3618 (cond |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3619 ((elt check-state 7) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3620 ;; Match inside a line comment. Skip to eol. Use |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3621 ;; `re-search-forward' instead of `skip-chars-forward' to get |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3622 ;; the right bound behavior. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3623 (re-search-forward "[\n\r]" bound noerror)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3624 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3625 ((elt check-state 4) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3626 ;; Match inside a block comment. Skip to the '*/'. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3627 (search-forward "*/" bound noerror)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3628 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3629 ((and (not (elt check-state 5)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3630 (eq (char-before check-pos) ?/) |
56646
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3631 (not (c-get-char-property (1- check-pos) 'syntax-table)) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3632 (memq (char-after check-pos) '(?/ ?*))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3633 ;; Match in the middle of the opener of a block or line |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3634 ;; comment. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3635 (if (= (char-after check-pos) ?/) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3636 (re-search-forward "[\n\r]" bound noerror) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3637 (search-forward "*/" bound noerror))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3638 |
56646
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3639 ;; The last `parse-partial-sexp' above might have |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3640 ;; stopped short of the real check position if the end |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3641 ;; of the current sexp was encountered in paren-level |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3642 ;; mode. The checks above are always false in that |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3643 ;; case, and since they can do better skipping in |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3644 ;; lookbehind-submatch mode, we do them before |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3645 ;; checking the paren level. |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3646 |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3647 ((and paren-level |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3648 (/= (setq tmp (car check-state)) 0)) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3649 ;; Check the paren level first since we're short of the |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3650 ;; syntactic checking position if the end of the |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3651 ;; current sexp was encountered by `parse-partial-sexp'. |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3652 (if (> tmp 0) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3653 |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3654 ;; Inside a nested paren sexp. |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3655 (if lookbehind-submatch |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3656 ;; See the NOTE above. |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3657 (progn (goto-char state-pos) t) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3658 ;; Skip out of the paren quickly. |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3659 (setq state (parse-partial-sexp state-pos bound 0 nil state) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3660 state-pos (point))) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3661 |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3662 ;; Have exited the current paren sexp. |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3663 (if noerror |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3664 (progn |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3665 ;; The last `parse-partial-sexp' call above |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3666 ;; has left us just after the closing paren |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3667 ;; in this case, so we can modify the bound |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3668 ;; to leave the point at the right position |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3669 ;; upon return. |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3670 (setq bound (1- (point))) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3671 nil) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3672 (signal 'search-failed (list regexp))))) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3673 |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3674 ((setq tmp (elt check-state 3)) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3675 ;; Match inside a string. |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3676 (if (or lookbehind-submatch |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3677 (not (integerp tmp))) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3678 ;; See the NOTE above. |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3679 (progn (goto-char state-pos) t) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3680 ;; Skip to the end of the string before continuing. |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3681 (let ((ender (make-string 1 tmp)) (continue t)) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3682 (while (if (search-forward ender bound noerror) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3683 (progn |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3684 (setq state (parse-partial-sexp |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3685 state-pos (point) nil nil state) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3686 state-pos (point)) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3687 (elt state 3)) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3688 (setq continue nil))) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3689 continue))) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3690 |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3691 ((save-excursion |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3692 (save-match-data |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3693 (c-beginning-of-macro start))) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3694 ;; Match inside a macro. Skip to the end of it. |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3695 (c-end-of-macro) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3696 (cond ((<= (point) bound) t) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3697 (noerror nil) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3698 (t (signal 'search-failed (list regexp))))) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3699 |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3700 ((and not-inside-token |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3701 (or (< check-pos last-token-end-pos) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3702 (< check-pos |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3703 (save-excursion |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3704 (goto-char check-pos) |
53073
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
3705 (save-match-data |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
3706 (c-end-of-current-token last-token-end-pos)) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3707 (setq last-token-end-pos (point)))))) |
56646
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3708 ;; Inside a token. |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3709 (if lookbehind-submatch |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3710 ;; See the NOTE above. |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3711 (goto-char state-pos) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3712 (goto-char (min last-token-end-pos bound)))) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3713 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3714 (t |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3715 ;; A real match. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3716 (setq found t) |
56646
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3717 nil))) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3718 |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3719 ;; Should loop to search again, but take care to avoid |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3720 ;; looping on the same spot. |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3721 (or (/= search-pos (point)) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3722 (if (= (point) bound) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3723 (if noerror |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3724 nil |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3725 (signal 'search-failed (list regexp))) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3726 (forward-char) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3727 t)))) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3728 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3729 (error |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3730 (goto-char start) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3731 (signal (car err) (cdr err)))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3732 |
56646
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3733 ;;(message "c-syntactic-re-search-forward done %s" (or (match-end 0) (point))) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3734 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3735 (if found |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3736 (progn |
56646
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3737 (goto-char (match-end 0)) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3738 (match-end 0)) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3739 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3740 ;; Search failed. Set point as appropriate. |
56646
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3741 (if (eq noerror t) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3742 (goto-char start) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
3743 (goto-char bound)) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3744 nil))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3745 |
106533
b913cb685ed4
(safe-pos-list): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents:
106522
diff
changeset
|
3746 (defvar safe-pos-list) ; bound in c-syntactic-skip-backward |
b913cb685ed4
(safe-pos-list): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents:
106522
diff
changeset
|
3747 |
106522
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3748 (defsubst c-ssb-lit-begin () |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3749 ;; Return the start of the literal point is in, or nil. |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3750 ;; We read and write the variables `safe-pos', `safe-pos-list', `state' |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3751 ;; bound in the caller. |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3752 |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3753 ;; Use `parse-partial-sexp' from a safe position down to the point to check |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3754 ;; if it's outside comments and strings. |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3755 (save-excursion |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3756 (let ((pos (point)) safe-pos state pps-end-pos) |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3757 ;; Pick a safe position as close to the point as possible. |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3758 ;; |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3759 ;; FIXME: Consult `syntax-ppss' here if our cache doesn't give a good |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3760 ;; position. |
106533
b913cb685ed4
(safe-pos-list): Define for compiler.
Glenn Morris <rgm@gnu.org>
parents:
106522
diff
changeset
|
3761 |
106522
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3762 (while (and safe-pos-list |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3763 (> (car safe-pos-list) (point))) |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3764 (setq safe-pos-list (cdr safe-pos-list))) |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3765 (unless (setq safe-pos (car-safe safe-pos-list)) |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3766 (setq safe-pos (max (or (c-safe-position |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3767 (point) (or c-state-cache |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3768 (c-parse-state))) |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3769 0) |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3770 (point-min)) |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3771 safe-pos-list (list safe-pos))) |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3772 |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3773 ;; Cache positions along the way to use if we have to back up more. We |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3774 ;; cache every closing paren on the same level. If the paren cache is |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3775 ;; relevant in this region then we're typically already on the same |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3776 ;; level as the target position. Note that we might cache positions |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3777 ;; after opening parens in case safe-pos is in a nested list. That's |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3778 ;; both uncommon and harmless. |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3779 (while (progn |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3780 (setq state (parse-partial-sexp |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3781 safe-pos pos 0)) |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3782 (< (point) pos)) |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3783 (setq safe-pos (point) |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3784 safe-pos-list (cons safe-pos safe-pos-list))) |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3785 |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3786 ;; If the state contains the start of the containing sexp we cache that |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3787 ;; position too, so that parse-partial-sexp in the next run has a bigger |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3788 ;; chance of starting at the same level as the target position and thus |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3789 ;; will get more good safe positions into the list. |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3790 (if (elt state 1) |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3791 (setq safe-pos (1+ (elt state 1)) |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3792 safe-pos-list (cons safe-pos safe-pos-list))) |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3793 |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3794 (if (or (elt state 3) (elt state 4)) |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3795 ;; Inside string or comment. Continue search at the |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3796 ;; beginning of it. |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3797 (elt state 8))))) |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3798 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3799 (defun c-syntactic-skip-backward (skip-chars &optional limit paren-level) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3800 "Like `skip-chars-backward' but only look at syntactically relevant chars, |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3801 i.e. don't stop at positions inside syntactic whitespace or string |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3802 literals. Preprocessor directives are also ignored, with the exception |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3803 of the one that the point starts within, if any. If LIMIT is given, |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3804 it's assumed to be at a syntactically relevant position. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3805 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3806 If PAREN-LEVEL is non-nil, the function won't stop in nested paren |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3807 sexps, and the search will also not go outside the current paren sexp. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3808 However, if LIMIT or the buffer limit is reached inside a nested paren |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3809 then the point will be left at the limit. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3810 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3811 Non-nil is returned if the point moved, nil otherwise. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3812 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3813 Note that this function might do hidden buffer changes. See the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3814 comment at the start of cc-engine.el for more info." |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3815 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3816 (let ((start (point)) |
106522
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3817 state-2 |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3818 ;; A list of syntactically relevant positions in descending |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3819 ;; order. It's used to avoid scanning repeatedly over |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3820 ;; potentially large regions with `parse-partial-sexp' to verify |
106522
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3821 ;; each position. Used in `c-ssb-lit-begin' |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3822 safe-pos-list |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3823 ;; The result from `c-beginning-of-macro' at the start position or the |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3824 ;; start position itself if it isn't within a macro. Evaluated on |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3825 ;; demand. |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3826 start-macro-beg |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3827 ;; The earliest position after the current one with the same paren |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3828 ;; level. Used only when `paren-level' is set. |
106522
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3829 lit-beg |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3830 (paren-level-pos (point))) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3831 |
106522
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3832 (while |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3833 (progn |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3834 ;; The next loop "tries" to find the end point each time round, |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3835 ;; loops when it hasn't succeeded. |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3836 (while |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3837 (and |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3838 (< (skip-chars-backward skip-chars limit) 0) |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3839 |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3840 (let ((pos (point)) state-2 pps-end-pos) |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3841 |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3842 (cond |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3843 ;; Don't stop inside a literal |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3844 ((setq lit-beg (c-ssb-lit-begin)) |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3845 (goto-char lit-beg) |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3846 t) |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3847 |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3848 ((and paren-level |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3849 (save-excursion |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3850 (setq state-2 (parse-partial-sexp |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3851 pos paren-level-pos -1) |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3852 pps-end-pos (point)) |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3853 (/= (car state-2) 0))) |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3854 ;; Not at the right level. |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3855 |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3856 (if (and (< (car state-2) 0) |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3857 ;; We stop above if we go out of a paren. |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3858 ;; Now check whether it precedes or is |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3859 ;; nested in the starting sexp. |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3860 (save-excursion |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3861 (setq state-2 |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3862 (parse-partial-sexp |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3863 pps-end-pos paren-level-pos |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3864 nil nil state-2)) |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3865 (< (car state-2) 0))) |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3866 |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3867 ;; We've stopped short of the starting position |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3868 ;; so the hit was inside a nested list. Go up |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3869 ;; until we are at the right level. |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3870 (condition-case nil |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3871 (progn |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3872 (goto-char (scan-lists pos -1 |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3873 (- (car state-2)))) |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3874 (setq paren-level-pos (point)) |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3875 (if (and limit (>= limit paren-level-pos)) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3876 (progn |
106522
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3877 (goto-char limit) |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3878 nil) |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3879 t)) |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3880 (error |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3881 (goto-char (or limit (point-min))) |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3882 nil)) |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3883 |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3884 ;; The hit was outside the list at the start |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3885 ;; position. Go to the start of the list and exit. |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3886 (goto-char (1+ (elt state-2 1))) |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3887 nil)) |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3888 |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3889 ((c-beginning-of-macro limit) |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3890 ;; Inside a macro. |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3891 (if (< (point) |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3892 (or start-macro-beg |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3893 (setq start-macro-beg |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3894 (save-excursion |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3895 (goto-char start) |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3896 (c-beginning-of-macro limit) |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3897 (point))))) |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3898 t |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3899 |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3900 ;; It's inside the same macro we started in so it's |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3901 ;; a relevant match. |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3902 (goto-char pos) |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3903 nil)))))) |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3904 |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3905 (> (point) |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3906 (progn |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3907 ;; Skip syntactic ws afterwards so that we don't stop at the |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3908 ;; end of a comment if `skip-chars' is something like "^/". |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3909 (c-backward-syntactic-ws) |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
3910 (point))))) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
3911 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3912 ;; We might want to extend this with more useful return values in |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3913 ;; the future. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3914 (/= (point) start))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3915 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3916 ;; The following is an alternative implementation of |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3917 ;; `c-syntactic-skip-backward' that uses backward movement to keep |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3918 ;; track of the syntactic context. It turned out to be generally |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3919 ;; slower than the one above which uses forward checks from earlier |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3920 ;; safe positions. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3921 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3922 ;;(defconst c-ssb-stop-re |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3923 ;; ;; The regexp matching chars `c-syntactic-skip-backward' needs to |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3924 ;; ;; stop at to avoid going into comments and literals. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3925 ;; (concat |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3926 ;; ;; Match comment end syntax and string literal syntax. Also match |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3927 ;; ;; '/' for block comment endings (not covered by comment end |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3928 ;; ;; syntax). |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3929 ;; "\\s>\\|/\\|\\s\"" |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3930 ;; (if (memq 'gen-string-delim c-emacs-features) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3931 ;; "\\|\\s|" |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3932 ;; "") |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3933 ;; (if (memq 'gen-comment-delim c-emacs-features) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3934 ;; "\\|\\s!" |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3935 ;; ""))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3936 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3937 ;;(defconst c-ssb-stop-paren-re |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3938 ;; ;; Like `c-ssb-stop-re' but also stops at paren chars. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3939 ;; (concat c-ssb-stop-re "\\|\\s(\\|\\s)")) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3940 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3941 ;;(defconst c-ssb-sexp-end-re |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3942 ;; ;; Regexp matching the ending syntax of a complex sexp. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3943 ;; (concat c-string-limit-regexp "\\|\\s)")) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3944 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3945 ;;(defun c-syntactic-skip-backward (skip-chars &optional limit paren-level) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3946 ;; "Like `skip-chars-backward' but only look at syntactically relevant chars, |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3947 ;;i.e. don't stop at positions inside syntactic whitespace or string |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3948 ;;literals. Preprocessor directives are also ignored. However, if the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3949 ;;point is within a comment, string literal or preprocessor directory to |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3950 ;;begin with, its contents is treated as syntactically relevant chars. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3951 ;;If LIMIT is given, it limits the backward search and the point will be |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3952 ;;left there if no earlier position is found. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3953 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3954 ;;If PAREN-LEVEL is non-nil, the function won't stop in nested paren |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3955 ;;sexps, and the search will also not go outside the current paren sexp. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3956 ;;However, if LIMIT or the buffer limit is reached inside a nested paren |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3957 ;;then the point will be left at the limit. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3958 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3959 ;;Non-nil is returned if the point moved, nil otherwise. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3960 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3961 ;;Note that this function might do hidden buffer changes. See the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3962 ;;comment at the start of cc-engine.el for more info." |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3963 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3964 ;; (save-restriction |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3965 ;; (when limit |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3966 ;; (narrow-to-region limit (point-max))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3967 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3968 ;; (let ((start (point))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3969 ;; (catch 'done |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3970 ;; (while (let ((last-pos (point)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3971 ;; (stop-pos (progn |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3972 ;; (skip-chars-backward skip-chars) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3973 ;; (point)))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3974 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3975 ;; ;; Skip back over the same region as |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3976 ;; ;; `skip-chars-backward' above, but keep to |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3977 ;; ;; syntactically relevant positions. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3978 ;; (goto-char last-pos) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3979 ;; (while (and |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3980 ;; ;; `re-search-backward' with a single char regexp |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3981 ;; ;; should be fast. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3982 ;; (re-search-backward |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3983 ;; (if paren-level c-ssb-stop-paren-re c-ssb-stop-re) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3984 ;; stop-pos 'move) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3985 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3986 ;; (progn |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3987 ;; (cond |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3988 ;; ((looking-at "\\s(") |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3989 ;; ;; `paren-level' is set and we've found the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3990 ;; ;; start of the containing paren. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3991 ;; (forward-char) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3992 ;; (throw 'done t)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3993 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3994 ;; ((looking-at c-ssb-sexp-end-re) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3995 ;; ;; We're at the end of a string literal or paren |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3996 ;; ;; sexp (if `paren-level' is set). |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3997 ;; (forward-char) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3998 ;; (condition-case nil |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
3999 ;; (c-backward-sexp) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4000 ;; (error |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4001 ;; (goto-char limit) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4002 ;; (throw 'done t)))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4003 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4004 ;; (t |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4005 ;; (forward-char) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4006 ;; ;; At the end of some syntactic ws or possibly |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4007 ;; ;; after a plain '/' operator. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4008 ;; (let ((pos (point))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4009 ;; (c-backward-syntactic-ws) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4010 ;; (if (= pos (point)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4011 ;; ;; Was a plain '/' operator. Go past it. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4012 ;; (backward-char))))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4013 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4014 ;; (> (point) stop-pos)))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4015 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4016 ;; ;; Now the point is either at `stop-pos' or at some |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4017 ;; ;; position further back if `stop-pos' was at a |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4018 ;; ;; syntactically irrelevant place. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4019 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4020 ;; ;; Skip additional syntactic ws so that we don't stop |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4021 ;; ;; at the end of a comment if `skip-chars' is |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4022 ;; ;; something like "^/". |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4023 ;; (c-backward-syntactic-ws) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4024 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4025 ;; (< (point) stop-pos)))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4026 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4027 ;; ;; We might want to extend this with more useful return values |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4028 ;; ;; in the future. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4029 ;; (/= (point) start)))) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4030 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4031 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4032 ;; Tools for handling comments and string literals. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4033 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4034 (defun c-slow-in-literal (&optional lim detect-cpp) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4035 "Return the type of literal point is in, if any. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4036 The return value is `c' if in a C-style comment, `c++' if in a C++ |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4037 style comment, `string' if in a string literal, `pound' if DETECT-CPP |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4038 is non-nil and in a preprocessor line, or nil if somewhere else. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4039 Optional LIM is used as the backward limit of the search. If omitted, |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4040 or nil, `c-beginning-of-defun' is used. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4041 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4042 The last point calculated is cached if the cache is enabled, i.e. if |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4043 `c-in-literal-cache' is bound to a two element vector. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4044 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4045 Note that this function might do hidden buffer changes. See the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4046 comment at the start of cc-engine.el for more info." |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4047 |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4048 (if (and (vectorp c-in-literal-cache) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4049 (= (point) (aref c-in-literal-cache 0))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4050 (aref c-in-literal-cache 1) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4051 (let ((rtn (save-excursion |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4052 (let* ((pos (point)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4053 (lim (or lim (progn |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4054 (c-beginning-of-syntax) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4055 (point)))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4056 (state (parse-partial-sexp lim pos))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4057 (cond |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4058 ((elt state 3) 'string) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4059 ((elt state 4) (if (elt state 7) 'c++ 'c)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4060 ((and detect-cpp (c-beginning-of-macro lim)) 'pound) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4061 (t nil)))))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4062 ;; cache this result if the cache is enabled |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4063 (if (not c-in-literal-cache) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4064 (setq c-in-literal-cache (vector (point) rtn))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4065 rtn))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4066 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4067 ;; XEmacs has a built-in function that should make this much quicker. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4068 ;; I don't think we even need the cache, which makes our lives more |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4069 ;; complicated anyway. In this case, lim is only used to detect |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4070 ;; cpp directives. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4071 ;; |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4072 ;; Note that there is a bug in Xemacs's buffer-syntactic-context when used in |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4073 ;; conjunction with syntax-table-properties. The bug is present in, e.g., |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4074 ;; Xemacs 21.4.4. It manifested itself thus: |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4075 ;; |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4076 ;; Starting with an empty AWK Mode buffer, type |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4077 ;; /regexp/ {<C-j> |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4078 ;; Point gets wrongly left at column 0, rather than being indented to tab-width. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4079 ;; |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4080 ;; AWK Mode is designed such that when the first / is typed, it gets the |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4081 ;; syntax-table property "string fence". When the second / is typed, BOTH /s |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4082 ;; are given the s-t property "string". However, buffer-syntactic-context |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4083 ;; fails to take account of the change of the s-t property on the opening / to |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4084 ;; "string", and reports that the { is within a string started by the second /. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4085 ;; |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4086 ;; The workaround for this is for the AWK Mode initialisation to switch the |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4087 ;; defalias for c-in-literal to c-slow-in-literal. This will slow down other |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4088 ;; cc-modes in Xemacs whenever an awk-buffer has been initialised. |
79408
a29ca195b71e
(c-crosses-statement-barrier-p): Fix typo in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents:
78656
diff
changeset
|
4089 ;; |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4090 ;; (Alan Mackenzie, 2003/4/30). |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4091 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4092 (defun c-fast-in-literal (&optional lim detect-cpp) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4093 ;; This function might do hidden buffer changes. |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4094 (let ((context (buffer-syntactic-context))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4095 (cond |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4096 ((eq context 'string) 'string) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4097 ((eq context 'comment) 'c++) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4098 ((eq context 'block-comment) 'c) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4099 ((and detect-cpp (save-excursion (c-beginning-of-macro lim))) 'pound)))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4100 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4101 (defalias 'c-in-literal |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4102 (if (fboundp 'buffer-syntactic-context) |
51829
d508ffa43505
2003-07-08 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents:
51714
diff
changeset
|
4103 'c-fast-in-literal ; XEmacs |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4104 'c-slow-in-literal)) ; GNU Emacs |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4105 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4106 ;; The defalias above isn't enough to shut up the byte compiler. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4107 (cc-bytecomp-defun c-in-literal) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4108 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4109 (defun c-literal-limits (&optional lim near not-in-delimiter) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4110 "Return a cons of the beginning and end positions of the comment or |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4111 string surrounding point (including both delimiters), or nil if point |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4112 isn't in one. If LIM is non-nil, it's used as the \"safe\" position |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4113 to start parsing from. If NEAR is non-nil, then the limits of any |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4114 literal next to point is returned. \"Next to\" means there's only |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4115 spaces and tabs between point and the literal. The search for such a |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4116 literal is done first in forward direction. If NOT-IN-DELIMITER is |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4117 non-nil, the case when point is inside a starting delimiter won't be |
98693
69a04789c5f0
Amend several doc strings and comments.
Alan Mackenzie <acm@muc.de>
parents:
96145
diff
changeset
|
4118 recognized. This only has effect for comments which have starting |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4119 delimiters with more than one character. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4120 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4121 Note that this function might do hidden buffer changes. See the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4122 comment at the start of cc-engine.el for more info." |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4123 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4124 (save-excursion |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4125 (let* ((pos (point)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4126 (lim (or lim (progn |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4127 (c-beginning-of-syntax) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4128 (point)))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4129 (state (parse-partial-sexp lim pos))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4130 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4131 (cond ((elt state 3) ; String. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4132 (goto-char (elt state 8)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4133 (cons (point) (or (c-safe (c-forward-sexp 1) (point)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4134 (point-max)))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4135 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4136 ((elt state 4) ; Comment. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4137 (goto-char (elt state 8)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4138 (cons (point) (progn (c-forward-single-comment) (point)))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4139 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4140 ((and (not not-in-delimiter) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4141 (not (elt state 5)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4142 (eq (char-before) ?/) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4143 (looking-at "[/*]")) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4144 ;; We're standing in a comment starter. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4145 (backward-char 1) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4146 (cons (point) (progn (c-forward-single-comment) (point)))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4147 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4148 (near |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4149 (goto-char pos) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4150 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4151 ;; Search forward for a literal. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4152 (skip-chars-forward " \t") |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4153 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4154 (cond |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4155 ((looking-at c-string-limit-regexp) ; String. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4156 (cons (point) (or (c-safe (c-forward-sexp 1) (point)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4157 (point-max)))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4158 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4159 ((looking-at c-comment-start-regexp) ; Line or block comment. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4160 (cons (point) (progn (c-forward-single-comment) (point)))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4161 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4162 (t |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4163 ;; Search backward. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4164 (skip-chars-backward " \t") |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4165 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4166 (let ((end (point)) beg) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4167 (cond |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4168 ((save-excursion |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4169 (< (skip-syntax-backward c-string-syntax) 0)) ; String. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4170 (setq beg (c-safe (c-backward-sexp 1) (point)))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4171 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4172 ((and (c-safe (forward-char -2) t) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4173 (looking-at "*/")) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4174 ;; Block comment. Due to the nature of line |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4175 ;; comments, they will always be covered by the |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4176 ;; normal case above. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4177 (goto-char end) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4178 (c-backward-single-comment) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4179 ;; If LIM is bogus, beg will be bogus. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4180 (setq beg (point)))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4181 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4182 (if beg (cons beg end)))))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4183 )))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4184 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4185 ;; In case external callers use this; it did have a docstring. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4186 (defalias 'c-literal-limits-fast 'c-literal-limits) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4187 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4188 (defun c-collect-line-comments (range) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4189 "If the argument is a cons of two buffer positions (such as returned by |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4190 `c-literal-limits'), and that range contains a C++ style line comment, |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4191 then an extended range is returned that contains all adjacent line |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4192 comments (i.e. all comments that starts in the same column with no |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4193 empty lines or non-whitespace characters between them). Otherwise the |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4194 argument is returned. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4195 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4196 Note that this function might do hidden buffer changes. See the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4197 comment at the start of cc-engine.el for more info." |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4198 |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4199 (save-excursion |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4200 (condition-case nil |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4201 (if (and (consp range) (progn |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4202 (goto-char (car range)) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4203 (looking-at c-line-comment-starter))) |
79408
a29ca195b71e
(c-crosses-statement-barrier-p): Fix typo in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents:
78656
diff
changeset
|
4204 (let ((col (current-column)) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4205 (beg (point)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4206 (bopl (c-point 'bopl)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4207 (end (cdr range))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4208 ;; Got to take care in the backward direction to handle |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4209 ;; comments which are preceded by code. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4210 (while (and (c-backward-single-comment) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4211 (>= (point) bopl) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4212 (looking-at c-line-comment-starter) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4213 (= col (current-column))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4214 (setq beg (point) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4215 bopl (c-point 'bopl))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4216 (goto-char end) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4217 (while (and (progn (skip-chars-forward " \t") |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4218 (looking-at c-line-comment-starter)) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4219 (= col (current-column)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4220 (prog1 (zerop (forward-line 1)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4221 (setq end (point))))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4222 (cons beg end)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4223 range) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4224 (error range)))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4225 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4226 (defun c-literal-type (range) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4227 "Convenience function that given the result of `c-literal-limits', |
98693
69a04789c5f0
Amend several doc strings and comments.
Alan Mackenzie <acm@muc.de>
parents:
96145
diff
changeset
|
4228 returns nil or the type of literal that the range surrounds, one |
69a04789c5f0
Amend several doc strings and comments.
Alan Mackenzie <acm@muc.de>
parents:
96145
diff
changeset
|
4229 of the symbols 'c, 'c++ or 'string. It's much faster than using |
69a04789c5f0
Amend several doc strings and comments.
Alan Mackenzie <acm@muc.de>
parents:
96145
diff
changeset
|
4230 `c-in-literal' and is intended to be used when you need both the |
69a04789c5f0
Amend several doc strings and comments.
Alan Mackenzie <acm@muc.de>
parents:
96145
diff
changeset
|
4231 type of a literal and its limits. |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4232 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4233 Note that this function might do hidden buffer changes. See the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4234 comment at the start of cc-engine.el for more info." |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4235 |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4236 (if (consp range) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4237 (save-excursion |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4238 (goto-char (car range)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4239 (cond ((looking-at c-string-limit-regexp) 'string) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4240 ((or (looking-at "//") ; c++ line comment |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4241 (and (looking-at "\\s<") ; comment starter |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4242 (looking-at "#"))) ; awk comment. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4243 'c++) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4244 (t 'c))) ; Assuming the range is valid. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4245 range)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4246 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4247 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4248 ;; `c-find-decl-spots' and accompanying stuff. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4249 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4250 ;; Variables used in `c-find-decl-spots' to cache the search done for |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4251 ;; the first declaration in the last call. When that function starts, |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4252 ;; it needs to back up over syntactic whitespace to look at the last |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4253 ;; token before the region being searched. That can sometimes cause |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4254 ;; moves back and forth over a quite large region of comments and |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4255 ;; macros, which would be repeated for each changed character when |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4256 ;; we're called during fontification, since font-lock refontifies the |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4257 ;; current line for each change. Thus it's worthwhile to cache the |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4258 ;; first match. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4259 ;; |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4260 ;; `c-find-decl-syntactic-pos' is a syntactically relevant position in |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4261 ;; the syntactic whitespace less or equal to some start position. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4262 ;; There's no cached value if it's nil. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4263 ;; |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4264 ;; `c-find-decl-match-pos' is the match position if |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4265 ;; `c-find-decl-prefix-search' matched before the syntactic whitespace |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4266 ;; at `c-find-decl-syntactic-pos', or nil if there's no such match. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4267 (defvar c-find-decl-syntactic-pos nil) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4268 (make-variable-buffer-local 'c-find-decl-syntactic-pos) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4269 (defvar c-find-decl-match-pos nil) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4270 (make-variable-buffer-local 'c-find-decl-match-pos) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4271 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4272 (defsubst c-invalidate-find-decl-cache (change-min-pos) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4273 (and c-find-decl-syntactic-pos |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4274 (< change-min-pos c-find-decl-syntactic-pos) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4275 (setq c-find-decl-syntactic-pos nil))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4276 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4277 ; (defface c-debug-decl-spot-face |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4278 ; '((t (:background "Turquoise"))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4279 ; "Debug face to mark the spots where `c-find-decl-spots' stopped.") |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4280 ; (defface c-debug-decl-sws-face |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4281 ; '((t (:background "Khaki"))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4282 ; "Debug face to mark the syntactic whitespace between the declaration |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4283 ; spots and the preceding token end.") |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4284 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4285 (defmacro c-debug-put-decl-spot-faces (match-pos decl-pos) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4286 (when (facep 'c-debug-decl-spot-face) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4287 `(c-save-buffer-state ((match-pos ,match-pos) (decl-pos ,decl-pos)) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4288 (c-debug-add-face (max match-pos (point-min)) decl-pos |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4289 'c-debug-decl-sws-face) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4290 (c-debug-add-face decl-pos (min (1+ decl-pos) (point-max)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4291 'c-debug-decl-spot-face)))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4292 (defmacro c-debug-remove-decl-spot-faces (beg end) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4293 (when (facep 'c-debug-decl-spot-face) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4294 `(c-save-buffer-state () |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4295 (c-debug-remove-face ,beg ,end 'c-debug-decl-spot-face) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4296 (c-debug-remove-face ,beg ,end 'c-debug-decl-sws-face)))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4297 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4298 (defmacro c-find-decl-prefix-search () |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4299 ;; Macro used inside `c-find-decl-spots'. It ought to be a defun, |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4300 ;; but it contains lots of free variables that refer to things |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4301 ;; inside `c-find-decl-spots'. The point is left at `cfd-match-pos' |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4302 ;; if there is a match, otherwise at `cfd-limit'. |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4303 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4304 ;; This macro might do hidden buffer changes. |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4305 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4306 '(progn |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4307 ;; Find the next property match position if we haven't got one already. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4308 (unless cfd-prop-match |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4309 (save-excursion |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4310 (while (progn |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4311 (goto-char (next-single-property-change |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4312 (point) 'c-type nil cfd-limit)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4313 (and (< (point) cfd-limit) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4314 (not (eq (c-get-char-property (1- (point)) 'c-type) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4315 'c-decl-end))))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4316 (setq cfd-prop-match (point)))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4317 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4318 ;; Find the next `c-decl-prefix-or-start-re' match if we haven't |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4319 ;; got one already. |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4320 (unless cfd-re-match |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4321 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4322 (if (> cfd-re-match-end (point)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4323 (goto-char cfd-re-match-end)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4324 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4325 (while (if (setq cfd-re-match-end |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4326 (re-search-forward c-decl-prefix-or-start-re |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4327 cfd-limit 'move)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4328 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4329 ;; Match. Check if it's inside a comment or string literal. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4330 (c-got-face-at |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4331 (if (setq cfd-re-match (match-end 1)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4332 ;; Matched the end of a token preceding a decl spot. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4333 (progn |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4334 (goto-char cfd-re-match) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4335 (1- cfd-re-match)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4336 ;; Matched a token that start a decl spot. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4337 (goto-char (match-beginning 0)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4338 (point)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4339 c-literal-faces) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4340 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4341 ;; No match. Finish up and exit the loop. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4342 (setq cfd-re-match cfd-limit) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4343 nil) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4344 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4345 ;; Skip out of comments and string literals. |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4346 (while (progn |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4347 (goto-char (next-single-property-change |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4348 (point) 'face nil cfd-limit)) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4349 (and (< (point) cfd-limit) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4350 (c-got-face-at (point) c-literal-faces))))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4351 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4352 ;; If we matched at the decl start, we have to back up over the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4353 ;; preceding syntactic ws to set `cfd-match-pos' and to catch |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4354 ;; any decl spots in the syntactic ws. |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4355 (unless cfd-re-match |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4356 (c-backward-syntactic-ws) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4357 (setq cfd-re-match (point)))) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4358 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4359 ;; Choose whichever match is closer to the start. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4360 (if (< cfd-re-match cfd-prop-match) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4361 (setq cfd-match-pos cfd-re-match |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4362 cfd-re-match nil) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4363 (setq cfd-match-pos cfd-prop-match |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4364 cfd-prop-match nil)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4365 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4366 (goto-char cfd-match-pos) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4367 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4368 (when (< cfd-match-pos cfd-limit) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4369 ;; Skip forward past comments only so we don't skip macros. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4370 (c-forward-comments) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4371 ;; Set the position to continue at. We can avoid going over |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4372 ;; the comments skipped above a second time, but it's possible |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4373 ;; that the comment skipping has taken us past `cfd-prop-match' |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4374 ;; since the property might be used inside comments. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4375 (setq cfd-continue-pos (if cfd-prop-match |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4376 (min cfd-prop-match (point)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4377 (point)))))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4378 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4379 (defun c-find-decl-spots (cfd-limit cfd-decl-re cfd-face-checklist cfd-fun) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4380 ;; Call CFD-FUN for each possible spot for a declaration, cast or |
98693
69a04789c5f0
Amend several doc strings and comments.
Alan Mackenzie <acm@muc.de>
parents:
96145
diff
changeset
|
4381 ;; label from the point to CFD-LIMIT. |
69a04789c5f0
Amend several doc strings and comments.
Alan Mackenzie <acm@muc.de>
parents:
96145
diff
changeset
|
4382 ;; |
69a04789c5f0
Amend several doc strings and comments.
Alan Mackenzie <acm@muc.de>
parents:
96145
diff
changeset
|
4383 ;; CFD-FUN is called with point at the start of the spot. It's |
69a04789c5f0
Amend several doc strings and comments.
Alan Mackenzie <acm@muc.de>
parents:
96145
diff
changeset
|
4384 ;; passed two arguments: The first is the end position of the token |
69a04789c5f0
Amend several doc strings and comments.
Alan Mackenzie <acm@muc.de>
parents:
96145
diff
changeset
|
4385 ;; preceding the spot, or 0 for the implicit match at bob. The |
69a04789c5f0
Amend several doc strings and comments.
Alan Mackenzie <acm@muc.de>
parents:
96145
diff
changeset
|
4386 ;; second is a flag that is t when the match is inside a macro. If |
69a04789c5f0
Amend several doc strings and comments.
Alan Mackenzie <acm@muc.de>
parents:
96145
diff
changeset
|
4387 ;; CFD-FUN adds `c-decl-end' properties somewhere below the current |
69a04789c5f0
Amend several doc strings and comments.
Alan Mackenzie <acm@muc.de>
parents:
96145
diff
changeset
|
4388 ;; spot, it should return non-nil to ensure that the next search |
69a04789c5f0
Amend several doc strings and comments.
Alan Mackenzie <acm@muc.de>
parents:
96145
diff
changeset
|
4389 ;; will find them. |
69a04789c5f0
Amend several doc strings and comments.
Alan Mackenzie <acm@muc.de>
parents:
96145
diff
changeset
|
4390 ;; |
69a04789c5f0
Amend several doc strings and comments.
Alan Mackenzie <acm@muc.de>
parents:
96145
diff
changeset
|
4391 ;; Such a spot is: |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4392 ;; o The first token after bob. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4393 ;; o The first token after the end of submatch 1 in |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4394 ;; `c-decl-prefix-or-start-re' when that submatch matches. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4395 ;; o The start of each `c-decl-prefix-or-start-re' match when |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4396 ;; submatch 1 doesn't match. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4397 ;; o The first token after the end of each occurence of the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4398 ;; `c-type' text property with the value `c-decl-end', provided |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4399 ;; `c-type-decl-end-used' is set. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4400 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4401 ;; Only a spot that match CFD-DECL-RE and whose face is in the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4402 ;; CFD-FACE-CHECKLIST list causes CFD-FUN to be called. The face |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4403 ;; check is disabled if CFD-FACE-CHECKLIST is nil. |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4404 ;; |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4405 ;; If the match is inside a macro then the buffer is narrowed to the |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4406 ;; end of it, so that CFD-FUN can investigate the following tokens |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4407 ;; without matching something that begins inside a macro and ends |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4408 ;; outside it. It's to avoid this work that the CFD-DECL-RE and |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4409 ;; CFD-FACE-CHECKLIST checks exist. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4410 ;; |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4411 ;; The spots are visited approximately in order from top to bottom. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4412 ;; It's however the positions where `c-decl-prefix-or-start-re' |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4413 ;; matches and where `c-decl-end' properties are found that are in |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4414 ;; order. Since the spots often are at the following token, they |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4415 ;; might be visited out of order insofar as more spots are reported |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4416 ;; later on within the syntactic whitespace between the match |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4417 ;; positions and their spots. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4418 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4419 ;; It's assumed that comments and strings are fontified in the |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4420 ;; searched range. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4421 ;; |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4422 ;; This is mainly used in fontification, and so has an elaborate |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4423 ;; cache to handle repeated calls from the same start position; see |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4424 ;; the variables above. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4425 ;; |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4426 ;; All variables in this function begin with `cfd-' to avoid name |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4427 ;; collision with the (dynamically bound) variables used in CFD-FUN. |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4428 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4429 ;; This function might do hidden buffer changes. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4430 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4431 (let ((cfd-start-pos (point)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4432 (cfd-buffer-end (point-max)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4433 ;; The end of the token preceding the decl spot last found |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4434 ;; with `c-decl-prefix-or-start-re'. `cfd-limit' if there's |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4435 ;; no match. |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4436 cfd-re-match |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4437 ;; The end position of the last `c-decl-prefix-or-start-re' |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4438 ;; match. If this is greater than `cfd-continue-pos', the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4439 ;; next regexp search is started here instead. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4440 (cfd-re-match-end (point-min)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4441 ;; The end of the last `c-decl-end' found by |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4442 ;; `c-find-decl-prefix-search'. `cfd-limit' if there's no |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4443 ;; match. If searching for the property isn't needed then we |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4444 ;; disable it by setting it to `cfd-limit' directly. |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4445 (cfd-prop-match (unless c-type-decl-end-used cfd-limit)) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4446 ;; The end of the token preceding the decl spot last found by |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4447 ;; `c-find-decl-prefix-search'. 0 for the implicit match at |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4448 ;; bob. `cfd-limit' if there's no match. In other words, |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4449 ;; this is the minimum of `cfd-re-match' and `cfd-prop-match'. |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4450 (cfd-match-pos cfd-limit) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4451 ;; The position to continue searching at. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4452 cfd-continue-pos |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4453 ;; The position of the last "real" token we've stopped at. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4454 ;; This can be greater than `cfd-continue-pos' when we get |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4455 ;; hits inside macros or at `c-decl-end' positions inside |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4456 ;; comments. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4457 (cfd-token-pos 0) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4458 ;; The end position of the last entered macro. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4459 (cfd-macro-end 0)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4460 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4461 ;; Initialize by finding a syntactically relevant start position |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4462 ;; before the point, and do the first `c-decl-prefix-or-start-re' |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4463 ;; search unless we're at bob. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4464 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4465 (let (start-in-literal start-in-macro syntactic-pos) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4466 ;; Must back up a bit since we look for the end of the previous |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4467 ;; statement or declaration, which is earlier than the first |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4468 ;; returned match. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4469 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4470 (cond |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4471 ;; First we need to move to a syntactically relevant position. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4472 ;; Begin by backing out of comment or string literals. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4473 ((and |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4474 (when (c-got-face-at (point) c-literal-faces) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4475 ;; Try to use the faces to back up to the start of the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4476 ;; literal. FIXME: What if the point is on a declaration |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4477 ;; inside a comment? |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4478 (while (and (not (bobp)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4479 (c-got-face-at (1- (point)) c-literal-faces)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4480 (goto-char (previous-single-property-change |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4481 (point) 'face nil (point-min)))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4482 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4483 ;; XEmacs doesn't fontify the quotes surrounding string |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4484 ;; literals. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4485 (and (featurep 'xemacs) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4486 (eq (get-text-property (point) 'face) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4487 'font-lock-string-face) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4488 (not (bobp)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4489 (progn (backward-char) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4490 (not (looking-at c-string-limit-regexp))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4491 (forward-char)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4492 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4493 ;; Don't trust the literal to contain only literal faces |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4494 ;; (the font lock package might not have fontified the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4495 ;; start of it at all, for instance) so check that we have |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4496 ;; arrived at something that looks like a start or else |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4497 ;; resort to `c-literal-limits'. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4498 (unless (looking-at c-literal-start-regexp) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4499 (let ((range (c-literal-limits))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4500 (if range (goto-char (car range))))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4501 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4502 (setq start-in-literal (point))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4503 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4504 ;; The start is in a literal. If the limit is in the same |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4505 ;; one we don't have to find a syntactic position etc. We |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4506 ;; only check that if the limit is at or before bonl to save |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4507 ;; time; it covers the by far most common case when font-lock |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4508 ;; refontifies the current line only. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4509 (<= cfd-limit (c-point 'bonl cfd-start-pos)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4510 (save-excursion |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4511 (goto-char cfd-start-pos) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4512 (while (progn |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4513 (goto-char (next-single-property-change |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4514 (point) 'face nil cfd-limit)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4515 (and (< (point) cfd-limit) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4516 (c-got-face-at (point) c-literal-faces)))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4517 (= (point) cfd-limit))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4518 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4519 ;; Completely inside a literal. Set up variables to trig the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4520 ;; (< cfd-continue-pos cfd-start-pos) case below and it'll |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4521 ;; find a suitable start position. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4522 (setq cfd-continue-pos start-in-literal)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4523 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4524 ;; Check if the region might be completely inside a macro, to |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4525 ;; optimize that like the completely-inside-literal above. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4526 ((save-excursion |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4527 (and (= (forward-line 1) 0) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4528 (bolp) ; forward-line has funny behavior at eob. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4529 (>= (point) cfd-limit) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4530 (progn (backward-char) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4531 (eq (char-before) ?\\)))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4532 ;; (Maybe) completely inside a macro. Only need to trig the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4533 ;; (< cfd-continue-pos cfd-start-pos) case below to make it |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4534 ;; set things up. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4535 (setq cfd-continue-pos (1- cfd-start-pos) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4536 start-in-macro t)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4537 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4538 (t |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4539 ;; Back out of any macro so we don't miss any declaration |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4540 ;; that could follow after it. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4541 (when (c-beginning-of-macro) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4542 (setq start-in-macro t)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4543 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4544 ;; Now we're at a proper syntactically relevant position so we |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4545 ;; can use the cache. But first clear it if it applied |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4546 ;; further down. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4547 (c-invalidate-find-decl-cache cfd-start-pos) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4548 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4549 (setq syntactic-pos (point)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4550 (unless (eq syntactic-pos c-find-decl-syntactic-pos) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4551 ;; Don't have to do this if the cache is relevant here, |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4552 ;; typically if the same line is refontified again. If |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4553 ;; we're just some syntactic whitespace further down we can |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4554 ;; still use the cache to limit the skipping. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4555 (c-backward-syntactic-ws c-find-decl-syntactic-pos)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4556 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4557 ;; If we hit `c-find-decl-syntactic-pos' and |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4558 ;; `c-find-decl-match-pos' is set then we install the cached |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4559 ;; values. If we hit `c-find-decl-syntactic-pos' and |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4560 ;; `c-find-decl-match-pos' is nil then we know there's no decl |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4561 ;; prefix in the whitespace before `c-find-decl-syntactic-pos' |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4562 ;; and so we can continue the search from this point. If we |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4563 ;; didn't hit `c-find-decl-syntactic-pos' then we're now in |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4564 ;; the right spot to begin searching anyway. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4565 (if (and (eq (point) c-find-decl-syntactic-pos) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4566 c-find-decl-match-pos) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4567 (setq cfd-match-pos c-find-decl-match-pos |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4568 cfd-continue-pos syntactic-pos) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4569 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4570 (setq c-find-decl-syntactic-pos syntactic-pos) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4571 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4572 (when (if (bobp) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4573 ;; Always consider bob a match to get the first |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4574 ;; declaration in the file. Do this separately instead of |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4575 ;; letting `c-decl-prefix-or-start-re' match bob, so that |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4576 ;; regexp always can consume at least one character to |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4577 ;; ensure that we won't get stuck in an infinite loop. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4578 (setq cfd-re-match 0) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4579 (backward-char) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4580 (c-beginning-of-current-token) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4581 (< (point) cfd-limit)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4582 ;; Do an initial search now. In the bob case above it's |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4583 ;; only done to search for a `c-decl-end' spot. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4584 (c-find-decl-prefix-search)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4585 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4586 (setq c-find-decl-match-pos (and (< cfd-match-pos cfd-start-pos) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4587 cfd-match-pos))))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4588 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4589 ;; Advance `cfd-continue-pos' if it's before the start position. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4590 ;; The closest continue position that might have effect at or |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4591 ;; after the start depends on what we started in. This also |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4592 ;; finds a suitable start position in the special cases when the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4593 ;; region is completely within a literal or macro. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4594 (when (and cfd-continue-pos (< cfd-continue-pos cfd-start-pos)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4595 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4596 (cond |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4597 (start-in-macro |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4598 ;; If we're in a macro then it's the closest preceding token |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4599 ;; in the macro. Check this before `start-in-literal', |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4600 ;; since if we're inside a literal in a macro, the preceding |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4601 ;; token is earlier than any `c-decl-end' spot inside the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4602 ;; literal (comment). |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4603 (goto-char (or start-in-literal cfd-start-pos)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4604 ;; The only syntactic ws in macros are comments. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4605 (c-backward-comments) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4606 (backward-char) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4607 (c-beginning-of-current-token)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4608 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4609 (start-in-literal |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4610 ;; If we're in a comment it can only be the closest |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4611 ;; preceding `c-decl-end' position within that comment, if |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4612 ;; any. Go back to the beginning of such a property so that |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4613 ;; `c-find-decl-prefix-search' will find the end of it. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4614 ;; (Can't stop at the end and install it directly on |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4615 ;; `cfd-prop-match' since that variable might be cleared |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4616 ;; after `cfd-fun' below.) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4617 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4618 ;; Note that if the literal is a string then the property |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4619 ;; search will simply skip to the beginning of it right |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4620 ;; away. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4621 (if (not c-type-decl-end-used) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4622 (goto-char start-in-literal) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4623 (goto-char cfd-start-pos) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4624 (while (progn |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4625 (goto-char (previous-single-property-change |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4626 (point) 'c-type nil start-in-literal)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4627 (and (> (point) start-in-literal) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4628 (not (eq (c-get-char-property (point) 'c-type) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4629 'c-decl-end)))))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4630 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4631 (when (= (point) start-in-literal) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4632 ;; Didn't find any property inside the comment, so we can |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4633 ;; skip it entirely. (This won't skip past a string, but |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4634 ;; that'll be handled quickly by the next |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4635 ;; `c-find-decl-prefix-search' anyway.) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4636 (c-forward-single-comment) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4637 (if (> (point) cfd-limit) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4638 (goto-char cfd-limit)))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4639 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4640 (t |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4641 ;; If we started in normal code, the only match that might |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4642 ;; apply before the start is what we already got in |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4643 ;; `cfd-match-pos' so we can continue at the start position. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4644 ;; (Note that we don't get here if the first match is below |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4645 ;; it.) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4646 (goto-char cfd-start-pos))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4647 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4648 ;; Delete found matches if they are before our new continue |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4649 ;; position, so that `c-find-decl-prefix-search' won't back up |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4650 ;; to them later on. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4651 (setq cfd-continue-pos (point)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4652 (when (and cfd-re-match (< cfd-re-match cfd-continue-pos)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4653 (setq cfd-re-match nil)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4654 (when (and cfd-prop-match (< cfd-prop-match cfd-continue-pos)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4655 (setq cfd-prop-match nil))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4656 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4657 (if syntactic-pos |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4658 ;; This is the normal case and we got a proper syntactic |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4659 ;; position. If there's a match then it's always outside |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4660 ;; macros and comments, so advance to the next token and set |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4661 ;; `cfd-token-pos'. The loop below will later go back using |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4662 ;; `cfd-continue-pos' to fix declarations inside the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4663 ;; syntactic ws. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4664 (when (and cfd-match-pos (< cfd-match-pos syntactic-pos)) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4665 (goto-char syntactic-pos) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4666 (c-forward-syntactic-ws) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4667 (and cfd-continue-pos |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4668 (< cfd-continue-pos (point)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4669 (setq cfd-token-pos (point)))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4670 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4671 ;; Have one of the special cases when the region is completely |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4672 ;; within a literal or macro. `cfd-continue-pos' is set to a |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4673 ;; good start position for the search, so do it. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4674 (c-find-decl-prefix-search))) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4675 |
75027
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
4676 ;; Now loop. Round what? (ACM, 2006/7/5). We already got the first match. |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4677 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4678 (while (progn |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4679 (while (and |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4680 (< cfd-match-pos cfd-limit) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4681 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4682 (or |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4683 ;; Kludge to filter out matches on the "<" that |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4684 ;; aren't open parens, for the sake of languages |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4685 ;; that got `c-recognize-<>-arglists' set. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4686 (and (eq (char-before cfd-match-pos) ?<) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4687 (not (c-get-char-property (1- cfd-match-pos) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4688 'syntax-table))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4689 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4690 ;; If `cfd-continue-pos' is less or equal to |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4691 ;; `cfd-token-pos', we've got a hit inside a macro |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4692 ;; that's in the syntactic whitespace before the last |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4693 ;; "real" declaration we've checked. If they're equal |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4694 ;; we've arrived at the declaration a second time, so |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4695 ;; there's nothing to do. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4696 (= cfd-continue-pos cfd-token-pos) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4697 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4698 (progn |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4699 ;; If `cfd-continue-pos' is less than `cfd-token-pos' |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4700 ;; we're still searching for declarations embedded in |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4701 ;; the syntactic whitespace. In that case we need |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4702 ;; only to skip comments and not macros, since they |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4703 ;; can't be nested, and that's already been done in |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4704 ;; `c-find-decl-prefix-search'. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4705 (when (> cfd-continue-pos cfd-token-pos) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4706 (c-forward-syntactic-ws) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4707 (setq cfd-token-pos (point))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4708 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4709 ;; Continue if the following token fails the |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4710 ;; CFD-DECL-RE and CFD-FACE-CHECKLIST checks. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4711 (when (or (>= (point) cfd-limit) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4712 (not (looking-at cfd-decl-re)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4713 (and cfd-face-checklist |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4714 (not (c-got-face-at |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4715 (point) cfd-face-checklist)))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4716 (goto-char cfd-continue-pos) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4717 t))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4718 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4719 (< (point) cfd-limit)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4720 (c-find-decl-prefix-search)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4721 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4722 (< (point) cfd-limit)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4723 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4724 (when (and |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4725 (>= (point) cfd-start-pos) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4726 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4727 (progn |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4728 ;; Narrow to the end of the macro if we got a hit inside |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4729 ;; one, to avoid recognizing things that start inside the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4730 ;; macro and end outside it. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4731 (when (> cfd-match-pos cfd-macro-end) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4732 ;; Not in the same macro as in the previous round. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4733 (save-excursion |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4734 (goto-char cfd-match-pos) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4735 (setq cfd-macro-end |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4736 (if (save-excursion (and (c-beginning-of-macro) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4737 (< (point) cfd-match-pos))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4738 (progn (c-end-of-macro) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4739 (point)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4740 0)))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4741 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4742 (if (zerop cfd-macro-end) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4743 t |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4744 (if (> cfd-macro-end (point)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4745 (progn (narrow-to-region (point-min) cfd-macro-end) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4746 t) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4747 ;; The matched token was the last thing in the macro, |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4748 ;; so the whole match is bogus. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4749 (setq cfd-macro-end 0) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4750 nil)))) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4751 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4752 (c-debug-put-decl-spot-faces cfd-match-pos (point)) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4753 (if (funcall cfd-fun cfd-match-pos (/= cfd-macro-end 0)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4754 (setq cfd-prop-match nil)) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4755 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4756 (when (/= cfd-macro-end 0) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4757 ;; Restore limits if we did macro narrowment above. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4758 (narrow-to-region (point-min) cfd-buffer-end))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4759 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4760 (goto-char cfd-continue-pos) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4761 (if (= cfd-continue-pos cfd-limit) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4762 (setq cfd-match-pos cfd-limit) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4763 (c-find-decl-prefix-search))))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4764 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4765 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4766 ;; A cache for found types. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4767 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4768 ;; Buffer local variable that contains an obarray with the types we've |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4769 ;; found. If a declaration is recognized somewhere we record the |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4770 ;; fully qualified identifier in it to recognize it as a type |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4771 ;; elsewhere in the file too. This is not accurate since we do not |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4772 ;; bother with the scoping rules of the languages, but in practice the |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4773 ;; same name is seldom used as both a type and something else in a |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4774 ;; file, and we only use this as a last resort in ambiguous cases (see |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4775 ;; `c-forward-decl-or-cast-1'). |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4776 ;; |
76400
4dc5b2641221
(c-partial-ws-p, c-unfind-type, c-trim-found-types): new functions.
Alan Mackenzie <acm@muc.de>
parents:
75623
diff
changeset
|
4777 ;; Not every type need be in this cache. However, things which have |
4dc5b2641221
(c-partial-ws-p, c-unfind-type, c-trim-found-types): new functions.
Alan Mackenzie <acm@muc.de>
parents:
75623
diff
changeset
|
4778 ;; ceased to be types must be removed from it. |
4dc5b2641221
(c-partial-ws-p, c-unfind-type, c-trim-found-types): new functions.
Alan Mackenzie <acm@muc.de>
parents:
75623
diff
changeset
|
4779 ;; |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4780 ;; Template types in C++ are added here too but with the template |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4781 ;; arglist replaced with "<>" in references or "<" for the one in the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4782 ;; primary type. E.g. the type "Foo<A,B>::Bar<C>" is stored as |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4783 ;; "Foo<>::Bar<". This avoids storing very long strings (since C++ |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4784 ;; template specs can be fairly sized programs in themselves) and |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4785 ;; improves the hit ratio (it's a type regardless of the template |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4786 ;; args; it's just not the same type, but we're only interested in |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4787 ;; recognizing types, not telling distinct types apart). Note that |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4788 ;; template types in references are added here too; from the example |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4789 ;; above there will also be an entry "Foo<". |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4790 (defvar c-found-types nil) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4791 (make-variable-buffer-local 'c-found-types) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4792 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4793 (defsubst c-clear-found-types () |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4794 ;; Clears `c-found-types'. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4795 (setq c-found-types (make-vector 53 0))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4796 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4797 (defun c-add-type (from to) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4798 ;; Add the given region as a type in `c-found-types'. If the region |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4799 ;; doesn't match an existing type but there is a type which is equal |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4800 ;; to the given one except that the last character is missing, then |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4801 ;; the shorter type is removed. That's done to avoid adding all |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4802 ;; prefixes of a type as it's being entered and font locked. This |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4803 ;; doesn't cover cases like when characters are removed from a type |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4804 ;; or added in the middle. We'd need the position of point when the |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4805 ;; font locking is invoked to solve this well. |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4806 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4807 ;; This function might do hidden buffer changes. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4808 (let ((type (c-syntactic-content from to c-recognize-<>-arglists))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4809 (unless (intern-soft type c-found-types) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4810 (unintern (substring type 0 -1) c-found-types) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4811 (intern type c-found-types)))) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4812 |
76400
4dc5b2641221
(c-partial-ws-p, c-unfind-type, c-trim-found-types): new functions.
Alan Mackenzie <acm@muc.de>
parents:
75623
diff
changeset
|
4813 (defun c-unfind-type (name) |
4dc5b2641221
(c-partial-ws-p, c-unfind-type, c-trim-found-types): new functions.
Alan Mackenzie <acm@muc.de>
parents:
75623
diff
changeset
|
4814 ;; Remove the "NAME" from c-found-types, if present. |
4dc5b2641221
(c-partial-ws-p, c-unfind-type, c-trim-found-types): new functions.
Alan Mackenzie <acm@muc.de>
parents:
75623
diff
changeset
|
4815 (unintern name c-found-types)) |
4dc5b2641221
(c-partial-ws-p, c-unfind-type, c-trim-found-types): new functions.
Alan Mackenzie <acm@muc.de>
parents:
75623
diff
changeset
|
4816 |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4817 (defsubst c-check-type (from to) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4818 ;; Return non-nil if the given region contains a type in |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4819 ;; `c-found-types'. |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4820 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4821 ;; This function might do hidden buffer changes. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4822 (intern-soft (c-syntactic-content from to c-recognize-<>-arglists) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4823 c-found-types)) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4824 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4825 (defun c-list-found-types () |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4826 ;; Return all the types in `c-found-types' as a sorted list of |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4827 ;; strings. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4828 (let (type-list) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4829 (mapatoms (lambda (type) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4830 (setq type-list (cons (symbol-name type) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4831 type-list))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4832 c-found-types) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4833 (sort type-list 'string-lessp))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4834 |
85503
59ee4068f60b
* progmodes/gud.el (gud-target-name): Move definition before use.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78656
diff
changeset
|
4835 ;; Shut up the byte compiler. |
59ee4068f60b
* progmodes/gud.el (gud-target-name): Move definition before use.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78656
diff
changeset
|
4836 (defvar c-maybe-stale-found-type) |
59ee4068f60b
* progmodes/gud.el (gud-target-name): Move definition before use.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78656
diff
changeset
|
4837 |
76400
4dc5b2641221
(c-partial-ws-p, c-unfind-type, c-trim-found-types): new functions.
Alan Mackenzie <acm@muc.de>
parents:
75623
diff
changeset
|
4838 (defun c-trim-found-types (beg end old-len) |
4dc5b2641221
(c-partial-ws-p, c-unfind-type, c-trim-found-types): new functions.
Alan Mackenzie <acm@muc.de>
parents:
75623
diff
changeset
|
4839 ;; An after change function which, in conjunction with the info in |
4dc5b2641221
(c-partial-ws-p, c-unfind-type, c-trim-found-types): new functions.
Alan Mackenzie <acm@muc.de>
parents:
75623
diff
changeset
|
4840 ;; c-maybe-stale-found-type (set in c-before-change), removes a type |
4dc5b2641221
(c-partial-ws-p, c-unfind-type, c-trim-found-types): new functions.
Alan Mackenzie <acm@muc.de>
parents:
75623
diff
changeset
|
4841 ;; from `c-found-types', should this type have become stale. For |
4dc5b2641221
(c-partial-ws-p, c-unfind-type, c-trim-found-types): new functions.
Alan Mackenzie <acm@muc.de>
parents:
75623
diff
changeset
|
4842 ;; example, this happens to "foo" when "foo \n bar();" becomes |
4dc5b2641221
(c-partial-ws-p, c-unfind-type, c-trim-found-types): new functions.
Alan Mackenzie <acm@muc.de>
parents:
75623
diff
changeset
|
4843 ;; "foo(); \n bar();". Such stale types, if not removed, foul up |
4dc5b2641221
(c-partial-ws-p, c-unfind-type, c-trim-found-types): new functions.
Alan Mackenzie <acm@muc.de>
parents:
75623
diff
changeset
|
4844 ;; the fontification. |
79408
a29ca195b71e
(c-crosses-statement-barrier-p): Fix typo in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents:
78656
diff
changeset
|
4845 ;; |
76400
4dc5b2641221
(c-partial-ws-p, c-unfind-type, c-trim-found-types): new functions.
Alan Mackenzie <acm@muc.de>
parents:
75623
diff
changeset
|
4846 ;; Have we, perhaps, added non-ws characters to the front/back of a found |
4dc5b2641221
(c-partial-ws-p, c-unfind-type, c-trim-found-types): new functions.
Alan Mackenzie <acm@muc.de>
parents:
75623
diff
changeset
|
4847 ;; type? |
4dc5b2641221
(c-partial-ws-p, c-unfind-type, c-trim-found-types): new functions.
Alan Mackenzie <acm@muc.de>
parents:
75623
diff
changeset
|
4848 (when (> end beg) |
4dc5b2641221
(c-partial-ws-p, c-unfind-type, c-trim-found-types): new functions.
Alan Mackenzie <acm@muc.de>
parents:
75623
diff
changeset
|
4849 (save-excursion |
4dc5b2641221
(c-partial-ws-p, c-unfind-type, c-trim-found-types): new functions.
Alan Mackenzie <acm@muc.de>
parents:
75623
diff
changeset
|
4850 (when (< end (point-max)) |
4dc5b2641221
(c-partial-ws-p, c-unfind-type, c-trim-found-types): new functions.
Alan Mackenzie <acm@muc.de>
parents:
75623
diff
changeset
|
4851 (goto-char end) |
4dc5b2641221
(c-partial-ws-p, c-unfind-type, c-trim-found-types): new functions.
Alan Mackenzie <acm@muc.de>
parents:
75623
diff
changeset
|
4852 (if (and (c-beginning-of-current-token) ; only moves when we started in the middle |
4dc5b2641221
(c-partial-ws-p, c-unfind-type, c-trim-found-types): new functions.
Alan Mackenzie <acm@muc.de>
parents:
75623
diff
changeset
|
4853 (progn (goto-char end) |
4dc5b2641221
(c-partial-ws-p, c-unfind-type, c-trim-found-types): new functions.
Alan Mackenzie <acm@muc.de>
parents:
75623
diff
changeset
|
4854 (c-end-of-current-token))) |
4dc5b2641221
(c-partial-ws-p, c-unfind-type, c-trim-found-types): new functions.
Alan Mackenzie <acm@muc.de>
parents:
75623
diff
changeset
|
4855 (c-unfind-type (buffer-substring-no-properties |
4dc5b2641221
(c-partial-ws-p, c-unfind-type, c-trim-found-types): new functions.
Alan Mackenzie <acm@muc.de>
parents:
75623
diff
changeset
|
4856 end (point))))) |
4dc5b2641221
(c-partial-ws-p, c-unfind-type, c-trim-found-types): new functions.
Alan Mackenzie <acm@muc.de>
parents:
75623
diff
changeset
|
4857 (when (> beg (point-min)) |
4dc5b2641221
(c-partial-ws-p, c-unfind-type, c-trim-found-types): new functions.
Alan Mackenzie <acm@muc.de>
parents:
75623
diff
changeset
|
4858 (goto-char beg) |
4dc5b2641221
(c-partial-ws-p, c-unfind-type, c-trim-found-types): new functions.
Alan Mackenzie <acm@muc.de>
parents:
75623
diff
changeset
|
4859 (if (and (c-end-of-current-token) ; only moves when we started in the middle |
4dc5b2641221
(c-partial-ws-p, c-unfind-type, c-trim-found-types): new functions.
Alan Mackenzie <acm@muc.de>
parents:
75623
diff
changeset
|
4860 (progn (goto-char beg) |
4dc5b2641221
(c-partial-ws-p, c-unfind-type, c-trim-found-types): new functions.
Alan Mackenzie <acm@muc.de>
parents:
75623
diff
changeset
|
4861 (c-beginning-of-current-token))) |
4dc5b2641221
(c-partial-ws-p, c-unfind-type, c-trim-found-types): new functions.
Alan Mackenzie <acm@muc.de>
parents:
75623
diff
changeset
|
4862 (c-unfind-type (buffer-substring-no-properties |
4dc5b2641221
(c-partial-ws-p, c-unfind-type, c-trim-found-types): new functions.
Alan Mackenzie <acm@muc.de>
parents:
75623
diff
changeset
|
4863 (point) beg)))))) |
79408
a29ca195b71e
(c-crosses-statement-barrier-p): Fix typo in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents:
78656
diff
changeset
|
4864 |
76400
4dc5b2641221
(c-partial-ws-p, c-unfind-type, c-trim-found-types): new functions.
Alan Mackenzie <acm@muc.de>
parents:
75623
diff
changeset
|
4865 (if c-maybe-stale-found-type ; e.g. (c-decl-id-start "foo" 97 107 " (* ooka) " "o") |
4dc5b2641221
(c-partial-ws-p, c-unfind-type, c-trim-found-types): new functions.
Alan Mackenzie <acm@muc.de>
parents:
75623
diff
changeset
|
4866 (cond |
4dc5b2641221
(c-partial-ws-p, c-unfind-type, c-trim-found-types): new functions.
Alan Mackenzie <acm@muc.de>
parents:
75623
diff
changeset
|
4867 ;; Changing the amount of (already existing) whitespace - don't do anything. |
4dc5b2641221
(c-partial-ws-p, c-unfind-type, c-trim-found-types): new functions.
Alan Mackenzie <acm@muc.de>
parents:
75623
diff
changeset
|
4868 ((and (c-partial-ws-p beg end) |
4dc5b2641221
(c-partial-ws-p, c-unfind-type, c-trim-found-types): new functions.
Alan Mackenzie <acm@muc.de>
parents:
75623
diff
changeset
|
4869 (or (= beg end) ; removal of WS |
4dc5b2641221
(c-partial-ws-p, c-unfind-type, c-trim-found-types): new functions.
Alan Mackenzie <acm@muc.de>
parents:
75623
diff
changeset
|
4870 (string-match "^[ \t\n\r\f\v]*$" (nth 5 c-maybe-stale-found-type))))) |
4dc5b2641221
(c-partial-ws-p, c-unfind-type, c-trim-found-types): new functions.
Alan Mackenzie <acm@muc.de>
parents:
75623
diff
changeset
|
4871 |
4dc5b2641221
(c-partial-ws-p, c-unfind-type, c-trim-found-types): new functions.
Alan Mackenzie <acm@muc.de>
parents:
75623
diff
changeset
|
4872 ;; The syntactic relationship which defined a "found type" has been |
4dc5b2641221
(c-partial-ws-p, c-unfind-type, c-trim-found-types): new functions.
Alan Mackenzie <acm@muc.de>
parents:
75623
diff
changeset
|
4873 ;; destroyed. |
4dc5b2641221
(c-partial-ws-p, c-unfind-type, c-trim-found-types): new functions.
Alan Mackenzie <acm@muc.de>
parents:
75623
diff
changeset
|
4874 ((eq (car c-maybe-stale-found-type) 'c-decl-id-start) |
4dc5b2641221
(c-partial-ws-p, c-unfind-type, c-trim-found-types): new functions.
Alan Mackenzie <acm@muc.de>
parents:
75623
diff
changeset
|
4875 (c-unfind-type (cadr c-maybe-stale-found-type))) |
4dc5b2641221
(c-partial-ws-p, c-unfind-type, c-trim-found-types): new functions.
Alan Mackenzie <acm@muc.de>
parents:
75623
diff
changeset
|
4876 ;; ((eq (car c-maybe-stale-found-type) 'c-decl-type-start) FIXME!!! |
4dc5b2641221
(c-partial-ws-p, c-unfind-type, c-trim-found-types): new functions.
Alan Mackenzie <acm@muc.de>
parents:
75623
diff
changeset
|
4877 ))) |
4dc5b2641221
(c-partial-ws-p, c-unfind-type, c-trim-found-types): new functions.
Alan Mackenzie <acm@muc.de>
parents:
75623
diff
changeset
|
4878 |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4879 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4880 ;; Handling of small scale constructs like types and names. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4881 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4882 (defun c-after-change-check-<>-operators (beg end) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4883 ;; This is called from `after-change-functions' when |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4884 ;; c-recognize-<>-arglists' is set. It ensures that no "<" or ">" |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4885 ;; chars with paren syntax become part of another operator like "<<" |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4886 ;; or ">=". |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4887 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4888 ;; This function might do hidden buffer changes. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4889 |
69140
3d8b060d10fb
cc-align.el, cc-awk.el, cc-bytecomp.el, cc-cmds.el, cc-compat.el,
Alan Mackenzie <acm@muc.de>
parents:
68773
diff
changeset
|
4890 (save-excursion |
3d8b060d10fb
cc-align.el, cc-awk.el, cc-bytecomp.el, cc-cmds.el, cc-compat.el,
Alan Mackenzie <acm@muc.de>
parents:
68773
diff
changeset
|
4891 (goto-char beg) |
3d8b060d10fb
cc-align.el, cc-awk.el, cc-bytecomp.el, cc-cmds.el, cc-compat.el,
Alan Mackenzie <acm@muc.de>
parents:
68773
diff
changeset
|
4892 (when (or (looking-at "[<>]") |
3d8b060d10fb
cc-align.el, cc-awk.el, cc-bytecomp.el, cc-cmds.el, cc-compat.el,
Alan Mackenzie <acm@muc.de>
parents:
68773
diff
changeset
|
4893 (< (skip-chars-backward "<>") 0)) |
3d8b060d10fb
cc-align.el, cc-awk.el, cc-bytecomp.el, cc-cmds.el, cc-compat.el,
Alan Mackenzie <acm@muc.de>
parents:
68773
diff
changeset
|
4894 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4895 (goto-char beg) |
69140
3d8b060d10fb
cc-align.el, cc-awk.el, cc-bytecomp.el, cc-cmds.el, cc-compat.el,
Alan Mackenzie <acm@muc.de>
parents:
68773
diff
changeset
|
4896 (c-beginning-of-current-token) |
3d8b060d10fb
cc-align.el, cc-awk.el, cc-bytecomp.el, cc-cmds.el, cc-compat.el,
Alan Mackenzie <acm@muc.de>
parents:
68773
diff
changeset
|
4897 (when (and (< (point) beg) |
3d8b060d10fb
cc-align.el, cc-awk.el, cc-bytecomp.el, cc-cmds.el, cc-compat.el,
Alan Mackenzie <acm@muc.de>
parents:
68773
diff
changeset
|
4898 (looking-at c-<>-multichar-token-regexp) |
3d8b060d10fb
cc-align.el, cc-awk.el, cc-bytecomp.el, cc-cmds.el, cc-compat.el,
Alan Mackenzie <acm@muc.de>
parents:
68773
diff
changeset
|
4899 (< beg (setq beg (match-end 0)))) |
3d8b060d10fb
cc-align.el, cc-awk.el, cc-bytecomp.el, cc-cmds.el, cc-compat.el,
Alan Mackenzie <acm@muc.de>
parents:
68773
diff
changeset
|
4900 (while (progn (skip-chars-forward "^<>" beg) |
3d8b060d10fb
cc-align.el, cc-awk.el, cc-bytecomp.el, cc-cmds.el, cc-compat.el,
Alan Mackenzie <acm@muc.de>
parents:
68773
diff
changeset
|
4901 (< (point) beg)) |
3d8b060d10fb
cc-align.el, cc-awk.el, cc-bytecomp.el, cc-cmds.el, cc-compat.el,
Alan Mackenzie <acm@muc.de>
parents:
68773
diff
changeset
|
4902 (c-clear-char-property (point) 'syntax-table) |
3d8b060d10fb
cc-align.el, cc-awk.el, cc-bytecomp.el, cc-cmds.el, cc-compat.el,
Alan Mackenzie <acm@muc.de>
parents:
68773
diff
changeset
|
4903 (forward-char)))) |
3d8b060d10fb
cc-align.el, cc-awk.el, cc-bytecomp.el, cc-cmds.el, cc-compat.el,
Alan Mackenzie <acm@muc.de>
parents:
68773
diff
changeset
|
4904 |
3d8b060d10fb
cc-align.el, cc-awk.el, cc-bytecomp.el, cc-cmds.el, cc-compat.el,
Alan Mackenzie <acm@muc.de>
parents:
68773
diff
changeset
|
4905 (when (< beg end) |
3d8b060d10fb
cc-align.el, cc-awk.el, cc-bytecomp.el, cc-cmds.el, cc-compat.el,
Alan Mackenzie <acm@muc.de>
parents:
68773
diff
changeset
|
4906 (goto-char end) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4907 (when (or (looking-at "[<>]") |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4908 (< (skip-chars-backward "<>") 0)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4909 |
69140
3d8b060d10fb
cc-align.el, cc-awk.el, cc-bytecomp.el, cc-cmds.el, cc-compat.el,
Alan Mackenzie <acm@muc.de>
parents:
68773
diff
changeset
|
4910 (goto-char end) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4911 (c-beginning-of-current-token) |
69140
3d8b060d10fb
cc-align.el, cc-awk.el, cc-bytecomp.el, cc-cmds.el, cc-compat.el,
Alan Mackenzie <acm@muc.de>
parents:
68773
diff
changeset
|
4912 (when (and (< (point) end) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4913 (looking-at c-<>-multichar-token-regexp) |
69140
3d8b060d10fb
cc-align.el, cc-awk.el, cc-bytecomp.el, cc-cmds.el, cc-compat.el,
Alan Mackenzie <acm@muc.de>
parents:
68773
diff
changeset
|
4914 (< end (setq end (match-end 0)))) |
3d8b060d10fb
cc-align.el, cc-awk.el, cc-bytecomp.el, cc-cmds.el, cc-compat.el,
Alan Mackenzie <acm@muc.de>
parents:
68773
diff
changeset
|
4915 (while (progn (skip-chars-forward "^<>" end) |
3d8b060d10fb
cc-align.el, cc-awk.el, cc-bytecomp.el, cc-cmds.el, cc-compat.el,
Alan Mackenzie <acm@muc.de>
parents:
68773
diff
changeset
|
4916 (< (point) end)) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4917 (c-clear-char-property (point) 'syntax-table) |
69140
3d8b060d10fb
cc-align.el, cc-awk.el, cc-bytecomp.el, cc-cmds.el, cc-compat.el,
Alan Mackenzie <acm@muc.de>
parents:
68773
diff
changeset
|
4918 (forward-char))))))) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4919 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4920 ;; Dynamically bound variable that instructs `c-forward-type' to also |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4921 ;; treat possible types (i.e. those that it normally returns 'maybe or |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4922 ;; 'found for) as actual types (and always return 'found for them). |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4923 ;; This means that it records them in `c-record-type-identifiers' if |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4924 ;; that is set, and that it adds them to `c-found-types'. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4925 (defvar c-promote-possible-types nil) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4926 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4927 ;; Dynamically bound variable that instructs `c-forward-<>-arglist' to |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4928 ;; mark up successfully parsed arglists with paren syntax properties on |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4929 ;; the surrounding angle brackets and with `c-<>-arg-sep' in the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4930 ;; `c-type' property of each argument separating comma. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4931 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4932 ;; Setting this variable also makes `c-forward-<>-arglist' recurse into |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4933 ;; all arglists for side effects (i.e. recording types), otherwise it |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4934 ;; exploits any existing paren syntax properties to quickly jump to the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4935 ;; end of already parsed arglists. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4936 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4937 ;; Marking up the arglists is not the default since doing that correctly |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4938 ;; depends on a proper value for `c-restricted-<>-arglists'. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4939 (defvar c-parse-and-markup-<>-arglists nil) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4940 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4941 ;; Dynamically bound variable that instructs `c-forward-<>-arglist' to |
53073
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
4942 ;; not accept arglists that contain binary operators. |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
4943 ;; |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
4944 ;; This is primarily used to handle C++ template arglists. C++ |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
4945 ;; disambiguates them by checking whether the preceding name is a |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
4946 ;; template or not. We can't do that, so we assume it is a template |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
4947 ;; if it can be parsed as one. That usually works well since |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
4948 ;; comparison expressions on the forms "a < b > c" or "a < b, c > d" |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
4949 ;; in almost all cases would be pointless. |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
4950 ;; |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
4951 ;; However, in function arglists, e.g. in "foo (a < b, c > d)", we |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
4952 ;; should let the comma separate the function arguments instead. And |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
4953 ;; in a context where the value of the expression is taken, e.g. in |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
4954 ;; "if (a < b || c > d)", it's probably not a template. |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
4955 (defvar c-restricted-<>-arglists nil) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4956 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4957 ;; Dynamically bound variables that instructs |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4958 ;; `c-forward-keyword-clause', `c-forward-<>-arglist', |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4959 ;; `c-forward-name', `c-forward-type', `c-forward-decl-or-cast-1', and |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4960 ;; `c-forward-label' to record the ranges of all the type and |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4961 ;; reference identifiers they encounter. They will build lists on |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4962 ;; these variables where each element is a cons of the buffer |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4963 ;; positions surrounding each identifier. This recording is only |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4964 ;; activated when `c-record-type-identifiers' is non-nil. |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4965 ;; |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4966 ;; All known types that can't be identifiers are recorded, and also |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4967 ;; other possible types if `c-promote-possible-types' is set. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4968 ;; Recording is however disabled inside angle bracket arglists that |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4969 ;; are encountered inside names and other angle bracket arglists. |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4970 ;; Such occurrences are taken care of by `c-font-lock-<>-arglists' |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4971 ;; instead. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4972 ;; |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4973 ;; Only the names in C++ template style references (e.g. "tmpl" in |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4974 ;; "tmpl<a,b>::foo") are recorded as references, other references |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4975 ;; aren't handled here. |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4976 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4977 ;; `c-forward-label' records the label identifier(s) on |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4978 ;; `c-record-ref-identifiers'. |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4979 (defvar c-record-type-identifiers nil) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4980 (defvar c-record-ref-identifiers nil) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4981 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4982 ;; This variable will receive a cons cell of the range of the last |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4983 ;; single identifier symbol stepped over by `c-forward-name' if it's |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4984 ;; successful. This is the range that should be put on one of the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4985 ;; record lists above by the caller. It's assigned nil if there's no |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
4986 ;; such symbol in the name. |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4987 (defvar c-last-identifier-range nil) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4988 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4989 (defmacro c-record-type-id (range) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4990 (if (eq (car-safe range) 'cons) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4991 ;; Always true. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4992 `(setq c-record-type-identifiers |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4993 (cons ,range c-record-type-identifiers)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4994 `(let ((range ,range)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4995 (if range |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4996 (setq c-record-type-identifiers |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4997 (cons range c-record-type-identifiers)))))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4998 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
4999 (defmacro c-record-ref-id (range) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5000 (if (eq (car-safe range) 'cons) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5001 ;; Always true. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5002 `(setq c-record-ref-identifiers |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5003 (cons ,range c-record-ref-identifiers)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5004 `(let ((range ,range)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5005 (if range |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5006 (setq c-record-ref-identifiers |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5007 (cons range c-record-ref-identifiers)))))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5008 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5009 ;; Dynamically bound variable that instructs `c-forward-type' to |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5010 ;; record the ranges of types that only are found. Behaves otherwise |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5011 ;; like `c-record-type-identifiers'. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5012 (defvar c-record-found-types nil) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5013 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5014 (defmacro c-forward-keyword-prefixed-id (type) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5015 ;; Used internally in `c-forward-keyword-clause' to move forward |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5016 ;; over a type (if TYPE is 'type) or a name (otherwise) which |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5017 ;; possibly is prefixed by keywords and their associated clauses. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5018 ;; Try with a type/name first to not trip up on those that begin |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5019 ;; with a keyword. Return t if a known or found type is moved |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5020 ;; over. The point is clobbered if nil is returned. If range |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5021 ;; recording is enabled, the identifier is recorded on as a type |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5022 ;; if TYPE is 'type or as a reference if TYPE is 'ref. |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5023 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5024 ;; This macro might do hidden buffer changes. |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5025 `(let (res) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5026 (while (if (setq res ,(if (eq type 'type) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5027 `(c-forward-type) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5028 `(c-forward-name))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5029 nil |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5030 (and (looking-at c-keywords-regexp) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5031 (c-forward-keyword-clause 1)))) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5032 (when (memq res '(t known found prefix)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5033 ,(when (eq type 'ref) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5034 `(when c-record-type-identifiers |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5035 (c-record-ref-id c-last-identifier-range))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5036 t))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5037 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5038 (defmacro c-forward-id-comma-list (type update-safe-pos) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5039 ;; Used internally in `c-forward-keyword-clause' to move forward |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5040 ;; over a comma separated list of types or names using |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5041 ;; `c-forward-keyword-prefixed-id'. |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5042 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5043 ;; This macro might do hidden buffer changes. |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5044 `(while (and (progn |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5045 ,(when update-safe-pos |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5046 `(setq safe-pos (point))) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5047 (eq (char-after) ?,)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5048 (progn |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5049 (forward-char) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5050 (c-forward-syntactic-ws) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5051 (c-forward-keyword-prefixed-id ,type))))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5052 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5053 (defun c-forward-keyword-clause (match) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5054 ;; Submatch MATCH in the current match data is assumed to surround a |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5055 ;; token. If it's a keyword, move over it and any immediately |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5056 ;; following clauses associated with it, stopping at the start of |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5057 ;; the next token. t is returned in that case, otherwise the point |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5058 ;; stays and nil is returned. The kind of clauses that are |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5059 ;; recognized are those specified by `c-type-list-kwds', |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5060 ;; `c-ref-list-kwds', `c-colon-type-list-kwds', |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5061 ;; `c-paren-nontype-kwds', `c-paren-type-kwds', `c-<>-type-kwds', |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5062 ;; and `c-<>-arglist-kwds'. |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5063 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5064 ;; This function records identifier ranges on |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5065 ;; `c-record-type-identifiers' and `c-record-ref-identifiers' if |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5066 ;; `c-record-type-identifiers' is non-nil. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5067 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5068 ;; Note that for `c-colon-type-list-kwds', which doesn't necessary |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5069 ;; apply directly after the keyword, the type list is moved over |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5070 ;; only when there is no unaccounted token before it (i.e. a token |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5071 ;; that isn't moved over due to some other keyword list). The |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5072 ;; identifier ranges in the list are still recorded if that should |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5073 ;; be done, though. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5074 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5075 ;; This function might do hidden buffer changes. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5076 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5077 (let ((kwd-sym (c-keyword-sym (match-string match))) safe-pos pos |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5078 ;; The call to `c-forward-<>-arglist' below is made after |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5079 ;; `c-<>-sexp-kwds' keywords, so we're certain they actually |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5080 ;; are angle bracket arglists and `c-restricted-<>-arglists' |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5081 ;; should therefore be nil. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5082 (c-parse-and-markup-<>-arglists t) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5083 c-restricted-<>-arglists) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5084 |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5085 (when kwd-sym |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5086 (goto-char (match-end match)) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5087 (c-forward-syntactic-ws) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5088 (setq safe-pos (point)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5089 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5090 (cond |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5091 ((and (c-keyword-member kwd-sym 'c-type-list-kwds) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5092 (c-forward-keyword-prefixed-id type)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5093 ;; There's a type directly after a keyword in `c-type-list-kwds'. |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5094 (c-forward-id-comma-list type t)) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5095 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5096 ((and (c-keyword-member kwd-sym 'c-ref-list-kwds) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5097 (c-forward-keyword-prefixed-id ref)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5098 ;; There's a name directly after a keyword in `c-ref-list-kwds'. |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5099 (c-forward-id-comma-list ref t)) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5100 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5101 ((and (c-keyword-member kwd-sym 'c-paren-any-kwds) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5102 (eq (char-after) ?\()) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5103 ;; There's an open paren after a keyword in `c-paren-any-kwds'. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5104 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5105 (forward-char) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5106 (when (and (setq pos (c-up-list-forward)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5107 (eq (char-before pos) ?\))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5108 (when (and c-record-type-identifiers |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5109 (c-keyword-member kwd-sym 'c-paren-type-kwds)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5110 ;; Use `c-forward-type' on every identifier we can find |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5111 ;; inside the paren, to record the types. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5112 (while (c-syntactic-re-search-forward c-symbol-start pos t) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5113 (goto-char (match-beginning 0)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5114 (unless (c-forward-type) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5115 (looking-at c-symbol-key) ; Always matches. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5116 (goto-char (match-end 0))))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5117 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5118 (goto-char pos) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5119 (c-forward-syntactic-ws) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5120 (setq safe-pos (point)))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5121 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5122 ((and (c-keyword-member kwd-sym 'c-<>-sexp-kwds) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5123 (eq (char-after) ?<) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5124 (c-forward-<>-arglist (c-keyword-member kwd-sym 'c-<>-type-kwds))) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5125 (c-forward-syntactic-ws) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5126 (setq safe-pos (point))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5127 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5128 ((and (c-keyword-member kwd-sym 'c-nonsymbol-sexp-kwds) |
52605
50c6e94a91cb
(c-parse-state): Fixed bug that could cause errors when the state
Martin Stjernholm <mast@lysator.liu.se>
parents:
52401
diff
changeset
|
5129 (not (looking-at c-symbol-start)) |
50c6e94a91cb
(c-parse-state): Fixed bug that could cause errors when the state
Martin Stjernholm <mast@lysator.liu.se>
parents:
52401
diff
changeset
|
5130 (c-safe (c-forward-sexp) t)) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5131 (c-forward-syntactic-ws) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5132 (setq safe-pos (point)))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5133 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5134 (when (c-keyword-member kwd-sym 'c-colon-type-list-kwds) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5135 (if (eq (char-after) ?:) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5136 ;; If we are at the colon already, we move over the type |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5137 ;; list after it. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5138 (progn |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5139 (forward-char) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5140 (c-forward-syntactic-ws) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5141 (when (c-forward-keyword-prefixed-id type) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5142 (c-forward-id-comma-list type t))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5143 ;; Not at the colon, so stop here. But the identifier |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5144 ;; ranges in the type list later on should still be |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5145 ;; recorded. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5146 (and c-record-type-identifiers |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5147 (progn |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5148 ;; If a keyword matched both one of the types above and |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5149 ;; this one, we match `c-colon-type-list-re' after the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5150 ;; clause matched above. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5151 (goto-char safe-pos) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5152 (looking-at c-colon-type-list-re)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5153 (progn |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5154 (goto-char (match-end 0)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5155 (c-forward-syntactic-ws) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5156 (c-forward-keyword-prefixed-id type)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5157 ;; There's a type after the `c-colon-type-list-re' match |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5158 ;; after a keyword in `c-colon-type-list-kwds'. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5159 (c-forward-id-comma-list type nil)))) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5160 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5161 (goto-char safe-pos) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5162 t))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5163 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5164 (defun c-forward-<>-arglist (all-types) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5165 ;; The point is assumed to be at a "<". Try to treat it as the open |
105424
098f8a47a308
Fix typos in comments.
Juanma Barranquero <lekktu@gmail.com>
parents:
105206
diff
changeset
|
5166 ;; paren of an angle bracket arglist and move forward to the |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5167 ;; corresponding ">". If successful, the point is left after the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5168 ;; ">" and t is returned, otherwise the point isn't moved and nil is |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5169 ;; returned. If ALL-TYPES is t then all encountered arguments in |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5170 ;; the arglist that might be types are treated as found types. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5171 ;; |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5172 ;; The variable `c-parse-and-markup-<>-arglists' controls how this |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5173 ;; function handles text properties on the angle brackets and argument |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5174 ;; separating commas. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5175 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5176 ;; `c-restricted-<>-arglists' controls how lenient the template |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5177 ;; arglist recognition should be. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5178 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5179 ;; This function records identifier ranges on |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5180 ;; `c-record-type-identifiers' and `c-record-ref-identifiers' if |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5181 ;; `c-record-type-identifiers' is non-nil. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5182 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5183 ;; This function might do hidden buffer changes. |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5184 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5185 (let ((start (point)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5186 ;; If `c-record-type-identifiers' is set then activate |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5187 ;; recording of any found types that constitute an argument in |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5188 ;; the arglist. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5189 (c-record-found-types (if c-record-type-identifiers t))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5190 (if (catch 'angle-bracket-arglist-escape |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5191 (setq c-record-found-types |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5192 (c-forward-<>-arglist-recur all-types))) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5193 (progn |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5194 (when (consp c-record-found-types) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5195 (setq c-record-type-identifiers |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5196 ;; `nconc' doesn't mind that the tail of |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5197 ;; `c-record-found-types' is t. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5198 (nconc c-record-found-types c-record-type-identifiers))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5199 t) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5200 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5201 (goto-char start) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5202 nil))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5203 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5204 (defun c-forward-<>-arglist-recur (all-types) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5205 ;; Recursive part of `c-forward-<>-arglist'. |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5206 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5207 ;; This function might do hidden buffer changes. |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5208 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5209 (let ((start (point)) res pos tmp |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5210 ;; Cover this so that any recorded found type ranges are |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5211 ;; automatically lost if it turns out to not be an angle |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5212 ;; bracket arglist. It's propagated through the return value |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5213 ;; on successful completion. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5214 (c-record-found-types c-record-found-types) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5215 ;; List that collects the positions after the argument |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5216 ;; separating ',' in the arglist. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5217 arg-start-pos) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5218 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5219 ;; If the '<' has paren open syntax then we've marked it as an angle |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5220 ;; bracket arglist before, so skip to the end. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5221 (if (and (not c-parse-and-markup-<>-arglists) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5222 (c-get-char-property (point) 'syntax-table)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5223 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5224 (progn |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5225 (forward-char) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5226 (if (and (c-go-up-list-forward) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5227 (eq (char-before) ?>)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5228 t |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5229 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5230 ;; Got unmatched paren angle brackets. We don't clear the paren |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5231 ;; syntax properties and retry, on the basis that it's very |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5232 ;; unlikely that paren angle brackets become operators by code |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5233 ;; manipulation. It's far more likely that it doesn't match due |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5234 ;; to narrowing or some temporary change. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5235 (goto-char start) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5236 nil)) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5237 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5238 (forward-char) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5239 (unless (looking-at c-<-op-cont-regexp) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5240 (while (and |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5241 (progn |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5242 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5243 (when c-record-type-identifiers |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5244 (if all-types |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5245 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5246 ;; All encountered identifiers are types, so set the |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5247 ;; promote flag and parse the type. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5248 (progn |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5249 (c-forward-syntactic-ws) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5250 (when (looking-at c-identifier-start) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5251 (let ((c-promote-possible-types t)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5252 (c-forward-type)))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5253 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5254 ;; Check if this arglist argument is a sole type. If |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5255 ;; it's known then it's recorded in |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5256 ;; `c-record-type-identifiers'. If it only is found |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5257 ;; then it's recorded in `c-record-found-types' which we |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5258 ;; might roll back if it turns out that this isn't an |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5259 ;; angle bracket arglist afterall. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5260 (when (memq (char-before) '(?, ?<)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5261 (let ((orig-record-found-types c-record-found-types)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5262 (c-forward-syntactic-ws) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5263 (and (memq (c-forward-type) '(known found)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5264 (not (looking-at "[,>]")) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5265 ;; A found type was recorded but it's not the |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5266 ;; only thing in the arglist argument, so reset |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5267 ;; `c-record-found-types'. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5268 (setq c-record-found-types |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5269 orig-record-found-types)))))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5270 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5271 (setq pos (point)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5272 (or (when (eq (char-after) ?>) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5273 ;; Must check for '>' at the very start separately, |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5274 ;; since the regexp below has to avoid ">>" without |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5275 ;; using \\=. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5276 (forward-char) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5277 t) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5278 |
53073
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
5279 ;; Note: These regexps exploit the match order in \| so |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
5280 ;; that "<>" is matched by "<" rather than "[^>:-]>". |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5281 (c-syntactic-re-search-forward |
53073
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
5282 (if c-restricted-<>-arglists |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
5283 ;; Stop on ',', '|', '&', '+' and '-' to catch |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
5284 ;; common binary operators that could be between |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
5285 ;; two comparison expressions "a<b" and "c>d". |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
5286 "[<;{},|&+-]\\|\\([^>:-]>\\)" |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
5287 ;; Otherwise we still stop on ',' to find the |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
5288 ;; argument start positions. |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
5289 "[<;{},]\\|\\([^>:-]>\\)") |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
5290 nil 'move t t 1) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5291 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5292 ;; If the arglist starter has lost its open paren |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5293 ;; syntax but not the closer, we won't find the |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5294 ;; closer above since we only search in the |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5295 ;; balanced sexp. In that case we stop just short |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5296 ;; of it so check if the following char is the closer. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5297 (when (eq (char-after) ?>) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5298 (forward-char) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5299 t))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5300 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5301 (cond |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5302 ((eq (char-before) ?>) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5303 ;; Either an operator starting with '>' or the end of |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5304 ;; the angle bracket arglist. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5305 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5306 (if (looking-at c->-op-cont-regexp) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5307 (progn |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5308 (goto-char (match-end 0)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5309 t) ; Continue the loop. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5310 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5311 ;; The angle bracket arglist is finished. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5312 (when c-parse-and-markup-<>-arglists |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5313 (while arg-start-pos |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5314 (c-put-c-type-property (1- (car arg-start-pos)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5315 'c-<>-arg-sep) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5316 (setq arg-start-pos (cdr arg-start-pos))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5317 (c-mark-<-as-paren start) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5318 (c-mark->-as-paren (1- (point)))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5319 (setq res t) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5320 nil)) ; Exit the loop. |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5321 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5322 ((eq (char-before) ?<) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5323 ;; Either an operator starting with '<' or a nested arglist. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5324 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5325 (setq pos (point)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5326 (let (id-start id-end subres keyword-match) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5327 (if (if (looking-at c-<-op-cont-regexp) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5328 (setq tmp (match-end 0)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5329 (setq tmp pos) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5330 (backward-char) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5331 (not |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5332 (and |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5333 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5334 (save-excursion |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5335 ;; There's always an identifier before an angle |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5336 ;; bracket arglist, or a keyword in |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5337 ;; `c-<>-type-kwds' or `c-<>-arglist-kwds'. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5338 (c-backward-syntactic-ws) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5339 (setq id-end (point)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5340 (c-simple-skip-symbol-backward) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5341 (when (or (setq keyword-match |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5342 (looking-at c-opt-<>-sexp-key)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5343 (not (looking-at c-keywords-regexp))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5344 (setq id-start (point)))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5345 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5346 (setq subres |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5347 (let ((c-record-type-identifiers nil) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5348 (c-record-found-types nil)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5349 (c-forward-<>-arglist-recur |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5350 (and keyword-match |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5351 (c-keyword-member |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5352 (c-keyword-sym (match-string 1)) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5353 'c-<>-type-kwds))))) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5354 ))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5355 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5356 ;; It was not an angle bracket arglist. |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5357 (goto-char tmp) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5358 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5359 ;; It was an angle bracket arglist. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5360 (setq c-record-found-types subres) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5361 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5362 ;; Record the identifier before the template as a type |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5363 ;; or reference depending on whether the arglist is last |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5364 ;; in a qualified identifier. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5365 (when (and c-record-type-identifiers |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5366 (not keyword-match)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5367 (if (and c-opt-identifier-concat-key |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5368 (progn |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5369 (c-forward-syntactic-ws) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5370 (looking-at c-opt-identifier-concat-key))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5371 (c-record-ref-id (cons id-start id-end)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5372 (c-record-type-id (cons id-start id-end)))))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5373 t) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5374 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5375 ((and (eq (char-before) ?,) |
53073
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
5376 (not c-restricted-<>-arglists)) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5377 ;; Just another argument. Record the position. The |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5378 ;; type check stuff that made us stop at it is at |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5379 ;; the top of the loop. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5380 (setq arg-start-pos (cons (point) arg-start-pos))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5381 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5382 (t |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5383 ;; Got a character that can't be in an angle bracket |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5384 ;; arglist argument. Abort using `throw', since |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5385 ;; it's useless to try to find a surrounding arglist |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5386 ;; if we're nested. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5387 (throw 'angle-bracket-arglist-escape nil)))))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5388 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5389 (if res |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5390 (or c-record-found-types t))))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5391 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5392 (defun c-backward-<>-arglist (all-types &optional limit) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5393 ;; The point is assumed to be directly after a ">". Try to treat it |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5394 ;; as the close paren of an angle bracket arglist and move back to |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5395 ;; the corresponding "<". If successful, the point is left at |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5396 ;; the "<" and t is returned, otherwise the point isn't moved and |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5397 ;; nil is returned. ALL-TYPES is passed on to |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5398 ;; `c-forward-<>-arglist'. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5399 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5400 ;; If the optional LIMIT is given, it bounds the backward search. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5401 ;; It's then assumed to be at a syntactically relevant position. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5402 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5403 ;; This is a wrapper around `c-forward-<>-arglist'. See that |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5404 ;; function for more details. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5405 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5406 (let ((start (point))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5407 (backward-char) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5408 (if (and (not c-parse-and-markup-<>-arglists) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5409 (c-get-char-property (point) 'syntax-table)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5410 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5411 (if (and (c-go-up-list-backward) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5412 (eq (char-after) ?<)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5413 t |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5414 ;; See corresponding note in `c-forward-<>-arglist'. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5415 (goto-char start) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5416 nil) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5417 |
75027
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
5418 (while (progn |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5419 (c-syntactic-skip-backward "^<;{}" limit t) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5420 |
75027
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
5421 (and |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
5422 (if (eq (char-before) ?<) |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
5423 t |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
5424 ;; Stopped at bob or a char that isn't allowed in an |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
5425 ;; arglist, so we've failed. |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
5426 (goto-char start) |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
5427 nil) |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
5428 |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
5429 (if (> (point) |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
5430 (progn (c-beginning-of-current-token) |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
5431 (point))) |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
5432 ;; If we moved then the "<" was part of some |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
5433 ;; multicharacter token. |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
5434 t |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
5435 |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
5436 (backward-char) |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
5437 (let ((beg-pos (point))) |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
5438 (if (c-forward-<>-arglist all-types) |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
5439 (cond ((= (point) start) |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
5440 ;; Matched the arglist. Break the while. |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
5441 (goto-char beg-pos) |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
5442 nil) |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
5443 ((> (point) start) |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
5444 ;; We started from a non-paren ">" inside an |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
5445 ;; arglist. |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
5446 (goto-char start) |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
5447 nil) |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
5448 (t |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
5449 ;; Matched a shorter arglist. Can be a nested |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
5450 ;; one so continue looking. |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
5451 (goto-char beg-pos) |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
5452 t)) |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
5453 t)))))) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5454 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5455 (/= (point) start)))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5456 |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5457 (defun c-forward-name () |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5458 ;; Move forward over a complete name if at the beginning of one, |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5459 ;; stopping at the next following token. If the point is not at |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5460 ;; something that are recognized as name then it stays put. A name |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5461 ;; could be something as simple as "foo" in C or something as |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5462 ;; complex as "X<Y<class A<int>::B, BIT_MAX >> b>, ::operator<> :: |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5463 ;; Z<(a>b)> :: operator const X<&foo>::T Q::G<unsigned short |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5464 ;; int>::*volatile const" in C++ (this function is actually little |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5465 ;; more than a `looking-at' call in all modes except those that, |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5466 ;; like C++, have `c-recognize-<>-arglists' set). Return nil if no |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5467 ;; name is found, 'template if it's an identifier ending with an |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5468 ;; angle bracket arglist, 'operator of it's an operator identifier, |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5469 ;; or t if it's some other kind of name. |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5470 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5471 ;; This function records identifier ranges on |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5472 ;; `c-record-type-identifiers' and `c-record-ref-identifiers' if |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5473 ;; `c-record-type-identifiers' is non-nil. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5474 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5475 ;; This function might do hidden buffer changes. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5476 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5477 (let ((pos (point)) (start (point)) res id-start id-end |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5478 ;; Turn off `c-promote-possible-types' here since we might |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5479 ;; call `c-forward-<>-arglist' and we don't want it to promote |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5480 ;; every suspect thing in the arglist to a type. We're |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5481 ;; typically called from `c-forward-type' in this case, and |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5482 ;; the caller only wants the top level type that it finds to |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5483 ;; be promoted. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5484 c-promote-possible-types) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5485 (while |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5486 (and |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5487 (looking-at c-identifier-key) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5488 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5489 (progn |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5490 ;; Check for keyword. We go to the last symbol in |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5491 ;; `c-identifier-key' first. |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5492 (goto-char (setq id-end (match-end 0))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5493 (c-simple-skip-symbol-backward) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5494 (setq id-start (point)) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5495 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5496 (if (looking-at c-keywords-regexp) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5497 (when (and (c-major-mode-is 'c++-mode) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5498 (looking-at |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5499 (cc-eval-when-compile |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5500 (concat "\\(operator\\|\\(template\\)\\)" |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5501 "\\(" (c-lang-const c-nonsymbol-key c++) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5502 "\\|$\\)"))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5503 (if (match-beginning 2) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5504 ;; "template" is only valid inside an |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5505 ;; identifier if preceded by "::". |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5506 (save-excursion |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5507 (c-backward-syntactic-ws) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5508 (and (c-safe (backward-char 2) t) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5509 (looking-at "::"))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5510 t)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5511 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5512 ;; Handle a C++ operator or template identifier. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5513 (goto-char id-end) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5514 (c-forward-syntactic-ws) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5515 (cond ((eq (char-before id-end) ?e) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5516 ;; Got "... ::template". |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5517 (let ((subres (c-forward-name))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5518 (when subres |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5519 (setq pos (point) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5520 res subres)))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5521 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5522 ((looking-at c-identifier-start) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5523 ;; Got a cast operator. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5524 (when (c-forward-type) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5525 (setq pos (point) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5526 res 'operator) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5527 ;; Now we should match a sequence of either |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5528 ;; '*', '&' or a name followed by ":: *", |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5529 ;; where each can be followed by a sequence |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5530 ;; of `c-opt-type-modifier-key'. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5531 (while (cond ((looking-at "[*&]") |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5532 (goto-char (match-end 0)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5533 t) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5534 ((looking-at c-identifier-start) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5535 (and (c-forward-name) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5536 (looking-at "::") |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5537 (progn |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5538 (goto-char (match-end 0)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5539 (c-forward-syntactic-ws) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5540 (eq (char-after) ?*)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5541 (progn |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5542 (forward-char) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5543 t)))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5544 (while (progn |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5545 (c-forward-syntactic-ws) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5546 (setq pos (point)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5547 (looking-at c-opt-type-modifier-key)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5548 (goto-char (match-end 1)))))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5549 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5550 ((looking-at c-overloadable-operators-regexp) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5551 ;; Got some other operator. |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5552 (setq c-last-identifier-range |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5553 (cons (point) (match-end 0))) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5554 (goto-char (match-end 0)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5555 (c-forward-syntactic-ws) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5556 (setq pos (point) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5557 res 'operator))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5558 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5559 nil) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5560 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5561 ;; `id-start' is equal to `id-end' if we've jumped over |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5562 ;; an identifier that doesn't end with a symbol token. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5563 ;; That can occur e.g. for Java import directives on the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5564 ;; form "foo.bar.*". |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5565 (when (and id-start (/= id-start id-end)) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5566 (setq c-last-identifier-range |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5567 (cons id-start id-end))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5568 (goto-char id-end) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5569 (c-forward-syntactic-ws) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5570 (setq pos (point) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5571 res t))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5572 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5573 (progn |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5574 (goto-char pos) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5575 (when (or c-opt-identifier-concat-key |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5576 c-recognize-<>-arglists) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5577 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5578 (cond |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5579 ((and c-opt-identifier-concat-key |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5580 (looking-at c-opt-identifier-concat-key)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5581 ;; Got a concatenated identifier. This handles the |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5582 ;; cases with tricky syntactic whitespace that aren't |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5583 ;; covered in `c-identifier-key'. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5584 (goto-char (match-end 0)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5585 (c-forward-syntactic-ws) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5586 t) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5587 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5588 ((and c-recognize-<>-arglists |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5589 (eq (char-after) ?<)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5590 ;; Maybe an angle bracket arglist. |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5591 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5592 (when (let (c-record-type-identifiers |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5593 c-record-found-types) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5594 (c-forward-<>-arglist nil)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5595 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5596 (c-add-type start (1+ pos)) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5597 (c-forward-syntactic-ws) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5598 (setq pos (point) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5599 c-last-identifier-range nil) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5600 |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5601 (if (and c-opt-identifier-concat-key |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5602 (looking-at c-opt-identifier-concat-key)) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5603 |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5604 ;; Continue if there's an identifier concatenation |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5605 ;; operator after the template argument. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5606 (progn |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5607 (when (and c-record-type-identifiers id-start) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5608 (c-record-ref-id (cons id-start id-end))) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5609 (forward-char 2) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5610 (c-forward-syntactic-ws) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5611 t) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5612 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5613 (when (and c-record-type-identifiers id-start) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5614 (c-record-type-id (cons id-start id-end))) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5615 (setq res 'template) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5616 nil))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5617 ))))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5618 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5619 (goto-char pos) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5620 res)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5621 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5622 (defun c-forward-type () |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5623 ;; Move forward over a type spec if at the beginning of one, |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5624 ;; stopping at the next following token. Return t if it's a known |
56646
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
5625 ;; type that can't be a name or other expression, 'known if it's an |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
5626 ;; otherwise known type (according to `*-font-lock-extra-types'), |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
5627 ;; 'prefix if it's a known prefix of a type, 'found if it's a type |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
5628 ;; that matches one in `c-found-types', 'maybe if it's an identfier |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
5629 ;; that might be a type, or nil if it can't be a type (the point |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
5630 ;; isn't moved then). The point is assumed to be at the beginning |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
5631 ;; of a token. |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5632 ;; |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5633 ;; Note that this function doesn't skip past the brace definition |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5634 ;; that might be considered part of the type, e.g. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5635 ;; "enum {a, b, c} foo". |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5636 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5637 ;; This function records identifier ranges on |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5638 ;; `c-record-type-identifiers' and `c-record-ref-identifiers' if |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5639 ;; `c-record-type-identifiers' is non-nil. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5640 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5641 ;; This function might do hidden buffer changes. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5642 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5643 (let ((start (point)) pos res name-res id-start id-end id-range) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5644 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5645 ;; Skip leading type modifiers. If any are found we know it's a |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5646 ;; prefix of a type. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5647 (when c-opt-type-modifier-key |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5648 (while (looking-at c-opt-type-modifier-key) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5649 (goto-char (match-end 1)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5650 (c-forward-syntactic-ws) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5651 (setq res 'prefix))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5652 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5653 (cond |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5654 ((looking-at c-type-prefix-key) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5655 ;; Looking at a keyword that prefixes a type identifier, |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5656 ;; e.g. "class". |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5657 (goto-char (match-end 1)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5658 (c-forward-syntactic-ws) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5659 (setq pos (point)) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5660 (if (memq (setq name-res (c-forward-name)) '(t template)) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5661 (progn |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5662 (when (eq name-res t) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5663 ;; In many languages the name can be used without the |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5664 ;; prefix, so we add it to `c-found-types'. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5665 (c-add-type pos (point)) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5666 (when (and c-record-type-identifiers |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5667 c-last-identifier-range) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5668 (c-record-type-id c-last-identifier-range))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5669 (setq res t)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5670 ;; Invalid syntax. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5671 (goto-char start) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5672 (setq res nil))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5673 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5674 ((progn |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5675 (setq pos nil) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5676 (if (looking-at c-identifier-start) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5677 (save-excursion |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5678 (setq id-start (point) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5679 name-res (c-forward-name)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5680 (when name-res |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5681 (setq id-end (point) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5682 id-range c-last-identifier-range)))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5683 (and (cond ((looking-at c-primitive-type-key) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5684 (setq res t)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5685 ((c-with-syntax-table c-identifier-syntax-table |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5686 (looking-at c-known-type-key)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5687 (setq res 'known))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5688 (or (not id-end) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5689 (>= (save-excursion |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5690 (save-match-data |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5691 (goto-char (match-end 1)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5692 (c-forward-syntactic-ws) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5693 (setq pos (point)))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5694 id-end) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5695 (setq res nil)))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5696 ;; Looking at a primitive or known type identifier. We've |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5697 ;; checked for a name first so that we don't go here if the |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5698 ;; known type match only is a prefix of another name. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5699 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5700 (setq id-end (match-end 1)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5701 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5702 (when (and c-record-type-identifiers |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5703 (or c-promote-possible-types (eq res t))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5704 (c-record-type-id (cons (match-beginning 1) (match-end 1)))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5705 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5706 (if (and c-opt-type-component-key |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5707 (save-match-data |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5708 (looking-at c-opt-type-component-key))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5709 ;; There might be more keywords for the type. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5710 (let (safe-pos) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5711 (c-forward-keyword-clause 1) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5712 (while (progn |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5713 (setq safe-pos (point)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5714 (looking-at c-opt-type-component-key)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5715 (when (and c-record-type-identifiers |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5716 (looking-at c-primitive-type-key)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5717 (c-record-type-id (cons (match-beginning 1) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5718 (match-end 1)))) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5719 (c-forward-keyword-clause 1)) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5720 (if (looking-at c-primitive-type-key) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5721 (progn |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5722 (when c-record-type-identifiers |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5723 (c-record-type-id (cons (match-beginning 1) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5724 (match-end 1)))) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5725 (c-forward-keyword-clause 1) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5726 (setq res t)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5727 (goto-char safe-pos) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5728 (setq res 'prefix))) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5729 (unless (save-match-data (c-forward-keyword-clause 1)) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5730 (if pos |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5731 (goto-char pos) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5732 (goto-char (match-end 1)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5733 (c-forward-syntactic-ws))))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5734 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5735 (name-res |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5736 (cond ((eq name-res t) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5737 ;; A normal identifier. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5738 (goto-char id-end) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5739 (if (or res c-promote-possible-types) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5740 (progn |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5741 (c-add-type id-start id-end) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5742 (when (and c-record-type-identifiers id-range) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5743 (c-record-type-id id-range)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5744 (unless res |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5745 (setq res 'found))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5746 (setq res (if (c-check-type id-start id-end) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5747 ;; It's an identifier that has been used as |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5748 ;; a type somewhere else. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5749 'found |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5750 ;; It's an identifier that might be a type. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5751 'maybe)))) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5752 ((eq name-res 'template) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5753 ;; A template is a type. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5754 (goto-char id-end) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5755 (setq res t)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5756 (t |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5757 ;; Otherwise it's an operator identifier, which is not a type. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5758 (goto-char start) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5759 (setq res nil))))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5760 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5761 (when res |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5762 ;; Skip trailing type modifiers. If any are found we know it's |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5763 ;; a type. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5764 (when c-opt-type-modifier-key |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5765 (while (looking-at c-opt-type-modifier-key) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5766 (goto-char (match-end 1)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5767 (c-forward-syntactic-ws) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5768 (setq res t))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5769 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5770 ;; Step over any type suffix operator. Do not let the existence |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5771 ;; of these alter the classification of the found type, since |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5772 ;; these operators typically are allowed in normal expressions |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5773 ;; too. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5774 (when c-opt-type-suffix-key |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5775 (while (looking-at c-opt-type-suffix-key) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5776 (goto-char (match-end 1)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5777 (c-forward-syntactic-ws))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5778 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5779 (when c-opt-type-concat-key |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5780 ;; Look for a trailing operator that concatenates the type |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5781 ;; with a following one, and if so step past that one through |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5782 ;; a recursive call. Note that we don't record concatenated |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5783 ;; types in `c-found-types' - it's the component types that |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5784 ;; are recorded when appropriate. |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5785 (setq pos (point)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5786 (let* ((c-promote-possible-types (or (memq res '(t known)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5787 c-promote-possible-types)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5788 ;; If we can't promote then set `c-record-found-types' so that |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5789 ;; we can merge in the types from the second part afterwards if |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5790 ;; it turns out to be a known type there. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5791 (c-record-found-types (and c-record-type-identifiers |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5792 (not c-promote-possible-types))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5793 subres) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5794 (if (and (looking-at c-opt-type-concat-key) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5795 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5796 (progn |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5797 (goto-char (match-end 1)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5798 (c-forward-syntactic-ws) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5799 (setq subres (c-forward-type)))) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5800 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5801 (progn |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5802 ;; If either operand certainly is a type then both are, but we |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5803 ;; don't let the existence of the operator itself promote two |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5804 ;; uncertain types to a certain one. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5805 (cond ((eq res t)) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5806 ((eq subres t) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5807 (unless (eq name-res 'template) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5808 (c-add-type id-start id-end)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5809 (when (and c-record-type-identifiers id-range) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5810 (c-record-type-id id-range)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5811 (setq res t)) |
56646
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
5812 ((eq res 'known)) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5813 ((eq subres 'known) |
56646
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
5814 (setq res 'known)) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5815 ((eq res 'found)) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5816 ((eq subres 'found) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5817 (setq res 'found)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5818 (t |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5819 (setq res 'maybe))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5820 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5821 (when (and (eq res t) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5822 (consp c-record-found-types)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5823 ;; Merge in the ranges of any types found by the second |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5824 ;; `c-forward-type'. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5825 (setq c-record-type-identifiers |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5826 ;; `nconc' doesn't mind that the tail of |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5827 ;; `c-record-found-types' is t. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5828 (nconc c-record-found-types |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5829 c-record-type-identifiers)))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5830 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5831 (goto-char pos)))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5832 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5833 (when (and c-record-found-types (memq res '(known found)) id-range) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5834 (setq c-record-found-types |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5835 (cons id-range c-record-found-types)))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5836 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5837 ;;(message "c-forward-type %s -> %s: %s" start (point) res) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5838 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5839 res)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5840 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5841 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5842 ;; Handling of large scale constructs like statements and declarations. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
5843 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5844 ;; Macro used inside `c-forward-decl-or-cast-1'. It ought to be a |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5845 ;; defsubst or perhaps even a defun, but it contains lots of free |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5846 ;; variables that refer to things inside `c-forward-decl-or-cast-1'. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5847 (defmacro c-fdoc-shift-type-backward (&optional short) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5848 ;; `c-forward-decl-or-cast-1' can consume an arbitrary length list |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5849 ;; of types when parsing a declaration, which means that it |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5850 ;; sometimes consumes the identifier in the declaration as a type. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5851 ;; This is used to "backtrack" and make the last type be treated as |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5852 ;; an identifier instead. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5853 `(progn |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5854 ,(unless short |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5855 ;; These identifiers are bound only in the inner let. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5856 '(setq identifier-type at-type |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5857 identifier-start type-start |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5858 got-parens nil |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5859 got-identifier t |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5860 got-suffix t |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5861 got-suffix-after-parens id-start |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5862 paren-depth 0)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5863 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5864 (if (setq at-type (if (eq backup-at-type 'prefix) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5865 t |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5866 backup-at-type)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5867 (setq type-start backup-type-start |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5868 id-start backup-id-start) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5869 (setq type-start start-pos |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5870 id-start start-pos)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5871 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5872 ;; When these flags already are set we've found specifiers that |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5873 ;; unconditionally signal these attributes - backtracking doesn't |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5874 ;; change that. So keep them set in that case. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5875 (or at-type-decl |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5876 (setq at-type-decl backup-at-type-decl)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5877 (or maybe-typeless |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5878 (setq maybe-typeless backup-maybe-typeless)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5879 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5880 ,(unless short |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5881 ;; This identifier is bound only in the inner let. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5882 '(setq start id-start)))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5883 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5884 (defun c-forward-decl-or-cast-1 (preceding-token-end context last-cast-end) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5885 ;; Move forward over a declaration or a cast if at the start of one. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5886 ;; The point is assumed to be at the start of some token. Nil is |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5887 ;; returned if no declaration or cast is recognized, and the point |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5888 ;; is clobbered in that case. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5889 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5890 ;; If a declaration is parsed: |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5891 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5892 ;; The point is left at the first token after the first complete |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5893 ;; declarator, if there is one. The return value is a cons where |
79942
99c850a55c1c
Correct typos, enhance comments.
Alan Mackenzie <acm@muc.de>
parents:
79838
diff
changeset
|
5894 ;; the car is the position of the first token in the declarator. (See |
99c850a55c1c
Correct typos, enhance comments.
Alan Mackenzie <acm@muc.de>
parents:
79838
diff
changeset
|
5895 ;; below for the cdr.) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5896 ;; Some examples: |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5897 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5898 ;; void foo (int a, char *b) stuff ... |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5899 ;; car ^ ^ point |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5900 ;; float (*a)[], b; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5901 ;; car ^ ^ point |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5902 ;; unsigned int a = c_style_initializer, b; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5903 ;; car ^ ^ point |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5904 ;; unsigned int a (cplusplus_style_initializer), b; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5905 ;; car ^ ^ point (might change) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5906 ;; class Foo : public Bar {} |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5907 ;; car ^ ^ point |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5908 ;; class PikeClass (int a, string b) stuff ... |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5909 ;; car ^ ^ point |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5910 ;; enum bool; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5911 ;; car ^ ^ point |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5912 ;; enum bool flag; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5913 ;; car ^ ^ point |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5914 ;; void cplusplus_function (int x) throw (Bad); |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5915 ;; car ^ ^ point |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5916 ;; Foo::Foo (int b) : Base (b) {} |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5917 ;; car ^ ^ point |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5918 ;; |
79942
99c850a55c1c
Correct typos, enhance comments.
Alan Mackenzie <acm@muc.de>
parents:
79838
diff
changeset
|
5919 ;; The cdr of the return value is non-nil iff a `c-typedef-decl-kwds' |
99c850a55c1c
Correct typos, enhance comments.
Alan Mackenzie <acm@muc.de>
parents:
79838
diff
changeset
|
5920 ;; specifier (e.g. class, struct, enum, typedef) is found in the |
99c850a55c1c
Correct typos, enhance comments.
Alan Mackenzie <acm@muc.de>
parents:
79838
diff
changeset
|
5921 ;; declaration, i.e. the declared identifier(s) are types. |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5922 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5923 ;; If a cast is parsed: |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5924 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5925 ;; The point is left at the first token after the closing paren of |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5926 ;; the cast. The return value is `cast'. Note that the start |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5927 ;; position must be at the first token inside the cast parenthesis |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5928 ;; to recognize it. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5929 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5930 ;; PRECEDING-TOKEN-END is the first position after the preceding |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5931 ;; token, i.e. on the other side of the syntactic ws from the point. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5932 ;; Use a value less than or equal to (point-min) if the point is at |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5933 ;; the first token in (the visible part of) the buffer. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5934 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5935 ;; CONTEXT is a symbol that describes the context at the point: |
79942
99c850a55c1c
Correct typos, enhance comments.
Alan Mackenzie <acm@muc.de>
parents:
79838
diff
changeset
|
5936 ;; 'decl In a comma-separated declaration context (typically |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5937 ;; inside a function declaration arglist). |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5938 ;; '<> In an angle bracket arglist. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5939 ;; 'arglist Some other type of arglist. |
98693
69a04789c5f0
Amend several doc strings and comments.
Alan Mackenzie <acm@muc.de>
parents:
96145
diff
changeset
|
5940 ;; nil Some other context or unknown context. Includes |
69a04789c5f0
Amend several doc strings and comments.
Alan Mackenzie <acm@muc.de>
parents:
96145
diff
changeset
|
5941 ;; within the parens of an if, for, ... construct. |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5942 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5943 ;; LAST-CAST-END is the first token after the closing paren of a |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5944 ;; preceding cast, or nil if none is known. If |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5945 ;; `c-forward-decl-or-cast-1' is used in succession, it should be |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5946 ;; the position after the closest preceding call where a cast was |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5947 ;; matched. In that case it's used to discover chains of casts like |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5948 ;; "(a) (b) c". |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5949 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5950 ;; This function records identifier ranges on |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5951 ;; `c-record-type-identifiers' and `c-record-ref-identifiers' if |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5952 ;; `c-record-type-identifiers' is non-nil. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5953 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5954 ;; This function might do hidden buffer changes. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5955 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5956 (let (;; `start-pos' is used below to point to the start of the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5957 ;; first type, i.e. after any leading specifiers. It might |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5958 ;; also point at the beginning of the preceding syntactic |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5959 ;; whitespace. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5960 (start-pos (point)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5961 ;; Set to the result of `c-forward-type'. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5962 at-type |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5963 ;; The position of the first token in what we currently |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5964 ;; believe is the type in the declaration or cast, after any |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5965 ;; specifiers and their associated clauses. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5966 type-start |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5967 ;; The position of the first token in what we currently |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5968 ;; believe is the declarator for the first identifier. Set |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5969 ;; when the type is found, and moved forward over any |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5970 ;; `c-decl-hangon-kwds' and their associated clauses that |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5971 ;; occurs after the type. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5972 id-start |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5973 ;; These store `at-type', `type-start' and `id-start' of the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5974 ;; identifier before the one in those variables. The previous |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5975 ;; identifier might turn out to be the real type in a |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5976 ;; declaration if the last one has to be the declarator in it. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5977 ;; If `backup-at-type' is nil then the other variables have |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5978 ;; undefined values. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5979 backup-at-type backup-type-start backup-id-start |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5980 ;; Set if we've found a specifier that makes the defined |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5981 ;; identifier(s) types. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5982 at-type-decl |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5983 ;; Set if we've found a specifier that can start a declaration |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5984 ;; where there's no type. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5985 maybe-typeless |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5986 ;; If a specifier is found that also can be a type prefix, |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5987 ;; these flags are set instead of those above. If we need to |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5988 ;; back up an identifier, they are copied to the real flag |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5989 ;; variables. Thus they only take effect if we fail to |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5990 ;; interpret it as a type. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5991 backup-at-type-decl backup-maybe-typeless |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5992 ;; Whether we've found a declaration or a cast. We might know |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5993 ;; this before we've found the type in it. It's 'ids if we've |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5994 ;; found two consecutive identifiers (usually a sure sign, but |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5995 ;; we should allow that in labels too), and t if we've found a |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5996 ;; specifier keyword (a 100% sure sign). |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5997 at-decl-or-cast |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5998 ;; Set when we need to back up to parse this as a declaration |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
5999 ;; but not as a cast. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6000 backup-if-not-cast |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6001 ;; For casts, the return position. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6002 cast-end |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6003 ;; Save `c-record-type-identifiers' and |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6004 ;; `c-record-ref-identifiers' since ranges are recorded |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6005 ;; speculatively and should be thrown away if it turns out |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6006 ;; that it isn't a declaration or cast. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6007 (save-rec-type-ids c-record-type-identifiers) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6008 (save-rec-ref-ids c-record-ref-identifiers)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6009 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6010 ;; Check for a type. Unknown symbols are treated as possible |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6011 ;; types, but they could also be specifiers disguised through |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6012 ;; macros like __INLINE__, so we recognize both types and known |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6013 ;; specifiers after them too. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6014 (while |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6015 (let* ((start (point)) kwd-sym kwd-clause-end found-type) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6016 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6017 ;; Look for a specifier keyword clause. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6018 (when (looking-at c-prefix-spec-kwds-re) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6019 (setq kwd-sym (c-keyword-sym (match-string 1))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6020 (save-excursion |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6021 (c-forward-keyword-clause 1) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6022 (setq kwd-clause-end (point)))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6023 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6024 (when (setq found-type (c-forward-type)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6025 ;; Found a known or possible type or a prefix of a known type. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6026 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6027 (when at-type |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6028 ;; Got two identifiers with nothing but whitespace |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6029 ;; between them. That can only happen in declarations. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6030 (setq at-decl-or-cast 'ids) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6031 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6032 (when (eq at-type 'found) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6033 ;; If the previous identifier is a found type we |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6034 ;; record it as a real one; it might be some sort of |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6035 ;; alias for a prefix like "unsigned". |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6036 (save-excursion |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6037 (goto-char type-start) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6038 (let ((c-promote-possible-types t)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6039 (c-forward-type))))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6040 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6041 (setq backup-at-type at-type |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6042 backup-type-start type-start |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6043 backup-id-start id-start |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6044 at-type found-type |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6045 type-start start |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6046 id-start (point) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6047 ;; The previous ambiguous specifier/type turned out |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6048 ;; to be a type since we've parsed another one after |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6049 ;; it, so clear these backup flags. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6050 backup-at-type-decl nil |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6051 backup-maybe-typeless nil)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6052 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6053 (if kwd-sym |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6054 (progn |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6055 ;; Handle known specifier keywords and |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6056 ;; `c-decl-hangon-kwds' which can occur after known |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6057 ;; types. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6058 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6059 (if (c-keyword-member kwd-sym 'c-decl-hangon-kwds) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6060 ;; It's a hang-on keyword that can occur anywhere. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6061 (progn |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6062 (setq at-decl-or-cast t) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6063 (if at-type |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6064 ;; Move the identifier start position if |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6065 ;; we've passed a type. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6066 (setq id-start kwd-clause-end) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6067 ;; Otherwise treat this as a specifier and |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6068 ;; move the fallback position. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6069 (setq start-pos kwd-clause-end)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6070 (goto-char kwd-clause-end)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6071 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6072 ;; It's an ordinary specifier so we know that |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6073 ;; anything before this can't be the type. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6074 (setq backup-at-type nil |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6075 start-pos kwd-clause-end) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6076 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6077 (if found-type |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6078 ;; It's ambiguous whether this keyword is a |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6079 ;; specifier or a type prefix, so set the backup |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6080 ;; flags. (It's assumed that `c-forward-type' |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6081 ;; moved further than `c-forward-keyword-clause'.) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6082 (progn |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6083 (when (c-keyword-member kwd-sym 'c-typedef-decl-kwds) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6084 (setq backup-at-type-decl t)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6085 (when (c-keyword-member kwd-sym 'c-typeless-decl-kwds) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6086 (setq backup-maybe-typeless t))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6087 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6088 (when (c-keyword-member kwd-sym 'c-typedef-decl-kwds) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6089 (setq at-type-decl t)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6090 (when (c-keyword-member kwd-sym 'c-typeless-decl-kwds) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6091 (setq maybe-typeless t)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6092 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6093 ;; Haven't matched a type so it's an umambiguous |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6094 ;; specifier keyword and we know we're in a |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6095 ;; declaration. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6096 (setq at-decl-or-cast t) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6097 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6098 (goto-char kwd-clause-end)))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6099 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6100 ;; If the type isn't known we continue so that we'll jump |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6101 ;; over all specifiers and type identifiers. The reason |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6102 ;; to do this for a known type prefix is to make things |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6103 ;; like "unsigned INT16" work. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6104 (and found-type (not (eq found-type t)))))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6105 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6106 (cond |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6107 ((eq at-type t) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6108 ;; If a known type was found, we still need to skip over any |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6109 ;; hangon keyword clauses after it. Otherwise it has already |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6110 ;; been done in the loop above. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6111 (while (looking-at c-decl-hangon-key) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6112 (c-forward-keyword-clause 1)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6113 (setq id-start (point))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6114 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6115 ((eq at-type 'prefix) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6116 ;; A prefix type is itself a primitive type when it's not |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6117 ;; followed by another type. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6118 (setq at-type t)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6119 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6120 ((not at-type) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6121 ;; Got no type but set things up to continue anyway to handle |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6122 ;; the various cases when a declaration doesn't start with a |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6123 ;; type. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6124 (setq id-start start-pos)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6125 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6126 ((and (eq at-type 'maybe) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6127 (c-major-mode-is 'c++-mode)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6128 ;; If it's C++ then check if the last "type" ends on the form |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6129 ;; "foo::foo" or "foo::~foo", i.e. if it's the name of a |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6130 ;; (con|de)structor. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6131 (save-excursion |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6132 (let (name end-2 end-1) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6133 (goto-char id-start) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6134 (c-backward-syntactic-ws) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6135 (setq end-2 (point)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6136 (when (and |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6137 (c-simple-skip-symbol-backward) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6138 (progn |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6139 (setq name |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6140 (buffer-substring-no-properties (point) end-2)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6141 ;; Cheating in the handling of syntactic ws below. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6142 (< (skip-chars-backward ":~ \t\n\r\v\f") 0)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6143 (progn |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6144 (setq end-1 (point)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6145 (c-simple-skip-symbol-backward)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6146 (>= (point) type-start) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6147 (equal (buffer-substring-no-properties (point) end-1) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6148 name)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6149 ;; It is a (con|de)structor name. In that case the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6150 ;; declaration is typeless so zap out any preceding |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6151 ;; identifier(s) that we might have taken as types. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6152 (goto-char type-start) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6153 (setq at-type nil |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6154 backup-at-type nil |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6155 id-start type-start)))))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6156 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6157 ;; Check for and step over a type decl expression after the thing |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6158 ;; that is or might be a type. This can't be skipped since we |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6159 ;; need the correct end position of the declarator for |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6160 ;; `max-type-decl-end-*'. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6161 (let ((start (point)) (paren-depth 0) pos |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6162 ;; True if there's a non-open-paren match of |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6163 ;; `c-type-decl-prefix-key'. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6164 got-prefix |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6165 ;; True if the declarator is surrounded by a parenthesis pair. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6166 got-parens |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6167 ;; True if there is an identifier in the declarator. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6168 got-identifier |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6169 ;; True if there's a non-close-paren match of |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6170 ;; `c-type-decl-suffix-key'. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6171 got-suffix |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6172 ;; True if there's a prefix match outside the outermost |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6173 ;; paren pair that surrounds the declarator. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6174 got-prefix-before-parens |
76986
469570420bff
Fix fontification of labels, and other things with ":".
Alan Mackenzie <acm@muc.de>
parents:
76723
diff
changeset
|
6175 ;; True if there's a suffix match outside the outermost |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6176 ;; paren pair that surrounds the declarator. The value is |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6177 ;; the position of the first suffix match. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6178 got-suffix-after-parens |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6179 ;; True if we've parsed the type decl to a token that is |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6180 ;; known to end declarations in this context. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6181 at-decl-end |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6182 ;; The earlier values of `at-type' and `type-start' if we've |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6183 ;; shifted the type backwards. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6184 identifier-type identifier-start |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6185 ;; If `c-parse-and-markup-<>-arglists' is set we need to |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6186 ;; turn it off during the name skipping below to avoid |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6187 ;; getting `c-type' properties that might be bogus. That |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6188 ;; can happen since we don't know if |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6189 ;; `c-restricted-<>-arglists' will be correct inside the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6190 ;; arglist paren that gets entered. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6191 c-parse-and-markup-<>-arglists) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6192 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6193 (goto-char id-start) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6194 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6195 ;; Skip over type decl prefix operators. (Note similar code in |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6196 ;; `c-font-lock-declarators'.) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6197 (while (and (looking-at c-type-decl-prefix-key) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6198 (if (and (c-major-mode-is 'c++-mode) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6199 (match-beginning 2)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6200 ;; If the second submatch matches in C++ then |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6201 ;; we're looking at an identifier that's a |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6202 ;; prefix only if it specifies a member pointer. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6203 (when (setq got-identifier (c-forward-name)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6204 (if (looking-at "\\(::\\)") |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6205 ;; We only check for a trailing "::" and |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6206 ;; let the "*" that should follow be |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6207 ;; matched in the next round. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6208 (progn (setq got-identifier nil) t) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6209 ;; It turned out to be the real identifier, |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6210 ;; so stop. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6211 nil)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6212 t)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6213 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6214 (if (eq (char-after) ?\() |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6215 (progn |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6216 (setq paren-depth (1+ paren-depth)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6217 (forward-char)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6218 (unless got-prefix-before-parens |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6219 (setq got-prefix-before-parens (= paren-depth 0))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6220 (setq got-prefix t) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6221 (goto-char (match-end 1))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6222 (c-forward-syntactic-ws)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6223 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6224 (setq got-parens (> paren-depth 0)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6225 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6226 ;; Skip over an identifier. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6227 (or got-identifier |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6228 (and (looking-at c-identifier-start) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6229 (setq got-identifier (c-forward-name)))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6230 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6231 ;; Skip over type decl suffix operators. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6232 (while (if (looking-at c-type-decl-suffix-key) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6233 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6234 (if (eq (char-after) ?\)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6235 (when (> paren-depth 0) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6236 (setq paren-depth (1- paren-depth)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6237 (forward-char) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6238 t) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6239 (when (if (save-match-data (looking-at "\\s\(")) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6240 (c-safe (c-forward-sexp 1) t) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6241 (goto-char (match-end 1)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6242 t) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6243 (when (and (not got-suffix-after-parens) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6244 (= paren-depth 0)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6245 (setq got-suffix-after-parens (match-beginning 0))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6246 (setq got-suffix t))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6247 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6248 ;; No suffix matched. We might have matched the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6249 ;; identifier as a type and the open paren of a |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6250 ;; function arglist as a type decl prefix. In that |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6251 ;; case we should "backtrack": Reinterpret the last |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6252 ;; type as the identifier, move out of the arglist and |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6253 ;; continue searching for suffix operators. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6254 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6255 ;; Do this even if there's no preceding type, to cope |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6256 ;; with old style function declarations in K&R C, |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6257 ;; (con|de)structors in C++ and `c-typeless-decl-kwds' |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6258 ;; style declarations. That isn't applicable in an |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6259 ;; arglist context, though. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6260 (when (and (= paren-depth 1) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6261 (not got-prefix-before-parens) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6262 (not (eq at-type t)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6263 (or backup-at-type |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6264 maybe-typeless |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6265 backup-maybe-typeless |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6266 (when c-recognize-typeless-decls |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6267 (not context))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6268 (setq pos (c-up-list-forward (point))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6269 (eq (char-before pos) ?\))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6270 (c-fdoc-shift-type-backward) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6271 (goto-char pos) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6272 t)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6273 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6274 (c-forward-syntactic-ws)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6275 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6276 (when (and (or maybe-typeless backup-maybe-typeless) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6277 (not got-identifier) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6278 (not got-prefix) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6279 at-type) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6280 ;; Have found no identifier but `c-typeless-decl-kwds' has |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6281 ;; matched so we know we're inside a declaration. The |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6282 ;; preceding type must be the identifier instead. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6283 (c-fdoc-shift-type-backward)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6284 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6285 (setq |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6286 at-decl-or-cast |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6287 (catch 'at-decl-or-cast |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6288 |
98693
69a04789c5f0
Amend several doc strings and comments.
Alan Mackenzie <acm@muc.de>
parents:
96145
diff
changeset
|
6289 ;; CASE 1 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6290 (when (> paren-depth 0) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6291 ;; Encountered something inside parens that isn't matched by |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6292 ;; the `c-type-decl-*' regexps, so it's not a type decl |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6293 ;; expression. Try to skip out to the same paren depth to |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6294 ;; not confuse the cast check below. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6295 (c-safe (goto-char (scan-lists (point) 1 paren-depth))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6296 ;; If we've found a specifier keyword then it's a |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6297 ;; declaration regardless. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6298 (throw 'at-decl-or-cast (eq at-decl-or-cast t))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6299 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6300 (setq at-decl-end |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6301 (looking-at (cond ((eq context '<>) "[,>]") |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6302 (context "[,\)]") |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6303 (t "[,;]")))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6304 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6305 ;; Now we've collected info about various characteristics of |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6306 ;; the construct we're looking at. Below follows a decision |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6307 ;; tree based on that. It's ordered to check more certain |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6308 ;; signs before less certain ones. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6309 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6310 (if got-identifier |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6311 (progn |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6312 |
98693
69a04789c5f0
Amend several doc strings and comments.
Alan Mackenzie <acm@muc.de>
parents:
96145
diff
changeset
|
6313 ;; CASE 2 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6314 (when (and (or at-type maybe-typeless) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6315 (not (or got-prefix got-parens))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6316 ;; Got another identifier directly after the type, so it's a |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6317 ;; declaration. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6318 (throw 'at-decl-or-cast t)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6319 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6320 (when (and got-parens |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6321 (not got-prefix) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6322 (not got-suffix-after-parens) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6323 (or backup-at-type |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6324 maybe-typeless |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6325 backup-maybe-typeless)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6326 ;; Got a declaration of the form "foo bar (gnu);" where we've |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6327 ;; recognized "bar" as the type and "gnu" as the declarator. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6328 ;; In this case it's however more likely that "bar" is the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6329 ;; declarator and "gnu" a function argument or initializer (if |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6330 ;; `c-recognize-paren-inits' is set), since the parens around |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6331 ;; "gnu" would be superfluous if it's a declarator. Shift the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6332 ;; type one step backward. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6333 (c-fdoc-shift-type-backward))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6334 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6335 ;; Found no identifier. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6336 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6337 (if backup-at-type |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6338 (progn |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6339 |
98693
69a04789c5f0
Amend several doc strings and comments.
Alan Mackenzie <acm@muc.de>
parents:
96145
diff
changeset
|
6340 ;; CASE 3 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6341 (when (= (point) start) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6342 ;; Got a plain list of identifiers. If a colon follows it's |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6343 ;; a valid label. Otherwise the last one probably is the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6344 ;; declared identifier and we should back up to the previous |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6345 ;; type, providing it isn't a cast. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6346 (if (eq (char-after) ?:) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6347 ;; If we've found a specifier keyword then it's a |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6348 ;; declaration regardless. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6349 (throw 'at-decl-or-cast (eq at-decl-or-cast t)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6350 (setq backup-if-not-cast t) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6351 (throw 'at-decl-or-cast t))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6352 |
98693
69a04789c5f0
Amend several doc strings and comments.
Alan Mackenzie <acm@muc.de>
parents:
96145
diff
changeset
|
6353 ;; CASE 4 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6354 (when (and got-suffix |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6355 (not got-prefix) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6356 (not got-parens)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6357 ;; Got a plain list of identifiers followed by some suffix. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6358 ;; If this isn't a cast then the last identifier probably is |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6359 ;; the declared one and we should back up to the previous |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6360 ;; type. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6361 (setq backup-if-not-cast t) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6362 (throw 'at-decl-or-cast t))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6363 |
98693
69a04789c5f0
Amend several doc strings and comments.
Alan Mackenzie <acm@muc.de>
parents:
96145
diff
changeset
|
6364 ;; CASE 5 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6365 (when (eq at-type t) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6366 ;; If the type is known we know that there can't be any |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6367 ;; identifier somewhere else, and it's only in declarations in |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6368 ;; e.g. function prototypes and in casts that the identifier may |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6369 ;; be left out. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6370 (throw 'at-decl-or-cast t)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6371 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6372 (when (= (point) start) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6373 ;; Only got a single identifier (parsed as a type so far). |
98693
69a04789c5f0
Amend several doc strings and comments.
Alan Mackenzie <acm@muc.de>
parents:
96145
diff
changeset
|
6374 ;; CASE 6 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6375 (if (and |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6376 ;; Check that the identifier isn't at the start of an |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6377 ;; expression. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6378 at-decl-end |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6379 (cond |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6380 ((eq context 'decl) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6381 ;; Inside an arglist that contains declarations. If K&R |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6382 ;; style declarations and parenthesis style initializers |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6383 ;; aren't allowed then the single identifier must be a |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6384 ;; type, else we require that it's known or found |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6385 ;; (primitive types are handled above). |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6386 (or (and (not c-recognize-knr-p) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6387 (not c-recognize-paren-inits)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6388 (memq at-type '(known found)))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6389 ((eq context '<>) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6390 ;; Inside a template arglist. Accept known and found |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6391 ;; types; other identifiers could just as well be |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6392 ;; constants in C++. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6393 (memq at-type '(known found))))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6394 (throw 'at-decl-or-cast t) |
98693
69a04789c5f0
Amend several doc strings and comments.
Alan Mackenzie <acm@muc.de>
parents:
96145
diff
changeset
|
6395 ;; CASE 7 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6396 ;; Can't be a valid declaration or cast, but if we've found a |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6397 ;; specifier it can't be anything else either, so treat it as |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6398 ;; an invalid/unfinished declaration or cast. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6399 (throw 'at-decl-or-cast at-decl-or-cast)))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6400 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6401 (if (and got-parens |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6402 (not got-prefix) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6403 (not context) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6404 (not (eq at-type t)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6405 (or backup-at-type |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6406 maybe-typeless |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6407 backup-maybe-typeless |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6408 (when c-recognize-typeless-decls |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6409 (or (not got-suffix) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6410 (not (looking-at |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6411 c-after-suffixed-type-maybe-decl-key)))))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6412 ;; Got an empty paren pair and a preceding type that probably |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6413 ;; really is the identifier. Shift the type backwards to make |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6414 ;; the last one the identifier. This is analogous to the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6415 ;; "backtracking" done inside the `c-type-decl-suffix-key' loop |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6416 ;; above. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6417 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6418 ;; Exception: In addition to the conditions in that |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6419 ;; "backtracking" code, do not shift backward if we're not |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6420 ;; looking at either `c-after-suffixed-type-decl-key' or "[;,]". |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6421 ;; Since there's no preceding type, the shift would mean that |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6422 ;; the declaration is typeless. But if the regexp doesn't match |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6423 ;; then we will simply fall through in the tests below and not |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6424 ;; recognize it at all, so it's better to try it as an abstract |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6425 ;; declarator instead. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6426 (c-fdoc-shift-type-backward) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6427 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6428 ;; Still no identifier. |
98693
69a04789c5f0
Amend several doc strings and comments.
Alan Mackenzie <acm@muc.de>
parents:
96145
diff
changeset
|
6429 ;; CASE 8 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6430 (when (and got-prefix (or got-parens got-suffix)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6431 ;; Require `got-prefix' together with either `got-parens' or |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6432 ;; `got-suffix' to recognize it as an abstract declarator: |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6433 ;; `got-parens' only is probably an empty function call. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6434 ;; `got-suffix' only can build an ordinary expression together |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6435 ;; with the preceding identifier which we've taken as a type. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6436 ;; We could actually accept on `got-prefix' only, but that can |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6437 ;; easily occur temporarily while writing an expression so we |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6438 ;; avoid that case anyway. We could do a better job if we knew |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6439 ;; the point when the fontification was invoked. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6440 (throw 'at-decl-or-cast t)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6441 |
98693
69a04789c5f0
Amend several doc strings and comments.
Alan Mackenzie <acm@muc.de>
parents:
96145
diff
changeset
|
6442 ;; CASE 9 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6443 (when (and at-type |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6444 (not got-prefix) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6445 (not got-parens) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6446 got-suffix-after-parens |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6447 (eq (char-after got-suffix-after-parens) ?\()) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6448 ;; Got a type, no declarator but a paren suffix. I.e. it's a |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6449 ;; normal function call afterall (or perhaps a C++ style object |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6450 ;; instantiation expression). |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6451 (throw 'at-decl-or-cast nil)))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6452 |
98693
69a04789c5f0
Amend several doc strings and comments.
Alan Mackenzie <acm@muc.de>
parents:
96145
diff
changeset
|
6453 ;; CASE 10 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6454 (when at-decl-or-cast |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6455 ;; By now we've located the type in the declaration that we know |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6456 ;; we're in. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6457 (throw 'at-decl-or-cast t)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6458 |
98693
69a04789c5f0
Amend several doc strings and comments.
Alan Mackenzie <acm@muc.de>
parents:
96145
diff
changeset
|
6459 ;; CASE 11 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6460 (when (and got-identifier |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6461 (not context) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6462 (looking-at c-after-suffixed-type-decl-key) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6463 (if (and got-parens |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6464 (not got-prefix) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6465 (not got-suffix) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6466 (not (eq at-type t))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6467 ;; Shift the type backward in the case that there's a |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6468 ;; single identifier inside parens. That can only |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6469 ;; occur in K&R style function declarations so it's |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6470 ;; more likely that it really is a function call. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6471 ;; Therefore we only do this after |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6472 ;; `c-after-suffixed-type-decl-key' has matched. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6473 (progn (c-fdoc-shift-type-backward) t) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6474 got-suffix-after-parens)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6475 ;; A declaration according to `c-after-suffixed-type-decl-key'. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6476 (throw 'at-decl-or-cast t)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6477 |
98693
69a04789c5f0
Amend several doc strings and comments.
Alan Mackenzie <acm@muc.de>
parents:
96145
diff
changeset
|
6478 ;; CASE 12 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6479 (when (and (or got-prefix (not got-parens)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6480 (memq at-type '(t known))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6481 ;; It's a declaration if a known type precedes it and it can't be a |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6482 ;; function call. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6483 (throw 'at-decl-or-cast t)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6484 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6485 ;; If we get here we can't tell if this is a type decl or a normal |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6486 ;; expression by looking at it alone. (That's under the assumption |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6487 ;; that normal expressions always can look like type decl expressions, |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6488 ;; which isn't really true but the cases where it doesn't hold are so |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6489 ;; uncommon (e.g. some placements of "const" in C++) it's not worth |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6490 ;; the effort to look for them.) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6491 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6492 (unless (or at-decl-end (looking-at "=[^=]")) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6493 ;; If this is a declaration it should end here or its initializer(*) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6494 ;; should start here, so check for allowed separation tokens. Note |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6495 ;; that this rule doesn't work e.g. with a K&R arglist after a |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6496 ;; function header. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6497 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6498 ;; *) Don't check for C++ style initializers using parens |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6499 ;; since those already have been matched as suffixes. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6500 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6501 ;; If `at-decl-or-cast' is then we've found some other sign that |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6502 ;; it's a declaration or cast, so then it's probably an |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6503 ;; invalid/unfinished one. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6504 (throw 'at-decl-or-cast at-decl-or-cast)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6505 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6506 ;; Below are tests that only should be applied when we're certain to |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6507 ;; not have parsed halfway through an expression. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6508 |
98693
69a04789c5f0
Amend several doc strings and comments.
Alan Mackenzie <acm@muc.de>
parents:
96145
diff
changeset
|
6509 ;; CASE 14 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6510 (when (memq at-type '(t known)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6511 ;; The expression starts with a known type so treat it as a |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6512 ;; declaration. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6513 (throw 'at-decl-or-cast t)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6514 |
98693
69a04789c5f0
Amend several doc strings and comments.
Alan Mackenzie <acm@muc.de>
parents:
96145
diff
changeset
|
6515 ;; CASE 15 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6516 (when (and (c-major-mode-is 'c++-mode) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6517 ;; In C++ we check if the identifier is a known type, since |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6518 ;; (con|de)structors use the class name as identifier. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6519 ;; We've always shifted over the identifier as a type and |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6520 ;; then backed up again in this case. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6521 identifier-type |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6522 (or (memq identifier-type '(found known)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6523 (and (eq (char-after identifier-start) ?~) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6524 ;; `at-type' probably won't be 'found for |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6525 ;; destructors since the "~" is then part of the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6526 ;; type name being checked against the list of |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6527 ;; known types, so do a check without that |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6528 ;; operator. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6529 (or (save-excursion |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6530 (goto-char (1+ identifier-start)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6531 (c-forward-syntactic-ws) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6532 (c-with-syntax-table |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6533 c-identifier-syntax-table |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6534 (looking-at c-known-type-key))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6535 (save-excursion |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6536 (goto-char (1+ identifier-start)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6537 ;; We have already parsed the type earlier, |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6538 ;; so it'd be possible to cache the end |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6539 ;; position instead of redoing it here, but |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6540 ;; then we'd need to keep track of another |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6541 ;; position everywhere. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6542 (c-check-type (point) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6543 (progn (c-forward-type) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6544 (point)))))))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6545 (throw 'at-decl-or-cast t)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6546 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6547 (if got-identifier |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6548 (progn |
98693
69a04789c5f0
Amend several doc strings and comments.
Alan Mackenzie <acm@muc.de>
parents:
96145
diff
changeset
|
6549 ;; CASE 16 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6550 (when (and got-prefix-before-parens |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6551 at-type |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6552 (or at-decl-end (looking-at "=[^=]")) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6553 (not context) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6554 (not got-suffix)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6555 ;; Got something like "foo * bar;". Since we're not inside an |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6556 ;; arglist it would be a meaningless expression because the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6557 ;; result isn't used. We therefore choose to recognize it as |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6558 ;; a declaration. Do not allow a suffix since it could then |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6559 ;; be a function call. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6560 (throw 'at-decl-or-cast t)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6561 |
98693
69a04789c5f0
Amend several doc strings and comments.
Alan Mackenzie <acm@muc.de>
parents:
96145
diff
changeset
|
6562 ;; CASE 17 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6563 (when (and (or got-suffix-after-parens |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6564 (looking-at "=[^=]")) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6565 (eq at-type 'found) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6566 (not (eq context 'arglist))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6567 ;; Got something like "a (*b) (c);" or "a (b) = c;". It could |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6568 ;; be an odd expression or it could be a declaration. Treat |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6569 ;; it as a declaration if "a" has been used as a type |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6570 ;; somewhere else (if it's a known type we won't get here). |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6571 (throw 'at-decl-or-cast t))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6572 |
98693
69a04789c5f0
Amend several doc strings and comments.
Alan Mackenzie <acm@muc.de>
parents:
96145
diff
changeset
|
6573 ;; CASE 18 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6574 (when (and context |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6575 (or got-prefix |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6576 (and (eq context 'decl) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6577 (not c-recognize-paren-inits) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6578 (or got-parens got-suffix)))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6579 ;; Got a type followed by an abstract declarator. If `got-prefix' |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6580 ;; is set it's something like "a *" without anything after it. If |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6581 ;; `got-parens' or `got-suffix' is set it's "a()", "a[]", "a()[]", |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6582 ;; or similar, which we accept only if the context rules out |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6583 ;; expressions. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6584 (throw 'at-decl-or-cast t))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6585 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6586 ;; If we had a complete symbol table here (which rules out |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6587 ;; `c-found-types') we should return t due to the disambiguation rule |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6588 ;; (in at least C++) that anything that can be parsed as a declaration |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6589 ;; is a declaration. Now we're being more defensive and prefer to |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6590 ;; highlight things like "foo (bar);" as a declaration only if we're |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6591 ;; inside an arglist that contains declarations. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6592 (eq context 'decl)))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6593 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6594 ;; The point is now after the type decl expression. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6595 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6596 (cond |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6597 ;; Check for a cast. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6598 ((save-excursion |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6599 (and |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6600 c-cast-parens |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6601 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6602 ;; Should be the first type/identifier in a cast paren. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6603 (> preceding-token-end (point-min)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6604 (memq (char-before preceding-token-end) c-cast-parens) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6605 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6606 ;; The closing paren should follow. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6607 (progn |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6608 (c-forward-syntactic-ws) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6609 (looking-at "\\s\)")) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6610 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6611 ;; There should be a primary expression after it. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6612 (let (pos) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6613 (forward-char) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6614 (c-forward-syntactic-ws) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6615 (setq cast-end (point)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6616 (and (looking-at c-primary-expr-regexp) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6617 (progn |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6618 (setq pos (match-end 0)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6619 (or |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6620 ;; Check if the expression begins with a prefix keyword. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6621 (match-beginning 2) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6622 (if (match-beginning 1) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6623 ;; Expression begins with an ambiguous operator. Treat |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6624 ;; it as a cast if it's a type decl or if we've |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6625 ;; recognized the type somewhere else. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6626 (or at-decl-or-cast |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6627 (memq at-type '(t known found))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6628 ;; Unless it's a keyword, it's the beginning of a primary |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6629 ;; expression. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6630 (not (looking-at c-keywords-regexp))))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6631 ;; If `c-primary-expr-regexp' matched a nonsymbol token, check |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6632 ;; that it matched a whole one so that we don't e.g. confuse |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6633 ;; the operator '-' with '->'. It's ok if it matches further, |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6634 ;; though, since it e.g. can match the float '.5' while the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6635 ;; operator regexp only matches '.'. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6636 (or (not (looking-at c-nonsymbol-token-regexp)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6637 (<= (match-end 0) pos)))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6638 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6639 ;; There should either be a cast before it or something that isn't an |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6640 ;; identifier or close paren. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6641 (> preceding-token-end (point-min)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6642 (progn |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6643 (goto-char (1- preceding-token-end)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6644 (or (eq (point) last-cast-end) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6645 (progn |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6646 (c-backward-syntactic-ws) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6647 (if (< (skip-syntax-backward "w_") 0) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6648 ;; It's a symbol. Accept it only if it's one of the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6649 ;; keywords that can precede an expression (without |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6650 ;; surrounding parens). |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6651 (looking-at c-simple-stmt-key) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6652 (and |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6653 ;; Check that it isn't a close paren (block close is ok, |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6654 ;; though). |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6655 (not (memq (char-before) '(?\) ?\]))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6656 ;; Check that it isn't a nonsymbol identifier. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6657 (not (c-on-identifier))))))))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6658 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6659 ;; Handle the cast. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6660 (when (and c-record-type-identifiers at-type (not (eq at-type t))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6661 (let ((c-promote-possible-types t)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6662 (goto-char type-start) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6663 (c-forward-type))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6664 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6665 (goto-char cast-end) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6666 'cast) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6667 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6668 (at-decl-or-cast |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6669 ;; We're at a declaration. Highlight the type and the following |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6670 ;; declarators. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6671 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6672 (when backup-if-not-cast |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6673 (c-fdoc-shift-type-backward t)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6674 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6675 (when (and (eq context 'decl) (looking-at ",")) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6676 ;; Make sure to propagate the `c-decl-arg-start' property to |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6677 ;; the next argument if it's set in this one, to cope with |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6678 ;; interactive refontification. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6679 (c-put-c-type-property (point) 'c-decl-arg-start)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6680 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6681 (when (and c-record-type-identifiers at-type (not (eq at-type t))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6682 (let ((c-promote-possible-types t)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6683 (save-excursion |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6684 (goto-char type-start) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6685 (c-forward-type)))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6686 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6687 (cons id-start at-type-decl)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6688 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6689 (t |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6690 ;; False alarm. Restore the recorded ranges. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6691 (setq c-record-type-identifiers save-rec-type-ids |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6692 c-record-ref-identifiers save-rec-ref-ids) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6693 nil)))) |
79943
c87032622eda
Correct typos, enhance comments.
Alan Mackenzie <acm@muc.de>
parents:
79942
diff
changeset
|
6694 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6695 (defun c-forward-label (&optional assume-markup preceding-token-end limit) |
75027
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
6696 ;; Assuming that point is at the beginning of a token, check if it starts a |
76986
469570420bff
Fix fontification of labels, and other things with ":".
Alan Mackenzie <acm@muc.de>
parents:
76723
diff
changeset
|
6697 ;; label and if so move over it and return non-nil (t in default situations, |
469570420bff
Fix fontification of labels, and other things with ":".
Alan Mackenzie <acm@muc.de>
parents:
76723
diff
changeset
|
6698 ;; specific symbols (see below) for interesting situations), otherwise don't |
469570420bff
Fix fontification of labels, and other things with ":".
Alan Mackenzie <acm@muc.de>
parents:
76723
diff
changeset
|
6699 ;; move and return nil. "Label" here means "most things with a colon". |
75027
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
6700 ;; |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
6701 ;; More precisely, a "label" is regarded as one of: |
76986
469570420bff
Fix fontification of labels, and other things with ":".
Alan Mackenzie <acm@muc.de>
parents:
76723
diff
changeset
|
6702 ;; (i) a goto target like "foo:" - returns the symbol `goto-target'; |
469570420bff
Fix fontification of labels, and other things with ":".
Alan Mackenzie <acm@muc.de>
parents:
76723
diff
changeset
|
6703 ;; (ii) A case label - either the entire construct "case FOO:", or just the |
469570420bff
Fix fontification of labels, and other things with ":".
Alan Mackenzie <acm@muc.de>
parents:
76723
diff
changeset
|
6704 ;; bare "case", should the colon be missing. We return t; |
469570420bff
Fix fontification of labels, and other things with ":".
Alan Mackenzie <acm@muc.de>
parents:
76723
diff
changeset
|
6705 ;; (iii) a keyword which needs a colon, like "default:" or "private:"; We |
469570420bff
Fix fontification of labels, and other things with ":".
Alan Mackenzie <acm@muc.de>
parents:
76723
diff
changeset
|
6706 ;; return t; |
75027
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
6707 ;; (iv) One of QT's "extended" C++ variants of |
76986
469570420bff
Fix fontification of labels, and other things with ":".
Alan Mackenzie <acm@muc.de>
parents:
76723
diff
changeset
|
6708 ;; "private:"/"protected:"/"public:"/"more:" looking like "public slots:". |
469570420bff
Fix fontification of labels, and other things with ":".
Alan Mackenzie <acm@muc.de>
parents:
76723
diff
changeset
|
6709 ;; Returns the symbol `qt-2kwds-colon'. |
469570420bff
Fix fontification of labels, and other things with ":".
Alan Mackenzie <acm@muc.de>
parents:
76723
diff
changeset
|
6710 ;; (v) QT's construct "signals:". Returns the symbol `qt-1kwd-colon'. |
78656
b3cad8795b91
(c-brace-anchor-point): new function. (c-add-stmt-syntax): Give accurate
Alan Mackenzie <acm@muc.de>
parents:
78487
diff
changeset
|
6711 ;; (vi) One of the keywords matched by `c-opt-extra-label-key' (without any |
75027
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
6712 ;; colon). Currently (2006-03), this applies only to Objective C's |
76986
469570420bff
Fix fontification of labels, and other things with ":".
Alan Mackenzie <acm@muc.de>
parents:
76723
diff
changeset
|
6713 ;; keywords "@private", "@protected", and "@public". Returns t. |
75027
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
6714 ;; |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
6715 ;; One of the things which will NOT be recognised as a label is a bit-field |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
6716 ;; element of a struct, something like "int foo:5". |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
6717 ;; |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
6718 ;; The end of the label is taken to be just after the colon, or the end of |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
6719 ;; the first submatch in `c-opt-extra-label-key'. The point is directly |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
6720 ;; after the end on return. The terminating char gets marked with |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
6721 ;; `c-decl-end' to improve recognition of the following declaration or |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
6722 ;; statement. |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6723 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6724 ;; If ASSUME-MARKUP is non-nil, it's assumed that the preceding |
75027
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
6725 ;; label, if any, has already been marked up like that. |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6726 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6727 ;; If PRECEDING-TOKEN-END is given, it should be the first position |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6728 ;; after the preceding token, i.e. on the other side of the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6729 ;; syntactic ws from the point. Use a value less than or equal to |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6730 ;; (point-min) if the point is at the first token in (the visible |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6731 ;; part of) the buffer. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6732 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6733 ;; The optional LIMIT limits the forward scan for the colon. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6734 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6735 ;; This function records the ranges of the label symbols on |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6736 ;; `c-record-ref-identifiers' if `c-record-type-identifiers' (!) is |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6737 ;; non-nil. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6738 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6739 ;; This function might do hidden buffer changes. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6740 |
75027
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
6741 (let ((start (point)) |
76986
469570420bff
Fix fontification of labels, and other things with ":".
Alan Mackenzie <acm@muc.de>
parents:
76723
diff
changeset
|
6742 label-end |
75027
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
6743 qt-symbol-idx |
76986
469570420bff
Fix fontification of labels, and other things with ":".
Alan Mackenzie <acm@muc.de>
parents:
76723
diff
changeset
|
6744 macro-start ; if we're in one. |
99350
c6c533f20c51
(c-forward-label): Fix for QT macros.
Alan Mackenzie <acm@muc.de>
parents:
98693
diff
changeset
|
6745 label-type |
c6c533f20c51
(c-forward-label): Fix for QT macros.
Alan Mackenzie <acm@muc.de>
parents:
98693
diff
changeset
|
6746 kwd) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6747 (cond |
79408
a29ca195b71e
(c-crosses-statement-barrier-p): Fix typo in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents:
78656
diff
changeset
|
6748 ;; "case" or "default" (Doesn't apply to AWK). |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6749 ((looking-at c-label-kwds-regexp) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6750 (let ((kwd-end (match-end 1))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6751 ;; Record only the keyword itself for fontification, since in |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6752 ;; case labels the following is a constant expression and not |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6753 ;; a label. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6754 (when c-record-type-identifiers |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6755 (c-record-ref-id (cons (match-beginning 1) kwd-end))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6756 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6757 ;; Find the label end. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6758 (goto-char kwd-end) |
76986
469570420bff
Fix fontification of labels, and other things with ":".
Alan Mackenzie <acm@muc.de>
parents:
76723
diff
changeset
|
6759 (setq label-type |
469570420bff
Fix fontification of labels, and other things with ":".
Alan Mackenzie <acm@muc.de>
parents:
76723
diff
changeset
|
6760 (if (and (c-syntactic-re-search-forward |
469570420bff
Fix fontification of labels, and other things with ":".
Alan Mackenzie <acm@muc.de>
parents:
76723
diff
changeset
|
6761 ;; Stop on chars that aren't allowed in expressions, |
469570420bff
Fix fontification of labels, and other things with ":".
Alan Mackenzie <acm@muc.de>
parents:
76723
diff
changeset
|
6762 ;; and on operator chars that would be meaningless |
469570420bff
Fix fontification of labels, and other things with ":".
Alan Mackenzie <acm@muc.de>
parents:
76723
diff
changeset
|
6763 ;; there. FIXME: This doesn't cope with ?: operators. |
469570420bff
Fix fontification of labels, and other things with ":".
Alan Mackenzie <acm@muc.de>
parents:
76723
diff
changeset
|
6764 "[;{=,@]\\|\\(\\=\\|[^:]\\):\\([^:]\\|\\'\\)" |
469570420bff
Fix fontification of labels, and other things with ":".
Alan Mackenzie <acm@muc.de>
parents:
76723
diff
changeset
|
6765 limit t t nil 1) |
469570420bff
Fix fontification of labels, and other things with ":".
Alan Mackenzie <acm@muc.de>
parents:
76723
diff
changeset
|
6766 (match-beginning 2)) |
469570420bff
Fix fontification of labels, and other things with ":".
Alan Mackenzie <acm@muc.de>
parents:
76723
diff
changeset
|
6767 |
469570420bff
Fix fontification of labels, and other things with ":".
Alan Mackenzie <acm@muc.de>
parents:
76723
diff
changeset
|
6768 (progn ; there's a proper : |
469570420bff
Fix fontification of labels, and other things with ":".
Alan Mackenzie <acm@muc.de>
parents:
76723
diff
changeset
|
6769 (goto-char (match-beginning 2)) ; just after the : |
469570420bff
Fix fontification of labels, and other things with ":".
Alan Mackenzie <acm@muc.de>
parents:
76723
diff
changeset
|
6770 (c-put-c-type-property (1- (point)) 'c-decl-end) |
469570420bff
Fix fontification of labels, and other things with ":".
Alan Mackenzie <acm@muc.de>
parents:
76723
diff
changeset
|
6771 t) |
469570420bff
Fix fontification of labels, and other things with ":".
Alan Mackenzie <acm@muc.de>
parents:
76723
diff
changeset
|
6772 |
469570420bff
Fix fontification of labels, and other things with ":".
Alan Mackenzie <acm@muc.de>
parents:
76723
diff
changeset
|
6773 ;; It's an unfinished label. We consider the keyword enough |
469570420bff
Fix fontification of labels, and other things with ":".
Alan Mackenzie <acm@muc.de>
parents:
76723
diff
changeset
|
6774 ;; to recognize it as a label, so that it gets fontified. |
469570420bff
Fix fontification of labels, and other things with ":".
Alan Mackenzie <acm@muc.de>
parents:
76723
diff
changeset
|
6775 ;; Leave the point at the end of it, but don't put any |
469570420bff
Fix fontification of labels, and other things with ":".
Alan Mackenzie <acm@muc.de>
parents:
76723
diff
changeset
|
6776 ;; `c-decl-end' marker. |
469570420bff
Fix fontification of labels, and other things with ":".
Alan Mackenzie <acm@muc.de>
parents:
76723
diff
changeset
|
6777 (goto-char kwd-end) |
469570420bff
Fix fontification of labels, and other things with ":".
Alan Mackenzie <acm@muc.de>
parents:
76723
diff
changeset
|
6778 t)))) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6779 |
75027
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
6780 ;; @private, @protected, @public, in Objective C, or similar. |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6781 ((and c-opt-extra-label-key |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6782 (looking-at c-opt-extra-label-key)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6783 ;; For a `c-opt-extra-label-key' match, we record the whole |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6784 ;; thing for fontification. That's to get the leading '@' in |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6785 ;; Objective-C protection labels fontified. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6786 (goto-char (match-end 1)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6787 (when c-record-type-identifiers |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6788 (c-record-ref-id (cons (match-beginning 1) (point)))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6789 (c-put-c-type-property (1- (point)) 'c-decl-end) |
76986
469570420bff
Fix fontification of labels, and other things with ":".
Alan Mackenzie <acm@muc.de>
parents:
76723
diff
changeset
|
6790 (setq label-type t)) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6791 |
75027
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
6792 ;; All other cases of labels. |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
6793 ((and c-recognize-colon-labels ; nil for AWK and IDL, otherwise t. |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6794 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6795 ;; A colon label must have something before the colon. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6796 (not (eq (char-after) ?:)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6797 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6798 ;; Check that we're not after a token that can't precede a label. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6799 (or |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6800 ;; Trivially succeeds when there's no preceding token. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6801 (if preceding-token-end |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6802 (<= preceding-token-end (point-min)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6803 (save-excursion |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6804 (c-backward-syntactic-ws) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6805 (setq preceding-token-end (point)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6806 (bobp))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6807 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6808 ;; Check if we're after a label, if we're after a closing |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6809 ;; paren that belong to statement, and with |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6810 ;; `c-label-prefix-re'. It's done in different order |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6811 ;; depending on `assume-markup' since the checks have |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6812 ;; different expensiveness. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6813 (if assume-markup |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6814 (or |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6815 (eq (c-get-char-property (1- preceding-token-end) 'c-type) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6816 'c-decl-end) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6817 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6818 (save-excursion |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6819 (goto-char (1- preceding-token-end)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6820 (c-beginning-of-current-token) |
75027
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
6821 (or (looking-at c-label-prefix-re) |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
6822 (looking-at c-block-stmt-1-key))) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6823 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6824 (and (eq (char-before preceding-token-end) ?\)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6825 (c-after-conditional))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6826 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6827 (or |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6828 (save-excursion |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6829 (goto-char (1- preceding-token-end)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6830 (c-beginning-of-current-token) |
75027
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
6831 (or (looking-at c-label-prefix-re) |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
6832 (looking-at c-block-stmt-1-key))) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6833 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6834 (cond |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6835 ((eq (char-before preceding-token-end) ?\)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6836 (c-after-conditional)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6837 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6838 ((eq (char-before preceding-token-end) ?:) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6839 ;; Might be after another label, so check it recursively. |
75027
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
6840 (save-restriction |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
6841 (save-excursion |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
6842 (goto-char (1- preceding-token-end)) |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
6843 ;; Essentially the same as the |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
6844 ;; `c-syntactic-re-search-forward' regexp below. |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
6845 (setq macro-start |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
6846 (save-excursion (and (c-beginning-of-macro) |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
6847 (point)))) |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
6848 (if macro-start (narrow-to-region macro-start (point-max))) |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
6849 (c-syntactic-skip-backward "^-]:?;}=*/%&|,<>!@+" nil t) |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
6850 ;; Note: the following should work instead of the |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
6851 ;; narrow-to-region above. Investigate why not, |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
6852 ;; sometime. ACM, 2006-03-31. |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
6853 ;; (c-syntactic-skip-backward "^-]:?;}=*/%&|,<>!@+" |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
6854 ;; macro-start t) |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
6855 (let ((pte (point)) |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
6856 ;; If the caller turned on recording for us, |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
6857 ;; it shouldn't apply when we check the |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
6858 ;; preceding label. |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
6859 c-record-type-identifiers) |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
6860 ;; A label can't start at a cpp directive. Check for |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
6861 ;; this, since c-forward-syntactic-ws would foul up on it. |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
6862 (unless (and c-opt-cpp-prefix (looking-at c-opt-cpp-prefix)) |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
6863 (c-forward-syntactic-ws) |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
6864 (c-forward-label nil pte start)))))))))) |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
6865 |
76986
469570420bff
Fix fontification of labels, and other things with ":".
Alan Mackenzie <acm@muc.de>
parents:
76723
diff
changeset
|
6866 ;; Point is still at the beginning of the possible label construct. |
79408
a29ca195b71e
(c-crosses-statement-barrier-p): Fix typo in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents:
78656
diff
changeset
|
6867 ;; |
75027
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
6868 ;; Check that the next nonsymbol token is ":", or that we're in one |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
6869 ;; of QT's "slots" declarations. Allow '(' for the sake of macro |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
6870 ;; arguments. FIXME: Should build this regexp from the language |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
6871 ;; constants. |
76986
469570420bff
Fix fontification of labels, and other things with ":".
Alan Mackenzie <acm@muc.de>
parents:
76723
diff
changeset
|
6872 (cond |
469570420bff
Fix fontification of labels, and other things with ":".
Alan Mackenzie <acm@muc.de>
parents:
76723
diff
changeset
|
6873 ;; public: protected: private: |
469570420bff
Fix fontification of labels, and other things with ":".
Alan Mackenzie <acm@muc.de>
parents:
76723
diff
changeset
|
6874 ((and |
469570420bff
Fix fontification of labels, and other things with ":".
Alan Mackenzie <acm@muc.de>
parents:
76723
diff
changeset
|
6875 (c-major-mode-is 'c++-mode) |
469570420bff
Fix fontification of labels, and other things with ":".
Alan Mackenzie <acm@muc.de>
parents:
76723
diff
changeset
|
6876 (search-forward-regexp |
469570420bff
Fix fontification of labels, and other things with ":".
Alan Mackenzie <acm@muc.de>
parents:
76723
diff
changeset
|
6877 "\\=p\\(r\\(ivate\\|otected\\)\\|ublic\\)\\>[^_]" nil t) |
469570420bff
Fix fontification of labels, and other things with ":".
Alan Mackenzie <acm@muc.de>
parents:
76723
diff
changeset
|
6878 (progn (backward-char) |
469570420bff
Fix fontification of labels, and other things with ":".
Alan Mackenzie <acm@muc.de>
parents:
76723
diff
changeset
|
6879 (c-forward-syntactic-ws limit) |
469570420bff
Fix fontification of labels, and other things with ":".
Alan Mackenzie <acm@muc.de>
parents:
76723
diff
changeset
|
6880 (looking-at ":\\([^:]\\|\\'\\)"))) ; A single colon. |
469570420bff
Fix fontification of labels, and other things with ":".
Alan Mackenzie <acm@muc.de>
parents:
76723
diff
changeset
|
6881 (forward-char) |
469570420bff
Fix fontification of labels, and other things with ":".
Alan Mackenzie <acm@muc.de>
parents:
76723
diff
changeset
|
6882 (setq label-type t)) |
469570420bff
Fix fontification of labels, and other things with ":".
Alan Mackenzie <acm@muc.de>
parents:
76723
diff
changeset
|
6883 ;; QT double keyword like "protected slots:" or goto target. |
469570420bff
Fix fontification of labels, and other things with ":".
Alan Mackenzie <acm@muc.de>
parents:
76723
diff
changeset
|
6884 ((progn (goto-char start) nil)) |
469570420bff
Fix fontification of labels, and other things with ":".
Alan Mackenzie <acm@muc.de>
parents:
76723
diff
changeset
|
6885 ((when (c-syntactic-re-search-forward |
469570420bff
Fix fontification of labels, and other things with ":".
Alan Mackenzie <acm@muc.de>
parents:
76723
diff
changeset
|
6886 "[ \t\n[:?;{=*/%&|,<>!@+-]" limit t t) ; not at EOB |
469570420bff
Fix fontification of labels, and other things with ":".
Alan Mackenzie <acm@muc.de>
parents:
76723
diff
changeset
|
6887 (backward-char) |
469570420bff
Fix fontification of labels, and other things with ":".
Alan Mackenzie <acm@muc.de>
parents:
76723
diff
changeset
|
6888 (setq label-end (point)) |
469570420bff
Fix fontification of labels, and other things with ":".
Alan Mackenzie <acm@muc.de>
parents:
76723
diff
changeset
|
6889 (setq qt-symbol-idx |
469570420bff
Fix fontification of labels, and other things with ":".
Alan Mackenzie <acm@muc.de>
parents:
76723
diff
changeset
|
6890 (and (c-major-mode-is 'c++-mode) |
469570420bff
Fix fontification of labels, and other things with ":".
Alan Mackenzie <acm@muc.de>
parents:
76723
diff
changeset
|
6891 (string-match |
469570420bff
Fix fontification of labels, and other things with ":".
Alan Mackenzie <acm@muc.de>
parents:
76723
diff
changeset
|
6892 "\\(p\\(r\\(ivate\\|otected\\)\\|ublic\\)\\|more\\)\\>" |
79408
a29ca195b71e
(c-crosses-statement-barrier-p): Fix typo in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents:
78656
diff
changeset
|
6893 (buffer-substring start (point))))) |
76986
469570420bff
Fix fontification of labels, and other things with ":".
Alan Mackenzie <acm@muc.de>
parents:
76723
diff
changeset
|
6894 (c-forward-syntactic-ws limit) |
469570420bff
Fix fontification of labels, and other things with ":".
Alan Mackenzie <acm@muc.de>
parents:
76723
diff
changeset
|
6895 (cond |
469570420bff
Fix fontification of labels, and other things with ":".
Alan Mackenzie <acm@muc.de>
parents:
76723
diff
changeset
|
6896 ((looking-at ":\\([^:]\\|\\'\\)") ; A single colon. |
469570420bff
Fix fontification of labels, and other things with ":".
Alan Mackenzie <acm@muc.de>
parents:
76723
diff
changeset
|
6897 (forward-char) |
469570420bff
Fix fontification of labels, and other things with ":".
Alan Mackenzie <acm@muc.de>
parents:
76723
diff
changeset
|
6898 (setq label-type |
99350
c6c533f20c51
(c-forward-label): Fix for QT macros.
Alan Mackenzie <acm@muc.de>
parents:
98693
diff
changeset
|
6899 (if (or (string= "signals" ; Special QT macro |
c6c533f20c51
(c-forward-label): Fix for QT macros.
Alan Mackenzie <acm@muc.de>
parents:
98693
diff
changeset
|
6900 (setq kwd (buffer-substring-no-properties start label-end))) |
c6c533f20c51
(c-forward-label): Fix for QT macros.
Alan Mackenzie <acm@muc.de>
parents:
98693
diff
changeset
|
6901 (string= "Q_SIGNALS" kwd)) |
76986
469570420bff
Fix fontification of labels, and other things with ":".
Alan Mackenzie <acm@muc.de>
parents:
76723
diff
changeset
|
6902 'qt-1kwd-colon |
469570420bff
Fix fontification of labels, and other things with ":".
Alan Mackenzie <acm@muc.de>
parents:
76723
diff
changeset
|
6903 'goto-target))) |
469570420bff
Fix fontification of labels, and other things with ":".
Alan Mackenzie <acm@muc.de>
parents:
76723
diff
changeset
|
6904 ((and qt-symbol-idx |
99350
c6c533f20c51
(c-forward-label): Fix for QT macros.
Alan Mackenzie <acm@muc.de>
parents:
98693
diff
changeset
|
6905 (search-forward-regexp "\\=\\(slots\\|Q_SLOTS\\)\\>" limit t) |
76986
469570420bff
Fix fontification of labels, and other things with ":".
Alan Mackenzie <acm@muc.de>
parents:
76723
diff
changeset
|
6906 (progn (c-forward-syntactic-ws limit) |
469570420bff
Fix fontification of labels, and other things with ":".
Alan Mackenzie <acm@muc.de>
parents:
76723
diff
changeset
|
6907 (looking-at ":\\([^:]\\|\\'\\)"))) ; A single colon |
469570420bff
Fix fontification of labels, and other things with ":".
Alan Mackenzie <acm@muc.de>
parents:
76723
diff
changeset
|
6908 (forward-char) |
469570420bff
Fix fontification of labels, and other things with ":".
Alan Mackenzie <acm@muc.de>
parents:
76723
diff
changeset
|
6909 (setq label-type 'qt-2kwds-colon))))))) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6910 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6911 (save-restriction |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6912 (narrow-to-region start (point)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6913 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6914 ;; Check that `c-nonlabel-token-key' doesn't match anywhere. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6915 (catch 'check-label |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6916 (goto-char start) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6917 (while (progn |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6918 (when (looking-at c-nonlabel-token-key) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6919 (goto-char start) |
76986
469570420bff
Fix fontification of labels, and other things with ":".
Alan Mackenzie <acm@muc.de>
parents:
76723
diff
changeset
|
6920 (setq label-type nil) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6921 (throw 'check-label nil)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6922 (and (c-safe (c-forward-sexp) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6923 (c-forward-syntactic-ws) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6924 t) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6925 (not (eobp))))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6926 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6927 ;; Record the identifiers in the label for fontification, unless |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6928 ;; it begins with `c-label-kwds' in which case the following |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6929 ;; identifiers are part of a (constant) expression that |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6930 ;; shouldn't be fontified. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6931 (when (and c-record-type-identifiers |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6932 (progn (goto-char start) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6933 (not (looking-at c-label-kwds-regexp)))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6934 (while (c-syntactic-re-search-forward c-symbol-key nil t) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6935 (c-record-ref-id (cons (match-beginning 0) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6936 (match-end 0))))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6937 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6938 (c-put-c-type-property (1- (point-max)) 'c-decl-end) |
78656
b3cad8795b91
(c-brace-anchor-point): new function. (c-add-stmt-syntax): Give accurate
Alan Mackenzie <acm@muc.de>
parents:
78487
diff
changeset
|
6939 (goto-char (point-max))))) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6940 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6941 (t |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6942 ;; Not a label. |
76986
469570420bff
Fix fontification of labels, and other things with ":".
Alan Mackenzie <acm@muc.de>
parents:
76723
diff
changeset
|
6943 (goto-char start))) |
469570420bff
Fix fontification of labels, and other things with ":".
Alan Mackenzie <acm@muc.de>
parents:
76723
diff
changeset
|
6944 label-type)) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6945 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6946 (defun c-forward-objc-directive () |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6947 ;; Assuming the point is at the beginning of a token, try to move |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6948 ;; forward to the end of the Objective-C directive that starts |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6949 ;; there. Return t if a directive was fully recognized, otherwise |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6950 ;; the point is moved as far as one could be successfully parsed and |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6951 ;; nil is returned. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6952 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6953 ;; This function records identifier ranges on |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6954 ;; `c-record-type-identifiers' and `c-record-ref-identifiers' if |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6955 ;; `c-record-type-identifiers' is non-nil. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6956 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6957 ;; This function might do hidden buffer changes. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6958 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6959 (let ((start (point)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6960 start-char |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6961 (c-promote-possible-types t) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6962 ;; Turn off recognition of angle bracket arglists while parsing |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6963 ;; types here since the protocol reference list might then be |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6964 ;; considered part of the preceding name or superclass-name. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6965 c-recognize-<>-arglists) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6966 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6967 (if (or |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6968 (when (looking-at |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6969 (eval-when-compile |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6970 (c-make-keywords-re t |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6971 (append (c-lang-const c-protection-kwds objc) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6972 '("@end")) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6973 'objc-mode))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6974 (goto-char (match-end 1)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6975 t) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6976 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6977 (and |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6978 (looking-at |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6979 (eval-when-compile |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6980 (c-make-keywords-re t |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6981 '("@interface" "@implementation" "@protocol") |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6982 'objc-mode))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6983 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6984 ;; Handle the name of the class itself. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6985 (progn |
69140
3d8b060d10fb
cc-align.el, cc-awk.el, cc-bytecomp.el, cc-cmds.el, cc-compat.el,
Alan Mackenzie <acm@muc.de>
parents:
68773
diff
changeset
|
6986 ; (c-forward-token-2) ; 2006/1/13 This doesn't move if the token's |
3d8b060d10fb
cc-align.el, cc-awk.el, cc-bytecomp.el, cc-cmds.el, cc-compat.el,
Alan Mackenzie <acm@muc.de>
parents:
68773
diff
changeset
|
6987 ; at EOB. |
3d8b060d10fb
cc-align.el, cc-awk.el, cc-bytecomp.el, cc-cmds.el, cc-compat.el,
Alan Mackenzie <acm@muc.de>
parents:
68773
diff
changeset
|
6988 (goto-char (match-end 0)) |
3d8b060d10fb
cc-align.el, cc-awk.el, cc-bytecomp.el, cc-cmds.el, cc-compat.el,
Alan Mackenzie <acm@muc.de>
parents:
68773
diff
changeset
|
6989 (c-skip-ws-forward) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6990 (c-forward-type)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6991 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6992 (catch 'break |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6993 ;; Look for ": superclass-name" or "( category-name )". |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6994 (when (looking-at "[:\(]") |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6995 (setq start-char (char-after)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6996 (forward-char) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6997 (c-forward-syntactic-ws) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6998 (unless (c-forward-type) (throw 'break nil)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
6999 (when (eq start-char ?\() |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7000 (unless (eq (char-after) ?\)) (throw 'break nil)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7001 (forward-char) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7002 (c-forward-syntactic-ws))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7003 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7004 ;; Look for a protocol reference list. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7005 (if (eq (char-after) ?<) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7006 (let ((c-recognize-<>-arglists t) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7007 (c-parse-and-markup-<>-arglists t) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7008 c-restricted-<>-arglists) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7009 (c-forward-<>-arglist t)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7010 t)))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7011 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7012 (progn |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7013 (c-backward-syntactic-ws) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7014 (c-clear-c-type-property start (1- (point)) 'c-decl-end) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7015 (c-put-c-type-property (1- (point)) 'c-decl-end) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7016 t) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7017 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7018 (c-clear-c-type-property start (point) 'c-decl-end) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7019 nil))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7020 |
18720 | 7021 (defun c-beginning-of-inheritance-list (&optional lim) |
7022 ;; Go to the first non-whitespace after the colon that starts a | |
7023 ;; multiple inheritance introduction. Optional LIM is the farthest | |
7024 ;; back we should search. | |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7025 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7026 ;; This function might do hidden buffer changes. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7027 (c-with-syntax-table c++-template-syntax-table |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7028 (c-backward-token-2 0 t lim) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7029 (while (and (or (looking-at c-symbol-start) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7030 (looking-at "[<,]\\|::")) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7031 (zerop (c-backward-token-2 1 t lim)))))) |
18720 | 7032 |
7033 (defun c-in-method-def-p () | |
7034 ;; Return nil if we aren't in a method definition, otherwise the | |
7035 ;; position of the initial [+-]. | |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7036 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7037 ;; This function might do hidden buffer changes. |
18720 | 7038 (save-excursion |
7039 (beginning-of-line) | |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7040 (and c-opt-method-key |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7041 (looking-at c-opt-method-key) |
18720 | 7042 (point)) |
7043 )) | |
7044 | |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7045 ;; Contributed by Kevin Ryde <user42@zip.com.au>. |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7046 (defun c-in-gcc-asm-p () |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7047 ;; Return non-nil if point is within a gcc \"asm\" block. |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7048 ;; |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7049 ;; This should be called with point inside an argument list. |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7050 ;; |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7051 ;; Only one level of enclosing parentheses is considered, so for |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7052 ;; instance `nil' is returned when in a function call within an asm |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7053 ;; operand. |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7054 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7055 ;; This function might do hidden buffer changes. |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7056 |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7057 (and c-opt-asm-stmt-key |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7058 (save-excursion |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7059 (beginning-of-line) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7060 (backward-up-list 1) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7061 (c-beginning-of-statement-1 (point-min) nil t) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7062 (looking-at c-opt-asm-stmt-key)))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7063 |
24335
0c4688f9a396
Added c-at-toplevel-p for font-lock.el.
Simon Marshall <simon@gnu.org>
parents:
24282
diff
changeset
|
7064 (defun c-at-toplevel-p () |
98693
69a04789c5f0
Amend several doc strings and comments.
Alan Mackenzie <acm@muc.de>
parents:
96145
diff
changeset
|
7065 "Return a determination as to whether point is \"at the top level\". |
69a04789c5f0
Amend several doc strings and comments.
Alan Mackenzie <acm@muc.de>
parents:
96145
diff
changeset
|
7066 Informally, \"at the top level\" is anywhere where you can write |
69a04789c5f0
Amend several doc strings and comments.
Alan Mackenzie <acm@muc.de>
parents:
96145
diff
changeset
|
7067 a function. |
69a04789c5f0
Amend several doc strings and comments.
Alan Mackenzie <acm@muc.de>
parents:
96145
diff
changeset
|
7068 |
69a04789c5f0
Amend several doc strings and comments.
Alan Mackenzie <acm@muc.de>
parents:
96145
diff
changeset
|
7069 More precisely, being at the top-level means that point is either |
69a04789c5f0
Amend several doc strings and comments.
Alan Mackenzie <acm@muc.de>
parents:
96145
diff
changeset
|
7070 outside any enclosing block (such as a function definition), or |
69a04789c5f0
Amend several doc strings and comments.
Alan Mackenzie <acm@muc.de>
parents:
96145
diff
changeset
|
7071 directly inside a class, namespace or other block that contains |
69a04789c5f0
Amend several doc strings and comments.
Alan Mackenzie <acm@muc.de>
parents:
96145
diff
changeset
|
7072 another declaration level. |
24335
0c4688f9a396
Added c-at-toplevel-p for font-lock.el.
Simon Marshall <simon@gnu.org>
parents:
24282
diff
changeset
|
7073 |
0c4688f9a396
Added c-at-toplevel-p for font-lock.el.
Simon Marshall <simon@gnu.org>
parents:
24282
diff
changeset
|
7074 If point is not at the top-level (e.g. it is inside a method |
0c4688f9a396
Added c-at-toplevel-p for font-lock.el.
Simon Marshall <simon@gnu.org>
parents:
24282
diff
changeset
|
7075 definition), then nil is returned. Otherwise, if point is at a |
0c4688f9a396
Added c-at-toplevel-p for font-lock.el.
Simon Marshall <simon@gnu.org>
parents:
24282
diff
changeset
|
7076 top-level not enclosed within a class definition, t is returned. |
0c4688f9a396
Added c-at-toplevel-p for font-lock.el.
Simon Marshall <simon@gnu.org>
parents:
24282
diff
changeset
|
7077 Otherwise, a 2-vector is returned where the zeroth element is the |
0c4688f9a396
Added c-at-toplevel-p for font-lock.el.
Simon Marshall <simon@gnu.org>
parents:
24282
diff
changeset
|
7078 buffer position of the start of the class declaration, and the first |
0c4688f9a396
Added c-at-toplevel-p for font-lock.el.
Simon Marshall <simon@gnu.org>
parents:
24282
diff
changeset
|
7079 element is the buffer position of the enclosing class's opening |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7080 brace. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7081 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7082 Note that this function might do hidden buffer changes. See the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7083 comment at the start of cc-engine.el for more info." |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7084 (let ((paren-state (c-parse-state))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7085 (or (not (c-most-enclosing-brace paren-state)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7086 (c-search-uplist-for-classkey paren-state)))) |
24335
0c4688f9a396
Added c-at-toplevel-p for font-lock.el.
Simon Marshall <simon@gnu.org>
parents:
24282
diff
changeset
|
7087 |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
7088 (defun c-just-after-func-arglist-p (&optional lim) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7089 ;; Return non-nil if the point is in the region after the argument |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7090 ;; list of a function and its opening brace (or semicolon in case it |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7091 ;; got no body). If there are K&R style argument declarations in |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7092 ;; that region, the point has to be inside the first one for this |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7093 ;; function to recognize it. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7094 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7095 ;; If successful, the point is moved to the first token after the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7096 ;; function header (see `c-forward-decl-or-cast-1' for details) and |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7097 ;; the position of the opening paren of the function arglist is |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7098 ;; returned. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7099 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7100 ;; The point is clobbered if not successful. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7101 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7102 ;; LIM is used as bound for backward buffer searches. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7103 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7104 ;; This function might do hidden buffer changes. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7105 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7106 (let ((beg (point)) end id-start) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7107 (and |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7108 (eq (c-beginning-of-statement-1 lim) 'same) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7109 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7110 (not (or (c-major-mode-is 'objc-mode) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7111 (c-forward-objc-directive))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7112 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7113 (setq id-start |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7114 (car-safe (c-forward-decl-or-cast-1 (c-point 'bosws) nil nil))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7115 (< id-start beg) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7116 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7117 ;; There should not be a '=' or ',' between beg and the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7118 ;; start of the declaration since that means we were in the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7119 ;; "expression part" of the declaration. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7120 (or (> (point) beg) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7121 (not (looking-at "[=,]"))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7122 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7123 (save-excursion |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7124 ;; Check that there's an arglist paren in the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7125 ;; declaration. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7126 (goto-char id-start) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7127 (cond ((eq (char-after) ?\() |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7128 ;; The declarator is a paren expression, so skip past it |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7129 ;; so that we don't get stuck on that instead of the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7130 ;; function arglist. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7131 (c-forward-sexp)) |
75027
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
7132 ((and c-opt-op-identifier-prefix |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
7133 (looking-at c-opt-op-identifier-prefix)) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7134 ;; Don't trip up on "operator ()". |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7135 (c-forward-token-2 2 t))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7136 (and (< (point) beg) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7137 (c-syntactic-re-search-forward "(" beg t t) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7138 (1- (point))))))) |
18720 | 7139 |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7140 (defun c-in-knr-argdecl (&optional lim) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7141 ;; Return the position of the first argument declaration if point is |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7142 ;; inside a K&R style argument declaration list, nil otherwise. |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7143 ;; `c-recognize-knr-p' is not checked. If LIM is non-nil, it's a |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7144 ;; position that bounds the backward search for the argument list. |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7145 ;; |
75315
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7146 ;; Point must be within a possible K&R region, e.g. just before a top-level |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7147 ;; "{". It must be outside of parens and brackets. The test can return |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7148 ;; false positives otherwise. |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7149 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7150 ;; This function might do hidden buffer changes. |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
7151 |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7152 (save-excursion |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7153 (save-restriction |
75315
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7154 ;; If we're in a macro, our search range is restricted to it. Narrow to |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7155 ;; the searchable range. |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7156 (let* ((macro-start (c-query-macro-start)) |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7157 (lim (max (or lim (point-min)) (or macro-start (point-min)))) |
92572
897b09fb6e10
(c-in-knr-argdecl): Limit number of paren/bracket pairs parsed, to solve
Alan Mackenzie <acm@muc.de>
parents:
92148
diff
changeset
|
7158 before-lparen after-rparen |
897b09fb6e10
(c-in-knr-argdecl): Limit number of paren/bracket pairs parsed, to solve
Alan Mackenzie <acm@muc.de>
parents:
92148
diff
changeset
|
7159 (pp-count-out 20)) ; Max number of paren/brace constructs before we give up |
75315
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7160 (narrow-to-region lim (c-point 'eol)) |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7161 |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7162 ;; Search backwards for the defun's argument list. We give up if we |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7163 ;; encounter a "}" (end of a previous defun) or BOB. |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7164 ;; |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7165 ;; The criterion for a paren structure being the arg list is: |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7166 ;; o - there is non-WS stuff after it but before any "{"; AND |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7167 ;; o - the token after it isn't a ";" AND |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7168 ;; o - it is preceded by either an identifier (the function name) or |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7169 ;; a macro expansion like "DEFUN (...)"; AND |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7170 ;; o - its content is a non-empty comma-separated list of identifiers |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7171 ;; (an empty arg list won't have a knr region). |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7172 ;; |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7173 ;; The following snippet illustrates these rules: |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7174 ;; int foo (bar, baz, yuk) |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7175 ;; int bar [] ; |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7176 ;; int (*baz) (my_type) ; |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7177 ;; int (*) (void) (*yuk) (void) ; |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7178 ;; { |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7179 |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7180 (catch 'knr |
92572
897b09fb6e10
(c-in-knr-argdecl): Limit number of paren/bracket pairs parsed, to solve
Alan Mackenzie <acm@muc.de>
parents:
92148
diff
changeset
|
7181 (while (> pp-count-out 0) ; go back one paren/bracket pair each time. |
897b09fb6e10
(c-in-knr-argdecl): Limit number of paren/bracket pairs parsed, to solve
Alan Mackenzie <acm@muc.de>
parents:
92148
diff
changeset
|
7182 (setq pp-count-out (1- pp-count-out)) |
75623
33cf1027eb42
(c-in-knr-argdecl): Slight correction for, e.g. "void (*hdone)();" in a
Alan Mackenzie <acm@muc.de>
parents:
75347
diff
changeset
|
7183 (c-syntactic-skip-backward "^)]}") |
75315
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7184 (cond ((eq (char-before) ?\)) |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7185 (setq after-rparen (point))) |
75623
33cf1027eb42
(c-in-knr-argdecl): Slight correction for, e.g. "void (*hdone)();" in a
Alan Mackenzie <acm@muc.de>
parents:
75347
diff
changeset
|
7186 ((eq (char-before) ?\]) |
33cf1027eb42
(c-in-knr-argdecl): Slight correction for, e.g. "void (*hdone)();" in a
Alan Mackenzie <acm@muc.de>
parents:
75347
diff
changeset
|
7187 (setq after-rparen nil)) |
33cf1027eb42
(c-in-knr-argdecl): Slight correction for, e.g. "void (*hdone)();" in a
Alan Mackenzie <acm@muc.de>
parents:
75347
diff
changeset
|
7188 (t ; either } (hit previous defun) or no more parens/brackets |
33cf1027eb42
(c-in-knr-argdecl): Slight correction for, e.g. "void (*hdone)();" in a
Alan Mackenzie <acm@muc.de>
parents:
75347
diff
changeset
|
7189 (throw 'knr nil))) |
75315
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7190 |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7191 (if after-rparen |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7192 ;; We're inside a paren. Could it be our argument list....? |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7193 (if |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7194 (and |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7195 (progn |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7196 (goto-char after-rparen) |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7197 (unless (c-go-list-backward) (throw 'knr nil)) ; |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7198 ;; FIXME!!! What about macros between the parens? 2007/01/20 |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7199 (setq before-lparen (point))) |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7200 |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7201 ;; It can't be the arg list if next token is ; or { |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7202 (progn (goto-char after-rparen) |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7203 (c-forward-syntactic-ws) |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7204 (not (memq (char-after) '(?\; ?\{)))) |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7205 |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7206 ;; Is the thing preceding the list an identifier (the |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7207 ;; function name), or a macro expansion? |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7208 (progn |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7209 (goto-char before-lparen) |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7210 (eq (c-backward-token-2) 0) |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7211 (or (c-on-identifier) |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7212 (and (eq (char-after) ?\)) |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7213 (c-go-up-list-backward) |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7214 (eq (c-backward-token-2) 0) |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7215 (c-on-identifier)))) |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7216 |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7217 ;; Have we got a non-empty list of comma-separated |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7218 ;; identifiers? |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7219 (progn |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7220 (goto-char before-lparen) |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7221 (c-forward-token-2) ; to first token inside parens |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7222 (and |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7223 (c-on-identifier) |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7224 (c-forward-token-2) |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7225 (catch 'id-list |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7226 (while (eq (char-after) ?\,) |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7227 (c-forward-token-2) |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7228 (unless (c-on-identifier) (throw 'id-list nil)) |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7229 (c-forward-token-2)) |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7230 (eq (char-after) ?\)))))) |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7231 |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7232 ;; ...Yes. We've identified the function's argument list. |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7233 (throw 'knr |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7234 (progn (goto-char after-rparen) |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7235 (c-forward-syntactic-ws) |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7236 (point))) |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7237 |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7238 ;; ...No. The current parens aren't the function's arg list. |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7239 (goto-char before-lparen)) |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7240 |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7241 (or (c-go-list-backward) ; backwards over [ .... ] |
656ff90fee33
Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents:
75307
diff
changeset
|
7242 (throw 'knr nil))))))))) |
18720 | 7243 |
7244 (defun c-skip-conditional () | |
7245 ;; skip forward over conditional at point, including any predicate | |
7246 ;; statements in parentheses. No error checking is performed. | |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7247 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7248 ;; This function might do hidden buffer changes. |
24282 | 7249 (c-forward-sexp (cond |
7250 ;; else if() | |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7251 ((looking-at (concat "\\<else" |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7252 "\\([ \t\n]\\|\\\\\n\\)+" |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7253 "if\\>\\([^_]\\|$\\)")) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7254 3) |
24282 | 7255 ;; do, else, try, finally |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7256 ((looking-at (concat "\\<\\(" |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7257 "do\\|else\\|try\\|finally" |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7258 "\\)\\>\\([^_]\\|$\\)")) |
36920 | 7259 1) |
30403
68e734ab7d5d
(c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents:
26817
diff
changeset
|
7260 ;; for, if, while, switch, catch, synchronized, foreach |
24282 | 7261 (t 2)))) |
18720 | 7262 |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7263 (defun c-after-conditional (&optional lim) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7264 ;; If looking at the token after a conditional then return the |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7265 ;; position of its start, otherwise return nil. |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7266 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7267 ;; This function might do hidden buffer changes. |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7268 (save-excursion |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
7269 (and (zerop (c-backward-token-2 1 t lim)) |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7270 (or (looking-at c-block-stmt-1-key) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7271 (and (eq (char-after) ?\() |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
7272 (zerop (c-backward-token-2 1 t lim)) |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7273 (looking-at c-block-stmt-2-key))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7274 (point)))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7275 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7276 (defun c-after-special-operator-id (&optional lim) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7277 ;; If the point is after an operator identifier that isn't handled |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7278 ;; like an ordinary symbol (i.e. like "operator =" in C++) then the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7279 ;; position of the start of that identifier is returned. nil is |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7280 ;; returned otherwise. The point may be anywhere in the syntactic |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7281 ;; whitespace after the last token of the operator identifier. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7282 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7283 ;; This function might do hidden buffer changes. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7284 (save-excursion |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7285 (and c-overloadable-operators-regexp |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7286 (zerop (c-backward-token-2 1 nil lim)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7287 (looking-at c-overloadable-operators-regexp) |
75027
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
7288 (or (not c-opt-op-identifier-prefix) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7289 (and |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7290 (zerop (c-backward-token-2 1 nil lim)) |
75027
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
7291 (looking-at c-opt-op-identifier-prefix))) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7292 (point)))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7293 |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7294 (defsubst c-backward-to-block-anchor (&optional lim) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7295 ;; Assuming point is at a brace that opens a statement block of some |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7296 ;; kind, move to the proper anchor point for that block. It might |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7297 ;; need to be adjusted further by c-add-stmt-syntax, but the |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7298 ;; position at return is suitable as start position for that |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7299 ;; function. |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7300 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7301 ;; This function might do hidden buffer changes. |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7302 (unless (= (point) (c-point 'boi)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7303 (let ((start (c-after-conditional lim))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7304 (if start |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7305 (goto-char start))))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7306 |
53073
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
7307 (defsubst c-backward-to-decl-anchor (&optional lim) |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7308 ;; Assuming point is at a brace that opens the block of a top level |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7309 ;; declaration of some kind, move to the proper anchor point for |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7310 ;; that block. |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7311 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7312 ;; This function might do hidden buffer changes. |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7313 (unless (= (point) (c-point 'boi)) |
53073
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
7314 (c-beginning-of-statement-1 lim))) |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7315 |
52107
3a5379a0d7f3
2003-08-01 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents:
51947
diff
changeset
|
7316 (defun c-search-decl-header-end () |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7317 ;; Search forward for the end of the "header" of the current |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7318 ;; declaration. That's the position where the definition body |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7319 ;; starts, or the first variable initializer, or the ending |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7320 ;; semicolon. I.e. search forward for the closest following |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7321 ;; (syntactically relevant) '{', '=' or ';' token. Point is left |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7322 ;; _after_ the first found token, or at point-max if none is found. |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7323 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7324 ;; This function might do hidden buffer changes. |
52107
3a5379a0d7f3
2003-08-01 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents:
51947
diff
changeset
|
7325 |
3a5379a0d7f3
2003-08-01 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents:
51947
diff
changeset
|
7326 (let ((base (point))) |
3a5379a0d7f3
2003-08-01 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents:
51947
diff
changeset
|
7327 (if (c-major-mode-is 'c++-mode) |
3a5379a0d7f3
2003-08-01 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents:
51947
diff
changeset
|
7328 |
3a5379a0d7f3
2003-08-01 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents:
51947
diff
changeset
|
7329 ;; In C++ we need to take special care to handle operator |
3a5379a0d7f3
2003-08-01 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents:
51947
diff
changeset
|
7330 ;; tokens and those pesky template brackets. |
3a5379a0d7f3
2003-08-01 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents:
51947
diff
changeset
|
7331 (while (and |
3a5379a0d7f3
2003-08-01 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents:
51947
diff
changeset
|
7332 (c-syntactic-re-search-forward "[;{<=]" nil 'move t t) |
3a5379a0d7f3
2003-08-01 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents:
51947
diff
changeset
|
7333 (or |
3a5379a0d7f3
2003-08-01 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents:
51947
diff
changeset
|
7334 (c-end-of-current-token base) |
3a5379a0d7f3
2003-08-01 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents:
51947
diff
changeset
|
7335 ;; Handle operator identifiers, i.e. ignore any |
3a5379a0d7f3
2003-08-01 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents:
51947
diff
changeset
|
7336 ;; operator token preceded by "operator". |
3a5379a0d7f3
2003-08-01 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents:
51947
diff
changeset
|
7337 (save-excursion |
3a5379a0d7f3
2003-08-01 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents:
51947
diff
changeset
|
7338 (and (c-safe (c-backward-sexp) t) |
75027
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
7339 (looking-at c-opt-op-identifier-prefix))) |
52107
3a5379a0d7f3
2003-08-01 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents:
51947
diff
changeset
|
7340 (and (eq (char-before) ?<) |
3a5379a0d7f3
2003-08-01 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents:
51947
diff
changeset
|
7341 (c-with-syntax-table c++-template-syntax-table |
3a5379a0d7f3
2003-08-01 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents:
51947
diff
changeset
|
7342 (if (c-safe (goto-char (c-up-list-forward (point)))) |
3a5379a0d7f3
2003-08-01 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents:
51947
diff
changeset
|
7343 t |
3a5379a0d7f3
2003-08-01 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents:
51947
diff
changeset
|
7344 (goto-char (point-max)) |
3a5379a0d7f3
2003-08-01 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents:
51947
diff
changeset
|
7345 nil))))) |
3a5379a0d7f3
2003-08-01 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents:
51947
diff
changeset
|
7346 (setq base (point))) |
3a5379a0d7f3
2003-08-01 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents:
51947
diff
changeset
|
7347 |
3a5379a0d7f3
2003-08-01 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents:
51947
diff
changeset
|
7348 (while (and |
3a5379a0d7f3
2003-08-01 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents:
51947
diff
changeset
|
7349 (c-syntactic-re-search-forward "[;{=]" nil 'move t t) |
3a5379a0d7f3
2003-08-01 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents:
51947
diff
changeset
|
7350 (c-end-of-current-token base)) |
3a5379a0d7f3
2003-08-01 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents:
51947
diff
changeset
|
7351 (setq base (point)))))) |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7352 |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7353 (defun c-beginning-of-decl-1 (&optional lim) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7354 ;; Go to the beginning of the current declaration, or the beginning |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7355 ;; of the previous one if already at the start of it. Point won't |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7356 ;; be moved out of any surrounding paren. Return a cons cell of the |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7357 ;; form (MOVE . KNR-POS). MOVE is like the return value from |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7358 ;; `c-beginning-of-statement-1'. If point skipped over some K&R |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7359 ;; style argument declarations (and they are to be recognized) then |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7360 ;; KNR-POS is set to the start of the first such argument |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7361 ;; declaration, otherwise KNR-POS is nil. If LIM is non-nil, it's a |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7362 ;; position that bounds the backward search. |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7363 ;; |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7364 ;; NB: Cases where the declaration continues after the block, as in |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7365 ;; "struct foo { ... } bar;", are currently recognized as two |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7366 ;; declarations, e.g. "struct foo { ... }" and "bar;" in this case. |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7367 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7368 ;; This function might do hidden buffer changes. |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7369 (catch 'return |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7370 (let* ((start (point)) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
7371 (last-stmt-start (point)) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7372 (move (c-beginning-of-statement-1 lim nil t))) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
7373 |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7374 ;; `c-beginning-of-statement-1' stops at a block start, but we |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7375 ;; want to continue if the block doesn't begin a top level |
56646
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
7376 ;; construct, i.e. if it isn't preceded by ';', '}', ':', bob, |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
7377 ;; or an open paren. |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
7378 (let ((beg (point)) tentative-move) |
75027
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
7379 ;; Go back one "statement" each time round the loop until we're just |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
7380 ;; after a ;, }, or :, or at BOB or the start of a macro or start of |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
7381 ;; an ObjC method. This will move over a multiple declaration whose |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
7382 ;; components are comma separated. |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
7383 (while (and |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
7384 ;; Must check with c-opt-method-key in ObjC mode. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
7385 (not (and c-opt-method-key |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
7386 (looking-at c-opt-method-key))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
7387 (/= last-stmt-start (point)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
7388 (progn |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
7389 (c-backward-syntactic-ws lim) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
7390 (not (memq (char-before) '(?\; ?} ?: nil)))) |
56646
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
7391 (save-excursion |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
7392 (backward-char) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
7393 (not (looking-at "\\s("))) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
7394 ;; Check that we don't move from the first thing in a |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
7395 ;; macro to its header. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
7396 (not (eq (setq tentative-move |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7397 (c-beginning-of-statement-1 lim nil t)) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
7398 'macro))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
7399 (setq last-stmt-start beg |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
7400 beg (point) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
7401 move tentative-move)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
7402 (goto-char beg)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
7403 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
7404 (when c-recognize-knr-p |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
7405 (let ((fallback-pos (point)) knr-argdecl-start) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
7406 ;; Handle K&R argdecls. Back up after the "statement" jumped |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
7407 ;; over by `c-beginning-of-statement-1', unless it was the |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
7408 ;; function body, in which case we're sitting on the opening |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
7409 ;; brace now. Then test if we're in a K&R argdecl region and |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
7410 ;; that we started at the other side of the first argdecl in |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
7411 ;; it. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
7412 (unless (eq (char-after) ?{) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
7413 (goto-char last-stmt-start)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
7414 (if (and (setq knr-argdecl-start (c-in-knr-argdecl lim)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
7415 (< knr-argdecl-start start) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
7416 (progn |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
7417 (goto-char knr-argdecl-start) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7418 (not (eq (c-beginning-of-statement-1 lim nil t) 'macro)))) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
7419 (throw 'return |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
7420 (cons (if (eq (char-after fallback-pos) ?{) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
7421 'previous |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
7422 'same) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
7423 knr-argdecl-start)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
7424 (goto-char fallback-pos)))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
7425 |
75027
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
7426 ;; `c-beginning-of-statement-1' counts each brace block as a separate |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
7427 ;; statement, so the result will be 'previous if we've moved over any. |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
7428 ;; So change our result back to 'same if necessary. |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
7429 ;; |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
7430 ;; If they were brace list initializers we might not have moved over a |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
7431 ;; declaration boundary though, so change it to 'same if we've moved |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
7432 ;; past a '=' before '{', but not ';'. (This ought to be integrated |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
7433 ;; into `c-beginning-of-statement-1', so we avoid this extra pass which |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
7434 ;; potentially can search over a large amount of text.). Take special |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
7435 ;; pains not to get mislead by C++'s "operator=", and the like. |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
7436 (if (and (eq move 'previous) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
7437 (c-with-syntax-table (if (c-major-mode-is 'c++-mode) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
7438 c++-template-syntax-table |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
7439 (syntax-table)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
7440 (save-excursion |
75027
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
7441 (and |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
7442 (progn |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
7443 (while ; keep going back to "[;={"s until we either find |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
7444 ; no more, or get to one which isn't an "operator =" |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
7445 (and (c-syntactic-re-search-forward "[;={]" start t t t) |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
7446 (eq (char-before) ?=) |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
7447 c-overloadable-operators-regexp |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
7448 c-opt-op-identifier-prefix |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
7449 (save-excursion |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
7450 (eq (c-backward-token-2) 0) |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
7451 (looking-at c-overloadable-operators-regexp) |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
7452 (eq (c-backward-token-2) 0) |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
7453 (looking-at c-opt-op-identifier-prefix)))) |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
7454 (eq (char-before) ?=)) |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
7455 (c-syntactic-re-search-forward "[;{]" start t t) |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
7456 (eq (char-before) ?{) |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
7457 (c-safe (goto-char (c-up-list-forward (point))) t) |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
7458 (not (c-syntactic-re-search-forward ";" start t t)))))) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
7459 (cons 'same nil) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
7460 (cons move nil))))) |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7461 |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7462 (defun c-end-of-decl-1 () |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7463 ;; Assuming point is at the start of a declaration (as detected by |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7464 ;; e.g. `c-beginning-of-decl-1'), go to the end of it. Unlike |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7465 ;; `c-beginning-of-decl-1', this function handles the case when a |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7466 ;; block is followed by identifiers in e.g. struct declarations in C |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7467 ;; or C++. If a proper end was found then t is returned, otherwise |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7468 ;; point is moved as far as possible within the current sexp and nil |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7469 ;; is returned. This function doesn't handle macros; use |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7470 ;; `c-end-of-macro' instead in those cases. |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7471 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7472 ;; This function might do hidden buffer changes. |
30403
68e734ab7d5d
(c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents:
26817
diff
changeset
|
7473 (let ((start (point)) |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7474 (decl-syntax-table (if (c-major-mode-is 'c++-mode) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7475 c++-template-syntax-table |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7476 (syntax-table)))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7477 (catch 'return |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7478 (c-search-decl-header-end) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7479 |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7480 (when (and c-recognize-knr-p |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7481 (eq (char-before) ?\;) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7482 (c-in-knr-argdecl start)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7483 ;; Stopped at the ';' in a K&R argdecl section which is |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7484 ;; detected using the same criteria as in |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7485 ;; `c-beginning-of-decl-1'. Move to the following block |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7486 ;; start. |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
7487 (c-syntactic-re-search-forward "{" nil 'move t)) |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7488 |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7489 (when (eq (char-before) ?{) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7490 ;; Encountered a block in the declaration. Jump over it. |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7491 (condition-case nil |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7492 (goto-char (c-up-list-forward (point))) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
7493 (error (goto-char (point-max)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
7494 (throw 'return nil))) |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7495 (if (or (not c-opt-block-decls-with-vars-key) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7496 (save-excursion |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7497 (c-with-syntax-table decl-syntax-table |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7498 (let ((lim (point))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7499 (goto-char start) |
45049
11c11cb2b8a8
(c-beginning-of-decl-1): Better way to handle protection labels, one
Martin Stjernholm <mast@lysator.liu.se>
parents:
44728
diff
changeset
|
7500 (not (and |
11c11cb2b8a8
(c-beginning-of-decl-1): Better way to handle protection labels, one
Martin Stjernholm <mast@lysator.liu.se>
parents:
44728
diff
changeset
|
7501 ;; Check for `c-opt-block-decls-with-vars-key' |
11c11cb2b8a8
(c-beginning-of-decl-1): Better way to handle protection labels, one
Martin Stjernholm <mast@lysator.liu.se>
parents:
44728
diff
changeset
|
7502 ;; before the first paren. |
11c11cb2b8a8
(c-beginning-of-decl-1): Better way to handle protection labels, one
Martin Stjernholm <mast@lysator.liu.se>
parents:
44728
diff
changeset
|
7503 (c-syntactic-re-search-forward |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
7504 (concat "[;=\(\[{]\\|\\(" |
45049
11c11cb2b8a8
(c-beginning-of-decl-1): Better way to handle protection labels, one
Martin Stjernholm <mast@lysator.liu.se>
parents:
44728
diff
changeset
|
7505 c-opt-block-decls-with-vars-key |
11c11cb2b8a8
(c-beginning-of-decl-1): Better way to handle protection labels, one
Martin Stjernholm <mast@lysator.liu.se>
parents:
44728
diff
changeset
|
7506 "\\)") |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
7507 lim t t t) |
45049
11c11cb2b8a8
(c-beginning-of-decl-1): Better way to handle protection labels, one
Martin Stjernholm <mast@lysator.liu.se>
parents:
44728
diff
changeset
|
7508 (match-beginning 1) |
11c11cb2b8a8
(c-beginning-of-decl-1): Better way to handle protection labels, one
Martin Stjernholm <mast@lysator.liu.se>
parents:
44728
diff
changeset
|
7509 (not (eq (char-before) ?_)) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
7510 ;; Check that the first following paren is |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
7511 ;; the block. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
7512 (c-syntactic-re-search-forward "[;=\(\[{]" |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
7513 lim t t t) |
45049
11c11cb2b8a8
(c-beginning-of-decl-1): Better way to handle protection labels, one
Martin Stjernholm <mast@lysator.liu.se>
parents:
44728
diff
changeset
|
7514 (eq (char-before) ?{))))))) |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7515 ;; The declaration doesn't have any of the |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7516 ;; `c-opt-block-decls-with-vars' keywords in the |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7517 ;; beginning, so it ends here at the end of the block. |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7518 (throw 'return t))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7519 |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7520 (c-with-syntax-table decl-syntax-table |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7521 (while (progn |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7522 (if (eq (char-before) ?\;) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7523 (throw 'return t)) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
7524 (c-syntactic-re-search-forward ";" nil 'move t)))) |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7525 nil))) |
30403
68e734ab7d5d
(c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents:
26817
diff
changeset
|
7526 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7527 (defun c-looking-at-decl-block (containing-sexp goto-start &optional limit) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7528 ;; Assuming the point is at an open brace, check if it starts a |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7529 ;; block that contains another declaration level, i.e. that isn't a |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7530 ;; statement block or a brace list, and if so return non-nil. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7531 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7532 ;; If the check is successful, the return value is the start of the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7533 ;; keyword that tells what kind of construct it is, i.e. typically |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7534 ;; what `c-decl-block-key' matched. Also, if GOTO-START is set then |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7535 ;; the point will be at the start of the construct, before any |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7536 ;; leading specifiers, otherwise it's at the returned position. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7537 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7538 ;; The point is clobbered if the check is unsuccessful. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7539 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7540 ;; CONTAINING-SEXP is the position of the open of the surrounding |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7541 ;; paren, or nil if none. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7542 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7543 ;; The optional LIMIT limits the backward search for the start of |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7544 ;; the construct. It's assumed to be at a syntactically relevant |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7545 ;; position. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7546 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7547 ;; If any template arglists are found in the searched region before |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7548 ;; the open brace, they get marked with paren syntax. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7549 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7550 ;; This function might do hidden buffer changes. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7551 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7552 (let ((open-brace (point)) kwd-start first-specifier-pos) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7553 (c-syntactic-skip-backward c-block-prefix-charset limit t) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7554 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7555 (when (and c-recognize-<>-arglists |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7556 (eq (char-before) ?>)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7557 ;; Could be at the end of a template arglist. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7558 (let ((c-parse-and-markup-<>-arglists t) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7559 (c-disallow-comma-in-<>-arglists |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7560 (and containing-sexp |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7561 (not (eq (char-after containing-sexp) ?{))))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7562 (while (and |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7563 (c-backward-<>-arglist nil limit) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7564 (progn |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7565 (c-syntactic-skip-backward c-block-prefix-charset limit t) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7566 (eq (char-before) ?>)))))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7567 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7568 ;; Note: Can't get bogus hits inside template arglists below since they |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7569 ;; have gotten paren syntax above. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7570 (when (and |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7571 ;; If `goto-start' is set we begin by searching for the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7572 ;; first possible position of a leading specifier list. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7573 ;; The `c-decl-block-key' search continues from there since |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7574 ;; we know it can't match earlier. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7575 (if goto-start |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7576 (when (c-syntactic-re-search-forward c-symbol-start |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7577 open-brace t t) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7578 (goto-char (setq first-specifier-pos (match-beginning 0))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7579 t) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7580 t) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7581 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7582 (cond |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7583 ((c-syntactic-re-search-forward c-decl-block-key open-brace t t t) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7584 (goto-char (setq kwd-start (match-beginning 0))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7585 (or |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7586 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7587 ;; Found a keyword that can't be a type? |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7588 (match-beginning 1) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7589 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7590 ;; Can be a type too, in which case it's the return type of a |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7591 ;; function (under the assumption that no declaration level |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7592 ;; block construct starts with a type). |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7593 (not (c-forward-type)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7594 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7595 ;; Jumped over a type, but it could be a declaration keyword |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7596 ;; followed by the declared identifier that we've jumped over |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7597 ;; instead (e.g. in "class Foo {"). If it indeed is a type |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7598 ;; then we should be at the declarator now, so check for a |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7599 ;; valid declarator start. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7600 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7601 ;; Note: This doesn't cope with the case when a declared |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7602 ;; identifier is followed by e.g. '(' in a language where '(' |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7603 ;; also might be part of a declarator expression. Currently |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7604 ;; there's no such language. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7605 (not (or (looking-at c-symbol-start) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7606 (looking-at c-type-decl-prefix-key))))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7607 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7608 ;; In Pike a list of modifiers may be followed by a brace |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7609 ;; to make them apply to many identifiers. Note that the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7610 ;; match data will be empty on return in this case. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7611 ((and (c-major-mode-is 'pike-mode) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7612 (progn |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7613 (goto-char open-brace) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7614 (= (c-backward-token-2) 0)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7615 (looking-at c-specifier-key) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7616 ;; Use this variant to avoid yet another special regexp. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7617 (c-keyword-member (c-keyword-sym (match-string 1)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7618 'c-modifier-kwds)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7619 (setq kwd-start (point)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7620 t))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7621 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7622 ;; Got a match. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7623 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7624 (if goto-start |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7625 ;; Back up over any preceding specifiers and their clauses |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7626 ;; by going forward from `first-specifier-pos', which is the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7627 ;; earliest possible position where the specifier list can |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7628 ;; start. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7629 (progn |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7630 (goto-char first-specifier-pos) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7631 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7632 (while (< (point) kwd-start) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7633 (if (looking-at c-symbol-key) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7634 ;; Accept any plain symbol token on the ground that |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7635 ;; it's a specifier masked through a macro (just |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7636 ;; like `c-forward-decl-or-cast-1' skip forward over |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7637 ;; such tokens). |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7638 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7639 ;; Could be more restrictive wrt invalid keywords, |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7640 ;; but that'd only occur in invalid code so there's |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7641 ;; no use spending effort on it. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7642 (let ((end (match-end 0))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7643 (unless (c-forward-keyword-clause 0) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7644 (goto-char end) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7645 (c-forward-syntactic-ws))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7646 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7647 ;; Can't parse a declaration preamble and is still |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7648 ;; before `kwd-start'. That means `first-specifier-pos' |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7649 ;; was in some earlier construct. Search again. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7650 (if (c-syntactic-re-search-forward c-symbol-start |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7651 kwd-start 'move t) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7652 (goto-char (setq first-specifier-pos (match-beginning 0))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7653 ;; Got no preamble before the block declaration keyword. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7654 (setq first-specifier-pos kwd-start)))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7655 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7656 (goto-char first-specifier-pos)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7657 (goto-char kwd-start)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7658 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7659 kwd-start))) |
30403
68e734ab7d5d
(c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents:
26817
diff
changeset
|
7660 |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7661 (defun c-search-uplist-for-classkey (paren-state) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7662 ;; Check if the closest containing paren sexp is a declaration |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7663 ;; block, returning a 2 element vector in that case. Aref 0 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7664 ;; contains the bufpos at boi of the class key line, and aref 1 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7665 ;; contains the bufpos of the open brace. This function is an |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7666 ;; obsolete wrapper for `c-looking-at-decl-block'. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7667 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7668 ;; This function might do hidden buffer changes. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7669 (let ((open-paren-pos (c-most-enclosing-brace paren-state))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7670 (when open-paren-pos |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7671 (save-excursion |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7672 (goto-char open-paren-pos) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7673 (when (and (eq (char-after) ?{) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7674 (c-looking-at-decl-block |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7675 (c-safe-position open-paren-pos paren-state) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7676 nil)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7677 (back-to-indentation) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7678 (vector (point) open-paren-pos)))))) |
18720 | 7679 |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7680 (defun c-inside-bracelist-p (containing-sexp paren-state) |
18720 | 7681 ;; return the buffer position of the beginning of the brace list |
7682 ;; statement if we're inside a brace list, otherwise return nil. | |
7683 ;; CONTAINING-SEXP is the buffer pos of the innermost containing | |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7684 ;; paren. PAREN-STATE is the remainder of the state of enclosing |
36920 | 7685 ;; braces |
18720 | 7686 ;; |
7687 ;; N.B.: This algorithm can potentially get confused by cpp macros | |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7688 ;; placed in inconvenient locations. It's a trade-off we make for |
18720 | 7689 ;; speed. |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7690 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7691 ;; This function might do hidden buffer changes. |
18720 | 7692 (or |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
7693 ;; This will pick up brace list declarations. |
21106
5e5fa0a34cb0
(c-inside-bracelist-p): Fix for enum test.
Richard M. Stallman <rms@gnu.org>
parents:
20914
diff
changeset
|
7694 (c-safe |
5e5fa0a34cb0
(c-inside-bracelist-p): Fix for enum test.
Richard M. Stallman <rms@gnu.org>
parents:
20914
diff
changeset
|
7695 (save-excursion |
5e5fa0a34cb0
(c-inside-bracelist-p): Fix for enum test.
Richard M. Stallman <rms@gnu.org>
parents:
20914
diff
changeset
|
7696 (goto-char containing-sexp) |
24282 | 7697 (c-forward-sexp -1) |
21106
5e5fa0a34cb0
(c-inside-bracelist-p): Fix for enum test.
Richard M. Stallman <rms@gnu.org>
parents:
20914
diff
changeset
|
7698 (let (bracepos) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
7699 (if (and (or (looking-at c-brace-list-key) |
24282 | 7700 (progn (c-forward-sexp -1) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
7701 (looking-at c-brace-list-key))) |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7702 (setq bracepos (c-down-list-forward (point))) |
21106
5e5fa0a34cb0
(c-inside-bracelist-p): Fix for enum test.
Richard M. Stallman <rms@gnu.org>
parents:
20914
diff
changeset
|
7703 (not (c-crosses-statement-barrier-p (point) |
5e5fa0a34cb0
(c-inside-bracelist-p): Fix for enum test.
Richard M. Stallman <rms@gnu.org>
parents:
20914
diff
changeset
|
7704 (- bracepos 2)))) |
5e5fa0a34cb0
(c-inside-bracelist-p): Fix for enum test.
Richard M. Stallman <rms@gnu.org>
parents:
20914
diff
changeset
|
7705 (point))))) |
18720 | 7706 ;; this will pick up array/aggregate init lists, even if they are nested. |
7707 (save-excursion | |
24282 | 7708 (let ((class-key |
7709 ;; Pike can have class definitions anywhere, so we must | |
7710 ;; check for the class key here. | |
7711 (and (c-major-mode-is 'pike-mode) | |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7712 c-decl-block-key)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7713 bufpos braceassignp lim next-containing) |
18720 | 7714 (while (and (not bufpos) |
7715 containing-sexp) | |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7716 (when paren-state |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7717 (if (consp (car paren-state)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7718 (setq lim (cdr (car paren-state)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7719 paren-state (cdr paren-state)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7720 (setq lim (car paren-state))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7721 (when paren-state |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7722 (setq next-containing (car paren-state) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7723 paren-state (cdr paren-state)))) |
18720 | 7724 (goto-char containing-sexp) |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7725 (if (c-looking-at-inexpr-block next-containing next-containing) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7726 ;; We're in an in-expression block of some kind. Do not |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7727 ;; check nesting. We deliberately set the limit to the |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7728 ;; containing sexp, so that c-looking-at-inexpr-block |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7729 ;; doesn't check for an identifier before it. |
24282 | 7730 (setq containing-sexp nil) |
7731 ;; see if the open brace is preceded by = or [...] in | |
7732 ;; this statement, but watch out for operator= | |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7733 (setq braceassignp 'dontknow) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
7734 (c-backward-token-2 1 t lim) |
25178
1dc57e616e8d
(c-inside-bracelist-p): Tighter test for
Richard M. Stallman <rms@gnu.org>
parents:
24335
diff
changeset
|
7735 ;; Checks to do only on the first sexp before the brace. |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
7736 (when (and c-opt-inexpr-brace-list-key |
25178
1dc57e616e8d
(c-inside-bracelist-p): Tighter test for
Richard M. Stallman <rms@gnu.org>
parents:
24335
diff
changeset
|
7737 (eq (char-after) ?\[)) |
1dc57e616e8d
(c-inside-bracelist-p): Tighter test for
Richard M. Stallman <rms@gnu.org>
parents:
24335
diff
changeset
|
7738 ;; In Java, an initialization brace list may follow |
1dc57e616e8d
(c-inside-bracelist-p): Tighter test for
Richard M. Stallman <rms@gnu.org>
parents:
24335
diff
changeset
|
7739 ;; directly after "new Foo[]", so check for a "new" |
1dc57e616e8d
(c-inside-bracelist-p): Tighter test for
Richard M. Stallman <rms@gnu.org>
parents:
24335
diff
changeset
|
7740 ;; earlier. |
1dc57e616e8d
(c-inside-bracelist-p): Tighter test for
Richard M. Stallman <rms@gnu.org>
parents:
24335
diff
changeset
|
7741 (while (eq braceassignp 'dontknow) |
1dc57e616e8d
(c-inside-bracelist-p): Tighter test for
Richard M. Stallman <rms@gnu.org>
parents:
24335
diff
changeset
|
7742 (setq braceassignp |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
7743 (cond ((/= (c-backward-token-2 1 t lim) 0) nil) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
7744 ((looking-at c-opt-inexpr-brace-list-key) t) |
25178
1dc57e616e8d
(c-inside-bracelist-p): Tighter test for
Richard M. Stallman <rms@gnu.org>
parents:
24335
diff
changeset
|
7745 ((looking-at "\\sw\\|\\s_\\|[.[]") |
1dc57e616e8d
(c-inside-bracelist-p): Tighter test for
Richard M. Stallman <rms@gnu.org>
parents:
24335
diff
changeset
|
7746 ;; Carry on looking if this is an |
1dc57e616e8d
(c-inside-bracelist-p): Tighter test for
Richard M. Stallman <rms@gnu.org>
parents:
24335
diff
changeset
|
7747 ;; identifier (may contain "." in Java) |
1dc57e616e8d
(c-inside-bracelist-p): Tighter test for
Richard M. Stallman <rms@gnu.org>
parents:
24335
diff
changeset
|
7748 ;; or another "[]" sexp. |
1dc57e616e8d
(c-inside-bracelist-p): Tighter test for
Richard M. Stallman <rms@gnu.org>
parents:
24335
diff
changeset
|
7749 'dontknow) |
1dc57e616e8d
(c-inside-bracelist-p): Tighter test for
Richard M. Stallman <rms@gnu.org>
parents:
24335
diff
changeset
|
7750 (t nil))))) |
1dc57e616e8d
(c-inside-bracelist-p): Tighter test for
Richard M. Stallman <rms@gnu.org>
parents:
24335
diff
changeset
|
7751 ;; Checks to do on all sexps before the brace, up to the |
1dc57e616e8d
(c-inside-bracelist-p): Tighter test for
Richard M. Stallman <rms@gnu.org>
parents:
24335
diff
changeset
|
7752 ;; beginning of the statement. |
1dc57e616e8d
(c-inside-bracelist-p): Tighter test for
Richard M. Stallman <rms@gnu.org>
parents:
24335
diff
changeset
|
7753 (while (eq braceassignp 'dontknow) |
24282 | 7754 (cond ((eq (char-after) ?\;) |
7755 (setq braceassignp nil)) | |
7756 ((and class-key | |
7757 (looking-at class-key)) | |
7758 (setq braceassignp nil)) | |
7759 ((eq (char-after) ?=) | |
7760 ;; We've seen a =, but must check earlier tokens so | |
7761 ;; that it isn't something that should be ignored. | |
7762 (setq braceassignp 'maybe) | |
7763 (while (and (eq braceassignp 'maybe) | |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
7764 (zerop (c-backward-token-2 1 t lim))) |
24282 | 7765 (setq braceassignp |
7766 (cond | |
7767 ;; Check for operator = | |
75027
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
7768 ((and c-opt-op-identifier-prefix |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
7769 (looking-at c-opt-op-identifier-prefix)) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7770 nil) |
36920 | 7771 ;; Check for `<opchar>= in Pike. |
7772 ((and (c-major-mode-is 'pike-mode) | |
7773 (or (eq (char-after) ?`) | |
7774 ;; Special case for Pikes | |
7775 ;; `[]=, since '[' is not in | |
7776 ;; the punctuation class. | |
7777 (and (eq (char-after) ?\[) | |
7778 (eq (char-before) ?`)))) | |
7779 nil) | |
24282 | 7780 ((looking-at "\\s.") 'maybe) |
7781 ;; make sure we're not in a C++ template | |
7782 ;; argument assignment | |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7783 ((and |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7784 (c-major-mode-is 'c++-mode) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7785 (save-excursion |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7786 (let ((here (point)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7787 (pos< (progn |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7788 (skip-chars-backward "^<>") |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7789 (point)))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7790 (and (eq (char-before) ?<) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7791 (not (c-crosses-statement-barrier-p |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7792 pos< here)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7793 (not (c-in-literal)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7794 )))) |
24282 | 7795 nil) |
25178
1dc57e616e8d
(c-inside-bracelist-p): Tighter test for
Richard M. Stallman <rms@gnu.org>
parents:
24335
diff
changeset
|
7796 (t t)))))) |
1dc57e616e8d
(c-inside-bracelist-p): Tighter test for
Richard M. Stallman <rms@gnu.org>
parents:
24335
diff
changeset
|
7797 (if (and (eq braceassignp 'dontknow) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
7798 (/= (c-backward-token-2 1 t lim) 0)) |
25178
1dc57e616e8d
(c-inside-bracelist-p): Tighter test for
Richard M. Stallman <rms@gnu.org>
parents:
24335
diff
changeset
|
7799 (setq braceassignp nil))) |
1dc57e616e8d
(c-inside-bracelist-p): Tighter test for
Richard M. Stallman <rms@gnu.org>
parents:
24335
diff
changeset
|
7800 (if (not braceassignp) |
24282 | 7801 (if (eq (char-after) ?\;) |
7802 ;; Brace lists can't contain a semicolon, so we're done. | |
7803 (setq containing-sexp nil) | |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7804 ;; Go up one level. |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7805 (setq containing-sexp next-containing |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7806 lim nil |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7807 next-containing nil)) |
24282 | 7808 ;; we've hit the beginning of the aggregate list |
7809 (c-beginning-of-statement-1 | |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7810 (c-most-enclosing-brace paren-state)) |
24282 | 7811 (setq bufpos (point)))) |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7812 ) |
18720 | 7813 bufpos)) |
7814 )) | |
7815 | |
24282 | 7816 (defun c-looking-at-special-brace-list (&optional lim) |
7817 ;; If we're looking at the start of a pike-style list, ie `({ })', | |
30403
68e734ab7d5d
(c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents:
26817
diff
changeset
|
7818 ;; `([ ])', `(< >)' etc, a cons of a cons of its starting and ending |
24282 | 7819 ;; positions and its entry in c-special-brace-lists is returned, nil |
7820 ;; otherwise. The ending position is nil if the list is still open. | |
7821 ;; LIM is the limit for forward search. The point may either be at | |
7822 ;; the `(' or at the following paren character. Tries to check the | |
7823 ;; matching closer, but assumes it's correct if no balanced paren is | |
7824 ;; found (i.e. the case `({ ... } ... )' is detected as _not_ being | |
7825 ;; a special brace list). | |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7826 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7827 ;; This function might do hidden buffer changes. |
24282 | 7828 (if c-special-brace-lists |
7829 (condition-case () | |
7830 (save-excursion | |
7831 (let ((beg (point)) | |
56646
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
7832 inner-beg end type) |
24282 | 7833 (c-forward-syntactic-ws) |
7834 (if (eq (char-after) ?\() | |
7835 (progn | |
7836 (forward-char 1) | |
7837 (c-forward-syntactic-ws) | |
56646
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
7838 (setq inner-beg (point)) |
24282 | 7839 (setq type (assq (char-after) c-special-brace-lists))) |
7840 (if (setq type (assq (char-after) c-special-brace-lists)) | |
7841 (progn | |
56646
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
7842 (setq inner-beg (point)) |
24282 | 7843 (c-backward-syntactic-ws) |
7844 (forward-char -1) | |
7845 (setq beg (if (eq (char-after) ?\() | |
7846 (point) | |
7847 nil))))) | |
7848 (if (and beg type) | |
56646
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
7849 (if (and (c-safe |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
7850 (goto-char beg) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
7851 (c-forward-sexp 1) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
7852 (setq end (point)) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
7853 (= (char-before) ?\))) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
7854 (c-safe |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
7855 (goto-char inner-beg) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
7856 (if (looking-at "\\s(") |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
7857 ;; Check balancing of the inner paren |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
7858 ;; below. |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
7859 (progn |
24282 | 7860 (c-forward-sexp 1) |
56646
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
7861 t) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
7862 ;; If the inner char isn't a paren then |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
7863 ;; we can't check balancing, so just |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
7864 ;; check the char before the outer |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
7865 ;; closing paren. |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
7866 (goto-char end) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
7867 (backward-char) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
7868 (c-backward-syntactic-ws) |
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
7869 (= (char-before) (cdr type))))) |
24282 | 7870 (if (or (/= (char-syntax (char-before)) ?\)) |
7871 (= (progn | |
7872 (c-forward-syntactic-ws) | |
7873 (point)) | |
7874 (1- end))) | |
7875 (cons (cons beg end) type)) | |
7876 (cons (list beg) type))))) | |
7877 (error nil)))) | |
7878 | |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7879 (defun c-looking-at-bos (&optional lim) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7880 ;; Return non-nil if between two statements or declarations, assuming |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7881 ;; point is not inside a literal or comment. |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7882 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7883 ;; Obsolete - `c-at-statement-start-p' or `c-at-expression-start-p' |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7884 ;; are recommended instead. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7885 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7886 ;; This function might do hidden buffer changes. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7887 (c-at-statement-start-p)) |
104693
eee42a220506
* progmodes/cc-vars.el (c-comment-continuation-stars):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
102168
diff
changeset
|
7888 (make-obsolete 'c-looking-at-bos 'c-at-statement-start-p "22.1") |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7889 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7890 (defun c-looking-at-inexpr-block (lim containing-sexp &optional check-at-end) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7891 ;; Return non-nil if we're looking at the beginning of a block |
24282 | 7892 ;; inside an expression. The value returned is actually a cons of |
7893 ;; either 'inlambda, 'inexpr-statement or 'inexpr-class and the | |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7894 ;; position of the beginning of the construct. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7895 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7896 ;; LIM limits the backward search. CONTAINING-SEXP is the start |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7897 ;; position of the closest containing list. If it's nil, the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7898 ;; containing paren isn't used to decide whether we're inside an |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7899 ;; expression or not. If both LIM and CONTAINING-SEXP are used, LIM |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7900 ;; needs to be farther back. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7901 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7902 ;; If CHECK-AT-END is non-nil then extra checks at the end of the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7903 ;; brace block might be done. It should only be used when the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7904 ;; construct can be assumed to be complete, i.e. when the original |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7905 ;; starting position was further down than that. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7906 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7907 ;; This function might do hidden buffer changes. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7908 |
24282 | 7909 (save-excursion |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7910 (let ((res 'maybe) passed-paren |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7911 (closest-lim (or containing-sexp lim (point-min))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7912 ;; Look at the character after point only as a last resort |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7913 ;; when we can't disambiguate. |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7914 (block-follows (and (eq (char-after) ?{) (point)))) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7915 |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7916 (while (and (eq res 'maybe) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7917 (progn (c-backward-syntactic-ws) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7918 (> (point) closest-lim)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7919 (not (bobp)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7920 (progn (backward-char) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7921 (looking-at "[\]\).]\\|\\w\\|\\s_")) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7922 (c-safe (forward-char) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7923 (goto-char (scan-sexps (point) -1)))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7924 |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7925 (setq res |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7926 (if (looking-at c-keywords-regexp) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7927 (let ((kw-sym (c-keyword-sym (match-string 1)))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7928 (cond |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7929 ((and block-follows |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7930 (c-keyword-member kw-sym 'c-inexpr-class-kwds)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7931 (and (not (eq passed-paren ?\[)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7932 (or (not (looking-at c-class-key)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7933 ;; If the class definition is at the start of |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7934 ;; a statement, we don't consider it an |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7935 ;; in-expression class. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7936 (let ((prev (point))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7937 (while (and |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7938 (= (c-backward-token-2 1 nil closest-lim) 0) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7939 (eq (char-syntax (char-after)) ?w)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7940 (setq prev (point))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7941 (goto-char prev) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7942 (not (c-at-statement-start-p))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7943 ;; Also, in Pike we treat it as an |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7944 ;; in-expression class if it's used in an |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7945 ;; object clone expression. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7946 (save-excursion |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7947 (and check-at-end |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7948 (c-major-mode-is 'pike-mode) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7949 (progn (goto-char block-follows) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7950 (zerop (c-forward-token-2 1 t))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7951 (eq (char-after) ?\()))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7952 (cons 'inexpr-class (point)))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7953 ((c-keyword-member kw-sym 'c-inexpr-block-kwds) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7954 (when (not passed-paren) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7955 (cons 'inexpr-statement (point)))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7956 ((c-keyword-member kw-sym 'c-lambda-kwds) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7957 (when (or (not passed-paren) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7958 (eq passed-paren ?\()) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7959 (cons 'inlambda (point)))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7960 ((c-keyword-member kw-sym 'c-block-stmt-kwds) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7961 nil) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7962 (t |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7963 'maybe))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7964 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7965 (if (looking-at "\\s(") |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7966 (if passed-paren |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7967 (if (and (eq passed-paren ?\[) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7968 (eq (char-after) ?\[)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7969 ;; Accept several square bracket sexps for |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7970 ;; Java array initializations. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7971 'maybe) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7972 (setq passed-paren (char-after)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7973 'maybe) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7974 'maybe)))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7975 |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7976 (if (eq res 'maybe) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7977 (when (and c-recognize-paren-inexpr-blocks |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7978 block-follows |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7979 containing-sexp |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7980 (eq (char-after containing-sexp) ?\()) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7981 (goto-char containing-sexp) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7982 (if (or (save-excursion |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7983 (c-backward-syntactic-ws lim) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7984 (and (> (point) (or lim (point-min))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7985 (c-on-identifier))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7986 (and c-special-brace-lists |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7987 (c-looking-at-special-brace-list))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7988 nil |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7989 (cons 'inexpr-statement (point)))) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7990 |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7991 res)))) |
24282 | 7992 |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7993 (defun c-looking-at-inexpr-block-backward (paren-state) |
24282 | 7994 ;; Returns non-nil if we're looking at the end of an in-expression |
7995 ;; block, otherwise the same as `c-looking-at-inexpr-block'. | |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
7996 ;; PAREN-STATE is the paren state relevant at the current position. |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7997 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
7998 ;; This function might do hidden buffer changes. |
24282 | 7999 (save-excursion |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8000 ;; We currently only recognize a block. |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8001 (let ((here (point)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8002 (elem (car-safe paren-state)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8003 containing-sexp) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8004 (when (and (consp elem) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8005 (progn (goto-char (cdr elem)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8006 (c-forward-syntactic-ws here) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8007 (= (point) here))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8008 (goto-char (car elem)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8009 (if (setq paren-state (cdr paren-state)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8010 (setq containing-sexp (car-safe paren-state))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8011 (c-looking-at-inexpr-block (c-safe-position containing-sexp |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8012 paren-state) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8013 containing-sexp))))) |
24282 | 8014 |
18720 | 8015 |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8016 ;; `c-guess-basic-syntax' and the functions that precedes it below |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8017 ;; implements the main decision tree for determining the syntactic |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8018 ;; analysis of the current line of code. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8019 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8020 ;; Dynamically bound to t when `c-guess-basic-syntax' is called during |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8021 ;; auto newline analysis. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8022 (defvar c-auto-newline-analysis nil) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8023 |
78656
b3cad8795b91
(c-brace-anchor-point): new function. (c-add-stmt-syntax): Give accurate
Alan Mackenzie <acm@muc.de>
parents:
78487
diff
changeset
|
8024 (defun c-brace-anchor-point (bracepos) |
b3cad8795b91
(c-brace-anchor-point): new function. (c-add-stmt-syntax): Give accurate
Alan Mackenzie <acm@muc.de>
parents:
78487
diff
changeset
|
8025 ;; BRACEPOS is the position of a brace in a construct like "namespace |
b3cad8795b91
(c-brace-anchor-point): new function. (c-add-stmt-syntax): Give accurate
Alan Mackenzie <acm@muc.de>
parents:
78487
diff
changeset
|
8026 ;; Bar {". Return the anchor point in this construct; this is the |
b3cad8795b91
(c-brace-anchor-point): new function. (c-add-stmt-syntax): Give accurate
Alan Mackenzie <acm@muc.de>
parents:
78487
diff
changeset
|
8027 ;; earliest symbol on the brace's line which isn't earlier than |
b3cad8795b91
(c-brace-anchor-point): new function. (c-add-stmt-syntax): Give accurate
Alan Mackenzie <acm@muc.de>
parents:
78487
diff
changeset
|
8028 ;; "namespace". |
b3cad8795b91
(c-brace-anchor-point): new function. (c-add-stmt-syntax): Give accurate
Alan Mackenzie <acm@muc.de>
parents:
78487
diff
changeset
|
8029 ;; |
b3cad8795b91
(c-brace-anchor-point): new function. (c-add-stmt-syntax): Give accurate
Alan Mackenzie <acm@muc.de>
parents:
78487
diff
changeset
|
8030 ;; Currently (2007-08-17), "like namespace" means "matches |
b3cad8795b91
(c-brace-anchor-point): new function. (c-add-stmt-syntax): Give accurate
Alan Mackenzie <acm@muc.de>
parents:
78487
diff
changeset
|
8031 ;; c-other-block-decl-kwds". It doesn't work with "class" or "struct" |
b3cad8795b91
(c-brace-anchor-point): new function. (c-add-stmt-syntax): Give accurate
Alan Mackenzie <acm@muc.de>
parents:
78487
diff
changeset
|
8032 ;; or anything like that. |
b3cad8795b91
(c-brace-anchor-point): new function. (c-add-stmt-syntax): Give accurate
Alan Mackenzie <acm@muc.de>
parents:
78487
diff
changeset
|
8033 (save-excursion |
b3cad8795b91
(c-brace-anchor-point): new function. (c-add-stmt-syntax): Give accurate
Alan Mackenzie <acm@muc.de>
parents:
78487
diff
changeset
|
8034 (let ((boi (c-point 'boi bracepos))) |
b3cad8795b91
(c-brace-anchor-point): new function. (c-add-stmt-syntax): Give accurate
Alan Mackenzie <acm@muc.de>
parents:
78487
diff
changeset
|
8035 (goto-char bracepos) |
b3cad8795b91
(c-brace-anchor-point): new function. (c-add-stmt-syntax): Give accurate
Alan Mackenzie <acm@muc.de>
parents:
78487
diff
changeset
|
8036 (while (and (> (point) boi) |
b3cad8795b91
(c-brace-anchor-point): new function. (c-add-stmt-syntax): Give accurate
Alan Mackenzie <acm@muc.de>
parents:
78487
diff
changeset
|
8037 (not (looking-at c-other-decl-block-key))) |
b3cad8795b91
(c-brace-anchor-point): new function. (c-add-stmt-syntax): Give accurate
Alan Mackenzie <acm@muc.de>
parents:
78487
diff
changeset
|
8038 (c-backward-token-2)) |
b3cad8795b91
(c-brace-anchor-point): new function. (c-add-stmt-syntax): Give accurate
Alan Mackenzie <acm@muc.de>
parents:
78487
diff
changeset
|
8039 (if (> (point) boi) (point) boi)))) |
b3cad8795b91
(c-brace-anchor-point): new function. (c-add-stmt-syntax): Give accurate
Alan Mackenzie <acm@muc.de>
parents:
78487
diff
changeset
|
8040 |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8041 (defsubst c-add-syntax (symbol &rest args) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8042 ;; A simple function to prepend a new syntax element to |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8043 ;; `c-syntactic-context'. Using `setq' on it is unsafe since it |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8044 ;; should always be dynamically bound but since we read it first |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8045 ;; we'll fail properly anyway if this function is misused. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8046 (setq c-syntactic-context (cons (cons symbol args) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8047 c-syntactic-context))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8048 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8049 (defsubst c-append-syntax (symbol &rest args) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8050 ;; Like `c-add-syntax' but appends to the end of the syntax list. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8051 ;; (Normally not necessary.) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8052 (setq c-syntactic-context (nconc c-syntactic-context |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8053 (list (cons symbol args))))) |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8054 |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8055 (defun c-add-stmt-syntax (syntax-symbol |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8056 syntax-extra-args |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8057 stop-at-boi-only |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8058 containing-sexp |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8059 paren-state) |
75027
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
8060 ;; Add the indicated SYNTAX-SYMBOL to `c-syntactic-context', extending it as |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
8061 ;; needed with further syntax elements of the types `substatement', |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
8062 ;; `inexpr-statement', `arglist-cont-nonempty', `statement-block-intro', and |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
8063 ;; `defun-block-intro'. |
79408
a29ca195b71e
(c-crosses-statement-barrier-p): Fix typo in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents:
78656
diff
changeset
|
8064 ;; |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8065 ;; Do the generic processing to anchor the given syntax symbol on |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8066 ;; the preceding statement: Skip over any labels and containing |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8067 ;; statements on the same line, and then search backward until we |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8068 ;; find a statement or block start that begins at boi without a |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8069 ;; label or comment. |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8070 ;; |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8071 ;; Point is assumed to be at the prospective anchor point for the |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8072 ;; given SYNTAX-SYMBOL. More syntax entries are added if we need to |
78656
b3cad8795b91
(c-brace-anchor-point): new function. (c-add-stmt-syntax): Give accurate
Alan Mackenzie <acm@muc.de>
parents:
78487
diff
changeset
|
8073 ;; skip past open parens and containing statements. Most of the added |
b3cad8795b91
(c-brace-anchor-point): new function. (c-add-stmt-syntax): Give accurate
Alan Mackenzie <acm@muc.de>
parents:
78487
diff
changeset
|
8074 ;; syntax elements will get the same anchor point - the exception is |
b3cad8795b91
(c-brace-anchor-point): new function. (c-add-stmt-syntax): Give accurate
Alan Mackenzie <acm@muc.de>
parents:
78487
diff
changeset
|
8075 ;; for an anchor in a construct like "namespace"[*] - this is as early |
b3cad8795b91
(c-brace-anchor-point): new function. (c-add-stmt-syntax): Give accurate
Alan Mackenzie <acm@muc.de>
parents:
78487
diff
changeset
|
8076 ;; as possible in the construct but on the same line as the {. |
b3cad8795b91
(c-brace-anchor-point): new function. (c-add-stmt-syntax): Give accurate
Alan Mackenzie <acm@muc.de>
parents:
78487
diff
changeset
|
8077 ;; |
b3cad8795b91
(c-brace-anchor-point): new function. (c-add-stmt-syntax): Give accurate
Alan Mackenzie <acm@muc.de>
parents:
78487
diff
changeset
|
8078 ;; [*] i.e. with a keyword matching c-other-block-decl-kwds. |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8079 ;; |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8080 ;; SYNTAX-EXTRA-ARGS are a list of the extra arguments for the |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8081 ;; syntax symbol. They are appended after the anchor point. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8082 ;; |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8083 ;; If STOP-AT-BOI-ONLY is nil, we can stop in the middle of the line |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8084 ;; if the current statement starts there. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8085 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8086 ;; Note: It's not a problem if PAREN-STATE "overshoots" |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8087 ;; CONTAINING-SEXP, i.e. contains info about parens further down. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8088 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8089 ;; This function might do hidden buffer changes. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8090 |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8091 (if (= (point) (c-point 'boi)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8092 ;; This is by far the most common case, so let's give it special |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8093 ;; treatment. |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8094 (apply 'c-add-syntax syntax-symbol (point) syntax-extra-args) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8095 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8096 (let ((syntax-last c-syntactic-context) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8097 (boi (c-point 'boi)) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8098 ;; Set when we're on a label, so that we don't stop there. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8099 ;; FIXME: To be complete we should check if we're on a label |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8100 ;; now at the start. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8101 on-label) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8102 |
78656
b3cad8795b91
(c-brace-anchor-point): new function. (c-add-stmt-syntax): Give accurate
Alan Mackenzie <acm@muc.de>
parents:
78487
diff
changeset
|
8103 ;; Use point as the anchor point for "namespace", "extern", etc. |
b3cad8795b91
(c-brace-anchor-point): new function. (c-add-stmt-syntax): Give accurate
Alan Mackenzie <acm@muc.de>
parents:
78487
diff
changeset
|
8104 (apply 'c-add-syntax syntax-symbol |
b3cad8795b91
(c-brace-anchor-point): new function. (c-add-stmt-syntax): Give accurate
Alan Mackenzie <acm@muc.de>
parents:
78487
diff
changeset
|
8105 (if (rassq syntax-symbol c-other-decl-block-key-in-symbols-alist) |
b3cad8795b91
(c-brace-anchor-point): new function. (c-add-stmt-syntax): Give accurate
Alan Mackenzie <acm@muc.de>
parents:
78487
diff
changeset
|
8106 (point) nil) |
b3cad8795b91
(c-brace-anchor-point): new function. (c-add-stmt-syntax): Give accurate
Alan Mackenzie <acm@muc.de>
parents:
78487
diff
changeset
|
8107 syntax-extra-args) |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8108 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8109 ;; Loop while we have to back out of containing blocks. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8110 (while |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8111 (and |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8112 (catch 'back-up-block |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8113 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8114 ;; Loop while we have to back up statements. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8115 (while (or (/= (point) boi) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8116 on-label |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8117 (looking-at c-comment-start-regexp)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8118 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8119 ;; Skip past any comments that stands between the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8120 ;; statement start and boi. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8121 (let ((savepos (point))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8122 (while (and (/= savepos boi) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8123 (c-backward-single-comment)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8124 (setq savepos (point) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8125 boi (c-point 'boi))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8126 (goto-char savepos)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8127 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8128 ;; Skip to the beginning of this statement or backward |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8129 ;; another one. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8130 (let ((old-pos (point)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8131 (old-boi boi) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8132 (step-type (c-beginning-of-statement-1 containing-sexp))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8133 (setq boi (c-point 'boi) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8134 on-label (eq step-type 'label)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8135 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8136 (cond ((= (point) old-pos) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8137 ;; If we didn't move we're at the start of a block and |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8138 ;; have to continue outside it. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8139 (throw 'back-up-block t)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8140 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8141 ((and (eq step-type 'up) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8142 (>= (point) old-boi) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8143 (looking-at "else\\>[^_]") |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8144 (save-excursion |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8145 (goto-char old-pos) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8146 (looking-at "if\\>[^_]"))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8147 ;; Special case to avoid deeper and deeper indentation |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8148 ;; of "else if" clauses. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8149 ) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8150 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8151 ((and (not stop-at-boi-only) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8152 (/= old-pos old-boi) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8153 (memq step-type '(up previous))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8154 ;; If stop-at-boi-only is nil, we shouldn't back up |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8155 ;; over previous or containing statements to try to |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8156 ;; reach boi, so go back to the last position and |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8157 ;; exit. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8158 (goto-char old-pos) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8159 (throw 'back-up-block nil)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8160 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8161 (t |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8162 (if (and (not stop-at-boi-only) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8163 (memq step-type '(up previous beginning))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8164 ;; If we've moved into another statement then we |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8165 ;; should no longer try to stop in the middle of a |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8166 ;; line. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8167 (setq stop-at-boi-only t)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8168 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8169 ;; Record this as a substatement if we skipped up one |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8170 ;; level. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8171 (when (eq step-type 'up) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8172 (c-add-syntax 'substatement nil)))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8173 ))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8174 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8175 containing-sexp) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8176 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8177 ;; Now we have to go out of this block. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8178 (goto-char containing-sexp) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8179 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8180 ;; Don't stop in the middle of a special brace list opener |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8181 ;; like "({". |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8182 (when c-special-brace-lists |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8183 (let ((special-list (c-looking-at-special-brace-list))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8184 (when (and special-list |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8185 (< (car (car special-list)) (point))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8186 (setq containing-sexp (car (car special-list))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8187 (goto-char containing-sexp)))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8188 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8189 (setq paren-state (c-whack-state-after containing-sexp paren-state) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8190 containing-sexp (c-most-enclosing-brace paren-state) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8191 boi (c-point 'boi)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8192 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8193 ;; Analyze the construct in front of the block we've stepped out |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8194 ;; from and add the right syntactic element for it. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8195 (let ((paren-pos (point)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8196 (paren-char (char-after)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8197 step-type) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8198 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8199 (if (eq paren-char ?\() |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8200 ;; Stepped out of a parenthesis block, so we're in an |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8201 ;; expression now. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8202 (progn |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8203 (when (/= paren-pos boi) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8204 (if (and c-recognize-paren-inexpr-blocks |
45512
17fef404cef1
(c-add-stmt-syntax): Fixed some cases of wrong anchoring, e.g. for
Martin Stjernholm <mast@lysator.liu.se>
parents:
45049
diff
changeset
|
8205 (progn |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8206 (c-backward-syntactic-ws containing-sexp) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8207 (or (not (looking-at "\\>")) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8208 (not (c-on-identifier)))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8209 (save-excursion |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8210 (goto-char (1+ paren-pos)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8211 (c-forward-syntactic-ws) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8212 (eq (char-after) ?{))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8213 ;; Stepped out of an in-expression statement. This |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8214 ;; syntactic element won't get an anchor pos. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8215 (c-add-syntax 'inexpr-statement) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8216 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8217 ;; A parenthesis normally belongs to an arglist. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8218 (c-add-syntax 'arglist-cont-nonempty nil paren-pos))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8219 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8220 (goto-char (max boi |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8221 (if containing-sexp |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8222 (1+ containing-sexp) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8223 (point-min)))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8224 (setq step-type 'same |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8225 on-label nil)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8226 |
78656
b3cad8795b91
(c-brace-anchor-point): new function. (c-add-stmt-syntax): Give accurate
Alan Mackenzie <acm@muc.de>
parents:
78487
diff
changeset
|
8227 ;; Stepped out of a brace block. |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8228 (setq step-type (c-beginning-of-statement-1 containing-sexp) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8229 on-label (eq step-type 'label)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8230 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8231 (if (and (eq step-type 'same) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8232 (/= paren-pos (point))) |
78656
b3cad8795b91
(c-brace-anchor-point): new function. (c-add-stmt-syntax): Give accurate
Alan Mackenzie <acm@muc.de>
parents:
78487
diff
changeset
|
8233 (let (inexpr) |
b3cad8795b91
(c-brace-anchor-point): new function. (c-add-stmt-syntax): Give accurate
Alan Mackenzie <acm@muc.de>
parents:
78487
diff
changeset
|
8234 (cond |
b3cad8795b91
(c-brace-anchor-point): new function. (c-add-stmt-syntax): Give accurate
Alan Mackenzie <acm@muc.de>
parents:
78487
diff
changeset
|
8235 ((save-excursion |
b3cad8795b91
(c-brace-anchor-point): new function. (c-add-stmt-syntax): Give accurate
Alan Mackenzie <acm@muc.de>
parents:
78487
diff
changeset
|
8236 (goto-char paren-pos) |
b3cad8795b91
(c-brace-anchor-point): new function. (c-add-stmt-syntax): Give accurate
Alan Mackenzie <acm@muc.de>
parents:
78487
diff
changeset
|
8237 (setq inexpr (c-looking-at-inexpr-block |
b3cad8795b91
(c-brace-anchor-point): new function. (c-add-stmt-syntax): Give accurate
Alan Mackenzie <acm@muc.de>
parents:
78487
diff
changeset
|
8238 (c-safe-position containing-sexp paren-state) |
b3cad8795b91
(c-brace-anchor-point): new function. (c-add-stmt-syntax): Give accurate
Alan Mackenzie <acm@muc.de>
parents:
78487
diff
changeset
|
8239 containing-sexp))) |
b3cad8795b91
(c-brace-anchor-point): new function. (c-add-stmt-syntax): Give accurate
Alan Mackenzie <acm@muc.de>
parents:
78487
diff
changeset
|
8240 (c-add-syntax (if (eq (car inexpr) 'inlambda) |
b3cad8795b91
(c-brace-anchor-point): new function. (c-add-stmt-syntax): Give accurate
Alan Mackenzie <acm@muc.de>
parents:
78487
diff
changeset
|
8241 'defun-block-intro |
b3cad8795b91
(c-brace-anchor-point): new function. (c-add-stmt-syntax): Give accurate
Alan Mackenzie <acm@muc.de>
parents:
78487
diff
changeset
|
8242 'statement-block-intro) |
b3cad8795b91
(c-brace-anchor-point): new function. (c-add-stmt-syntax): Give accurate
Alan Mackenzie <acm@muc.de>
parents:
78487
diff
changeset
|
8243 nil)) |
b3cad8795b91
(c-brace-anchor-point): new function. (c-add-stmt-syntax): Give accurate
Alan Mackenzie <acm@muc.de>
parents:
78487
diff
changeset
|
8244 ((looking-at c-other-decl-block-key) |
b3cad8795b91
(c-brace-anchor-point): new function. (c-add-stmt-syntax): Give accurate
Alan Mackenzie <acm@muc.de>
parents:
78487
diff
changeset
|
8245 (c-add-syntax |
b3cad8795b91
(c-brace-anchor-point): new function. (c-add-stmt-syntax): Give accurate
Alan Mackenzie <acm@muc.de>
parents:
78487
diff
changeset
|
8246 (cdr (assoc (match-string 1) |
b3cad8795b91
(c-brace-anchor-point): new function. (c-add-stmt-syntax): Give accurate
Alan Mackenzie <acm@muc.de>
parents:
78487
diff
changeset
|
8247 c-other-decl-block-key-in-symbols-alist)) |
b3cad8795b91
(c-brace-anchor-point): new function. (c-add-stmt-syntax): Give accurate
Alan Mackenzie <acm@muc.de>
parents:
78487
diff
changeset
|
8248 (max (c-point 'boi paren-pos) (point)))) |
b3cad8795b91
(c-brace-anchor-point): new function. (c-add-stmt-syntax): Give accurate
Alan Mackenzie <acm@muc.de>
parents:
78487
diff
changeset
|
8249 (t (c-add-syntax 'defun-block-intro nil)))) |
79408
a29ca195b71e
(c-crosses-statement-barrier-p): Fix typo in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents:
78656
diff
changeset
|
8250 |
78656
b3cad8795b91
(c-brace-anchor-point): new function. (c-add-stmt-syntax): Give accurate
Alan Mackenzie <acm@muc.de>
parents:
78487
diff
changeset
|
8251 (c-add-syntax 'statement-block-intro nil))) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8252 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8253 (if (= paren-pos boi) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8254 ;; Always done if the open brace was at boi. The |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8255 ;; c-beginning-of-statement-1 call above is necessary |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8256 ;; anyway, to decide the type of block-intro to add. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8257 (goto-char paren-pos) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8258 (setq boi (c-point 'boi))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8259 )) |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8260 |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8261 ;; Fill in the current point as the anchor for all the symbols |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8262 ;; added above. |
78656
b3cad8795b91
(c-brace-anchor-point): new function. (c-add-stmt-syntax): Give accurate
Alan Mackenzie <acm@muc.de>
parents:
78487
diff
changeset
|
8263 (let ((p c-syntactic-context) q) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8264 (while (not (eq p syntax-last)) |
78656
b3cad8795b91
(c-brace-anchor-point): new function. (c-add-stmt-syntax): Give accurate
Alan Mackenzie <acm@muc.de>
parents:
78487
diff
changeset
|
8265 (setq q (cdr (car p))) ; e.g. (nil 28) [from (arglist-cont-nonempty nil 28)] |
b3cad8795b91
(c-brace-anchor-point): new function. (c-add-stmt-syntax): Give accurate
Alan Mackenzie <acm@muc.de>
parents:
78487
diff
changeset
|
8266 (while q |
b3cad8795b91
(c-brace-anchor-point): new function. (c-add-stmt-syntax): Give accurate
Alan Mackenzie <acm@muc.de>
parents:
78487
diff
changeset
|
8267 (unless (car q) |
b3cad8795b91
(c-brace-anchor-point): new function. (c-add-stmt-syntax): Give accurate
Alan Mackenzie <acm@muc.de>
parents:
78487
diff
changeset
|
8268 (setcar q (point))) |
b3cad8795b91
(c-brace-anchor-point): new function. (c-add-stmt-syntax): Give accurate
Alan Mackenzie <acm@muc.de>
parents:
78487
diff
changeset
|
8269 (setq q (cdr q))) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8270 (setq p (cdr p)))) |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8271 ))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8272 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8273 (defun c-add-class-syntax (symbol |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8274 containing-decl-open |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8275 containing-decl-start |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8276 containing-decl-kwd |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8277 paren-state) |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8278 ;; The inclass and class-close syntactic symbols are added in |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8279 ;; several places and some work is needed to fix everything. |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8280 ;; Therefore it's collected here. |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8281 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8282 ;; This function might do hidden buffer changes. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8283 (goto-char containing-decl-open) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8284 (if (and (eq symbol 'inclass) (= (point) (c-point 'boi))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8285 (progn |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8286 (c-add-syntax symbol containing-decl-open) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8287 containing-decl-open) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8288 (goto-char containing-decl-start) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8289 ;; Ought to use `c-add-stmt-syntax' instead of backing up to boi |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8290 ;; here, but we have to do like this for compatibility. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8291 (back-to-indentation) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8292 (c-add-syntax symbol (point)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8293 (if (and (c-keyword-member containing-decl-kwd |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8294 'c-inexpr-class-kwds) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8295 (/= containing-decl-start (c-point 'boi containing-decl-start))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8296 (c-add-syntax 'inexpr-class)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8297 (point))) |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8298 |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8299 (defun c-guess-continued-construct (indent-point |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8300 char-after-ip |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8301 beg-of-same-or-containing-stmt |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8302 containing-sexp |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8303 paren-state) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8304 ;; This function contains the decision tree reached through both |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8305 ;; cases 18 and 10. It's a continued statement or top level |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8306 ;; construct of some kind. |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8307 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8308 ;; This function might do hidden buffer changes. |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8309 |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8310 (let (special-brace-list) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8311 (goto-char indent-point) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8312 (skip-chars-forward " \t") |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8313 |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8314 (cond |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8315 ;; (CASE A removed.) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8316 ;; CASE B: open braces for class or brace-lists |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8317 ((setq special-brace-list |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8318 (or (and c-special-brace-lists |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8319 (c-looking-at-special-brace-list)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8320 (eq char-after-ip ?{))) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8321 |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8322 (cond |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8323 ;; CASE B.1: class-open |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8324 ((save-excursion |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8325 (and (eq (char-after) ?{) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8326 (c-looking-at-decl-block containing-sexp t) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8327 (setq beg-of-same-or-containing-stmt (point)))) |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8328 (c-add-syntax 'class-open beg-of-same-or-containing-stmt)) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8329 |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8330 ;; CASE B.2: brace-list-open |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8331 ((or (consp special-brace-list) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8332 (save-excursion |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8333 (goto-char beg-of-same-or-containing-stmt) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8334 (c-syntactic-re-search-forward "=\\([^=]\\|$\\)" |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8335 indent-point t t t))) |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8336 ;; The most semantically accurate symbol here is |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8337 ;; brace-list-open, but we normally report it simply as a |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8338 ;; statement-cont. The reason is that one normally adjusts |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8339 ;; brace-list-open for brace lists as top-level constructs, |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8340 ;; and brace lists inside statements is a completely different |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8341 ;; context. C.f. case 5A.3. |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8342 (c-beginning-of-statement-1 containing-sexp) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8343 (c-add-stmt-syntax (if c-auto-newline-analysis |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8344 ;; Turn off the dwim above when we're |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8345 ;; analyzing the nature of the brace |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8346 ;; for the auto newline feature. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8347 'brace-list-open |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8348 'statement-cont) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8349 nil nil |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8350 containing-sexp paren-state)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8351 |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8352 ;; CASE B.3: The body of a function declared inside a normal |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8353 ;; block. Can occur e.g. in Pike and when using gcc |
53073
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
8354 ;; extensions, but watch out for macros followed by blocks. |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8355 ;; C.f. cases E, 16F and 17G. |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8356 ((and (not (c-at-statement-start-p)) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8357 (eq (c-beginning-of-statement-1 containing-sexp nil nil t) |
53073
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
8358 'same) |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
8359 (save-excursion |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8360 (let ((c-recognize-typeless-decls nil)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8361 ;; Turn off recognition of constructs that lacks a |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8362 ;; type in this case, since that's more likely to be |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8363 ;; a macro followed by a block. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8364 (c-forward-decl-or-cast-1 (c-point 'bosws) nil nil)))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8365 (c-add-stmt-syntax 'defun-open nil t |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8366 containing-sexp paren-state)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8367 |
53073
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
8368 ;; CASE B.4: Continued statement with block open. The most |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
8369 ;; accurate analysis is perhaps `statement-cont' together with |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
8370 ;; `block-open' but we play DWIM and use `substatement-open' |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
8371 ;; instead. The rationaly is that this typically is a macro |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
8372 ;; followed by a block which makes it very similar to a |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
8373 ;; statement with a substatement block. |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8374 (t |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8375 (c-add-stmt-syntax 'substatement-open nil nil |
53073
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
8376 containing-sexp paren-state)) |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8377 )) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8378 |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8379 ;; CASE C: iostream insertion or extraction operator |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8380 ((and (looking-at "\\(<<\\|>>\\)\\([^=]\\|$\\)") |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8381 (save-excursion |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8382 (goto-char beg-of-same-or-containing-stmt) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8383 ;; If there is no preceding streamop in the statement |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8384 ;; then indent this line as a normal statement-cont. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8385 (when (c-syntactic-re-search-forward |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8386 "\\(<<\\|>>\\)\\([^=]\\|$\\)" indent-point 'move t t) |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8387 (c-add-syntax 'stream-op (c-point 'boi)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8388 t)))) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8389 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8390 ;; CASE E: In the "K&R region" of a function declared inside a |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8391 ;; normal block. C.f. case B.3. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8392 ((and (save-excursion |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8393 ;; Check that the next token is a '{'. This works as |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8394 ;; long as no language that allows nested function |
53073
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
8395 ;; definitions allows stuff like member init lists, K&R |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
8396 ;; declarations or throws clauses there. |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8397 ;; |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8398 ;; Note that we do a forward search for something ahead |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8399 ;; of the indentation line here. That's not good since |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8400 ;; the user might not have typed it yet. Unfortunately |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8401 ;; it's exceedingly tricky to recognize a function |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8402 ;; prototype in a code block without resorting to this. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8403 (c-forward-syntactic-ws) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8404 (eq (char-after) ?{)) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8405 (not (c-at-statement-start-p)) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8406 (eq (c-beginning-of-statement-1 containing-sexp nil nil t) |
53073
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
8407 'same) |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
8408 (save-excursion |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8409 (let ((c-recognize-typeless-decls nil)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8410 ;; Turn off recognition of constructs that lacks a |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8411 ;; type in this case, since that's more likely to be |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8412 ;; a macro followed by a block. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8413 (c-forward-decl-or-cast-1 (c-point 'bosws) nil nil)))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8414 (c-add-stmt-syntax 'func-decl-cont nil t |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8415 containing-sexp paren-state)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8416 |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8417 ;; CASE D: continued statement. |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8418 (t |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8419 (c-beginning-of-statement-1 containing-sexp) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8420 (c-add-stmt-syntax 'statement-cont nil nil |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8421 containing-sexp paren-state)) |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8422 ))) |
18720 | 8423 |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8424 ;; The next autoload was added by RMS on 2005/8/9 - don't know why (ACM, |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8425 ;; 2005/11/29). |
64833
c4d00dfa8594
(c-guess-basic-syntax): Add autoload.
Richard M. Stallman <rms@gnu.org>
parents:
64699
diff
changeset
|
8426 ;;;###autoload |
18720 | 8427 (defun c-guess-basic-syntax () |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8428 "Return the syntactic context of the current line." |
18720 | 8429 (save-excursion |
8430 (beginning-of-line) | |
51829
d508ffa43505
2003-07-08 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents:
51714
diff
changeset
|
8431 (c-save-buffer-state |
d508ffa43505
2003-07-08 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents:
51714
diff
changeset
|
8432 ((indent-point (point)) |
d508ffa43505
2003-07-08 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents:
51714
diff
changeset
|
8433 (case-fold-search nil) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8434 ;; A whole ugly bunch of various temporary variables. Have |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8435 ;; to declare them here since it's not possible to declare |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8436 ;; a variable with only the scope of a cond test and the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8437 ;; following result clauses, and most of this function is a |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8438 ;; single gigantic cond. :P |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8439 literal char-before-ip before-ws-ip char-after-ip macro-start |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8440 in-macro-expr c-syntactic-context placeholder c-in-literal-cache |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8441 step-type tmpsymbol keyword injava-inher special-brace-list tmp-pos |
106522
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
8442 containing-< |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8443 ;; The following record some positions for the containing |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8444 ;; declaration block if we're directly within one: |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8445 ;; `containing-decl-open' is the position of the open |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8446 ;; brace. `containing-decl-start' is the start of the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8447 ;; declaration. `containing-decl-kwd' is the keyword |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8448 ;; symbol of the keyword that tells what kind of block it |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8449 ;; is. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8450 containing-decl-open |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8451 containing-decl-start |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8452 containing-decl-kwd |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8453 ;; The open paren of the closest surrounding sexp or nil if |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8454 ;; there is none. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8455 containing-sexp |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8456 ;; The position after the closest preceding brace sexp |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8457 ;; (nested sexps are ignored), or the position after |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8458 ;; `containing-sexp' if there is none, or (point-min) if |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8459 ;; `containing-sexp' is nil. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8460 lim |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8461 ;; The paren state outside `containing-sexp', or at |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8462 ;; `indent-point' if `containing-sexp' is nil. |
51829
d508ffa43505
2003-07-08 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents:
51714
diff
changeset
|
8463 (paren-state (c-parse-state)) |
d508ffa43505
2003-07-08 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents:
51714
diff
changeset
|
8464 ;; There's always at most one syntactic element which got |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8465 ;; an anchor pos. It's stored in syntactic-relpos. |
51829
d508ffa43505
2003-07-08 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents:
51714
diff
changeset
|
8466 syntactic-relpos |
d508ffa43505
2003-07-08 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents:
51714
diff
changeset
|
8467 (c-stmt-delim-chars c-stmt-delim-chars)) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8468 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8469 ;; Check if we're directly inside an enclosing declaration |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8470 ;; level block. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8471 (when (and (setq containing-sexp |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8472 (c-most-enclosing-brace paren-state)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8473 (progn |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8474 (goto-char containing-sexp) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8475 (eq (char-after) ?{)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8476 (setq placeholder |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8477 (c-looking-at-decl-block |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8478 (c-most-enclosing-brace paren-state |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8479 containing-sexp) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8480 t))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8481 (setq containing-decl-open containing-sexp |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8482 containing-decl-start (point) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8483 containing-sexp nil) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8484 (goto-char placeholder) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8485 (setq containing-decl-kwd (and (looking-at c-keywords-regexp) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8486 (c-keyword-sym (match-string 1))))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8487 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8488 ;; Init some position variables. |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8489 (if c-state-cache |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8490 (progn |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8491 (setq containing-sexp (car paren-state) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8492 paren-state (cdr paren-state)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8493 (if (consp containing-sexp) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8494 (progn |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8495 (setq lim (cdr containing-sexp)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8496 (if (cdr c-state-cache) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8497 ;; Ignore balanced paren. The next entry |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8498 ;; can't be another one. |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8499 (setq containing-sexp (car (cdr c-state-cache)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8500 paren-state (cdr paren-state)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8501 ;; If there is no surrounding open paren then |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8502 ;; put the last balanced pair back on paren-state. |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8503 (setq paren-state (cons containing-sexp paren-state) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8504 containing-sexp nil))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8505 (setq lim (1+ containing-sexp)))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8506 (setq lim (point-min))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8507 |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8508 ;; If we're in a parenthesis list then ',' delimits the |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8509 ;; "statements" rather than being an operator (with the |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8510 ;; exception of the "for" clause). This difference is |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8511 ;; typically only noticeable when statements are used in macro |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8512 ;; arglists. |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8513 (when (and containing-sexp |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8514 (eq (char-after containing-sexp) ?\()) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8515 (setq c-stmt-delim-chars c-stmt-delim-chars-with-comma)) |
18720 | 8516 |
8517 ;; cache char before and after indent point, and move point to | |
8518 ;; the most likely position to perform the majority of tests | |
8519 (goto-char indent-point) | |
8520 (c-backward-syntactic-ws lim) | |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8521 (setq before-ws-ip (point) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8522 char-before-ip (char-before)) |
18720 | 8523 (goto-char indent-point) |
8524 (skip-chars-forward " \t") | |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8525 (setq char-after-ip (char-after)) |
18720 | 8526 |
8527 ;; are we in a literal? | |
8528 (setq literal (c-in-literal lim)) | |
8529 | |
8530 ;; now figure out syntactic qualities of the current line | |
8531 (cond | |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8532 |
18720 | 8533 ;; CASE 1: in a string. |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8534 ((eq literal 'string) |
18720 | 8535 (c-add-syntax 'string (c-point 'bopl))) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8536 |
18720 | 8537 ;; CASE 2: in a C or C++ style comment. |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8538 ((and (memq literal '(c c++)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8539 ;; This is a kludge for XEmacs where we use |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8540 ;; `buffer-syntactic-context', which doesn't correctly |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8541 ;; recognize "\*/" to end a block comment. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8542 ;; `parse-partial-sexp' which is used by |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8543 ;; `c-literal-limits' will however do that in most |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8544 ;; versions, which results in that we get nil from |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8545 ;; `c-literal-limits' even when `c-in-literal' claims |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8546 ;; we're inside a comment. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8547 (setq placeholder (c-literal-limits lim))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8548 (c-add-syntax literal (car placeholder))) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8549 |
30403
68e734ab7d5d
(c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents:
26817
diff
changeset
|
8550 ;; CASE 3: in a cpp preprocessor macro continuation. |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8551 ((and (save-excursion |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8552 (when (c-beginning-of-macro) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8553 (setq macro-start (point)))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8554 (/= macro-start (c-point 'boi)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8555 (progn |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8556 (setq tmpsymbol 'cpp-macro-cont) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8557 (or (not c-syntactic-indentation-in-macros) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8558 (save-excursion |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8559 (goto-char macro-start) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8560 ;; If at the beginning of the body of a #define |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8561 ;; directive then analyze as cpp-define-intro |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8562 ;; only. Go on with the syntactic analysis |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8563 ;; otherwise. in-macro-expr is set if we're in a |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8564 ;; cpp expression, i.e. before the #define body |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8565 ;; or anywhere in a non-#define directive. |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8566 (if (c-forward-to-cpp-define-body) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8567 (let ((indent-boi (c-point 'boi indent-point))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8568 (setq in-macro-expr (> (point) indent-boi) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8569 tmpsymbol 'cpp-define-intro) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8570 (= (point) indent-boi)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8571 (setq in-macro-expr t) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8572 nil))))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8573 (c-add-syntax tmpsymbol macro-start) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8574 (setq macro-start nil)) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8575 |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8576 ;; CASE 11: an else clause? |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8577 ((looking-at "else\\>[^_]") |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8578 (c-beginning-of-statement-1 containing-sexp) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8579 (c-add-stmt-syntax 'else-clause nil t |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8580 containing-sexp paren-state)) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8581 |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8582 ;; CASE 12: while closure of a do/while construct? |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8583 ((and (looking-at "while\\>[^_]") |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8584 (save-excursion |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8585 (prog1 (eq (c-beginning-of-statement-1 containing-sexp) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8586 'beginning) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8587 (setq placeholder (point))))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8588 (goto-char placeholder) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8589 (c-add-stmt-syntax 'do-while-closure nil t |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8590 containing-sexp paren-state)) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8591 |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8592 ;; CASE 13: A catch or finally clause? This case is simpler |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8593 ;; than if-else and do-while, because a block is required |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8594 ;; after every try, catch and finally. |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8595 ((save-excursion |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8596 (and (cond ((c-major-mode-is 'c++-mode) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8597 (looking-at "catch\\>[^_]")) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8598 ((c-major-mode-is 'java-mode) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8599 (looking-at "\\(catch\\|finally\\)\\>[^_]"))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8600 (and (c-safe (c-backward-syntactic-ws) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8601 (c-backward-sexp) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8602 t) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8603 (eq (char-after) ?{) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8604 (c-safe (c-backward-syntactic-ws) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8605 (c-backward-sexp) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8606 t) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8607 (if (eq (char-after) ?\() |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8608 (c-safe (c-backward-sexp) t) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8609 t)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8610 (looking-at "\\(try\\|catch\\)\\>[^_]") |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8611 (setq placeholder (point)))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8612 (goto-char placeholder) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8613 (c-add-stmt-syntax 'catch-clause nil t |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8614 containing-sexp paren-state)) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8615 |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8616 ;; CASE 18: A substatement we can recognize by keyword. |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8617 ((save-excursion |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8618 (and c-opt-block-stmt-key |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8619 (not (eq char-before-ip ?\;)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8620 (not (c-at-vsemi-p before-ws-ip)) |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8621 (not (memq char-after-ip '(?\) ?\] ?,))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8622 (or (not (eq char-before-ip ?})) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8623 (c-looking-at-inexpr-block-backward c-state-cache)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8624 (> (point) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8625 (progn |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8626 ;; Ought to cache the result from the |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8627 ;; c-beginning-of-statement-1 calls here. |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8628 (setq placeholder (point)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8629 (while (eq (setq step-type |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8630 (c-beginning-of-statement-1 lim)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8631 'label)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8632 (if (eq step-type 'previous) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8633 (goto-char placeholder) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8634 (setq placeholder (point)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8635 (if (and (eq step-type 'same) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8636 (not (looking-at c-opt-block-stmt-key))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8637 ;; Step up to the containing statement if we |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8638 ;; stayed in the same one. |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8639 (let (step) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8640 (while (eq |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8641 (setq step |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8642 (c-beginning-of-statement-1 lim)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8643 'label)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8644 (if (eq step 'up) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8645 (setq placeholder (point)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8646 ;; There was no containing statement afterall. |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8647 (goto-char placeholder))))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8648 placeholder)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8649 (if (looking-at c-block-stmt-2-key) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8650 ;; Require a parenthesis after these keywords. |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8651 ;; Necessary to catch e.g. synchronized in Java, |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8652 ;; which can be used both as statement and |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8653 ;; modifier. |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8654 (and (zerop (c-forward-token-2 1 nil)) |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8655 (eq (char-after) ?\()) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8656 (looking-at c-opt-block-stmt-key)))) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8657 |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8658 (if (eq step-type 'up) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8659 ;; CASE 18A: Simple substatement. |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8660 (progn |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8661 (goto-char placeholder) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8662 (cond |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8663 ((eq char-after-ip ?{) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8664 (c-add-stmt-syntax 'substatement-open nil nil |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8665 containing-sexp paren-state)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8666 ((save-excursion |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8667 (goto-char indent-point) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8668 (back-to-indentation) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8669 (c-forward-label)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8670 (c-add-stmt-syntax 'substatement-label nil nil |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8671 containing-sexp paren-state)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8672 (t |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8673 (c-add-stmt-syntax 'substatement nil nil |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8674 containing-sexp paren-state)))) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8675 |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8676 ;; CASE 18B: Some other substatement. This is shared |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8677 ;; with case 10. |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8678 (c-guess-continued-construct indent-point |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8679 char-after-ip |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8680 placeholder |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8681 lim |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8682 paren-state))) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8683 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8684 ;; CASE 14: A case or default label |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8685 ((looking-at c-label-kwds-regexp) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8686 (if containing-sexp |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8687 (progn |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8688 (goto-char containing-sexp) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8689 (setq lim (c-most-enclosing-brace c-state-cache |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8690 containing-sexp)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8691 (c-backward-to-block-anchor lim) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8692 (c-add-stmt-syntax 'case-label nil t lim paren-state)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8693 ;; Got a bogus label at the top level. In lack of better |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8694 ;; alternatives, anchor it on (point-min). |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8695 (c-add-syntax 'case-label (point-min)))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8696 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8697 ;; CASE 15: any other label |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8698 ((save-excursion |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8699 (back-to-indentation) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8700 (and (not (looking-at c-syntactic-ws-start)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8701 (c-forward-label))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8702 (cond (containing-decl-open |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8703 (setq placeholder (c-add-class-syntax 'inclass |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8704 containing-decl-open |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8705 containing-decl-start |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8706 containing-decl-kwd |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8707 paren-state)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8708 ;; Append access-label with the same anchor point as |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8709 ;; inclass gets. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8710 (c-append-syntax 'access-label placeholder)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8711 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8712 (containing-sexp |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8713 (goto-char containing-sexp) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8714 (setq lim (c-most-enclosing-brace c-state-cache |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8715 containing-sexp)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8716 (save-excursion |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8717 (setq tmpsymbol |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8718 (if (and (eq (c-beginning-of-statement-1 lim) 'up) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8719 (looking-at "switch\\>[^_]")) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8720 ;; If the surrounding statement is a switch then |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8721 ;; let's analyze all labels as switch labels, so |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8722 ;; that they get lined up consistently. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8723 'case-label |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8724 'label))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8725 (c-backward-to-block-anchor lim) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8726 (c-add-stmt-syntax tmpsymbol nil t lim paren-state)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8727 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8728 (t |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8729 ;; A label on the top level. Treat it as a class |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8730 ;; context. (point-min) is the closest we get to the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8731 ;; class open brace. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8732 (c-add-syntax 'access-label (point-min))))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8733 |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8734 ;; CASE 4: In-expression statement. C.f. cases 7B, 16A and |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8735 ;; 17E. |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8736 ((setq placeholder (c-looking-at-inexpr-block |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8737 (c-safe-position containing-sexp paren-state) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8738 containing-sexp |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8739 ;; Have to turn on the heuristics after |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8740 ;; the point even though it doesn't work |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8741 ;; very well. C.f. test case class-16.pike. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8742 t)) |
30403
68e734ab7d5d
(c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents:
26817
diff
changeset
|
8743 (setq tmpsymbol (assq (car placeholder) |
68e734ab7d5d
(c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents:
26817
diff
changeset
|
8744 '((inexpr-class . class-open) |
68e734ab7d5d
(c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents:
26817
diff
changeset
|
8745 (inexpr-statement . block-open)))) |
68e734ab7d5d
(c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents:
26817
diff
changeset
|
8746 (if tmpsymbol |
68e734ab7d5d
(c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents:
26817
diff
changeset
|
8747 ;; It's a statement block or an anonymous class. |
68e734ab7d5d
(c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents:
26817
diff
changeset
|
8748 (setq tmpsymbol (cdr tmpsymbol)) |
68e734ab7d5d
(c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents:
26817
diff
changeset
|
8749 ;; It's a Pike lambda. Check whether we are between the |
68e734ab7d5d
(c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents:
26817
diff
changeset
|
8750 ;; lambda keyword and the argument list or at the defun |
68e734ab7d5d
(c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents:
26817
diff
changeset
|
8751 ;; opener. |
68e734ab7d5d
(c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents:
26817
diff
changeset
|
8752 (setq tmpsymbol (if (eq char-after-ip ?{) |
68e734ab7d5d
(c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents:
26817
diff
changeset
|
8753 'inline-open |
68e734ab7d5d
(c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents:
26817
diff
changeset
|
8754 'lambda-intro-cont))) |
68e734ab7d5d
(c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents:
26817
diff
changeset
|
8755 (goto-char (cdr placeholder)) |
36920 | 8756 (back-to-indentation) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8757 (c-add-stmt-syntax tmpsymbol nil t |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8758 (c-most-enclosing-brace c-state-cache (point)) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8759 paren-state) |
36920 | 8760 (unless (eq (point) (cdr placeholder)) |
8761 (c-add-syntax (car placeholder)))) | |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8762 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8763 ;; CASE 5: Line is inside a declaration level block or at top level. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8764 ((or containing-decl-open (null containing-sexp)) |
18720 | 8765 (cond |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8766 |
24282 | 8767 ;; CASE 5A: we are looking at a defun, brace list, class, |
8768 ;; or inline-inclass method opening brace | |
8769 ((setq special-brace-list | |
8770 (or (and c-special-brace-lists | |
8771 (c-looking-at-special-brace-list)) | |
8772 (eq char-after-ip ?{))) | |
18720 | 8773 (cond |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8774 |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8775 ;; CASE 5A.1: Non-class declaration block open. |
18720 | 8776 ((save-excursion |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8777 (let (tmp) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8778 (and (eq char-after-ip ?{) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8779 (setq tmp (c-looking-at-decl-block containing-sexp t)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8780 (progn |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8781 (setq placeholder (point)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8782 (goto-char tmp) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8783 (looking-at c-symbol-key)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8784 (c-keyword-member |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8785 (c-keyword-sym (setq keyword (match-string 0))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8786 'c-other-block-decl-kwds)))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8787 (goto-char placeholder) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8788 (c-add-stmt-syntax |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8789 (if (string-equal keyword "extern") |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8790 ;; Special case for extern-lang-open. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8791 'extern-lang-open |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8792 (intern (concat keyword "-open"))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8793 nil t containing-sexp paren-state)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8794 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8795 ;; CASE 5A.2: we are looking at a class opening brace |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8796 ((save-excursion |
18720 | 8797 (goto-char indent-point) |
8798 (skip-chars-forward " \t") | |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8799 (and (eq (char-after) ?{) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8800 (c-looking-at-decl-block containing-sexp t) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8801 (setq placeholder (point)))) |
18720 | 8802 (c-add-syntax 'class-open placeholder)) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8803 |
18720 | 8804 ;; CASE 5A.3: brace list open |
8805 ((save-excursion | |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8806 (c-beginning-of-decl-1 lim) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8807 (while (looking-at c-specifier-key) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8808 (goto-char (match-end 1)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8809 (c-forward-syntactic-ws indent-point)) |
18720 | 8810 (setq placeholder (c-point 'boi)) |
24282 | 8811 (or (consp special-brace-list) |
36920 | 8812 (and (or (save-excursion |
24282 | 8813 (goto-char indent-point) |
36920 | 8814 (setq tmpsymbol nil) |
24282 | 8815 (while (and (> (point) placeholder) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8816 (zerop (c-backward-token-2 1 t)) |
36920 | 8817 (/= (char-after) ?=)) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8818 (and c-opt-inexpr-brace-list-key |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8819 (not tmpsymbol) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8820 (looking-at c-opt-inexpr-brace-list-key) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8821 (setq tmpsymbol 'topmost-intro-cont))) |
36920 | 8822 (eq (char-after) ?=)) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8823 (looking-at c-brace-list-key)) |
21106
5e5fa0a34cb0
(c-inside-bracelist-p): Fix for enum test.
Richard M. Stallman <rms@gnu.org>
parents:
20914
diff
changeset
|
8824 (save-excursion |
24282 | 8825 (while (and (< (point) indent-point) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8826 (zerop (c-forward-token-2 1 t)) |
24282 | 8827 (not (memq (char-after) '(?\; ?\())))) |
8828 (not (memq (char-after) '(?\; ?\())) | |
8829 )))) | |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8830 (if (and (not c-auto-newline-analysis) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8831 (c-major-mode-is 'java-mode) |
36920 | 8832 (eq tmpsymbol 'topmost-intro-cont)) |
8833 ;; We're in Java and have found that the open brace | |
8834 ;; belongs to a "new Foo[]" initialization list, | |
8835 ;; which means the brace list is part of an | |
8836 ;; expression and not a top level definition. We | |
8837 ;; therefore treat it as any topmost continuation | |
8838 ;; even though the semantically correct symbol still | |
8839 ;; is brace-list-open, on the same grounds as in | |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8840 ;; case B.2. |
36920 | 8841 (progn |
8842 (c-beginning-of-statement-1 lim) | |
8843 (c-add-syntax 'topmost-intro-cont (c-point 'boi))) | |
8844 (c-add-syntax 'brace-list-open placeholder))) | |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8845 |
18720 | 8846 ;; CASE 5A.4: inline defun open |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8847 ((and containing-decl-open |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8848 (not (c-keyword-member containing-decl-kwd |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8849 'c-other-block-decl-kwds))) |
18720 | 8850 (c-add-syntax 'inline-open) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8851 (c-add-class-syntax 'inclass |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8852 containing-decl-open |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8853 containing-decl-start |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8854 containing-decl-kwd |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8855 paren-state)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8856 |
18720 | 8857 ;; CASE 5A.5: ordinary defun open |
8858 (t | |
79953
6b6540ecfecf
(c-guess-basic-syntax, CASE 5A.5): Anchor the "{" of a template function
Alan Mackenzie <acm@muc.de>
parents:
79943
diff
changeset
|
8859 (save-excursion |
6b6540ecfecf
(c-guess-basic-syntax, CASE 5A.5): Anchor the "{" of a template function
Alan Mackenzie <acm@muc.de>
parents:
79943
diff
changeset
|
8860 (c-beginning-of-decl-1 lim) |
6b6540ecfecf
(c-guess-basic-syntax, CASE 5A.5): Anchor the "{" of a template function
Alan Mackenzie <acm@muc.de>
parents:
79943
diff
changeset
|
8861 (while (looking-at c-specifier-key) |
6b6540ecfecf
(c-guess-basic-syntax, CASE 5A.5): Anchor the "{" of a template function
Alan Mackenzie <acm@muc.de>
parents:
79943
diff
changeset
|
8862 (goto-char (match-end 1)) |
6b6540ecfecf
(c-guess-basic-syntax, CASE 5A.5): Anchor the "{" of a template function
Alan Mackenzie <acm@muc.de>
parents:
79943
diff
changeset
|
8863 (c-forward-syntactic-ws indent-point)) |
6b6540ecfecf
(c-guess-basic-syntax, CASE 5A.5): Anchor the "{" of a template function
Alan Mackenzie <acm@muc.de>
parents:
79943
diff
changeset
|
8864 (c-add-syntax 'defun-open (c-point 'boi)) |
6b6540ecfecf
(c-guess-basic-syntax, CASE 5A.5): Anchor the "{" of a template function
Alan Mackenzie <acm@muc.de>
parents:
79943
diff
changeset
|
8865 ;; Bogus to use bol here, but it's the legacy. (Resolved, |
6b6540ecfecf
(c-guess-basic-syntax, CASE 5A.5): Anchor the "{" of a template function
Alan Mackenzie <acm@muc.de>
parents:
79943
diff
changeset
|
8866 ;; 2007-11-09) |
6b6540ecfecf
(c-guess-basic-syntax, CASE 5A.5): Anchor the "{" of a template function
Alan Mackenzie <acm@muc.de>
parents:
79943
diff
changeset
|
8867 )))) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8868 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8869 ;; CASE 5B: After a function header but before the body (or |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8870 ;; the ending semicolon if there's no body). |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8871 ((save-excursion |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8872 (when (setq placeholder (c-just-after-func-arglist-p lim)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8873 (setq tmp-pos (point)))) |
18720 | 8874 (cond |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8875 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8876 ;; CASE 5B.1: Member init list. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8877 ((eq (char-after tmp-pos) ?:) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8878 (if (or (> tmp-pos indent-point) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8879 (= (c-point 'bosws) (1+ tmp-pos))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8880 (progn |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8881 ;; There is no preceding member init clause. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8882 ;; Indent relative to the beginning of indentation |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8883 ;; for the topmost-intro line that contains the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8884 ;; prototype's open paren. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8885 (goto-char placeholder) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8886 (c-add-syntax 'member-init-intro (c-point 'boi))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8887 ;; Indent relative to the first member init clause. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8888 (goto-char (1+ tmp-pos)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8889 (c-forward-syntactic-ws) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8890 (c-add-syntax 'member-init-cont (point)))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8891 |
18720 | 8892 ;; CASE 5B.2: K&R arg decl intro |
53073
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
8893 ((and c-recognize-knr-p |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
8894 (c-in-knr-argdecl lim)) |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8895 (c-beginning-of-statement-1 lim) |
18720 | 8896 (c-add-syntax 'knr-argdecl-intro (c-point 'boi)) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8897 (if containing-decl-open |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8898 (c-add-class-syntax 'inclass |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8899 containing-decl-open |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8900 containing-decl-start |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8901 containing-decl-kwd |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8902 paren-state))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8903 |
30403
68e734ab7d5d
(c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents:
26817
diff
changeset
|
8904 ;; CASE 5B.4: Nether region after a C++ or Java func |
18720 | 8905 ;; decl, which could include a `throws' declaration. |
8906 (t | |
8907 (c-beginning-of-statement-1 lim) | |
8908 (c-add-syntax 'func-decl-cont (c-point 'boi)) | |
8909 ))) | |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8910 |
18720 | 8911 ;; CASE 5C: inheritance line. could be first inheritance |
8912 ;; line, or continuation of a multiple inheritance | |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8913 ((or (and (c-major-mode-is 'c++-mode) |
30403
68e734ab7d5d
(c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents:
26817
diff
changeset
|
8914 (progn |
68e734ab7d5d
(c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents:
26817
diff
changeset
|
8915 (when (eq char-after-ip ?,) |
68e734ab7d5d
(c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents:
26817
diff
changeset
|
8916 (skip-chars-forward " \t") |
68e734ab7d5d
(c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents:
26817
diff
changeset
|
8917 (forward-char)) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8918 (looking-at c-opt-postfix-decl-spec-key))) |
18720 | 8919 (and (or (eq char-before-ip ?:) |
8920 ;; watch out for scope operator | |
8921 (save-excursion | |
8922 (and (eq char-after-ip ?:) | |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8923 (c-safe (forward-char 1) t) |
18720 | 8924 (not (eq (char-after) ?:)) |
8925 ))) | |
8926 (save-excursion | |
8927 (c-backward-syntactic-ws lim) | |
8928 (if (eq char-before-ip ?:) | |
8929 (progn | |
8930 (forward-char -1) | |
8931 (c-backward-syntactic-ws lim))) | |
8932 (back-to-indentation) | |
8933 (looking-at c-class-key))) | |
8934 ;; for Java | |
24282 | 8935 (and (c-major-mode-is 'java-mode) |
18720 | 8936 (let ((fence (save-excursion |
8937 (c-beginning-of-statement-1 lim) | |
8938 (point))) | |
8939 cont done) | |
8940 (save-excursion | |
8941 (while (not done) | |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
8942 (cond ((looking-at c-opt-postfix-decl-spec-key) |
18720 | 8943 (setq injava-inher (cons cont (point)) |
8944 done t)) | |
24282 | 8945 ((or (not (c-safe (c-forward-sexp -1) t)) |
18720 | 8946 (<= (point) fence)) |
8947 (setq done t)) | |
8948 ) | |
8949 (setq cont t))) | |
8950 injava-inher) | |
8951 (not (c-crosses-statement-barrier-p (cdr injava-inher) | |
8952 (point))) | |
8953 )) | |
8954 (cond | |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8955 |
18720 | 8956 ;; CASE 5C.1: non-hanging colon on an inher intro |
8957 ((eq char-after-ip ?:) | |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8958 (c-beginning-of-statement-1 lim) |
18720 | 8959 (c-add-syntax 'inher-intro (c-point 'boi)) |
8960 ;; don't add inclass symbol since relative point already | |
8961 ;; contains any class offset | |
8962 ) | |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8963 |
18720 | 8964 ;; CASE 5C.2: hanging colon on an inher intro |
8965 ((eq char-before-ip ?:) | |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8966 (c-beginning-of-statement-1 lim) |
18720 | 8967 (c-add-syntax 'inher-intro (c-point 'boi)) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8968 (if containing-decl-open |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8969 (c-add-class-syntax 'inclass |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8970 containing-decl-open |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8971 containing-decl-start |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8972 containing-decl-kwd |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8973 paren-state))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8974 |
18720 | 8975 ;; CASE 5C.3: in a Java implements/extends |
8976 (injava-inher | |
8977 (let ((where (cdr injava-inher)) | |
8978 (cont (car injava-inher))) | |
8979 (goto-char where) | |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8980 (cond ((looking-at "throws\\>[^_]") |
18720 | 8981 (c-add-syntax 'func-decl-cont |
8982 (progn (c-beginning-of-statement-1 lim) | |
8983 (c-point 'boi)))) | |
8984 (cont (c-add-syntax 'inher-cont where)) | |
8985 (t (c-add-syntax 'inher-intro | |
8986 (progn (goto-char (cdr injava-inher)) | |
8987 (c-beginning-of-statement-1 lim) | |
8988 (point)))) | |
8989 ))) | |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8990 |
18720 | 8991 ;; CASE 5C.4: a continued inheritance line |
8992 (t | |
8993 (c-beginning-of-inheritance-list lim) | |
8994 (c-add-syntax 'inher-cont (point)) | |
8995 ;; don't add inclass symbol since relative point already | |
8996 ;; contains any class offset | |
8997 ))) | |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
8998 |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
8999 ;; CASE 5D: this could be a top-level initialization, a |
26817 | 9000 ;; member init list continuation, or a template argument |
9001 ;; list continuation. | |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9002 ((save-excursion |
98693
69a04789c5f0
Amend several doc strings and comments.
Alan Mackenzie <acm@muc.de>
parents:
96145
diff
changeset
|
9003 ;; Note: We use the fact that lim is always after any |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9004 ;; preceding brace sexp. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9005 (if c-recognize-<>-arglists |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9006 (while (and |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9007 (progn |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9008 (c-syntactic-skip-backward "^;,=<>" lim t) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9009 (> (point) lim)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9010 (or |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9011 (when c-overloadable-operators-regexp |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9012 (when (setq placeholder (c-after-special-operator-id lim)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9013 (goto-char placeholder) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9014 t)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9015 (cond |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9016 ((eq (char-before) ?>) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9017 (or (c-backward-<>-arglist nil lim) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9018 (backward-char)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9019 t) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9020 ((eq (char-before) ?<) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9021 (backward-char) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9022 (if (save-excursion |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9023 (c-forward-<>-arglist nil)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9024 (progn (forward-char) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9025 nil) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9026 t)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9027 (t nil))))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9028 ;; NB: No c-after-special-operator-id stuff in this |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9029 ;; clause - we assume only C++ needs it. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9030 (c-syntactic-skip-backward "^;,=" lim t)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9031 (memq (char-before) '(?, ?= ?<))) |
18720 | 9032 (cond |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9033 |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9034 ;; CASE 5D.3: perhaps a template list continuation? |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9035 ((and (c-major-mode-is 'c++-mode) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9036 (save-excursion |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9037 (save-restriction |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9038 (c-with-syntax-table c++-template-syntax-table |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9039 (goto-char indent-point) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9040 (setq placeholder (c-up-list-backward)) |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9041 (and placeholder |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9042 (eq (char-after placeholder) ?<)))))) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9043 (c-with-syntax-table c++-template-syntax-table |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9044 (goto-char placeholder) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9045 (c-beginning-of-statement-1 lim t) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9046 (if (save-excursion |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9047 (c-backward-syntactic-ws lim) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9048 (eq (char-before) ?<)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9049 ;; In a nested template arglist. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9050 (progn |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9051 (goto-char placeholder) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9052 (c-syntactic-skip-backward "^,;" lim t) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9053 (c-forward-syntactic-ws)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9054 (back-to-indentation))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9055 ;; FIXME: Should use c-add-stmt-syntax, but it's not yet |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9056 ;; template aware. |
106522
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
9057 (c-add-syntax 'template-args-cont (point) placeholder)) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9058 |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9059 ;; CASE 5D.4: perhaps a multiple inheritance line? |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9060 ((and (c-major-mode-is 'c++-mode) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9061 (save-excursion |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9062 (c-beginning-of-statement-1 lim) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9063 (setq placeholder (point)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9064 (if (looking-at "static\\>[^_]") |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
9065 (c-forward-token-2 1 nil indent-point)) |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9066 (and (looking-at c-class-key) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
9067 (zerop (c-forward-token-2 2 nil indent-point)) |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9068 (if (eq (char-after) ?<) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9069 (c-with-syntax-table c++-template-syntax-table |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
9070 (zerop (c-forward-token-2 1 t indent-point))) |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9071 t) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9072 (eq (char-after) ?:)))) |
24282 | 9073 (goto-char placeholder) |
18720 | 9074 (c-add-syntax 'inher-cont (c-point 'boi))) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9075 |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9076 ;; CASE 5D.5: Continuation of the "expression part" of a |
96145
598aca8e5d9d
(c-guess-basic-syntax CASE 5D.5): Fix an infinite loop on invalid syntax.
Alan Mackenzie <acm@muc.de>
parents:
94673
diff
changeset
|
9077 ;; top level construct. Or, perhaps, an unrecognised construct. |
18720 | 9078 (t |
96145
598aca8e5d9d
(c-guess-basic-syntax CASE 5D.5): Fix an infinite loop on invalid syntax.
Alan Mackenzie <acm@muc.de>
parents:
94673
diff
changeset
|
9079 (while (and (setq placeholder (point)) |
598aca8e5d9d
(c-guess-basic-syntax CASE 5D.5): Fix an infinite loop on invalid syntax.
Alan Mackenzie <acm@muc.de>
parents:
94673
diff
changeset
|
9080 (eq (car (c-beginning-of-decl-1 containing-sexp)) |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9081 'same) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9082 (save-excursion |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9083 (c-backward-syntactic-ws) |
96145
598aca8e5d9d
(c-guess-basic-syntax CASE 5D.5): Fix an infinite loop on invalid syntax.
Alan Mackenzie <acm@muc.de>
parents:
94673
diff
changeset
|
9084 (eq (char-before) ?})) |
598aca8e5d9d
(c-guess-basic-syntax CASE 5D.5): Fix an infinite loop on invalid syntax.
Alan Mackenzie <acm@muc.de>
parents:
94673
diff
changeset
|
9085 (< (point) placeholder))) |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9086 (c-add-stmt-syntax |
96145
598aca8e5d9d
(c-guess-basic-syntax CASE 5D.5): Fix an infinite loop on invalid syntax.
Alan Mackenzie <acm@muc.de>
parents:
94673
diff
changeset
|
9087 (cond |
598aca8e5d9d
(c-guess-basic-syntax CASE 5D.5): Fix an infinite loop on invalid syntax.
Alan Mackenzie <acm@muc.de>
parents:
94673
diff
changeset
|
9088 ((eq (point) placeholder) 'statement) ; unrecognised construct |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9089 ;; A preceding comma at the top level means that a |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9090 ;; new variable declaration starts here. Use |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9091 ;; topmost-intro-cont for it, for consistency with |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9092 ;; the first variable declaration. C.f. case 5N. |
96145
598aca8e5d9d
(c-guess-basic-syntax CASE 5D.5): Fix an infinite loop on invalid syntax.
Alan Mackenzie <acm@muc.de>
parents:
94673
diff
changeset
|
9093 ((eq char-before-ip ?,) 'topmost-intro-cont) |
598aca8e5d9d
(c-guess-basic-syntax CASE 5D.5): Fix an infinite loop on invalid syntax.
Alan Mackenzie <acm@muc.de>
parents:
94673
diff
changeset
|
9094 (t 'statement-cont)) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9095 nil nil containing-sexp paren-state)) |
18720 | 9096 )) |
79408
a29ca195b71e
(c-crosses-statement-barrier-p): Fix typo in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents:
78656
diff
changeset
|
9097 |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
9098 ;; CASE 5F: Close of a non-class declaration level block. |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9099 ((and (eq char-after-ip ?}) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9100 (c-keyword-member containing-decl-kwd |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9101 'c-other-block-decl-kwds)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9102 ;; This is inconsistent: Should use `containing-decl-open' |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9103 ;; here if it's at boi, like in case 5J. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9104 (goto-char containing-decl-start) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9105 (c-add-stmt-syntax |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9106 (if (string-equal (symbol-name containing-decl-kwd) "extern") |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9107 ;; Special case for compatibility with the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9108 ;; extern-lang syntactic symbols. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9109 'extern-lang-close |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9110 (intern (concat (symbol-name containing-decl-kwd) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9111 "-close"))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9112 nil t |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9113 (c-most-enclosing-brace paren-state (point)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9114 paren-state)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9115 |
18720 | 9116 ;; CASE 5G: we are looking at the brace which closes the |
9117 ;; enclosing nested class decl | |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9118 ((and containing-sexp |
18720 | 9119 (eq char-after-ip ?}) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9120 (eq containing-decl-open containing-sexp)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9121 (c-add-class-syntax 'class-close |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9122 containing-decl-open |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9123 containing-decl-start |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9124 containing-decl-kwd |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9125 paren-state)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9126 |
18720 | 9127 ;; CASE 5H: we could be looking at subsequent knr-argdecls |
9128 ((and c-recognize-knr-p | |
79838
2ec37d0d0d39
(c-guess-basic-syntax): prevent a macro call inside a struct being
Alan Mackenzie <acm@muc.de>
parents:
79717
diff
changeset
|
9129 (not containing-sexp) ; can't be knr inside braces. |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9130 (not (eq char-before-ip ?})) |
18720 | 9131 (save-excursion |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9132 (setq placeholder (cdr (c-beginning-of-decl-1 lim))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9133 (and placeholder |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9134 ;; Do an extra check to avoid tripping up on |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9135 ;; statements that occur in invalid contexts |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9136 ;; (e.g. in macro bodies where we don't really |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9137 ;; know the context of what we're looking at). |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9138 (not (and c-opt-block-stmt-key |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9139 (looking-at c-opt-block-stmt-key))))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9140 (< placeholder indent-point)) |
18720 | 9141 (goto-char placeholder) |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9142 (c-add-syntax 'knr-argdecl (point))) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9143 |
30403
68e734ab7d5d
(c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents:
26817
diff
changeset
|
9144 ;; CASE 5I: ObjC method definition. |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9145 ((and c-opt-method-key |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9146 (looking-at c-opt-method-key)) |
62641
27b53b1903b6
2005-05-23 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents:
62317
diff
changeset
|
9147 (c-beginning-of-statement-1 nil t) |
27b53b1903b6
2005-05-23 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents:
62317
diff
changeset
|
9148 (if (= (point) indent-point) |
27b53b1903b6
2005-05-23 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents:
62317
diff
changeset
|
9149 ;; Handle the case when it's the first (non-comment) |
27b53b1903b6
2005-05-23 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents:
62317
diff
changeset
|
9150 ;; thing in the buffer. Can't look for a 'same return |
27b53b1903b6
2005-05-23 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents:
62317
diff
changeset
|
9151 ;; value from cbos1 since ObjC directives currently |
27b53b1903b6
2005-05-23 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents:
62317
diff
changeset
|
9152 ;; aren't recognized fully, so that we get 'same |
27b53b1903b6
2005-05-23 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents:
62317
diff
changeset
|
9153 ;; instead of 'previous if it moved over a preceding |
27b53b1903b6
2005-05-23 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents:
62317
diff
changeset
|
9154 ;; directive. |
27b53b1903b6
2005-05-23 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents:
62317
diff
changeset
|
9155 (goto-char (point-min))) |
30403
68e734ab7d5d
(c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents:
26817
diff
changeset
|
9156 (c-add-syntax 'objc-method-intro (c-point 'boi))) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9157 |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
9158 ;; CASE 5P: AWK pattern or function or continuation |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
9159 ;; thereof. |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9160 ((c-major-mode-is 'awk-mode) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
9161 (setq placeholder (point)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
9162 (c-add-stmt-syntax |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
9163 (if (and (eq (c-beginning-of-statement-1) 'same) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
9164 (/= (point) placeholder)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
9165 'topmost-intro-cont |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
9166 'topmost-intro) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9167 nil nil |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
9168 containing-sexp paren-state)) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9169 |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9170 ;; CASE 5N: At a variable declaration that follows a class |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9171 ;; definition or some other block declaration that doesn't |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9172 ;; end at the closing '}'. C.f. case 5D.5. |
18720 | 9173 ((progn |
9174 (c-backward-syntactic-ws lim) | |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9175 (and (eq (char-before) ?}) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9176 (save-excursion |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9177 (let ((start (point))) |
75027
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
9178 (if (and c-state-cache |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
9179 (consp (car c-state-cache)) |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
9180 (eq (cdar c-state-cache) (point))) |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9181 ;; Speed up the backward search a bit. |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9182 (goto-char (caar c-state-cache))) |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9183 (c-beginning-of-decl-1 containing-sexp) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9184 (setq placeholder (point)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9185 (if (= start (point)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9186 ;; The '}' is unbalanced. |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9187 nil |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9188 (c-end-of-decl-1) |
52107
3a5379a0d7f3
2003-08-01 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents:
51947
diff
changeset
|
9189 (>= (point) indent-point)))))) |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9190 (goto-char placeholder) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9191 (c-add-stmt-syntax 'topmost-intro-cont nil nil |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9192 containing-sexp paren-state)) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9193 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9194 ;; NOTE: The point is at the end of the previous token here. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9195 |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9196 ;; CASE 5J: we are at the topmost level, make |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9197 ;; sure we skip back past any access specifiers |
75027
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
9198 ((and |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
9199 ;; A macro continuation line is never at top level. |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
9200 (not (and macro-start |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
9201 (> indent-point macro-start))) |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
9202 (save-excursion |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
9203 (setq placeholder (point)) |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
9204 (or (memq char-before-ip '(?\; ?{ ?} nil)) |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
9205 (c-at-vsemi-p before-ws-ip) |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
9206 (when (and (eq char-before-ip ?:) |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
9207 (eq (c-beginning-of-statement-1 lim) |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
9208 'label)) |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
9209 (c-backward-syntactic-ws lim) |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
9210 (setq placeholder (point))) |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
9211 (and (c-major-mode-is 'objc-mode) |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
9212 (catch 'not-in-directive |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
9213 (c-beginning-of-statement-1 lim) |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
9214 (setq placeholder (point)) |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
9215 (while (and (c-forward-objc-directive) |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
9216 (< (point) indent-point)) |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
9217 (c-forward-syntactic-ws) |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
9218 (if (>= (point) indent-point) |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
9219 (throw 'not-in-directive t)) |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
9220 (setq placeholder (point))) |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
9221 nil))))) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9222 ;; For historic reasons we anchor at bol of the last |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9223 ;; line of the previous declaration. That's clearly |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9224 ;; highly bogus and useless, and it makes our lives hard |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9225 ;; to remain compatible. :P |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9226 (goto-char placeholder) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9227 (c-add-syntax 'topmost-intro (c-point 'bol)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9228 (if containing-decl-open |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9229 (if (c-keyword-member containing-decl-kwd |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9230 'c-other-block-decl-kwds) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9231 (progn |
78656
b3cad8795b91
(c-brace-anchor-point): new function. (c-add-stmt-syntax): Give accurate
Alan Mackenzie <acm@muc.de>
parents:
78487
diff
changeset
|
9232 (goto-char (c-brace-anchor-point containing-decl-open)) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9233 (c-add-stmt-syntax |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9234 (if (string-equal (symbol-name containing-decl-kwd) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9235 "extern") |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9236 ;; Special case for compatibility with the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9237 ;; extern-lang syntactic symbols. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9238 'inextern-lang |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9239 (intern (concat "in" |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9240 (symbol-name containing-decl-kwd)))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9241 nil t |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9242 (c-most-enclosing-brace paren-state (point)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9243 paren-state)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9244 (c-add-class-syntax 'inclass |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9245 containing-decl-open |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9246 containing-decl-start |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9247 containing-decl-kwd |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9248 paren-state))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9249 (when (and c-syntactic-indentation-in-macros |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9250 macro-start |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9251 (/= macro-start (c-point 'boi indent-point))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9252 (c-add-syntax 'cpp-define-intro) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9253 (setq macro-start nil))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9254 |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9255 ;; CASE 5K: we are at an ObjC method definition |
18720 | 9256 ;; continuation line. |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9257 ((and c-opt-method-key |
62641
27b53b1903b6
2005-05-23 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents:
62317
diff
changeset
|
9258 (save-excursion |
18720 | 9259 (c-beginning-of-statement-1 lim) |
9260 (beginning-of-line) | |
62641
27b53b1903b6
2005-05-23 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents:
62317
diff
changeset
|
9261 (when (looking-at c-opt-method-key) |
27b53b1903b6
2005-05-23 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents:
62317
diff
changeset
|
9262 (setq placeholder (point))))) |
27b53b1903b6
2005-05-23 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents:
62317
diff
changeset
|
9263 (c-add-syntax 'objc-method-args-cont placeholder)) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9264 |
30403
68e734ab7d5d
(c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents:
26817
diff
changeset
|
9265 ;; CASE 5L: we are at the first argument of a template |
26817 | 9266 ;; arglist that begins on the previous line. |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9267 ((and c-recognize-<>-arglists |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9268 (eq (char-before) ?<) |
106522
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
9269 (setq placeholder (1- (point))) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9270 (not (and c-overloadable-operators-regexp |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9271 (c-after-special-operator-id lim)))) |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9272 (c-beginning-of-statement-1 (c-safe-position (point) paren-state)) |
106522
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
9273 (c-add-syntax 'template-args-cont (c-point 'boi) placeholder)) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9274 |
75027
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
9275 ;; CASE 5Q: we are at a statement within a macro. |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
9276 (macro-start |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
9277 (c-beginning-of-statement-1 containing-sexp) |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
9278 (c-add-stmt-syntax 'statement nil t containing-sexp paren-state)) |
9f636bd65206
Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents:
74372
diff
changeset
|
9279 |
30403
68e734ab7d5d
(c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents:
26817
diff
changeset
|
9280 ;; CASE 5M: we are at a topmost continuation line |
18720 | 9281 (t |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9282 (c-beginning-of-statement-1 (c-safe-position (point) paren-state)) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9283 (when (c-major-mode-is 'objc-mode) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9284 (setq placeholder (point)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9285 (while (and (c-forward-objc-directive) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9286 (< (point) indent-point)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9287 (c-forward-syntactic-ws) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9288 (setq placeholder (point))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9289 (goto-char placeholder)) |
18720 | 9290 (c-add-syntax 'topmost-intro-cont (c-point 'boi))) |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9291 )) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9292 |
30403
68e734ab7d5d
(c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents:
26817
diff
changeset
|
9293 ;; (CASE 6 has been removed.) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9294 |
106522
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
9295 ;; CASE 19: line is an expression, not a statement, and is directly |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
9296 ;; contained by a template delimiter. Most likely, we are in a |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
9297 ;; template arglist within a statement. This case is based on CASE |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
9298 ;; 7. At some point in the future, we may wish to create more |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
9299 ;; syntactic symbols such as `template-intro', |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
9300 ;; `template-cont-nonempty', etc., and distinguish between them as we |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
9301 ;; do for `arglist-intro' etc. (2009-12-07). |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
9302 ((and c-recognize-<>-arglists |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
9303 (setq containing-< (c-up-list-backward indent-point containing-sexp)) |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
9304 (eq (char-after containing-<) ?\<)) |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
9305 (setq placeholder (c-point 'boi containing-<)) |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
9306 (goto-char containing-sexp) ; Most nested Lbrace/Lparen (but not |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
9307 ; '<') before indent-point. |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
9308 (if (>= (point) placeholder) |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
9309 (progn |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
9310 (forward-char) |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
9311 (skip-chars-forward " \t")) |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
9312 (goto-char placeholder)) |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
9313 (c-add-stmt-syntax 'template-args-cont (list containing-<) t |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
9314 (c-most-enclosing-brace c-state-cache (point)) |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
9315 paren-state)) |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
9316 |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
9317 |
24282 | 9318 ;; CASE 7: line is an expression, not a statement. Most |
18720 | 9319 ;; likely we are either in a function prototype or a function |
106522
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
9320 ;; call argument list, or a template argument list. |
24282 | 9321 ((not (or (and c-special-brace-lists |
9322 (save-excursion | |
9323 (goto-char containing-sexp) | |
9324 (c-looking-at-special-brace-list))) | |
106522
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
9325 (eq (char-after containing-sexp) ?{) |
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
9326 (eq (char-after containing-sexp) ?<))) |
18720 | 9327 (cond |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9328 |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
9329 ;; CASE 7A: we are looking at the arglist closing paren. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
9330 ;; C.f. case 7F. |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9331 ((memq char-after-ip '(?\) ?\])) |
18720 | 9332 (goto-char containing-sexp) |
30403
68e734ab7d5d
(c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents:
26817
diff
changeset
|
9333 (setq placeholder (c-point 'boi)) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
9334 (if (and (c-safe (backward-up-list 1) t) |
56646
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
9335 (>= (point) placeholder)) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
9336 (progn |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
9337 (forward-char) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
9338 (skip-chars-forward " \t")) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
9339 (goto-char placeholder)) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9340 (c-add-stmt-syntax 'arglist-close (list containing-sexp) t |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
9341 (c-most-enclosing-brace paren-state (point)) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9342 paren-state)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9343 |
24282 | 9344 ;; CASE 7B: Looking at the opening brace of an |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9345 ;; in-expression block or brace list. C.f. cases 4, 16A |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9346 ;; and 17E. |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9347 ((and (eq char-after-ip ?{) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9348 (progn |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9349 (setq placeholder (c-inside-bracelist-p (point) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9350 paren-state)) |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9351 (if placeholder |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9352 (setq tmpsymbol '(brace-list-open . inexpr-class)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9353 (setq tmpsymbol '(block-open . inexpr-statement) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9354 placeholder |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9355 (cdr-safe (c-looking-at-inexpr-block |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9356 (c-safe-position containing-sexp |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9357 paren-state) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9358 containing-sexp))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9359 ;; placeholder is nil if it's a block directly in |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9360 ;; a function arglist. That makes us skip out of |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9361 ;; this case. |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9362 ))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9363 (goto-char placeholder) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9364 (back-to-indentation) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9365 (c-add-stmt-syntax (car tmpsymbol) nil t |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9366 (c-most-enclosing-brace paren-state (point)) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9367 paren-state) |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9368 (if (/= (point) placeholder) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9369 (c-add-syntax (cdr tmpsymbol)))) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9370 |
24282 | 9371 ;; CASE 7C: we are looking at the first argument in an empty |
18720 | 9372 ;; argument list. Use arglist-close if we're actually |
9373 ;; looking at a close paren or bracket. | |
9374 ((memq char-before-ip '(?\( ?\[)) | |
9375 (goto-char containing-sexp) | |
30403
68e734ab7d5d
(c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents:
26817
diff
changeset
|
9376 (setq placeholder (c-point 'boi)) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9377 (if (and (c-safe (backward-up-list 1) t) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9378 (>= (point) placeholder)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9379 (progn |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9380 (forward-char) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9381 (skip-chars-forward " \t")) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9382 (goto-char placeholder)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9383 (c-add-stmt-syntax 'arglist-intro (list containing-sexp) t |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9384 (c-most-enclosing-brace paren-state (point)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9385 paren-state)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9386 |
24282 | 9387 ;; CASE 7D: we are inside a conditional test clause. treat |
18720 | 9388 ;; these things as statements |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9389 ((progn |
20914
8f189ffad604
(c-forward-syntactic-ws, c-backward-syntactic-ws):
Richard M. Stallman <rms@gnu.org>
parents:
20142
diff
changeset
|
9390 (goto-char containing-sexp) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
9391 (and (c-safe (c-forward-sexp -1) t) |
20914
8f189ffad604
(c-forward-syntactic-ws, c-backward-syntactic-ws):
Richard M. Stallman <rms@gnu.org>
parents:
20142
diff
changeset
|
9392 (looking-at "\\<for\\>[^_]"))) |
18720 | 9393 (goto-char (1+ containing-sexp)) |
9394 (c-forward-syntactic-ws indent-point) | |
9395 (if (eq char-before-ip ?\;) | |
9396 (c-add-syntax 'statement (point)) | |
9397 (c-add-syntax 'statement-cont (point)) | |
9398 )) | |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9399 |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9400 ;; CASE 7E: maybe a continued ObjC method call. This is the |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9401 ;; case when we are inside a [] bracketed exp, and what |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9402 ;; precede the opening bracket is not an identifier. |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9403 ((and c-opt-method-key |
18720 | 9404 (eq (char-after containing-sexp) ?\[) |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9405 (progn |
18720 | 9406 (goto-char (1- containing-sexp)) |
9407 (c-backward-syntactic-ws (c-point 'bod)) | |
9408 (if (not (looking-at c-symbol-key)) | |
9409 (c-add-syntax 'objc-method-call-cont containing-sexp)) | |
9410 ))) | |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9411 |
24282 | 9412 ;; CASE 7F: we are looking at an arglist continuation line, |
18720 | 9413 ;; but the preceding argument is on the same line as the |
9414 ;; opening paren. This case includes multi-line | |
9415 ;; mathematical paren groupings, but we could be on a | |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
9416 ;; for-list continuation line. C.f. case 7A. |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9417 ((progn |
36920 | 9418 (goto-char (1+ containing-sexp)) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9419 (< (save-excursion |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9420 (c-forward-syntactic-ws) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9421 (point)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9422 (c-point 'bonl))) |
106522
0a0832d4518d
Fix bug#5091: indentation in c++-mode.
Alan Mackenzie <acm@muc.de>
parents:
106395
diff
changeset
|
9423 (goto-char containing-sexp) ; paren opening the arglist |
30403
68e734ab7d5d
(c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents:
26817
diff
changeset
|
9424 (setq placeholder (c-point 'boi)) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
9425 (if (and (c-safe (backward-up-list 1) t) |
56646
b7446b6f097d
Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents:
53073
diff
changeset
|
9426 (>= (point) placeholder)) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
9427 (progn |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
9428 (forward-char) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
9429 (skip-chars-forward " \t")) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
9430 (goto-char placeholder)) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9431 (c-add-stmt-syntax 'arglist-cont-nonempty (list containing-sexp) t |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
9432 (c-most-enclosing-brace c-state-cache (point)) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9433 paren-state)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9434 |
24282 | 9435 ;; CASE 7G: we are looking at just a normal arglist |
18720 | 9436 ;; continuation line |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9437 (t (c-forward-syntactic-ws indent-point) |
18720 | 9438 (c-add-syntax 'arglist-cont (c-point 'boi))) |
9439 )) | |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9440 |
24282 | 9441 ;; CASE 8: func-local multi-inheritance line |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9442 ((and (c-major-mode-is 'c++-mode) |
18720 | 9443 (save-excursion |
9444 (goto-char indent-point) | |
9445 (skip-chars-forward " \t") | |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
9446 (looking-at c-opt-postfix-decl-spec-key))) |
18720 | 9447 (goto-char indent-point) |
9448 (skip-chars-forward " \t") | |
9449 (cond | |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9450 |
24282 | 9451 ;; CASE 8A: non-hanging colon on an inher intro |
18720 | 9452 ((eq char-after-ip ?:) |
9453 (c-backward-syntactic-ws lim) | |
9454 (c-add-syntax 'inher-intro (c-point 'boi))) | |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9455 |
24282 | 9456 ;; CASE 8B: hanging colon on an inher intro |
18720 | 9457 ((eq char-before-ip ?:) |
9458 (c-add-syntax 'inher-intro (c-point 'boi))) | |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9459 |
24282 | 9460 ;; CASE 8C: a continued inheritance line |
18720 | 9461 (t |
9462 (c-beginning-of-inheritance-list lim) | |
9463 (c-add-syntax 'inher-cont (point)) | |
9464 ))) | |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9465 |
24282 | 9466 ;; CASE 9: we are inside a brace-list |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9467 ((and (not (c-major-mode-is 'awk-mode)) ; Maybe this isn't needed (ACM, 2002/3/29) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
9468 (setq special-brace-list |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9469 (or (and c-special-brace-lists ;;;; ALWAYS NIL FOR AWK!! |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
9470 (save-excursion |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
9471 (goto-char containing-sexp) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
9472 (c-looking-at-special-brace-list))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
9473 (c-inside-bracelist-p containing-sexp paren-state)))) |
18720 | 9474 (cond |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9475 |
24282 | 9476 ;; CASE 9A: In the middle of a special brace list opener. |
9477 ((and (consp special-brace-list) | |
30403
68e734ab7d5d
(c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents:
26817
diff
changeset
|
9478 (save-excursion |
68e734ab7d5d
(c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents:
26817
diff
changeset
|
9479 (goto-char containing-sexp) |
68e734ab7d5d
(c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents:
26817
diff
changeset
|
9480 (eq (char-after) ?\()) |
24282 | 9481 (eq char-after-ip (car (cdr special-brace-list)))) |
9482 (goto-char (car (car special-brace-list))) | |
26817 | 9483 (skip-chars-backward " \t") |
36920 | 9484 (if (and (bolp) |
9485 (assoc 'statement-cont | |
9486 (setq placeholder (c-guess-basic-syntax)))) | |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
9487 (setq c-syntactic-context placeholder) |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9488 (c-beginning-of-statement-1 |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9489 (c-safe-position (1- containing-sexp) paren-state)) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
9490 (c-forward-token-2 0) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
9491 (while (looking-at c-specifier-key) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
9492 (goto-char (match-end 1)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
9493 (c-forward-syntactic-ws)) |
26817 | 9494 (c-add-syntax 'brace-list-open (c-point 'boi)))) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9495 |
24282 | 9496 ;; CASE 9B: brace-list-close brace |
9497 ((if (consp special-brace-list) | |
9498 ;; Check special brace list closer. | |
9499 (progn | |
9500 (goto-char (car (car special-brace-list))) | |
9501 (save-excursion | |
9502 (goto-char indent-point) | |
9503 (back-to-indentation) | |
9504 (or | |
9505 ;; We were between the special close char and the `)'. | |
9506 (and (eq (char-after) ?\)) | |
9507 (eq (1+ (point)) (cdr (car special-brace-list)))) | |
9508 ;; We were before the special close char. | |
9509 (and (eq (char-after) (cdr (cdr special-brace-list))) | |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
9510 (zerop (c-forward-token-2)) |
24282 | 9511 (eq (1+ (point)) (cdr (car special-brace-list))))))) |
9512 ;; Normal brace list check. | |
9513 (and (eq char-after-ip ?}) | |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
9514 (c-safe (goto-char (c-up-list-backward (point))) t) |
24282 | 9515 (= (point) containing-sexp))) |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9516 (if (eq (point) (c-point 'boi)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9517 (c-add-syntax 'brace-list-close (point)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9518 (setq lim (c-most-enclosing-brace c-state-cache (point))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9519 (c-beginning-of-statement-1 lim) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9520 (c-add-stmt-syntax 'brace-list-close nil t lim paren-state))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9521 |
24282 | 9522 (t |
9523 ;; Prepare for the rest of the cases below by going to the | |
9524 ;; token following the opening brace | |
9525 (if (consp special-brace-list) | |
9526 (progn | |
9527 (goto-char (car (car special-brace-list))) | |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
9528 (c-forward-token-2 1 nil indent-point)) |
24282 | 9529 (goto-char containing-sexp)) |
9530 (forward-char) | |
9531 (let ((start (point))) | |
18720 | 9532 (c-forward-syntactic-ws indent-point) |
24282 | 9533 (goto-char (max start (c-point 'bol)))) |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9534 (c-skip-ws-forward indent-point) |
24282 | 9535 (cond |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9536 |
24282 | 9537 ;; CASE 9C: we're looking at the first line in a brace-list |
9538 ((= (point) indent-point) | |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9539 (if (consp special-brace-list) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9540 (goto-char (car (car special-brace-list))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9541 (goto-char containing-sexp)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9542 (if (eq (point) (c-point 'boi)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9543 (c-add-syntax 'brace-list-intro (point)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9544 (setq lim (c-most-enclosing-brace c-state-cache (point))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9545 (c-beginning-of-statement-1 lim) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9546 (c-add-stmt-syntax 'brace-list-intro nil t lim paren-state))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9547 |
24282 | 9548 ;; CASE 9D: this is just a later brace-list-entry or |
36920 | 9549 ;; brace-entry-open |
24282 | 9550 (t (if (or (eq char-after-ip ?{) |
9551 (and c-special-brace-lists | |
9552 (save-excursion | |
9553 (goto-char indent-point) | |
9554 (c-forward-syntactic-ws (c-point 'eol)) | |
9555 (c-looking-at-special-brace-list (point))))) | |
9556 (c-add-syntax 'brace-entry-open (point)) | |
9557 (c-add-syntax 'brace-list-entry (point)) | |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9558 )) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9559 )))) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9560 |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9561 ;; CASE 10: A continued statement or top level construct. |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9562 ((and (not (memq char-before-ip '(?\; ?:))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9563 (not (c-at-vsemi-p before-ws-ip)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9564 (or (not (eq char-before-ip ?})) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9565 (c-looking-at-inexpr-block-backward c-state-cache)) |
18720 | 9566 (> (point) |
9567 (save-excursion | |
9568 (c-beginning-of-statement-1 containing-sexp) | |
9569 (setq placeholder (point)))) | |
9570 (/= placeholder containing-sexp)) | |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9571 ;; This is shared with case 18. |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9572 (c-guess-continued-construct indent-point |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9573 char-after-ip |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9574 placeholder |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9575 containing-sexp |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9576 paren-state)) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9577 |
24282 | 9578 ;; CASE 16: block close brace, possibly closing the defun or |
18720 | 9579 ;; the class |
9580 ((eq char-after-ip ?}) | |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9581 ;; From here on we have the next containing sexp in lim. |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9582 (setq lim (c-most-enclosing-brace paren-state)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9583 (goto-char containing-sexp) |
18720 | 9584 (cond |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9585 |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9586 ;; CASE 16E: Closing a statement block? This catches |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9587 ;; cases where it's preceded by a statement keyword, |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9588 ;; which works even when used in an "invalid" context, |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9589 ;; e.g. a macro argument. |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9590 ((c-after-conditional) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9591 (c-backward-to-block-anchor lim) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9592 (c-add-stmt-syntax 'block-close nil t lim paren-state)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9593 |
24282 | 9594 ;; CASE 16A: closing a lambda defun or an in-expression |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9595 ;; block? C.f. cases 4, 7B and 17E. |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9596 ((setq placeholder (c-looking-at-inexpr-block |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9597 (c-safe-position containing-sexp paren-state) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9598 nil)) |
24282 | 9599 (setq tmpsymbol (if (eq (car placeholder) 'inlambda) |
9600 'inline-close | |
9601 'block-close)) | |
9602 (goto-char containing-sexp) | |
9603 (back-to-indentation) | |
9604 (if (= containing-sexp (point)) | |
9605 (c-add-syntax tmpsymbol (point)) | |
9606 (goto-char (cdr placeholder)) | |
36920 | 9607 (back-to-indentation) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9608 (c-add-stmt-syntax tmpsymbol nil t |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9609 (c-most-enclosing-brace paren-state (point)) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9610 paren-state) |
36920 | 9611 (if (/= (point) (cdr placeholder)) |
9612 (c-add-syntax (car placeholder))))) | |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9613 |
24282 | 9614 ;; CASE 16B: does this close an inline or a function in |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
9615 ;; a non-class declaration level block? |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9616 ((save-excursion |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9617 (and lim |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9618 (progn |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9619 (goto-char lim) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9620 (c-looking-at-decl-block |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9621 (c-most-enclosing-brace paren-state lim) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9622 nil)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9623 (setq placeholder (point)))) |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9624 (c-backward-to-decl-anchor lim) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9625 (back-to-indentation) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9626 (if (save-excursion |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9627 (goto-char placeholder) |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9628 (looking-at c-other-decl-block-key)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9629 (c-add-syntax 'defun-close (point)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9630 (c-add-syntax 'inline-close (point)))) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9631 |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9632 ;; CASE 16F: Can be a defun-close of a function declared |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9633 ;; in a statement block, e.g. in Pike or when using gcc |
53073
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
9634 ;; extensions, but watch out for macros followed by |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
9635 ;; blocks. Let it through to be handled below. |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9636 ;; C.f. cases B.3 and 17G. |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9637 ((save-excursion |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9638 (and (not (c-at-statement-start-p)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9639 (eq (c-beginning-of-statement-1 lim nil nil t) 'same) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9640 (setq placeholder (point)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9641 (let ((c-recognize-typeless-decls nil)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9642 ;; Turn off recognition of constructs that |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9643 ;; lacks a type in this case, since that's more |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9644 ;; likely to be a macro followed by a block. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9645 (c-forward-decl-or-cast-1 (c-point 'bosws) nil nil)))) |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9646 (back-to-indentation) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9647 (if (/= (point) containing-sexp) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9648 (goto-char placeholder)) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9649 (c-add-stmt-syntax 'defun-close nil t lim paren-state)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9650 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9651 ;; CASE 16C: If there is an enclosing brace then this is |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9652 ;; a block close since defun closes inside declaration |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9653 ;; level blocks have been handled above. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9654 (lim |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9655 ;; If the block is preceded by a case/switch label on |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9656 ;; the same line, we anchor at the first preceding label |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9657 ;; at boi. The default handling in c-add-stmt-syntax |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9658 ;; really fixes it better, but we do like this to keep |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9659 ;; the indentation compatible with version 5.28 and |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9660 ;; earlier. C.f. case 17H. |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9661 (while (and (/= (setq placeholder (point)) (c-point 'boi)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9662 (eq (c-beginning-of-statement-1 lim) 'label))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9663 (goto-char placeholder) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9664 (if (looking-at c-label-kwds-regexp) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9665 (c-add-syntax 'block-close (point)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9666 (goto-char containing-sexp) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9667 ;; c-backward-to-block-anchor not necessary here; those |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9668 ;; situations are handled in case 16E above. |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9669 (c-add-stmt-syntax 'block-close nil t lim paren-state))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9670 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9671 ;; CASE 16D: Only top level defun close left. |
18720 | 9672 (t |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9673 (goto-char containing-sexp) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9674 (c-backward-to-decl-anchor lim) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9675 (c-add-stmt-syntax 'defun-close nil nil |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9676 (c-most-enclosing-brace paren-state) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9677 paren-state)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9678 )) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9679 |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9680 ;; CASE 17: Statement or defun catchall. |
18720 | 9681 (t |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9682 (goto-char indent-point) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9683 ;; Back up statements until we find one that starts at boi. |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9684 (while (let* ((prev-point (point)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9685 (last-step-type (c-beginning-of-statement-1 |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9686 containing-sexp))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9687 (if (= (point) prev-point) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9688 (progn |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9689 (setq step-type (or step-type last-step-type)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9690 nil) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9691 (setq step-type last-step-type) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9692 (/= (point) (c-point 'boi))))) |
18720 | 9693 (cond |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9694 |
24282 | 9695 ;; CASE 17B: continued statement |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9696 ((and (eq step-type 'same) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9697 (/= (point) indent-point)) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9698 (c-add-stmt-syntax 'statement-cont nil nil |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9699 containing-sexp paren-state)) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9700 |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9701 ;; CASE 17A: After a case/default label? |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9702 ((progn |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9703 (while (and (eq step-type 'label) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9704 (not (looking-at c-label-kwds-regexp))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9705 (setq step-type |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9706 (c-beginning-of-statement-1 containing-sexp))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9707 (eq step-type 'label)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9708 (c-add-stmt-syntax (if (eq char-after-ip ?{) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9709 'statement-case-open |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9710 'statement-case-intro) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9711 nil t containing-sexp paren-state)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9712 |
24282 | 9713 ;; CASE 17D: any old statement |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9714 ((progn |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9715 (while (eq step-type 'label) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9716 (setq step-type |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9717 (c-beginning-of-statement-1 containing-sexp))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9718 (eq step-type 'previous)) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9719 (c-add-stmt-syntax 'statement nil t |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
9720 containing-sexp paren-state) |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9721 (if (eq char-after-ip ?{) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9722 (c-add-syntax 'block-open))) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9723 |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9724 ;; CASE 17I: Inside a substatement block. |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9725 ((progn |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9726 ;; The following tests are all based on containing-sexp. |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9727 (goto-char containing-sexp) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9728 ;; From here on we have the next containing sexp in lim. |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9729 (setq lim (c-most-enclosing-brace paren-state containing-sexp)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9730 (c-after-conditional)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9731 (c-backward-to-block-anchor lim) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9732 (c-add-stmt-syntax 'statement-block-intro nil t |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
9733 lim paren-state) |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9734 (if (eq char-after-ip ?{) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9735 (c-add-syntax 'block-open))) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9736 |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9737 ;; CASE 17E: first statement in an in-expression block. |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9738 ;; C.f. cases 4, 7B and 16A. |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9739 ((setq placeholder (c-looking-at-inexpr-block |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9740 (c-safe-position containing-sexp paren-state) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9741 nil)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9742 (setq tmpsymbol (if (eq (car placeholder) 'inlambda) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9743 'defun-block-intro |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9744 'statement-block-intro)) |
24282 | 9745 (back-to-indentation) |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9746 (if (= containing-sexp (point)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9747 (c-add-syntax tmpsymbol (point)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9748 (goto-char (cdr placeholder)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9749 (back-to-indentation) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9750 (c-add-stmt-syntax tmpsymbol nil t |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9751 (c-most-enclosing-brace c-state-cache (point)) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9752 paren-state) |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9753 (if (/= (point) (cdr placeholder)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9754 (c-add-syntax (car placeholder)))) |
24282 | 9755 (if (eq char-after-ip ?{) |
9756 (c-add-syntax 'block-open))) | |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9757 |
24282 | 9758 ;; CASE 17F: first statement in an inline, or first |
18720 | 9759 ;; statement in a top-level defun. we can tell this is it |
9760 ;; if there are no enclosing braces that haven't been | |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9761 ;; narrowed out by a class (i.e. don't use bod here). |
18720 | 9762 ((save-excursion |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9763 (or (not (setq placeholder (c-most-enclosing-brace |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9764 paren-state))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9765 (and (progn |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9766 (goto-char placeholder) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9767 (eq (char-after) ?{)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9768 (c-looking-at-decl-block (c-most-enclosing-brace |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9769 paren-state (point)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9770 nil)))) |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9771 (c-backward-to-decl-anchor lim) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9772 (back-to-indentation) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9773 (c-add-syntax 'defun-block-intro (point))) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9774 |
30403
68e734ab7d5d
(c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents:
26817
diff
changeset
|
9775 ;; CASE 17G: First statement in a function declared inside |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9776 ;; a normal block. This can occur in Pike and with |
53073
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
9777 ;; e.g. the gcc extensions, but watch out for macros |
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
9778 ;; followed by blocks. C.f. cases B.3 and 16F. |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9779 ((save-excursion |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9780 (and (not (c-at-statement-start-p)) |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9781 (eq (c-beginning-of-statement-1 lim nil nil t) 'same) |
53073
49f65e04ba8e
CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents:
52605
diff
changeset
|
9782 (setq placeholder (point)) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9783 (let ((c-recognize-typeless-decls nil)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9784 ;; Turn off recognition of constructs that lacks |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9785 ;; a type in this case, since that's more likely |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9786 ;; to be a macro followed by a block. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9787 (c-forward-decl-or-cast-1 (c-point 'bosws) nil nil)))) |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9788 (back-to-indentation) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9789 (if (/= (point) containing-sexp) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9790 (goto-char placeholder)) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9791 (c-add-stmt-syntax 'defun-block-intro nil t |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
9792 lim paren-state)) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9793 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9794 ;; CASE 17H: First statement in a block. |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9795 (t |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9796 ;; If the block is preceded by a case/switch label on the |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9797 ;; same line, we anchor at the first preceding label at |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9798 ;; boi. The default handling in c-add-stmt-syntax is |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9799 ;; really fixes it better, but we do like this to keep the |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9800 ;; indentation compatible with version 5.28 and earlier. |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9801 ;; C.f. case 16C. |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9802 (while (and (/= (setq placeholder (point)) (c-point 'boi)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9803 (eq (c-beginning-of-statement-1 lim) 'label))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9804 (goto-char placeholder) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9805 (if (looking-at c-label-kwds-regexp) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9806 (c-add-syntax 'statement-block-intro (point)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9807 (goto-char containing-sexp) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9808 ;; c-backward-to-block-anchor not necessary here; those |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9809 ;; situations are handled in case 17I above. |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9810 (c-add-stmt-syntax 'statement-block-intro nil t |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
9811 lim paren-state)) |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9812 (if (eq char-after-ip ?{) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9813 (c-add-syntax 'block-open))) |
18720 | 9814 )) |
9815 ) | |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9816 |
18720 | 9817 ;; now we need to look at any modifiers |
9818 (goto-char indent-point) | |
9819 (skip-chars-forward " \t") | |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9820 |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9821 ;; are we looking at a comment only line? |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9822 (when (and (looking-at c-comment-start-regexp) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
9823 (/= (c-forward-token-2 0 nil (c-point 'eol)) 0)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
9824 (c-append-syntax 'comment-intro)) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9825 |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9826 ;; we might want to give additional offset to friends (in C++). |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9827 (when (and c-opt-friend-key |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9828 (looking-at c-opt-friend-key)) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
9829 (c-append-syntax 'friend)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
9830 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
9831 ;; Set syntactic-relpos. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
9832 (let ((p c-syntactic-context)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
9833 (while (and p |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9834 (if (integerp (c-langelem-pos (car p))) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
9835 (progn |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9836 (setq syntactic-relpos (c-langelem-pos (car p))) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
9837 nil) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
9838 t)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
9839 (setq p (cdr p)))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
9840 |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9841 ;; Start of or a continuation of a preprocessor directive? |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9842 (if (and macro-start |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9843 (eq macro-start (c-point 'boi)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9844 (not (and (c-major-mode-is 'pike-mode) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9845 (eq (char-after (1+ macro-start)) ?\")))) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
9846 (c-append-syntax 'cpp-macro) |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9847 (when (and c-syntactic-indentation-in-macros macro-start) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9848 (if in-macro-expr |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
9849 (when (or |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
9850 (< syntactic-relpos macro-start) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
9851 (not (or |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
9852 (assq 'arglist-intro c-syntactic-context) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
9853 (assq 'arglist-cont c-syntactic-context) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
9854 (assq 'arglist-cont-nonempty c-syntactic-context) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
9855 (assq 'arglist-close c-syntactic-context)))) |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9856 ;; If inside a cpp expression, i.e. anywhere in a |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9857 ;; cpp directive except a #define body, we only let |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9858 ;; through the syntactic analysis that is internal |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9859 ;; in the expression. That means the arglist |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9860 ;; elements, if they are anchored inside the cpp |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9861 ;; expression. |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
9862 (setq c-syntactic-context nil) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
9863 (c-add-syntax 'cpp-macro-cont macro-start)) |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9864 (when (and (eq macro-start syntactic-relpos) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
9865 (not (assq 'cpp-define-intro c-syntactic-context)) |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9866 (save-excursion |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9867 (goto-char macro-start) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9868 (or (not (c-forward-to-cpp-define-body)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9869 (<= (point) (c-point 'boi indent-point))))) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9870 ;; Inside a #define body and the syntactic analysis is |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9871 ;; anchored on the start of the #define. In this case |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9872 ;; we add cpp-define-intro to get the extra |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9873 ;; indentation of the #define body. |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9874 (c-add-syntax 'cpp-define-intro))))) |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9875 |
18720 | 9876 ;; return the syntax |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9877 c-syntactic-context))) |
18720 | 9878 |
9879 | |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
9880 ;; Indentation calculation. |
18720 | 9881 |
36920 | 9882 (defun c-evaluate-offset (offset langelem symbol) |
9883 ;; offset can be a number, a function, a variable, a list, or one of | |
9884 ;; the symbols + or - | |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9885 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9886 ;; This function might do hidden buffer changes. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9887 (let ((res |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9888 (cond |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9889 ((numberp offset) offset) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9890 ((vectorp offset) offset) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9891 ((null offset) nil) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9892 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9893 ((eq offset '+) c-basic-offset) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9894 ((eq offset '-) (- c-basic-offset)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9895 ((eq offset '++) (* 2 c-basic-offset)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9896 ((eq offset '--) (* 2 (- c-basic-offset))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9897 ((eq offset '*) (/ c-basic-offset 2)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9898 ((eq offset '/) (/ (- c-basic-offset) 2)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9899 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9900 ((functionp offset) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9901 (c-evaluate-offset |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9902 (funcall offset |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9903 (cons (c-langelem-sym langelem) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9904 (c-langelem-pos langelem))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9905 langelem symbol)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9906 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9907 ((listp offset) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9908 (cond |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9909 ((eq (car offset) 'quote) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9910 (c-benign-error "The offset %S for %s was mistakenly quoted" |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9911 offset symbol) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9912 nil) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9913 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9914 ((memq (car offset) '(min max)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9915 (let (res val (method (car offset))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9916 (setq offset (cdr offset)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9917 (while offset |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9918 (setq val (c-evaluate-offset (car offset) langelem symbol)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9919 (cond |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9920 ((not val)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9921 ((not res) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9922 (setq res val)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9923 ((integerp val) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9924 (if (vectorp res) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9925 (c-benign-error "\ |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9926 Error evaluating offset %S for %s: \ |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9927 Cannot combine absolute offset %S with relative %S in `%s' method" |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9928 (car offset) symbol res val method) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9929 (setq res (funcall method res val)))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9930 (t |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9931 (if (integerp res) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9932 (c-benign-error "\ |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9933 Error evaluating offset %S for %s: \ |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9934 Cannot combine relative offset %S with absolute %S in `%s' method" |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9935 (car offset) symbol res val method) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9936 (setq res (vector (funcall method (aref res 0) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9937 (aref val 0))))))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9938 (setq offset (cdr offset))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9939 res)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9940 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9941 ((eq (car offset) 'add) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9942 (let (res val) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9943 (setq offset (cdr offset)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9944 (while offset |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9945 (setq val (c-evaluate-offset (car offset) langelem symbol)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9946 (cond |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9947 ((not val)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9948 ((not res) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9949 (setq res val)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9950 ((integerp val) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9951 (if (vectorp res) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9952 (setq res (vector (+ (aref res 0) val))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9953 (setq res (+ res val)))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9954 (t |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9955 (if (vectorp res) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9956 (c-benign-error "\ |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9957 Error evaluating offset %S for %s: \ |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9958 Cannot combine absolute offsets %S and %S in `add' method" |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9959 (car offset) symbol res val) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9960 (setq res val)))) ; Override. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9961 (setq offset (cdr offset))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9962 res)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9963 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9964 (t |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9965 (let (res) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9966 (when (eq (car offset) 'first) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9967 (setq offset (cdr offset))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9968 (while (and (not res) offset) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9969 (setq res (c-evaluate-offset (car offset) langelem symbol) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9970 offset (cdr offset))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9971 res)))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9972 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9973 ((and (symbolp offset) (boundp offset)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9974 (symbol-value offset)) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9975 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9976 (t |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9977 (c-benign-error "Unknown offset format %S for %s" offset symbol) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9978 nil)))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9979 |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9980 (if (or (null res) (integerp res) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9981 (and (vectorp res) (= (length res) 1) (integerp (aref res 0)))) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9982 res |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9983 (c-benign-error "Error evaluating offset %S for %s: Got invalid value %S" |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9984 offset symbol res) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9985 nil))) |
36920 | 9986 |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
9987 (defun c-calc-offset (langelem) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
9988 ;; Get offset from LANGELEM which is a list beginning with the |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
9989 ;; syntactic symbol and followed by any analysis data it provides. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
9990 ;; That data may be zero or more elements, but if at least one is |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9991 ;; given then the first is the anchor position (or nil). The symbol |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9992 ;; is matched against `c-offsets-alist' and the offset calculated |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9993 ;; from that is returned. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9994 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9995 ;; This function might do hidden buffer changes. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
9996 (let* ((symbol (c-langelem-sym langelem)) |
36920 | 9997 (match (assq symbol c-offsets-alist)) |
9998 (offset (cdr-safe match))) | |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
9999 (if match |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
10000 (setq offset (c-evaluate-offset offset langelem symbol)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
10001 (if c-strict-syntax-p |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
10002 (c-benign-error "No offset found for syntactic symbol %s" symbol)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
10003 (setq offset 0)) |
36920 | 10004 (if (vectorp offset) |
10005 offset | |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
10006 (or (and (numberp offset) offset) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
10007 (and (symbolp offset) (symbol-value offset)) |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
10008 0)) |
36920 | 10009 )) |
10010 | |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
10011 (defun c-get-offset (langelem) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
10012 ;; This is a compatibility wrapper for `c-calc-offset' in case |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
10013 ;; someone is calling it directly. It takes an old style syntactic |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
10014 ;; element on the form (SYMBOL . ANCHOR-POS) and converts it to the |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
10015 ;; new list form. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
10016 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
10017 ;; This function might do hidden buffer changes. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
10018 (if (c-langelem-pos langelem) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
10019 (c-calc-offset (list (c-langelem-sym langelem) |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
10020 (c-langelem-pos langelem))) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
10021 (c-calc-offset langelem))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
10022 |
36920 | 10023 (defun c-get-syntactic-indentation (langelems) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
10024 ;; Calculate the syntactic indentation from a syntactic description |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
10025 ;; as returned by `c-guess-syntax'. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
10026 ;; |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
10027 ;; Note that topmost-intro always has an anchor position at bol, for |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
10028 ;; historical reasons. It's often used together with other symbols |
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
10029 ;; that has more sane positions. Since we always use the first |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
10030 ;; found anchor position, we rely on that these other symbols always |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
10031 ;; precede topmost-intro in the LANGELEMS list. |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
10032 ;; |
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
10033 ;; This function might do hidden buffer changes. |
44728
7a3ac6c387fe
CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents:
44510
diff
changeset
|
10034 (let ((indent 0) anchor) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
10035 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
10036 (while langelems |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
10037 (let* ((c-syntactic-element (car langelems)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
10038 (res (c-calc-offset c-syntactic-element))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
10039 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
10040 (if (vectorp res) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
10041 ;; Got an absolute column that overrides any indentation |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
10042 ;; we've collected so far, but not the relative |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
10043 ;; indentation we might get for the nested structures |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
10044 ;; further down the langelems list. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
10045 (setq indent (elt res 0) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
10046 anchor (point-min)) ; A position at column 0. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
10047 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
10048 ;; Got a relative change of the current calculated |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
10049 ;; indentation. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
10050 (setq indent (+ indent res)) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
10051 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
10052 ;; Use the anchor position from the first syntactic |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
10053 ;; element with one. |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
10054 (unless anchor |
67252
04d2abb755d9
Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents:
64833
diff
changeset
|
10055 (setq anchor (c-langelem-pos (car langelems))))) |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
10056 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
10057 (setq langelems (cdr langelems)))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
10058 |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
10059 (if anchor |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
10060 (+ indent (save-excursion |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
10061 (goto-char anchor) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
10062 (current-column))) |
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
10063 indent))) |
26817 | 10064 |
18720 | 10065 |
36920 | 10066 (cc-provide 'cc-engine) |
38422
7a94f1c588c4
Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents:
36920
diff
changeset
|
10067 |
93975
1e3a407766b9
Fix up comment convention on the arch-tag lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
92572
diff
changeset
|
10068 ;; arch-tag: 149add18-4673-4da5-ac47-6805e4eae089 |
18720 | 10069 ;;; cc-engine.el ends here |