annotate lisp/progmodes/cc-engine.el @ 76363:5f7fd5f2b00f

*** empty log message ***
author Kim F. Storm <storm@cua.dk>
date Tue, 06 Mar 2007 09:34:19 +0000
parents 33cf1027eb42
children 4dc5b2641221 52a7f3f50b89
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1 ;;; cc-engine.el --- core syntax guessing engine for CC mode
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2
74372
cf3e4c6cd4c3 Fix Copyright format.
Glenn Morris <rgm@gnu.org>
parents: 69140
diff changeset
3 ;; Copyright (C) 1985, 1987, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
75347
e3694f1cb928 Add 2007 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 75315
diff changeset
4 ;; 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
e3694f1cb928 Add 2007 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 75315
diff changeset
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
4389f67a231f Add my name.
Alan Mackenzie <acm@muc.de>
parents: 75027
diff changeset
7 ;; Authors: 2001- Alan Mackenzie
4389f67a231f Add my name.
Alan Mackenzie <acm@muc.de>
parents: 75027
diff changeset
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
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
10 ;; 1987 Dave Detlefs and Stewart Clamen
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
11 ;; 1985 Richard M. Stallman
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
12 ;; Maintainer: bug-cc-mode@gnu.org
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
13 ;; Created: 22-Apr-1997 (split from cc-mode.el)
20142
e66d1eef0bff (c-guess-basic-syntax):
Karl Heuer <kwzh@gnu.org>
parents: 20139
diff changeset
14 ;; Version: See cc-mode.el
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
15 ;; Keywords: c languages oop
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
16
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
17 ;; This file is part of GNU Emacs.
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
18
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
19 ;; GNU Emacs is free software; you can redistribute it and/or modify
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
20 ;; it under the terms of the GNU General Public License as published by
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
21 ;; the Free Software Foundation; either version 2, or (at your option)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
22 ;; any later version.
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
23
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
24 ;; GNU Emacs is distributed in the hope that it will be useful,
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
25 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
26 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
27 ;; GNU General Public License for more details.
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
28
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
29 ;; You should have received a copy of the GNU General Public License
62641
27b53b1903b6 2005-05-23 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents: 62317
diff changeset
30 ;; along with this program; see the file COPYING. If not, write to
27b53b1903b6 2005-05-23 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents: 62317
diff changeset
31 ;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
27b53b1903b6 2005-05-23 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents: 62317
diff changeset
32 ;; Boston, MA 02110-1301, USA.
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
33
38422
7a94f1c588c4 Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 36920
diff changeset
34 ;;; Commentary:
7a94f1c588c4 Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 36920
diff changeset
35
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
36 ;; 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
37 ;; 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
38 ;; 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
39 ;; 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
40 ;; 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
41 ;;
7a3ac6c387fe CC Mode 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 ;; (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
43 ;; 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
44 ;; 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
45
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
46 ;; Hidden buffer changes
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
47 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
48 ;; 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
49 ;; 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
50 ;; 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
51 ;; 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
52 ;; `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
53 ;; 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
54 ;;
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
55 ;; 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
56 ;; 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
57 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
58 ;; 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
59 ;; 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
60 ;;
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
61 ;; 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
62 ;; 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
63 ;;
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
64 ;; 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
65 ;; function that do hidden buffer changes inside
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
66 ;; `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
67 ;; interactive functions as possible.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
68 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
69 ;; 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
70 ;; 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
71 ;; 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
72 ;; 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
73
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
74 ;; Use of text properties
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
75 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
76 ;; 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
77 ;; 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
78 ;; interactive refontification.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
79 ;;
51829
d508ffa43505 2003-07-08 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents: 51714
diff changeset
80 ;; 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
81 ;; 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
82 ;;
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
83 ;; 'syntax-table
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
84 ;; Used to modify the syntax of some characters. Currently used to
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
85 ;; mark the "<" and ">" of angle bracket parens with paren syntax.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
86 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
87 ;; 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
88 ;; 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
89 ;; 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
90 ;; `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
91 ;; >= 21).
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
92 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
93 ;; '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
94 ;; 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
95 ;; 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
96 ;; below for further details.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
97 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
98 ;; 'c-type
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
99 ;; 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
100 ;; 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
101 ;; 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
102 ;; 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
103 ;; 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
104 ;; 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
105 ;; 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
106 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
107 ;; 'c-decl-arg-start
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
108 ;; 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
109 ;; 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
110 ;; prototype).
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
111 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
112 ;; 'c-decl-end
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
113 ;; 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
114 ;; 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
115 ;; 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
116 ;; `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
117 ;; `c-find-decl-spots').
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
118 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
119 ;; 'c-<>-arg-sep
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
120 ;; 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
121 ;; arglists like C++ template arglists.
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-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
124 ;; 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
125 ;; 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
126 ;; 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
127 ;; '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
128 ;; 'c-decl-id-start otherwise.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
129 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
130 ;; 'c-awk-NL-prop
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
131 ;; 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
132 ;; cc-awk.el.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
133
38422
7a94f1c588c4 Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 36920
diff changeset
134 ;;; Code:
7a94f1c588c4 Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 36920
diff changeset
135
26817
03befb219d03 Installed version 5.26
Gerd Moellmann <gerd@gnu.org>
parents: 25178
diff changeset
136 (eval-when-compile
03befb219d03 Installed version 5.26
Gerd Moellmann <gerd@gnu.org>
parents: 25178
diff changeset
137 (let ((load-path
36920
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
138 (if (and (boundp 'byte-compile-dest-file)
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
139 (stringp byte-compile-dest-file))
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
140 (cons (file-name-directory byte-compile-dest-file) load-path)
26817
03befb219d03 Installed version 5.26
Gerd Moellmann <gerd@gnu.org>
parents: 25178
diff changeset
141 load-path)))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
142 (load "cc-bytecomp" nil t)))
36920
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
143
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
144 (cc-require 'cc-defs)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
145 (cc-require-when-compile 'cc-langs)
36920
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
146 (cc-require 'cc-vars)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
147
36920
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
148 ;; Silence the compiler.
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
149 (cc-bytecomp-defun buffer-syntactic-context) ; XEmacs
26817
03befb219d03 Installed version 5.26
Gerd Moellmann <gerd@gnu.org>
parents: 25178
diff changeset
150
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
151
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
152 ;; 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
153
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
154 (defmacro c-declare-lang-variables ()
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
155 `(progn
51888
b5a29d6f2851 (c-declare-lang-variables): Don't use mapcan.
Richard M. Stallman <rms@gnu.org>
parents: 51829
diff changeset
156 ,@(apply 'nconc
b5a29d6f2851 (c-declare-lang-variables): Don't use mapcan.
Richard M. Stallman <rms@gnu.org>
parents: 51829
diff changeset
157 (mapcar (lambda (init)
b5a29d6f2851 (c-declare-lang-variables): Don't use mapcan.
Richard M. Stallman <rms@gnu.org>
parents: 51829
diff changeset
158 `(,(if (elt init 2)
b5a29d6f2851 (c-declare-lang-variables): Don't use mapcan.
Richard M. Stallman <rms@gnu.org>
parents: 51829
diff changeset
159 `(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
160 `(defvar ,(car init) nil))
b5a29d6f2851 (c-declare-lang-variables): Don't use mapcan.
Richard M. Stallman <rms@gnu.org>
parents: 51829
diff changeset
161 (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
162 (cdr c-lang-variable-inits)))))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
163 (c-declare-lang-variables)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
164
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
165
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
166 ;;; Internal state variables.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
167
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
168 ;; 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
169 (defvar c-hungry-delete-key nil)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
170 (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
171
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
172 ;; 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
173 ;; 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
174 ;; 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
175 ;; 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
176 (defvar c-electric-flag t)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
177 (make-variable-buffer-local 'c-electric-flag)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
178
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
179 ;; Internal state of auto newline feature.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
180 (defvar c-auto-newline nil)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
181 (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
182
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
183 ;; 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
184 ;; (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
185 ;; (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
186
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
187 (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
188 ;; 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
189 ;; 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
190 ;; 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
191 (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
192 (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
193 (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
194 (> 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
195
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
196 ;; Dynamically bound cache for `c-in-literal'.
36920
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
197 (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
198
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
199
53073
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
200 ;; Basic handling of preprocessor directives.
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
201
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
202 ;; 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
203 ;; `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
204 ;; 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
205 (defvar c-macro-start 'unknown)
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
206
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
207 (defsubst c-query-and-set-macro-start ()
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
208 (if (symbolp c-macro-start)
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
209 (setq c-macro-start (save-excursion
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
210 (c-save-buffer-state ()
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
211 (and (c-beginning-of-macro)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
212 (point)))))
53073
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
213 c-macro-start))
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
214
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
215 (defsubst c-query-macro-start ()
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
216 (if (symbolp c-macro-start)
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
217 (save-excursion
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
218 (c-save-buffer-state ()
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
219 (and (c-beginning-of-macro)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
220 (point))))
53073
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
221 c-macro-start))
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
222
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
223 (defun c-beginning-of-macro (&optional lim)
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
224 "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
225 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
226 otherwise return nil and leave point unchanged.
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
227
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
228 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
229 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
230 (when c-opt-cpp-prefix
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
231 (let ((here (point)))
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
232 (save-restriction
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
233 (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
234 (beginning-of-line)
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
235 (while (eq (char-before (1- (point))) ?\\)
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
236 (forward-line -1))
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
237 (back-to-indentation)
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
238 (if (and (<= (point) here)
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
239 (looking-at c-opt-cpp-start))
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
240 t
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
241 (goto-char here)
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
242 nil)))))
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
243
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
244 (defun c-end-of-macro ()
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
245 "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
246 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
247 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
248 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
249
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
250 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
251 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
252 (while (progn
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
253 (end-of-line)
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
254 (when (and (eq (char-before) ?\\)
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
255 (not (eobp)))
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
256 (forward-char)
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
257 t))))
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
258
75027
9f636bd65206 Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents: 74372
diff changeset
259 (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
260 ;; 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
261 ;; 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
262 ;; "#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
263 ;; 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
264 ;; 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
265 ;;
9f636bd65206 Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents: 74372
diff changeset
266 ;; 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
267 (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
268 (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
269 (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
270
53073
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
271 (defun c-forward-to-cpp-define-body ()
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
272 ;; 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
273 ;; 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
274 ;; 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
275 ;; 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
276 ;; 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
277 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
278 ;; This function might do hidden buffer changes.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
279 (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
280 (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
281 (not (= (match-end 0) (c-point 'eol))))
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
282 (goto-char (match-end 0))))
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
283
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
284
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
285 ;;; Basic utility functions.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
286
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
287 (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
288 ;; 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
289 ;; 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
290 ;; 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
291 ;; collapsed to "()", "[]" etc.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
292 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
293 ;; This function might do hidden buffer changes.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
294
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
295 (save-excursion
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
296 (save-restriction
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
297 (narrow-to-region from to)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
298 (goto-char from)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
299 (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
300
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
301 (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
302 (goto-char (setq pos (match-beginning 0)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
303 (c-forward-syntactic-ws)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
304 (if (= (point) pos)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
305 (forward-char)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
306
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
307 (when paren-level
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
308 (save-excursion
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
309 (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
310 pos (point))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
311
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
312 (if (and (> pos from)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
313 (< (point) to)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
314 (looking-at "\\w\\|\\s_")
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
315 (save-excursion
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
316 (goto-char (1- pos))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
317 (looking-at "\\w\\|\\s_")))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
318 (progn
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
319 (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
320 " "))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
321 (setq tail (cddr tail)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
322 (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
323 (setq tail (cdr tail)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
324
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
325 (when in-paren
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
326 (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
327 (setcdr tail (list (buffer-substring-no-properties
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
328 (1- (point)) (point))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
329 (setq tail (cdr tail))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
330
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
331 (setq from (point))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
332
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
333 (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
334 (apply 'concat (cdr parts))))))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
335
53073
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
336 (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
337 ;; 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
338 ;; 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
339 ;; 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
340 (let ((pos (- (point-max) (point)))
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
341 (c-macro-start c-macro-start)
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
342 tmp-char-inserted)
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
343 (if (zerop shift-amt)
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
344 nil
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
345 ;; 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
346 ;; 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
347 ;; 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
348 ;; 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
349 (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
350 (looking-at "[ \t]*\\\\$")
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
351 (save-excursion
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
352 (skip-chars-backward " \t")
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
353 (bolp)))
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
354 (insert ?x)
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
355 (backward-char)
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
356 (setq tmp-char-inserted t))
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
357 (unwind-protect
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
358 (let ((col (current-indentation)))
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
359 (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
360 (beginning-of-line)
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
361 (indent-to (+ col shift-amt)))
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
362 (when tmp-char-inserted
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
363 (delete-char 1))))
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
364 ;; 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
365 ;; 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
366 ;; 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
367 (if (and (< (point) (c-point 'boi))
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
368 (not tmp-char-inserted))
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
369 (back-to-indentation)
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
370 (if (> (- (point-max) pos) (point))
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
371 (goto-char (- (point-max) pos))))))
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
372
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
373 (defsubst c-keyword-sym (keyword)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
374 ;; 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
375 ;; 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
376 ;; `c-keywords-obarray'.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
377 (intern-soft keyword c-keywords-obarray))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
378
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
379 (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
380 ;; 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
381 ;; `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
382 ;; 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
383 ;; nil then the result is nil.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
384 (get keyword-sym lang-constant))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
385
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
386 ;; 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
387 (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
388 "\"|"
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
389 "\""))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
390
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
391 ;; Regexp matching string limit syntax.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
392 (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
393 "\\s\"\\|\\s|"
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
394 "\\s\""))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
395
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
396 ;; 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
397 (defconst c-ws*-string-limit-regexp
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
398 (concat "[ \t]*\\(" c-string-limit-regexp "\\)"))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
399
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
400 ;; 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
401 ;; are reported.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
402 (defvar c-parsing-error nil)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
403 (make-variable-buffer-local 'c-parsing-error)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
404
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
405 (defun c-echo-parsing-error (&optional quiet)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
406 (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
407 (c-benign-error "%s" c-parsing-error))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
408 c-parsing-error)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
409
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
410 ;; 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
411 ;; 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
412 ;; 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
413 ;; `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
414 (defvar c-literal-faces
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
415 (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
416 (when (facep 'font-lock-comment-delimiter-face)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
417 ;; New in Emacs 22.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
418 '(font-lock-comment-delimiter-face))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
419
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
420 (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
421 ;; 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
422 (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
423
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
424 (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
425 ;; 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
426 ;; 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
427 ;; be nil.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
428 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
429 ;; 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
430 ;; 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
431 (save-excursion
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
432 (goto-char from)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
433 (while (progn
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
434 (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
435 (c-clear-char-property (point) 'c-type))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
436 (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
437 (< (point) to)))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
438
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
439
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
440 ;; 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
441 ;; 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
442
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
443 (cc-bytecomp-defun overlays-in)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
444 (cc-bytecomp-defun overlay-get)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
445 (cc-bytecomp-defun overlay-start)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
446 (cc-bytecomp-defun overlay-end)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
447 (cc-bytecomp-defun delete-overlay)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
448 (cc-bytecomp-defun overlay-put)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
449 (cc-bytecomp-defun make-overlay)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
450
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
451 (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
452 (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
453 (while overlays
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
454 (setq overlay (car overlays)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
455 overlays (cdr overlays))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
456 (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
457 (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
458 end (max end (overlay-end overlay)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
459 (delete-overlay overlay)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
460 (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
461
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
462 (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
463 (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
464 (ol-beg beg) (ol-end end))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
465 (while overlays
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
466 (setq overlay (car overlays)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
467 overlays (cdr overlays))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
468 (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
469 (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
470 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
471 (delete-overlay overlay)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
472 (when (< ol-beg beg)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
473 (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
474 (when (> ol-end end)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
475 (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
476
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
477
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
478 ;; `c-beginning-of-statement-1' and accompanying stuff.
36920
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
479
18844
6b269c4ad2eb (c-maybe-labelp): Add defvar.
Richard M. Stallman <rms@gnu.org>
parents: 18720
diff changeset
480 ;; 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
481 ;; 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
482 ;; 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
483 ;; the byte compiler.
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
484 (defvar c-maybe-labelp)
18844
6b269c4ad2eb (c-maybe-labelp): Add defvar.
Richard M. Stallman <rms@gnu.org>
parents: 18720
diff changeset
485
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
486 ;; 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
487
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
488 ;; 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
489 ;; 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
490 (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
491 '(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
492 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
493 (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
494 `(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
495 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
496 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
497 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
498 ,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
499 (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
500 (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
501 '(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
502 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
503 ;; 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
504 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
505 (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
506 '(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
507 (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
508 '(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
509 (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
510 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
511 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
512 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
513 (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
514 (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
515 (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
516 `(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
517 (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
518 '(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
519 (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
520 (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
521 (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
522 (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
523 (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
524 (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
525
7a3ac6c387fe CC Mode 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 (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
527 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
528 "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
529 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
530 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
531 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
532
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
533 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
534 \"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
535 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
536 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
537 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
538 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
539
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
540 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
541 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
542 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
543 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
544
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
545 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
546 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
547 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
548 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
549 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
550 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
551
7a3ac6c387fe CC Mode 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 Return 'label if stopped at a label, 'same if stopped at 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
553 of the current statement, 'up if stepped to a 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
554 'previous if stepped to a preceding statement, 'beginning if stepped
7a3ac6c387fe CC Mode 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 from a statement continuation clause to its start clause, or 'macro 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
556 stepped to a macro start. Note that 'same and not 'label is returned
7a3ac6c387fe CC Mode 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 if stopped at the same label without crossing the colon character.
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
558
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
559 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
560 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
561 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
562
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
563 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
564
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
565 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
566 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
567 as a delimiter too.
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
568
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
569 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
570 comment at the start of cc-engine.el for more info."
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
571
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
572 ;; 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
573 ;; 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
574 ;; 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
575 ;; 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
576 ;; 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
577 ;;
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
578 ;; 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
579 ;;
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
580 ;; 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
581 ;; 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
582 ;; 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
583 ;; 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
584 ;; 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
585 ;; 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
586 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
587 ;; The following variables constitute the PDA:
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
588 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
589 ;; 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
590 ;; 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
591 ;; statement boundary, or nil otherwise.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
592 ;; 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
593 ;; while-boundary catch catch-boundary).
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
594 ;; 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
595 ;; '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
596 ;; '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
597 ;; 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
598 ;; 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
599 ;; of error reporting information.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
600 ;; 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
601 ;; 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
602 ;; 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
603 ;; 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
604 ;; (e.g. if).
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
605 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
606 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
607 ;; 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
608 ;;
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
609 ;; Common state:
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
610 ;; "else": Push state, goto state `else'.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
611 ;; "while": Push state, goto state `while'.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
612 ;; "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
613 ;; 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
614 ;; 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
615 ;;
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
616 ;; State `else':
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
617 ;; boundary: Goto state `else-boundary'.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
618 ;; other: Error, pop state, retry token.
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 ;; State `else-boundary':
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
621 ;; "if": Pop state.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
622 ;; boundary: Error, pop state.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
623 ;; other: See common state.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
624 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
625 ;; State `while':
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
626 ;; 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
627 ;; other: Pop state, retry token.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
628 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
629 ;; State `while-boundary':
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
630 ;; "do": Pop state.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
631 ;; 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
632 ;; other: See common state.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
633 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
634 ;; State `catch':
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
635 ;; boundary: Goto state `catch-boundary'.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
636 ;; other: Error, pop state, retry token.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
637 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
638 ;; State `catch-boundary':
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
639 ;; "try": Pop state.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
640 ;; "catch": Goto state `catch'.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
641 ;; boundary: Error, pop state.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
642 ;; other: See common state.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
643 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
644 ;; [*] 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
645 ;; 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
646 ;; 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
647 ;; 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
648 ;; 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
649 ;;
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
650 ;; 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
651 ;; 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
652
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
653 (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
654 (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
655 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
656 (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
657 (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
658 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
659 c-stmt-delim-chars))
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
660 c-in-literal-cache c-maybe-labelp saved
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
661 ;; Current position.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
662 pos
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
663 ;; 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
664 boundary-pos
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
665 ;; 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
666 ;; 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
667 ;; 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
668 ;; the start.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
669 after-labels-pos
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
670 ;; 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
671 ;; 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
672 ;; of the nonlabel part of the statement.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
673 last-label-pos
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
674 ;; 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
675 ;; 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
676 ;; label content has been found (according to
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
677 ;; `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
678 ;; 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
679 ;; 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
680 label-good-pos
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
681 ;; 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
682 ;; See above.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
683 sym
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
684 ;; Current state in the automaton. See above.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
685 state
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
686 ;; Current saved positions. See above.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
687 saved-pos
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
688 ;; Stack of conses (state . saved-pos).
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
689 stack
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
690 ;; Regexp which matches "for", "if", etc.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
691 (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
692 "\\<\\>")) ; Matches nothing.
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
693 ;; Return value.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
694 (ret 'same)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
695 ;; 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
696 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
697
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
698 (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
699 (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
700
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
701 (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
702 (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
703 (/= (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
704 (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
705
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
706 ;; 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
707 ;; 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
708 (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
709 (setq pos (point))
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
710 (c-backward-syntactic-ws)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
711 ;; 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
712 (and (not (c-at-vsemi-p))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
713 (/= (skip-chars-backward "-+!*&~@`#") 0))))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
715 ;; 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
716 ;; 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
717 ;; 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
718 ;; 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
719 (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
720 (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
721 (setq saved (point))
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
722 (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
723 (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
724 (memq (char-before) '(?: nil))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
725 (eq (char-syntax (char-before)) ?\()
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
726 (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
727 (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
728 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
729
7a3ac6c387fe CC Mode 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 ;; 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
731 ;; 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
732 (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
733 (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
734 ;; 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
735 (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
736
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
737 ;; 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
738 ;; 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
739 ;; 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
740 ;; 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
741 (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
742 (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
743 (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
744 ((save-excursion
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
745 (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
746 (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
747 (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
748 (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
749 (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
750 (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
751 (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
752 (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
753 (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
754 (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
755 (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
756 (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
757 (< (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
758 ;; 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
759 (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
760 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
761 (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
762 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
763 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
764 (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
765
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
766 ;; 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
767 ;; 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
768 ((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
769 (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
770 (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
771
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
772 (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
773 (throw 'loop nil))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
774
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
775 ;; The PDA state handling.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
776 ;;
53073
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
777 ;; 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
778 ;; 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
779 ;; 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
780 ;; (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
781 ;; 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
782 ;; 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
783 ;; 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
784 ;; 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
785 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
786 ;; 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
787 ;; "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
788 ;; 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
789 (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
790 ((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
791 (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
792 (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
793 (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
794 (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
795
7a3ac6c387fe CC Mode 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 ((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
797 (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
798 (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
799 ((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
800 (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
801 (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
802
7a3ac6c387fe CC Mode 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 ((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
804 (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
805 ;; 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
806 ;; 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
807 ;; 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
808 ;; 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
809 (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
810 (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
811 (setq state 'while-boundary))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
812 (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
813
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
814 ((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
815 (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
816 (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
817 ((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
818 (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
819 (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
820
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
821 ((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
822 (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
823 (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
824 (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
825 (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
826
7a3ac6c387fe CC Mode 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 ((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
828 (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
829 ((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
830 (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
831 ((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
832 (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
833 ((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
834 (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
835 (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
836
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
837 ;; 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
838 ;; 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
839 (cond ((eq sym 'boundary)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
840 ;; 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
841 ;; 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
842 ;; previous statement.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
843 (if (>= pos start)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
844 (c-bos-push-state)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
845 (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
846 ((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
847 (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
848 (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
849 (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
850 ((eq sym 'while)
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
851 ;; 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
852 ;; 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
853 ;; 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
854 (when (or (not pptok)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
855 (memq (char-after pptok) delims)
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
856 ;; The following kludge is to prevent
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
857 ;; infinite recursion when called from
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
858 ;; 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
859 ;; or the like.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
860 (and (eq (point) start)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
861 (c-vsemi-status-unknown-p))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
862 (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
863 ;; 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
864 ;; 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
865 ;; 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
866 ;; 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
867 (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
868 (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
869 ((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
870 (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
871 (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
872 (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
873
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
874 (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
875 ;; 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
876 ;; 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
877 ;; 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
878 (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
879 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
880 c-maybe-labelp nil))))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
881
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
882 ;; 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
883 ;; 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
884 (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
885 (setq ret 'previous)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
886
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
887 ;; 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
888 ;; BACKWARDS THROUGH THE SOURCE.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
889
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
890 ;; 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
891 ;; c-(backward|forward)-sws.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
892 (c-backward-syntactic-ws)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
893
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
894 (let ((before-sws-pos (point))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
895 ;; 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
896 ;; 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
897 sexp-loop-continue-pos
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
898 ;; 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
899 ;; barriers in this round.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
900 (sexp-loop-end-pos pos))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
901
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
902 ;; 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
903 (while
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
904 (progn
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
905 (unless (c-safe (c-backward-sexp) t)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
906 ;; 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
907 ;; 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
908 ;; 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
909 (throw 'loop nil))
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
910
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
911 ;; 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
912 ;; declaration boundary. But first modify the point
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
913 ;; 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
914 ;; 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
915 (save-excursion
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
916 (when (setq
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
917 boundary-pos
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
918 (cond
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
919 ((if macro-start
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
920 nil
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
921 (save-excursion
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
922 (when (c-beginning-of-macro)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
923 ;; Set continuation position in case
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
924 ;; `c-crosses-statement-barrier-p'
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
925 ;; doesn't detect anything below.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
926 (setq sexp-loop-continue-pos (point)))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
927 ;; 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
928 ;; 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
929 ;; 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
930 ;; 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
931 ;; chars that might be inside the macro.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
932 (c-end-of-macro)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
933 (c-crosses-statement-barrier-p
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
934 (point) sexp-loop-end-pos))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
935
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
936 ((and
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
937 (eq (char-after) ?{)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
938 (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
939 ;; 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
940 ;; alright.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
941 (point))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
942
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
943 ((looking-at "\\s\(")
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
944 ;; Passed some other paren. Only analyze
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
945 ;; the non-sexp chars after it.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
946 (goto-char (1+ (c-down-list-backward
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
947 before-sws-pos)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
948 ;; 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
949 ;; (outside the `save-excursion') if
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
950 ;; `c-crosses-statement-barrier-p' failed.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
951 (c-crosses-statement-barrier-p
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
952 (point) sexp-loop-end-pos))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
953
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
954 (t
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
955 ;; Passed a symbol sexp or line
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
956 ;; continuation. It doesn't matter that
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
957 ;; it's included in the analyzed region.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
958 (if (c-crosses-statement-barrier-p
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
959 (point) sexp-loop-end-pos)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
960 t
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
961 ;; 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
962 ;; have to continue looping.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
963 (if (looking-at "\\\\$")
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
964 (setq sexp-loop-continue-pos (point)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
965 nil))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
966
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
967 (setq pptok ptok
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
968 ptok tok
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
969 tok boundary-pos
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
970 sym 'boundary)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
971 ;; 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
972 (throw 'loop t)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
973
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
974 sexp-loop-continue-pos) ; End of "go back a sexp" loop.
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
975 (goto-char sexp-loop-continue-pos)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
976 (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
977 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
978
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
979 ;; 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
980 (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
981 (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
982 (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
983 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
984 (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
985
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
986 ;; Handle labels.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
987 (unless (eq ignore-labels t)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
988 (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
989 ;; `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
990 ;; 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
991 ;; (including a case label) or something like C++'s "public:"?
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
992 (if (or (not (looking-at c-nonlabel-token-key)) ; proper 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
993 (save-excursion ; e.g. "case '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
994 (and (c-safe (c-backward-sexp) t)
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
995 (looking-at "\\<case\\>")))) ; FIXME!!! this is
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
996 ; wrong for AWK. 2006/1/14.
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
997 (progn
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
998 (if after-labels-pos ; Have we already encountered a 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
999 (if (not last-label-pos)
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
1000 (setq last-label-pos (or tok start)))
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
1001 (setq after-labels-pos (or tok start)))
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
1002 (setq c-maybe-labelp t
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
1003 label-good-pos 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
1004 (setq c-maybe-labelp nil))) ; bogus "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
1005
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
1006 (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
1007 ; 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
1008 (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
1009 ;; 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
1010 ;; 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
1011 ;; one.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1012 (setq label-good-pos (or tok start))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1013
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1014 ;; 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
1015 (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
1016 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
1017 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
1018 tok (point)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1019 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
1020
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
1021 ;; 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
1022 (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
1023 (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
1024 (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
1025 (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
1026 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
1027
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
1028 (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
1029 (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
1030 ;; 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
1031 ;; 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
1032 (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
1033 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
1034 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
1035 (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
1036 ((= 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
1037
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1038 (when (and (not ignore-labels)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1039 (eq c-maybe-labelp t)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1040 (not (eq ret 'beginning))
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1041 after-labels-pos
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1042 (or (not label-good-pos)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1043 (<= label-good-pos pos)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1044 (progn
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1045 (goto-char (if (and last-label-pos
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1046 (< last-label-pos start))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1047 last-label-pos
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1048 pos))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1049 (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
1050 ;; 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
1051 ;; 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
1052 (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
1053 (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
1054 (setq ret 'label)
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1055 (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
1056 ;; 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
1057 (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
1058
7a3ac6c387fe CC Mode 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 ;; 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
1060 (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
1061 (while (progn
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1062 (c-backward-syntactic-ws)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1063 ;; protect AWK post-inc/decrement operators, etc.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1064 (and (not (c-at-vsemi-p (point)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1065 (/= (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
1066 (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
1067 (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
1068 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
1069
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
1070 (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
1071 "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
1072 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
1073 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
1074 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
1075
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
1076 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
1077 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
1078 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
1079
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1080 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
1081 regarded as having a \"virtual semicolon\" immediately after the last token on
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1082 the line. If this virtual semicolon is _at_ from, the function recognises it.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1083
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1084 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
1085 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
1086 (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
1087 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
1088 (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
1089 (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
1090 (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
1091 (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
1092 (< (point) to))
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1093 (cond
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1094 ((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
1095 (goto-char (cdr lit-range)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1096 ((eq (char-after) ?:)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1097 (forward-char)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1098 (if (and (eq (char-after) ?:)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1099 (< (point) to))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1100 ;; Ignore scope operators.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1101 (forward-char)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1102 (setq c-maybe-labelp (1- (point)))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1103 ((eq (char-after) ??)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1104 ;; 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
1105 ;; looking for more : and ?.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1106 (setq c-maybe-labelp nil
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1107 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
1108 ((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
1109 (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
1110 (backward-char))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1111 (skip-chars-backward " \t" from)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1112 (if (c-at-vsemi-p)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1113 (throw 'done (point))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1114 (forward-line)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1115 (t (throw 'done (point)))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1116 ;; 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
1117 (c-backward-syntactic-ws from)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1118 (if (and (< (point) to)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1119 (c-at-vsemi-p))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1120 (point)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1121 nil)))))
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 (defun c-at-statement-start-p ()
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1124 "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
1125 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
1126
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1127 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
1128 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
1129 bodies is also considered a \"statement\".
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1130
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1131 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
1132 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
1133
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1134 (save-excursion
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1135 (let ((end (point))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1136 c-maybe-labelp)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1137 (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
1138 (or (bobp)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1139 (eq (char-before) ?})
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1140 (and (eq (char-before) ?{)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1141 (not (and c-special-brace-lists
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1142 (progn (backward-char)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1143 (c-looking-at-special-brace-list)))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1144 (c-crosses-statement-barrier-p (point) end)))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1145
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1146 (defun c-at-expression-start-p ()
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1147 "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
1148 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
1149
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1150 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
1151 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
1152 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
1153 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
1154 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
1155
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1156 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
1157 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
1158
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1159 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
1160 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
1161
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1162 (save-excursion
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1163 (let ((end (point))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1164 (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
1165 c-maybe-labelp)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1166 (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
1167 (or (bobp)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1168 (memq (char-before) '(?{ ?}))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1169 (save-excursion (backward-char)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1170 (looking-at "\\s("))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1171 (c-crosses-statement-barrier-p (point) end)))))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1172
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1173
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1174 ;; 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
1175 ;; implementations of `forward-comment'.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1176
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1177 ;; 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
1178 ;; 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
1179 ;; 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
1180 ;; 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
1181 ;; 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
1182 ;; escapes in string literals correctly.)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1183
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1184 (defun c-forward-single-comment ()
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1185 "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
1186 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
1187 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
1188 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
1189 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
1190 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
1191 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
1192
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1193 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
1194
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1195 (let ((start (point)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1196 (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
1197 (goto-char (match-end 0)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1198
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1199 (when (forward-comment 1)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1200 (if (eobp)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1201 ;; 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
1202 ;; forwards at eob.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1203 nil
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1204
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1205 ;; 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
1206 ;; 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
1207 ;; behavior (which also is symmetric).
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1208 (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
1209 (condition-case nil (forward-char 1)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1210
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1211 t))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1212
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1213 (defsubst c-forward-comments ()
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1214 "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
1215 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
1216 treated as whitespace.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1217
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1218 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
1219 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
1220
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1221 (while (or
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1222 ;; 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
1223 ;; 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
1224 ;; eob.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1225 (and (forward-comment 5)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1226 ;; 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
1227 ;; forwards at eob.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1228 (not (eobp)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1229
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1230 (when (looking-at "\\\\[\n\r]")
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1231 (forward-char 2)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1232 t))))
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 (defun c-backward-single-comment ()
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1235 "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
1236 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
1237 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
1238 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
1239 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
1240 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
1241 move over a line comment.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1242
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1243 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
1244
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1245 (let ((start (point)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1246 ;; 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
1247 ;; 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
1248 ;; 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
1249 ;; 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
1250 (while (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1251 (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
1252 (and (looking-at "[\n\r]")
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1253 (eq (char-before) ?\\)))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1254 (backward-char))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1255
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1256 (if (bobp)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1257 ;; 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
1258 ;; backwards at bob.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1259 nil
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1260
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1261 ;; 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
1262 ;; 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
1263 ;; 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
1264 ;; same line.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1265 (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
1266
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1267 (if (if (forward-comment -1)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1268 (if (eolp)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1269 ;; 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
1270 ;; 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
1271 ;; 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
1272 (forward-comment -1)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1273 t))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1274
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1275 ;; 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
1276 ;; block comment that lacks an opener.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1277 (if (looking-at "\\*/")
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1278 (progn (forward-char 2) nil)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1279 t)))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1280
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1281 (defsubst c-backward-comments ()
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1282 "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
1283 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
1284 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
1285 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
1286 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
1287 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
1288 preprocessor directives.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1289
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1290 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
1291 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
1292
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1293 (let ((start (point)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1294 (while (and
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1295 ;; `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
1296 ;; 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
1297 (not (bobp))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1298
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1299 (if (forward-comment -1)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1300 (if (looking-at "\\*/")
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1301 ;; 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
1302 ;; 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
1303 (progn (forward-char 2) nil)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1304 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 ;; 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
1307 ;; 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
1308 ;; 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
1309 (when (and (looking-at "[\n\r]")
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1310 (eq (char-before) ?\\)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1311 (< (point) start))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1312 (backward-char)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1313 t))))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1314
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1315
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1316 ;; Tools for skipping over syntactic whitespace.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1317
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1318 ;; 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
1319 ;; 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
1320 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1321 ;; 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
1322 ;; 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
1323 ;; `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
1324 ;; 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
1325 ;; 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
1326 ;; 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
1327 ;; 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
1328 ;; 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
1329 ;; `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
1330 ;; `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
1331 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1332 ;; 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
1333 ;; 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
1334 ;; 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
1335 ;; 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
1336 ;; 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
1337 ;; instance).
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1338 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1339 ;; 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
1340 ;; 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
1341 ;; 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
1342 ;; 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
1343 ;; 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
1344 ;; 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
1345 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1346 ;; 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
1347 ;; "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
1348 ;; `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
1349 ;; `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
1350 ;; 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
1351 ;; 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
1352 ;; 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
1353 ;; one character long.
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 ;; 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
1356 ;; 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
1357 ;; 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
1358 ;; 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
1359 ;; 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
1360 ;; the gap.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1361 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1362 ;; 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
1363 ;; 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
1364 ;; 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
1365 ;; 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
1366 ;; 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
1367 ;; `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
1368 ;; 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
1369 ;; within it.
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 ;; 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
1372 ;; 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
1373 ;; 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
1374 ;; 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
1375 ;; 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
1376 ;; not a significant factor there anyway.
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 ; (defface c-debug-is-sws-face
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1379 ; '((t (:background "GreenYellow")))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1380 ; "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
1381 ; (defface c-debug-in-sws-face
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1382 ; '((t (:underline t)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1383 ; "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
1384
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1385 ; (defun c-debug-put-sws-faces ()
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1386 ; ;; 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
1387 ; ;; properties in the buffer.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1388 ; (interactive)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1389 ; (save-excursion
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1390 ; (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
1391 ; (goto-char (point-min))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1392 ; (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
1393 ; (point)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1394 ; (while (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1395 ; (goto-char (next-single-property-change
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1396 ; (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
1397 ; (if in-face
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1398 ; (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1399 ; (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
1400 ; (setq in-face nil))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1401 ; (setq in-face (point)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1402 ; (not (eobp))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1403 ; (goto-char (point-min))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1404 ; (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
1405 ; (point)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1406 ; (while (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1407 ; (goto-char (next-single-property-change
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1408 ; (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
1409 ; (if in-face
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1410 ; (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1411 ; (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
1412 ; (setq in-face nil))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1413 ; (setq in-face (point)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1414 ; (not (eobp)))))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1415
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1416 (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
1417 ;;`(message ,@args)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1418 )
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1419
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1420 (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
1421 ;; 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
1422 `(let ((beg ,beg) (end ,end))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1423 (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
1424 ,@(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
1425 `((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
1426
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1427 (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
1428 ;; 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
1429 `(let ((beg ,beg) (end ,end))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1430 (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
1431 ,@(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
1432 `((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
1433
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1434 (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
1435 ;; 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
1436 `(let ((beg ,beg) (end ,end))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1437 (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
1438 ,@(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
1439 `((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
1440
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1441 (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
1442 ;; 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
1443 `(let ((beg ,beg) (end ,end))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1444 (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
1445 ,@(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
1446 `((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
1447
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1448 (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
1449 ;; 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
1450 `(let ((beg ,beg) (end ,end))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1451 (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
1452 ,@(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
1453 `((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
1454 (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
1455
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1456 (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
1457 ;; 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
1458 ;; `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
1459 ;; `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
1460 ;; properties right after they're added.
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1461 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1462 ;; 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
1463
20914
8f189ffad604 (c-forward-syntactic-ws, c-backward-syntactic-ws):
Richard M. Stallman <rms@gnu.org>
parents: 20142
diff changeset
1464 (save-excursion
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1465 ;; 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
1466 ;; 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
1467 ;; 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
1468 ;; 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
1469 ;; "//" 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
1470 ;; 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
1471 ;; 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
1472 (goto-char end)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1473 (skip-chars-forward " \t\f\v")
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1474 (when (and (eolp) (not (eobp)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1475 (setq end (1+ (point)))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1476
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1477 (when (and (= beg end)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1478 (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
1479 (> beg (point-min))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1480 (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
1481 ;; 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
1482 ;; 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
1483 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1484 ;; #define foo
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1485 ;; \
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1486 ;; bar
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1487 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1488 ;; 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
1489 ;; 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
1490 ;; 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
1491 ;; 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
1492 (setq beg (1- beg)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1493
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1494 (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
1495 (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
1496
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1497 (defun c-forward-sws ()
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1498 ;; 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
1499 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1500 ;; 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
1501
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1502 (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
1503 ;; 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
1504 (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
1505 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
1506 ;; `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
1507 ;; 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
1508 ;; 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
1509 ;; 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
1510 ;; 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
1511 ;; more common.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1512 safe-start)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1513
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1514 ;; 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
1515 ;; 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
1516 ;; 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
1517 (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
1518 (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
1519
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1520 (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
1521 (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
1522 'c-is-sws t))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1523 ;; 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
1524 ;; 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
1525 ;; (`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
1526 ;; step forward.)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1527 (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
1528 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
1529 ;; 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
1530 ;; 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
1531 ;; high as possible.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1532 (setq rung-pos (point)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1533
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1534 (while
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1535 (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1536 (while
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1537 (when (and rung-is-marked
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1538 (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
1539
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1540 ;; 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
1541 ;; 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
1542 (goto-char (next-single-property-change
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1543 (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
1544 (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
1545 ;; 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
1546 ;; `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
1547 (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
1548 (goto-char (previous-single-property-change
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1549 (point) 'c-is-sws)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1550 (backward-char))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1551
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1552 (c-debug-sws-msg
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1553 "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
1554 rung-pos (point) (point-max))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1555
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1556 (setq rung-pos (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1557 (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
1558 (not (eobp))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1559
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1560 ;; 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
1561 ;; 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
1562 ;; 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
1563 ;; 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
1564 ;; use the cache again.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1565 (c-debug-sws-msg
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1566 "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
1567 (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
1568 (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
1569 ;; 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
1570 ;; 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
1571 ;; 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
1572 (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
1573 (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
1574 (1+ (point)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1575 (c-put-in-sws rung-pos
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1576 (setq rung-pos (point)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1577 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
1578
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1579 (setq simple-ws-end (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1580 (c-forward-comments)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1581
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1582 (cond
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1583 ((/= (point) simple-ws-end)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1584 ;; 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
1585 ;; is narrowed.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1586 (not (eobp)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1587
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1588 ((save-excursion
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1589 (and c-opt-cpp-prefix
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1590 (looking-at c-opt-cpp-start)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1591 (progn (skip-chars-backward " \t")
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1592 (bolp))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1593 (or (bobp)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1594 (progn (backward-char)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1595 (not (eq (char-before) ?\\))))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1596 ;; Skip a preprocessor directive.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1597 (end-of-line)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1598 (while (and (eq (char-before) ?\\)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1599 (= (forward-line 1) 0))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1600 (end-of-line))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1601 (forward-line 1)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1602 (setq safe-start t)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1603 ;; 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
1604 (not (eobp)))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1605
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1606 ;; 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
1607 ;; can be cached.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1608 (setq next-rung-pos (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1609 (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
1610 (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
1611
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1612 (if (or
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1613 ;; 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
1614 ;; 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
1615 ;; position.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1616 (and safe-start
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1617 (or rung-is-marked
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1618 (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
1619
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1620 ;; 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
1621 ;; 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
1622 ;; 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
1623 ;; next step.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1624 (and (setq next-rung-is-marked
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1625 (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
1626 'c-is-sws t))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1627 safe-start))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1628
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1629 (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1630 (c-debug-sws-msg
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1631 "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
1632 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
1633 (point-max))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1634
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1635 ;; 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
1636 ;; 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
1637 ;; anyway.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1638 (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
1639 (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
1640 (c-put-is-sws rung-pos
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1641 (1+ simple-ws-end))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1642 (setq rung-is-marked t))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1643 (c-put-in-sws rung-pos
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1644 (setq rung-pos (point)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1645 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
1646 (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
1647 ;; 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
1648 ;; 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
1649 ;; 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
1650 (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
1651 (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
1652 rung-end-pos))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1653
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1654 (c-debug-sws-msg
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1655 "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
1656 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
1657 (point-max))
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 ;; 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
1660 ;; 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
1661 ;; 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
1662 ;; cpp directive now.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1663 (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
1664 (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
1665 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
1666 (setq rung-pos next-rung-pos))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1667 (setq safe-start t)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1668
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1669 ;; 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
1670 ;; 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
1671 ;; comment or macro).
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1672 (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
1673 (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
1674 (c-debug-sws-msg
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1675 "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
1676 last-put-in-sws-pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1677 (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
1678 (1+ last-put-in-sws-pos)))
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
1679 (t
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1680 ;; 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
1681 ;; 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
1682 ;; 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
1683 ;; necessary to clear both properties.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1684 (c-debug-sws-msg
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1685 "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
1686 (1- last-put-in-sws-pos))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1687 (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
1688 last-put-in-sws-pos))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1689 )))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1690
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1691 (defun c-backward-sws ()
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1692 ;; 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
1693 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1694 ;; 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
1695
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1696 (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
1697 ;; part of the simple ws region.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1698 (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
1699 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
1700
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1701 ;; 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
1702 ;; 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
1703 ;; 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
1704 ;; 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
1705 ;; skip over them.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1706 (skip-chars-backward " \t\f")
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1707 (when (and (not (bobp))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1708 (save-excursion
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1709 (backward-char)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1710 (looking-at c-syntactic-ws-end)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1711
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1712 ;; 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
1713 ;; 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
1714 ;; changed recently.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1715 (setq simple-ws-beg (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1716 (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
1717 (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
1718 (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
1719 'c-is-sws t))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1720 ;; `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
1721 ;; 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
1722 ;; 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
1723 ;; 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
1724 (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
1725 (goto-char simple-ws-beg))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1726
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1727 (while
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1728 (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1729 (while
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1730 (when (and rung-is-marked
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1731 (not (bobp))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1732 (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
1733
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1734 ;; 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
1735 ;; 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
1736 (goto-char (previous-single-property-change
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1737 (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
1738 (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
1739 ;; 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
1740 ;; `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
1741 (goto-char (next-single-property-change
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1742 (point) 'c-is-sws)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1743
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1744 (c-debug-sws-msg
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1745 "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
1746 (point) rung-pos (point-min))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1747
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1748 (setq rung-pos (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1749 (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
1750 (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1751 (setq simple-ws-beg (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1752 (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
1753 0)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1754 (setq rung-is-marked
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1755 (text-property-any (point) rung-pos
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1756 'c-is-sws t)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1757 t
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1758 (goto-char simple-ws-beg)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1759 nil))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1760
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1761 ;; 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
1762 ;; 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
1763 ;; 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
1764 ;; 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
1765 ;; use the cache again.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1766 (c-debug-sws-msg
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1767 "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
1768 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
1769 (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
1770 ;; 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
1771 ;; 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
1772 ;; 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
1773 (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
1774 (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
1775 rung-pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1776 (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
1777 (1- rung-pos))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1778 (setq rung-pos rung-is-marked
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1779 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
1780
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1781 (c-backward-comments)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1782 (setq cmt-skip-pos (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1783
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1784 (cond
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1785 ((and c-opt-cpp-prefix
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1786 (/= cmt-skip-pos simple-ws-beg)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1787 (c-beginning-of-macro))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1788 ;; 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
1789 (let ((cpp-beg (point)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1790
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1791 ;; 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
1792 ;; 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
1793 ;; started inside the cpp directive.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1794 (goto-char simple-ws-beg)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1795 (beginning-of-line)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1796 (while (and (> (point) cmt-skip-pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1797 (progn (backward-char)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1798 (eq (char-before) ?\\)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1799 (beginning-of-line))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1800
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1801 (if (< (point) cmt-skip-pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1802 ;; 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
1803 ;; 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
1804 ;; 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
1805 (progn (goto-char cmt-skip-pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1806 nil)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1807
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1808 ;; 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
1809 ;; 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
1810 ;; 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
1811 ;; 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
1812 ;; 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
1813 ;; same side of those comments.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1814 (goto-char simple-ws-beg)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1815 (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
1816 (if (eq (char-before) ?\\)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1817 (forward-char))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1818 (forward-line 1)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1819 (if (< (point) simple-ws-beg)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1820 ;; 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
1821 ;; over.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1822 (setq simple-ws-beg (point)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1823
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1824 (goto-char cpp-beg)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1825 t)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1826
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1827 ((/= (save-excursion
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1828 (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
1829 (setq next-rung-pos (point)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1830 simple-ws-beg)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1831 ;; 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
1832 ;; 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
1833 ;; 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
1834 ;; 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
1835 ;; at the end of it.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1836 (goto-char next-rung-pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1837 t)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1838
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1839 ;; 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
1840 ;; can be cached.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1841 (setq next-rung-pos (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1842 (skip-chars-backward " \t\f\v")
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1843
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1844 (if (or
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1845 ;; 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
1846 ;; completely uncached position.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1847 rung-is-marked
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1848 (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
1849
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1850 ;; 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
1851 (save-excursion
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1852 (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
1853 (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
1854 'c-is-sws t)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1855
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1856 (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1857 (c-debug-sws-msg
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1858 "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
1859 (point) (1+ next-rung-pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1860 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
1861 (point-min))
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 ;; 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
1864 ;; 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
1865 ;; anyway.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1866 (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
1867 (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
1868 (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
1869 (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
1870 ;; 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
1871 ;; 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
1872 ;; 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
1873 (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
1874 (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
1875 rung-end-pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1876 (setq rung-is-marked t)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1877 (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
1878 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
1879 rung-pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1880 (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
1881 (1+ next-rung-pos)))
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 (c-debug-sws-msg
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1884 "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
1885 (point) (1+ next-rung-pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1886 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
1887 (point-min))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1888 (setq rung-pos next-rung-pos
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1889 simple-ws-beg (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1890 ))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1891
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1892 ;; 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
1893 ;; 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
1894 ;; comment or macro).
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1895 (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
1896 (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
1897 (c-debug-sws-msg
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1898 "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
1899 (1- last-put-in-sws-pos))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1900 (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
1901 last-put-in-sws-pos))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1902 ((> (point-min) 1)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1903 ;; 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
1904 ;; 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
1905 ;; `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
1906 ;; to clear both properties.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1907 (c-debug-sws-msg
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1908 "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
1909 last-put-in-sws-pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1910 (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
1911 (1+ last-put-in-sws-pos)))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1912 )))
20914
8f189ffad604 (c-forward-syntactic-ws, c-backward-syntactic-ws):
Richard M. Stallman <rms@gnu.org>
parents: 20142
diff changeset
1913
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1914
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1915 ;; 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
1916
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
1917 (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
1918 (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
1919 ;; The state cache used by `c-parse-state' to cut down the amount 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
1920 ;; searching. It's the result from some earlier `c-parse-state' call.
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1921 ;;
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
1922 ;; 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
1923 ;; `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
1924 ;; 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
1925 ;; 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
1926 ;; 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
1927 ;; 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
1928
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1929 (defvar c-state-cache-start 1)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1930 (make-variable-buffer-local 'c-state-cache-start)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1931 ;; This is (point-min) when `c-state-cache' was calculated, since a
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1932 ;; change of narrowing is likely to affect the parens that are visible
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1933 ;; before the point.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1934
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1935 (defvar c-state-cache-good-pos 1)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1936 (make-variable-buffer-local 'c-state-cache-good-pos)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1937 ;; This is a position where `c-state-cache' is known to be correct.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1938 ;; It's a position inside one of the recorded unclosed parens or the
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1939 ;; top level, but not further nested inside any literal or subparen
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1940 ;; that is closed before the last recorded position.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1941 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1942 ;; 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
1943 ;; 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
1944 ;; 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
1945 ;; 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
1946 ;; `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
1947 ;; with refontification of the current line.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1948
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1949 (defsubst c-invalidate-state-cache (pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1950 ;; Invalidate all info on `c-state-cache' that applies to the buffer
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1951 ;; at POS or higher. This is much like `c-whack-state-after', but
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1952 ;; it never changes a paren pair element into an open paren element.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1953 ;; Doing that would mean that the new open paren wouldn't have the
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1954 ;; required preceding paren pair element.
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1955 (while (and (or c-state-cache
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1956 (when (< pos c-state-cache-good-pos)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1957 (setq c-state-cache-good-pos 1)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1958 nil))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1959 (let ((elem (car c-state-cache)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1960 (if (consp elem)
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1961 (or (< pos (cdr elem))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1962 (when (< pos c-state-cache-good-pos)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1963 (setq c-state-cache-good-pos (cdr elem))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1964 nil))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1965 (or (<= pos elem)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1966 (when (< pos c-state-cache-good-pos)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1967 (setq c-state-cache-good-pos (1+ elem))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1968 nil)))))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1969 (setq c-state-cache (cdr c-state-cache))))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1970
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1971 (defun c-get-fallback-start-pos (here)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1972 ;; Return the start position for building `c-state-cache' from
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1973 ;; scratch.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1974 (save-excursion
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1975 ;; 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
1976 ;; 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
1977 (goto-char here)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1978 (let ((cnt 2))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1979 (while (not (or (bobp) (zerop cnt)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1980 (c-beginning-of-defun-1)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1981 (if (eq (char-after) ?\{)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1982 (setq cnt (1- cnt)))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1983 (point)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1984
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1985 (defun c-parse-state ()
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1986 ;; Find and record all noteworthy parens between some good 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
1987 ;; earlier in the file and point. That good point is at least 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
1988 ;; beginning of the top-level construct we are in, 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
1989 ;; of the preceding top-level construct if we aren't in one.
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1990 ;;
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
1991 ;; The returned value is a list of the noteworthy parens 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
1992 ;; last one first. If an element in the list is an integer, 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
1993 ;; the position of an open paren which has not been closed before
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1994 ;; the point. If an element is a cons, it gives the position of a
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
1995 ;; closed brace paren pair; the car is the start paren position 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
1996 ;; the cdr is the position following the closing paren. Only the
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1997 ;; last closed brace paren pair before each open paren and before
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1998 ;; the point is recorded, and thus the state never contains two cons
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
1999 ;; elements in succession.
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2000 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2001 ;; 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
2002 ;; 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
2003 ;; 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
2004 ;;
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2005 ;; BUG: This function doesn't cope entirely well with unbalanced
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2006 ;; parens in macros. E.g. in the following case the brace before
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2007 ;; the macro isn't balanced with the one after it:
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2008 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2009 ;; {
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2010 ;; #define X {
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2011 ;; }
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2012 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2013 ;; 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
2014
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
2015 (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
2016 (let* ((here (point))
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2017 (here-bol (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
2018 (c-macro-start (c-query-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
2019 (in-macro-start (or c-macro-start (point)))
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2020 old-state last-pos brace-pair-open brace-pair-close
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2021 pos save-pos)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2022 (c-invalidate-state-cache here)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2023
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2024 ;; If the minimum position has changed due to narrowing then we
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2025 ;; have to fix the tail of `c-state-cache' accordingly.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2026 (unless (= c-state-cache-start (point-min))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2027 (if (> (point-min) c-state-cache-start)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2028 ;; If point-min has moved forward then we just need to cut
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2029 ;; off a bit of the tail.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2030 (let ((ptr (cons nil c-state-cache)) elem)
52605
50c6e94a91cb (c-parse-state): Fixed bug that could cause errors when the state
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2031 (while (and (setq elem (car-safe (cdr ptr)))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2032 (>= (if (consp elem) (car elem) elem)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2033 (point-min)))
52605
50c6e94a91cb (c-parse-state): Fixed bug that could cause errors when the state
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
2034 (setq ptr (cdr ptr)))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2035 (when (consp ptr)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2036 (if (eq (cdr ptr) c-state-cache)
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2037 (setq c-state-cache nil
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2038 c-state-cache-good-pos 1)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2039 (setcdr ptr nil))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2040 ;; If point-min has moved backward then we drop the state
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2041 ;; completely. It's possible to do a better job here and
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2042 ;; recalculate the top only.
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2043 (setq c-state-cache nil
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2044 c-state-cache-good-pos 1))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2045 (setq c-state-cache-start (point-min)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2046
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
2047 ;; Get the latest position we know are directly inside 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
2048 ;; closest containing paren of 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
2049 (setq last-pos (and 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
2050 (if (consp (car 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
2051 (cdr (car 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
2052 (1+ (car c-state-cache)))))
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2053 (if (or (not last-pos)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2054 (< last-pos c-state-cache-good-pos))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2055 (setq last-pos c-state-cache-good-pos)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2056 ;; Take the opportunity to move the cached good position
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2057 ;; further down.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2058 (if (< last-pos here-bol)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2059 (setq c-state-cache-good-pos last-pos)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2060
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2061 ;; Check if `last-pos' is in a macro. If it is, and we're not
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2062 ;; in the same macro, we must discard everything on
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2063 ;; `c-state-cache' that is inside the macro before using it.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2064 (save-excursion
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2065 (goto-char last-pos)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2066 (when (and (c-beginning-of-macro)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2067 (/= (point) in-macro-start))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2068 (c-invalidate-state-cache (point))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2069 ;; Set `last-pos' again just like above except that there's
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2070 ;; no use looking at `c-state-cache-good-pos' here.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2071 (setq last-pos (if c-state-cache
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2072 (if (consp (car c-state-cache))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2073 (cdr (car c-state-cache))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2074 (1+ (car c-state-cache)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2075 1))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2076
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2077 ;; If we've moved very far from the last cached position then
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2078 ;; it's probably better to redo it from scratch, otherwise we
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2079 ;; might spend a lot of time searching from `last-pos' down to
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2080 ;; here.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2081 (when (< last-pos (- here 20000))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2082 ;; First get the fallback start position. If it turns out
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2083 ;; that it's so far back that the cached state is closer then
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2084 ;; we'll keep it afterall.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2085 (setq pos (c-get-fallback-start-pos here))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2086 (if (<= pos last-pos)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2087 (setq pos nil)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2088 (setq last-pos nil
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2089 c-state-cache nil
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2090 c-state-cache-good-pos 1)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2091
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2092 ;; Find the start position for the forward search. (Can't
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2093 ;; search in the backward direction since the point might be in
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2094 ;; some kind of literal.)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2095
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2096 (unless pos
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2097 (setq old-state c-state-cache)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2098
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2099 ;; There's a cached state with a containing paren. Pop off
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2100 ;; the stale containing sexps from it by going forward out of
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2101 ;; parens as far as possible.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2102 (narrow-to-region (point-min) here)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2103 (let (placeholder pair-beg)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2104 (while (and c-state-cache
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2105 (setq placeholder
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2106 (c-up-list-forward last-pos)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2107 (setq last-pos placeholder)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2108 (if (consp (car c-state-cache))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2109 (setq pair-beg (car-safe (cdr c-state-cache))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2110 c-state-cache (cdr-safe (cdr c-state-cache)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2111 (setq pair-beg (car c-state-cache)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2112 c-state-cache (cdr c-state-cache))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2113
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2114 (when (and pair-beg (eq (char-after pair-beg) ?{))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2115 ;; The last paren pair we moved out from was a brace
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2116 ;; pair. Modify the state to record this as a closed
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2117 ;; pair now.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2118 (if (consp (car-safe c-state-cache))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2119 (setq c-state-cache (cdr c-state-cache)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2120 (setq c-state-cache (cons (cons pair-beg last-pos)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2121 c-state-cache))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2122
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2123 ;; Check if the preceding balanced paren is within a
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2124 ;; macro; it should be ignored if we're outside the
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2125 ;; macro. There's no need to check any further upwards;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2126 ;; if the macro contains an unbalanced opening paren then
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2127 ;; we're smoked anyway.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2128 (when (and (<= (point) in-macro-start)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2129 (consp (car c-state-cache)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2130 (save-excursion
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2131 (goto-char (car (car c-state-cache)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2132 (when (c-beginning-of-macro)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2133 (setq here (point)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2134 c-state-cache (cdr c-state-cache)))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2135
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2136 (unless (eq c-state-cache old-state)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2137 ;; Have to adjust the cached good position if state has been
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2138 ;; popped off.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2139 (setq c-state-cache-good-pos
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2140 (if c-state-cache
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2141 (if (consp (car c-state-cache))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2142 (cdr (car c-state-cache))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2143 (1+ (car c-state-cache)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2144 1)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2145 old-state c-state-cache))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2146
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2147 (when c-state-cache
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2148 (setq pos last-pos)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2149
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2150 ;; Get the fallback start position.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2151 (unless pos
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2152 (setq pos (c-get-fallback-start-pos here)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2153 c-state-cache nil
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2154 c-state-cache-good-pos 1))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2155
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
2156 (narrow-to-region (point-min) here)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2157
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
2158 (while pos
50273
ea06392567c0 (c-parse-state): Added kludge to avoid an infinite loop when Emacs'
Martin Stjernholm <mast@lysator.liu.se>
parents: 47939
diff changeset
2159 (setq save-pos pos
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2160 brace-pair-open nil)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2161
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2162 ;; Find the balanced brace pairs. This loop is hot, so it
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2163 ;; does ugly tricks to go faster.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2164 (c-safe
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2165 (let (set-good-pos set-brace-pair)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2166 (while t
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2167 (setq last-pos nil
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2168 last-pos (scan-lists pos 1 -1)) ; Might signal.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2169 (setq pos (scan-lists last-pos 1 1) ; Might signal.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2170 set-good-pos (< pos here-bol)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2171 set-brace-pair (eq (char-before last-pos) ?{))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2172
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2173 ;; Update the cached good position and record the brace
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2174 ;; pair, whichever is applicable for the paren we've
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2175 ;; just jumped over. But first check that it isn't
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2176 ;; inside a macro and the point isn't inside the same
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2177 ;; one.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2178 (when (and (or set-good-pos set-brace-pair)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2179 (or (>= pos in-macro-start)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2180 (save-excursion
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2181 (goto-char pos)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2182 (not (c-beginning-of-macro)))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2183 (if set-good-pos
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2184 (setq c-state-cache-good-pos pos))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2185 (if set-brace-pair
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2186 (setq brace-pair-open last-pos
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2187 brace-pair-close pos))))))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2188
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
2189 ;; Record the last brace pair.
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2190 (when brace-pair-open
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2191 (let ((head (car-safe c-state-cache)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2192 (if (consp head)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2193 (progn
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2194 (setcar head (1- brace-pair-open))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2195 (setcdr head brace-pair-close))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2196 (setq c-state-cache (cons (cons (1- brace-pair-open)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2197 brace-pair-close)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2198 c-state-cache)))))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2199
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
2200 (if last-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
2201 ;; Prepare to loop, but record the open paren only if it's
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2202 ;; outside a macro or within the same macro as point, and
56646
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2203 ;; if it is a legitimate open paren and not some character
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2204 ;; that got an open paren syntax-table property.
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
2205 (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
2206 (setq pos last-pos)
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2207 (when (and (or (>= last-pos in-macro-start)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2208 (save-excursion
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2209 (goto-char last-pos)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2210 (not (c-beginning-of-macro))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2211 ;; Check for known types of parens that we
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2212 ;; want to record. The syntax table is not to
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2213 ;; be trusted here since the caller might be
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2214 ;; using e.g. `c++-template-syntax-table'.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2215 (memq (char-before last-pos) '(?{ ?\( ?\[)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2216 (if (< last-pos here-bol)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2217 (setq c-state-cache-good-pos last-pos))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2218 (setq c-state-cache (cons (1- last-pos) c-state-cache))))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2219
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
2220 (if (setq last-pos (c-up-list-forward 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
2221 ;; Found a close paren without a corresponding opening
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
2222 ;; one. Maybe we didn't go back far enough, so try 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
2223 ;; scan backward for the start paren and then start over.
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
2224 (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
2225 (setq pos (c-up-list-backward pos)
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2226 c-state-cache nil
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2227 c-state-cache-good-pos c-state-cache-start)
50273
ea06392567c0 (c-parse-state): Added kludge to avoid an infinite loop when Emacs'
Martin Stjernholm <mast@lysator.liu.se>
parents: 47939
diff changeset
2228 (when (or (not pos)
ea06392567c0 (c-parse-state): Added kludge to avoid an infinite loop when Emacs'
Martin Stjernholm <mast@lysator.liu.se>
parents: 47939
diff changeset
2229 ;; Emacs (up to at least 21.2) can get confused by
ea06392567c0 (c-parse-state): Added kludge to avoid an infinite loop when Emacs'
Martin Stjernholm <mast@lysator.liu.se>
parents: 47939
diff changeset
2230 ;; open parens in column zero inside comments: The
ea06392567c0 (c-parse-state): Added kludge to avoid an infinite loop when Emacs'
Martin Stjernholm <mast@lysator.liu.se>
parents: 47939
diff changeset
2231 ;; sexp functions can then misbehave and bring us
ea06392567c0 (c-parse-state): Added kludge to avoid an infinite loop when Emacs'
Martin Stjernholm <mast@lysator.liu.se>
parents: 47939
diff changeset
2232 ;; back to the same point again. Check this so that
ea06392567c0 (c-parse-state): Added kludge to avoid an infinite loop when Emacs'
Martin Stjernholm <mast@lysator.liu.se>
parents: 47939
diff changeset
2233 ;; we don't get an infinite loop.
ea06392567c0 (c-parse-state): Added kludge to avoid an infinite loop when Emacs'
Martin Stjernholm <mast@lysator.liu.se>
parents: 47939
diff changeset
2234 (>= pos save-pos))
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
2235 (setq pos last-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
2236 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
2237 (format "Unbalanced close paren at 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
2238 (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
2239 (c-point 'bol last-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
2240 (setq pos nil))))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2241
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2242 ;;(message "c-parse-state: %S end: %S" c-state-cache c-state-cache-good-pos)
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
2243 c-state-cache)))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2244
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
2245 ;; Debug tool to catch cache inconsistencies.
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
2246 (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
2247 (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
2248 (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
2249 (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
2250 (defun 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
2251 (let ((res1 (c-real-parse-state)) res2)
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2252 (let ((c-state-cache nil)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2253 (c-state-cache-start 1)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2254 (c-state-cache-good-pos 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
2255 (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
2256 (unless (equal res1 res2)
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2257 ;; 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
2258 ;; 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
2259 ;; start before complaining.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2260 (save-excursion
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2261 (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
2262 (c-beginning-of-defun-1)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2263 (while (not (or (bobp) (eq (char-after) ?{)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2264 (c-beginning-of-defun-1))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2265 (unless (equal (c-whack-state-before (point) res1) res2)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2266 (message (concat "c-parse-state inconsistency: "
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2267 "using cache: %s, from scratch: %s")
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2268 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
2269 res1))
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
2270 (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
2271 (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
2272 (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
2273 (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
2274 '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
2275 '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
2276 (c-keep-region-active))
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2277 (when c-debug-parse-state
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2278 (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
2279
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
2280 (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
2281 ;; 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
2282 ;; 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
2283 (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
2284 (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
2285 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
2286 (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
2287 (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
2288 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
2289 (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
2290 (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
2291 (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
2292 (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
2293 (cdr newstate)))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2294
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
2295 (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
2296 ;; 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
2297 ;; 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
2298 (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
2299 (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
2300 (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
2301 (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
2302 ;; 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
2303 ;; 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
2304 ;; 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
2305 ;; 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
2306 (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
2307 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
2308 (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
2309 ;; 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
2310 ;; 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
2311 ;; 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
2312 ;; 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
2313 ;; 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
2314 (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
2315 ;; 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
2316 ;; 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
2317 ;; 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
2318 (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
2319 (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
2320 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
2321 ;; 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
2322 (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
2323 (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
2324 nil)))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2325
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2326 (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
2327 ;; 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
2328 ;; 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
2329 (let (enclosingp)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2330 (or bufpos (setq bufpos 134217727))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2331 (while paren-state
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2332 (setq enclosingp (car paren-state)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2333 paren-state (cdr paren-state))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2334 (if (or (consp enclosingp)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2335 (>= enclosingp bufpos))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2336 (setq enclosingp nil)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2337 (setq paren-state nil)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2338 enclosingp))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2339
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2340 (defun c-least-enclosing-brace (paren-state)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2341 ;; 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
2342 ;; if none was found.
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2343 (let (pos elem)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2344 (while paren-state
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2345 (setq elem (car paren-state)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2346 paren-state (cdr paren-state))
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2347 (if (integerp elem)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2348 (setq pos elem)))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2349 pos))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2350
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2351 (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
2352 ;; 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
2353 ;; 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
2354 ;; 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
2355 ;; 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
2356 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2357 ;; 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
2358 ;; 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
2359 ;; 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
2360 ;; 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
2361 ;; 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
2362 (when bufpos
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2363 (let (elem)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2364 (catch 'done
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2365 (while paren-state
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2366 (setq elem (car paren-state))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2367 (if (consp elem)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2368 (cond ((< (cdr elem) bufpos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2369 (throw 'done (cdr elem)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2370 ((< (car elem) bufpos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2371 ;; See below.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2372 (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
2373 (if (< elem bufpos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2374 ;; 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
2375 ;; 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
2376 ;; 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
2377 ;; 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
2378 (throw 'done (min (1+ elem) bufpos))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2379 (setq paren-state (cdr paren-state)))))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2380
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2381 (defun c-beginning-of-syntax ()
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2382 ;; 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
2383 ;; 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
2384 ;; 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
2385 ;; a position in the vicinity.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2386 (let* ((paren-state c-state-cache)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2387 elem
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2388
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2389 (pos (catch 'done
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2390 ;; 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
2391 ;; 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
2392 ;; 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
2393 ;; parens.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2394 (while paren-state
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2395 (setq elem (car paren-state))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2396 (if (consp elem)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2397 (cond ((<= (cdr elem) (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2398 (throw 'done (cdr elem)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2399 ((<= (car elem) (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2400 (throw 'done (car elem))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2401 (if (<= elem (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2402 (throw 'done elem)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2403 (setq paren-state (cdr paren-state)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2404 (point-min))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2405
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2406 (if (> pos (- (point) 4000))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2407 (goto-char pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2408 ;; 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
2409 ;; (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
2410 ;; 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
2411 ;; Consult `syntax-ppss' here.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2412 (c-beginning-of-defun-1)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2413 (if (< (point) pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2414 (goto-char pos)))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2415
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2416
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2417 ;; 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
2418
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2419 (defun c-on-identifier ()
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2420 "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
2421 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
2422 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
2423 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
2424 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
2425
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2426 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
2427 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
2428
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2429 ;; 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
2430
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2431 (save-excursion
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2432 (skip-syntax-backward "w_")
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2433
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2434 (or
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2435
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2436 ;; Check for a normal (non-keyword) identifier.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2437 (and (looking-at c-symbol-start)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2438 (not (looking-at c-keywords-regexp))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2439 (point))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2440
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2441 (when (c-major-mode-is 'pike-mode)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2442 ;; Handle the `<operator> syntax in Pike.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2443 (let ((pos (point)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2444 (skip-chars-backward "-!%&*+/<=>^|~[]()")
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2445 (and (if (< (skip-chars-backward "`") 0)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2446 t
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2447 (goto-char pos)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2448 (eq (char-after) ?\`))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2449 (looking-at c-symbol-key)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2450 (>= (match-end 0) pos)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2451 (point))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2452
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2453 ;; Handle the "operator +" syntax in C++.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2454 (when (and c-overloadable-operators-regexp
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2455 (= (c-backward-token-2 0) 0))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2456
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2457 (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
2458 (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
2459 (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
2460 (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
2461 (point))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2462
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2463 ((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
2464 (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
2465 (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
2466 (= (c-forward-token-2 1) 0)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2467 (looking-at c-overloadable-operators-regexp)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2468 (point))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2469
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2470 )))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2471
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2472 (defsubst c-simple-skip-symbol-backward ()
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2473 ;; 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
2474 ;; 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
2475 ;; moved.
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2476 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2477 ;; 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
2478 (or (< (skip-syntax-backward "w_") 0)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2479 (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
2480 ;; Handle the `<operator> syntax in Pike.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2481 (let ((pos (point)))
56646
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2482 (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
2483 (< (skip-chars-backward "`") 0)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2484 (looking-at c-symbol-key)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2485 (>= (match-end 0) pos))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2486 t
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2487 (goto-char pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2488 nil)))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2489
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2490 (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
2491 ;; 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
2492 ;; 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
2493 ;; backward search; if given it's assumed to be at the boundary
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2494 ;; between two tokens.
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2495 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2496 ;; 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
2497 (if (looking-at "\\w\\|\\s_")
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2498 (skip-syntax-backward "w_" back-limit)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2499 (let ((start (point)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2500 (when (< (skip-syntax-backward ".()" back-limit) 0)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2501 (while (let ((pos (or (and (looking-at c-nonsymbol-token-regexp)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2502 (match-end 0))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2503 ;; `c-nonsymbol-token-regexp' should always match
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2504 ;; since we've skipped backward over punctuator
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2505 ;; or paren syntax, but consume one char in case
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2506 ;; it doesn't so that we don't leave point before
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2507 ;; some earlier incorrect token.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2508 (1+ (point)))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2509 (if (<= pos start)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2510 (goto-char pos))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2511 (< pos start)))))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2512
52107
3a5379a0d7f3 2003-08-01 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents: 51947
diff changeset
2513 (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
2514 ;; 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
2515 ;; 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
2516 ;; 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
2517 ;; 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
2518 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2519 ;; 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
2520 (let ((start (point)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2521 (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
2522 (skip-syntax-forward "w_"))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2523 ((< (skip-syntax-backward ".()" back-limit) 0)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2524 (while (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2525 (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
2526 (goto-char (match-end 0))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2527 ;; `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
2528 ;; 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
2529 ;; 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
2530 ;; 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
2531 (forward-char))
52107
3a5379a0d7f3 2003-08-01 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents: 51947
diff changeset
2532 (< (point) start)))))
3a5379a0d7f3 2003-08-01 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents: 51947
diff changeset
2533 (> (point) start)))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2534
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2535 (defconst c-jump-syntax-balanced
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2536 (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
2537 "\\w\\|\\s_\\|\\s\(\\|\\s\)\\|\\s\"\\|\\s|"
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2538 "\\w\\|\\s_\\|\\s\(\\|\\s\)\\|\\s\""))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2539
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2540 (defconst c-jump-syntax-unbalanced
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2541 (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
2542 "\\w\\|\\s_\\|\\s\"\\|\\s|"
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2543 "\\w\\|\\s_\\|\\s\""))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2544
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2545 (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
2546 "Move forward by tokens.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2547 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
2548 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
2549 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
2550 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
2551 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
2552 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
2553 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
2554 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
2555
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2556 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
2557 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
2558 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
2559
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2560 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
2561 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
2562 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
2563 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
2564 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
2565 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
2566
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2567 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
2568 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
2569
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2570 (or count (setq count 1))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2571 (if (< count 0)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2572 (- (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
2573
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2574 (let ((jump-syntax (if balanced
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2575 c-jump-syntax-balanced
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2576 c-jump-syntax-unbalanced))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2577 (last (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2578 (prev (point)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2579
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2580 (if (zerop count)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2581 ;; 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
2582 (c-end-of-current-token))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2583
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2584 (save-restriction
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2585 (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
2586 (if (/= (point)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2587 (progn (c-forward-syntactic-ws) (point)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2588 ;; 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
2589 ;; fact move.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2590 (setq count (max (1- count) 0)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2591
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2592 (if (eobp)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2593 ;; 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
2594 (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2595 (if (zerop count) (setq count 1))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2596 (goto-char last))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2597
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2598 ;; 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
2599 ;; inside the loop.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2600 (condition-case nil
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2601 (while (and
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2602 (> count 0)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2603 (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2604 (setq last (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2605 (cond ((looking-at jump-syntax)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2606 (goto-char (scan-sexps (point) 1))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2607 t)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2608 ((looking-at c-nonsymbol-token-regexp)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2609 (goto-char (match-end 0))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2610 t)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2611 ;; `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
2612 ;; 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
2613 ;; 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
2614 ;; 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
2615 ;; 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
2616 ((and limit
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2617 (save-restriction
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2618 (widen)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2619 (looking-at c-nonsymbol-token-regexp)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2620 nil)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2621 (t
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2622 (forward-char)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2623 t))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2624 (c-forward-syntactic-ws)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2625 (setq prev last
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2626 count (1- count)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2627 (error (goto-char last)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2628
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2629 (when (eobp)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2630 (goto-char prev)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2631 (setq count (1+ count)))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2632
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2633 count)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2634
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2635 (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
2636 "Move backward by tokens.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2637 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
2638
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2639 (or count (setq count 1))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2640 (if (< count 0)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2641 (- (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
2642
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2643 (or limit (setq limit (point-min)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2644 (let ((jump-syntax (if balanced
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2645 c-jump-syntax-balanced
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2646 c-jump-syntax-unbalanced))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2647 (last (point)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2648
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2649 (if (zerop count)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2650 ;; 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
2651 ;; current token.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2652 (if (> (point)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2653 (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
2654 (if (< (point) limit)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2655 ;; 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
2656 (setq count 1))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2657
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2658 ;; 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
2659 ;; 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
2660 ;; 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
2661 (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
2662 ;; 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
2663 ;; 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
2664 (or (/= (char-after) ?#)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2665 (not c-opt-cpp-prefix)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2666 (save-excursion
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2667 (and (= (point)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2668 (progn (beginning-of-line)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2669 (looking-at "[ \t]*")
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2670 (match-end 0)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2671 (or (bobp)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2672 (progn (backward-char)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2673 (not (eq (char-before) ?\\)))))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2674 (setq count 1))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2675
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2676 ;; 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
2677 ;; 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
2678 (condition-case nil
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2679 (while (and
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2680 (> count 0)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2681 (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2682 (c-backward-syntactic-ws)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2683 (backward-char)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2684 (if (looking-at jump-syntax)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2685 (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
2686 ;; 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
2687 ;; 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
2688 ;; 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
2689 (c-beginning-of-current-token))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2690 (>= (point) limit)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2691 (setq last (point)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2692 count (1- count)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2693 (error (goto-char last)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2694
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2695 (if (< (point) limit)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2696 (goto-char last))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2697
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2698 count)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2699
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2700 (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
2701 "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
2702 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
2703 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
2704 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
2705 (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
2706 (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
2707
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2708 (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
2709 "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
2710 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
2711 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
2712 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
2713 (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
2714 (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
2715
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2716
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2717 ;; 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
2718
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2719 (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
2720 paren-level not-inside-token
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2721 lookbehind-submatch)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2722 "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
2723 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
2724 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
2725 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
2726 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
2727
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2728 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
2729 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
2730 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
2731 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
2732 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
2733 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
2734
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2735 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
2736 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
2737 \(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
2738 constants.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2739
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2740 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
2741 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
2742 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
2743 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
2744 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
2745 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
2746 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
2747
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2748 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
2749 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
2750 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
2751 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
2752 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
2753 matches syntactic whitespace.
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2754
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2755 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
2756 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
2757 PAREN-LEVEL is set.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2758
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2759 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
2760 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
2761
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2762 (or bound (setq bound (point-max)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2763 (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
2764
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2765 ;;(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
2766
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2767 (let ((start (point))
56646
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2768 tmp
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2769 ;; Start position for the last search.
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2770 search-pos
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2771 ;; 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
2772 ;; and the point.
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2773 state
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2774 ;; 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
2775 ;; `parse-partial-sexp' continues from here.
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2776 (state-pos (point))
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2777 ;; 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
2778 ;; 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
2779 ;; 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
2780 check-pos check-state
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2781 ;; 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
2782 (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
2783 ;; 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
2784 found)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2785
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2786 (condition-case err
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2787 (while
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2788 (and
56646
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2789 (progn
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2790 (setq search-pos (point))
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2791 (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
2792
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2793 (progn
56646
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2794 (setq state (parse-partial-sexp
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2795 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
2796 state-pos (point))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2797 (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
2798 (or (not paren-level)
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2799 (>= (car state) 0))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2800 (match-end lookbehind-submatch)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2801 (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
2802 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
2803 (setq check-pos state-pos
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2804 check-state state))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2805
56646
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2806 ;; 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
2807 ;; 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
2808 ;; 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
2809 ;; 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
2810 ;; 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
2811 ;; (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
2812 ;; 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
2813 ;; 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
2814 ;; the next search.
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2815
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2816 (cond
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2817 ((elt check-state 7)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2818 ;; 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
2819 ;; `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
2820 ;; the right bound behavior.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2821 (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
2822
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2823 ((elt check-state 4)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2824 ;; 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
2825 (search-forward "*/" bound noerror))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2826
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2827 ((and (not (elt check-state 5))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2828 (eq (char-before check-pos) ?/)
56646
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2829 (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
2830 (memq (char-after check-pos) '(?/ ?*)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2831 ;; 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
2832 ;; comment.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2833 (if (= (char-after check-pos) ?/)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2834 (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
2835 (search-forward "*/" bound noerror)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2836
56646
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2837 ;; 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
2838 ;; 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
2839 ;; 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
2840 ;; 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
2841 ;; 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
2842 ;; 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
2843 ;; checking the paren level.
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2844
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2845 ((and paren-level
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2846 (/= (setq tmp (car check-state)) 0))
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2847 ;; 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
2848 ;; 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
2849 ;; 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
2850 (if (> tmp 0)
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2851
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2852 ;; Inside a nested paren sexp.
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2853 (if lookbehind-submatch
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2854 ;; See the NOTE above.
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2855 (progn (goto-char state-pos) t)
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2856 ;; Skip out of the paren quickly.
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2857 (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
2858 state-pos (point)))
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2859
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2860 ;; Have exited the current paren sexp.
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2861 (if noerror
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2862 (progn
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2863 ;; 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
2864 ;; 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
2865 ;; 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
2866 ;; 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
2867 ;; upon return.
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2868 (setq bound (1- (point)))
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2869 nil)
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2870 (signal 'search-failed (list regexp)))))
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2871
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2872 ((setq tmp (elt check-state 3))
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2873 ;; Match inside a string.
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2874 (if (or lookbehind-submatch
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2875 (not (integerp tmp)))
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2876 ;; See the NOTE above.
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2877 (progn (goto-char state-pos) t)
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2878 ;; 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
2879 (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
2880 (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
2881 (progn
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2882 (setq state (parse-partial-sexp
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2883 state-pos (point) nil nil state)
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2884 state-pos (point))
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2885 (elt state 3))
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2886 (setq continue nil)))
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2887 continue)))
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2888
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2889 ((save-excursion
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2890 (save-match-data
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2891 (c-beginning-of-macro start)))
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2892 ;; 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
2893 (c-end-of-macro)
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2894 (cond ((<= (point) bound) t)
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2895 (noerror nil)
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2896 (t (signal 'search-failed (list regexp)))))
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2897
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2898 ((and not-inside-token
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2899 (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
2900 (< check-pos
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2901 (save-excursion
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2902 (goto-char check-pos)
53073
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
2903 (save-match-data
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
2904 (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
2905 (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
2906 ;; Inside a token.
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2907 (if lookbehind-submatch
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2908 ;; See the NOTE above.
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2909 (goto-char state-pos)
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2910 (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
2911
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2912 (t
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2913 ;; A real match.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2914 (setq found t)
56646
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2915 nil)))
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2916
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2917 ;; 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
2918 ;; looping on the same spot.
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2919 (or (/= search-pos (point))
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2920 (if (= (point) bound)
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2921 (if noerror
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2922 nil
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2923 (signal 'search-failed (list regexp)))
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2924 (forward-char)
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2925 t))))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2926
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2927 (error
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2928 (goto-char start)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2929 (signal (car err) (cdr err))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2930
56646
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2931 ;;(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
2932
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2933 (if found
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2934 (progn
56646
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2935 (goto-char (match-end 0))
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2936 (match-end 0))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2937
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2938 ;; 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
2939 (if (eq noerror t)
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2940 (goto-char start)
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2941 (goto-char bound))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2942 nil)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2943
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2944 (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
2945 "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
2946 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
2947 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
2948 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
2949 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
2950
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2951 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
2952 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
2953 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
2954 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
2955
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2956 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
2957
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2958 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
2959 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
2960
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2961 (let ((start (point))
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2962 state
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2963 ;; 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
2964 ;; 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
2965 ;; potentially large regions with `parse-partial-sexp' to verify
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2966 ;; each position.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2967 safe-pos-list
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2968 ;; The position at the beginning of `safe-pos-list'.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2969 safe-pos
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2970 ;; 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
2971 ;; 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
2972 ;; demand.
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2973 start-macro-beg
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2974 ;; 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
2975 ;; level. Used only when `paren-level' is set.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2976 (paren-level-pos (point)))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2977
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2978 (while (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2979 (while (and
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2980 (< (skip-chars-backward skip-chars limit) 0)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2981
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2982 ;; Use `parse-partial-sexp' from a safe position down to
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2983 ;; the point to check if it's outside comments and
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2984 ;; strings.
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
2985 (let ((pos (point)) state-2 pps-end-pos)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2986 ;; Pick a safe position as close to the point as
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2987 ;; possible.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2988 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2989 ;; FIXME: Consult `syntax-ppss' here if our
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2990 ;; cache doesn't give a good position.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2991 (while (and safe-pos-list
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2992 (> (car safe-pos-list) (point)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2993 (setq safe-pos-list (cdr safe-pos-list)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2994 (unless (setq safe-pos (car-safe safe-pos-list))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2995 (setq safe-pos (max (or (c-safe-position
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2996 (point) (or c-state-cache
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2997 (c-parse-state)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2998 0)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2999 (point-min))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3000 safe-pos-list (list safe-pos)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3001
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3002 ;; Cache positions along the way to use if we have to
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3003 ;; back up more. We cache every closing paren on the
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3004 ;; same level. If the paren cache is relevant in this
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3005 ;; region then we're typically already on the same
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3006 ;; level as the target position. Note that we might
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3007 ;; cache positions after opening parens in case
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3008 ;; safe-pos is in a nested list. That's both uncommon
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3009 ;; and harmless.
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3010 (while (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3011 (setq state (parse-partial-sexp
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3012 safe-pos pos 0))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3013 (< (point) pos))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3014 (setq safe-pos (point)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3015 safe-pos-list (cons safe-pos safe-pos-list)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3016
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3017 (cond
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3018 ((or (elt state 3) (elt state 4))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3019 ;; Inside string or comment. Continue search at the
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3020 ;; beginning of it.
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3021 (goto-char (elt state 8))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3022 t)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3023
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3024 ((and paren-level
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3025 (save-excursion
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3026 (setq state-2 (parse-partial-sexp
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3027 pos paren-level-pos -1)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3028 pps-end-pos (point))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3029 (/= (car state-2) 0)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3030 ;; Not at the right level.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3031
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3032 (if (and (< (car state-2) 0)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3033 ;; We stop above if we go out of a paren.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3034 ;; Now check whether it precedes or is
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3035 ;; nested in the starting sexp.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3036 (save-excursion
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3037 (setq state-2
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3038 (parse-partial-sexp
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3039 pps-end-pos paren-level-pos
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3040 nil nil state-2))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3041 (< (car state-2) 0)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3042
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3043 ;; We've stopped short of the starting position
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3044 ;; so the hit was inside a nested list. Go up
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3045 ;; until we are at the right level.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3046 (condition-case nil
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3047 (progn
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3048 (goto-char (scan-lists pos -1
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3049 (- (car state-2))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3050 (setq paren-level-pos (point))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3051 (if (and limit (>= limit paren-level-pos))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3052 (progn
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3053 (goto-char limit)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3054 nil)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3055 t))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3056 (error
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3057 (goto-char (or limit (point-min)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3058 nil))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3059
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3060 ;; The hit was outside the list at the start
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3061 ;; position. Go to the start of the list and exit.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3062 (goto-char (1+ (elt state-2 1)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3063 nil))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3064
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3065 ((c-beginning-of-macro limit)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3066 ;; Inside a macro.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3067 (if (< (point)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3068 (or start-macro-beg
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3069 (setq start-macro-beg
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3070 (save-excursion
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3071 (goto-char start)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3072 (c-beginning-of-macro limit)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3073 (point)))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3074 t
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3075
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3076 ;; It's inside the same macro we started in so it's
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3077 ;; a relevant match.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3078 (goto-char pos)
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3079 nil)))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3080
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3081 ;; If the state contains the start of the containing sexp we
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3082 ;; cache that position too, so that parse-partial-sexp in the
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3083 ;; next run has a bigger chance of starting at the same level
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3084 ;; as the target position and thus will get more good safe
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3085 ;; positions into the list.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3086 (if (elt state 1)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3087 (setq safe-pos (1+ (elt state 1))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3088 safe-pos-list (cons safe-pos safe-pos-list))))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3089
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3090 (> (point)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3091 (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3092 ;; Skip syntactic ws afterwards so that we don't stop at the
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3093 ;; end of a comment if `skip-chars' is something like "^/".
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3094 (c-backward-syntactic-ws)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3095 (point)))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3096
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3097 ;; 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
3098 ;; the future.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3099 (/= (point) start)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3100
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3101 ;; The following is an alternative implementation of
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3102 ;; `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
3103 ;; 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
3104 ;; 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
3105 ;; safe positions.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3106 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3107 ;;(defconst c-ssb-stop-re
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3108 ;; ;; 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
3109 ;; ;; 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
3110 ;; (concat
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3111 ;; ;; 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
3112 ;; ;; '/' 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
3113 ;; ;; syntax).
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3114 ;; "\\s>\\|/\\|\\s\""
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3115 ;; (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
3116 ;; "\\|\\s|"
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3117 ;; "")
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3118 ;; (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
3119 ;; "\\|\\s!"
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3120 ;; "")))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3121 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3122 ;;(defconst c-ssb-stop-paren-re
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3123 ;; ;; 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
3124 ;; (concat c-ssb-stop-re "\\|\\s(\\|\\s)"))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3125 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3126 ;;(defconst c-ssb-sexp-end-re
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3127 ;; ;; 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
3128 ;; (concat c-string-limit-regexp "\\|\\s)"))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3129 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3130 ;;(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
3131 ;; "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
3132 ;;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
3133 ;;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
3134 ;;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
3135 ;;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
3136 ;;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
3137 ;;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
3138 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3139 ;;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
3140 ;;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
3141 ;;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
3142 ;;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
3143 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3144 ;;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
3145 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3146 ;;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
3147 ;;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
3148 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3149 ;; (save-restriction
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3150 ;; (when limit
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3151 ;; (narrow-to-region limit (point-max)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3152 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3153 ;; (let ((start (point)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3154 ;; (catch 'done
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3155 ;; (while (let ((last-pos (point))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3156 ;; (stop-pos (progn
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3157 ;; (skip-chars-backward skip-chars)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3158 ;; (point))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3159 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3160 ;; ;; Skip back over the same region as
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3161 ;; ;; `skip-chars-backward' above, but keep to
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3162 ;; ;; syntactically relevant positions.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3163 ;; (goto-char last-pos)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3164 ;; (while (and
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3165 ;; ;; `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
3166 ;; ;; should be fast.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3167 ;; (re-search-backward
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3168 ;; (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
3169 ;; stop-pos 'move)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3170 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3171 ;; (progn
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3172 ;; (cond
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3173 ;; ((looking-at "\\s(")
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3174 ;; ;; `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
3175 ;; ;; start of the containing paren.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3176 ;; (forward-char)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3177 ;; (throw 'done t))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3178 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3179 ;; ((looking-at c-ssb-sexp-end-re)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3180 ;; ;; 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
3181 ;; ;; sexp (if `paren-level' is set).
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3182 ;; (forward-char)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3183 ;; (condition-case nil
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3184 ;; (c-backward-sexp)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3185 ;; (error
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3186 ;; (goto-char limit)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3187 ;; (throw 'done t))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3188 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3189 ;; (t
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3190 ;; (forward-char)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3191 ;; ;; 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
3192 ;; ;; after a plain '/' operator.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3193 ;; (let ((pos (point)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3194 ;; (c-backward-syntactic-ws)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3195 ;; (if (= pos (point))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3196 ;; ;; Was a plain '/' operator. Go past it.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3197 ;; (backward-char)))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3198 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3199 ;; (> (point) stop-pos))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3200 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3201 ;; ;; 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
3202 ;; ;; 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
3203 ;; ;; syntactically irrelevant place.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3204 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3205 ;; ;; 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
3206 ;; ;; 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
3207 ;; ;; something like "^/".
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3208 ;; (c-backward-syntactic-ws)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3209 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3210 ;; (< (point) stop-pos))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3211 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3212 ;; ;; 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
3213 ;; ;; in the future.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3214 ;; (/= (point) start))))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3215
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3216
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3217 ;; 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
3218
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3219 (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
3220 "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
3221 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
3222 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
3223 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
3224 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
3225 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
3226
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3227 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
3228 `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
3229
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3230 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
3231 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
3232
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3233 (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
3234 (= (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
3235 (aref c-in-literal-cache 1)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3236 (let ((rtn (save-excursion
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3237 (let* ((pos (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3238 (lim (or lim (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3239 (c-beginning-of-syntax)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3240 (point))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3241 (state (parse-partial-sexp lim pos)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3242 (cond
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3243 ((elt state 3) 'string)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3244 ((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
3245 ((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
3246 (t nil))))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3247 ;; 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
3248 (if (not c-in-literal-cache)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3249 (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
3250 rtn)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3251
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3252 ;; 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
3253 ;; 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
3254 ;; 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
3255 ;; cpp directives.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3256 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3257 ;; 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
3258 ;; 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
3259 ;; 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
3260 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3261 ;; 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
3262 ;; /regexp/ {<C-j>
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3263 ;; 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
3264 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3265 ;; 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
3266 ;; 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
3267 ;; 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
3268 ;; 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
3269 ;; "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
3270 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3271 ;; 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
3272 ;; 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
3273 ;; cc-modes in Xemacs whenever an awk-buffer has been initialised.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3274 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3275 ;; (Alan Mackenzie, 2003/4/30).
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3276
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3277 (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
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 (let ((context (buffer-syntactic-context)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3280 (cond
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3281 ((eq context 'string) 'string)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3282 ((eq context 'comment) 'c++)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3283 ((eq context 'block-comment) 'c)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3284 ((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
3285
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3286 (defalias 'c-in-literal
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3287 (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
3288 'c-fast-in-literal ; XEmacs
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3289 'c-slow-in-literal)) ; GNU Emacs
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3290
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3291 ;; 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
3292 (cc-bytecomp-defun c-in-literal)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3293
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3294 (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
3295 "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
3296 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
3297 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
3298 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
3299 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
3300 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
3301 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
3302 non-nil, the case when point is inside a starting delimiter won't be
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3303 recognized. This only has effect for comments, which have starting
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3304 delimiters with more than one character.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3305
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3306 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
3307 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
3308
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3309 (save-excursion
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3310 (let* ((pos (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3311 (lim (or lim (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3312 (c-beginning-of-syntax)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3313 (point))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3314 (state (parse-partial-sexp lim pos)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3315
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3316 (cond ((elt state 3) ; String.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3317 (goto-char (elt state 8))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3318 (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
3319 (point-max))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3320
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3321 ((elt state 4) ; Comment.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3322 (goto-char (elt state 8))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3323 (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
3324
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3325 ((and (not not-in-delimiter)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3326 (not (elt state 5))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3327 (eq (char-before) ?/)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3328 (looking-at "[/*]"))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3329 ;; 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
3330 (backward-char 1)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3331 (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
3332
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3333 (near
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3334 (goto-char pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3335
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3336 ;; Search forward for a literal.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3337 (skip-chars-forward " \t")
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3338
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3339 (cond
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3340 ((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
3341 (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
3342 (point-max))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3343
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3344 ((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
3345 (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
3346
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3347 (t
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3348 ;; Search backward.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3349 (skip-chars-backward " \t")
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3350
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3351 (let ((end (point)) beg)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3352 (cond
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3353 ((save-excursion
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3354 (< (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
3355 (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
3356
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3357 ((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
3358 (looking-at "*/"))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3359 ;; 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
3360 ;; 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
3361 ;; normal case above.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3362 (goto-char end)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3363 (c-backward-single-comment)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3364 ;; 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
3365 (setq beg (point))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3366
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3367 (if beg (cons beg end))))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3368 ))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3369
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3370 ;; 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
3371 (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
3372
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3373 (defun c-collect-line-comments (range)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3374 "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
3375 `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
3376 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
3377 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
3378 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
3379 argument is returned.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3380
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3381 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
3382 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
3383
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3384 (save-excursion
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3385 (condition-case nil
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3386 (if (and (consp range) (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3387 (goto-char (car range))
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3388 (looking-at c-line-comment-starter)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3389 (let ((col (current-column))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3390 (beg (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3391 (bopl (c-point 'bopl))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3392 (end (cdr range)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3393 ;; 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
3394 ;; comments which are preceded by code.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3395 (while (and (c-backward-single-comment)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3396 (>= (point) bopl)
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3397 (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
3398 (= col (current-column)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3399 (setq beg (point)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3400 bopl (c-point 'bopl)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3401 (goto-char end)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3402 (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
3403 (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
3404 (= col (current-column))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3405 (prog1 (zerop (forward-line 1))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3406 (setq end (point)))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3407 (cons beg end))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3408 range)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3409 (error range))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3410
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3411 (defun c-literal-type (range)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3412 "Convenience function that given the result of `c-literal-limits',
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3413 returns nil or the type of literal that the range surrounds. It's
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3414 much faster than using `c-in-literal' and is intended to be used when
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3415 you need both the type of a literal and its limits.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3416
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3417 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
3418 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
3419
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3420 (if (consp range)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3421 (save-excursion
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3422 (goto-char (car range))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3423 (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
3424 ((or (looking-at "//") ; c++ line comment
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3425 (and (looking-at "\\s<") ; comment starter
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3426 (looking-at "#"))) ; awk comment.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3427 'c++)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3428 (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
3429 range))
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
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3432 ;; `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
3433
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3434 ;; 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
3435 ;; 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
3436 ;; 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
3437 ;; 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
3438 ;; 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
3439 ;; 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
3440 ;; 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
3441 ;; 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
3442 ;; first match.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3443 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3444 ;; `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
3445 ;; 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
3446 ;; 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
3447 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3448 ;; `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
3449 ;; `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
3450 ;; 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
3451 (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
3452 (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
3453 (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
3454 (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
3455
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3456 (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
3457 (and c-find-decl-syntactic-pos
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3458 (< 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
3459 (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
3460
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3461 ; (defface c-debug-decl-spot-face
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3462 ; '((t (:background "Turquoise")))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3463 ; "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
3464 ; (defface c-debug-decl-sws-face
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3465 ; '((t (:background "Khaki")))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3466 ; "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
3467 ; spots and the preceding token end.")
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3468
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3469 (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
3470 (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
3471 `(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
3472 (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
3473 'c-debug-decl-sws-face)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3474 (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
3475 'c-debug-decl-spot-face))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3476 (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
3477 (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
3478 `(c-save-buffer-state ()
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3479 (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
3480 (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
3481
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3482 (defmacro c-find-decl-prefix-search ()
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3483 ;; 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
3484 ;; 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
3485 ;; 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
3486 ;; 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
3487 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3488 ;; 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
3489
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3490 '(progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3491 ;; 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
3492 (unless cfd-prop-match
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3493 (save-excursion
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3494 (while (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3495 (goto-char (next-single-property-change
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3496 (point) 'c-type nil cfd-limit))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3497 (and (< (point) cfd-limit)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3498 (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
3499 'c-decl-end)))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3500 (setq cfd-prop-match (point))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3501
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3502 ;; 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
3503 ;; got one already.
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3504 (unless cfd-re-match
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3505
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3506 (if (> cfd-re-match-end (point))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3507 (goto-char cfd-re-match-end))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3508
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3509 (while (if (setq cfd-re-match-end
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3510 (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
3511 cfd-limit 'move))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3512
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3513 ;; 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
3514 (c-got-face-at
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3515 (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
3516 ;; 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
3517 (progn
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3518 (goto-char cfd-re-match)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3519 (1- cfd-re-match))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3520 ;; 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
3521 (goto-char (match-beginning 0))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3522 (point))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3523 c-literal-faces)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3524
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3525 ;; 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
3526 (setq cfd-re-match cfd-limit)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3527 nil)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3528
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3529 ;; 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
3530 (while (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3531 (goto-char (next-single-property-change
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3532 (point) 'face nil cfd-limit))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3533 (and (< (point) cfd-limit)
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3534 (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
3535
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3536 ;; 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
3537 ;; 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
3538 ;; 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
3539 (unless cfd-re-match
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3540 (c-backward-syntactic-ws)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3541 (setq cfd-re-match (point))))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3542
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3543 ;; 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
3544 (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
3545 (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
3546 cfd-re-match nil)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3547 (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
3548 cfd-prop-match nil))
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 (goto-char cfd-match-pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3551
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3552 (when (< cfd-match-pos cfd-limit)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3553 ;; 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
3554 (c-forward-comments)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3555 ;; 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
3556 ;; 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
3557 ;; 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
3558 ;; 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
3559 (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
3560 (min cfd-prop-match (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3561 (point))))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3562
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3563 (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
3564 ;; Call CFD-FUN for each possible spot for a declaration, cast or
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3565 ;; label from the point to CFD-LIMIT. Such a spot is:
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3566 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3567 ;; o The first token after bob.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3568 ;; 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
3569 ;; `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
3570 ;; 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
3571 ;; submatch 1 doesn't match.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3572 ;; 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
3573 ;; `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
3574 ;; `c-type-decl-end-used' is set.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3575 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3576 ;; 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
3577 ;; 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
3578 ;; 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
3579 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3580 ;; 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
3581 ;; 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
3582 ;; 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
3583 ;; 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
3584 ;; CFD-FACE-CHECKLIST checks exist.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3585 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3586 ;; CFD-FUN is called with point at the start of the spot. It's
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3587 ;; passed two arguments: The first is the end position of the token
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3588 ;; preceding the spot, or 0 for the implicit match at bob. The
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3589 ;; second is a flag that is t when the match is inside a macro. If
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3590 ;; CFD-FUN adds `c-decl-end' properties somewhere below the current
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3591 ;; spot, it should return non-nil to ensure that the next search
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3592 ;; will find them.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3593 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3594 ;; 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
3595 ;; 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
3596 ;; 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
3597 ;; 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
3598 ;; 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
3599 ;; 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
3600 ;; positions and their spots.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3601 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3602 ;; 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
3603 ;; searched range.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3604 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3605 ;; 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
3606 ;; 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
3607 ;; the variables above.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3608 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3609 ;; 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
3610 ;; 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
3611 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3612 ;; This function might do hidden buffer changes.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3613
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3614 (let ((cfd-start-pos (point))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3615 (cfd-buffer-end (point-max))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3616 ;; 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
3617 ;; 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
3618 ;; no match.
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3619 cfd-re-match
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3620 ;; 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
3621 ;; 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
3622 ;; next regexp search is started here instead.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3623 (cfd-re-match-end (point-min))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3624 ;; 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
3625 ;; `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
3626 ;; 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
3627 ;; 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
3628 (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
3629 ;; 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
3630 ;; `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
3631 ;; 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
3632 ;; 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
3633 (cfd-match-pos cfd-limit)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3634 ;; The position to continue searching at.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3635 cfd-continue-pos
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3636 ;; 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
3637 ;; 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
3638 ;; 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
3639 ;; comments.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3640 (cfd-token-pos 0)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3641 ;; 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
3642 (cfd-macro-end 0))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3643
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3644 ;; 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
3645 ;; 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
3646 ;; search unless we're at bob.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3647
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3648 (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
3649 ;; 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
3650 ;; 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
3651 ;; returned match.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3652
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3653 (cond
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3654 ;; 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
3655 ;; 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
3656 ((and
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3657 (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
3658 ;; 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
3659 ;; 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
3660 ;; inside a comment?
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3661 (while (and (not (bobp))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3662 (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
3663 (goto-char (previous-single-property-change
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3664 (point) 'face nil (point-min))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3665
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3666 ;; 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
3667 ;; literals.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3668 (and (featurep 'xemacs)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3669 (eq (get-text-property (point) 'face)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3670 'font-lock-string-face)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3671 (not (bobp))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3672 (progn (backward-char)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3673 (not (looking-at c-string-limit-regexp)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3674 (forward-char))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3675
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3676 ;; 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
3677 ;; (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
3678 ;; 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
3679 ;; 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
3680 ;; resort to `c-literal-limits'.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3681 (unless (looking-at c-literal-start-regexp)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3682 (let ((range (c-literal-limits)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3683 (if range (goto-char (car range)))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3684
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3685 (setq start-in-literal (point)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3686
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3687 ;; 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
3688 ;; 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
3689 ;; 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
3690 ;; 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
3691 ;; refontifies the current line only.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3692 (<= 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
3693 (save-excursion
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3694 (goto-char cfd-start-pos)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3695 (while (progn
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3696 (goto-char (next-single-property-change
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3697 (point) 'face nil cfd-limit))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3698 (and (< (point) cfd-limit)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3699 (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
3700 (= (point) cfd-limit)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3701
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3702 ;; 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
3703 ;; (< 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
3704 ;; find a suitable start position.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3705 (setq cfd-continue-pos start-in-literal))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3706
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3707 ;; 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
3708 ;; 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
3709 ((save-excursion
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3710 (and (= (forward-line 1) 0)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3711 (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
3712 (>= (point) cfd-limit)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3713 (progn (backward-char)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3714 (eq (char-before) ?\\))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3715 ;; (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
3716 ;; (< 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
3717 ;; set things up.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3718 (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
3719 start-in-macro t))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3720
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3721 (t
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3722 ;; 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
3723 ;; that could follow after it.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3724 (when (c-beginning-of-macro)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3725 (setq start-in-macro t))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3726
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3727 ;; 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
3728 ;; 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
3729 ;; further down.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3730 (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
3731
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3732 (setq syntactic-pos (point))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3733 (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
3734 ;; 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
3735 ;; 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
3736 ;; 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
3737 ;; 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
3738 (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
3739
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3740 ;; 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
3741 ;; `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
3742 ;; 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
3743 ;; `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
3744 ;; 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
3745 ;; 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
3746 ;; 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
3747 ;; the right spot to begin searching anyway.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3748 (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
3749 c-find-decl-match-pos)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3750 (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
3751 cfd-continue-pos syntactic-pos)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3752
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3753 (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
3754
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3755 (when (if (bobp)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3756 ;; 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
3757 ;; 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
3758 ;; 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
3759 ;; 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
3760 ;; 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
3761 (setq cfd-re-match 0)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3762 (backward-char)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3763 (c-beginning-of-current-token)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3764 (< (point) cfd-limit))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3765 ;; 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
3766 ;; 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
3767 (c-find-decl-prefix-search))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3768
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3769 (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
3770 cfd-match-pos)))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3771
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3772 ;; 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
3773 ;; 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
3774 ;; 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
3775 ;; 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
3776 ;; 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
3777 (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
3778
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3779 (cond
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3780 (start-in-macro
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3781 ;; 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
3782 ;; 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
3783 ;; 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
3784 ;; 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
3785 ;; literal (comment).
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3786 (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
3787 ;; 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
3788 (c-backward-comments)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3789 (backward-char)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3790 (c-beginning-of-current-token))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3791
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3792 (start-in-literal
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3793 ;; 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
3794 ;; 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
3795 ;; 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
3796 ;; `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
3797 ;; (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
3798 ;; `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
3799 ;; after `cfd-fun' below.)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3800 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3801 ;; 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
3802 ;; 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
3803 ;; away.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3804 (if (not c-type-decl-end-used)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3805 (goto-char start-in-literal)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3806 (goto-char cfd-start-pos)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3807 (while (progn
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3808 (goto-char (previous-single-property-change
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3809 (point) 'c-type nil start-in-literal))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3810 (and (> (point) start-in-literal)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3811 (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
3812 'c-decl-end))))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3813
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3814 (when (= (point) start-in-literal)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3815 ;; 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
3816 ;; 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
3817 ;; 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
3818 ;; `c-find-decl-prefix-search' anyway.)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3819 (c-forward-single-comment)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3820 (if (> (point) cfd-limit)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3821 (goto-char cfd-limit))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3822
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3823 (t
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3824 ;; 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
3825 ;; 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
3826 ;; `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
3827 ;; (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
3828 ;; it.)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3829 (goto-char cfd-start-pos)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3830
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3831 ;; 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
3832 ;; 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
3833 ;; to them later on.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3834 (setq cfd-continue-pos (point))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3835 (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
3836 (setq cfd-re-match nil))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3837 (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
3838 (setq cfd-prop-match nil)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3839
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3840 (if syntactic-pos
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3841 ;; 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
3842 ;; 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
3843 ;; 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
3844 ;; `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
3845 ;; `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
3846 ;; syntactic ws.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3847 (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
3848 (goto-char syntactic-pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3849 (c-forward-syntactic-ws)
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3850 (and cfd-continue-pos
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3851 (< cfd-continue-pos (point))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3852 (setq cfd-token-pos (point))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3853
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3854 ;; 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
3855 ;; 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
3856 ;; 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
3857 (c-find-decl-prefix-search)))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3858
75027
9f636bd65206 Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents: 74372
diff changeset
3859 ;; 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
3860
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3861 (while (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3862 (while (and
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3863 (< cfd-match-pos cfd-limit)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3864
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3865 (or
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3866 ;; 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
3867 ;; 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
3868 ;; that got `c-recognize-<>-arglists' set.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3869 (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
3870 (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
3871 'syntax-table)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3872
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3873 ;; 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
3874 ;; `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
3875 ;; 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
3876 ;; "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
3877 ;; 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
3878 ;; there's nothing to do.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3879 (= cfd-continue-pos cfd-token-pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3880
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3881 (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3882 ;; 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
3883 ;; 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
3884 ;; 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
3885 ;; 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
3886 ;; 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
3887 ;; `c-find-decl-prefix-search'.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3888 (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
3889 (c-forward-syntactic-ws)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3890 (setq cfd-token-pos (point)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3891
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3892 ;; 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
3893 ;; 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
3894 (when (or (>= (point) cfd-limit)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3895 (not (looking-at cfd-decl-re))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3896 (and cfd-face-checklist
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3897 (not (c-got-face-at
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3898 (point) cfd-face-checklist))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3899 (goto-char cfd-continue-pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3900 t)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3901
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3902 (< (point) cfd-limit))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3903 (c-find-decl-prefix-search))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3904
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3905 (< (point) cfd-limit))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3906
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3907 (when (and
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3908 (>= (point) cfd-start-pos)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3909
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3910 (progn
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3911 ;; 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
3912 ;; 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
3913 ;; macro and end outside it.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3914 (when (> cfd-match-pos cfd-macro-end)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3915 ;; 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
3916 (save-excursion
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3917 (goto-char cfd-match-pos)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3918 (setq cfd-macro-end
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3919 (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
3920 (< (point) cfd-match-pos)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3921 (progn (c-end-of-macro)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3922 (point))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3923 0))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3924
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3925 (if (zerop cfd-macro-end)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3926 t
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3927 (if (> cfd-macro-end (point))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3928 (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
3929 t)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3930 ;; 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
3931 ;; so the whole match is bogus.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3932 (setq cfd-macro-end 0)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3933 nil))))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3934
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3935 (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
3936 (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
3937 (setq cfd-prop-match nil))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3938
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3939 (when (/= cfd-macro-end 0)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3940 ;; 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
3941 (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
3942
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3943 (goto-char cfd-continue-pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3944 (if (= cfd-continue-pos cfd-limit)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3945 (setq cfd-match-pos cfd-limit)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3946 (c-find-decl-prefix-search)))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3947
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3948
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3949 ;; A cache for found types.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3950
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3951 ;; 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
3952 ;; 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
3953 ;; 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
3954 ;; 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
3955 ;; 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
3956 ;; 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
3957 ;; 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
3958 ;; `c-forward-decl-or-cast-1').
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3959 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3960 ;; 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
3961 ;; 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
3962 ;; 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
3963 ;; "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
3964 ;; 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
3965 ;; 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
3966 ;; 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
3967 ;; 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
3968 ;; 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
3969 ;; 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
3970 (defvar c-found-types nil)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3971 (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
3972
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3973 (defsubst c-clear-found-types ()
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3974 ;; Clears `c-found-types'.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3975 (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
3976
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3977 (defun c-add-type (from to)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3978 ;; 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
3979 ;; 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
3980 ;; 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
3981 ;; 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
3982 ;; 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
3983 ;; 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
3984 ;; 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
3985 ;; 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
3986 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3987 ;; This function might do hidden buffer changes.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3988 (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
3989 (unless (intern-soft type c-found-types)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3990 (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
3991 (intern type c-found-types))))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3992
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3993 (defsubst c-check-type (from to)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3994 ;; 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
3995 ;; `c-found-types'.
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3996 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3997 ;; This function might do hidden buffer changes.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
3998 (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
3999 c-found-types))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4000
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4001 (defun c-list-found-types ()
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4002 ;; 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
4003 ;; strings.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4004 (let (type-list)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4005 (mapatoms (lambda (type)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4006 (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
4007 type-list)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4008 c-found-types)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4009 (sort type-list 'string-lessp)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4010
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4011
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4012 ;; 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
4013
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4014 (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
4015 ;; 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
4016 ;; 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
4017 ;; 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
4018 ;; or ">=".
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 ;; This function might do hidden buffer changes.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4021
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
4022 (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
4023 (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
4024 (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
4025 (< (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
4026
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4027 (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
4028 (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
4029 (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
4030 (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
4031 (< 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
4032 (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
4033 (< (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
4034 (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
4035 (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
4036
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
4037 (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
4038 (goto-char end)
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4039 (when (or (looking-at "[<>]")
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4040 (< (skip-chars-backward "<>") 0))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4041
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
4042 (goto-char end)
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4043 (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
4044 (when (and (< (point) end)
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4045 (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
4046 (< 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
4047 (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
4048 (< (point) end))
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4049 (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
4050 (forward-char)))))))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4051
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4052 ;; 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
4053 ;; 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
4054 ;; '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
4055 ;; 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
4056 ;; 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
4057 (defvar c-promote-possible-types nil)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4058
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4059 ;; 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
4060 ;; 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
4061 ;; 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
4062 ;; `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
4063 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4064 ;; 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
4065 ;; 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
4066 ;; 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
4067 ;; end of already parsed arglists.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4068 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4069 ;; 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
4070 ;; 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
4071 (defvar c-parse-and-markup-<>-arglists nil)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4072
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4073 ;; 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
4074 ;; not accept arglists that contain binary operators.
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
4075 ;;
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
4076 ;; 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
4077 ;; 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
4078 ;; 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
4079 ;; 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
4080 ;; 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
4081 ;; in almost all cases would be pointless.
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
4082 ;;
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
4083 ;; 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
4084 ;; 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
4085 ;; 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
4086 ;; "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
4087 (defvar c-restricted-<>-arglists nil)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4088
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4089 ;; Dynamically bound variables that instructs
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4090 ;; `c-forward-keyword-clause', `c-forward-<>-arglist',
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4091 ;; `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
4092 ;; `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
4093 ;; 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
4094 ;; 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
4095 ;; 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
4096 ;; 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
4097 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4098 ;; 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
4099 ;; 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
4100 ;; 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
4101 ;; 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
4102 ;; 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
4103 ;; instead.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4104 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4105 ;; 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
4106 ;; "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
4107 ;; aren't handled here.
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4108 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4109 ;; `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
4110 ;; `c-record-ref-identifiers'.
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4111 (defvar c-record-type-identifiers nil)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4112 (defvar c-record-ref-identifiers nil)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4113
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4114 ;; 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
4115 ;; 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
4116 ;; 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
4117 ;; 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
4118 ;; such symbol in the name.
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4119 (defvar c-last-identifier-range nil)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4120
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4121 (defmacro c-record-type-id (range)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4122 (if (eq (car-safe range) 'cons)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4123 ;; Always true.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4124 `(setq c-record-type-identifiers
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4125 (cons ,range c-record-type-identifiers))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4126 `(let ((range ,range))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4127 (if range
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4128 (setq c-record-type-identifiers
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4129 (cons range c-record-type-identifiers))))))
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 (defmacro c-record-ref-id (range)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4132 (if (eq (car-safe range) 'cons)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4133 ;; Always true.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4134 `(setq c-record-ref-identifiers
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4135 (cons ,range c-record-ref-identifiers))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4136 `(let ((range ,range))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4137 (if range
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4138 (setq c-record-ref-identifiers
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4139 (cons range c-record-ref-identifiers))))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4140
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4141 ;; 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
4142 ;; 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
4143 ;; like `c-record-type-identifiers'.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4144 (defvar c-record-found-types nil)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4145
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4146 (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
4147 ;; 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
4148 ;; 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
4149 ;; 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
4150 ;; 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
4151 ;; 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
4152 ;; 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
4153 ;; 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
4154 ;; 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
4155 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4156 ;; 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
4157 `(let (res)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4158 (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
4159 `(c-forward-type)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4160 `(c-forward-name)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4161 nil
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4162 (and (looking-at c-keywords-regexp)
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4163 (c-forward-keyword-clause 1))))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4164 (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
4165 ,(when (eq type 'ref)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4166 `(when c-record-type-identifiers
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4167 (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
4168 t)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4169
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4170 (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
4171 ;; 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
4172 ;; 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
4173 ;; `c-forward-keyword-prefixed-id'.
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4174 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4175 ;; 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
4176 `(while (and (progn
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4177 ,(when update-safe-pos
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4178 `(setq safe-pos (point)))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4179 (eq (char-after) ?,))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4180 (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4181 (forward-char)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4182 (c-forward-syntactic-ws)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4183 (c-forward-keyword-prefixed-id ,type)))))
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 (defun c-forward-keyword-clause (match)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4186 ;; 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
4187 ;; 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
4188 ;; 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
4189 ;; 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
4190 ;; 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
4191 ;; 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
4192 ;; `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
4193 ;; `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
4194 ;; and `c-<>-arglist-kwds'.
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4195 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4196 ;; This function records identifier ranges on
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4197 ;; `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
4198 ;; `c-record-type-identifiers' is non-nil.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4199 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4200 ;; 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
4201 ;; 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
4202 ;; 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
4203 ;; 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
4204 ;; 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
4205 ;; be done, though.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4206 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4207 ;; This function might do hidden buffer changes.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4208
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4209 (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
4210 ;; 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
4211 ;; `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
4212 ;; 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
4213 ;; should therefore be nil.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4214 (c-parse-and-markup-<>-arglists t)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4215 c-restricted-<>-arglists)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4216
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4217 (when kwd-sym
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4218 (goto-char (match-end match))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4219 (c-forward-syntactic-ws)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4220 (setq safe-pos (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4221
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4222 (cond
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4223 ((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
4224 (c-forward-keyword-prefixed-id type))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4225 ;; 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
4226 (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
4227
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4228 ((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
4229 (c-forward-keyword-prefixed-id ref))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4230 ;; 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
4231 (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
4232
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4233 ((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
4234 (eq (char-after) ?\())
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4235 ;; 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
4236
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4237 (forward-char)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4238 (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
4239 (eq (char-before pos) ?\)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4240 (when (and c-record-type-identifiers
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4241 (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
4242 ;; 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
4243 ;; 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
4244 (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
4245 (goto-char (match-beginning 0))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4246 (unless (c-forward-type)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4247 (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
4248 (goto-char (match-end 0)))))
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 (goto-char pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4251 (c-forward-syntactic-ws)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4252 (setq safe-pos (point))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4253
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4254 ((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
4255 (eq (char-after) ?<)
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4256 (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
4257 (c-forward-syntactic-ws)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4258 (setq safe-pos (point)))
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 ((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
4261 (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
4262 (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
4263 (c-forward-syntactic-ws)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4264 (setq safe-pos (point))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4265
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4266 (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
4267 (if (eq (char-after) ?:)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4268 ;; 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
4269 ;; list after it.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4270 (progn
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4271 (forward-char)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4272 (c-forward-syntactic-ws)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4273 (when (c-forward-keyword-prefixed-id type)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4274 (c-forward-id-comma-list type t)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4275 ;; 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
4276 ;; 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
4277 ;; recorded.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4278 (and c-record-type-identifiers
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4279 (progn
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4280 ;; 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
4281 ;; 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
4282 ;; clause matched above.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4283 (goto-char safe-pos)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4284 (looking-at c-colon-type-list-re))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4285 (progn
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4286 (goto-char (match-end 0))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4287 (c-forward-syntactic-ws)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4288 (c-forward-keyword-prefixed-id type))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4289 ;; 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
4290 ;; 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
4291 (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
4292
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4293 (goto-char safe-pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4294 t)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4295
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4296 (defun c-forward-<>-arglist (all-types)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4297 ;; The point is assumed to be at a "<". Try to treat it as the open
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4298 ;; paren of an angle bracket arglist and move forward to the the
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4299 ;; 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
4300 ;; ">" 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
4301 ;; 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
4302 ;; 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
4303 ;;
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4304 ;; 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
4305 ;; 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
4306 ;; separating commas.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4307 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4308 ;; `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
4309 ;; arglist recognition should be.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4310 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4311 ;; This function records identifier ranges on
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4312 ;; `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
4313 ;; `c-record-type-identifiers' is non-nil.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4314 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4315 ;; 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
4316
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4317 (let ((start (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4318 ;; 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
4319 ;; 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
4320 ;; the arglist.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4321 (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
4322 (if (catch 'angle-bracket-arglist-escape
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4323 (setq c-record-found-types
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4324 (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
4325 (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4326 (when (consp c-record-found-types)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4327 (setq c-record-type-identifiers
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4328 ;; `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
4329 ;; `c-record-found-types' is t.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4330 (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
4331 t)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4332
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4333 (goto-char start)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4334 nil)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4335
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4336 (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
4337 ;; Recursive part of `c-forward-<>-arglist'.
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4338 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4339 ;; 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
4340
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4341 (let ((start (point)) res pos tmp
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4342 ;; 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
4343 ;; 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
4344 ;; 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
4345 ;; on successful completion.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4346 (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
4347 ;; 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
4348 ;; separating ',' in the arglist.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4349 arg-start-pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4350
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4351 ;; 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
4352 ;; 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
4353 (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
4354 (c-get-char-property (point) 'syntax-table))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4355
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4356 (progn
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4357 (forward-char)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4358 (if (and (c-go-up-list-forward)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4359 (eq (char-before) ?>))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4360 t
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4361
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4362 ;; 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
4363 ;; 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
4364 ;; 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
4365 ;; 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
4366 ;; to narrowing or some temporary change.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4367 (goto-char start)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4368 nil))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4369
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4370 (forward-char)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4371 (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
4372 (while (and
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4373 (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4374
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4375 (when c-record-type-identifiers
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4376 (if all-types
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4377
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4378 ;; 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
4379 ;; promote flag and parse the type.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4380 (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4381 (c-forward-syntactic-ws)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4382 (when (looking-at c-identifier-start)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4383 (let ((c-promote-possible-types t))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4384 (c-forward-type))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4385
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4386 ;; 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
4387 ;; 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
4388 ;; `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
4389 ;; 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
4390 ;; 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
4391 ;; angle bracket arglist afterall.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4392 (when (memq (char-before) '(?, ?<))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4393 (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
4394 (c-forward-syntactic-ws)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4395 (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
4396 (not (looking-at "[,>]"))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4397 ;; 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
4398 ;; 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
4399 ;; `c-record-found-types'.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4400 (setq c-record-found-types
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4401 orig-record-found-types))))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4402
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4403 (setq pos (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4404 (or (when (eq (char-after) ?>)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4405 ;; 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
4406 ;; 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
4407 ;; using \\=.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4408 (forward-char)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4409 t)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4410
53073
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
4411 ;; 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
4412 ;; 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
4413 (c-syntactic-re-search-forward
53073
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
4414 (if c-restricted-<>-arglists
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
4415 ;; Stop on ',', '|', '&', '+' and '-' to catch
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
4416 ;; common binary operators that could be between
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
4417 ;; 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
4418 "[<;{},|&+-]\\|\\([^>:-]>\\)"
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
4419 ;; 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
4420 ;; argument start positions.
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
4421 "[<;{},]\\|\\([^>:-]>\\)")
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
4422 nil 'move t t 1)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4423
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4424 ;; 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
4425 ;; 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
4426 ;; 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
4427 ;; 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
4428 ;; 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
4429 (when (eq (char-after) ?>)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4430 (forward-char)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4431 t)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4432
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4433 (cond
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4434 ((eq (char-before) ?>)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4435 ;; 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
4436 ;; the angle bracket arglist.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4437
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4438 (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
4439 (progn
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4440 (goto-char (match-end 0))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4441 t) ; Continue the loop.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4442
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4443 ;; The angle bracket arglist is finished.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4444 (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
4445 (while arg-start-pos
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4446 (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
4447 'c-<>-arg-sep)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4448 (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
4449 (c-mark-<-as-paren start)
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4450 (c-mark->-as-paren (1- (point))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4451 (setq res t)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4452 nil)) ; Exit the loop.
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4453
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4454 ((eq (char-before) ?<)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4455 ;; 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
4456
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4457 (setq pos (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4458 (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
4459 (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
4460 (setq tmp (match-end 0))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4461 (setq tmp pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4462 (backward-char)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4463 (not
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4464 (and
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4465
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4466 (save-excursion
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4467 ;; 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
4468 ;; bracket arglist, or a keyword in
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4469 ;; `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
4470 (c-backward-syntactic-ws)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4471 (setq id-end (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4472 (c-simple-skip-symbol-backward)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4473 (when (or (setq keyword-match
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4474 (looking-at c-opt-<>-sexp-key))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4475 (not (looking-at c-keywords-regexp)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4476 (setq id-start (point))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4477
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4478 (setq subres
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4479 (let ((c-record-type-identifiers nil)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4480 (c-record-found-types nil))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4481 (c-forward-<>-arglist-recur
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4482 (and keyword-match
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4483 (c-keyword-member
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4484 (c-keyword-sym (match-string 1))
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4485 'c-<>-type-kwds)))))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4486 )))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4487
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4488 ;; 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
4489 (goto-char tmp)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4490
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4491 ;; It was an angle bracket arglist.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4492 (setq c-record-found-types subres)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4493
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4494 ;; 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
4495 ;; 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
4496 ;; in a qualified identifier.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4497 (when (and c-record-type-identifiers
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4498 (not keyword-match))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4499 (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
4500 (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4501 (c-forward-syntactic-ws)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4502 (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
4503 (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
4504 (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
4505 t)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4506
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4507 ((and (eq (char-before) ?,)
53073
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
4508 (not c-restricted-<>-arglists))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4509 ;; 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
4510 ;; 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
4511 ;; the top of the loop.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4512 (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
4513
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4514 (t
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4515 ;; 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
4516 ;; arglist argument. Abort using `throw', since
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4517 ;; 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
4518 ;; if we're nested.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4519 (throw 'angle-bracket-arglist-escape nil))))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4520
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4521 (if res
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4522 (or c-record-found-types t)))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4523
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4524 (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
4525 ;; 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
4526 ;; 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
4527 ;; 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
4528 ;; 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
4529 ;; 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
4530 ;; `c-forward-<>-arglist'.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4531 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4532 ;; 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
4533 ;; 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
4534 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4535 ;; 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
4536 ;; function for more details.
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 (let ((start (point)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4539 (backward-char)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4540 (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
4541 (c-get-char-property (point) 'syntax-table))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4542
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4543 (if (and (c-go-up-list-backward)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4544 (eq (char-after) ?<))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4545 t
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4546 ;; See corresponding note in `c-forward-<>-arglist'.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4547 (goto-char start)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4548 nil)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4549
75027
9f636bd65206 Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents: 74372
diff changeset
4550 (while (progn
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4551 (c-syntactic-skip-backward "^<;{}" limit t)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4552
75027
9f636bd65206 Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents: 74372
diff changeset
4553 (and
9f636bd65206 Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents: 74372
diff changeset
4554 (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
4555 t
9f636bd65206 Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents: 74372
diff changeset
4556 ;; 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
4557 ;; 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
4558 (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
4559 nil)
9f636bd65206 Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents: 74372
diff changeset
4560
9f636bd65206 Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents: 74372
diff changeset
4561 (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
4562 (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
4563 (point)))
9f636bd65206 Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents: 74372
diff changeset
4564 ;; 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
4565 ;; 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
4566 t
9f636bd65206 Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents: 74372
diff changeset
4567
9f636bd65206 Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents: 74372
diff changeset
4568 (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
4569 (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
4570 (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
4571 (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
4572 ;; 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
4573 (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
4574 nil)
9f636bd65206 Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents: 74372
diff changeset
4575 ((> (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
4576 ;; 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
4577 ;; arglist.
9f636bd65206 Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents: 74372
diff changeset
4578 (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
4579 nil)
9f636bd65206 Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents: 74372
diff changeset
4580 (t
9f636bd65206 Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents: 74372
diff changeset
4581 ;; 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
4582 ;; 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
4583 (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
4584 t))
9f636bd65206 Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents: 74372
diff changeset
4585 t))))))
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4586
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4587 (/= (point) start))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4588
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4589 (defun c-forward-name ()
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4590 ;; 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
4591 ;; 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
4592 ;; 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
4593 ;; 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
4594 ;; 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
4595 ;; 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
4596 ;; 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
4597 ;; 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
4598 ;; 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
4599 ;; 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
4600 ;; 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
4601 ;; 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
4602 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4603 ;; This function records identifier ranges on
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4604 ;; `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
4605 ;; `c-record-type-identifiers' is non-nil.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4606 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4607 ;; This function might do hidden buffer changes.
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 (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
4610 ;; 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
4611 ;; 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
4612 ;; 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
4613 ;; 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
4614 ;; 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
4615 ;; be promoted.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4616 c-promote-possible-types)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4617 (while
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4618 (and
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4619 (looking-at c-identifier-key)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4620
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4621 (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4622 ;; 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
4623 ;; `c-identifier-key' first.
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4624 (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
4625 (c-simple-skip-symbol-backward)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4626 (setq id-start (point))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4627
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4628 (if (looking-at c-keywords-regexp)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4629 (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
4630 (looking-at
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4631 (cc-eval-when-compile
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4632 (concat "\\(operator\\|\\(template\\)\\)"
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4633 "\\(" (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
4634 "\\|$\\)")))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4635 (if (match-beginning 2)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4636 ;; "template" is only valid inside an
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4637 ;; identifier if preceded by "::".
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4638 (save-excursion
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4639 (c-backward-syntactic-ws)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4640 (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
4641 (looking-at "::")))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4642 t))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4643
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4644 ;; 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
4645 (goto-char id-end)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4646 (c-forward-syntactic-ws)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4647 (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
4648 ;; Got "... ::template".
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4649 (let ((subres (c-forward-name)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4650 (when subres
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4651 (setq pos (point)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4652 res subres))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4653
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4654 ((looking-at c-identifier-start)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4655 ;; Got a cast operator.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4656 (when (c-forward-type)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4657 (setq pos (point)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4658 res 'operator)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4659 ;; 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
4660 ;; '*', '&' or a name followed by ":: *",
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4661 ;; 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
4662 ;; of `c-opt-type-modifier-key'.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4663 (while (cond ((looking-at "[*&]")
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4664 (goto-char (match-end 0))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4665 t)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4666 ((looking-at c-identifier-start)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4667 (and (c-forward-name)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4668 (looking-at "::")
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4669 (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4670 (goto-char (match-end 0))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4671 (c-forward-syntactic-ws)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4672 (eq (char-after) ?*))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4673 (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4674 (forward-char)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4675 t))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4676 (while (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4677 (c-forward-syntactic-ws)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4678 (setq pos (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4679 (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
4680 (goto-char (match-end 1))))))
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 ((looking-at c-overloadable-operators-regexp)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4683 ;; Got some other operator.
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4684 (setq c-last-identifier-range
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4685 (cons (point) (match-end 0)))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4686 (goto-char (match-end 0))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4687 (c-forward-syntactic-ws)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4688 (setq pos (point)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4689 res 'operator)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4690
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4691 nil)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4692
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4693 ;; `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
4694 ;; 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
4695 ;; 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
4696 ;; form "foo.bar.*".
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4697 (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
4698 (setq c-last-identifier-range
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4699 (cons id-start id-end)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4700 (goto-char id-end)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4701 (c-forward-syntactic-ws)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4702 (setq pos (point)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4703 res t)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4704
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4705 (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4706 (goto-char pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4707 (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
4708 c-recognize-<>-arglists)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4709
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4710 (cond
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4711 ((and c-opt-identifier-concat-key
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4712 (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
4713 ;; 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
4714 ;; 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
4715 ;; covered in `c-identifier-key'.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4716 (goto-char (match-end 0))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4717 (c-forward-syntactic-ws)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4718 t)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4719
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4720 ((and c-recognize-<>-arglists
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4721 (eq (char-after) ?<))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4722 ;; Maybe an angle bracket arglist.
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4723
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4724 (when (let (c-record-type-identifiers
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4725 c-record-found-types)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4726 (c-forward-<>-arglist nil))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4727
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4728 (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
4729 (c-forward-syntactic-ws)
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4730 (setq pos (point)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4731 c-last-identifier-range nil)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4732
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4733 (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
4734 (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
4735
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4736 ;; 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
4737 ;; operator after the template argument.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4738 (progn
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4739 (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
4740 (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
4741 (forward-char 2)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4742 (c-forward-syntactic-ws)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4743 t)
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4744
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4745 (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
4746 (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
4747 (setq res 'template)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4748 nil)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4749 )))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4750
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4751 (goto-char pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4752 res))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4753
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4754 (defun c-forward-type ()
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4755 ;; 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
4756 ;; 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
4757 ;; 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
4758 ;; 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
4759 ;; '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
4760 ;; 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
4761 ;; 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
4762 ;; 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
4763 ;; of a token.
51714
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 ;; 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
4766 ;; 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
4767 ;; "enum {a, b, c} foo".
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4768 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4769 ;; This function records identifier ranges on
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4770 ;; `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
4771 ;; `c-record-type-identifiers' is non-nil.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4772 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4773 ;; This function might do hidden buffer changes.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4774
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4775 (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
4776
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4777 ;; 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
4778 ;; prefix of a type.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4779 (when c-opt-type-modifier-key
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4780 (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
4781 (goto-char (match-end 1))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4782 (c-forward-syntactic-ws)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4783 (setq res 'prefix)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4784
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4785 (cond
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4786 ((looking-at c-type-prefix-key)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4787 ;; 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
4788 ;; e.g. "class".
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4789 (goto-char (match-end 1))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4790 (c-forward-syntactic-ws)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4791 (setq pos (point))
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4792 (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
4793 (progn
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4794 (when (eq name-res t)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4795 ;; 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
4796 ;; 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
4797 (c-add-type pos (point))
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4798 (when (and c-record-type-identifiers
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4799 c-last-identifier-range)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4800 (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
4801 (setq res t))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4802 ;; Invalid syntax.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4803 (goto-char start)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4804 (setq res nil)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4805
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4806 ((progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4807 (setq pos nil)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4808 (if (looking-at c-identifier-start)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4809 (save-excursion
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4810 (setq id-start (point)
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4811 name-res (c-forward-name))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4812 (when name-res
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4813 (setq id-end (point)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4814 id-range c-last-identifier-range))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4815 (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
4816 (setq res t))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4817 ((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
4818 (looking-at c-known-type-key))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4819 (setq res 'known)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4820 (or (not id-end)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4821 (>= (save-excursion
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4822 (save-match-data
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4823 (goto-char (match-end 1))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4824 (c-forward-syntactic-ws)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4825 (setq pos (point))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4826 id-end)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4827 (setq res nil))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4828 ;; 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
4829 ;; 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
4830 ;; 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
4831
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4832 (setq id-end (match-end 1))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4833
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4834 (when (and c-record-type-identifiers
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4835 (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
4836 (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
4837
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4838 (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
4839 (save-match-data
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4840 (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
4841 ;; 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
4842 (let (safe-pos)
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4843 (c-forward-keyword-clause 1)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4844 (while (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4845 (setq safe-pos (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4846 (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
4847 (when (and c-record-type-identifiers
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4848 (looking-at c-primitive-type-key))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4849 (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
4850 (match-end 1))))
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4851 (c-forward-keyword-clause 1))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4852 (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
4853 (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4854 (when c-record-type-identifiers
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4855 (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
4856 (match-end 1))))
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4857 (c-forward-keyword-clause 1)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4858 (setq res t))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4859 (goto-char safe-pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4860 (setq res 'prefix)))
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4861 (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
4862 (if pos
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4863 (goto-char pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4864 (goto-char (match-end 1))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4865 (c-forward-syntactic-ws)))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4866
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4867 (name-res
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4868 (cond ((eq name-res t)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4869 ;; A normal identifier.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4870 (goto-char id-end)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4871 (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
4872 (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4873 (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
4874 (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
4875 (c-record-type-id id-range))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4876 (unless res
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4877 (setq res 'found)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4878 (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
4879 ;; 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
4880 ;; a type somewhere else.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4881 'found
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4882 ;; 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
4883 'maybe))))
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4884 ((eq name-res 'template)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4885 ;; A template is a type.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4886 (goto-char id-end)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4887 (setq res t))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4888 (t
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4889 ;; 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
4890 (goto-char start)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4891 (setq res nil)))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4892
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4893 (when res
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4894 ;; 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
4895 ;; a type.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4896 (when c-opt-type-modifier-key
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4897 (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
4898 (goto-char (match-end 1))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4899 (c-forward-syntactic-ws)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4900 (setq res t)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4901
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4902 ;; 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
4903 ;; 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
4904 ;; 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
4905 ;; too.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4906 (when c-opt-type-suffix-key
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4907 (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
4908 (goto-char (match-end 1))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4909 (c-forward-syntactic-ws)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4910
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4911 (when c-opt-type-concat-key
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4912 ;; 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
4913 ;; 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
4914 ;; 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
4915 ;; 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
4916 ;; are recorded when appropriate.
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4917 (setq pos (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4918 (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
4919 c-promote-possible-types))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4920 ;; 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
4921 ;; 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
4922 ;; 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
4923 (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
4924 (not c-promote-possible-types)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4925 subres)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4926 (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
4927
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4928 (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4929 (goto-char (match-end 1))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4930 (c-forward-syntactic-ws)
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4931 (setq subres (c-forward-type))))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4932
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4933 (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4934 ;; 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
4935 ;; 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
4936 ;; uncertain types to a certain one.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4937 (cond ((eq res t))
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4938 ((eq subres t)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4939 (unless (eq name-res 'template)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4940 (c-add-type id-start id-end))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4941 (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
4942 (c-record-type-id id-range))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4943 (setq res t))
56646
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
4944 ((eq res 'known))
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4945 ((eq subres 'known)
56646
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
4946 (setq res 'known))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4947 ((eq res 'found))
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4948 ((eq subres 'found)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4949 (setq res 'found))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4950 (t
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4951 (setq res 'maybe)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4952
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4953 (when (and (eq res t)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4954 (consp c-record-found-types))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4955 ;; 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
4956 ;; `c-forward-type'.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4957 (setq c-record-type-identifiers
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4958 ;; `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
4959 ;; `c-record-found-types' is t.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4960 (nconc c-record-found-types
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4961 c-record-type-identifiers))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4962
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4963 (goto-char pos))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4964
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4965 (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
4966 (setq c-record-found-types
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4967 (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
4968
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4969 ;;(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
4970
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4971 res))
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
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4974 ;; 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
4975
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4976 ;; 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
4977 ;; 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
4978 ;; 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
4979 (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
4980 ;; `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
4981 ;; 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
4982 ;; 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
4983 ;; 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
4984 ;; an identifier instead.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4985 `(progn
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4986 ,(unless short
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4987 ;; 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
4988 '(setq identifier-type at-type
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4989 identifier-start type-start
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4990 got-parens nil
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4991 got-identifier t
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4992 got-suffix t
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4993 got-suffix-after-parens id-start
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4994 paren-depth 0))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4995
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4996 (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
4997 t
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4998 backup-at-type))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
4999 (setq type-start backup-type-start
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5000 id-start backup-id-start)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5001 (setq type-start start-pos
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5002 id-start start-pos))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5003
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5004 ;; 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
5005 ;; unconditionally signal these attributes - backtracking doesn't
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5006 ;; 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
5007 (or at-type-decl
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5008 (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
5009 (or maybe-typeless
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5010 (setq maybe-typeless backup-maybe-typeless))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5011
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5012 ,(unless short
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5013 ;; 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
5014 '(setq start id-start))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5015
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5016 (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
5017 ;; 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
5018 ;; 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
5019 ;; 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
5020 ;; is clobbered in that case.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5021 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5022 ;; If a declaration is parsed:
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 ;; 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
5025 ;; declarator, if there is one. The return value is a cons where
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5026 ;; the car is the position of the first token in the declarator.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5027 ;; Some examples:
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5028 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5029 ;; void foo (int a, char *b) stuff ...
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5030 ;; car ^ ^ point
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5031 ;; float (*a)[], b;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5032 ;; car ^ ^ point
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5033 ;; unsigned int a = c_style_initializer, b;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5034 ;; car ^ ^ point
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5035 ;; unsigned int a (cplusplus_style_initializer), b;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5036 ;; car ^ ^ point (might change)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5037 ;; class Foo : public Bar {}
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5038 ;; car ^ ^ point
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5039 ;; class PikeClass (int a, string b) stuff ...
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5040 ;; car ^ ^ point
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5041 ;; enum bool;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5042 ;; car ^ ^ point
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5043 ;; enum bool flag;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5044 ;; car ^ ^ point
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5045 ;; void cplusplus_function (int x) throw (Bad);
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5046 ;; car ^ ^ point
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5047 ;; Foo::Foo (int b) : Base (b) {}
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5048 ;; car ^ ^ point
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5049 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5050 ;; The cdr of the return value is non-nil iff a
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5051 ;; `c-typedef-decl-kwds' specifier is found in the declaration,
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5052 ;; i.e. the declared identifier(s) are types.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5053 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5054 ;; If a cast is parsed:
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5055 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5056 ;; 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
5057 ;; 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
5058 ;; 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
5059 ;; to recognize it.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5060 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5061 ;; 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
5062 ;; 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
5063 ;; 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
5064 ;; 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
5065 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5066 ;; CONTEXT is a symbol that describes the context at the point:
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5067 ;; 'decl In a comma-separatded declaration context (typically
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5068 ;; inside a function declaration arglist).
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5069 ;; '<> In an angle bracket arglist.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5070 ;; 'arglist Some other type of arglist.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5071 ;; nil Some other context or unknown context.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5072 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5073 ;; 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
5074 ;; 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
5075 ;; `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
5076 ;; 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
5077 ;; 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
5078 ;; "(a) (b) c".
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5079 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5080 ;; This function records identifier ranges on
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5081 ;; `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
5082 ;; `c-record-type-identifiers' is non-nil.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5083 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5084 ;; This function might do hidden buffer changes.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5085
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5086 (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
5087 ;; 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
5088 ;; 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
5089 ;; whitespace.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5090 (start-pos (point))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5091 ;; 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
5092 at-type
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5093 ;; 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
5094 ;; 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
5095 ;; specifiers and their associated clauses.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5096 type-start
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5097 ;; 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
5098 ;; 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
5099 ;; 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
5100 ;; `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
5101 ;; occurs after the type.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5102 id-start
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5103 ;; 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
5104 ;; 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
5105 ;; 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
5106 ;; 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
5107 ;; 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
5108 ;; undefined values.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5109 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
5110 ;; 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
5111 ;; identifier(s) types.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5112 at-type-decl
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5113 ;; 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
5114 ;; where there's no type.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5115 maybe-typeless
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5116 ;; 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
5117 ;; 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
5118 ;; 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
5119 ;; 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
5120 ;; interpret it as a type.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5121 backup-at-type-decl backup-maybe-typeless
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5122 ;; 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
5123 ;; 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
5124 ;; 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
5125 ;; 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
5126 ;; specifier keyword (a 100% sure sign).
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5127 at-decl-or-cast
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5128 ;; 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
5129 ;; but not as a cast.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5130 backup-if-not-cast
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5131 ;; For casts, the return position.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5132 cast-end
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5133 ;; Save `c-record-type-identifiers' and
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5134 ;; `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
5135 ;; 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
5136 ;; 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
5137 (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
5138 (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
5139
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5140 ;; 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
5141 ;; 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
5142 ;; 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
5143 ;; specifiers after them too.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5144 (while
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5145 (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
5146
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5147 ;; Look for a specifier keyword clause.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5148 (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
5149 (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
5150 (save-excursion
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5151 (c-forward-keyword-clause 1)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5152 (setq kwd-clause-end (point))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5153
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5154 (when (setq found-type (c-forward-type))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5155 ;; 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
5156
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5157 (when at-type
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5158 ;; Got two identifiers with nothing but whitespace
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5159 ;; 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
5160 (setq at-decl-or-cast 'ids)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5161
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5162 (when (eq at-type 'found)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5163 ;; 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
5164 ;; 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
5165 ;; alias for a prefix like "unsigned".
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5166 (save-excursion
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5167 (goto-char type-start)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5168 (let ((c-promote-possible-types t))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5169 (c-forward-type)))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5170
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5171 (setq backup-at-type at-type
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5172 backup-type-start type-start
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5173 backup-id-start id-start
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5174 at-type found-type
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5175 type-start start
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5176 id-start (point)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5177 ;; The previous ambiguous specifier/type turned out
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5178 ;; 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
5179 ;; it, so clear these backup flags.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5180 backup-at-type-decl nil
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5181 backup-maybe-typeless 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 (if kwd-sym
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5184 (progn
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5185 ;; Handle known specifier keywords and
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5186 ;; `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
5187 ;; types.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5188
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5189 (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
5190 ;; 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
5191 (progn
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5192 (setq at-decl-or-cast t)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5193 (if at-type
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5194 ;; Move the identifier start position if
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5195 ;; we've passed a type.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5196 (setq id-start kwd-clause-end)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5197 ;; Otherwise treat this as a specifier and
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5198 ;; move the fallback position.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5199 (setq start-pos kwd-clause-end))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5200 (goto-char kwd-clause-end))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5201
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5202 ;; 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
5203 ;; 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
5204 (setq backup-at-type nil
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5205 start-pos kwd-clause-end)
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 (if found-type
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5208 ;; 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
5209 ;; 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
5210 ;; 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
5211 ;; moved further than `c-forward-keyword-clause'.)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5212 (progn
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5213 (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
5214 (setq backup-at-type-decl t))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5215 (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
5216 (setq backup-maybe-typeless t)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5217
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5218 (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
5219 (setq at-type-decl t))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5220 (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
5221 (setq maybe-typeless t))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5222
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5223 ;; 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
5224 ;; 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
5225 ;; declaration.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5226 (setq at-decl-or-cast t)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5227
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5228 (goto-char kwd-clause-end))))
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 ;; 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
5231 ;; 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
5232 ;; 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
5233 ;; like "unsigned INT16" work.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5234 (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
5235
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5236 (cond
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5237 ((eq at-type t)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5238 ;; 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
5239 ;; 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
5240 ;; been done in the loop above.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5241 (while (looking-at c-decl-hangon-key)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5242 (c-forward-keyword-clause 1))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5243 (setq id-start (point)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5244
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5245 ((eq at-type 'prefix)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5246 ;; 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
5247 ;; followed by another type.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5248 (setq at-type t))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5249
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5250 ((not at-type)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5251 ;; 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
5252 ;; 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
5253 ;; type.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5254 (setq id-start start-pos))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5255
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5256 ((and (eq at-type 'maybe)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5257 (c-major-mode-is 'c++-mode))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5258 ;; 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
5259 ;; "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
5260 ;; (con|de)structor.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5261 (save-excursion
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5262 (let (name end-2 end-1)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5263 (goto-char id-start)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5264 (c-backward-syntactic-ws)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5265 (setq end-2 (point))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5266 (when (and
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5267 (c-simple-skip-symbol-backward)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5268 (progn
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5269 (setq name
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5270 (buffer-substring-no-properties (point) end-2))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5271 ;; 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
5272 (< (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
5273 (progn
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5274 (setq end-1 (point))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5275 (c-simple-skip-symbol-backward))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5276 (>= (point) type-start)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5277 (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
5278 name))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5279 ;; 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
5280 ;; 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
5281 ;; 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
5282 (goto-char type-start)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5283 (setq at-type nil
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5284 backup-at-type nil
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5285 id-start type-start))))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5286
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5287 ;; 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
5288 ;; 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
5289 ;; 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
5290 ;; `max-type-decl-end-*'.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5291 (let ((start (point)) (paren-depth 0) pos
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5292 ;; 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
5293 ;; `c-type-decl-prefix-key'.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5294 got-prefix
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5295 ;; 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
5296 got-parens
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5297 ;; 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
5298 got-identifier
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5299 ;; 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
5300 ;; `c-type-decl-suffix-key'.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5301 got-suffix
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5302 ;; 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
5303 ;; paren pair that surrounds the declarator.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5304 got-prefix-before-parens
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5305 y ;; True if there's a suffix match outside the outermost
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5306 ;; 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
5307 ;; the position of the first suffix match.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5308 got-suffix-after-parens
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5309 ;; 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
5310 ;; known to end declarations in this context.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5311 at-decl-end
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5312 ;; 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
5313 ;; shifted the type backwards.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5314 identifier-type identifier-start
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5315 ;; 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
5316 ;; 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
5317 ;; 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
5318 ;; 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
5319 ;; `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
5320 ;; arglist paren that gets entered.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5321 c-parse-and-markup-<>-arglists)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5322
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5323 (goto-char id-start)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5324
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5325 ;; 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
5326 ;; `c-font-lock-declarators'.)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5327 (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
5328 (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
5329 (match-beginning 2))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5330 ;; 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
5331 ;; 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
5332 ;; 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
5333 (when (setq got-identifier (c-forward-name))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5334 (if (looking-at "\\(::\\)")
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5335 ;; We only check for a trailing "::" and
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5336 ;; let the "*" that should follow be
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5337 ;; matched in the next round.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5338 (progn (setq got-identifier nil) t)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5339 ;; 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
5340 ;; so stop.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5341 nil))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5342 t))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5343
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5344 (if (eq (char-after) ?\()
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5345 (progn
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5346 (setq paren-depth (1+ paren-depth))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5347 (forward-char))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5348 (unless got-prefix-before-parens
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5349 (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
5350 (setq got-prefix t)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5351 (goto-char (match-end 1)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5352 (c-forward-syntactic-ws))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5353
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5354 (setq got-parens (> paren-depth 0))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5355
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5356 ;; Skip over an identifier.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5357 (or got-identifier
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5358 (and (looking-at c-identifier-start)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5359 (setq got-identifier (c-forward-name))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5360
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5361 ;; Skip over type decl suffix operators.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5362 (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
5363
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5364 (if (eq (char-after) ?\))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5365 (when (> paren-depth 0)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5366 (setq paren-depth (1- paren-depth))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5367 (forward-char)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5368 t)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5369 (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
5370 (c-safe (c-forward-sexp 1) t)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5371 (goto-char (match-end 1))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5372 t)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5373 (when (and (not got-suffix-after-parens)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5374 (= paren-depth 0))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5375 (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
5376 (setq got-suffix t)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5377
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5378 ;; 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
5379 ;; 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
5380 ;; 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
5381 ;; case we should "backtrack": Reinterpret the last
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5382 ;; 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
5383 ;; continue searching for suffix operators.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5384 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5385 ;; 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
5386 ;; 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
5387 ;; (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
5388 ;; 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
5389 ;; arglist context, though.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5390 (when (and (= paren-depth 1)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5391 (not got-prefix-before-parens)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5392 (not (eq at-type t))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5393 (or backup-at-type
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5394 maybe-typeless
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5395 backup-maybe-typeless
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5396 (when c-recognize-typeless-decls
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5397 (not context)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5398 (setq pos (c-up-list-forward (point)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5399 (eq (char-before pos) ?\)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5400 (c-fdoc-shift-type-backward)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5401 (goto-char pos)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5402 t))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5403
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5404 (c-forward-syntactic-ws))
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 (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
5407 (not got-identifier)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5408 (not got-prefix)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5409 at-type)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5410 ;; 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
5411 ;; 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
5412 ;; preceding type must be the identifier instead.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5413 (c-fdoc-shift-type-backward))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5414
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5415 (setq
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5416 at-decl-or-cast
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5417 (catch 'at-decl-or-cast
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5418
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5419 (when (> paren-depth 0)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5420 ;; 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
5421 ;; 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
5422 ;; 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
5423 ;; not confuse the cast check below.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5424 (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
5425 ;; 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
5426 ;; declaration regardless.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5427 (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
5428
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5429 (setq at-decl-end
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5430 (looking-at (cond ((eq context '<>) "[,>]")
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5431 (context "[,\)]")
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5432 (t "[,;]"))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5433
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5434 ;; 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
5435 ;; 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
5436 ;; 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
5437 ;; signs before less certain ones.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5438
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5439 (if got-identifier
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5440 (progn
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5441
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5442 (when (and (or at-type maybe-typeless)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5443 (not (or got-prefix got-parens)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5444 ;; 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
5445 ;; declaration.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5446 (throw 'at-decl-or-cast t))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5447
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5448 (when (and got-parens
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5449 (not got-prefix)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5450 (not got-suffix-after-parens)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5451 (or backup-at-type
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5452 maybe-typeless
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5453 backup-maybe-typeless))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5454 ;; 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
5455 ;; 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
5456 ;; 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
5457 ;; 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
5458 ;; `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
5459 ;; "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
5460 ;; type one step backward.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5461 (c-fdoc-shift-type-backward)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5462
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5463 ;; Found no identifier.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5464
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5465 (if backup-at-type
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5466 (progn
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5467
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5468 (when (= (point) start)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5469 ;; 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
5470 ;; 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
5471 ;; 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
5472 ;; type, providing it isn't a cast.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5473 (if (eq (char-after) ?:)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5474 ;; 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
5475 ;; declaration regardless.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5476 (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
5477 (setq backup-if-not-cast t)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5478 (throw 'at-decl-or-cast t)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5479
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5480 (when (and got-suffix
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5481 (not got-prefix)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5482 (not got-parens))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5483 ;; 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
5484 ;; 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
5485 ;; 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
5486 ;; type.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5487 (setq backup-if-not-cast t)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5488 (throw 'at-decl-or-cast t)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5489
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5490 (when (eq at-type t)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5491 ;; 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
5492 ;; 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
5493 ;; 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
5494 ;; be left out.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5495 (throw 'at-decl-or-cast t))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5496
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5497 (when (= (point) start)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5498 ;; Only got a single identifier (parsed as a type so far).
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5499 (if (and
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5500 ;; 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
5501 ;; expression.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5502 at-decl-end
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5503 (cond
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5504 ((eq context 'decl)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5505 ;; 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
5506 ;; style declarations and parenthesis style initializers
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5507 ;; 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
5508 ;; 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
5509 ;; (primitive types are handled above).
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5510 (or (and (not c-recognize-knr-p)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5511 (not c-recognize-paren-inits))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5512 (memq at-type '(known found))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5513 ((eq context '<>)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5514 ;; 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
5515 ;; 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
5516 ;; constants in C++.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5517 (memq at-type '(known found)))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5518 (throw 'at-decl-or-cast t)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5519 ;; 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
5520 ;; 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
5521 ;; an invalid/unfinished declaration or cast.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5522 (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
5523
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5524 (if (and got-parens
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5525 (not got-prefix)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5526 (not context)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5527 (not (eq at-type t))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5528 (or backup-at-type
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5529 maybe-typeless
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5530 backup-maybe-typeless
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5531 (when c-recognize-typeless-decls
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5532 (or (not got-suffix)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5533 (not (looking-at
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5534 c-after-suffixed-type-maybe-decl-key))))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5535 ;; 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
5536 ;; 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
5537 ;; 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
5538 ;; "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
5539 ;; above.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5540 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5541 ;; 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
5542 ;; "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
5543 ;; 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
5544 ;; 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
5545 ;; 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
5546 ;; 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
5547 ;; 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
5548 ;; declarator instead.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5549 (c-fdoc-shift-type-backward)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5550
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5551 ;; Still no identifier.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5552
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5553 (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
5554 ;; 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
5555 ;; `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
5556 ;; `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
5557 ;; `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
5558 ;; 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
5559 ;; 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
5560 ;; 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
5561 ;; 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
5562 ;; the point when the fontification was invoked.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5563 (throw 'at-decl-or-cast t))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5564
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5565 (when (and at-type
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5566 (not got-prefix)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5567 (not got-parens)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5568 got-suffix-after-parens
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5569 (eq (char-after got-suffix-after-parens) ?\())
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5570 ;; 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
5571 ;; 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
5572 ;; instantiation expression).
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5573 (throw 'at-decl-or-cast nil))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5574
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5575 (when at-decl-or-cast
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5576 ;; 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
5577 ;; we're in.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5578 (throw 'at-decl-or-cast t))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5579
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5580 (when (and got-identifier
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5581 (not context)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5582 (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
5583 (if (and got-parens
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5584 (not got-prefix)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5585 (not got-suffix)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5586 (not (eq at-type t)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5587 ;; 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
5588 ;; single identifier inside parens. That can only
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5589 ;; 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
5590 ;; 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
5591 ;; Therefore we only do this after
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5592 ;; `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
5593 (progn (c-fdoc-shift-type-backward) t)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5594 got-suffix-after-parens))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5595 ;; 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
5596 (throw 'at-decl-or-cast t))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5597
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5598 (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
5599 (memq at-type '(t known)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5600 ;; 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
5601 ;; function call.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5602 (throw 'at-decl-or-cast t))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5603
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5604 ;; 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
5605 ;; 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
5606 ;; 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
5607 ;; 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
5608 ;; 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
5609 ;; the effort to look for them.)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5610
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5611 (unless (or at-decl-end (looking-at "=[^=]"))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5612 ;; 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
5613 ;; 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
5614 ;; 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
5615 ;; function header.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5616 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5617 ;; *) 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
5618 ;; 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
5619 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5620 ;; 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
5621 ;; 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
5622 ;; invalid/unfinished one.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5623 (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
5624
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5625 ;; 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
5626 ;; not have parsed halfway through an expression.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5627
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5628 (when (memq at-type '(t known))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5629 ;; 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
5630 ;; declaration.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5631 (throw 'at-decl-or-cast t))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5632
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5633 (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
5634 ;; 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
5635 ;; (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
5636 ;; 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
5637 ;; then backed up again in this case.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5638 identifier-type
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5639 (or (memq identifier-type '(found known))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5640 (and (eq (char-after identifier-start) ?~)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5641 ;; `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
5642 ;; 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
5643 ;; 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
5644 ;; 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
5645 ;; operator.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5646 (or (save-excursion
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5647 (goto-char (1+ identifier-start))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5648 (c-forward-syntactic-ws)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5649 (c-with-syntax-table
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5650 c-identifier-syntax-table
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5651 (looking-at c-known-type-key)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5652 (save-excursion
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5653 (goto-char (1+ identifier-start))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5654 ;; We have already parsed the type earlier,
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5655 ;; 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
5656 ;; position instead of redoing it here, but
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5657 ;; 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
5658 ;; position everywhere.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5659 (c-check-type (point)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5660 (progn (c-forward-type)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5661 (point))))))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5662 (throw 'at-decl-or-cast t))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5663
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5664 (if got-identifier
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5665 (progn
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5666 (when (and got-prefix-before-parens
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5667 at-type
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5668 (or at-decl-end (looking-at "=[^=]"))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5669 (not context)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5670 (not got-suffix))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5671 ;; 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
5672 ;; 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
5673 ;; 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
5674 ;; 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
5675 ;; be a function call.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5676 (throw 'at-decl-or-cast t))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5677
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5678 (when (and (or got-suffix-after-parens
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5679 (looking-at "=[^=]"))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5680 (eq at-type 'found)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5681 (not (eq context 'arglist)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5682 ;; 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
5683 ;; 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
5684 ;; 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
5685 ;; 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
5686 (throw 'at-decl-or-cast t)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5687
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5688 (when (and context
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5689 (or got-prefix
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5690 (and (eq context 'decl)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5691 (not c-recognize-paren-inits)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5692 (or got-parens got-suffix))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5693 ;; 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
5694 ;; 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
5695 ;; `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
5696 ;; 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
5697 ;; expressions.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5698 (throw 'at-decl-or-cast t)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5699
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5700 ;; 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
5701 ;; `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
5702 ;; (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
5703 ;; 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
5704 ;; 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
5705 ;; inside an arglist that contains declarations.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5706 (eq context 'decl))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5707
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5708 ;; 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
5709
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5710 (cond
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5711 ;; Check for a cast.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5712 ((save-excursion
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5713 (and
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5714 c-cast-parens
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5715
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5716 ;; 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
5717 (> preceding-token-end (point-min))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5718 (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
5719
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5720 ;; The closing paren should follow.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5721 (progn
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5722 (c-forward-syntactic-ws)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5723 (looking-at "\\s\)"))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5724
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5725 ;; 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
5726 (let (pos)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5727 (forward-char)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5728 (c-forward-syntactic-ws)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5729 (setq cast-end (point))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5730 (and (looking-at c-primary-expr-regexp)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5731 (progn
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5732 (setq pos (match-end 0))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5733 (or
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5734 ;; 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
5735 (match-beginning 2)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5736 (if (match-beginning 1)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5737 ;; Expression begins with an ambiguous operator. Treat
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5738 ;; 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
5739 ;; recognized the type somewhere else.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5740 (or at-decl-or-cast
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5741 (memq at-type '(t known found)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5742 ;; 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
5743 ;; expression.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5744 (not (looking-at c-keywords-regexp)))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5745 ;; 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
5746 ;; 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
5747 ;; 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
5748 ;; 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
5749 ;; operator regexp only matches '.'.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5750 (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
5751 (<= (match-end 0) pos))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5752
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5753 ;; 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
5754 ;; identifier or close paren.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5755 (> preceding-token-end (point-min))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5756 (progn
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5757 (goto-char (1- preceding-token-end))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5758 (or (eq (point) last-cast-end)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5759 (progn
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5760 (c-backward-syntactic-ws)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5761 (if (< (skip-syntax-backward "w_") 0)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5762 ;; 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
5763 ;; keywords that can precede an expression (without
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5764 ;; surrounding parens).
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5765 (looking-at c-simple-stmt-key)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5766 (and
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5767 ;; 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
5768 ;; though).
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5769 (not (memq (char-before) '(?\) ?\])))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5770 ;; 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
5771 (not (c-on-identifier)))))))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5772
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5773 ;; Handle the cast.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5774 (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
5775 (let ((c-promote-possible-types t))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5776 (goto-char type-start)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5777 (c-forward-type)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5778
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5779 (goto-char cast-end)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5780 'cast)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5781
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5782 (at-decl-or-cast
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5783 ;; 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
5784 ;; declarators.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5785
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5786 (when backup-if-not-cast
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5787 (c-fdoc-shift-type-backward t))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5788
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5789 (when (and (eq context 'decl) (looking-at ","))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5790 ;; 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
5791 ;; 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
5792 ;; interactive refontification.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5793 (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
5794
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5795 (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
5796 (let ((c-promote-possible-types t))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5797 (save-excursion
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5798 (goto-char type-start)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5799 (c-forward-type))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5800
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5801 (cons id-start at-type-decl))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5802
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5803 (t
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5804 ;; False alarm. Restore the recorded ranges.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5805 (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
5806 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
5807 nil))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5808
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5809 (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
5810 ;; Assuming that point is at the beginning of a token, check if it starts a
9f636bd65206 Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents: 74372
diff changeset
5811 ;; label and if so move over it and return t, otherwise don't move and
9f636bd65206 Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents: 74372
diff changeset
5812 ;; return nil. "Label" here means "most things with a colon".
9f636bd65206 Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents: 74372
diff changeset
5813 ;;
9f636bd65206 Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents: 74372
diff changeset
5814 ;; More precisely, a "label" is regarded as one of:
9f636bd65206 Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents: 74372
diff changeset
5815 ;; (i) a goto target like "foo:";
9f636bd65206 Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents: 74372
diff changeset
5816 ;; (ii) A case label - either the entire construct "case FOO:" or just the
9f636bd65206 Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents: 74372
diff changeset
5817 ;; bare "case", should the colon be missing;
9f636bd65206 Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents: 74372
diff changeset
5818 ;; (iii) a keyword which needs a colon, like "default:" or "private:";
9f636bd65206 Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents: 74372
diff changeset
5819 ;; (iv) One of QT's "extended" C++ variants of
9f636bd65206 Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents: 74372
diff changeset
5820 ;; "private:"/"protected:"/"public:"/"more:" looking like "public slots:".
9f636bd65206 Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents: 74372
diff changeset
5821 ;; (v) One of the keywords matched by `c-opt-extra-label-key' (without any
9f636bd65206 Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents: 74372
diff changeset
5822 ;; colon). Currently (2006-03), this applies only to Objective C's
9f636bd65206 Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents: 74372
diff changeset
5823 ;; keywords "@private", "@protected", and "@public".
9f636bd65206 Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents: 74372
diff changeset
5824 ;;
9f636bd65206 Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents: 74372
diff changeset
5825 ;; 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
5826 ;; 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
5827 ;;
9f636bd65206 Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents: 74372
diff changeset
5828 ;; 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
5829 ;; 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
5830 ;; 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
5831 ;; `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
5832 ;; statement.
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5833 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5834 ;; 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
5835 ;; 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
5836 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5837 ;; 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
5838 ;; 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
5839 ;; 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
5840 ;; (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
5841 ;; part of) the buffer.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5842 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5843 ;; 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
5844 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5845 ;; 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
5846 ;; `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
5847 ;; non-nil.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5848 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5849 ;; This function might do hidden buffer changes.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5850
75027
9f636bd65206 Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents: 74372
diff changeset
5851 (let ((start (point))
9f636bd65206 Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents: 74372
diff changeset
5852 qt-symbol-idx
9f636bd65206 Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents: 74372
diff changeset
5853 macro-start) ; if we're in one.
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5854 (cond
75027
9f636bd65206 Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents: 74372
diff changeset
5855 ;; "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
5856 ((looking-at c-label-kwds-regexp)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5857 (let ((kwd-end (match-end 1)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5858 ;; 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
5859 ;; 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
5860 ;; a label.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5861 (when c-record-type-identifiers
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5862 (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
5863
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5864 ;; Find the label end.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5865 (goto-char kwd-end)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5866 (if (and (c-syntactic-re-search-forward
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5867 ;; Stop on chars that aren't allowed in expressions,
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5868 ;; and on operator chars that would be meaningless
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5869 ;; there. FIXME: This doesn't cope with ?: operators.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5870 "[;{=,@]\\|\\(\\=\\|[^:]\\):\\([^:]\\|\\'\\)"
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5871 limit t t nil 1)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5872 (match-beginning 2))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5873
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5874 (progn
75027
9f636bd65206 Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents: 74372
diff changeset
5875 (goto-char (match-beginning 2)) ; just after the :
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5876 (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
5877 t)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5878
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5879 ;; It's an unfinished label. We consider the keyword enough
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5880 ;; to recognize it as a label, so that it gets fontified.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5881 ;; Leave the point at the end of it, but don't put any
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5882 ;; `c-decl-end' marker.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5883 (goto-char kwd-end)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5884 t)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5885
75027
9f636bd65206 Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents: 74372
diff changeset
5886 ;; @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
5887 ((and c-opt-extra-label-key
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5888 (looking-at c-opt-extra-label-key))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5889 ;; 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
5890 ;; 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
5891 ;; Objective-C protection labels fontified.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5892 (goto-char (match-end 1))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5893 (when c-record-type-identifiers
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5894 (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
5895 (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
5896 t)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5897
75027
9f636bd65206 Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents: 74372
diff changeset
5898 ;; 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
5899 ((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
5900
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5901 ;; 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
5902 (not (eq (char-after) ?:))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5903
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5904 ;; 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
5905 (or
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5906 ;; 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
5907 (if preceding-token-end
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5908 (<= preceding-token-end (point-min))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5909 (save-excursion
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5910 (c-backward-syntactic-ws)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5911 (setq preceding-token-end (point))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5912 (bobp)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5913
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5914 ;; 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
5915 ;; paren that belong to statement, and with
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5916 ;; `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
5917 ;; 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
5918 ;; different expensiveness.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5919 (if assume-markup
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5920 (or
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5921 (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
5922 'c-decl-end)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5923
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5924 (save-excursion
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5925 (goto-char (1- preceding-token-end))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5926 (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
5927 (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
5928 (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
5929
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5930 (and (eq (char-before preceding-token-end) ?\))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5931 (c-after-conditional)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5932
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5933 (or
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5934 (save-excursion
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5935 (goto-char (1- preceding-token-end))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5936 (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
5937 (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
5938 (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
5939
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5940 (cond
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5941 ((eq (char-before preceding-token-end) ?\))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5942 (c-after-conditional))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5943
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5944 ((eq (char-before preceding-token-end) ?:)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5945 ;; 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
5946 (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
5947 (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
5948 (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
5949 ;; 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
5950 ;; `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
5951 (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
5952 (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
5953 (point))))
9f636bd65206 Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents: 74372
diff changeset
5954 (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
5955 (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
5956 ;; 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
5957 ;; 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
5958 ;; 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
5959 ;; (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
5960 ;; 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
5961 (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
5962 ;; 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
5963 ;; 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
5964 ;; 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
5965 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
5966 ;; 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
5967 ;; 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
5968 (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
5969 (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
5970 (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
5971
9f636bd65206 Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents: 74372
diff changeset
5972 ;; 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
5973 ;; 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
5974 ;; 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
5975 ;; constants.
9f636bd65206 Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents: 74372
diff changeset
5976 (when (c-syntactic-re-search-forward
9f636bd65206 Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents: 74372
diff changeset
5977 "[ \t[:?;{=*/%&|,<>!@+-]" limit t t) ; not at EOB
9f636bd65206 Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents: 74372
diff changeset
5978 (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
5979 (setq qt-symbol-idx
9f636bd65206 Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents: 74372
diff changeset
5980 (and (c-major-mode-is 'c++-mode)
9f636bd65206 Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents: 74372
diff changeset
5981 (string-match
9f636bd65206 Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents: 74372
diff changeset
5982 "\\(p\\(r\\(ivate\\|otected\\)\\|ublic\\)\\|more\\)\\>"
9f636bd65206 Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents: 74372
diff changeset
5983 (buffer-substring start (point)))))
9f636bd65206 Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents: 74372
diff changeset
5984 (c-forward-syntactic-ws limit)
9f636bd65206 Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents: 74372
diff changeset
5985 (when (or (looking-at ":\\([^:]\\|\\'\\)") ; A single colon.
9f636bd65206 Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents: 74372
diff changeset
5986 (and qt-symbol-idx
9f636bd65206 Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents: 74372
diff changeset
5987 (search-forward-regexp "\\=slots\\>" limit t)
9f636bd65206 Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents: 74372
diff changeset
5988 (progn (c-forward-syntactic-ws limit)
9f636bd65206 Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents: 74372
diff changeset
5989 (looking-at ":\\([^:]\\|\\'\\)")))) ; A single colon
9f636bd65206 Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents: 74372
diff changeset
5990 (forward-char) ; to after the colon.
9f636bd65206 Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents: 74372
diff changeset
5991 t)))
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5992
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5993 (save-restriction
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5994 (narrow-to-region start (point))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5995
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5996 ;; 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
5997 (catch 'check-label
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5998 (goto-char start)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
5999 (while (progn
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6000 (when (looking-at c-nonlabel-token-key)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6001 (goto-char start)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6002 (throw 'check-label nil))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6003 (and (c-safe (c-forward-sexp)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6004 (c-forward-syntactic-ws)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6005 t)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6006 (not (eobp)))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6007
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6008 ;; 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
6009 ;; 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
6010 ;; 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
6011 ;; shouldn't be fontified.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6012 (when (and c-record-type-identifiers
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6013 (progn (goto-char start)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6014 (not (looking-at c-label-kwds-regexp))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6015 (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
6016 (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
6017 (match-end 0)))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6018
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6019 (c-put-c-type-property (1- (point-max)) 'c-decl-end)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6020 (goto-char (point-max))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6021 t)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6022
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6023 (t
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6024 ;; Not a label.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6025 (goto-char start)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6026 nil))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6027
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6028 (defun c-forward-objc-directive ()
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6029 ;; 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
6030 ;; 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
6031 ;; 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
6032 ;; 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
6033 ;; nil is returned.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6034 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6035 ;; This function records identifier ranges on
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6036 ;; `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
6037 ;; `c-record-type-identifiers' is non-nil.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6038 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6039 ;; This function might do hidden buffer changes.
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 (let ((start (point))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6042 start-char
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6043 (c-promote-possible-types t)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6044 ;; 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
6045 ;; 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
6046 ;; 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
6047 c-recognize-<>-arglists)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6048
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6049 (if (or
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6050 (when (looking-at
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6051 (eval-when-compile
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6052 (c-make-keywords-re t
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6053 (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
6054 '("@end"))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6055 'objc-mode)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6056 (goto-char (match-end 1))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6057 t)
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 (and
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6060 (looking-at
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6061 (eval-when-compile
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6062 (c-make-keywords-re t
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6063 '("@interface" "@implementation" "@protocol")
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6064 'objc-mode)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6065
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6066 ;; Handle the name of the class itself.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6067 (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
6068 ; (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
6069 ; 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
6070 (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
6071 (c-skip-ws-forward)
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6072 (c-forward-type))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6073
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6074 (catch 'break
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6075 ;; Look for ": superclass-name" or "( category-name )".
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6076 (when (looking-at "[:\(]")
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6077 (setq start-char (char-after))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6078 (forward-char)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6079 (c-forward-syntactic-ws)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6080 (unless (c-forward-type) (throw 'break nil))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6081 (when (eq start-char ?\()
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6082 (unless (eq (char-after) ?\)) (throw 'break nil))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6083 (forward-char)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6084 (c-forward-syntactic-ws)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6085
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6086 ;; Look for a protocol reference list.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6087 (if (eq (char-after) ?<)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6088 (let ((c-recognize-<>-arglists t)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6089 (c-parse-and-markup-<>-arglists t)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6090 c-restricted-<>-arglists)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6091 (c-forward-<>-arglist t))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6092 t))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6093
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6094 (progn
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6095 (c-backward-syntactic-ws)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6096 (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
6097 (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
6098 t)
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 (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
6101 nil)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6102
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6103 (defun c-beginning-of-inheritance-list (&optional lim)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6104 ;; Go to the first non-whitespace after the colon that starts a
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6105 ;; multiple inheritance introduction. Optional LIM is the farthest
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6106 ;; back we should search.
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6107 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6108 ;; This function might do hidden buffer changes.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6109 (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
6110 (c-backward-token-2 0 t lim)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6111 (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
6112 (looking-at "[<,]\\|::"))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6113 (zerop (c-backward-token-2 1 t lim))))))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6114
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6115 (defun c-in-method-def-p ()
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6116 ;; Return nil if we aren't in a method definition, otherwise the
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6117 ;; position of the initial [+-].
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6118 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6119 ;; This function might do hidden buffer changes.
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6120 (save-excursion
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6121 (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
6122 (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
6123 (looking-at c-opt-method-key)
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6124 (point))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6125 ))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6126
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
6127 ;; 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
6128 (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
6129 ;; 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
6130 ;;
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
6131 ;; 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
6132 ;;
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
6133 ;; 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
6134 ;; 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
6135 ;; operand.
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6136 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6137 ;; 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
6138
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
6139 (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
6140 (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
6141 (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
6142 (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
6143 (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
6144 (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
6145
24335
0c4688f9a396 Added c-at-toplevel-p for font-lock.el.
Simon Marshall <simon@gnu.org>
parents: 24282
diff changeset
6146 (defun c-at-toplevel-p ()
0c4688f9a396 Added c-at-toplevel-p for font-lock.el.
Simon Marshall <simon@gnu.org>
parents: 24282
diff changeset
6147 "Return a determination as to whether point is at the `top-level'.
0c4688f9a396 Added c-at-toplevel-p for font-lock.el.
Simon Marshall <simon@gnu.org>
parents: 24282
diff changeset
6148 Being at the top-level means that point is either outside any
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6149 enclosing block (such function definition), or only inside a class,
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6150 namespace or other block that contains another declaration level.
24335
0c4688f9a396 Added c-at-toplevel-p for font-lock.el.
Simon Marshall <simon@gnu.org>
parents: 24282
diff changeset
6151
0c4688f9a396 Added c-at-toplevel-p for font-lock.el.
Simon Marshall <simon@gnu.org>
parents: 24282
diff changeset
6152 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
6153 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
6154 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
6155 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
6156 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
6157 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
6158 brace.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6159
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6160 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
6161 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
6162 (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
6163 (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
6164 (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
6165
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6166 (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
6167 ;; 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
6168 ;; 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
6169 ;; 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
6170 ;; 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
6171 ;; function to recognize it.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6172 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6173 ;; 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
6174 ;; 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
6175 ;; 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
6176 ;; returned.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6177 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6178 ;; The point is clobbered if not successful.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6179 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6180 ;; 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
6181 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6182 ;; This function might do hidden buffer changes.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6183
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6184 (let ((beg (point)) end id-start)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6185 (and
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6186 (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
6187
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6188 (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
6189 (c-forward-objc-directive)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6190
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6191 (setq id-start
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6192 (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
6193 (< id-start beg)
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 ;; 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
6196 ;; 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
6197 ;; "expression part" of the declaration.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6198 (or (> (point) beg)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6199 (not (looking-at "[=,]")))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6200
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6201 (save-excursion
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6202 ;; 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
6203 ;; declaration.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6204 (goto-char id-start)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6205 (cond ((eq (char-after) ?\()
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6206 ;; 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
6207 ;; 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
6208 ;; function arglist.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6209 (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
6210 ((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
6211 (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
6212 ;; Don't trip up on "operator ()".
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6213 (c-forward-token-2 2 t)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6214 (and (< (point) beg)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6215 (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
6216 (1- (point)))))))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6217
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
6218 (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
6219 ;; 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
6220 ;; 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
6221 ;; `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
6222 ;; 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
6223 ;;
75315
656ff90fee33 Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents: 75307
diff changeset
6224 ;; 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
6225 ;; "{". 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
6226 ;; false positives otherwise.
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6227 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6228 ;; 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
6229
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
6230 (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
6231 (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
6232 ;; 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
6233 ;; 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
6234 (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
6235 (lim (max (or lim (point-min)) (or macro-start (point-min))))
656ff90fee33 Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents: 75307
diff changeset
6236 before-lparen after-rparen)
656ff90fee33 Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents: 75307
diff changeset
6237 (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
6238
656ff90fee33 Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents: 75307
diff changeset
6239 ;; 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
6240 ;; 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
6241 ;;
656ff90fee33 Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents: 75307
diff changeset
6242 ;; 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
6243 ;; 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
6244 ;; 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
6245 ;; 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
6246 ;; 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
6247 ;; 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
6248 ;; (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
6249 ;;
656ff90fee33 Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents: 75307
diff changeset
6250 ;; 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
6251 ;; 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
6252 ;; int bar [] ;
656ff90fee33 Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents: 75307
diff changeset
6253 ;; 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
6254 ;; 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
6255 ;; {
656ff90fee33 Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents: 75307
diff changeset
6256
656ff90fee33 Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents: 75307
diff changeset
6257 (catch 'knr
656ff90fee33 Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents: 75307
diff changeset
6258 (while t ; go round one paren/bracket construct each time round.
75623
33cf1027eb42 (c-in-knr-argdecl): Slight correction for, e.g. "void (*hdone)();" in a
Alan Mackenzie <acm@muc.de>
parents: 75347
diff changeset
6259 (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
6260 (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
6261 (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
6262 ((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
6263 (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
6264 (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
6265 (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
6266
656ff90fee33 Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents: 75307
diff changeset
6267 (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
6268 ;; 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
6269 (if
656ff90fee33 Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents: 75307
diff changeset
6270 (and
656ff90fee33 Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents: 75307
diff changeset
6271 (progn
656ff90fee33 Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents: 75307
diff changeset
6272 (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
6273 (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
6274 ;; 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
6275 (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
6276
656ff90fee33 Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents: 75307
diff changeset
6277 ;; 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
6278 (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
6279 (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
6280 (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
6281
656ff90fee33 Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents: 75307
diff changeset
6282 ;; 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
6283 ;; 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
6284 (progn
656ff90fee33 Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents: 75307
diff changeset
6285 (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
6286 (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
6287 (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
6288 (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
6289 (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
6290 (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
6291 (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
6292
656ff90fee33 Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents: 75307
diff changeset
6293 ;; 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
6294 ;; identifiers?
656ff90fee33 Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents: 75307
diff changeset
6295 (progn
656ff90fee33 Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents: 75307
diff changeset
6296 (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
6297 (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
6298 (and
656ff90fee33 Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents: 75307
diff changeset
6299 (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
6300 (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
6301 (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
6302 (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
6303 (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
6304 (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
6305 (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
6306 (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
6307
656ff90fee33 Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents: 75307
diff changeset
6308 ;; ...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
6309 (throw 'knr
656ff90fee33 Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents: 75307
diff changeset
6310 (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
6311 (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
6312 (point)))
656ff90fee33 Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents: 75307
diff changeset
6313
656ff90fee33 Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents: 75307
diff changeset
6314 ;; ...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
6315 (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
6316
656ff90fee33 Reformulate c-in-knr-argdecl to do much more rigorous analysis of
Alan Mackenzie <acm@muc.de>
parents: 75307
diff changeset
6317 (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
6318 (throw 'knr nil)))))))))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6319
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6320 (defun c-skip-conditional ()
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6321 ;; skip forward over conditional at point, including any predicate
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6322 ;; 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
6323 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6324 ;; This function might do hidden buffer changes.
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6325 (c-forward-sexp (cond
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6326 ;; 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
6327 ((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
6328 "\\([ \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
6329 "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
6330 3)
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6331 ;; 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
6332 ((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
6333 "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
6334 "\\)\\>\\([^_]\\|$\\)"))
36920
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
6335 1)
30403
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
6336 ;; for, if, while, switch, catch, synchronized, foreach
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6337 (t 2))))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6338
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
6339 (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
6340 ;; 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
6341 ;; 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
6342 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6343 ;; 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
6344 (save-excursion
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6345 (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
6346 (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
6347 (and (eq (char-after) ?\()
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6348 (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
6349 (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
6350 (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
6351
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6352 (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
6353 ;; 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
6354 ;; 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
6355 ;; 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
6356 ;; 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
6357 ;; 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
6358 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6359 ;; This function might do hidden buffer changes.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6360 (save-excursion
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6361 (and c-overloadable-operators-regexp
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6362 (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
6363 (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
6364 (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
6365 (and
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6366 (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
6367 (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
6368 (point))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6369
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
6370 (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
6371 ;; 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
6372 ;; 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
6373 ;; 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
6374 ;; 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
6375 ;; function.
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6376 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6377 ;; 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
6378 (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
6379 (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
6380 (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
6381 (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
6382
53073
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
6383 (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
6384 ;; 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
6385 ;; 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
6386 ;; that block.
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6387 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6388 ;; 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
6389 (unless (= (point) (c-point 'boi))
53073
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
6390 (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
6391
52107
3a5379a0d7f3 2003-08-01 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents: 51947
diff changeset
6392 (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
6393 ;; 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
6394 ;; 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
6395 ;; 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
6396 ;; 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
6397 ;; (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
6398 ;; _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
6399 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6400 ;; 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
6401
3a5379a0d7f3 2003-08-01 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents: 51947
diff changeset
6402 (let ((base (point)))
3a5379a0d7f3 2003-08-01 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents: 51947
diff changeset
6403 (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
6404
3a5379a0d7f3 2003-08-01 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents: 51947
diff changeset
6405 ;; 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
6406 ;; 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
6407 (while (and
3a5379a0d7f3 2003-08-01 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents: 51947
diff changeset
6408 (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
6409 (or
3a5379a0d7f3 2003-08-01 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents: 51947
diff changeset
6410 (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
6411 ;; 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
6412 ;; 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
6413 (save-excursion
3a5379a0d7f3 2003-08-01 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents: 51947
diff changeset
6414 (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
6415 (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
6416 (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
6417 (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
6418 (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
6419 t
3a5379a0d7f3 2003-08-01 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents: 51947
diff changeset
6420 (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
6421 nil)))))
3a5379a0d7f3 2003-08-01 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents: 51947
diff changeset
6422 (setq base (point)))
3a5379a0d7f3 2003-08-01 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents: 51947
diff changeset
6423
3a5379a0d7f3 2003-08-01 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents: 51947
diff changeset
6424 (while (and
3a5379a0d7f3 2003-08-01 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents: 51947
diff changeset
6425 (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
6426 (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
6427 (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
6428
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
6429 (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
6430 ;; 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
6431 ;; 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
6432 ;; 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
6433 ;; 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
6434 ;; `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
6435 ;; 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
6436 ;; 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
6437 ;; 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
6438 ;; 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
6439 ;;
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
6440 ;; 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
6441 ;; "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
6442 ;; 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
6443 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6444 ;; 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
6445 (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
6446 (let* ((start (point))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6447 (last-stmt-start (point))
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6448 (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
6449
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
6450 ;; `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
6451 ;; 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
6452 ;; 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
6453 ;; or an open paren.
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6454 (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
6455 ;; 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
6456 ;; 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
6457 ;; 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
6458 ;; components are comma separated.
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6459 (while (and
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6460 ;; 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
6461 (not (and c-opt-method-key
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6462 (looking-at c-opt-method-key)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6463 (/= last-stmt-start (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6464 (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6465 (c-backward-syntactic-ws lim)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6466 (not (memq (char-before) '(?\; ?} ?: nil))))
56646
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
6467 (save-excursion
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
6468 (backward-char)
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
6469 (not (looking-at "\\s(")))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6470 ;; 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
6471 ;; macro to its header.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6472 (not (eq (setq tentative-move
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6473 (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
6474 'macro)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6475 (setq last-stmt-start beg
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6476 beg (point)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6477 move tentative-move))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6478 (goto-char beg))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6479
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6480 (when c-recognize-knr-p
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6481 (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
6482 ;; 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
6483 ;; 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
6484 ;; 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
6485 ;; 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
6486 ;; 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
6487 ;; it.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6488 (unless (eq (char-after) ?{)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6489 (goto-char last-stmt-start))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6490 (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
6491 (< knr-argdecl-start start)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6492 (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6493 (goto-char knr-argdecl-start)
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6494 (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
6495 (throw 'return
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6496 (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
6497 'previous
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6498 'same)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6499 knr-argdecl-start))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6500 (goto-char fallback-pos))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6501
75027
9f636bd65206 Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents: 74372
diff changeset
6502 ;; `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
6503 ;; 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
6504 ;; 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
6505 ;;
9f636bd65206 Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents: 74372
diff changeset
6506 ;; 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
6507 ;; 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
6508 ;; 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
6509 ;; 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
6510 ;; 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
6511 ;; 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
6512 (if (and (eq move 'previous)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6513 (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
6514 c++-template-syntax-table
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6515 (syntax-table))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6516 (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
6517 (and
9f636bd65206 Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents: 74372
diff changeset
6518 (progn
9f636bd65206 Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents: 74372
diff changeset
6519 (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
6520 ; 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
6521 (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
6522 (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
6523 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
6524 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
6525 (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
6526 (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
6527 (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
6528 (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
6529 (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
6530 (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
6531 (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
6532 (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
6533 (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
6534 (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
6535 (cons 'same nil)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6536 (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
6537
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
6538 (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
6539 ;; 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
6540 ;; 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
6541 ;; `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
6542 ;; 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
6543 ;; 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
6544 ;; 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
6545 ;; 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
6546 ;; `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
6547 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6548 ;; 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
6549 (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
6550 (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
6551 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
6552 (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
6553 (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
6554 (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
6555
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
6556 (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
6557 (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
6558 (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
6559 ;; 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
6560 ;; 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
6561 ;; `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
6562 ;; start.
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6563 (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
6564
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
6565 (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
6566 ;; 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
6567 (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
6568 (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
6569 (error (goto-char (point-max))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6570 (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
6571 (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
6572 (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
6573 (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
6574 (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
6575 (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
6576 (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
6577 ;; 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
6578 ;; 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
6579 (c-syntactic-re-search-forward
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6580 (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
6581 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
6582 "\\)")
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6583 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
6584 (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
6585 (not (eq (char-before) ?_))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6586 ;; 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
6587 ;; the block.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6588 (c-syntactic-re-search-forward "[;=\(\[{]"
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6589 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
6590 (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
6591 ;; 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
6592 ;; `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
6593 ;; 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
6594 (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
6595
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
6596 (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
6597 (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
6598 (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
6599 (throw 'return t))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6600 (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
6601 nil)))
30403
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
6602
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6603 (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
6604 ;; 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
6605 ;; 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
6606 ;; 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
6607 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6608 ;; 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
6609 ;; 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
6610 ;; 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
6611 ;; 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
6612 ;; 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
6613 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6614 ;; 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
6615 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6616 ;; 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
6617 ;; paren, or nil if none.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6618 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6619 ;; 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
6620 ;; 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
6621 ;; position.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6622 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6623 ;; 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
6624 ;; 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
6625 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6626 ;; This function might do hidden buffer changes.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6627
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6628 (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
6629 (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
6630
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6631 (when (and c-recognize-<>-arglists
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6632 (eq (char-before) ?>))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6633 ;; 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
6634 (let ((c-parse-and-markup-<>-arglists t)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6635 (c-disallow-comma-in-<>-arglists
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6636 (and containing-sexp
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6637 (not (eq (char-after containing-sexp) ?{)))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6638 (while (and
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6639 (c-backward-<>-arglist nil limit)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6640 (progn
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6641 (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
6642 (eq (char-before) ?>))))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6643
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6644 ;; 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
6645 ;; have gotten paren syntax above.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6646 (when (and
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6647 ;; 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
6648 ;; 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
6649 ;; 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
6650 ;; we know it can't match earlier.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6651 (if goto-start
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6652 (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
6653 open-brace t t)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6654 (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
6655 t)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6656 t)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6657
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6658 (cond
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6659 ((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
6660 (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
6661 (or
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6662
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6663 ;; 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
6664 (match-beginning 1)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6665
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6666 ;; 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
6667 ;; 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
6668 ;; block construct starts with a type).
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6669 (not (c-forward-type))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6670
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6671 ;; 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
6672 ;; 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
6673 ;; 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
6674 ;; 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
6675 ;; valid declarator start.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6676 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6677 ;; 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
6678 ;; 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
6679 ;; 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
6680 ;; there's no such language.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6681 (not (or (looking-at c-symbol-start)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6682 (looking-at c-type-decl-prefix-key)))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6683
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6684 ;; 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
6685 ;; 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
6686 ;; 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
6687 ((and (c-major-mode-is 'pike-mode)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6688 (progn
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6689 (goto-char open-brace)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6690 (= (c-backward-token-2) 0))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6691 (looking-at c-specifier-key)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6692 ;; 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
6693 (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
6694 'c-modifier-kwds))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6695 (setq kwd-start (point))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6696 t)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6697
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6698 ;; Got a match.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6699
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6700 (if goto-start
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6701 ;; 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
6702 ;; 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
6703 ;; 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
6704 ;; start.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6705 (progn
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6706 (goto-char first-specifier-pos)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6707
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6708 (while (< (point) kwd-start)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6709 (if (looking-at c-symbol-key)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6710 ;; 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
6711 ;; 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
6712 ;; 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
6713 ;; such tokens).
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6714 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6715 ;; Could be more restrictive wrt invalid keywords,
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6716 ;; 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
6717 ;; no use spending effort on it.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6718 (let ((end (match-end 0)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6719 (unless (c-forward-keyword-clause 0)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6720 (goto-char end)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6721 (c-forward-syntactic-ws)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6722
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6723 ;; 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
6724 ;; 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
6725 ;; was in some earlier construct. Search again.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6726 (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
6727 kwd-start 'move t)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6728 (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
6729 ;; 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
6730 (setq first-specifier-pos kwd-start))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6731
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6732 (goto-char first-specifier-pos))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6733 (goto-char kwd-start))
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 kwd-start)))
30403
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
6736
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
6737 (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
6738 ;; 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
6739 ;; 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
6740 ;; 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
6741 ;; 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
6742 ;; 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
6743 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6744 ;; This function might do hidden buffer changes.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6745 (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
6746 (when open-paren-pos
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6747 (save-excursion
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6748 (goto-char open-paren-pos)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6749 (when (and (eq (char-after) ?{)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6750 (c-looking-at-decl-block
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6751 (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
6752 nil))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6753 (back-to-indentation)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6754 (vector (point) open-paren-pos))))))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6755
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
6756 (defun c-inside-bracelist-p (containing-sexp paren-state)
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6757 ;; return the buffer position of the beginning of the brace list
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6758 ;; statement if we're inside a brace list, otherwise return nil.
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6759 ;; 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
6760 ;; paren. PAREN-STATE is the remainder of the state of enclosing
36920
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
6761 ;; braces
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6762 ;;
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6763 ;; 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
6764 ;; placed in inconvenient locations. It's a trade-off we make for
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6765 ;; speed.
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6766 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6767 ;; This function might do hidden buffer changes.
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6768 (or
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6769 ;; 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
6770 (c-safe
5e5fa0a34cb0 (c-inside-bracelist-p): Fix for enum test.
Richard M. Stallman <rms@gnu.org>
parents: 20914
diff changeset
6771 (save-excursion
5e5fa0a34cb0 (c-inside-bracelist-p): Fix for enum test.
Richard M. Stallman <rms@gnu.org>
parents: 20914
diff changeset
6772 (goto-char containing-sexp)
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6773 (c-forward-sexp -1)
21106
5e5fa0a34cb0 (c-inside-bracelist-p): Fix for enum test.
Richard M. Stallman <rms@gnu.org>
parents: 20914
diff changeset
6774 (let (bracepos)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6775 (if (and (or (looking-at c-brace-list-key)
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6776 (progn (c-forward-sexp -1)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6777 (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
6778 (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
6779 (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
6780 (- bracepos 2))))
5e5fa0a34cb0 (c-inside-bracelist-p): Fix for enum test.
Richard M. Stallman <rms@gnu.org>
parents: 20914
diff changeset
6781 (point)))))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6782 ;; this will pick up array/aggregate init lists, even if they are nested.
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6783 (save-excursion
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6784 (let ((class-key
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6785 ;; Pike can have class definitions anywhere, so we must
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6786 ;; check for the class key here.
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6787 (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
6788 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
6789 bufpos braceassignp lim next-containing)
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6790 (while (and (not bufpos)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6791 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
6792 (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
6793 (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
6794 (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
6795 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
6796 (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
6797 (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
6798 (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
6799 paren-state (cdr paren-state))))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6800 (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
6801 (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
6802 ;; 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
6803 ;; 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
6804 ;; 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
6805 ;; doesn't check for an identifier before it.
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6806 (setq containing-sexp nil)
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6807 ;; see if the open brace is preceded by = or [...] in
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6808 ;; 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
6809 (setq braceassignp 'dontknow)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6810 (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
6811 ;; 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
6812 (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
6813 (eq (char-after) ?\[))
1dc57e616e8d (c-inside-bracelist-p): Tighter test for
Richard M. Stallman <rms@gnu.org>
parents: 24335
diff changeset
6814 ;; 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
6815 ;; 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
6816 ;; earlier.
1dc57e616e8d (c-inside-bracelist-p): Tighter test for
Richard M. Stallman <rms@gnu.org>
parents: 24335
diff changeset
6817 (while (eq braceassignp 'dontknow)
1dc57e616e8d (c-inside-bracelist-p): Tighter test for
Richard M. Stallman <rms@gnu.org>
parents: 24335
diff changeset
6818 (setq braceassignp
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6819 (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
6820 ((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
6821 ((looking-at "\\sw\\|\\s_\\|[.[]")
1dc57e616e8d (c-inside-bracelist-p): Tighter test for
Richard M. Stallman <rms@gnu.org>
parents: 24335
diff changeset
6822 ;; 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
6823 ;; identifier (may contain "." in Java)
1dc57e616e8d (c-inside-bracelist-p): Tighter test for
Richard M. Stallman <rms@gnu.org>
parents: 24335
diff changeset
6824 ;; or another "[]" sexp.
1dc57e616e8d (c-inside-bracelist-p): Tighter test for
Richard M. Stallman <rms@gnu.org>
parents: 24335
diff changeset
6825 'dontknow)
1dc57e616e8d (c-inside-bracelist-p): Tighter test for
Richard M. Stallman <rms@gnu.org>
parents: 24335
diff changeset
6826 (t nil)))))
1dc57e616e8d (c-inside-bracelist-p): Tighter test for
Richard M. Stallman <rms@gnu.org>
parents: 24335
diff changeset
6827 ;; 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
6828 ;; beginning of the statement.
1dc57e616e8d (c-inside-bracelist-p): Tighter test for
Richard M. Stallman <rms@gnu.org>
parents: 24335
diff changeset
6829 (while (eq braceassignp 'dontknow)
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6830 (cond ((eq (char-after) ?\;)
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6831 (setq braceassignp nil))
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6832 ((and class-key
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6833 (looking-at class-key))
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6834 (setq braceassignp nil))
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6835 ((eq (char-after) ?=)
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6836 ;; We've seen a =, but must check earlier tokens so
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6837 ;; that it isn't something that should be ignored.
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6838 (setq braceassignp 'maybe)
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6839 (while (and (eq braceassignp 'maybe)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6840 (zerop (c-backward-token-2 1 t lim)))
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6841 (setq braceassignp
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6842 (cond
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6843 ;; 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
6844 ((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
6845 (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
6846 nil)
36920
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
6847 ;; Check for `<opchar>= in Pike.
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
6848 ((and (c-major-mode-is 'pike-mode)
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
6849 (or (eq (char-after) ?`)
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
6850 ;; Special case for Pikes
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
6851 ;; `[]=, since '[' is not in
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
6852 ;; the punctuation class.
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
6853 (and (eq (char-after) ?\[)
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
6854 (eq (char-before) ?`))))
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
6855 nil)
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6856 ((looking-at "\\s.") 'maybe)
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6857 ;; make sure we're not in a C++ template
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6858 ;; 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
6859 ((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
6860 (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
6861 (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
6862 (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
6863 (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
6864 (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
6865 (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
6866 (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
6867 (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
6868 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
6869 (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
6870 ))))
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6871 nil)
25178
1dc57e616e8d (c-inside-bracelist-p): Tighter test for
Richard M. Stallman <rms@gnu.org>
parents: 24335
diff changeset
6872 (t t))))))
1dc57e616e8d (c-inside-bracelist-p): Tighter test for
Richard M. Stallman <rms@gnu.org>
parents: 24335
diff changeset
6873 (if (and (eq braceassignp 'dontknow)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6874 (/= (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
6875 (setq braceassignp nil)))
1dc57e616e8d (c-inside-bracelist-p): Tighter test for
Richard M. Stallman <rms@gnu.org>
parents: 24335
diff changeset
6876 (if (not braceassignp)
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6877 (if (eq (char-after) ?\;)
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6878 ;; Brace lists can't contain a semicolon, so we're done.
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6879 (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
6880 ;; 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
6881 (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
6882 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
6883 next-containing nil))
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6884 ;; we've hit the beginning of the aggregate list
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6885 (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
6886 (c-most-enclosing-brace paren-state))
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6887 (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
6888 )
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6889 bufpos))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6890 ))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6891
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6892 (defun c-looking-at-special-brace-list (&optional lim)
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6893 ;; 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
6894 ;; `([ ])', `(< >)' etc, a cons of a cons of its starting and ending
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6895 ;; positions and its entry in c-special-brace-lists is returned, nil
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6896 ;; otherwise. The ending position is nil if the list is still open.
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6897 ;; LIM is the limit for forward search. The point may either be at
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6898 ;; the `(' or at the following paren character. Tries to check the
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6899 ;; matching closer, but assumes it's correct if no balanced paren is
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6900 ;; found (i.e. the case `({ ... } ... )' is detected as _not_ being
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6901 ;; a special brace list).
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6902 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6903 ;; This function might do hidden buffer changes.
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6904 (if c-special-brace-lists
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6905 (condition-case ()
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6906 (save-excursion
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6907 (let ((beg (point))
56646
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
6908 inner-beg end type)
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6909 (c-forward-syntactic-ws)
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6910 (if (eq (char-after) ?\()
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6911 (progn
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6912 (forward-char 1)
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6913 (c-forward-syntactic-ws)
56646
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
6914 (setq inner-beg (point))
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6915 (setq type (assq (char-after) c-special-brace-lists)))
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6916 (if (setq type (assq (char-after) c-special-brace-lists))
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6917 (progn
56646
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
6918 (setq inner-beg (point))
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6919 (c-backward-syntactic-ws)
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6920 (forward-char -1)
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6921 (setq beg (if (eq (char-after) ?\()
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6922 (point)
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6923 nil)))))
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6924 (if (and beg type)
56646
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
6925 (if (and (c-safe
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
6926 (goto-char beg)
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
6927 (c-forward-sexp 1)
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
6928 (setq end (point))
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
6929 (= (char-before) ?\)))
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
6930 (c-safe
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
6931 (goto-char inner-beg)
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
6932 (if (looking-at "\\s(")
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
6933 ;; Check balancing of the inner paren
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
6934 ;; below.
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
6935 (progn
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6936 (c-forward-sexp 1)
56646
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
6937 t)
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
6938 ;; 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
6939 ;; 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
6940 ;; check the char before the outer
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
6941 ;; closing paren.
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
6942 (goto-char end)
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
6943 (backward-char)
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
6944 (c-backward-syntactic-ws)
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
6945 (= (char-before) (cdr type)))))
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6946 (if (or (/= (char-syntax (char-before)) ?\))
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6947 (= (progn
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6948 (c-forward-syntactic-ws)
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6949 (point))
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6950 (1- end)))
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6951 (cons (cons beg end) type))
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6952 (cons (list beg) type)))))
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6953 (error nil))))
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6954
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
6955 (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
6956 ;; 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
6957 ;; 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
6958 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6959 ;; 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
6960 ;; are recommended instead.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6961 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6962 ;; This function might do hidden buffer changes.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6963 (c-at-statement-start-p))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6964 (make-obsolete 'c-looking-at-bos 'c-at-statement-start-p)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6965
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6966 (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
6967 ;; Return non-nil if we're looking at the beginning of a block
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6968 ;; inside an expression. The value returned is actually a cons of
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6969 ;; 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
6970 ;; position of the beginning of the construct.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6971 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6972 ;; 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
6973 ;; 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
6974 ;; 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
6975 ;; 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
6976 ;; needs to be farther back.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6977 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6978 ;; 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
6979 ;; 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
6980 ;; 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
6981 ;; starting position was further down than that.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6982 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6983 ;; This function might do hidden buffer changes.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6984
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6985 (save-excursion
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6986 (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
6987 (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
6988 ;; 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
6989 ;; 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
6990 (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
6991
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
6992 (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
6993 (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
6994 (> (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
6995 (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
6996 (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
6997 (looking-at "[\]\).]\\|\\w\\|\\s_"))
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6998 (c-safe (forward-char)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
6999 (goto-char (scan-sexps (point) -1))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7000
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
7001 (setq res
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7002 (if (looking-at c-keywords-regexp)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7003 (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
7004 (cond
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7005 ((and block-follows
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7006 (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
7007 (and (not (eq passed-paren ?\[))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7008 (or (not (looking-at c-class-key))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7009 ;; 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
7010 ;; 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
7011 ;; in-expression class.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7012 (let ((prev (point)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7013 (while (and
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7014 (= (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
7015 (eq (char-syntax (char-after)) ?w))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7016 (setq prev (point)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7017 (goto-char prev)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7018 (not (c-at-statement-start-p)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7019 ;; 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
7020 ;; 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
7021 ;; object clone expression.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7022 (save-excursion
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7023 (and check-at-end
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7024 (c-major-mode-is 'pike-mode)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7025 (progn (goto-char block-follows)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7026 (zerop (c-forward-token-2 1 t)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7027 (eq (char-after) ?\())))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7028 (cons 'inexpr-class (point))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7029 ((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
7030 (when (not passed-paren)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7031 (cons 'inexpr-statement (point))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7032 ((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
7033 (when (or (not passed-paren)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7034 (eq passed-paren ?\())
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7035 (cons 'inlambda (point))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7036 ((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
7037 nil)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7038 (t
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7039 'maybe)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7040
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7041 (if (looking-at "\\s(")
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7042 (if passed-paren
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7043 (if (and (eq passed-paren ?\[)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7044 (eq (char-after) ?\[))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7045 ;; Accept several square bracket sexps for
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7046 ;; Java array initializations.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7047 'maybe)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7048 (setq passed-paren (char-after))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7049 'maybe)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7050 'maybe))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7051
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
7052 (if (eq res 'maybe)
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7053 (when (and c-recognize-paren-inexpr-blocks
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7054 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
7055 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
7056 (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
7057 (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
7058 (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
7059 (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
7060 (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
7061 (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
7062 (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
7063 (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
7064 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
7065 (cons 'inexpr-statement (point))))
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7066
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
7067 res))))
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
7068
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
7069 (defun c-looking-at-inexpr-block-backward (paren-state)
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
7070 ;; Returns non-nil if we're looking at the end of an in-expression
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
7071 ;; 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
7072 ;; 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
7073 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7074 ;; This function might do hidden buffer changes.
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
7075 (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
7076 ;; 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
7077 (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
7078 (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
7079 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
7080 (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
7081 (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
7082 (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
7083 (= (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
7084 (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
7085 (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
7086 (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
7087 (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
7088 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
7089 containing-sexp)))))
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
7090
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7091
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
7092 ;; `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
7093 ;; 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
7094 ;; 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
7095
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
7096 ;; 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
7097 ;; auto newline analysis.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
7098 (defvar c-auto-newline-analysis nil)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
7099
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
7100 (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
7101 ;; 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
7102 ;; `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
7103 ;; 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
7104 ;; 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
7105 (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
7106 c-syntactic-context)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
7107
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
7108 (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
7109 ;; 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
7110 ;; (Normally not necessary.)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
7111 (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
7112 (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
7113
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
7114 (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
7115 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
7116 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
7117 containing-sexp
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
7118 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
7119 ;; 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
7120 ;; 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
7121 ;; `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
7122 ;; `defun-block-intro'.
9f636bd65206 Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents: 74372
diff changeset
7123 ;;
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
7124 ;; 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
7125 ;; 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
7126 ;; 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
7127 ;; 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
7128 ;; 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
7129 ;;
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
7130 ;; 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
7131 ;; given SYNTAX-SYMBOL. More syntax entries are added if we need to
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
7132 ;; skip past open parens and containing statements. All the added
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
7133 ;; syntax elements will get the same anchor 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
7134 ;;
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
7135 ;; 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
7136 ;; 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
7137 ;;
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7138 ;; 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
7139 ;; if the current statement starts there.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7140 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7141 ;; 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
7142 ;; 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
7143 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7144 ;; This function might do hidden buffer changes.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7145
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
7146 (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
7147 ;; 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
7148 ;; treatment.
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
7149 (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
7150
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7151 (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
7152 (boi (c-point 'boi))
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7153 ;; 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
7154 ;; 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
7155 ;; now at the start.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7156 on-label)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7157
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
7158 (apply 'c-add-syntax syntax-symbol nil 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
7159
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7160 ;; 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
7161 (while
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7162 (and
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7163 (catch 'back-up-block
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7164
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7165 ;; 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
7166 (while (or (/= (point) boi)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7167 on-label
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7168 (looking-at c-comment-start-regexp))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7169
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7170 ;; 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
7171 ;; statement start and boi.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7172 (let ((savepos (point)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7173 (while (and (/= savepos boi)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7174 (c-backward-single-comment))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7175 (setq savepos (point)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7176 boi (c-point 'boi)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7177 (goto-char savepos))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7178
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7179 ;; 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
7180 ;; another one.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7181 (let ((old-pos (point))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7182 (old-boi boi)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7183 (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
7184 (setq boi (c-point 'boi)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7185 on-label (eq step-type 'label))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7186
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7187 (cond ((= (point) old-pos)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7188 ;; 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
7189 ;; have to continue outside it.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7190 (throw 'back-up-block t))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7191
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7192 ((and (eq step-type 'up)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7193 (>= (point) old-boi)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7194 (looking-at "else\\>[^_]")
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7195 (save-excursion
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7196 (goto-char old-pos)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7197 (looking-at "if\\>[^_]")))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7198 ;; 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
7199 ;; of "else if" clauses.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7200 )
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7201
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7202 ((and (not stop-at-boi-only)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7203 (/= old-pos old-boi)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7204 (memq step-type '(up previous)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7205 ;; 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
7206 ;; 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
7207 ;; 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
7208 ;; exit.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7209 (goto-char old-pos)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7210 (throw 'back-up-block nil))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7211
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7212 (t
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7213 (if (and (not stop-at-boi-only)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7214 (memq step-type '(up previous beginning)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7215 ;; 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
7216 ;; 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
7217 ;; line.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7218 (setq stop-at-boi-only t))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7219
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7220 ;; 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
7221 ;; level.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7222 (when (eq step-type 'up)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7223 (c-add-syntax 'substatement nil))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7224 )))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7225
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7226 containing-sexp)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7227
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7228 ;; 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
7229 (goto-char containing-sexp)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7230
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7231 ;; 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
7232 ;; like "({".
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7233 (when c-special-brace-lists
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7234 (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
7235 (when (and special-list
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7236 (< (car (car special-list)) (point)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7237 (setq containing-sexp (car (car special-list)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7238 (goto-char containing-sexp))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7239
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7240 (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
7241 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
7242 boi (c-point 'boi))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7243
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7244 ;; 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
7245 ;; 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
7246 (let ((paren-pos (point))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7247 (paren-char (char-after))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7248 step-type)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7249
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7250 (if (eq paren-char ?\()
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7251 ;; 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
7252 ;; expression now.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7253 (progn
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7254 (when (/= paren-pos boi)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7255 (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
7256 (progn
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7257 (c-backward-syntactic-ws containing-sexp)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7258 (or (not (looking-at "\\>"))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7259 (not (c-on-identifier))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7260 (save-excursion
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7261 (goto-char (1+ paren-pos))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7262 (c-forward-syntactic-ws)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7263 (eq (char-after) ?{)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7264 ;; 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
7265 ;; 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
7266 (c-add-syntax 'inexpr-statement)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7267
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7268 ;; A parenthesis normally belongs to an arglist.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7269 (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
7270
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7271 (goto-char (max boi
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7272 (if containing-sexp
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7273 (1+ containing-sexp)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7274 (point-min))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7275 (setq step-type 'same
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7276 on-label nil))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7277
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7278 (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
7279 on-label (eq step-type 'label))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7280
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7281 (if (and (eq step-type 'same)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7282 (/= paren-pos (point)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7283 (save-excursion
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7284 (goto-char paren-pos)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7285 (let ((inexpr (c-looking-at-inexpr-block
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7286 (c-safe-position containing-sexp
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7287 paren-state)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7288 containing-sexp)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7289 (if (and inexpr
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7290 (not (eq (car inexpr) 'inlambda)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7291 (c-add-syntax 'statement-block-intro nil)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7292 (c-add-syntax 'defun-block-intro nil))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7293 (c-add-syntax 'statement-block-intro nil)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7294
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7295 (if (= paren-pos boi)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7296 ;; 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
7297 ;; 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
7298 ;; 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
7299 (goto-char paren-pos)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7300 (setq boi (c-point 'boi)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7301 ))
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
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
7303 ;; 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
7304 ;; added above.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
7305 (let ((p c-syntactic-context))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
7306 (while (not (eq p syntax-last))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
7307 (if (cdr (car p))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
7308 (setcar (cdr (car p)) (point)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
7309 (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
7310 )))
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
7311
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7312 (defun c-add-class-syntax (symbol
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7313 containing-decl-open
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7314 containing-decl-start
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7315 containing-decl-kwd
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7316 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
7317 ;; 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
7318 ;; 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
7319 ;; Therefore it's collected here.
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7320 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7321 ;; This function might do hidden buffer changes.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7322 (goto-char containing-decl-open)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7323 (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
7324 (progn
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7325 (c-add-syntax symbol containing-decl-open)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7326 containing-decl-open)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7327 (goto-char containing-decl-start)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7328 ;; 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
7329 ;; 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
7330 (back-to-indentation)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7331 (c-add-syntax symbol (point))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7332 (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
7333 'c-inexpr-class-kwds)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7334 (/= 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
7335 (c-add-syntax 'inexpr-class))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7336 (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
7337
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
7338 (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
7339 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
7340 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
7341 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
7342 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
7343 ;; 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
7344 ;; 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
7345 ;; construct of some kind.
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7346 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7347 ;; 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
7348
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
7349 (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
7350 (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
7351 (skip-chars-forward " \t")
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
7352
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
7353 (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
7354 ;; (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
7355 ;; 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
7356 ((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
7357 (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
7358 (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
7359 (eq char-after-ip ?{)))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
7360
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
7361 (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
7362 ;; 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
7363 ((save-excursion
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7364 (and (eq (char-after) ?{)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7365 (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
7366 (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
7367 (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
7368
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 ;; 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
7370 ((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
7371 (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
7372 (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
7373 (c-syntactic-re-search-forward "=\\([^=]\\|$\\)"
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
7374 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
7375 ;; 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
7376 ;; 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
7377 ;; 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
7378 ;; 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
7379 ;; 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
7380 ;; 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
7381 (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
7382 (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
7383 ;; 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
7384 ;; analyzing the nature of the brace
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
7385 ;; for the auto newline feature.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
7386 'brace-list-open
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
7387 'statement-cont)
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7388 nil nil
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
7389 containing-sexp paren-state))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
7390
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
7391 ;; 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
7392 ;; 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
7393 ;; 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
7394 ;; 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
7395 ((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
7396 (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
7397 'same)
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
7398 (save-excursion
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7399 (let ((c-recognize-typeless-decls nil))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7400 ;; 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
7401 ;; 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
7402 ;; a macro followed by a block.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7403 (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
7404 (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
7405 containing-sexp paren-state))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
7406
53073
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
7407 ;; 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
7408 ;; 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
7409 ;; `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
7410 ;; 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
7411 ;; 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
7412 ;; 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
7413 (t
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7414 (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
7415 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
7416 ))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
7417
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
7418 ;; 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
7419 ((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
7420 (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
7421 (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
7422 ;; 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
7423 ;; 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
7424 (when (c-syntactic-re-search-forward
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
7425 "\\(<<\\|>>\\)\\([^=]\\|$\\)" 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
7426 (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
7427 t))))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
7428
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
7429 ;; 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
7430 ;; 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
7431 ((and (save-excursion
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
7432 ;; 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
7433 ;; 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
7434 ;; 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
7435 ;; declarations or throws clauses there.
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
7436 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
7437 ;; 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
7438 ;; 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
7439 ;; 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
7440 ;; 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
7441 ;; 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
7442 (c-forward-syntactic-ws)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
7443 (eq (char-after) ?{))
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7444 (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
7445 (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
7446 'same)
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
7447 (save-excursion
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7448 (let ((c-recognize-typeless-decls nil))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7449 ;; 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
7450 ;; 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
7451 ;; a macro followed by a block.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7452 (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
7453 (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
7454 containing-sexp paren-state))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
7455
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
7456 ;; 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
7457 (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
7458 (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
7459 (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
7460 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
7461 )))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7462
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7463 ;; 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
7464 ;; 2005/11/29).
64833
c4d00dfa8594 (c-guess-basic-syntax): Add autoload.
Richard M. Stallman <rms@gnu.org>
parents: 64699
diff changeset
7465 ;;;###autoload
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7466 (defun c-guess-basic-syntax ()
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7467 "Return the syntactic context of the current line."
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7468 (save-excursion
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7469 (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
7470 (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
7471 ((indent-point (point))
d508ffa43505 2003-07-08 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents: 51714
diff changeset
7472 (case-fold-search nil)
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7473 ;; 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
7474 ;; 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
7475 ;; 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
7476 ;; 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
7477 ;; single gigantic cond. :P
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7478 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
7479 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
7480 step-type tmpsymbol keyword injava-inher special-brace-list tmp-pos
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7481 ;; 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
7482 ;; 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
7483 ;; `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
7484 ;; 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
7485 ;; declaration. `containing-decl-kwd' is the keyword
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7486 ;; 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
7487 ;; is.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7488 containing-decl-open
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7489 containing-decl-start
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7490 containing-decl-kwd
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7491 ;; 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
7492 ;; there is none.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7493 containing-sexp
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7494 ;; 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
7495 ;; (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
7496 ;; `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
7497 ;; `containing-sexp' is nil.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7498 lim
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7499 ;; 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
7500 ;; `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
7501 (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
7502 ;; 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
7503 ;; 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
7504 syntactic-relpos
d508ffa43505 2003-07-08 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents: 51714
diff changeset
7505 (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
7506
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7507 ;; 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
7508 ;; level block.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7509 (when (and (setq containing-sexp
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7510 (c-most-enclosing-brace paren-state))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7511 (progn
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7512 (goto-char containing-sexp)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7513 (eq (char-after) ?{))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7514 (setq placeholder
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7515 (c-looking-at-decl-block
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7516 (c-most-enclosing-brace paren-state
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7517 containing-sexp)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7518 t)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7519 (setq containing-decl-open containing-sexp
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7520 containing-decl-start (point)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7521 containing-sexp nil)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7522 (goto-char placeholder)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7523 (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
7524 (c-keyword-sym (match-string 1)))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7525
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7526 ;; 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
7527 (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
7528 (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
7529 (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
7530 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
7531 (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
7532 (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
7533 (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
7534 (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
7535 ;; 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
7536 ;; 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
7537 (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
7538 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
7539 ;; 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
7540 ;; 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
7541 (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
7542 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
7543 (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
7544 (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
7545
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
7546 ;; 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
7547 ;; "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
7548 ;; 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
7549 ;; 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
7550 ;; 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
7551 (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
7552 (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
7553 (setq c-stmt-delim-chars c-stmt-delim-chars-with-comma))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7554
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7555 ;; cache char before and after indent point, and move point to
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7556 ;; the most likely position to perform the majority of tests
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7557 (goto-char indent-point)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7558 (c-backward-syntactic-ws lim)
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7559 (setq before-ws-ip (point)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7560 char-before-ip (char-before))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7561 (goto-char indent-point)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7562 (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
7563 (setq char-after-ip (char-after))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7564
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7565 ;; are we in a literal?
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7566 (setq literal (c-in-literal lim))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7567
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7568 ;; now figure out syntactic qualities of the current line
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7569 (cond
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7570
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7571 ;; 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
7572 ((eq literal 'string)
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7573 (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
7574
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7575 ;; 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
7576 ((and (memq literal '(c c++))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
7577 ;; 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
7578 ;; `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
7579 ;; recognize "\*/" to end a block comment.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
7580 ;; `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
7581 ;; `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
7582 ;; 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
7583 ;; `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
7584 ;; we're inside a comment.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
7585 (setq placeholder (c-literal-limits lim)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
7586 (c-add-syntax literal (car placeholder)))
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7587
30403
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
7588 ;; 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
7589 ((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
7590 (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
7591 (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
7592 (/= 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
7593 (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
7594 (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
7595 (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
7596 (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
7597 (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
7598 ;; 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
7599 ;; 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
7600 ;; 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
7601 ;; 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
7602 ;; 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
7603 ;; 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
7604 (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
7605 (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
7606 (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
7607 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
7608 (= (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
7609 (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
7610 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
7611 (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
7612 (setq macro-start nil))
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7613
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
7614 ;; 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
7615 ((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
7616 (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
7617 (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
7618 containing-sexp paren-state))
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7619
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
7620 ;; 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
7621 ((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
7622 (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
7623 (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
7624 '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
7625 (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
7626 (goto-char placeholder)
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7627 (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
7628 containing-sexp paren-state))
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7629
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
7630 ;; 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
7631 ;; 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
7632 ;; 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
7633 ((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
7634 (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
7635 (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
7636 ((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
7637 (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
7638 (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
7639 (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
7640 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
7641 (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
7642 (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
7643 (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
7644 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
7645 (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
7646 (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
7647 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
7648 (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
7649 (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
7650 (goto-char placeholder)
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7651 (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
7652 containing-sexp paren-state))
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7653
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
7654 ;; 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
7655 ((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
7656 (and c-opt-block-stmt-key
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7657 (not (eq char-before-ip ?\;))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7658 (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
7659 (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
7660 (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
7661 (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
7662 (> (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
7663 (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
7664 ;; 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
7665 ;; 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
7666 (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
7667 (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
7668 (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
7669 '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
7670 (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
7671 (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
7672 (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
7673 (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
7674 (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
7675 ;; 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
7676 ;; 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
7677 (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
7678 (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
7679 (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
7680 (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
7681 '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
7682 (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
7683 (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
7684 ;; 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
7685 (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
7686 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
7687 (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
7688 ;; 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
7689 ;; 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
7690 ;; 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
7691 ;; modifier.
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
7692 (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
7693 (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
7694 (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
7695
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
7696 (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
7697 ;; 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
7698 (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
7699 (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
7700 (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
7701 ((eq char-after-ip ?{)
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7702 (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
7703 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
7704 ((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
7705 (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
7706 (back-to-indentation)
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7707 (c-forward-label))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7708 (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
7709 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
7710 (t
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7711 (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
7712 containing-sexp paren-state))))
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7713
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
7714 ;; 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
7715 ;; 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
7716 (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
7717 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
7718 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
7719 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
7720 paren-state)))
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7721
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7722 ;; CASE 14: A case or default label
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7723 ((looking-at c-label-kwds-regexp)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7724 (if containing-sexp
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7725 (progn
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7726 (goto-char containing-sexp)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7727 (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
7728 containing-sexp))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7729 (c-backward-to-block-anchor lim)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7730 (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
7731 ;; 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
7732 ;; alternatives, anchor it on (point-min).
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7733 (c-add-syntax 'case-label (point-min))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7734
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7735 ;; CASE 15: any other label
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7736 ((save-excursion
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7737 (back-to-indentation)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7738 (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
7739 (c-forward-label)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7740 (cond (containing-decl-open
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7741 (setq placeholder (c-add-class-syntax 'inclass
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7742 containing-decl-open
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7743 containing-decl-start
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7744 containing-decl-kwd
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7745 paren-state))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7746 ;; 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
7747 ;; inclass gets.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7748 (c-append-syntax 'access-label placeholder))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7749
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7750 (containing-sexp
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7751 (goto-char containing-sexp)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7752 (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
7753 containing-sexp))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7754 (save-excursion
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7755 (setq tmpsymbol
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7756 (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
7757 (looking-at "switch\\>[^_]"))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7758 ;; 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
7759 ;; 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
7760 ;; that they get lined up consistently.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7761 'case-label
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7762 'label)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7763 (c-backward-to-block-anchor lim)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7764 (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
7765
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7766 (t
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7767 ;; 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
7768 ;; 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
7769 ;; class open brace.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7770 (c-add-syntax 'access-label (point-min)))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7771
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
7772 ;; 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
7773 ;; 17E.
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7774 ((setq placeholder (c-looking-at-inexpr-block
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7775 (c-safe-position containing-sexp paren-state)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7776 containing-sexp
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7777 ;; Have to turn on the heuristics after
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7778 ;; 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
7779 ;; 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
7780 t))
30403
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
7781 (setq tmpsymbol (assq (car placeholder)
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
7782 '((inexpr-class . class-open)
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
7783 (inexpr-statement . block-open))))
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
7784 (if tmpsymbol
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
7785 ;; 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
7786 (setq tmpsymbol (cdr tmpsymbol))
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
7787 ;; 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
7788 ;; 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
7789 ;; opener.
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
7790 (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
7791 'inline-open
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
7792 'lambda-intro-cont)))
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
7793 (goto-char (cdr placeholder))
36920
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
7794 (back-to-indentation)
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7795 (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
7796 (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
7797 paren-state)
36920
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
7798 (unless (eq (point) (cdr placeholder))
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
7799 (c-add-syntax (car placeholder))))
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7800
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7801 ;; 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
7802 ((or containing-decl-open (null containing-sexp))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7803 (cond
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7804
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
7805 ;; CASE 5A: we are looking at a defun, brace list, class,
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
7806 ;; or inline-inclass method opening brace
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
7807 ((setq special-brace-list
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
7808 (or (and c-special-brace-lists
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
7809 (c-looking-at-special-brace-list))
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
7810 (eq char-after-ip ?{)))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7811 (cond
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7812
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
7813 ;; CASE 5A.1: Non-class declaration block open.
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7814 ((save-excursion
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7815 (let (tmp)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7816 (and (eq char-after-ip ?{)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7817 (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
7818 (progn
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7819 (setq placeholder (point))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7820 (goto-char tmp)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7821 (looking-at c-symbol-key))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7822 (c-keyword-member
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7823 (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
7824 'c-other-block-decl-kwds))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7825 (goto-char placeholder)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7826 (c-add-stmt-syntax
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7827 (if (string-equal keyword "extern")
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7828 ;; Special case for extern-lang-open.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7829 'extern-lang-open
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7830 (intern (concat keyword "-open")))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7831 nil t containing-sexp paren-state))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7832
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7833 ;; 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
7834 ((save-excursion
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7835 (goto-char indent-point)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7836 (skip-chars-forward " \t")
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7837 (and (eq (char-after) ?{)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7838 (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
7839 (setq placeholder (point))))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7840 (c-add-syntax 'class-open placeholder))
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7841
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7842 ;; CASE 5A.3: brace list open
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7843 ((save-excursion
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
7844 (c-beginning-of-decl-1 lim)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
7845 (while (looking-at c-specifier-key)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
7846 (goto-char (match-end 1))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
7847 (c-forward-syntactic-ws indent-point))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7848 (setq placeholder (c-point 'boi))
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
7849 (or (consp special-brace-list)
36920
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
7850 (and (or (save-excursion
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
7851 (goto-char indent-point)
36920
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
7852 (setq tmpsymbol nil)
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
7853 (while (and (> (point) placeholder)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
7854 (zerop (c-backward-token-2 1 t))
36920
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
7855 (/= (char-after) ?=))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
7856 (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
7857 (not tmpsymbol)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
7858 (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
7859 (setq tmpsymbol 'topmost-intro-cont)))
36920
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
7860 (eq (char-after) ?=))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
7861 (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
7862 (save-excursion
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
7863 (while (and (< (point) indent-point)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
7864 (zerop (c-forward-token-2 1 t))
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
7865 (not (memq (char-after) '(?\; ?\()))))
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
7866 (not (memq (char-after) '(?\; ?\()))
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
7867 ))))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
7868 (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
7869 (c-major-mode-is 'java-mode)
36920
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
7870 (eq tmpsymbol 'topmost-intro-cont))
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
7871 ;; We're in Java and have found that the open brace
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
7872 ;; belongs to a "new Foo[]" initialization list,
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
7873 ;; which means the brace list is part of an
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
7874 ;; expression and not a top level definition. We
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
7875 ;; therefore treat it as any topmost continuation
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
7876 ;; even though the semantically correct symbol still
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
7877 ;; 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
7878 ;; case B.2.
36920
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
7879 (progn
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
7880 (c-beginning-of-statement-1 lim)
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
7881 (c-add-syntax 'topmost-intro-cont (c-point 'boi)))
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
7882 (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
7883
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7884 ;; CASE 5A.4: inline defun open
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7885 ((and containing-decl-open
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7886 (not (c-keyword-member containing-decl-kwd
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7887 'c-other-block-decl-kwds)))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7888 (c-add-syntax 'inline-open)
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7889 (c-add-class-syntax 'inclass
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7890 containing-decl-open
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7891 containing-decl-start
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7892 containing-decl-kwd
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7893 paren-state))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7894
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7895 ;; CASE 5A.5: ordinary defun open
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7896 (t
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7897 (goto-char placeholder)
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7898 (if (or containing-decl-open macro-start)
21106
5e5fa0a34cb0 (c-inside-bracelist-p): Fix for enum test.
Richard M. Stallman <rms@gnu.org>
parents: 20914
diff changeset
7899 (c-add-syntax 'defun-open (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
7900 ;; Bogus to use bol here, but it's the legacy.
21106
5e5fa0a34cb0 (c-inside-bracelist-p): Fix for enum test.
Richard M. Stallman <rms@gnu.org>
parents: 20914
diff changeset
7901 (c-add-syntax 'defun-open (c-point 'bol)))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7902 )))
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7903
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7904 ;; 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
7905 ;; 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
7906 ((save-excursion
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7907 (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
7908 (setq tmp-pos (point))))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7909 (cond
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7910
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7911 ;; CASE 5B.1: Member init list.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7912 ((eq (char-after tmp-pos) ?:)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7913 (if (or (> tmp-pos indent-point)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7914 (= (c-point 'bosws) (1+ tmp-pos)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7915 (progn
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7916 ;; There is no preceding member init clause.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7917 ;; Indent relative to the beginning of indentation
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7918 ;; 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
7919 ;; prototype's open paren.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7920 (goto-char placeholder)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7921 (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
7922 ;; 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
7923 (goto-char (1+ tmp-pos))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7924 (c-forward-syntactic-ws)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7925 (c-add-syntax 'member-init-cont (point))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7926
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7927 ;; 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
7928 ((and c-recognize-knr-p
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
7929 (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
7930 (c-beginning-of-statement-1 lim)
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7931 (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
7932 (if containing-decl-open
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7933 (c-add-class-syntax 'inclass
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7934 containing-decl-open
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7935 containing-decl-start
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7936 containing-decl-kwd
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7937 paren-state)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7938
30403
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
7939 ;; CASE 5B.4: Nether region after a C++ or Java func
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7940 ;; decl, which could include a `throws' declaration.
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7941 (t
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7942 (c-beginning-of-statement-1 lim)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7943 (c-add-syntax 'func-decl-cont (c-point 'boi))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7944 )))
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7945
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7946 ;; CASE 5C: inheritance line. could be first inheritance
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7947 ;; 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
7948 ((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
7949 (progn
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
7950 (when (eq char-after-ip ?,)
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
7951 (skip-chars-forward " \t")
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
7952 (forward-char))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
7953 (looking-at c-opt-postfix-decl-spec-key)))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7954 (and (or (eq char-before-ip ?:)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7955 ;; watch out for scope operator
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7956 (save-excursion
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7957 (and (eq char-after-ip ?:)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
7958 (c-safe (forward-char 1) t)
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7959 (not (eq (char-after) ?:))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7960 )))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7961 (save-excursion
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7962 (c-backward-syntactic-ws lim)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7963 (if (eq char-before-ip ?:)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7964 (progn
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7965 (forward-char -1)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7966 (c-backward-syntactic-ws lim)))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7967 (back-to-indentation)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7968 (looking-at c-class-key)))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7969 ;; for Java
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
7970 (and (c-major-mode-is 'java-mode)
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7971 (let ((fence (save-excursion
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7972 (c-beginning-of-statement-1 lim)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7973 (point)))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7974 cont done)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7975 (save-excursion
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7976 (while (not done)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
7977 (cond ((looking-at c-opt-postfix-decl-spec-key)
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7978 (setq injava-inher (cons cont (point))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7979 done t))
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
7980 ((or (not (c-safe (c-forward-sexp -1) t))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7981 (<= (point) fence))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7982 (setq done t))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7983 )
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7984 (setq cont t)))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7985 injava-inher)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7986 (not (c-crosses-statement-barrier-p (cdr injava-inher)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7987 (point)))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7988 ))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7989 (cond
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7990
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7991 ;; CASE 5C.1: non-hanging colon on an inher intro
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7992 ((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
7993 (c-beginning-of-statement-1 lim)
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7994 (c-add-syntax 'inher-intro (c-point 'boi))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7995 ;; don't add inclass symbol since relative point already
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7996 ;; contains any class offset
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7997 )
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
7998
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7999 ;; CASE 5C.2: hanging colon on an inher intro
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8000 ((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
8001 (c-beginning-of-statement-1 lim)
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8002 (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
8003 (if containing-decl-open
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8004 (c-add-class-syntax 'inclass
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8005 containing-decl-open
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8006 containing-decl-start
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8007 containing-decl-kwd
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8008 paren-state)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8009
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8010 ;; CASE 5C.3: in a Java implements/extends
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8011 (injava-inher
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8012 (let ((where (cdr injava-inher))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8013 (cont (car injava-inher)))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8014 (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
8015 (cond ((looking-at "throws\\>[^_]")
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8016 (c-add-syntax 'func-decl-cont
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8017 (progn (c-beginning-of-statement-1 lim)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8018 (c-point 'boi))))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8019 (cont (c-add-syntax 'inher-cont where))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8020 (t (c-add-syntax 'inher-intro
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8021 (progn (goto-char (cdr injava-inher))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8022 (c-beginning-of-statement-1 lim)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8023 (point))))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8024 )))
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8025
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8026 ;; CASE 5C.4: a continued inheritance line
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8027 (t
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8028 (c-beginning-of-inheritance-list lim)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8029 (c-add-syntax 'inher-cont (point))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8030 ;; don't add inclass symbol since relative point already
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8031 ;; contains any class offset
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8032 )))
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8033
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
8034 ;; CASE 5D: this could be a top-level initialization, a
26817
03befb219d03 Installed version 5.26
Gerd Moellmann <gerd@gnu.org>
parents: 25178
diff changeset
8035 ;; member init list continuation, or a template argument
03befb219d03 Installed version 5.26
Gerd Moellmann <gerd@gnu.org>
parents: 25178
diff changeset
8036 ;; list continuation.
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8037 ((save-excursion
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8038 ;; Note: We use the fact that lim always is after any
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8039 ;; preceding brace sexp.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8040 (if c-recognize-<>-arglists
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8041 (while (and
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8042 (progn
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8043 (c-syntactic-skip-backward "^;,=<>" lim t)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8044 (> (point) lim))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8045 (or
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8046 (when c-overloadable-operators-regexp
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8047 (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
8048 (goto-char placeholder)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8049 t))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8050 (cond
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8051 ((eq (char-before) ?>)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8052 (or (c-backward-<>-arglist nil lim)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8053 (backward-char))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8054 t)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8055 ((eq (char-before) ?<)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8056 (backward-char)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8057 (if (save-excursion
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8058 (c-forward-<>-arglist nil))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8059 (progn (forward-char)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8060 nil)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8061 t))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8062 (t nil)))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8063 ;; 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
8064 ;; clause - we assume only C++ needs it.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8065 (c-syntactic-skip-backward "^;,=" lim t))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8066 (memq (char-before) '(?, ?= ?<)))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8067 (cond
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8068
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
8069 ;; 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
8070 ((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
8071 (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
8072 (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
8073 (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
8074 (goto-char indent-point)
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8075 (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
8076 (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
8077 (eq (char-after placeholder) ?<))))))
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8078 (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
8079 (goto-char placeholder)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8080 (c-beginning-of-statement-1 lim t)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8081 (if (save-excursion
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8082 (c-backward-syntactic-ws lim)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8083 (eq (char-before) ?<))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8084 ;; In a nested template arglist.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8085 (progn
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8086 (goto-char placeholder)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8087 (c-syntactic-skip-backward "^,;" lim t)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8088 (c-forward-syntactic-ws))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8089 (back-to-indentation)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8090 ;; 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
8091 ;; template aware.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8092 (c-add-syntax 'template-args-cont (point)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8093
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
8094 ;; 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
8095 ((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
8096 (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
8097 (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
8098 (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
8099 (if (looking-at "static\\>[^_]")
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
8100 (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
8101 (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
8102 (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
8103 (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
8104 (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
8105 (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
8106 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
8107 (eq (char-after) ?:))))
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8108 (goto-char placeholder)
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8109 (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
8110
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
8111 ;; CASE 5D.5: Continuation of the "expression part" of 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
8112 ;; top level construct.
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8113 (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
8114 (while (and (eq (car (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
8115 '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
8116 (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
8117 (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
8118 (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
8119 (c-add-stmt-syntax
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
8120 (if (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
8121 ;; 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
8122 ;; 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
8123 ;; 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
8124 ;; the first variable declaration. C.f. case 5N.
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
8125 'topmost-intro-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
8126 'statement-cont)
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8127 nil nil containing-sexp paren-state))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8128 ))
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8129
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
8130 ;; 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
8131 ((and (eq char-after-ip ?})
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8132 (c-keyword-member containing-decl-kwd
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8133 'c-other-block-decl-kwds))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8134 ;; 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
8135 ;; 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
8136 (goto-char containing-decl-start)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8137 (c-add-stmt-syntax
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8138 (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
8139 ;; Special case for compatibility with the
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8140 ;; extern-lang syntactic symbols.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8141 'extern-lang-close
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8142 (intern (concat (symbol-name containing-decl-kwd)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8143 "-close")))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8144 nil t
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8145 (c-most-enclosing-brace paren-state (point))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8146 paren-state))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8147
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8148 ;; CASE 5G: we are looking at the brace which closes the
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8149 ;; enclosing nested class decl
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8150 ((and containing-sexp
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8151 (eq char-after-ip ?})
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8152 (eq containing-decl-open containing-sexp))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8153 (c-add-class-syntax 'class-close
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8154 containing-decl-open
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8155 containing-decl-start
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8156 containing-decl-kwd
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8157 paren-state))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8158
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8159 ;; CASE 5H: we could be looking at subsequent knr-argdecls
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8160 ((and c-recognize-knr-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
8161 (not (eq char-before-ip ?}))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8162 (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
8163 (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
8164 (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
8165 ;; 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
8166 ;; 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
8167 ;; (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
8168 ;; 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
8169 (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
8170 (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
8171 (< placeholder indent-point))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8172 (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
8173 (c-add-syntax 'knr-argdecl (point)))
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8174
30403
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
8175 ;; 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
8176 ((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
8177 (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
8178 (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
8179 (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
8180 ;; 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
8181 ;; 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
8182 ;; 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
8183 ;; 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
8184 ;; 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
8185 ;; directive.
27b53b1903b6 2005-05-23 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents: 62317
diff changeset
8186 (goto-char (point-min)))
30403
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
8187 (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
8188
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
8189 ;; 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
8190 ;; thereof.
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8191 ((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
8192 (setq placeholder (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
8193 (c-add-stmt-syntax
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
8194 (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
8195 (/= (point) placeholder))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
8196 'topmost-intro-cont
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
8197 'topmost-intro)
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8198 nil nil
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
8199 containing-sexp paren-state))
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8200
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
8201 ;; 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
8202 ;; 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
8203 ;; end at the closing '}'. C.f. case 5D.5.
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8204 ((progn
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8205 (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
8206 (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
8207 (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
8208 (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
8209 (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
8210 (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
8211 (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
8212 ;; 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
8213 (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
8214 (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
8215 (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
8216 (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
8217 ;; 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
8218 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
8219 (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
8220 (>= (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
8221 (goto-char placeholder)
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8222 (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
8223 containing-sexp paren-state))
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8224
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8225 ;; 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
8226
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
8227 ;; 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
8228 ;; 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
8229 ((and
9f636bd65206 Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents: 74372
diff changeset
8230 ;; 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
8231 (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
8232 (> 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
8233 (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
8234 (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
8235 (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
8236 (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
8237 (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
8238 (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
8239 'label))
9f636bd65206 Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents: 74372
diff changeset
8240 (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
8241 (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
8242 (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
8243 (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
8244 (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
8245 (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
8246 (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
8247 (< (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
8248 (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
8249 (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
8250 (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
8251 (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
8252 nil)))))
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8253 ;; 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
8254 ;; 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
8255 ;; 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
8256 ;; to remain compatible. :P
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8257 (goto-char placeholder)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8258 (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
8259 (if containing-decl-open
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8260 (if (c-keyword-member containing-decl-kwd
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8261 'c-other-block-decl-kwds)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8262 (progn
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8263 (goto-char containing-decl-open)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8264 (unless (= (point) (c-point 'boi))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8265 (goto-char containing-decl-start))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8266 (c-add-stmt-syntax
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8267 (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
8268 "extern")
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8269 ;; Special case for compatibility with the
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8270 ;; extern-lang syntactic symbols.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8271 'inextern-lang
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8272 (intern (concat "in"
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8273 (symbol-name containing-decl-kwd))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8274 nil t
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8275 (c-most-enclosing-brace paren-state (point))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8276 paren-state))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8277 (c-add-class-syntax 'inclass
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8278 containing-decl-open
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8279 containing-decl-start
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8280 containing-decl-kwd
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8281 paren-state)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8282 (when (and c-syntactic-indentation-in-macros
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8283 macro-start
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8284 (/= macro-start (c-point 'boi indent-point)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8285 (c-add-syntax 'cpp-define-intro)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8286 (setq macro-start nil)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8287
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
8288 ;; CASE 5K: we are at an ObjC method definition
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8289 ;; 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
8290 ((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
8291 (save-excursion
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8292 (c-beginning-of-statement-1 lim)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8293 (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
8294 (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
8295 (setq placeholder (point)))))
27b53b1903b6 2005-05-23 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents: 62317
diff changeset
8296 (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
8297
30403
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
8298 ;; CASE 5L: we are at the first argument of a template
26817
03befb219d03 Installed version 5.26
Gerd Moellmann <gerd@gnu.org>
parents: 25178
diff changeset
8299 ;; 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
8300 ((and c-recognize-<>-arglists
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8301 (eq (char-before) ?<)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8302 (not (and c-overloadable-operators-regexp
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8303 (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
8304 (c-beginning-of-statement-1 (c-safe-position (point) paren-state))
26817
03befb219d03 Installed version 5.26
Gerd Moellmann <gerd@gnu.org>
parents: 25178
diff changeset
8305 (c-add-syntax 'template-args-cont (c-point 'boi)))
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8306
75027
9f636bd65206 Update CC Mode to version 5.31.4. The detailed changes are those
Alan Mackenzie <acm@muc.de>
parents: 74372
diff changeset
8307 ;; 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
8308 (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
8309 (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
8310 (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
8311
30403
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
8312 ;; CASE 5M: we are at a topmost continuation line
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8313 (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
8314 (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
8315 (when (c-major-mode-is 'objc-mode)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8316 (setq placeholder (point))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8317 (while (and (c-forward-objc-directive)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8318 (< (point) indent-point))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8319 (c-forward-syntactic-ws)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8320 (setq placeholder (point)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8321 (goto-char placeholder))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8322 (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
8323 ))
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8324
30403
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
8325 ;; (CASE 6 has been removed.)
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8326
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8327 ;; CASE 7: line is an expression, not a statement. Most
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8328 ;; likely we are either in a function prototype or a function
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8329 ;; call argument list
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8330 ((not (or (and c-special-brace-lists
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8331 (save-excursion
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8332 (goto-char containing-sexp)
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8333 (c-looking-at-special-brace-list)))
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8334 (eq (char-after containing-sexp) ?{)))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8335 (cond
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8336
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
8337 ;; 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
8338 ;; 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
8339 ((memq char-after-ip '(?\) ?\]))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8340 (goto-char containing-sexp)
30403
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
8341 (setq placeholder (c-point 'boi))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
8342 (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
8343 (>= (point) placeholder))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
8344 (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
8345 (forward-char)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
8346 (skip-chars-forward " \t"))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
8347 (goto-char placeholder))
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8348 (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
8349 (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
8350 paren-state))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8351
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8352 ;; 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
8353 ;; 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
8354 ;; 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
8355 ((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
8356 (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
8357 (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
8358 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
8359 (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
8360 (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
8361 (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
8362 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
8363 (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
8364 (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
8365 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
8366 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
8367 ;; 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
8368 ;; 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
8369 ;; 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
8370 )))
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
8371 (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
8372 (back-to-indentation)
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8373 (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
8374 (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
8375 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
8376 (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
8377 (c-add-syntax (cdr tmpsymbol))))
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8378
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8379 ;; CASE 7C: we are looking at the first argument in an empty
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8380 ;; argument list. Use arglist-close if we're actually
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8381 ;; looking at a close paren or bracket.
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8382 ((memq char-before-ip '(?\( ?\[))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8383 (goto-char containing-sexp)
30403
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
8384 (setq placeholder (c-point 'boi))
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8385 (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
8386 (>= (point) placeholder))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8387 (progn
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8388 (forward-char)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8389 (skip-chars-forward " \t"))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8390 (goto-char placeholder))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8391 (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
8392 (c-most-enclosing-brace paren-state (point))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8393 paren-state))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8394
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8395 ;; CASE 7D: we are inside a conditional test clause. treat
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8396 ;; 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
8397 ((progn
20914
8f189ffad604 (c-forward-syntactic-ws, c-backward-syntactic-ws):
Richard M. Stallman <rms@gnu.org>
parents: 20142
diff changeset
8398 (goto-char containing-sexp)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
8399 (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
8400 (looking-at "\\<for\\>[^_]")))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8401 (goto-char (1+ containing-sexp))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8402 (c-forward-syntactic-ws indent-point)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8403 (if (eq char-before-ip ?\;)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8404 (c-add-syntax 'statement (point))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8405 (c-add-syntax 'statement-cont (point))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8406 ))
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8407
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
8408 ;; 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
8409 ;; 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
8410 ;; 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
8411 ((and c-opt-method-key
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8412 (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
8413 (progn
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8414 (goto-char (1- containing-sexp))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8415 (c-backward-syntactic-ws (c-point 'bod))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8416 (if (not (looking-at c-symbol-key))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8417 (c-add-syntax 'objc-method-call-cont containing-sexp))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8418 )))
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8419
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8420 ;; CASE 7F: we are looking at an arglist continuation line,
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8421 ;; but the preceding argument is on the same line as the
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8422 ;; opening paren. This case includes multi-line
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8423 ;; 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
8424 ;; 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
8425 ((progn
36920
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
8426 (goto-char (1+ containing-sexp))
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8427 (< (save-excursion
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8428 (c-forward-syntactic-ws)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8429 (point))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8430 (c-point 'bonl)))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8431 (goto-char containing-sexp)
30403
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
8432 (setq placeholder (c-point 'boi))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
8433 (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
8434 (>= (point) placeholder))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
8435 (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
8436 (forward-char)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
8437 (skip-chars-forward " \t"))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
8438 (goto-char placeholder))
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8439 (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
8440 (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
8441 paren-state))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8442
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8443 ;; CASE 7G: we are looking at just a normal arglist
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8444 ;; 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
8445 (t (c-forward-syntactic-ws indent-point)
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8446 (c-add-syntax 'arglist-cont (c-point 'boi)))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8447 ))
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8448
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8449 ;; 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
8450 ((and (c-major-mode-is 'c++-mode)
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8451 (save-excursion
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8452 (goto-char indent-point)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8453 (skip-chars-forward " \t")
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
8454 (looking-at c-opt-postfix-decl-spec-key)))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8455 (goto-char indent-point)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8456 (skip-chars-forward " \t")
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8457 (cond
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8458
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8459 ;; CASE 8A: non-hanging colon on an inher intro
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8460 ((eq char-after-ip ?:)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8461 (c-backward-syntactic-ws lim)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8462 (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
8463
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8464 ;; CASE 8B: hanging colon on an inher intro
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8465 ((eq char-before-ip ?:)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8466 (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
8467
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8468 ;; CASE 8C: a continued inheritance line
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8469 (t
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8470 (c-beginning-of-inheritance-list lim)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8471 (c-add-syntax 'inher-cont (point))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8472 )))
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8473
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8474 ;; 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
8475 ((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
8476 (setq special-brace-list
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8477 (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
8478 (save-excursion
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
8479 (goto-char containing-sexp)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
8480 (c-looking-at-special-brace-list)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
8481 (c-inside-bracelist-p containing-sexp paren-state))))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8482 (cond
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8483
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8484 ;; CASE 9A: In the middle of a special brace list opener.
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8485 ((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
8486 (save-excursion
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
8487 (goto-char containing-sexp)
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
8488 (eq (char-after) ?\())
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8489 (eq char-after-ip (car (cdr special-brace-list))))
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8490 (goto-char (car (car special-brace-list)))
26817
03befb219d03 Installed version 5.26
Gerd Moellmann <gerd@gnu.org>
parents: 25178
diff changeset
8491 (skip-chars-backward " \t")
36920
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
8492 (if (and (bolp)
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
8493 (assoc 'statement-cont
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
8494 (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
8495 (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
8496 (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
8497 (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
8498 (c-forward-token-2 0)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
8499 (while (looking-at c-specifier-key)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
8500 (goto-char (match-end 1))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
8501 (c-forward-syntactic-ws))
26817
03befb219d03 Installed version 5.26
Gerd Moellmann <gerd@gnu.org>
parents: 25178
diff changeset
8502 (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
8503
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8504 ;; CASE 9B: brace-list-close brace
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8505 ((if (consp special-brace-list)
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8506 ;; Check special brace list closer.
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8507 (progn
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8508 (goto-char (car (car special-brace-list)))
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8509 (save-excursion
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8510 (goto-char indent-point)
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8511 (back-to-indentation)
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8512 (or
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8513 ;; We were between the special close char and the `)'.
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8514 (and (eq (char-after) ?\))
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8515 (eq (1+ (point)) (cdr (car special-brace-list))))
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8516 ;; We were before the special close char.
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8517 (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
8518 (zerop (c-forward-token-2))
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8519 (eq (1+ (point)) (cdr (car special-brace-list)))))))
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8520 ;; Normal brace list check.
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8521 (and (eq char-after-ip ?})
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
8522 (c-safe (goto-char (c-up-list-backward (point))) t)
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8523 (= (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
8524 (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
8525 (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
8526 (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
8527 (c-beginning-of-statement-1 lim)
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8528 (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
8529
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8530 (t
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8531 ;; Prepare for the rest of the cases below by going to the
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8532 ;; token following the opening brace
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8533 (if (consp special-brace-list)
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8534 (progn
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8535 (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
8536 (c-forward-token-2 1 nil indent-point))
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8537 (goto-char containing-sexp))
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8538 (forward-char)
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8539 (let ((start (point)))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8540 (c-forward-syntactic-ws indent-point)
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8541 (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
8542 (c-skip-ws-forward indent-point)
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8543 (cond
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8544
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8545 ;; CASE 9C: we're looking at the first line in a brace-list
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8546 ((= (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
8547 (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
8548 (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
8549 (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
8550 (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
8551 (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
8552 (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
8553 (c-beginning-of-statement-1 lim)
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8554 (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
8555
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8556 ;; CASE 9D: this is just a later brace-list-entry or
36920
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
8557 ;; brace-entry-open
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8558 (t (if (or (eq char-after-ip ?{)
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8559 (and c-special-brace-lists
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8560 (save-excursion
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8561 (goto-char indent-point)
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8562 (c-forward-syntactic-ws (c-point 'eol))
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8563 (c-looking-at-special-brace-list (point)))))
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8564 (c-add-syntax 'brace-entry-open (point))
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8565 (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
8566 ))
7a3ac6c387fe CC Mode 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 ))))
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8568
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
8569 ;; 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
8570 ((and (not (memq char-before-ip '(?\; ?:)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8571 (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
8572 (or (not (eq char-before-ip ?}))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8573 (c-looking-at-inexpr-block-backward c-state-cache))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8574 (> (point)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8575 (save-excursion
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8576 (c-beginning-of-statement-1 containing-sexp)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8577 (setq placeholder (point))))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8578 (/= 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
8579 ;; 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
8580 (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
8581 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
8582 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
8583 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
8584 paren-state))
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8585
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8586 ;; CASE 16: block close brace, possibly closing the defun or
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8587 ;; the class
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8588 ((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
8589 ;; 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
8590 (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
8591 (goto-char containing-sexp)
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8592 (cond
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8593
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
8594 ;; 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
8595 ;; 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
8596 ;; 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
8597 ;; 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
8598 ((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
8599 (c-backward-to-block-anchor lim)
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8600 (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
8601
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8602 ;; 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
8603 ;; 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
8604 ((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
8605 (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
8606 nil))
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8607 (setq tmpsymbol (if (eq (car placeholder) 'inlambda)
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8608 'inline-close
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8609 'block-close))
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8610 (goto-char containing-sexp)
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8611 (back-to-indentation)
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8612 (if (= containing-sexp (point))
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8613 (c-add-syntax tmpsymbol (point))
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8614 (goto-char (cdr placeholder))
36920
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
8615 (back-to-indentation)
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8616 (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
8617 (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
8618 paren-state)
36920
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
8619 (if (/= (point) (cdr placeholder))
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
8620 (c-add-syntax (car placeholder)))))
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8621
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8622 ;; 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
8623 ;; a non-class declaration level block?
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8624 ((save-excursion
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8625 (and lim
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8626 (progn
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8627 (goto-char lim)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8628 (c-looking-at-decl-block
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8629 (c-most-enclosing-brace paren-state lim)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8630 nil))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8631 (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
8632 (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
8633 (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
8634 (if (save-excursion
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8635 (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
8636 (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
8637 (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
8638 (c-add-syntax 'inline-close (point))))
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8639
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
8640 ;; 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
8641 ;; 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
8642 ;; 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
8643 ;; 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
8644 ;; 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
8645 ((save-excursion
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8646 (and (not (c-at-statement-start-p))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8647 (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
8648 (setq placeholder (point))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8649 (let ((c-recognize-typeless-decls nil))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8650 ;; Turn off recognition of constructs that
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8651 ;; 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
8652 ;; 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
8653 (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
8654 (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
8655 (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
8656 (goto-char placeholder))
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8657 (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
8658
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8659 ;; 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
8660 ;; 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
8661 ;; level blocks have been handled above.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8662 (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
8663 ;; 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
8664 ;; 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
8665 ;; 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
8666 ;; 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
8667 ;; 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
8668 ;; 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
8669 (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
8670 (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
8671 (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
8672 (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
8673 (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
8674 (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
8675 ;; 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
8676 ;; 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
8677 (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
8678
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8679 ;; CASE 16D: Only top level defun close left.
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8680 (t
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8681 (goto-char containing-sexp)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8682 (c-backward-to-decl-anchor lim)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8683 (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
8684 (c-most-enclosing-brace paren-state)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8685 paren-state))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8686 ))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8687
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
8688 ;; CASE 17: Statement or defun catchall.
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8689 (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
8690 (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
8691 ;; 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
8692 (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
8693 (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
8694 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
8695 (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
8696 (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
8697 (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
8698 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
8699 (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
8700 (/= (point) (c-point 'boi)))))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8701 (cond
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8702
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8703 ;; 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
8704 ((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
8705 (/= (point) indent-point))
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8706 (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
8707 containing-sexp paren-state))
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8708
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
8709 ;; 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
8710 ((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
8711 (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
8712 (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
8713 (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
8714 (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
8715 (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
8716 (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
8717 '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
8718 'statement-case-intro)
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8719 nil t containing-sexp paren-state))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8720
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8721 ;; 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
8722 ((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
8723 (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
8724 (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
8725 (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
8726 (eq step-type 'previous))
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8727 (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
8728 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
8729 (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
8730 (c-add-syntax 'block-open)))
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8731
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
8732 ;; 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
8733 ((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
8734 ;; 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
8735 (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
8736 ;; 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
8737 (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
8738 (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
8739 (c-backward-to-block-anchor lim)
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8740 (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
8741 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
8742 (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
8743 (c-add-syntax 'block-open)))
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8744
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
8745 ;; 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
8746 ;; 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
8747 ((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
8748 (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
8749 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
8750 (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
8751 '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
8752 'statement-block-intro))
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8753 (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
8754 (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
8755 (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
8756 (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
8757 (back-to-indentation)
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8758 (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
8759 (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
8760 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
8761 (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
8762 (c-add-syntax (car placeholder))))
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8763 (if (eq char-after-ip ?{)
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8764 (c-add-syntax 'block-open)))
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8765
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
8766 ;; CASE 17F: first statement in an inline, or first
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8767 ;; statement in a top-level defun. we can tell this is it
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8768 ;; 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
8769 ;; narrowed out by a class (i.e. don't use bod here).
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8770 ((save-excursion
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8771 (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
8772 paren-state)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8773 (and (progn
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8774 (goto-char placeholder)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8775 (eq (char-after) ?{))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8776 (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
8777 paren-state (point))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8778 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
8779 (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
8780 (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
8781 (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
8782
30403
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
8783 ;; 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
8784 ;; 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
8785 ;; 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
8786 ;; 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
8787 ((save-excursion
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8788 (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
8789 (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
8790 (setq placeholder (point))
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8791 (let ((c-recognize-typeless-decls nil))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8792 ;; Turn off recognition of constructs that lacks
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8793 ;; 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
8794 ;; 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
8795 (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
8796 (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
8797 (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
8798 (goto-char placeholder))
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8799 (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
8800 lim paren-state))
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8801
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8802 ;; 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
8803 (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
8804 ;; 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
8805 ;; 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
8806 ;; 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
8807 ;; 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
8808 ;; 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
8809 ;; 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
8810 (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
8811 (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
8812 (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
8813 (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
8814 (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
8815 (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
8816 ;; 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
8817 ;; 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
8818 (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
8819 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
8820 (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
8821 (c-add-syntax 'block-open)))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8822 ))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8823 )
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8824
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8825 ;; now we need to look at any modifiers
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8826 (goto-char indent-point)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8827 (skip-chars-forward " \t")
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8828
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
8829 ;; 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
8830 (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
8831 (/= (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
8832 (c-append-syntax 'comment-intro))
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8833
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
8834 ;; 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
8835 (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
8836 (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
8837 (c-append-syntax 'friend))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
8838
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
8839 ;; Set syntactic-relpos.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
8840 (let ((p c-syntactic-context))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
8841 (while (and p
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8842 (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
8843 (progn
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8844 (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
8845 nil)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
8846 t))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
8847 (setq p (cdr p))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
8848
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
8849 ;; 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
8850 (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
8851 (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
8852 (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
8853 (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
8854 (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
8855 (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
8856 (if in-macro-expr
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
8857 (when (or
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
8858 (< syntactic-relpos macro-start)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
8859 (not (or
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
8860 (assq 'arglist-intro c-syntactic-context)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
8861 (assq 'arglist-cont c-syntactic-context)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
8862 (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
8863 (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
8864 ;; 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
8865 ;; 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
8866 ;; 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
8867 ;; 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
8868 ;; 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
8869 ;; expression.
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
8870 (setq c-syntactic-context nil)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
8871 (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
8872 (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
8873 (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
8874 (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
8875 (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
8876 (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
8877 (<= (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
8878 ;; 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
8879 ;; 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
8880 ;; 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
8881 ;; 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
8882 (c-add-syntax 'cpp-define-intro)))))
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8883
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8884 ;; return the syntax
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8885 c-syntactic-context)))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8886
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8887
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
8888 ;; Indentation calculation.
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8889
36920
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
8890 (defun c-evaluate-offset (offset langelem symbol)
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
8891 ;; offset can be a number, a function, a variable, a list, or one of
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
8892 ;; the symbols + or -
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8893 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8894 ;; This function might do hidden buffer changes.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8895 (let ((res
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8896 (cond
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8897 ((numberp offset) offset)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8898 ((vectorp offset) offset)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8899 ((null offset) nil)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8900
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8901 ((eq offset '+) c-basic-offset)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8902 ((eq offset '-) (- c-basic-offset))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8903 ((eq offset '++) (* 2 c-basic-offset))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8904 ((eq offset '--) (* 2 (- c-basic-offset)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8905 ((eq offset '*) (/ c-basic-offset 2))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8906 ((eq offset '/) (/ (- c-basic-offset) 2))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8907
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8908 ((functionp offset)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8909 (c-evaluate-offset
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8910 (funcall offset
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8911 (cons (c-langelem-sym langelem)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8912 (c-langelem-pos langelem)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8913 langelem symbol))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8914
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8915 ((listp offset)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8916 (cond
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8917 ((eq (car offset) 'quote)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8918 (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
8919 offset symbol)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8920 nil)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8921
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8922 ((memq (car offset) '(min max))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8923 (let (res val (method (car offset)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8924 (setq offset (cdr offset))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8925 (while offset
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8926 (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
8927 (cond
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8928 ((not val))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8929 ((not res)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8930 (setq res val))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8931 ((integerp val)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8932 (if (vectorp res)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8933 (c-benign-error "\
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8934 Error evaluating offset %S for %s: \
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8935 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
8936 (car offset) symbol res val method)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8937 (setq res (funcall method res val))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8938 (t
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8939 (if (integerp res)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8940 (c-benign-error "\
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8941 Error evaluating offset %S for %s: \
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8942 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
8943 (car offset) symbol res val method)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8944 (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
8945 (aref val 0)))))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8946 (setq offset (cdr offset)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8947 res))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8948
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8949 ((eq (car offset) 'add)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8950 (let (res val)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8951 (setq offset (cdr offset))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8952 (while offset
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8953 (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
8954 (cond
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8955 ((not val))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8956 ((not res)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8957 (setq res val))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8958 ((integerp val)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8959 (if (vectorp res)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8960 (setq res (vector (+ (aref res 0) val)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8961 (setq res (+ res val))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8962 (t
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8963 (if (vectorp res)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8964 (c-benign-error "\
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8965 Error evaluating offset %S for %s: \
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8966 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
8967 (car offset) symbol res val)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8968 (setq res val)))) ; Override.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8969 (setq offset (cdr offset)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8970 res))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8971
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8972 (t
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8973 (let (res)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8974 (when (eq (car offset) 'first)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8975 (setq offset (cdr offset)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8976 (while (and (not res) offset)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8977 (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
8978 offset (cdr offset)))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8979 res))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8980
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8981 ((and (symbolp offset) (boundp offset))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8982 (symbol-value offset))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8983
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8984 (t
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8985 (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
8986 nil))))
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8987
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8988 (if (or (null res) (integerp res)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8989 (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
8990 res
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8991 (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
8992 offset symbol res)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
8993 nil)))
36920
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
8994
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
8995 (defun c-calc-offset (langelem)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
8996 ;; 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
8997 ;; 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
8998 ;; 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
8999 ;; 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
9000 ;; 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
9001 ;; from that is returned.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
9002 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
9003 ;; This function might do hidden buffer changes.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
9004 (let* ((symbol (c-langelem-sym langelem))
36920
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
9005 (match (assq symbol c-offsets-alist))
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
9006 (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
9007 (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
9008 (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
9009 (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
9010 (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
9011 (setq offset 0))
36920
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
9012 (if (vectorp offset)
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
9013 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
9014 (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
9015 (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
9016 0))
36920
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
9017 ))
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
9018
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
9019 (defun c-get-offset (langelem)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
9020 ;; 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
9021 ;; 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
9022 ;; 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
9023 ;; new list form.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
9024 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
9025 ;; This function might do hidden buffer changes.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
9026 (if (c-langelem-pos langelem)
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
9027 (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
9028 (c-langelem-pos langelem)))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
9029 (c-calc-offset langelem)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
9030
36920
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
9031 (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
9032 ;; 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
9033 ;; as returned by `c-guess-syntax'.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
9034 ;;
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
9035 ;; 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
9036 ;; 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
9037 ;; 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
9038 ;; 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
9039 ;; precede topmost-intro in the LANGELEMS list.
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
9040 ;;
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
9041 ;; 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
9042 (let ((indent 0) anchor)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
9043
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
9044 (while langelems
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
9045 (let* ((c-syntactic-element (car langelems))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
9046 (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
9047
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
9048 (if (vectorp res)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
9049 ;; 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
9050 ;; 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
9051 ;; 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
9052 ;; further down the langelems list.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
9053 (setq indent (elt res 0)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
9054 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
9055
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
9056 ;; 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
9057 ;; indentation.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
9058 (setq indent (+ indent res))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
9059
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
9060 ;; 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
9061 ;; element with one.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
9062 (unless anchor
67252
04d2abb755d9 Update CC Mode to release 5.31.
Alan Mackenzie <acm@muc.de>
parents: 64833
diff changeset
9063 (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
9064
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
9065 (setq langelems (cdr langelems))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
9066
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
9067 (if anchor
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
9068 (+ indent (save-excursion
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
9069 (goto-char anchor)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
9070 (current-column)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
9071 indent)))
26817
03befb219d03 Installed version 5.26
Gerd Moellmann <gerd@gnu.org>
parents: 25178
diff changeset
9072
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
9073
36920
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
9074 (cc-provide 'cc-engine)
38422
7a94f1c588c4 Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 36920
diff changeset
9075
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 52339
diff changeset
9076 ;;; arch-tag: 149add18-4673-4da5-ac47-6805e4eae089
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
9077 ;;; cc-engine.el ends here