annotate lisp/progmodes/cc-engine.el @ 58928:4a354500d0f8

ffap-dired-at-point -> dired-at-point
author Juri Linkov <juri@jurta.org>
date Mon, 13 Dec 2004 05:28:11 +0000
parents b7446b6f097d
children 3ae147d964be d8411455de48
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
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3 ;; Copyright (C) 1985,1987,1992-2003 Free Software Foundation, Inc.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5 ;; Authors: 1998- Martin Stjernholm
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6 ;; 1992-1999 Barry A. Warsaw
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7 ;; 1987 Dave Detlefs and Stewart Clamen
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8 ;; 1985 Richard M. Stallman
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
9 ;; Maintainer: bug-cc-mode@gnu.org
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
10 ;; Created: 22-Apr-1997 (split from cc-mode.el)
20142
e66d1eef0bff (c-guess-basic-syntax):
Karl Heuer <kwzh@gnu.org>
parents: 20139
diff changeset
11 ;; Version: See cc-mode.el
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
12 ;; Keywords: c languages oop
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
13
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
14 ;; This file is part of GNU Emacs.
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
15
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
16 ;; GNU Emacs is free software; you can redistribute it and/or modify
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
17 ;; 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
18 ;; the Free Software Foundation; either version 2, or (at your option)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
19 ;; any later version.
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
20
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
21 ;; GNU Emacs is distributed in the hope that it will be useful,
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
22 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
23 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
24 ;; GNU General Public License for more details.
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
25
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
26 ;; You should have received a copy of the GNU General Public License
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
27 ;; along with GNU Emacs; see the file COPYING. If not, write to
36920
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
28 ;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
29 ;; Boston, MA 02111-1307, USA.
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
30
38422
7a94f1c588c4 Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 36920
diff changeset
31 ;;; Commentary:
7a94f1c588c4 Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 36920
diff changeset
32
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
33 ;; 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
34 ;; 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
35 ;; 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
36 ;; 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
37 ;; 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
38 ;;
7a3ac6c387fe CC Mode 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 ;; (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
40 ;; 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
41 ;; 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
42
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
43 ;; Hidden buffer changes
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
44 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
45 ;; 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
46 ;; syntactic markup purposes, and those of them that might modify such
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
47 ;; properties are said to do "hidden buffer changes". They should be
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
48 ;; used within `c-save-buffer-state' or a similar function that saves
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
49 ;; and restores buffer modifiedness etc.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
50 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
51 ;; Interactive functions are assumed to not do hidden buffer changes
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
52 ;; (this isn't applicable in the specific parts of them that do real
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
53 ;; changes, though).
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
54 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
55 ;; All other functions are assumed to do hidden buffer changes and
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
56 ;; must thus be wrapped inside `c-save-buffer-state' if they're used
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
57 ;; from any function that does not do hidden buffer changes.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
58 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
59 ;; Every function, except the interactive ones, that doesn't do hidden
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
60 ;; buffer changes have that explicitly stated in their docstring or
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
61 ;; comment.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
62
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
63 ;; Use of text properties
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
64 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
65 ;; 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
66 ;; 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
67 ;; interactive refontification.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
68 ;;
51829
d508ffa43505 2003-07-08 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents: 51714
diff changeset
69 ;; 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
70 ;; 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
71 ;;
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
72 ;; 'syntax-table
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
73 ;; 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
74 ;; 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
75 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
76 ;; 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
77 ;; 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
78 ;; 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
79 ;; `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
80 ;; >= 21).
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
81 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
82 ;; '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
83 ;; 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
84 ;; 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
85 ;; below for further details.
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 ;; 'c-type
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
88 ;; This property is used on single characters to mark positions with
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
89 ;; special syntactic relevance of various sorts. It's primary use
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
90 ;; is to avoid glitches when multiline constructs are refontified
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
91 ;; 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
92 ;; 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
93 ;; 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
94 ;; 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
95 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
96 ;; 'c-decl-arg-start
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
97 ;; 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
98 ;; 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
99 ;; prototype).
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
100 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
101 ;; 'c-decl-end
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
102 ;; 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
103 ;; 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
104 ;; 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
105 ;; `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
106 ;; `c-find-decl-spots').
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
107 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
108 ;; 'c-<>-arg-sep
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
109 ;; 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
110 ;; arglists like C++ template arglists.
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-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
113 ;; 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
114 ;; 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
115 ;; 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
116 ;; '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
117 ;; 'c-decl-id-start otherwise.
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-awk-NL-prop
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
120 ;; 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
121 ;; cc-awk.el.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
122
38422
7a94f1c588c4 Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 36920
diff changeset
123 ;;; Code:
7a94f1c588c4 Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 36920
diff changeset
124
26817
03befb219d03 Installed version 5.26
Gerd Moellmann <gerd@gnu.org>
parents: 25178
diff changeset
125 (eval-when-compile
03befb219d03 Installed version 5.26
Gerd Moellmann <gerd@gnu.org>
parents: 25178
diff changeset
126 (let ((load-path
36920
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
127 (if (and (boundp 'byte-compile-dest-file)
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
128 (stringp byte-compile-dest-file))
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
129 (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
130 load-path)))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
131 (load "cc-bytecomp" nil t)))
36920
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
132
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
133 (cc-require 'cc-defs)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
134 (cc-require-when-compile 'cc-langs)
36920
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
135 (cc-require 'cc-vars)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
136
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
137 ;; Some functions/constants in cc-awk.el that are called/referenced here.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
138 ;; (Can't use cc-require due to cyclicity.)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
139 (cc-bytecomp-defun c-awk-unstick-NL-prop)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
140 (cc-bytecomp-defun c-awk-clear-NL-props)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
141 (cc-bytecomp-defvar awk-mode-syntax-table)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
142 (cc-bytecomp-defun c-awk-backward-syntactic-ws)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
143 (cc-bytecomp-defun c-awk-after-logical-semicolon)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
144 (cc-bytecomp-defun c-awk-NL-prop-not-set)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
145 (cc-bytecomp-defun c-awk-completed-stmt-ws-ends-line-p)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
146 (cc-bytecomp-defun c-awk-completed-stmt-ws-ends-prev-line-p)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
147 (cc-bytecomp-defun c-awk-prev-line-incomplete-p)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
148 (cc-bytecomp-defun c-awk-after-change)
36920
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
149
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
150 ;; Silence the compiler.
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
151 (cc-bytecomp-defun buffer-syntactic-context) ; XEmacs
26817
03befb219d03 Installed version 5.26
Gerd Moellmann <gerd@gnu.org>
parents: 25178
diff changeset
152
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
153
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
154 ;; 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
155
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
156 (defmacro c-declare-lang-variables ()
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
157 `(progn
51888
b5a29d6f2851 (c-declare-lang-variables): Don't use mapcan.
Richard M. Stallman <rms@gnu.org>
parents: 51829
diff changeset
158 ,@(apply 'nconc
b5a29d6f2851 (c-declare-lang-variables): Don't use mapcan.
Richard M. Stallman <rms@gnu.org>
parents: 51829
diff changeset
159 (mapcar (lambda (init)
b5a29d6f2851 (c-declare-lang-variables): Don't use mapcan.
Richard M. Stallman <rms@gnu.org>
parents: 51829
diff changeset
160 `(,(if (elt init 2)
b5a29d6f2851 (c-declare-lang-variables): Don't use mapcan.
Richard M. Stallman <rms@gnu.org>
parents: 51829
diff changeset
161 `(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
162 `(defvar ,(car init) nil))
b5a29d6f2851 (c-declare-lang-variables): Don't use mapcan.
Richard M. Stallman <rms@gnu.org>
parents: 51829
diff changeset
163 (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
164 (cdr c-lang-variable-inits)))))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
165 (c-declare-lang-variables)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
166
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 variables.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
169
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
170 ;; Internal state of hungry delete key feature
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
171 (defvar c-hungry-delete-key nil)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
172 (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
173
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
174 ;; Internal state of auto newline feature.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
175 (defvar c-auto-newline nil)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
176 (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
177
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
178 ;; Internal auto-newline/hungry-delete designation string for mode line.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
179 (defvar c-auto-hungry-string nil)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
180 (make-variable-buffer-local 'c-auto-hungry-string)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
181
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
182 (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
183 ;; 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
184 ;; 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
185 ;; 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
186 (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
187 (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
188 (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
189 (> 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
190
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
191 ;; Dynamically bound cache for `c-in-literal'.
36920
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
192 (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
193
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
194 ;; Must be set in buffers where the `c-type' text property might be used
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
195 ;; with the value `c-decl-end'.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
196 (defvar c-type-decl-end-used nil)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
197 (make-variable-buffer-local 'c-type-decl-end-used)
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 ;; This function does not do any hidden buffer changes.
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
209 (if (symbolp c-macro-start)
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
210 (setq c-macro-start (save-excursion
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
211 (and (c-beginning-of-macro)
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
212 (point))))
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 ;; This function does not do any hidden buffer changes.
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
217 (if (symbolp c-macro-start)
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
218 (save-excursion
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
219 (and (c-beginning-of-macro)
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
220 (point)))
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
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
228 This function does not do any hidden buffer changes."
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
229 (when c-opt-cpp-prefix
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
230 (let ((here (point)))
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
231 (save-restriction
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
232 (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
233 (beginning-of-line)
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
234 (while (eq (char-before (1- (point))) ?\\)
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
235 (forward-line -1))
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
236 (back-to-indentation)
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
237 (if (and (<= (point) here)
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
238 (looking-at c-opt-cpp-start))
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
239 t
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
240 (goto-char here)
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
241 nil)))))
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
242
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
243 (defun c-end-of-macro ()
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
244 "Go to the end of a preprocessor directive.
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
245 More accurately, move point to the end of the closest following line
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
246 that doesn't end with a line continuation backslash.
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
247
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
248 This function does not do any hidden buffer changes."
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
249 (while (progn
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
250 (end-of-line)
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
251 (when (and (eq (char-before) ?\\)
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
252 (not (eobp)))
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
253 (forward-char)
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
254 t))))
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
255
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
256 (defun c-forward-to-cpp-define-body ()
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
257 ;; 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
258 ;; directive, it's moved forward to the start of the definition body
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
259 ;; if it's a "#define". Non-nil is returned in this case, in all
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
260 ;; other cases nil is returned and point isn't moved.
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
261 (when (and (looking-at
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
262 (concat "#[ \t]*"
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
263 "define[ \t]+\\(\\sw\\|_\\)+\\(\([^\)]*\)\\)?"
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
264 "\\([ \t]\\|\\\\\n\\)*"))
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
265 (not (= (match-end 0) (c-point 'eol))))
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
266 (goto-char (match-end 0))))
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
267
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
268
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
269 ;;; Basic utility functions.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
270
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
271 (defun c-syntactic-content (from to)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
272 ;; 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
273 ;; whitespace is removed or, where necessary, replaced with a single
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
274 ;; space.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
275 (save-excursion
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
276 (goto-char from)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
277 (let* ((parts (list nil)) (tail parts) pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
278 (while (re-search-forward c-syntactic-ws-start to t)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
279 (goto-char (setq pos (match-beginning 0)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
280 (c-forward-syntactic-ws to)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
281 (if (= (point) pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
282 (forward-char)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
283 (if (and (> pos from)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
284 (< (point) to)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
285 (looking-at "\\w\\|\\s_")
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
286 (save-excursion
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
287 (goto-char (1- pos))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
288 (looking-at "\\w\\|\\s_")))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
289 (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
290 (setcdr tail (list (buffer-substring-no-properties from pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
291 " "))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
292 (setq tail (cddr tail)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
293 (setcdr tail (list (buffer-substring-no-properties from pos)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
294 (setq tail (cdr tail)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
295 (setq from (point))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
296 (setcdr tail (list (buffer-substring-no-properties from to)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
297 (apply 'concat (cdr parts)))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
298
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
299 (defsubst c-keyword-sym (keyword)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
300 ;; Return non-nil if the string KEYWORD is a known keyword. More
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
301 ;; precisely, the value is the symbol for the keyword in
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
302 ;; `c-keywords-obarray'.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
303 (intern-soft keyword c-keywords-obarray))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
304
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
305 (defsubst c-keyword-member (keyword-sym lang-constant)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
306 ;; Return non-nil if the symbol KEYWORD-SYM, as returned by
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
307 ;; `c-keyword-sym', is a member of LANG-CONSTANT, which is the name
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
308 ;; of a language constant that ends with "-kwds". If KEYWORD-SYM is
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
309 ;; nil then the result is nil.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
310 (get keyword-sym lang-constant))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
311
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
312 ;; String syntax chars, suitable for skip-syntax-(forward|backward).
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
313 (defconst c-string-syntax (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
314 "\"|"
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
315 "\""))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
316
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
317 ;; Regexp matching string start syntax.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
318 (defconst c-string-limit-regexp (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
319 "\\s\"\\|\\s|"
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
320 "\\s\""))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
321
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
322 ;; Holds formatted error strings for the few cases where parse errors
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
323 ;; are reported.
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
324 (defvar c-parsing-error nil)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
325 (make-variable-buffer-local 'c-parsing-error)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
326
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
327 (defun c-echo-parsing-error (&optional quiet)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
328 ;; 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
329 (when (and c-report-syntactic-errors c-parsing-error (not quiet))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
330 (c-benign-error "%s" c-parsing-error))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
331 c-parsing-error)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
332
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
333 ;; Faces given to comments and string literals. This is used in some
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
334 ;; situations to speed up recognition; it isn't mandatory that font
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
335 ;; locking is in use. This variable is extended with the face in
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
336 ;; `c-doc-face-name' when fontification is activated in cc-fonts.el.
51947
668a21083a47 (c-literal-faces): Declare as a variable since it might be modified.
Martin Stjernholm <mast@lysator.liu.se>
parents: 51888
diff changeset
337 (defvar c-literal-faces
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
338 '(font-lock-comment-face font-lock-string-face))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
339
53073
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
340 (defun c-shift-line-indentation (shift-amt)
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
341 ;; This function does not do any hidden buffer changes.
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
342 (let ((pos (- (point-max) (point)))
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
343 (c-macro-start c-macro-start)
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
344 tmp-char-inserted)
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
345 (if (zerop shift-amt)
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
346 nil
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
347 (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
348 (looking-at "[ \t]*\\\\$")
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
349 (save-excursion
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
350 (skip-chars-backward " \t")
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
351 (bolp)))
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
352 (insert ?x)
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
353 (backward-char)
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
354 (setq tmp-char-inserted t))
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
355 (unwind-protect
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
356 (let ((col (current-indentation)))
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
357 (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
358 (beginning-of-line)
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
359 (indent-to (+ col shift-amt)))
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
360 (when tmp-char-inserted
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
361 (delete-char 1))))
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
362 ;; 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
363 ;; 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
364 ;; 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
365 (if (and (< (point) (c-point 'boi))
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
366 (not tmp-char-inserted))
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
367 (back-to-indentation)
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
368 (if (> (- (point-max) pos) (point))
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
369 (goto-char (- (point-max) pos))))))
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
370
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
371
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
372 ;; 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
373 ;; 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
374
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
375 (cc-bytecomp-defun overlays-in)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
376 (cc-bytecomp-defun overlay-get)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
377 (cc-bytecomp-defun overlay-start)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
378 (cc-bytecomp-defun overlay-end)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
379 (cc-bytecomp-defun delete-overlay)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
380 (cc-bytecomp-defun overlay-put)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
381 (cc-bytecomp-defun make-overlay)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
382
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
383 (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
384 (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
385 (while overlays
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
386 (setq overlay (car overlays)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
387 overlays (cdr overlays))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
388 (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
389 (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
390 end (max end (overlay-end overlay)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
391 (delete-overlay overlay)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
392 (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
393
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
394 (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
395 (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
396 (ol-beg beg) (ol-end end))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
397 (while overlays
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
398 (setq overlay (car overlays)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
399 overlays (cdr overlays))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
400 (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
401 (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
402 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
403 (delete-overlay overlay)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
404 (when (< ol-beg beg)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
405 (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
406 (when (> ol-end end)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
407 (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
408
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
409
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
410 ;; `c-beginning-of-statement-1' and accompanying stuff.
36920
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
411
18844
6b269c4ad2eb (c-maybe-labelp): Add defvar.
Richard M. Stallman <rms@gnu.org>
parents: 18720
diff changeset
412 ;; 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
413 ;; 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
414 ;; 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
415 ;; the byte compiler.
6b269c4ad2eb (c-maybe-labelp): Add defvar.
Richard M. Stallman <rms@gnu.org>
parents: 18720
diff changeset
416 (defvar c-maybe-labelp nil)
6b269c4ad2eb (c-maybe-labelp): Add defvar.
Richard M. Stallman <rms@gnu.org>
parents: 18720
diff changeset
417
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
418 ;; 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
419
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
420 ;; 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
421 ;; 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
422 (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
423 '(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
424 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
425 (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
426 `(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
427 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
428 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
429 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
430 ,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
431 (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
432 (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
433 '(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
434 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
435 ;; 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
436 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
437 (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
438 '(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
439 (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
440 '(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
441 (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
442 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
443 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
444 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
445 (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
446 (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
447 (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
448 `(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
449 (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
450 '(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
451 (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
452 (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
453 (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
454 (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
455 (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
456 (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
457
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
458 (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
459 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
460 "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
461 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
462 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
463 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
464
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
465 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
466 \"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
467 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
468 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
469 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
470 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
471
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
472 Labels are treated as separate statements if IGNORE-LABELS is 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
473 The function is not overly intelligent in telling labels from other
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
474 uses of colons; if used outside a statement context it might trip 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
475 on e.g. inherit colons, so IGNORE-LABELS should be used then. There
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
476 should be no such mistakes in a statement context, however.
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
477
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
478 Macros are ignored unless point is within one, in which case 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
479 content of the macro is treated as normal code. Aside from any 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
480 statement starts found in it, stop at the first token of the content
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
481 in the macro, i.e. the expression of an \"#if\" or the start 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
482 definition in a \"#define\". Also stop at start of macros 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
483 leaving them.
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
484
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
485 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
486 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
487 '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
488 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
489 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
490 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
491
7a3ac6c387fe CC Mode 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 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
493 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
494 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
495
7a3ac6c387fe CC Mode 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 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
497
7a3ac6c387fe CC Mode 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 Normally only ';' is considered to delimit statements, but 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
499 COMMA-DELIM is non-nil then ',' is treated likewise."
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
500
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
501 ;; 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
502 ;; 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
503 ;; 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
504 ;; 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
505 ;; 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
506 ;;
7a3ac6c387fe CC Mode 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 ;; 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
508 ;;
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
509 ;; 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
510 ;; 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
511 ;; 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
512 ;; 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
513 ;; 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
514 ;; 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
515 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
516 ;; The following variables constitute the PDA:
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
517 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
518 ;; 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
519 ;; 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
520 ;; statement boundary, or nil otherwise.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
521 ;; 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
522 ;; while-boundary catch catch-boundary).
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
523 ;; 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
524 ;; '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
525 ;; '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
526 ;; 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
527 ;; 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
528 ;; of error reporting information.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
529 ;; 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
530 ;; 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
531 ;; 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
532 ;; 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
533 ;; (e.g. if).
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
534 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
535 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
536 ;; 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
537 ;;
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
538 ;; Common state:
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
539 ;; "else": Push state, goto state `else'.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
540 ;; "while": Push state, goto state `while'.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
541 ;; "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
542 ;; 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
543 ;; 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
544 ;;
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
545 ;; State `else':
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
546 ;; boundary: Goto state `else-boundary'.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
547 ;; other: Error, pop state, retry token.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
548 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
549 ;; State `else-boundary':
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
550 ;; "if": Pop state.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
551 ;; boundary: Error, pop state.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
552 ;; other: See common state.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
553 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
554 ;; State `while':
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
555 ;; 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
556 ;; other: Pop state, retry token.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
557 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
558 ;; State `while-boundary':
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
559 ;; "do": Pop state.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
560 ;; 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
561 ;; other: See common state.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
562 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
563 ;; State `catch':
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
564 ;; boundary: Goto state `catch-boundary'.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
565 ;; other: Error, pop state, retry token.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
566 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
567 ;; State `catch-boundary':
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
568 ;; "try": Pop state.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
569 ;; "catch": Goto state `catch'.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
570 ;; boundary: Error, pop state.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
571 ;; other: See common state.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
572 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
573 ;; [*] 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
574 ;; 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
575 ;; 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
576 ;; 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
577 ;; 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
578 ;;
44728
7a3ac6c387fe CC Mode 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 ;; 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
580 ;; 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
581
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
582 (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
583 (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
584 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
585 (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
586 (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
587 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
588 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
589 pos ; Current position.
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
590 boundary-pos ; Position of last stmt boundary character (e.g. ;).
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
591 after-labels-pos ; Value of tok after first found colon.
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
592 last-label-pos ; Value of tok after last found colon.
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
593 sym ; Symbol just scanned back over (e.g. 'while or
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
594 ; 'boundary). See above
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
595 state ; Current state in the automaton. See above.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
596 saved-pos ; Current saved positions. See above
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
597 stack ; Stack of conses (state . saved-pos).
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
598 (cond-key (or c-opt-block-stmt-key ; regexp which matches "for", "if", etc.
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
599 "\\<\\>")) ; Matches nothing.
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
600 (ret 'same) ; Return value.
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
601 tok ptok pptok ; Pos of last three sexps or bounds.
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
602 c-in-literal-cache c-maybe-labelp 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
603
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
604 (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
605 (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
606
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
607 (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
608 (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
609 (/= (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
610 (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
611
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
612 ;; 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
613 ;; 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
614 (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
615 (setq pos (point))
51829
d508ffa43505 2003-07-08 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents: 51714
diff changeset
616 (if (c-mode-is-new-awk-p)
d508ffa43505 2003-07-08 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents: 51714
diff changeset
617 (c-awk-backward-syntactic-ws)
d508ffa43505 2003-07-08 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents: 51714
diff changeset
618 (c-backward-syntactic-ws))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
619 (/= (skip-chars-backward "-+!*&~@`#") 0))) ; ACM, 2002/5/31;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
620 ; Make a variable in
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
621 ; cc-langs.el, maybe
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
622
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
623 ;; Skip back over any semicolon here. If it was a bare semicolon, we're
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
624 ;; done. Later on we ignore the boundaries for statements that doesn't
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
625 ;; 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
626 ;; 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
627 (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
628 (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
629 (setq saved (point))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
630 (if (c-mode-is-new-awk-p)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
631 (c-awk-backward-syntactic-ws)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
632 (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
633 (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
634 (memq (char-before) '(?: nil))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
635 (eq (char-syntax (char-before)) ?\()
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
636 (and (c-mode-is-new-awk-p)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
637 (c-awk-after-logical-semicolon))))) ; ACM 2002/6/22
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
638 ;; ACM, 2002/7/20: What about giving a limit to the above function?
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
639 ;; ACM, 2003/6/16: The above two lines (checking for
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
640 ;; awk-logical-semicolon) are probably redundant after rewriting
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
641 ;; c-awk-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
642 (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
643 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
644
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
645 ;; 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
646 ;; 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
647 (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
648 (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
649 ;; 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
650 (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
651
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
652 ;; 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
653 ;; 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
654 ;; 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
655 ;; 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
656 (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
657 (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
658 (cond
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
659 ;; Check for macro start. Take this out for AWK Mode (ACM, 2002/5/31)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
660 ;; NO!! just make sure macro-start is nil in AWK Mode (ACM, 2002/6/22)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
661 ;; It always is (ACM, 2002/6/23)
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
662 ((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
663 (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
664 (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
665 (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
666 (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
667 (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
668 (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
669 (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
670 (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
671 (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
672 (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
673 (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
674 (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
675 (< (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
676 ;; 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
677 (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
678 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
679 (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
680 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
681 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
682 (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
683
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
684 ;; 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
685 ;; 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
686 ((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
687 (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
688 (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
689
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
690 (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
691 (throw 'loop nil))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
692
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
693 ;; The PDA state handling.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
694 ;;
53073
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
695 ;; 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
696 ;; 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
697 ;; 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
698 ;; (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
699 ;; 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
700 ;; 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
701 ;; 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
702 ;; 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
703 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
704 ;; 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
705 ;; "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
706 ;; 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
707 (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
708 ((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
709 (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
710 (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
711 (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
712 (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
713
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
714 ((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
715 (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
716 (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
717 ((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
718 (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
719 (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
720
7a3ac6c387fe CC Mode 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 ((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
722 (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
723 ;; 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
724 ;; 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
725 ;; 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
726 ;; 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
727 (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
728 (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
729 (setq state 'while-boundary))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
730 (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
731
7a3ac6c387fe CC Mode 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 ((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
733 (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
734 (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
735 ((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
736 (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
737 (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
738
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
739 ((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
740 (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
741 (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
742 (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
743 (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
744
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
745 ((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
746 (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
747 ((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
748 (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
749 ((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
750 (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
751 ((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
752 (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
753 (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
754
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
755 ;; 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
756 ;; 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
757 (cond ((eq sym 'boundary)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
758 ;; 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
759 ;; 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
760 ;; previous statement.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
761 (if (>= pos start)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
762 (c-bos-push-state)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
763 (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
764 ((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
765 (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
766 (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
767 (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
768 ((eq sym '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
769 (when (or (not pptok)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
770 (memq (char-after pptok) delims)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
771 (and (c-mode-is-new-awk-p)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
772 (or
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
773 ;; might we be calling this from
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
774 ;; c-awk-after-if-do-for-while-condition-p?
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
775 ;; If so, avoid infinite recursion.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
776 (and (eq (point) start)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
777 (c-awk-NL-prop-not-set))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
778 ;; The following may recursively
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
779 ;; call this function.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
780 (c-awk-completed-stmt-ws-ends-line-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
781 ;; 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
782 ;; little more careful analysis to avoid it: 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
783 ;; the while isn't followed by a semicolon 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
784 ;; can't be a do-while.
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
785 ;; ACM, 2002/5/31; IT CAN IN AWK 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
786 (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
787 (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
788 ((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
789 (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
790 (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
791 (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
792
7a3ac6c387fe CC Mode 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 (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
794 ;; 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
795 ;; 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
796 ;; 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
797 (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
798 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
799 c-maybe-labelp nil))))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
800
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
801 ;; 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
802 ;; 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
803 (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
804 (setq ret 'previous)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
805
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
806 ;; HERE IS THE SINGLE PLACE INSIDE THE PDA LOOP WHERE WE MOVE
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
807 ;; BACKWARDS THROUGH THE SOURCE. The following loop goes back
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
808 ;; one sexp and then only loops in special circumstances (line
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
809 ;; continuations and skipping past entire macros).
44728
7a3ac6c387fe CC Mode 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 (while
19377
989d0412ada3 (c-end-of-statement-1): Eliminate false hits on important characters
Richard M. Stallman <rms@gnu.org>
parents: 19301
diff changeset
811 (progn
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
812 (or (c-safe (goto-char (scan-sexps (point) -1)) t)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
813 ;; Give up if we hit an unbalanced block.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
814 ;; Since the stack won't be empty the code
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
815 ;; below will report a 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
816 (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
817 (cond ((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
818 ;; Step again if we hit a line 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
819 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
820 (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
821 ;; If we started inside a macro then this
7a3ac6c387fe CC Mode 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 ;; sexp is always interesting.
7a3ac6c387fe CC Mode 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 nil)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
824 ((not (c-mode-is-new-awk-p)) ; Changed from t, ACM 2002/6/25
44728
7a3ac6c387fe CC Mode 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 ;; Otherwise check that we didn't 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
826 ;; into a macro from the 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
827 (let ((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
828 (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
829 (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
830 (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
831 (when 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
832 (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
833 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
834
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
835 ;; Did the last movement by a sexp cross a statement boundary?
44728
7a3ac6c387fe CC Mode 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 (when (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
837 (if (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
838 (c-looking-at-inexpr-block lim nil)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
839 (looking-at "\\s\("))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
840
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
841 ;; Should not include the paren sexp we've
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
842 ;; passed over in the boundary check.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
843 (if (> (point) (- pos 100))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
844 (c-forward-sexp 1)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
845
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
846 ;; Find its end position this way instead of
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
847 ;; moving forward if the sexp is large.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
848 (goto-char pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
849 (while
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
850 (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
851 (goto-char (1+ (c-down-list-backward)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
852 (unless macro-start
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
853 ;; Check that we didn't step into
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
854 ;; a macro from the end.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
855 (let ((macro-start
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
856 (save-excursion
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
857 (and (c-beginning-of-macro)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
858 (point)))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
859 (when macro-start
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
860 (goto-char macro-start)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
861 t)))))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
862
44728
7a3ac6c387fe CC Mode 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 (setq boundary-pos (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
864 (point) pos)))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
865
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
866 (setq 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
867 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
868 tok boundary-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
869 sym 'boundary)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
870 (throw 'loop t))) ; like a C "continue". Analyze the next 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
871
53073
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
872 (when (and (numberp c-maybe-labelp)
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
873 (not ignore-labels)
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
874 (not (looking-at "\\s\(")))
44728
7a3ac6c387fe CC Mode 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 ;; c-crosses-statement-barrier-p has found a colon, so
7a3ac6c387fe CC Mode 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 ;; we might be in a label now.
7a3ac6c387fe CC Mode 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 (if (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
878 (setq after-labels-pos 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
879 (setq last-label-pos 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
880 c-maybe-labelp 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
881
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
882 ;; 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
883 (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
884 (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
885 (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
886 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
887 (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
888
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
889 ;; 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
890 (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
891 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
892 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
893 tok (point)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
894 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
895
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
896 ;; 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
897 (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
898 (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
899 (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
900 (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
901 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
902
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
903 (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
904 (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
905 ;; 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
906 ;; 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
907 (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
908 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
909 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
910 (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
911 ((= 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
912
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
913 (when (and c-maybe-labelp
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
914 (not ignore-labels)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
915 (not (eq ret 'beginning))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
916 after-labels-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
917 ;; 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
918 ;; 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
919 (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
920 (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
921 (setq ret '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
922 (if (< last-label-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
923 (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
924
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
925 ;; 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
926 (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
927 (while (progn
51829
d508ffa43505 2003-07-08 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents: 51714
diff changeset
928 (if (c-mode-is-new-awk-p)
d508ffa43505 2003-07-08 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents: 51714
diff changeset
929 (c-awk-backward-syntactic-ws)
d508ffa43505 2003-07-08 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents: 51714
diff changeset
930 (c-backward-syntactic-ws))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
931 (/= (skip-chars-backward "-+!*&~@`#") 0)) ; Hopefully the # won't hurt 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
932 (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
933 (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
934 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
935
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
936 (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
937 "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
938 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
939 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
940 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
941
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
942 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
943 might start a label (i.e. not part of `::' and not preceded by `?'). If 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
944 single `?' is found, then `c-maybe-labelp' is cleared."
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
945 (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
946 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
947 (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
948 (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
949 (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
950 (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
951 (< (point) to))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
952 (if (setq lit-range (c-literal-limits from)) ; Have we landed in a string/comment?
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
953 (progn (goto-char (setq from (cdr lit-range)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
954 (if (and (c-mode-is-new-awk-p) (bolp)) ; ACM 2002/7/17. Make sure we
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
955 (backward-char))) ; don't skip over a virtual semi-colon after an awk 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
956 (cond ((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
957 (forward-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
958 (if (and (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
959 (< (point) 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
960 ;; Ignore scope operators.
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
961 (forward-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
962 (setq c-maybe-labelp (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
963 ((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
964 ;; A question mark. Can't be a label, so stop
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
965 ;; looking for more : 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
966 (setq c-maybe-labelp 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
967 skip-chars (substring c-stmt-delim-chars 0 -2)))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
968 ((and (eolp) ; Can only happen in AWK Mode
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
969 (not (c-awk-completed-stmt-ws-ends-line-p)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
970 (forward-char))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
971 ((and (c-mode-is-new-awk-p)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
972 (bolp) lit-range ; awk: comment/string ended prev line.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
973 (not (c-awk-completed-stmt-ws-ends-prev-line-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
974 (t (throw 'done (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
975 nil))))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
976
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
977
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
978 ;; 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
979 ;; implementations of `forward-comment'.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
980
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
981 ;; 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
982 ;; 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
983 ;; 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
984 ;; 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
985 ;; 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
986 ;; escapes in string literals correctly.)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
987
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
988 (defun c-forward-single-comment ()
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
989 "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
990 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
991 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
992 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
993 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
994 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
995 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
996
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
997 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
998
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
999 (let ((start (point)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1000 (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
1001 (goto-char (match-end 0)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1002
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1003 (when (forward-comment 1)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1004 (if (eobp)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1005 ;; 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
1006 ;; forwards at eob.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1007 nil
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1008
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1009 ;; 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
1010 ;; 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
1011 ;; behavior (which also is symmetric).
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1012 (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
1013 (condition-case nil (forward-char 1)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1014
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1015 t))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1016
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1017 (defsubst c-forward-comments ()
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1018 "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
1019 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
1020 treated as whitespace.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1021
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1022 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
1023
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1024 (while (or
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1025 ;; 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
1026 ;; 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
1027 ;; eob.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1028 (and (forward-comment 5)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1029 ;; 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
1030 ;; forwards at eob.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1031 (not (eobp)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1032
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1033 (when (looking-at "\\\\[\n\r]")
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1034 (forward-char 2)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1035 t))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1036
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1037 (defun c-backward-single-comment ()
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1038 "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
1039 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
1040 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
1041 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
1042 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
1043 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
1044 move over a line comment.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1045
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1046 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
1047
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1048 (let ((start (point)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1049 ;; 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
1050 ;; 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
1051 ;; 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
1052 ;; 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
1053 (while (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1054 (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
1055 (and (looking-at "[\n\r]")
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1056 (eq (char-before) ?\\)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1057 (< (point) start)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1058 (backward-char))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1059
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1060 (if (bobp)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1061 ;; 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
1062 ;; backwards at bob.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1063 nil
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1064
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1065 ;; 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
1066 ;; 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
1067 ;; 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
1068 ;; same line.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1069 (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
1070
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1071 (if (if (forward-comment -1)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1072 (if (eolp)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1073 ;; 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
1074 ;; 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
1075 ;; 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
1076 (forward-comment -1)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1077 t))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1078
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1079 ;; 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
1080 ;; block comment that lacks an opener.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1081 (if (looking-at "\\*/")
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1082 (progn (forward-char 2) nil)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1083 t)))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1084
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1085 (defsubst c-backward-comments ()
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1086 "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
1087 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
1088 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
1089 considered to be the comment enders, so the point cannot be at the end
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1090 of the same line to move over a line comment.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1091
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1092 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
1093
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1094 (let ((start (point)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1095 (while (and
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1096 ;; `forward-comment' in some emacsen (e.g. Emacs 19.34)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1097 ;; 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
1098 (not (bobp))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1099
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1100 (if (forward-comment -1)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1101 (if (looking-at "\\*/")
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1102 ;; 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
1103 ;; 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
1104 (progn (forward-char 2) nil)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1105 t)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1106
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1107 ;; 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
1108 ;; 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
1109 ;; 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
1110 (when (and (looking-at "[\n\r]")
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1111 (eq (char-before) ?\\)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1112 (< (point) start))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1113 (backward-char)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1114 t))))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1115
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1116
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1117 ;; Tools for skipping over syntactic whitespace.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1118
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1119 ;; 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
1120 ;; 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
1121 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1122 ;; 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
1123 ;; 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
1124 ;; `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
1125 ;; 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
1126 ;; 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
1127 ;; 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
1128 ;; 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
1129 ;; 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
1130 ;; `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
1131 ;; `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
1132 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1133 ;; 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
1134 ;; 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
1135 ;; 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
1136 ;; 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
1137 ;; 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
1138 ;; instance).
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1139 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1140 ;; 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
1141 ;; 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
1142 ;; 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
1143 ;; 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
1144 ;; 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
1145 ;; 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
1146 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1147 ;; 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
1148 ;; "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
1149 ;; `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
1150 ;; `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
1151 ;; 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
1152 ;; 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
1153 ;; 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
1154 ;; one character long.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1155 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1156 ;; 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
1157 ;; 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
1158 ;; 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
1159 ;; 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
1160 ;; 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
1161 ;; the gap.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1162 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1163 ;; 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
1164 ;; 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
1165 ;; 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
1166 ;; 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
1167 ;; 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
1168 ;; `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
1169 ;; 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
1170 ;; within it.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1171 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1172 ;; 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
1173 ;; 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
1174 ;; 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
1175 ;; 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
1176 ;; 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
1177 ;; not a significant factor there anyway.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1178
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1179 ; (defface c-debug-is-sws-face
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1180 ; '((t (:background "GreenYellow")))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1181 ; "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
1182 ; (defface c-debug-in-sws-face
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1183 ; '((t (:underline t)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1184 ; "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
1185
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1186 ; (defun c-debug-put-sws-faces ()
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1187 ; ;; 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
1188 ; ;; properties in the buffer.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1189 ; (interactive)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1190 ; (save-excursion
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1191 ; (let (in-face)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1192 ; (goto-char (point-min))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1193 ; (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
1194 ; (point)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1195 ; (while (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1196 ; (goto-char (next-single-property-change
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1197 ; (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
1198 ; (if in-face
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1199 ; (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1200 ; (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
1201 ; (setq in-face nil))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1202 ; (setq in-face (point)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1203 ; (not (eobp))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1204 ; (goto-char (point-min))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1205 ; (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
1206 ; (point)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1207 ; (while (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1208 ; (goto-char (next-single-property-change
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1209 ; (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
1210 ; (if in-face
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1211 ; (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1212 ; (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
1213 ; (setq in-face nil))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1214 ; (setq in-face (point)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1215 ; (not (eobp)))))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1216
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1217 (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
1218 ;;`(message ,@args)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1219 )
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 (defmacro c-put-is-sws (beg end)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1222 `(let ((beg ,beg) (end ,end))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1223 (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
1224 ,@(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
1225 `((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
1226
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1227 (defmacro c-put-in-sws (beg end)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1228 `(let ((beg ,beg) (end ,end))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1229 (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
1230 ,@(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
1231 `((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
1232
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1233 (defmacro c-remove-is-sws (beg end)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1234 `(let ((beg ,beg) (end ,end))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1235 (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
1236 ,@(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
1237 `((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
1238
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1239 (defmacro c-remove-in-sws (beg end)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1240 `(let ((beg ,beg) (end ,end))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1241 (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
1242 ,@(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
1243 `((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
1244
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1245 (defmacro 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
1246 `(let ((beg ,beg) (end ,end))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1247 (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
1248 ,@(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
1249 `((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
1250 (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
1251
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1252 (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
1253 ;; 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
1254 ;; `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
1255 ;; `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
1256 ;; properties right after they're added.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1257
20914
8f189ffad604 (c-forward-syntactic-ws, c-backward-syntactic-ws):
Richard M. Stallman <rms@gnu.org>
parents: 20142
diff changeset
1258 (save-excursion
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1259 ;; 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
1260 ;; 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
1261 ;; 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
1262 ;; 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
1263 ;; "//" 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
1264 ;; 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
1265 ;; 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
1266 (goto-char end)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1267 (skip-chars-forward " \t\f\v")
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1268 (when (and (eolp) (not (eobp)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1269 (setq end (1+ (point)))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1270
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1271 (when (and (= beg end)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1272 (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
1273 (> beg (point-min))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1274 (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
1275 ;; 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
1276 ;; 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
1277 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1278 ;; #define foo
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1279 ;; \
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1280 ;; bar
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1281 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1282 ;; 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
1283 ;; 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
1284 ;; 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
1285 ;; 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
1286 (setq beg (1- beg)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1287
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1288 (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
1289 (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
1290
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1291 (defun c-forward-sws ()
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1292 ;; Used by `c-forward-syntactic-ws' to implement the unbounded search.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1293
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1294 (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
1295 ;; 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
1296 (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
1297 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
1298 ;; `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
1299 ;; 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
1300 ;; 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
1301 ;; 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
1302 ;; 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
1303 ;; more common.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1304 safe-start)
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 ;; 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
1307 ;; 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
1308 ;; 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
1309 (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
1310 (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
1311
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1312 (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
1313 (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
1314 'c-is-sws t))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1315 ;; 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
1316 ;; 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
1317 ;; (`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
1318 ;; step forward.)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1319 (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
1320 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
1321 ;; 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
1322 ;; 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
1323 ;; high as possible.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1324 (setq rung-pos (point)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1325
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1326 (while
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1327 (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1328 (while
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1329 (when (and rung-is-marked
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1330 (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
1331
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1332 ;; 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
1333 ;; 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
1334 (goto-char (next-single-property-change
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1335 (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
1336 (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
1337 ;; 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
1338 ;; `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
1339 (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
1340 (goto-char (previous-single-property-change
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1341 (point) 'c-is-sws)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1342 (backward-char))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1343
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1344 (c-debug-sws-msg
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1345 "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
1346 rung-pos (point) (point-max))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1347
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1348 (setq rung-pos (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1349 (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
1350 (not (eobp))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1351
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1352 ;; 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
1353 ;; 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
1354 ;; 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
1355 ;; 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
1356 ;; use the cache again.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1357 (c-debug-sws-msg
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1358 "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
1359 (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
1360 (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
1361 ;; 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
1362 ;; 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
1363 ;; 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
1364 (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
1365 (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
1366 (1+ (point)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1367 (c-put-in-sws rung-pos
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1368 (setq rung-pos (point)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1369 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
1370
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1371 (setq simple-ws-end (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1372 (c-forward-comments)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1373
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1374 (cond
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1375 ((/= (point) simple-ws-end)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1376 ;; 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
1377 ;; is narrowed.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1378 (not (eobp)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1379
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1380 ((save-excursion
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1381 (and c-opt-cpp-prefix
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1382 (looking-at c-opt-cpp-start)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1383 (progn (skip-chars-backward " \t")
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1384 (bolp))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1385 (or (bobp)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1386 (progn (backward-char)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1387 (not (eq (char-before) ?\\))))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1388 ;; Skip a preprocessor directive.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1389 (end-of-line)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1390 (while (and (eq (char-before) ?\\)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1391 (= (forward-line 1) 0))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1392 (end-of-line))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1393 (forward-line 1)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1394 (setq safe-start t)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1395 ;; 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
1396 (not (eobp)))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1397
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1398 ;; 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
1399 ;; can be cached.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1400 (setq next-rung-pos (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1401 (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
1402 (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
1403
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1404 (if (or
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1405 ;; 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
1406 ;; 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
1407 ;; position.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1408 (and safe-start
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1409 (or rung-is-marked
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1410 (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
1411
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1412 ;; 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
1413 ;; 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
1414 ;; 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
1415 ;; next step.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1416 (and (setq next-rung-is-marked
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1417 (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
1418 'c-is-sws t))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1419 safe-start))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1420
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1421 (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1422 (c-debug-sws-msg
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1423 "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
1424 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
1425 (point-max))
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 ;; 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
1428 ;; 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
1429 ;; anyway.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1430 (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
1431 (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
1432 (c-put-is-sws rung-pos
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1433 (1+ simple-ws-end))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1434 (setq rung-is-marked t))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1435 (c-put-in-sws rung-pos
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1436 (setq rung-pos (point)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1437 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
1438 (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
1439 ;; 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
1440 ;; 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
1441 ;; 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
1442 (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
1443 (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
1444 rung-end-pos))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1445
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1446 (c-debug-sws-msg
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1447 "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
1448 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
1449 (point-max))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1450
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1451 ;; 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
1452 ;; 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
1453 ;; 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
1454 ;; cpp directive now.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1455 (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
1456 (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
1457 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
1458 (setq rung-pos next-rung-pos))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1459 (setq safe-start t)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1460
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1461 ;; 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
1462 ;; 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
1463 ;; comment or macro).
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1464 (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
1465 (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
1466 (c-debug-sws-msg
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1467 "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
1468 last-put-in-sws-pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1469 (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
1470 (1+ last-put-in-sws-pos)))
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
1471 (t
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1472 ;; 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
1473 ;; 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
1474 ;; 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
1475 ;; necessary to clear both properties.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1476 (c-debug-sws-msg
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1477 "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
1478 (1- last-put-in-sws-pos))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1479 (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
1480 last-put-in-sws-pos))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1481 )))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1482
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1483 (defun c-backward-sws ()
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1484 ;; Used by `c-backward-syntactic-ws' to implement the unbounded search.
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 (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
1487 ;; part of the simple ws region.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1488 (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
1489 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
1490
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1491 ;; 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
1492 ;; 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
1493 ;; 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
1494 ;; 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
1495 ;; skip over them.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1496 (skip-chars-backward " \t\f")
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1497 (when (and (not (bobp))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1498 (save-excursion
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1499 (backward-char)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1500 (looking-at c-syntactic-ws-end)))
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 ;; 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
1503 ;; 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
1504 ;; changed recently.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1505 (setq simple-ws-beg (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1506 (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
1507 (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
1508 (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
1509 'c-is-sws t))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1510 ;; `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
1511 ;; 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
1512 ;; 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
1513 ;; 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
1514 (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
1515 (goto-char simple-ws-beg))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1516
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1517 (while
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1518 (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1519 (while
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1520 (when (and rung-is-marked
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1521 (not (bobp))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1522 (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
1523
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1524 ;; 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
1525 ;; 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
1526 (goto-char (previous-single-property-change
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1527 (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
1528 (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
1529 ;; 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
1530 ;; `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
1531 (goto-char (next-single-property-change
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1532 (point) 'c-is-sws)))
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 (c-debug-sws-msg
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1535 "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
1536 (point) rung-pos (point-min))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1537
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1538 (setq rung-pos (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1539 (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
1540 (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1541 (setq simple-ws-beg (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1542 (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
1543 0)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1544 (setq rung-is-marked
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1545 (text-property-any (point) rung-pos
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1546 'c-is-sws t)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1547 t
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1548 (goto-char simple-ws-beg)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1549 nil))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1550
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1551 ;; 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
1552 ;; 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
1553 ;; 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
1554 ;; 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
1555 ;; use the cache again.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1556 (c-debug-sws-msg
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1557 "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
1558 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
1559 (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
1560 ;; 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
1561 ;; 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
1562 ;; 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
1563 (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
1564 (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
1565 rung-pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1566 (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
1567 (1- rung-pos))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1568 (setq rung-pos rung-is-marked
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1569 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
1570
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1571 (c-backward-comments)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1572 (setq cmt-skip-pos (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1573
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1574 (cond
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1575 ((and c-opt-cpp-prefix
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1576 (/= cmt-skip-pos simple-ws-beg)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1577 (c-beginning-of-macro))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1578 ;; 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
1579 (let ((cpp-beg (point)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1580
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1581 ;; 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
1582 ;; 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
1583 ;; started inside the cpp directive.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1584 (goto-char simple-ws-beg)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1585 (beginning-of-line)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1586 (while (and (> (point) cmt-skip-pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1587 (progn (backward-char)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1588 (eq (char-before) ?\\)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1589 (beginning-of-line))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1590
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1591 (if (< (point) cmt-skip-pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1592 ;; 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
1593 ;; 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
1594 ;; 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
1595 (progn (goto-char cmt-skip-pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1596 nil)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1597
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1598 ;; 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
1599 ;; 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
1600 ;; 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
1601 ;; 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
1602 ;; 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
1603 ;; same side of those comments.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1604 (goto-char simple-ws-beg)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1605 (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
1606 (if (eq (char-before) ?\\)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1607 (forward-char))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1608 (forward-line 1)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1609 (if (< (point) simple-ws-beg)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1610 ;; 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
1611 ;; over.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1612 (setq simple-ws-beg (point)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1613
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1614 (goto-char cpp-beg)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1615 t)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1616
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1617 ((/= (save-excursion
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1618 (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
1619 (setq next-rung-pos (point)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1620 simple-ws-beg)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1621 ;; 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
1622 ;; 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
1623 ;; 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
1624 ;; 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
1625 ;; at the end of it.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1626 (goto-char next-rung-pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1627 t)))
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 ;; 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
1630 ;; can be cached.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1631 (setq next-rung-pos (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1632 (skip-chars-backward " \t\f\v")
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1633
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1634 (if (or
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1635 ;; 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
1636 ;; completely uncached position.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1637 rung-is-marked
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1638 (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
1639
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1640 ;; 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
1641 (save-excursion
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1642 (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
1643 (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
1644 'c-is-sws t)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1645
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1646 (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1647 (c-debug-sws-msg
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1648 "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
1649 (point) (1+ next-rung-pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1650 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
1651 (point-min))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1652
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1653 ;; 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
1654 ;; 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
1655 ;; anyway.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1656 (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
1657 (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
1658 (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
1659 (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
1660 ;; 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
1661 ;; 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
1662 ;; 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
1663 (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
1664 (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
1665 rung-end-pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1666 (setq rung-is-marked t)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1667 (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
1668 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
1669 rung-pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1670 (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
1671 (1+ next-rung-pos)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1672
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1673 (c-debug-sws-msg
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1674 "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
1675 (point) (1+ next-rung-pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1676 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
1677 (point-min))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1678 (setq rung-pos next-rung-pos
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1679 simple-ws-beg (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1680 ))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1681
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1682 ;; 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
1683 ;; 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
1684 ;; comment or macro).
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1685 (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
1686 (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
1687 (c-debug-sws-msg
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1688 "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
1689 (1- last-put-in-sws-pos))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1690 (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
1691 last-put-in-sws-pos))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1692 ((> (point-min) 1)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1693 ;; 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
1694 ;; 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
1695 ;; `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
1696 ;; to clear both properties.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1697 (c-debug-sws-msg
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1698 "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
1699 last-put-in-sws-pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1700 (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
1701 (1+ last-put-in-sws-pos)))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1702 )))
20914
8f189ffad604 (c-forward-syntactic-ws, c-backward-syntactic-ws):
Richard M. Stallman <rms@gnu.org>
parents: 20142
diff changeset
1703
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1704
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1705 ;; A system for handling 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
1706
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
1707 (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
1708 (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
1709 ;; 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
1710 ;; searching. It's the result from some earlier `c-parse-state' call.
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
1711 ;; 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
1712 ;; `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
1713 ;; 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
1714 ;; 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
1715 ;; 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
1716 ;; 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
1717
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1718 (defvar c-state-cache-start 1)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1719 (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
1720 ;; 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
1721 ;; 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
1722 ;; before the point.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1723
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1724 (defsubst c-invalidate-state-cache (pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1725 ;; 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
1726 ;; 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
1727 ;; 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
1728 ;; 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
1729 ;; required preceding paren pair element.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1730 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1731 ;; 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
1732 (while (and c-state-cache
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1733 (let ((elem (car c-state-cache)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1734 (if (consp elem)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1735 (or (<= pos (car elem))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1736 (< pos (cdr elem)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1737 (<= pos elem))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1738 (setq c-state-cache (cdr c-state-cache))))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1739
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1740 (defun c-parse-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
1741 ;; Finds and records all noteworthy parens between some good 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
1742 ;; 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
1743 ;; 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
1744 ;; 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
1745 ;;
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
1746 ;; 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
1747 ;; 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
1748 ;; 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
1749 ;; 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
1750 ;; 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
1751 ;; the cdr is the position following the closing paren. Only 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
1752 ;; last closed brace paren pair before each open paren is recorded,
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
1753 ;; and thus the state never contains two cons elements 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
1754 ;; succession.
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1755 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1756 ;; 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
1757 ;; 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
1758 ;; 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
1759 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1760 ;; 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
1761
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
1762 (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
1763 (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
1764 (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
1765 (in-macro-start (or c-macro-start (point)))
50273
ea06392567c0 (c-parse-state): Added kludge to avoid an infinite loop when Emacs'
Martin Stjernholm <mast@lysator.liu.se>
parents: 47939
diff changeset
1766 old-state last-pos pairs pos save-pos)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1767 (c-invalidate-state-cache (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1768
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1769 ;; 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
1770 ;; 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
1771 (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
1772 (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
1773 ;; 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
1774 ;; off a bit of the tail.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1775 (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
1776 (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
1777 (>= (if (consp elem) (car elem) elem)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1778 (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
1779 (setq ptr (cdr ptr)))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1780 (when (consp ptr)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1781 (if (eq (cdr ptr) c-state-cache)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1782 (setq c-state-cache nil)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1783 (setcdr ptr nil))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1784 ;; 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
1785 ;; 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
1786 ;; recalculate the top only.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1787 (setq c-state-cache nil))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1788 (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
1789
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
1790 ;; 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
1791 ;; 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
1792 (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
1793 (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
1794 (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
1795 (1+ (car c-state-cache)))))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1796
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
1797 ;; Check if the found last-pos is in a macro. If it is, 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
1798 ;; we're not in the same macro, we must discard everything 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
1799 ;; c-state-cache that is inside the macro before using 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
1800 (when 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
1801 (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
1802 (goto-char 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
1803 (when (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
1804 (/= (point) in-macro-start))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1805 (c-invalidate-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
1806 ;; Set last-pos again, just like above.
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
1807 (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
1808 (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
1809 (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
1810 (1+ (car c-state-cache))))))))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1811
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
1812 (setq 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
1813 ;; Find the start position for the forward search. (Can'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
1814 ;; search in the backward direction since point might be
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
1815 ;; in some kind of 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
1816 (or (when last-pos
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1817
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
1818 ;; There's a cached state with a containing paren. Pop
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
1819 ;; off the stale containing sexps from it by going
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
1820 ;; forward out of parens as far as possible.
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
1821 (narrow-to-region (point-min) 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
1822 (let (placeholder pair-beg)
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
1823 (while (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
1824 (setq 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
1825 (c-up-list-forward 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
1826 (setq last-pos 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
1827 (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
1828 (setq pair-beg (car-safe (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
1829 c-state-cache (cdr-safe (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
1830 (setq pair-beg (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
1831 c-state-cache (cdr c-state-cache))))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1832
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
1833 (when (and pair-beg (eq (char-after pair-beg) ?{))
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
1834 ;; The last paren pair we moved out from was a 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
1835 ;; pair. Modify the state to record this as a closed
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
1836 ;; pair now.
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
1837 (if (consp (car-safe 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
1838 (setq c-state-cache (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
1839 (setq c-state-cache (cons (cons pair-beg 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
1840 c-state-cache))))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1841
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
1842 ;; Check if the preceding balanced paren is within 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
1843 ;; macro; it should be ignored if we're outside 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
1844 ;; macro. There's no need to check any further upwards;
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
1845 ;; if the macro contains an unbalanced opening 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
1846 ;; we're smoked anyway.
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
1847 (when (and (<= (point) in-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
1848 (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
1849 (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
1850 (goto-char (car (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
1851 (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
1852 (setq 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
1853 c-state-cache (cdr c-state-cache)))))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1854
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
1855 (when 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
1856 (setq old-state 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
1857 last-pos))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1858
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
1859 (save-excursion
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1860 ;; go back 2 bods, but ignore any bogus 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
1861 ;; returned by beginning-of-defun (i.e. open paren 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
1862 ;; column zero)
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
1863 (goto-char here)
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1864 (let ((cnt 2))
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
1865 (while (not (or (bobp) (zerop cnt)))
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
1866 (c-beginning-of-defun-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
1867 (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
1868 (setq cnt (1- cnt)))))
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
1869 (point))))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1870
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
1871 (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
1872
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
1873 (while 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
1874 ;; Find the balanced brace pairs.
50273
ea06392567c0 (c-parse-state): Added kludge to avoid an infinite loop when Emacs'
Martin Stjernholm <mast@lysator.liu.se>
parents: 47939
diff changeset
1875 (setq save-pos pos
ea06392567c0 (c-parse-state): Added kludge to avoid an infinite loop when Emacs'
Martin Stjernholm <mast@lysator.liu.se>
parents: 47939
diff changeset
1876 pairs 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
1877 (while (and (setq last-pos (c-down-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
1878 (setq pos (c-up-list-forward 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
1879 (if (eq (char-before 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
1880 (setq pairs (cons (cons last-pos pos) pairs))))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1881
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
1882 ;; Should ignore any pairs that are in a macro, providing
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
1883 ;; we're not 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
1884 (when (and pairs (< (car (car pairs)) in-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
1885 (while (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
1886 (goto-char (car (car pairs)))
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
1887 (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
1888 (setq pairs (cdr pairs)))))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1889
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
1890 ;; Record the last brace pair.
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
1891 (when pairs
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
1892 (if (and (eq c-state-cache old-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
1893 (consp (car-safe 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
1894 ;; There's a closed pair on the cached state but we've
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
1895 ;; found a later one, so remove 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
1896 (setq c-state-cache (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
1897 (setq pairs (car pairs))
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
1898 (setcar pairs (1- (car pairs)))
46983
35f3b5d4f918 (c-forward-syntactic-ws): Fixed a bug that could cause an infinite
Martin Stjernholm <mast@lysator.liu.se>
parents: 46688
diff changeset
1899 (when (consp (car-safe c-state-cache))
35f3b5d4f918 (c-forward-syntactic-ws): Fixed a bug that could cause an infinite
Martin Stjernholm <mast@lysator.liu.se>
parents: 46688
diff changeset
1900 ;; There could already be a cons first in `c-state-cache'
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1901 ;; if we've e.g. jumped over an unbalanced open paren in a
46983
35f3b5d4f918 (c-forward-syntactic-ws): Fixed a bug that could cause an infinite
Martin Stjernholm <mast@lysator.liu.se>
parents: 46688
diff changeset
1902 ;; macro below.
35f3b5d4f918 (c-forward-syntactic-ws): Fixed a bug that could cause an infinite
Martin Stjernholm <mast@lysator.liu.se>
parents: 46688
diff changeset
1903 (setq c-state-cache (cdr 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
1904 (setq c-state-cache (cons pairs c-state-cache)))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1905
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
1906 (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
1907 ;; 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
1908 ;; 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
1909 ;; 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
1910 ;; 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
1911 (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
1912 (setq pos last-pos)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1913 (if (and (or (>= last-pos in-macro-start)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1914 (save-excursion
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1915 (goto-char last-pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1916 (not (c-beginning-of-macro))))
56646
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
1917 ;; Check for known types of parens that we want
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
1918 ;; to record. The syntax table is not to be
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
1919 ;; trusted here since the caller might be using
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
1920 ;; e.g. `c++-template-syntax-table'.
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
1921 (memq (char-before last-pos) '(?{ ?\( ?\[)))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1922 (setq c-state-cache (cons (1- last-pos) c-state-cache))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1923
44728
7a3ac6c387fe CC Mode 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 (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
1925 ;; 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
1926 ;; 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
1927 ;; 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
1928 (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
1929 (setq pos (c-up-list-backward 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
1930 c-state-cache nil)
50273
ea06392567c0 (c-parse-state): Added kludge to avoid an infinite loop when Emacs'
Martin Stjernholm <mast@lysator.liu.se>
parents: 47939
diff changeset
1931 (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
1932 ;; 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
1933 ;; 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
1934 ;; 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
1935 ;; 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
1936 ;; 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
1937 (>= 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
1938 (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
1939 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
1940 (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
1941 (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
1942 (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
1943 (setq pos nil))))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1944
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
1945 c-state-cache)))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1946
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
1947 ;; 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
1948 (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
1949 (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
1950 (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
1951 (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
1952 (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
1953 (let ((res1 (c-real-parse-state)) res2)
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
1954 (let ((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
1955 (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
1956 (unless (equal res1 res2)
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
1957 (error "c-parse-state inconsistency: using cache: %s, from scratch: %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
1958 res1 res2))
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
1959 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
1960 (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
1961 (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
1962 (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
1963 (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
1964 '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
1965 '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
1966 (c-keep-region-active))
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
1967
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
1968 (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
1969 ;; 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
1970 ;; before BUFPOS. Not destructive on PAREN-STATE.
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1971 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1972 ;; This function does not do any 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
1973 (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
1974 (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
1975 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
1976 (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
1977 (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
1978 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
1979 (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
1980 (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
1981 (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
1982 (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
1983 (cdr newstate)))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1984
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
1985 (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
1986 ;; 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
1987 ;; after BUFPOS. Not destructive on PAREN-STATE.
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1988 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
1989 ;; This function does not do any 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
1990 (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
1991 (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
1992 (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
1993 (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
1994 ;; 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
1995 ;; 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
1996 ;; 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
1997 ;; 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
1998 (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
1999 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
2000 (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
2001 ;; 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
2002 ;; 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
2003 ;; 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
2004 ;; 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
2005 ;; 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
2006 (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
2007 ;; 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
2008 ;; 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
2009 ;; 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
2010 (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
2011 (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
2012 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
2013 ;; 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
2014 (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
2015 (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
2016 nil)))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2017
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2018 (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
2019 ;; Return the bufpos of the innermost enclosing open paren before
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2020 ;; bufpos that hasn't been narrowed out, or nil if none was found.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2021 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2022 ;; 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
2023 (let (enclosingp)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2024 (or bufpos (setq bufpos 134217727))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2025 (while paren-state
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2026 (setq enclosingp (car paren-state)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2027 paren-state (cdr paren-state))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2028 (if (or (consp enclosingp)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2029 (>= enclosingp bufpos))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2030 (setq enclosingp nil)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2031 (if (< enclosingp (point-min))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2032 (setq enclosingp nil))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2033 (setq paren-state nil)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2034 enclosingp))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2035
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2036 (defun c-least-enclosing-brace (paren-state &optional bufpos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2037 ;; Return the bufpos of the outermost enclosing open paren before
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2038 ;; bufpos that hasn't been narrowed out, or nil if none was found.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2039 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2040 ;; 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
2041 (let (pos elem)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2042 (or bufpos (setq bufpos 134217727))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2043 (while paren-state
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2044 (setq elem (car paren-state)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2045 paren-state (cdr paren-state))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2046 (unless (or (consp elem)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2047 (>= elem bufpos))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2048 (if (>= elem (point-min))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2049 (setq pos elem))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2050 pos))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2051
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2052 (defun c-safe-position (bufpos paren-state)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2053 ;; Return the closest known safe position higher up than BUFPOS, or
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2054 ;; nil if PAREN-STATE doesn't contain one. Return nil if BUFPOS is
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2055 ;; nil, which is useful to find the closest limit before a given
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2056 ;; limit that might be nil.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2057 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2058 ;; 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
2059 (when bufpos
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2060 (let (elem)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2061 (catch 'done
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2062 (while paren-state
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2063 (setq elem (car paren-state))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2064 (if (consp elem)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2065 (cond ((< (cdr elem) bufpos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2066 (throw 'done (cdr elem)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2067 ((< (car elem) bufpos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2068 ;; See below.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2069 (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
2070 (if (< elem bufpos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2071 ;; 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
2072 ;; 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
2073 ;; 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
2074 ;; 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
2075 (throw 'done (min (1+ elem) bufpos))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2076 (setq paren-state (cdr paren-state)))))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2077
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2078 (defun c-beginning-of-syntax ()
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2079 ;; 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
2080 ;; 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
2081 ;; 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
2082 ;; a position in the vicinity.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2083 (let* ((paren-state c-state-cache)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2084 elem
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2085
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2086 (pos (catch 'done
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2087 ;; 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
2088 ;; 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
2089 ;; 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
2090 ;; parens.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2091 (while paren-state
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2092 (setq elem (car paren-state))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2093 (if (consp elem)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2094 (cond ((<= (cdr elem) (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2095 (throw 'done (cdr elem)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2096 ((<= (car elem) (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2097 (throw 'done (car elem))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2098 (if (<= elem (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2099 (throw 'done elem)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2100 (setq paren-state (cdr paren-state)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2101 (point-min))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2102
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2103 (if (> pos (- (point) 4000))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2104 (goto-char pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2105 ;; 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
2106 ;; (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
2107 ;; 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
2108 ;; Consult `syntax-ppss' here.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2109 (c-beginning-of-defun-1)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2110 (if (< (point) pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2111 (goto-char pos)))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2112
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2113
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2114 ;; 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
2115
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2116 (defun c-on-identifier ()
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2117 "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
2118 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
2119 identifier is detected, the returned value is its starting position.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2120 If an identifier both starts and stops at the point \(can only happen
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2121 in Pike) then the point for the preceding one is returned.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2122
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2123 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
2124
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2125 (save-excursion
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2126 (if (zerop (skip-syntax-backward "w_"))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2127
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2128 (when (c-major-mode-is 'pike-mode)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2129 ;; Handle the `<operator> syntax in Pike.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2130 (let ((pos (point)))
56646
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2131 (skip-chars-backward "-!%&*+/<=>^|~[]()")
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2132 (and (if (< (skip-chars-backward "`") 0)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2133 t
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2134 (goto-char pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2135 (eq (char-after) ?\`))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2136 (looking-at c-symbol-key)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2137 (>= (match-end 0) pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2138 (point))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2139
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2140 (and (not (looking-at c-keywords-regexp))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2141 (point)))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2142
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2143 (defsubst c-simple-skip-symbol-backward ()
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2144 ;; 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
2145 ;; 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
2146 ;; moved.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2147 (or (< (skip-syntax-backward "w_") 0)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2148 (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
2149 ;; Handle the `<operator> syntax in Pike.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2150 (let ((pos (point)))
56646
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2151 (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
2152 (< (skip-chars-backward "`") 0)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2153 (looking-at c-symbol-key)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2154 (>= (match-end 0) pos))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2155 t
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2156 (goto-char pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2157 nil)))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2158
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2159 (defsubst c-beginning-of-current-token (&optional back-limit)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2160 ;; 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
2161 ;; 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
2162 ;; 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
2163 ;; between two tokens.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2164 (if (looking-at "\\w\\|\\s_")
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2165 (skip-syntax-backward "w_" back-limit)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2166 (let ((start (point)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2167 (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
2168 (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
2169 (match-end 0))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2170 ;; `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
2171 ;; 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
2172 ;; 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
2173 ;; 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
2174 ;; some earlier incorrect token.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2175 (1+ (point)))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2176 (if (<= pos start)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2177 (goto-char pos))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2178 (< pos start)))))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2179
52107
3a5379a0d7f3 2003-08-01 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents: 51947
diff changeset
2180 (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
2181 ;; 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
2182 ;; 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
2183 ;; 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
2184 ;; tokens. Return non-nil if the point is moved, nil otherwise.
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2185 (let ((start (point)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2186 (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
2187 (skip-syntax-forward "w_"))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2188 ((< (skip-syntax-backward ".()" back-limit) 0)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2189 (while (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2190 (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
2191 (goto-char (match-end 0))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2192 ;; `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
2193 ;; 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
2194 ;; 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
2195 ;; 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
2196 (forward-char))
52107
3a5379a0d7f3 2003-08-01 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents: 51947
diff changeset
2197 (< (point) start)))))
3a5379a0d7f3 2003-08-01 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents: 51947
diff changeset
2198 (> (point) start)))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2199
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2200 (defconst c-jump-syntax-balanced
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2201 (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
2202 "\\w\\|\\s_\\|\\s\(\\|\\s\)\\|\\s\"\\|\\s|"
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2203 "\\w\\|\\s_\\|\\s\(\\|\\s\)\\|\\s\""))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2204
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2205 (defconst c-jump-syntax-unbalanced
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2206 (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
2207 "\\w\\|\\s_\\|\\s\"\\|\\s|"
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2208 "\\w\\|\\s_\\|\\s\""))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2209
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2210 (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
2211 "Move forward by tokens.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2212 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
2213 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
2214 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
2215 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
2216 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
2217 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
2218 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
2219 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
2220
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2221 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
2222 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
2223 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
2224
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2225 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
2226 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
2227 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
2228 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
2229 the requested position and a return value less \(without signs) than
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2230 COUNT guarantees that point is at the beginning of some token."
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2231
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2232 (or count (setq count 1))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2233 (if (< count 0)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2234 (- (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
2235
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2236 (let ((jump-syntax (if balanced
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2237 c-jump-syntax-balanced
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2238 c-jump-syntax-unbalanced))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2239 (last (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2240 (prev (point)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2241
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2242 (if (zerop count)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2243 ;; 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
2244 (c-end-of-current-token))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2245
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2246 (save-restriction
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2247 (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
2248 (if (/= (point)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2249 (progn (c-forward-syntactic-ws) (point)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2250 ;; 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
2251 ;; fact move.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2252 (setq count (max (1- count) 0)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2253
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2254 (if (eobp)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2255 ;; 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
2256 (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2257 (if (zerop count) (setq count 1))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2258 (goto-char last))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2259
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2260 ;; 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
2261 ;; inside the loop.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2262 (condition-case nil
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2263 (while (and
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2264 (> count 0)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2265 (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2266 (setq last (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2267 (cond ((looking-at jump-syntax)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2268 (goto-char (scan-sexps (point) 1))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2269 t)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2270 ((looking-at c-nonsymbol-token-regexp)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2271 (goto-char (match-end 0))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2272 t)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2273 ;; `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
2274 ;; 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
2275 ;; 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
2276 ;; 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
2277 ;; 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
2278 ((and limit
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2279 (save-restriction
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2280 (widen)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2281 (looking-at c-nonsymbol-token-regexp)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2282 nil)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2283 (t
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2284 (forward-char)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2285 t))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2286 (c-forward-syntactic-ws)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2287 (setq prev last
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2288 count (1- count)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2289 (error (goto-char last)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2290
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2291 (when (eobp)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2292 (goto-char prev)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2293 (setq count (1+ count)))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2294
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2295 count)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2296
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2297 (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
2298 "Move backward by tokens.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2299 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
2300
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2301 (or count (setq count 1))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2302 (if (< count 0)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2303 (- (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
2304
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2305 (or limit (setq limit (point-min)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2306 (let ((jump-syntax (if balanced
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2307 c-jump-syntax-balanced
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2308 c-jump-syntax-unbalanced))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2309 (last (point)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2310
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2311 (if (zerop count)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2312 ;; 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
2313 ;; current token.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2314 (if (> (point)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2315 (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
2316 (if (< (point) limit)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2317 ;; 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
2318 (setq count 1))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2319
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2320 ;; 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
2321 ;; 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
2322 ;; 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
2323 (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
2324 ;; 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
2325 ;; 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
2326 (or (/= (char-after) ?#)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2327 (not c-opt-cpp-prefix)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2328 (save-excursion
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2329 (and (= (point)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2330 (progn (beginning-of-line)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2331 (looking-at "[ \t]*")
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2332 (match-end 0)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2333 (or (bobp)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2334 (progn (backward-char)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2335 (not (eq (char-before) ?\\)))))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2336 (setq count 1))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2337
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2338 ;; 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
2339 ;; 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
2340 (condition-case nil
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2341 (while (and
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2342 (> count 0)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2343 (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2344 (c-backward-syntactic-ws)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2345 (backward-char)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2346 (if (looking-at jump-syntax)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2347 (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
2348 ;; 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
2349 ;; 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
2350 ;; 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
2351 (c-beginning-of-current-token))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2352 (>= (point) limit)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2353 (setq last (point)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2354 count (1- count)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2355 (error (goto-char last)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2356
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2357 (if (< (point) limit)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2358 (goto-char last))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2359
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2360 count)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2361
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2362 (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
2363 "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
2364 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
2365 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
2366 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
2367 (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
2368 (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
2369
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2370 (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
2371 "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
2372 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
2373 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
2374 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
2375 (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
2376 (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
2377
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2378
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2379 ;; 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
2380
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2381 (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
2382 paren-level not-inside-token
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2383 lookbehind-submatch)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2384 "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
2385 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
2386 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
2387 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
2388 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
2389
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2390 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
2391 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
2392 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
2393 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
2394 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
2395 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
2396
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2397 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
2398 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
2399 \(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
2400 constants.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2401
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2402 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
2403 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
2404 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
2405 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
2406 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
2407 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
2408 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
2409
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2410 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
2411 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
2412 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
2413 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
2414 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
2415 matches syntactic whitespace.
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2416
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2417 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
2418 correctly \(i.e. they don't get ignored as they should) when
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2419 PAREN-LEVEL is set."
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2420
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2421 (or bound (setq bound (point-max)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2422 (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
2423
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2424 ;;(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
2425
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2426 (let ((start (point))
56646
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2427 tmp
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2428 ;; Start position for the last search.
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2429 search-pos
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2430 ;; 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
2431 ;; and the point.
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2432 state
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2433 ;; 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
2434 ;; `parse-partial-sexp' continues from here.
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2435 (state-pos (point))
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2436 ;; 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
2437 ;; 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
2438 ;; 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
2439 check-pos check-state
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2440 ;; 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
2441 (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
2442 ;; 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
2443 found)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2444
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2445 (condition-case err
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2446 (while
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2447 (and
56646
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2448 (progn
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2449 (setq search-pos (point))
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2450 (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
2451
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2452 (progn
56646
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2453 (setq state (parse-partial-sexp
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2454 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
2455 state-pos (point))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2456 (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
2457 (or (not paren-level)
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2458 (>= (car state) 0))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2459 (match-end lookbehind-submatch)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2460 (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
2461 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
2462 (setq check-pos state-pos
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2463 check-state state))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2464
56646
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2465 ;; 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
2466 ;; 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
2467 ;; 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
2468 ;; 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
2469 ;; 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
2470 ;; (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
2471 ;; 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
2472 ;; 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
2473 ;; the next search.
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2474
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2475 (cond
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2476 ((elt check-state 7)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2477 ;; 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
2478 ;; `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
2479 ;; the right bound behavior.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2480 (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
2481
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2482 ((elt check-state 4)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2483 ;; 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
2484 (search-forward "*/" bound noerror))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2485
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2486 ((and (not (elt check-state 5))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2487 (eq (char-before check-pos) ?/)
56646
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2488 (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
2489 (memq (char-after check-pos) '(?/ ?*)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2490 ;; 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
2491 ;; comment.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2492 (if (= (char-after check-pos) ?/)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2493 (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
2494 (search-forward "*/" bound noerror)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2495
56646
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2496 ;; 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
2497 ;; 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
2498 ;; 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
2499 ;; 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
2500 ;; 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
2501 ;; 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
2502 ;; checking the paren level.
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2503
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2504 ((and paren-level
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2505 (/= (setq tmp (car check-state)) 0))
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2506 ;; 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
2507 ;; 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
2508 ;; 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
2509 (if (> tmp 0)
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2510
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2511 ;; Inside a nested paren sexp.
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2512 (if lookbehind-submatch
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2513 ;; See the NOTE above.
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2514 (progn (goto-char state-pos) t)
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2515 ;; Skip out of the paren quickly.
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2516 (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
2517 state-pos (point)))
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2518
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2519 ;; Have exited the current paren sexp.
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2520 (if noerror
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2521 (progn
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2522 ;; 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
2523 ;; 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
2524 ;; 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
2525 ;; 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
2526 ;; upon return.
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2527 (setq bound (1- (point)))
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2528 nil)
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2529 (signal 'search-failed (list regexp)))))
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2530
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2531 ((setq tmp (elt check-state 3))
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2532 ;; Match inside a string.
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2533 (if (or lookbehind-submatch
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2534 (not (integerp tmp)))
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2535 ;; See the NOTE above.
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2536 (progn (goto-char state-pos) t)
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2537 ;; 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
2538 (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
2539 (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
2540 (progn
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2541 (setq state (parse-partial-sexp
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2542 state-pos (point) nil nil state)
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2543 state-pos (point))
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2544 (elt state 3))
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2545 (setq continue nil)))
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2546 continue)))
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2547
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2548 ((save-excursion
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2549 (save-match-data
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2550 (c-beginning-of-macro start)))
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2551 ;; 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
2552 (c-end-of-macro)
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2553 (cond ((<= (point) bound) t)
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2554 (noerror nil)
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2555 (t (signal 'search-failed (list regexp)))))
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2556
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2557 ((and not-inside-token
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2558 (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
2559 (< check-pos
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2560 (save-excursion
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2561 (goto-char check-pos)
53073
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
2562 (save-match-data
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
2563 (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
2564 (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
2565 ;; Inside a token.
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2566 (if lookbehind-submatch
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2567 ;; See the NOTE above.
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2568 (goto-char state-pos)
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2569 (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
2570
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2571 (t
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2572 ;; A real match.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2573 (setq found t)
56646
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2574 nil)))
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2575
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2576 ;; 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
2577 ;; looping on the same spot.
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2578 (or (/= search-pos (point))
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2579 (if (= (point) bound)
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2580 (if noerror
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2581 nil
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2582 (signal 'search-failed (list regexp)))
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2583 (forward-char)
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2584 t))))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2585
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2586 (error
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2587 (goto-char start)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2588 (signal (car err) (cdr err))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2589
56646
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2590 ;;(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
2591
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2592 (if found
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2593 (progn
56646
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2594 (goto-char (match-end 0))
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2595 (match-end 0))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2596
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2597 ;; 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
2598 (if (eq noerror t)
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2599 (goto-char start)
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
2600 (goto-char bound))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2601 nil)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2602
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2603 (defun c-syntactic-skip-backward (skip-chars &optional limit)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2604 "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
2605 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
2606 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
2607 of the one that the point starts within, if any. If LIMIT is given,
53073
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
2608 it's assumed to be at a syntactically relevant position."
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2609
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2610 (let ((start (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2611 ;; 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
2612 ;; 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
2613 ;; 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
2614 ;; each position.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2615 safe-pos-list
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2616 ;; 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
2617 ;; 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
2618 ;; demand.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2619 start-macro-beg)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2620
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2621 (while (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2622 (while (and
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2623 (< (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
2624
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2625 ;; 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
2626 ;; 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
2627 ;; strings.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2628 (let ((pos (point)) safe-pos state)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2629 ;; 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
2630 ;; possible.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2631 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2632 ;; 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
2633 ;; 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
2634 (while (and safe-pos-list
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2635 (> (car safe-pos-list) (point)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2636 (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
2637 (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
2638 (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
2639 (point) (or c-state-cache
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2640 (c-parse-state)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2641 0)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2642 (point-min))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2643 safe-pos-list (list safe-pos)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2644
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2645 (while (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2646 (setq state (parse-partial-sexp
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2647 safe-pos pos 0))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2648 (< (point) pos))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2649 ;; Cache positions along the way to use if we have to
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2650 ;; back up more. Every closing paren on the same
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2651 ;; level seems like fairly well spaced positions.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2652 (setq safe-pos (point)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2653 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
2654
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2655 (cond
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2656 ((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
2657 ;; 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
2658 ;; beginning of it.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2659 (if (setq pos (nth 8 state))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2660 ;; It's an emacs where `parse-partial-sexp'
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2661 ;; supplies the starting position.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2662 (goto-char pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2663 (goto-char (car (c-literal-limits safe-pos))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2664 t)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2665
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2666 ((c-beginning-of-macro limit)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2667 ;; Inside a macro.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2668 (if (< (point)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2669 (or start-macro-beg
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2670 (setq start-macro-beg
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2671 (save-excursion
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2672 (goto-char start)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2673 (c-beginning-of-macro limit)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2674 (point)))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2675 t
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2676 ;; 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
2677 ;; a relevant match.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2678 (goto-char pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2679 nil))))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2680
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2681 (> (point)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2682 (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2683 ;; 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
2684 ;; 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
2685 (c-backward-syntactic-ws)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2686 (point)))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2687
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2688 (- (point) start)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2689
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2690
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2691 ;; 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
2692
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2693 (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
2694 "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
2695 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
2696 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
2697 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
2698 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
2699 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
2700
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2701 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
2702 `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
2703
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2704 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
2705 (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
2706 (= (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
2707 (aref c-in-literal-cache 1)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2708 (let ((rtn (save-excursion
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2709 (let* ((pos (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2710 (lim (or lim (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2711 (c-beginning-of-syntax)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2712 (point))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2713 (state (parse-partial-sexp lim pos)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2714 (cond
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2715 ((elt state 3) 'string)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2716 ((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
2717 ((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
2718 (t nil))))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2719 ;; 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
2720 (if (not c-in-literal-cache)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2721 (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
2722 rtn)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2723
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2724 ;; 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
2725 ;; 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
2726 ;; 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
2727 ;; cpp directives.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2728 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2729 ;; 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
2730 ;; 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
2731 ;; 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
2732 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2733 ;; 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
2734 ;; /regexp/ {<C-j>
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2735 ;; 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
2736 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2737 ;; 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
2738 ;; 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
2739 ;; 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
2740 ;; 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
2741 ;; "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
2742 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2743 ;; 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
2744 ;; 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
2745 ;; 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
2746 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2747 ;; (Alan Mackenzie, 2003/4/30).
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2748
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2749 (defun c-fast-in-literal (&optional lim detect-cpp)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2750 (let ((context (buffer-syntactic-context)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2751 (cond
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2752 ((eq context 'string) 'string)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2753 ((eq context 'comment) 'c++)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2754 ((eq context 'block-comment) 'c)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2755 ((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
2756
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2757 (defalias 'c-in-literal
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2758 (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
2759 'c-fast-in-literal ; XEmacs
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2760 'c-slow-in-literal)) ; GNU Emacs
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 ;; 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
2763 (cc-bytecomp-defun c-in-literal)
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 (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
2766 "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
2767 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
2768 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
2769 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
2770 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
2771 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
2772 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
2773 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
2774 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
2775 delimiters with more than one character.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2776
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2777 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
2778
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2779 (save-excursion
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2780 (let* ((pos (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2781 (lim (or lim (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2782 (c-beginning-of-syntax)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2783 (point))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2784 (state (parse-partial-sexp lim pos)))
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 (cond ((elt state 3)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2787 ;; String. Search backward for the start.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2788 (while (elt state 3)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2789 (search-backward (make-string 1 (elt state 3)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2790 (setq state (parse-partial-sexp lim (point))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2791 (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
2792 (point-max))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2793
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2794 ((elt state 7)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2795 ;; Line comment. Search from bol for the comment starter.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2796 (beginning-of-line)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2797 (setq state (parse-partial-sexp lim (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2798 lim (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2799 (while (not (elt state 7))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2800 (search-forward "//") ; Should never fail.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2801 (setq state (parse-partial-sexp
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2802 lim (point) nil nil state)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2803 lim (point)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2804 (backward-char 2)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2805 (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
2806
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2807 ((elt state 4)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2808 ;; Block comment. Search backward for the comment starter.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2809 (while (elt state 4)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2810 (search-backward "/*") ; Should never fail.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2811 (setq state (parse-partial-sexp lim (point))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2812 (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
2813
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2814 ((and (not not-in-delimiter)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2815 (not (elt state 5))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2816 (eq (char-before) ?/)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2817 (looking-at "[/*]"))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2818 ;; 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
2819 (backward-char 1)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2820 (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
2821
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2822 (near
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2823 (goto-char pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2824
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2825 ;; Search forward for a literal.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2826 (skip-chars-forward " \t")
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2827
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2828 (cond
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2829 ((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
2830 (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
2831 (point-max))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2832
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2833 ((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
2834 (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
2835
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2836 (t
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2837 ;; Search backward.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2838 (skip-chars-backward " \t")
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2839
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2840 (let ((end (point)) beg)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2841 (cond
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2842 ((save-excursion
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2843 (< (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
2844 (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
2845
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2846 ((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
2847 (looking-at "*/"))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2848 ;; 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
2849 ;; 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
2850 ;; normal case above.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2851 (goto-char end)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2852 (c-backward-single-comment)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2853 ;; 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
2854 (setq beg (point))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2855
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2856 (if beg (cons beg end))))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2857 ))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2858
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2859 (defun c-literal-limits-fast (&optional lim near not-in-delimiter)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2860 ;; Like c-literal-limits, but for emacsen whose `parse-partial-sexp'
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2861 ;; returns the pos of the comment start.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2862
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2863 "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
2864 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
2865 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
2866 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
2867 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
2868 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
2869 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
2870 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
2871 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
2872 delimiters with more than one character.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2873
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2874 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
2875
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2876 (save-excursion
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2877 (let* ((pos (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2878 (lim (or lim (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2879 (c-beginning-of-syntax)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2880 (point))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2881 (state (parse-partial-sexp lim pos)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2882
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2883 (cond ((elt state 3) ; String.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2884 (goto-char (elt state 8))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2885 (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
2886 (point-max))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2887
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2888 ((elt state 4) ; Comment.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2889 (goto-char (elt state 8))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2890 (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
2891
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2892 ((and (not not-in-delimiter)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2893 (not (elt state 5))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2894 (eq (char-before) ?/)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2895 (looking-at "[/*]"))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2896 ;; 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
2897 (backward-char 1)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2898 (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
2899
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2900 (near
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2901 (goto-char pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2902
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2903 ;; Search forward for a literal.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2904 (skip-chars-forward " \t")
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2905
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2906 (cond
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2907 ((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
2908 (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
2909 (point-max))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2910
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2911 ((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
2912 (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
2913
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2914 (t
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2915 ;; Search backward.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2916 (skip-chars-backward " \t")
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2917
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2918 (let ((end (point)) beg)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2919 (cond
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2920 ((save-excursion
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2921 (< (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
2922 (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
2923
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2924 ((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
2925 (looking-at "*/"))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2926 ;; 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
2927 ;; 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
2928 ;; normal case above.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2929 (goto-char end)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2930 (c-backward-single-comment)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2931 ;; 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
2932 (setq beg (point))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2933
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2934 (if beg (cons beg end))))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2935 ))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2936
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2937 (if (memq 'pps-extended-state c-emacs-features)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2938 (defalias 'c-literal-limits 'c-literal-limits-fast))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2939
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2940 (defun c-collect-line-comments (range)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2941 "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
2942 `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
2943 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
2944 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
2945 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
2946 argument is returned.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2947
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2948 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
2949 (save-excursion
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2950 (condition-case nil
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2951 (if (and (consp range) (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2952 (goto-char (car range))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2953 (looking-at "//")))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2954 (let ((col (current-column))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2955 (beg (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2956 (bopl (c-point 'bopl))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2957 (end (cdr range)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2958 ;; 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
2959 ;; comments which are preceded by code.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2960 (while (and (c-backward-single-comment)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2961 (>= (point) bopl)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2962 (looking-at "//")
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2963 (= col (current-column)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2964 (setq beg (point)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2965 bopl (c-point 'bopl)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2966 (goto-char end)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2967 (while (and (progn (skip-chars-forward " \t")
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2968 (looking-at "//"))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2969 (= col (current-column))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2970 (prog1 (zerop (forward-line 1))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2971 (setq end (point)))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2972 (cons beg end))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2973 range)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2974 (error range))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2975
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2976 (defun c-literal-type (range)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2977 "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
2978 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
2979 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
2980 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
2981
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2982 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
2983 (if (consp range)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2984 (save-excursion
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2985 (goto-char (car range))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2986 (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
2987 ((or (looking-at "//") ; c++ line comment
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2988 (and (looking-at "\\s<") ; comment starter
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2989 (looking-at "#"))) ; awk comment.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2990 'c++)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2991 (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
2992 range))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2993
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2994
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2995 ;; `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
2996
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
2997 ;; 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
2998 ;; 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
2999 ;; 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
3000 ;; 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
3001 ;; 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
3002 ;; 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
3003 ;; 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
3004 ;; 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
3005 ;; first match.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3006 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3007 ;; `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
3008 ;; 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
3009 ;; 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
3010 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3011 ;; `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
3012 ;; `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
3013 ;; 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
3014 (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
3015 (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
3016 (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
3017 (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
3018
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3019 (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
3020 (and c-find-decl-syntactic-pos
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3021 (< 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
3022 (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
3023
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3024 ; (defface c-debug-decl-spot-face
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3025 ; '((t (:background "Turquoise")))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3026 ; "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
3027 ; (defface c-debug-decl-sws-face
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3028 ; '((t (:background "Khaki")))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3029 ; "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
3030 ; spots and the preceding token end.")
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3031
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3032 (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
3033 (when (facep 'c-debug-decl-spot-face)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3034 `(let ((match-pos ,match-pos) (decl-pos ,decl-pos))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3035 (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
3036 'c-debug-decl-sws-face)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3037 (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
3038 'c-debug-decl-spot-face))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3039 (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
3040 (when (facep 'c-debug-decl-spot-face)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3041 `(progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3042 (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
3043 (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
3044
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3045 (defmacro c-find-decl-prefix-search ()
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3046 ;; 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
3047 ;; 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
3048 ;; 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
3049 ;; if there is a match, otherwise at `cfd-limit'.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3050
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3051 '(progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3052 ;; 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
3053 (unless cfd-prop-match
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3054 (save-excursion
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3055 (while (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3056 (goto-char (next-single-property-change
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3057 (point) 'c-type nil cfd-limit))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3058 (and (< (point) cfd-limit)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3059 (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
3060 'c-decl-end)))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3061 (setq cfd-prop-match (point))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3062
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3063 ;; Find the next `c-decl-prefix-re' match 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
3064 (unless cfd-re-match
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3065 (while (and (setq cfd-re-match
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3066 (re-search-forward c-decl-prefix-re cfd-limit 'move))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3067 (c-got-face-at (1- (setq cfd-re-match (match-end 1)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3068 c-literal-faces))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3069 ;; Search again if the match is within a comment or a string literal.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3070 (while (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3071 (goto-char (next-single-property-change
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3072 cfd-re-match 'face nil cfd-limit))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3073 (and (< (point) cfd-limit)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3074 (c-got-face-at (point) c-literal-faces)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3075 (setq cfd-re-match (point))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3076 (unless cfd-re-match
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3077 (setq cfd-re-match cfd-limit)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3078
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3079 ;; 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
3080 (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
3081 (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
3082 cfd-re-match nil)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3083 (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
3084 cfd-prop-match nil))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3085
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3086 (goto-char cfd-match-pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3087
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3088 (when (< cfd-match-pos cfd-limit)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3089 ;; 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
3090 (c-forward-comments)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3091 ;; 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
3092 ;; 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
3093 ;; 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
3094 ;; 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
3095 (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
3096 (min cfd-prop-match (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3097 (point))))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3098
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3099 (defun c-find-decl-spots (cfd-limit cfd-decl-re cfd-face-checklist cfd-fun)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3100 ;; Call CFD-FUN for each possible spot for a declaration from the
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3101 ;; point to CFD-LIMIT. A spot for a declaration is the first token
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3102 ;; in the buffer and each token after the ones matched by
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3103 ;; `c-decl-prefix-re' and after the occurrences of the `c-type'
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3104 ;; property with the value `c-decl-end' (if `c-type-decl-end-used'
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3105 ;; is set). Only a spot that match CFD-DECL-RE and whose face is in
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3106 ;; the CFD-FACE-CHECKLIST list causes CFD-FUN to be called. The
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3107 ;; face check is disabled if CFD-FACE-CHECKLIST is nil.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3108 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3109 ;; 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
3110 ;; 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
3111 ;; 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
3112 ;; 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
3113 ;; CFD-FACE-CHECKLIST checks exist.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3114 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3115 ;; 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
3116 ;; passed two arguments: The first is the end position of the token
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3117 ;; that `c-decl-prefix-re' matched, or 0 for the implicit match at
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3118 ;; bob. The second is a flag that is t when the match is inside a
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3119 ;; macro.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3120 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3121 ;; It's assumed that comment and strings are fontified in the
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3122 ;; searched range.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3123 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3124 ;; 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
3125 ;; 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
3126 ;; the variables above.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3127 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3128 ;; 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
3129 ;; collision with the (dynamically bound) variables used in CFD-FUN.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3130
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3131 (let ((cfd-buffer-end (point-max))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3132 ;; The last regexp match found by `c-find-decl-prefix-search'.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3133 cfd-re-match
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3134 ;; The last `c-decl-end' found by `c-find-decl-prefix-search'.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3135 ;; If searching for the property isn't needed then we disable
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3136 ;; it by faking a first match at the limit.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3137 (cfd-prop-match (unless c-type-decl-end-used cfd-limit))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3138 ;; The position of the last match found by
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3139 ;; `c-find-decl-prefix-search'. For regexp matches it's the
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3140 ;; end of the matched token, for property matches it's the end
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3141 ;; of the property. 0 for the implicit match at bob.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3142 ;; `cfd-limit' if there's no match.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3143 (cfd-match-pos cfd-limit)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3144 ;; The position to continue searching at.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3145 cfd-continue-pos
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3146 ;; 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
3147 ;; 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
3148 ;; 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
3149 ;; comments.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3150 (cfd-token-pos 0)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3151 ;; 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
3152 (cfd-macro-end 0))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3153
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3154 ;; Initialize by finding a syntactically relevant start position
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3155 ;; before the point, and do the first `c-decl-prefix-re' search
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3156 ;; unless we're at bob.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3157
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3158 (let ((start-pos (point)) syntactic-pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3159 ;; 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
3160 ;; 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
3161 ;; returned match.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3162
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3163 (when (c-got-face-at (point) c-literal-faces)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3164 ;; But first we need to move to a syntactically relevant
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3165 ;; position. Use the faces to back up to the start of the
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3166 ;; comment or string literal.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3167 (when (and (not (bobp))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3168 (c-got-face-at (1- (point)) c-literal-faces))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3169 (while (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3170 (goto-char (previous-single-property-change
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3171 (point) 'face nil (point-min)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3172 (and (> (point) (point-min))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3173 (c-got-face-at (point) c-literal-faces)))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3174
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3175 ;; XEmacs doesn't fontify the quotes surrounding string
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3176 ;; literals.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3177 (and (featurep 'xemacs)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3178 (eq (get-text-property (point) 'face)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3179 'font-lock-string-face)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3180 (not (bobp))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3181 (progn (backward-char)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3182 (not (looking-at c-string-limit-regexp)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3183 (forward-char))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3184
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3185 ;; The font lock package might not have fontified the start of
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3186 ;; the literal at all so check that we have arrived at
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3187 ;; something that looks like a start or else resort to
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3188 ;; `c-literal-limits'.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3189 (unless (looking-at c-literal-start-regexp)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3190 (let ((range (c-literal-limits)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3191 (if range (goto-char (car range))))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3192
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3193 ;; Must back out of any macro so that we don't miss any
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3194 ;; declaration that could follow after it, unless the limit is
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3195 ;; inside the macro. We only check that for the current line to
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3196 ;; save some time; it's enough for the by far most common case
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3197 ;; when font-lock refontifies the current line only.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3198 (when (save-excursion
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3199 (and (= (forward-line 1) 0)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3200 (or (< (c-point 'eol) cfd-limit)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3201 (progn (backward-char)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3202 (not (eq (char-before) ?\\))))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3203 (c-beginning-of-macro))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3204
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3205 ;; Clear the cache if it applied further down.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3206 (c-invalidate-find-decl-cache start-pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3207
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3208 (setq syntactic-pos (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3209 (c-backward-syntactic-ws c-find-decl-syntactic-pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3210
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3211 ;; If we hit `c-find-decl-syntactic-pos' and
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3212 ;; `c-find-decl-match-pos' is set then we install the cached
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3213 ;; values. If we hit `c-find-decl-syntactic-pos' and
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3214 ;; `c-find-decl-match-pos' is nil then we know there's no decl
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3215 ;; prefix in the whitespace before `c-find-decl-syntactic-pos'
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3216 ;; and so we can continue the search from this point. If we
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3217 ;; didn't hit `c-find-decl-syntactic-pos' then we're now in the
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3218 ;; right spot to begin searching anyway.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3219 (if (and (eq (point) c-find-decl-syntactic-pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3220 c-find-decl-match-pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3221
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3222 (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3223 ;; The match is always outside macros and comments so we
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3224 ;; start at the next token. The loop below will later go
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3225 ;; back using `cfd-continue-pos' to fix declarations inside
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3226 ;; the syntactic ws.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3227 (goto-char syntactic-pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3228 (c-forward-syntactic-ws)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3229 (setq cfd-match-pos c-find-decl-match-pos
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3230 cfd-continue-pos syntactic-pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3231 (if (< cfd-continue-pos (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3232 (setq cfd-token-pos (point))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3233
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3234 (setq c-find-decl-syntactic-pos syntactic-pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3235
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3236 (when (if (bobp)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3237 ;; Always consider bob a match to get the first declaration
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3238 ;; in the file. Do this separately instead of letting
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3239 ;; `c-decl-prefix-re' match bob, so that it always can
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3240 ;; consume at least one character to ensure that we won't
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3241 ;; get stuck in an infinite loop.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3242 (setq cfd-re-match 0)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3243 (backward-char)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3244 (c-beginning-of-current-token)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3245 (< (point) cfd-limit))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3246 ;; Do an initial search now. In the bob case above it's only done
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3247 ;; to search for the `c-type' property.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3248 (c-find-decl-prefix-search))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3249
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3250 ;; Advance `cfd-continue-pos' if we got a hit before the start
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3251 ;; position. The earliest position that could affect after
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3252 ;; the start position is the char before the preceding
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3253 ;; comments.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3254 (when (and cfd-continue-pos (< cfd-continue-pos start-pos))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3255 (goto-char syntactic-pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3256 (c-backward-comments)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3257 (unless (bobp)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3258 (backward-char)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3259 (c-beginning-of-current-token))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3260 (setq cfd-continue-pos (max cfd-continue-pos (point))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3261
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3262 ;; If we got a match it's always outside macros and comments so
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3263 ;; advance to the next token and set `cfd-token-pos'. The loop
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3264 ;; below will later go back using `cfd-continue-pos' to fix
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3265 ;; declarations inside the syntactic ws.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3266 (when (and (< cfd-match-pos cfd-limit) (< (point) syntactic-pos))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3267 (goto-char syntactic-pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3268 (c-forward-syntactic-ws)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3269 (and cfd-continue-pos
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3270 (< cfd-continue-pos (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3271 (setq cfd-token-pos (point))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3272
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3273 (setq c-find-decl-match-pos (and (< cfd-match-pos start-pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3274 cfd-match-pos))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3275
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3276 ;; Now loop. We already got the first match.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3277
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3278 (while (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3279 (while (and
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3280 (< cfd-match-pos cfd-limit)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3281
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3282 (or
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3283 ;; 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
3284 ;; 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
3285 ;; that got `c-recognize-<>-arglists' set.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3286 (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
3287 (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
3288 'syntax-table)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3289
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3290 ;; 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
3291 ;; `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
3292 ;; 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
3293 ;; "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
3294 ;; 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
3295 ;; there's nothing to do.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3296 (= cfd-continue-pos cfd-token-pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3297
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3298 (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3299 ;; 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
3300 ;; 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
3301 ;; 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
3302 ;; 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
3303 ;; 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
3304 ;; `c-find-decl-prefix-search'.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3305 (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
3306 (c-forward-syntactic-ws)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3307 (setq cfd-token-pos (point)))
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 ;; 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
3310 ;; 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
3311 (when (or (>= (point) cfd-limit)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3312 (not (looking-at cfd-decl-re))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3313 (and cfd-face-checklist
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3314 (not (c-got-face-at
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3315 (point) cfd-face-checklist))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3316 (goto-char cfd-continue-pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3317 t)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3318
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3319 (< (point) cfd-limit))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3320 (c-find-decl-prefix-search))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3321
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3322 (< (point) cfd-limit))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3323
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3324 (when (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3325 ;; Narrow to the end of the macro if we got a hit inside
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3326 ;; one, to avoid recognizing things that start inside
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3327 ;; the macro and end outside it.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3328 (when (> cfd-match-pos cfd-macro-end)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3329 ;; Not in the same macro as in the previous round.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3330 (save-excursion
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3331 (goto-char cfd-match-pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3332 (setq cfd-macro-end
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3333 (if (save-excursion (and (c-beginning-of-macro)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3334 (< (point) cfd-match-pos)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3335 (progn (c-end-of-macro)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3336 (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3337 0))))
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 (if (zerop cfd-macro-end)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3340 t
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3341 (if (> cfd-macro-end (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3342 (progn (narrow-to-region (point-min) cfd-macro-end)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3343 t)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3344 ;; The matched token was the last thing in the
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3345 ;; macro, so the whole match is bogus.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3346 (setq cfd-macro-end 0)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3347 nil)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3348
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3349 (c-debug-put-decl-spot-faces cfd-match-pos (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3350 (funcall cfd-fun cfd-match-pos (/= cfd-macro-end 0))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3351
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3352 (when (/= cfd-macro-end 0)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3353 ;; 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
3354 (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
3355
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3356 (goto-char cfd-continue-pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3357 (if (= cfd-continue-pos cfd-limit)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3358 (setq cfd-match-pos cfd-limit)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3359 (c-find-decl-prefix-search)))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3360
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3361
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3362 ;; A cache for found types.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3363
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3364 ;; 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
3365 ;; 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
3366 ;; 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
3367 ;; 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
3368 ;; 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
3369 ;; 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
3370 ;; file, and we only use this as a last resort in ambiguous cases (see
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3371 ;; `c-font-lock-declarations').
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3372 (defvar c-found-types nil)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3373 (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
3374
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3375 (defsubst c-clear-found-types ()
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3376 ;; Clears `c-found-types'.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3377 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3378 ;; 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
3379 (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
3380
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3381 (defun c-add-type (from to)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3382 ;; 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
3383 ;; 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
3384 ;; 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
3385 ;; 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
3386 ;; 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
3387 ;; 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
3388 ;; 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
3389 ;; font locking is invoked to solve this well.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3390 (unless (and c-recognize-<>-arglists
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3391 (save-excursion
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3392 (goto-char from)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3393 (c-syntactic-re-search-forward "<" to t)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3394 ;; To avoid storing very long strings, do not add a type that
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3395 ;; contains '<' in languages with angle bracket arglists, since
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3396 ;; the type then probably contains a C++ template spec and those
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3397 ;; can be fairly sized programs in themselves.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3398 (let ((type (c-syntactic-content from to)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3399 (unless (intern-soft type c-found-types)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3400 (unintern (substring type 0 -1) c-found-types)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3401 (intern type c-found-types)))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3402
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3403 (defsubst c-check-type (from to)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3404 ;; 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
3405 ;; `c-found-types'.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3406 (intern-soft (c-syntactic-content from to) c-found-types))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3407
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3408 (defun c-list-found-types ()
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3409 ;; 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
3410 ;; strings.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3411 (let (type-list)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3412 (mapatoms (lambda (type)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3413 (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
3414 type-list)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3415 c-found-types)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3416 (sort type-list 'string-lessp)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3417
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3418
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3419 ;; 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
3420
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3421 (defun c-remove-<>-arglist-properties (from to)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3422 ;; Remove all the properties put by `c-forward-<>-arglist' in the
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3423 ;; specified region. Point is clobbered.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3424 (goto-char from)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3425 (while (progn (skip-chars-forward "^<>," to)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3426 (< (point) to))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3427 (if (eq (char-after) ?,)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3428 (when (eq (c-get-char-property (point) 'c-type) 'c-<>-arg-sep)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3429 (c-clear-char-property (point) 'c-type))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3430 (c-clear-char-property (point) 'syntax-table))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3431 (forward-char)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3432
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3433 ;; 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
3434 ;; 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
3435 ;; '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
3436 ;; 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
3437 ;; 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
3438 (defvar c-promote-possible-types nil)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3439
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3440 ;; 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
3441 ;; not accept arglists that contain binary operators.
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
3442 ;;
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
3443 ;; 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
3444 ;; 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
3445 ;; 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
3446 ;; 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
3447 ;; 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
3448 ;; in almost all cases would be pointless.
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
3449 ;;
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
3450 ;; 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
3451 ;; 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
3452 ;; 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
3453 ;; "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
3454 (defvar c-restricted-<>-arglists nil)
51714
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 ;; Dynamically bound variables that instructs `c-forward-name',
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3457 ;; `c-forward-type' and `c-forward-<>-arglist' to record the ranges of
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3458 ;; all the type and reference identifiers they encounter. They will
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3459 ;; build lists on these variables where each element is a cons of the
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3460 ;; buffer positions surrounding each identifier. This recording is
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3461 ;; only activated when `c-record-type-identifiers' is non-nil.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3462 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3463 ;; 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
3464 ;; 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
3465 ;; 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
3466 ;; are encountered inside names and other angle bracket arglists.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3467 ;; Such occurences are taken care of by `c-font-lock-<>-arglists'
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3468 ;; instead.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3469 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3470 ;; 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
3471 ;; "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
3472 ;; aren't handled here.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3473 (defvar c-record-type-identifiers nil)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3474 (defvar c-record-ref-identifiers nil)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3475
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3476 ;; If `c-record-type-identifiers' is set, this will receive a cons
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3477 ;; cell of the range of the last single identifier symbol stepped over
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3478 ;; by `c-forward-name' if it's successful. This is the range that
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3479 ;; should be put on one of the record lists by the caller. It's
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3480 ;; assigned nil if there's no such symbol in the name.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3481 (defvar c-last-identifier-range nil)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3482
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3483 (defmacro c-record-type-id (range)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3484 (if (eq (car-safe range) 'cons)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3485 ;; Always true.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3486 `(setq c-record-type-identifiers
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3487 (cons ,range c-record-type-identifiers))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3488 `(let ((range ,range))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3489 (if range
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3490 (setq c-record-type-identifiers
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3491 (cons range c-record-type-identifiers))))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3492
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3493 (defmacro c-record-ref-id (range)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3494 (if (eq (car-safe range) 'cons)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3495 ;; Always true.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3496 `(setq c-record-ref-identifiers
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3497 (cons ,range c-record-ref-identifiers))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3498 `(let ((range ,range))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3499 (if range
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3500 (setq c-record-ref-identifiers
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3501 (cons range c-record-ref-identifiers))))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3502
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3503 ;; 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
3504 ;; 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
3505 ;; like `c-record-type-identifiers'.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3506 (defvar c-record-found-types nil)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3507
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3508 (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
3509 ;; 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
3510 ;; 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
3511 ;; 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
3512 ;; 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
3513 ;; 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
3514 ;; 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
3515 ;; 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
3516 ;; if TYPE is 'type or as a reference if TYPE is 'ref.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3517 `(let (res)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3518 (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
3519 `(c-forward-type)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3520 `(c-forward-name)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3521 nil
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3522 (and (looking-at c-keywords-regexp)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3523 (c-forward-keyword-clause))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3524 (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
3525 ,(when (eq type 'ref)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3526 `(when c-record-type-identifiers
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3527 (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
3528 t)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3529
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3530 (defmacro c-forward-id-comma-list (type)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3531 ;; 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
3532 ;; 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
3533 ;; `c-forward-keyword-prefixed-id'.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3534 `(while (and (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3535 (setq safe-pos (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3536 (eq (char-after) ?,))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3537 (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3538 (forward-char)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3539 (c-forward-syntactic-ws)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3540 (c-forward-keyword-prefixed-id ,type)))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3541
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3542 (defun c-forward-keyword-clause ()
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3543 ;; The first submatch in the current match data is assumed to
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3544 ;; surround a token. If it's a keyword, move over it and any
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3545 ;; following clauses associated with it, stopping at the next
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3546 ;; following token. t is returned in that case, otherwise the point
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3547 ;; 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
3548 ;; 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
3549 ;; `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
3550 ;; `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
3551 ;; and `c-<>-arglist-kwds'.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3552
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3553 (let ((kwd-sym (c-keyword-sym (match-string 1))) safe-pos pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3554 (when kwd-sym
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3555 (goto-char (match-end 1))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3556 (c-forward-syntactic-ws)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3557 (setq safe-pos (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3558
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3559 (cond
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3560 ((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
3561 (c-forward-keyword-prefixed-id type))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3562 ;; There's a type directly after a keyword in `c-type-list-kwds'.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3563 (c-forward-id-comma-list type))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3564
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3565 ((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
3566 (c-forward-keyword-prefixed-id ref))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3567 ;; There's a name directly after a keyword in `c-ref-list-kwds'.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3568 (c-forward-id-comma-list ref))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3569
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3570 ((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
3571 (eq (char-after) ?\())
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3572 ;; 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
3573
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3574 (forward-char)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3575 (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
3576 (eq (char-before pos) ?\)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3577 (when (and c-record-type-identifiers
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3578 (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
3579 ;; 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
3580 ;; 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
3581 (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
3582 (goto-char (match-beginning 0))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3583 (unless (c-forward-type)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3584 (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
3585 (goto-char (match-end 0)))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3586
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3587 (goto-char pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3588 (c-forward-syntactic-ws)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3589 (setq safe-pos (point))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3590
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3591 ((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
3592 (eq (char-after) ?<)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3593 (c-forward-<>-arglist (c-keyword-member kwd-sym 'c-<>-type-kwds)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3594 (or c-record-type-identifiers
53073
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
3595 c-restricted-<>-arglists)))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3596 (c-forward-syntactic-ws)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3597 (setq safe-pos (point)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3598
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3599 ((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
3600 (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
3601 (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
3602 (c-forward-syntactic-ws)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3603 (setq safe-pos (point))))
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 (when (and (c-keyword-member kwd-sym 'c-colon-type-list-kwds)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3606 (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3607 ;; If a keyword matched both one of the types above and
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3608 ;; this one, we match `c-colon-type-list-re' after the
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3609 ;; clause matched above.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3610 (goto-char safe-pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3611 (looking-at c-colon-type-list-re))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3612 (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3613 (goto-char (match-end 0))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3614 (c-forward-syntactic-ws)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3615 (c-forward-keyword-prefixed-id type)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3616 ;; There's a type after the `c-colon-type-list-re'
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3617 ;; match after a keyword in `c-colon-type-list-kwds'.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3618 (c-forward-id-comma-list type))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3619
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3620 (goto-char safe-pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3621 t)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3622
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3623 (defun c-forward-<>-arglist (all-types reparse)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3624 ;; The point is assumed to be at a '<'. Try to treat it as the open
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3625 ;; paren of an angle bracket arglist and move forward to the the
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3626 ;; corresponding '>'. If successful, the point is left after the
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3627 ;; '>' and t is returned, otherwise the point isn't moved and nil is
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3628 ;; 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
3629 ;; 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
3630 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3631 ;; The surrounding '<' and '>' are given syntax-table properties to
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3632 ;; make them behave like parentheses. Each argument separating ','
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3633 ;; is also set to `c-<>-arg-sep' in the `c-type' property. These
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3634 ;; properties are also cleared in a relevant region forward from the
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3635 ;; point if they seems to be set and it turns out to not be an
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3636 ;; arglist.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3637 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3638 ;; If the arglist has been successfully parsed before then paren
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3639 ;; syntax properties will be exploited to quickly jump to the end,
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3640 ;; but that can be disabled by setting REPARSE to t. That is
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3641 ;; necessary if the various side effects, e.g. recording of type
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3642 ;; ranges, are important. Setting REPARSE to t only applies
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3643 ;; recursively to nested angle bracket arglists if
53073
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
3644 ;; `c-restricted-<>-arglists' is set.
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3645
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3646 (let ((start (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3647 ;; 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
3648 ;; 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
3649 ;; the arglist.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3650 (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
3651 (if (catch 'angle-bracket-arglist-escape
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3652 (setq c-record-found-types
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3653 (c-forward-<>-arglist-recur all-types reparse)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3654 (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3655 (when (consp c-record-found-types)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3656 (setq c-record-type-identifiers
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3657 ;; `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
3658 ;; `c-record-found-types' is t.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3659 (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
3660 t)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3661
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3662 (goto-char start)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3663 nil)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3664
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3665 (defun c-forward-<>-arglist-recur (all-types reparse)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3666 ;; Recursive part of `c-forward-<>-arglist'.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3667
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3668 (let ((start (point)) res pos tmp
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3669 ;; 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
3670 ;; 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
3671 ;; 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
3672 ;; on successful completion.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3673 (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
3674 ;; 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
3675 ;; separating ',' in the arglist.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3676 arg-start-pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3677
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3678 ;; If the '<' has paren open syntax then we've marked it as an
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3679 ;; angle bracket arglist before, so try to skip to the end and see
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3680 ;; that the close paren matches.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3681 (if (and (c-get-char-property (point) 'syntax-table)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3682 (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3683 (forward-char)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3684 (if (and (not (looking-at c-<-op-cont-regexp))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3685 (if (c-parse-sexp-lookup-properties)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3686 (c-go-up-list-forward)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3687 (catch 'at-end
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3688 (let ((depth 1))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3689 (while (c-syntactic-re-search-forward
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3690 "[<>]" nil t t)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3691 (when (c-get-char-property (1- (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3692 'syntax-table)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3693 (if (eq (char-before) ?<)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3694 (setq depth (1+ depth))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3695 (setq depth (1- depth))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3696 (when (= depth 0) (throw 'at-end t)))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3697 nil)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3698 (not (looking-at c->-op-cont-regexp))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3699 (save-excursion
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3700 (backward-char)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3701 (= (point)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3702 (progn (c-beginning-of-current-token)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3703 (point)))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3704
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3705 ;; Got an arglist that appears to be valid.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3706 (if reparse
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3707 ;; Reparsing is requested, so zap the properties in the
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3708 ;; region and go on to redo it. It's done here to
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3709 ;; avoid leaving it behind if we exit through
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3710 ;; `angle-bracket-arglist-escape' below.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3711 (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3712 (c-remove-<>-arglist-properties start (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3713 (goto-char start)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3714 nil)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3715 t)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3716
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3717 ;; Got unmatched paren brackets or either paren was
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3718 ;; actually some other token. Recover by clearing the
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3719 ;; syntax properties on all the '<' and '>' in the
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3720 ;; range where we'll search for the arglist below.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3721 (goto-char start)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3722 (while (progn (skip-chars-forward "^<>,;{}")
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3723 (looking-at "[<>,]"))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3724 (if (eq (char-after) ?,)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3725 (when (eq (c-get-char-property (point) 'c-type)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3726 'c-<>-arg-sep)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3727 (c-clear-char-property (point) 'c-type))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3728 (c-clear-char-property (point) 'syntax-table))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3729 (forward-char))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3730 (goto-char start)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3731 nil)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3732 t
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3733
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3734 (forward-char)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3735 (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
3736 (while (and
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3737 (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3738
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3739 (when c-record-type-identifiers
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3740 (if all-types
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3741
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3742 ;; 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
3743 ;; promote flag and parse the type.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3744 (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3745 (c-forward-syntactic-ws)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3746 (when (looking-at c-identifier-start)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3747 (let ((c-promote-possible-types t))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3748 (c-forward-type))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3749
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3750 ;; 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
3751 ;; 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
3752 ;; `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
3753 ;; 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
3754 ;; 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
3755 ;; angle bracket arglist afterall.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3756 (when (memq (char-before) '(?, ?<))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3757 (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
3758 (c-forward-syntactic-ws)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3759 (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
3760 (not (looking-at "[,>]"))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3761 ;; 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
3762 ;; 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
3763 ;; `c-record-found-types'.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3764 (setq c-record-found-types
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3765 orig-record-found-types))))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3766
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3767 (setq pos (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3768 (or (when (eq (char-after) ?>)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3769 ;; 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
3770 ;; 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
3771 ;; using \\=.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3772 (forward-char)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3773 t)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3774
53073
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
3775 ;; 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
3776 ;; 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
3777 (c-syntactic-re-search-forward
53073
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
3778 (if c-restricted-<>-arglists
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
3779 ;; Stop on ',', '|', '&', '+' and '-' to catch
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
3780 ;; common binary operators that could be between
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
3781 ;; 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
3782 "[<;{},|&+-]\\|\\([^>:-]>\\)"
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
3783 ;; 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
3784 ;; argument start positions.
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
3785 "[<;{},]\\|\\([^>:-]>\\)")
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
3786 nil 'move t t 1)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3787
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3788 ;; 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
3789 ;; 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
3790 ;; 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
3791 ;; 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
3792 ;; 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
3793 (when (eq (char-after) ?>)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3794 ;; Remove its syntax so that we don't enter the
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3795 ;; recovery code below. That's not necessary
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3796 ;; since there's no real reason to suspect that
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3797 ;; things inside the arglist are unbalanced.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3798 (c-clear-char-property (point) 'syntax-table)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3799 (forward-char)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3800 t)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3801
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3802 (cond
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3803 ((eq (char-before) ?>)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3804 ;; 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
3805 ;; the angle bracket arglist.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3806
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3807 (if (and (/= (1- (point)) pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3808 (c-get-char-property (1- (point)) 'syntax-table)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3809 (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3810 (c-clear-char-property (1- (point)) 'syntax-table)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3811 (c-parse-sexp-lookup-properties)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3812
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3813 ;; We've skipped past a list that ended with '>'. It
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3814 ;; must be unbalanced since nested arglists are handled
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3815 ;; in the case below. Recover by removing all paren
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3816 ;; properties on '<' and '>' in the searched region and
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3817 ;; redo the search.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3818 (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3819 (c-remove-<>-arglist-properties pos (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3820 (goto-char pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3821 t)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3822
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3823 (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
3824 (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3825 (when (text-property-not-all
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3826 (1- (point)) (match-end 0) 'syntax-table nil)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3827 (c-remove-<>-arglist-properties (1- (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3828 (match-end 0)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3829 (goto-char (match-end 0))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3830 t)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3831
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3832 ;; The angle bracket arglist is finished.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3833 (while arg-start-pos
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3834 (c-put-char-property (1- (car arg-start-pos))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3835 'c-type 'c-<>-arg-sep)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3836 (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
3837 (c-mark-<-as-paren start)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3838 (c-mark->-as-paren (1- (point)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3839 (setq res t)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3840 nil)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3841
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3842 ((eq (char-before) ?<)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3843 ;; 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
3844
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3845 (setq pos (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3846 (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
3847 (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
3848 (setq tmp (match-end 0))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3849 (setq tmp pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3850 (backward-char)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3851 (not
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3852 (and
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3853
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3854 (save-excursion
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3855 ;; There's always an identifier before a angle
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3856 ;; bracket arglist, or a keyword in
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3857 ;; `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
3858 (c-backward-syntactic-ws)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3859 (setq id-end (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3860 (c-simple-skip-symbol-backward)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3861 (when (or (setq keyword-match
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3862 (looking-at c-opt-<>-sexp-key))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3863 (not (looking-at c-keywords-regexp)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3864 (setq id-start (point))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3865
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3866 (setq subres
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3867 (let ((c-record-type-identifiers nil)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3868 (c-record-found-types nil))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3869 (c-forward-<>-arglist-recur
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3870 (and keyword-match
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3871 (c-keyword-member
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3872 (c-keyword-sym (match-string 1))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3873 'c-<>-type-kwds))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3874 (and reparse
53073
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
3875 c-restricted-<>-arglists))))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3876 )))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3877
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3878 ;; It was not an angle bracket arglist.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3879 (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3880 (when (text-property-not-all
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3881 (1- pos) tmp 'syntax-table nil)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3882 (if (c-parse-sexp-lookup-properties)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3883 ;; Got an invalid open paren syntax on this
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3884 ;; '<'. We'll probably get an unbalanced '>'
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3885 ;; further ahead if we just remove the syntax
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3886 ;; here, so recover by removing all paren
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3887 ;; properties up to and including the
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3888 ;; balancing close paren.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3889 (parse-partial-sexp pos (point-max) -1)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3890 (goto-char tmp))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3891 (c-remove-<>-arglist-properties pos (point)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3892 (goto-char tmp))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3893
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3894 ;; It was an angle bracket arglist.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3895 (setq c-record-found-types subres)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3896
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3897 ;; 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
3898 ;; 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
3899 ;; in a qualified identifier.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3900 (when (and c-record-type-identifiers
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3901 (not keyword-match))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3902 (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
3903 (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3904 (c-forward-syntactic-ws)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3905 (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
3906 (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
3907 (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
3908 t)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3909
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3910 ((and (eq (char-before) ?,)
53073
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
3911 (not c-restricted-<>-arglists))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3912 ;; 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
3913 ;; 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
3914 ;; the top of the loop.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3915 (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
3916
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3917 (t
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3918 ;; 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
3919 ;; arglist argument. Abort using `throw', since
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3920 ;; 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
3921 ;; if we're nested.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3922 (throw 'angle-bracket-arglist-escape nil))))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3923
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3924 (if res
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3925 (or c-record-found-types t)))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3926
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3927 (defun c-forward-name ()
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3928 ;; 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
3929 ;; 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
3930 ;; 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
3931 ;; 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
3932 ;; 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
3933 ;; 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
3934 ;; 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
3935 ;; 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
3936 ;; 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
3937 ;; 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
3938 ;; 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
3939 ;; or t if it's some other kind of name.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3940
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3941 (let ((pos (point)) res id-start id-end
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3942 ;; 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
3943 ;; 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
3944 ;; 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
3945 ;; 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
3946 ;; 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
3947 ;; be promoted.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3948 c-promote-possible-types)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3949 (while
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3950 (and
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3951 (looking-at c-identifier-key)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3952
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3953 (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3954 ;; 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
3955 ;; `c-identifier-key' first.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3956 (if (eq c-identifier-key c-symbol-key)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3957 (setq id-start (point)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3958 id-end (match-end 0))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3959 (goto-char (setq id-end (match-end 0)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3960 (c-simple-skip-symbol-backward)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3961 (setq id-start (point)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3962
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3963 (if (looking-at c-keywords-regexp)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3964 (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
3965 (looking-at
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3966 (cc-eval-when-compile
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3967 (concat "\\(operator\\|\\(template\\)\\)"
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3968 "\\(" (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
3969 "\\|$\\)")))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3970 (if (match-beginning 2)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3971 ;; "template" is only valid inside an
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3972 ;; identifier if preceded by "::".
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3973 (save-excursion
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3974 (c-backward-syntactic-ws)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3975 (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
3976 (looking-at "::")))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3977 t))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3978
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3979 ;; 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
3980 (goto-char id-end)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3981 (c-forward-syntactic-ws)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3982 (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
3983 ;; Got "... ::template".
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3984 (let ((subres (c-forward-name)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3985 (when subres
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3986 (setq pos (point)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3987 res subres))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3988
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3989 ((looking-at c-identifier-start)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3990 ;; Got a cast operator.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3991 (when (c-forward-type)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3992 (setq pos (point)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3993 res 'operator)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3994 ;; 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
3995 ;; '*', '&' or a name followed by ":: *",
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3996 ;; 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
3997 ;; of `c-opt-type-modifier-key'.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3998 (while (cond ((looking-at "[*&]")
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
3999 (goto-char (match-end 0))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4000 t)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4001 ((looking-at c-identifier-start)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4002 (and (c-forward-name)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4003 (looking-at "::")
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4004 (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4005 (goto-char (match-end 0))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4006 (c-forward-syntactic-ws)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4007 (eq (char-after) ?*))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4008 (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4009 (forward-char)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4010 t))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4011 (while (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4012 (c-forward-syntactic-ws)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4013 (setq pos (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4014 (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
4015 (goto-char (match-end 1))))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4016
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4017 ((looking-at c-overloadable-operators-regexp)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4018 ;; Got some other operator.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4019 (when c-record-type-identifiers
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4020 (setq c-last-identifier-range
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4021 (cons (point) (match-end 0))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4022 (goto-char (match-end 0))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4023 (c-forward-syntactic-ws)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4024 (setq pos (point)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4025 res 'operator)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4026
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4027 nil)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4028
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4029 (when c-record-type-identifiers
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4030 (setq c-last-identifier-range
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4031 (cons id-start id-end)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4032 (goto-char id-end)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4033 (c-forward-syntactic-ws)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4034 (setq pos (point)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4035 res t)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4036
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4037 (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4038 (goto-char pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4039 (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
4040 c-recognize-<>-arglists)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4041
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4042 (cond
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4043 ((and c-opt-identifier-concat-key
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4044 (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
4045 ;; 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
4046 ;; 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
4047 ;; covered in `c-identifier-key'.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4048 (goto-char (match-end 0))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4049 (c-forward-syntactic-ws)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4050 t)
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 ((and c-recognize-<>-arglists
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4053 (eq (char-after) ?<))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4054 ;; Maybe an angle bracket arglist.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4055 (when (let ((c-record-type-identifiers nil)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4056 (c-record-found-types nil))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4057 (c-forward-<>-arglist
53073
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
4058 nil c-restricted-<>-arglists))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4059 (c-forward-syntactic-ws)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4060 (setq pos (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4061 (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
4062 (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
4063 ;; 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
4064 ;; operator after the template argument.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4065 (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4066 (when c-record-type-identifiers
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4067 (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
4068 (setq c-last-identifier-range nil))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4069 (forward-char 2)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4070 (c-forward-syntactic-ws)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4071 t)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4072 ;; `c-add-type' isn't called here since we don't
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4073 ;; want to add types containing angle bracket
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4074 ;; arglists.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4075 (when c-record-type-identifiers
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4076 (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
4077 (setq c-last-identifier-range nil))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4078 (setq res 'template)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4079 nil)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4080 )))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4081
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4082 (goto-char pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4083 res))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4084
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4085 (defun c-forward-type ()
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4086 ;; 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
4087 ;; 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
4088 ;; 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
4089 ;; 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
4090 ;; '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
4091 ;; 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
4092 ;; 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
4093 ;; 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
4094 ;; of a token.
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4095 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4096 ;; 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
4097 ;; 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
4098 ;; "enum {a, b, c} foo".
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4099 (let ((start (point)) pos res res2 id-start id-end id-range)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4100
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4101 ;; 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
4102 ;; prefix of a type.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4103 (when c-opt-type-modifier-key
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4104 (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
4105 (goto-char (match-end 1))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4106 (c-forward-syntactic-ws)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4107 (setq res 'prefix)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4108
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4109 (cond
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4110 ((looking-at c-type-prefix-key)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4111 ;; 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
4112 ;; e.g. "class".
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4113 (goto-char (match-end 1))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4114 (c-forward-syntactic-ws)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4115 (setq pos (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4116 (if (memq (setq res2 (c-forward-name)) '(t template))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4117 (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4118 (when (eq res2 t)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4119 ;; 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
4120 ;; 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
4121 (c-add-type pos (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4122 (when c-record-type-identifiers
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4123 (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
4124 (setq res t))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4125 ;; Invalid syntax.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4126 (goto-char start)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4127 (setq res nil)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4128
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4129 ((progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4130 (setq pos nil)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4131 (if (looking-at c-identifier-start)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4132 (save-excursion
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4133 (setq id-start (point)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4134 res2 (c-forward-name))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4135 (when res2
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4136 (setq id-end (point)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4137 id-range c-last-identifier-range))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4138 (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
4139 (setq res t))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4140 ((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
4141 (looking-at c-known-type-key))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4142 (setq res 'known)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4143 (or (not id-end)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4144 (>= (save-excursion
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4145 (save-match-data
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4146 (goto-char (match-end 1))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4147 (c-forward-syntactic-ws)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4148 (setq pos (point))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4149 id-end)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4150 (setq res nil))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4151 ;; 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
4152 ;; 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
4153 ;; 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
4154
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4155 (setq id-end (match-end 1))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4156
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4157 (when (and c-record-type-identifiers
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4158 (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
4159 (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
4160
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4161 (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
4162 (save-match-data
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4163 (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
4164 ;; 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
4165 (let (safe-pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4166 (c-forward-keyword-clause)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4167 (while (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4168 (setq safe-pos (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4169 (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
4170 (when (and c-record-type-identifiers
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4171 (looking-at c-primitive-type-key))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4172 (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
4173 (match-end 1))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4174 (c-forward-keyword-clause))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4175 (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
4176 (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4177 (when c-record-type-identifiers
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4178 (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
4179 (match-end 1))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4180 (c-forward-keyword-clause)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4181 (setq res t))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4182 (goto-char safe-pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4183 (setq res 'prefix)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4184 (unless (save-match-data (c-forward-keyword-clause))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4185 (if pos
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4186 (goto-char pos)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4187 (goto-char (match-end 1))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4188 (c-forward-syntactic-ws)))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4189
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4190 (res2
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4191 (cond ((eq res2 t)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4192 ;; A normal identifier.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4193 (goto-char id-end)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4194 (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
4195 (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4196 (c-add-type id-start id-end)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4197 (when c-record-type-identifiers
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4198 (c-record-type-id id-range))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4199 (unless res
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4200 (setq res 'found)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4201 (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
4202 ;; 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
4203 ;; a type somewhere else.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4204 'found
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4205 ;; 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
4206 'maybe))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4207 ((eq res2 'template)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4208 ;; A template is a type.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4209 (goto-char id-end)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4210 (setq res t))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4211 (t
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4212 ;; 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
4213 (goto-char start)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4214 (setq res nil)))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4215
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4216 (when res
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4217 ;; 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
4218 ;; a type.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4219 (when c-opt-type-modifier-key
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4220 (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
4221 (goto-char (match-end 1))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4222 (c-forward-syntactic-ws)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4223 (setq res t)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4224
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4225 ;; 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
4226 ;; 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
4227 ;; 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
4228 ;; too.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4229 (when c-opt-type-suffix-key
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4230 (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
4231 (goto-char (match-end 1))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4232 (c-forward-syntactic-ws)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4233
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4234 (when c-opt-type-concat-key
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4235 ;; Look for a trailing operator that concatenate the type with
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4236 ;; a following one, and if so step past that one through a
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4237 ;; recursive call.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4238 (setq pos (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4239 (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
4240 c-promote-possible-types))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4241 ;; 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
4242 ;; 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
4243 ;; 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
4244 (c-record-found-types (and c-record-type-identifiers
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4245 (not c-promote-possible-types))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4246 (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
4247
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4248 (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4249 (goto-char (match-end 1))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4250 (c-forward-syntactic-ws)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4251 (setq res2 (c-forward-type))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4252
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4253 (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4254 ;; 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
4255 ;; 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
4256 ;; uncertain types to a certain one.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4257 (cond ((eq res t))
56646
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
4258 ((eq res2 t)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4259 (c-add-type id-start id-end)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4260 (when c-record-type-identifiers
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4261 (c-record-type-id id-range))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4262 (setq res t))
56646
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
4263 ((eq res 'known))
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
4264 ((eq res2 'known)
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
4265 (setq res 'known))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4266 ((eq res 'found))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4267 ((eq res2 'found)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4268 (setq res 'found))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4269 (t
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4270 (setq res 'maybe)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4271
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4272 (when (and (eq res t)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4273 (consp c-record-found-types))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4274 ;; 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
4275 ;; `c-forward-type'.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4276 (setq c-record-type-identifiers
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4277 ;; `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
4278 ;; `c-record-found-types' is t.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4279 (nconc c-record-found-types
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4280 c-record-type-identifiers))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4281
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4282 (goto-char pos))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4283
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4284 (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
4285 (setq c-record-found-types
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4286 (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
4287
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4288 ;;(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
4289
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4290 res))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4291
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 ;; 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
4294
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4295 (defun c-beginning-of-inheritance-list (&optional lim)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4296 ;; Go to the first non-whitespace after the colon that starts a
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4297 ;; multiple inheritance introduction. Optional LIM is the farthest
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4298 ;; back we should search.
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4299 (let* ((lim (or lim (save-excursion
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4300 (c-beginning-of-syntax)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4301 (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
4302 (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
4303 (c-backward-token-2 0 t lim)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4304 (while (and (or (looking-at c-symbol-start)
53073
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
4305 (looking-at "[<,]\\|::"))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4306 (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
4307 (skip-chars-forward "^:"))))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4308
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4309 (defun c-in-method-def-p ()
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4310 ;; Return nil if we aren't in a method definition, otherwise the
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4311 ;; position of the initial [+-].
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4312 (save-excursion
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4313 (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
4314 (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
4315 (looking-at c-opt-method-key)
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4316 (point))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4317 ))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4318
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
4319 ;; 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
4320 (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
4321 ;; 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
4322 ;;
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
4323 ;; 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
4324 ;;
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
4325 ;; 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
4326 ;; 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
4327 ;; operand.
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
4328
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
4329 (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
4330 (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
4331 (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
4332 (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
4333 (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
4334 (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
4335
24335
0c4688f9a396 Added c-at-toplevel-p for font-lock.el.
Simon Marshall <simon@gnu.org>
parents: 24282
diff changeset
4336 (defun c-at-toplevel-p ()
0c4688f9a396 Added c-at-toplevel-p for font-lock.el.
Simon Marshall <simon@gnu.org>
parents: 24282
diff changeset
4337 "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
4338 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
4339 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
4340 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
4341
0c4688f9a396 Added c-at-toplevel-p for font-lock.el.
Simon Marshall <simon@gnu.org>
parents: 24282
diff changeset
4342 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
4343 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
4344 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
4345 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
4346 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
4347 element is the buffer position of the enclosing class's opening
0c4688f9a396 Added c-at-toplevel-p for font-lock.el.
Simon Marshall <simon@gnu.org>
parents: 24282
diff changeset
4348 brace."
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
4349 (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
4350 (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
4351 (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
4352
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4353 (defun c-just-after-func-arglist-p (&optional lim)
52605
50c6e94a91cb (c-parse-state): Fixed bug that could cause errors when the state
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4354 ;; Return non-nil if we are between a function's argument list closing
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4355 ;; paren and its opening brace. Note that the list close brace
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4356 ;; could be followed by a "const" specifier or a member init hanging
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4357 ;; colon. LIM is used as bound for some backward buffer searches;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4358 ;; the search might continue past it.
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
4359 ;;
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
4360 ;; Note: This test is easily fooled. It only works reasonably well
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
4361 ;; in the situations where `c-guess-basic-syntax' uses it.
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4362 (save-excursion
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4363 (if (c-mode-is-new-awk-p)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4364 (c-awk-backward-syntactic-ws lim)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4365 (c-backward-syntactic-ws lim))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4366 (let ((checkpoint (point)))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4367 ;; could be looking at const specifier
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4368 (if (and (eq (char-before) ?t)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4369 (forward-word -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
4370 (looking-at "\\<const\\>[^_]"))
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
4371 (c-backward-syntactic-ws lim)
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4372 ;; otherwise, we could be looking at a hanging member init
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4373 ;; colon
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4374 (goto-char checkpoint)
52339
721da86ff178 (c-just-after-func-arglist-p): Safeguard against unbalanced sexps.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52107
diff changeset
4375 (while (and
721da86ff178 (c-just-after-func-arglist-p): Safeguard against unbalanced sexps.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52107
diff changeset
4376 (eq (char-before) ?,)
721da86ff178 (c-just-after-func-arglist-p): Safeguard against unbalanced sexps.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52107
diff changeset
4377 ;; this will catch member inits with multiple
721da86ff178 (c-just-after-func-arglist-p): Safeguard against unbalanced sexps.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52107
diff changeset
4378 ;; line arglists
721da86ff178 (c-just-after-func-arglist-p): Safeguard against unbalanced sexps.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52107
diff changeset
4379 (progn
721da86ff178 (c-just-after-func-arglist-p): Safeguard against unbalanced sexps.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52107
diff changeset
4380 (forward-char -1)
721da86ff178 (c-just-after-func-arglist-p): Safeguard against unbalanced sexps.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52107
diff changeset
4381 (c-backward-syntactic-ws (c-point 'bol))
721da86ff178 (c-just-after-func-arglist-p): Safeguard against unbalanced sexps.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52107
diff changeset
4382 (c-safe (c-backward-sexp 1) t))
721da86ff178 (c-just-after-func-arglist-p): Safeguard against unbalanced sexps.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52107
diff changeset
4383 (or (not (looking-at "\\s\("))
721da86ff178 (c-just-after-func-arglist-p): Safeguard against unbalanced sexps.
Martin Stjernholm <mast@lysator.liu.se>
parents: 52107
diff changeset
4384 (c-safe (c-backward-sexp 1) 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
4385 (c-backward-syntactic-ws lim))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4386 (if (and (eq (char-before) ?:)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4387 (progn
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4388 (forward-char -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
4389 (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
4390 (looking-at "\\([ \t\n]\\|\\\\\n\\)*:\\([^:]+\\|$\\)")))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4391 nil
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4392 (goto-char checkpoint))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4393 )
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
4394 (setq checkpoint (point))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4395 (and (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
4396 ;; Check that it isn't a cpp expression, e.g. 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
4397 ;; expression of an #if directive or the "function header"
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
4398 ;; 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
4399 (or (not (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
4400 (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
4401 (< (point) checkpoint)))
52605
50c6e94a91cb (c-parse-state): Fixed bug that could cause errors when the state
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4402 ;; Check if we are looking at an ObjC method def or a class
50c6e94a91cb (c-parse-state): Fixed bug that could cause errors when the state
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4403 ;; category.
50c6e94a91cb (c-parse-state): Fixed bug that could cause errors when the state
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4404 (not (and c-opt-method-key
50c6e94a91cb (c-parse-state): Fixed bug that could cause errors when the state
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4405 (progn
50c6e94a91cb (c-parse-state): Fixed bug that could cause errors when the state
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4406 (goto-char checkpoint)
50c6e94a91cb (c-parse-state): Fixed bug that could cause errors when the state
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4407 (c-safe (c-backward-sexp) t))
50c6e94a91cb (c-parse-state): Fixed bug that could cause errors when the state
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4408 (progn
50c6e94a91cb (c-parse-state): Fixed bug that could cause errors when the state
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4409 (c-backward-syntactic-ws lim)
50c6e94a91cb (c-parse-state): Fixed bug that could cause errors when the state
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4410 (or (memq (char-before) '(?- ?+))
50c6e94a91cb (c-parse-state): Fixed bug that could cause errors when the state
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4411 (and (c-safe (c-forward-sexp -2) t)
50c6e94a91cb (c-parse-state): Fixed bug that could cause errors when the state
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4412 (looking-at c-class-key))))))
50c6e94a91cb (c-parse-state): Fixed bug that could cause errors when the state
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4413 ;; Pike has compound types that include parens,
50c6e94a91cb (c-parse-state): Fixed bug that could cause errors when the state
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4414 ;; e.g. "array(string)". Check that we aren't after one.
50c6e94a91cb (c-parse-state): Fixed bug that could cause errors when the state
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4415 (not (and (c-major-mode-is 'pike-mode)
50c6e94a91cb (c-parse-state): Fixed bug that could cause errors when the state
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4416 (progn
50c6e94a91cb (c-parse-state): Fixed bug that could cause errors when the state
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4417 (goto-char checkpoint)
50c6e94a91cb (c-parse-state): Fixed bug that could cause errors when the state
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4418 (c-safe (c-backward-sexp 2) t))
50c6e94a91cb (c-parse-state): Fixed bug that could cause errors when the state
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4419 (looking-at c-primitive-type-key)))
50c6e94a91cb (c-parse-state): Fixed bug that could cause errors when the state
Martin Stjernholm <mast@lysator.liu.se>
parents: 52401
diff changeset
4420 ))))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4421
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
4422 (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
4423 ;; 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
4424 ;; 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
4425 ;; `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
4426 ;; 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
4427 ;;
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
4428 ;; Note: A declaration level context is assumed; the test can return
53073
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
4429 ;; false positives for statements.
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4430
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
4431 (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
4432 (save-restriction
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4433
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
4434 ;; Go back to the closest preceding normal parenthesis sexp. 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
4435 ;; take that as the argument list in the function header. 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
4436 ;; check that it's followed by some symbol before 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
4437 ;; or '{'. If it does, it's the header of the K&R argdecl 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
4438 ;; in.
53073
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
4439 (if lim (narrow-to-region lim (c-point 'eol)))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4440 (let ((outside-macro (not (c-query-macro-start)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4441 paren-end)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4442
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4443 (catch 'done
53073
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
4444 (while (if (and (setq paren-end (c-down-list-backward (point)))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4445 (eq (char-after paren-end) ?\)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4446 (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4447 (goto-char (1+ paren-end))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4448 (if outside-macro
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4449 (c-beginning-of-macro)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4450 (throw 'done nil))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4451
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4452 (and (progn
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
4453 (c-forward-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
4454 (looking-at "\\w\\|\\s_"))
53073
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
4455
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
4456 (save-excursion
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
4457 ;; The function header in a K&R declaration should only
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
4458 ;; contain identifiers separated by comma. It should
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
4459 ;; also contain at least one identifier since there
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
4460 ;; wouldn't be anything to declare in the K&R region
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
4461 ;; otherwise.
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
4462 (when (c-go-up-list-backward paren-end)
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
4463 (forward-char)
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
4464 (catch 'knr-ok
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
4465 (while t
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
4466 (c-forward-syntactic-ws)
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
4467 (if (or (looking-at c-known-type-key)
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
4468 (looking-at c-keywords-regexp))
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
4469 (throw 'knr-ok nil))
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
4470 (c-forward-token-2)
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
4471 (if (eq (char-after) ?,)
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
4472 (forward-char)
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
4473 (throw 'knr-ok (and (eq (char-after) ?\))
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
4474 (= (point) paren-end))))))))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4475
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4476 (save-excursion
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4477 ;; If it's a K&R declaration then we're now at the
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4478 ;; beginning of the function arglist. Check that there
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4479 ;; isn't a '=' before it in this statement since that
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4480 ;; means it some kind of initialization instead.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4481 (c-syntactic-skip-backward "^;=}{")
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4482 (not (eq (char-before) ?=)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4483
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
4484 (point))))))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4485
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4486 (defun c-skip-conditional ()
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4487 ;; skip forward over conditional at point, including any predicate
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4488 ;; statements in parentheses. No error checking is performed.
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
4489 (c-forward-sexp (cond
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
4490 ;; 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
4491 ((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
4492 "\\([ \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
4493 "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
4494 3)
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
4495 ;; 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
4496 ((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
4497 "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
4498 "\\)\\>\\([^_]\\|$\\)"))
36920
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
4499 1)
30403
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
4500 ;; for, if, while, switch, catch, synchronized, foreach
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
4501 (t 2))))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4502
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
4503 (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
4504 ;; 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
4505 ;; position of its start, otherwise return 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
4506 (save-excursion
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4507 (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
4508 (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
4509 (and (eq (char-after) ?\()
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4510 (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
4511 (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
4512 (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
4513
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
4514 (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
4515 ;; 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
4516 ;; 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
4517 ;; 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
4518 ;; 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
4519 ;; function.
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
4520 (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
4521 (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
4522 (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
4523 (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
4524
53073
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
4525 (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
4526 ;; 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
4527 ;; 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
4528 ;; that 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
4529 (unless (= (point) (c-point 'boi))
53073
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
4530 (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
4531
52107
3a5379a0d7f3 2003-08-01 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents: 51947
diff changeset
4532 (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
4533 ;; 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
4534 ;; 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
4535 ;; 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
4536 ;; 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
4537 ;; (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
4538 ;; _after_ the first found token, or at point-max if none is found.
52107
3a5379a0d7f3 2003-08-01 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents: 51947
diff changeset
4539
3a5379a0d7f3 2003-08-01 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents: 51947
diff changeset
4540 (let ((base (point)))
3a5379a0d7f3 2003-08-01 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents: 51947
diff changeset
4541 (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
4542
3a5379a0d7f3 2003-08-01 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents: 51947
diff changeset
4543 ;; 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
4544 ;; 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
4545 (while (and
3a5379a0d7f3 2003-08-01 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents: 51947
diff changeset
4546 (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
4547 (or
3a5379a0d7f3 2003-08-01 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents: 51947
diff changeset
4548 (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
4549 ;; 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
4550 ;; 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
4551 (save-excursion
3a5379a0d7f3 2003-08-01 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents: 51947
diff changeset
4552 (and (c-safe (c-backward-sexp) t)
3a5379a0d7f3 2003-08-01 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents: 51947
diff changeset
4553 (looking-at "operator\\([^_]\\|$\\)")))
3a5379a0d7f3 2003-08-01 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents: 51947
diff changeset
4554 (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
4555 (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
4556 (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
4557 t
3a5379a0d7f3 2003-08-01 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents: 51947
diff changeset
4558 (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
4559 nil)))))
3a5379a0d7f3 2003-08-01 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents: 51947
diff changeset
4560 (setq base (point)))
3a5379a0d7f3 2003-08-01 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents: 51947
diff changeset
4561
3a5379a0d7f3 2003-08-01 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents: 51947
diff changeset
4562 (while (and
3a5379a0d7f3 2003-08-01 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents: 51947
diff changeset
4563 (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
4564 (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
4565 (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
4566
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
4567 (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
4568 ;; 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
4569 ;; of the previous one if already at the start of it. Point won'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
4570 ;; be moved out of any surrounding paren. Return a cons cell 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
4571 ;; 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
4572 ;; `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
4573 ;; 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
4574 ;; 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
4575 ;; 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
4576 ;; 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
4577 ;;
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
4578 ;; 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
4579 ;; "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
4580 ;; declarations, e.g. "struct foo { ... }" and "bar;" 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
4581 (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
4582 (let* ((start (point))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4583 (last-stmt-start (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4584 (move (c-beginning-of-statement-1 lim t t)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4585
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
4586 ;; `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
4587 ;; 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
4588 ;; 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
4589 ;; or an open paren.
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4590 (let ((beg (point)) tentative-move)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4591 (while (and
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4592 ;; 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
4593 (not (and c-opt-method-key
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4594 (looking-at c-opt-method-key)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4595 (/= last-stmt-start (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4596 (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4597 (c-backward-syntactic-ws lim)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4598 (not (memq (char-before) '(?\; ?} ?: nil))))
56646
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
4599 (save-excursion
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
4600 (backward-char)
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
4601 (not (looking-at "\\s(")))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4602 ;; 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
4603 ;; macro to its header.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4604 (not (eq (setq tentative-move
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4605 (c-beginning-of-statement-1 lim t t))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4606 'macro)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4607 (setq last-stmt-start beg
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4608 beg (point)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4609 move tentative-move))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4610 (goto-char beg))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4611
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4612 (when c-recognize-knr-p
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4613 (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
4614 ;; 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
4615 ;; 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
4616 ;; 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
4617 ;; 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
4618 ;; 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
4619 ;; it.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4620 (unless (eq (char-after) ?{)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4621 (goto-char last-stmt-start))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4622 (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
4623 (< knr-argdecl-start start)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4624 (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4625 (goto-char knr-argdecl-start)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4626 (not (eq (c-beginning-of-statement-1 lim t t) 'macro))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4627 (throw 'return
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4628 (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
4629 'previous
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4630 'same)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4631 knr-argdecl-start))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4632 (goto-char fallback-pos))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4633
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4634 (when c-opt-access-key
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4635 ;; Might have ended up before a protection label. This should
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4636 ;; perhaps be checked before `c-recognize-knr-p' to be really
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4637 ;; accurate, but we know that no language has both.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4638 (while (looking-at c-opt-access-key)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4639 (goto-char (match-end 0))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4640 (c-forward-syntactic-ws)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4641 (when (>= (point) start)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4642 (goto-char start)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4643 (throw 'return (cons 'same nil)))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4644
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4645 ;; `c-beginning-of-statement-1' counts each brace block as a
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4646 ;; separate statement, so the result will be 'previous if we've
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4647 ;; moved over any. If they were brace list initializers we might
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4648 ;; not have moved over a declaration boundary though, so change it
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4649 ;; to 'same if we've moved past a '=' before '{', but not ';'.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4650 ;; (This ought to be integrated into `c-beginning-of-statement-1',
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4651 ;; so we avoid this extra pass which potentially can search over a
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4652 ;; large amount of text.)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4653 (if (and (eq move 'previous)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4654 (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
4655 c++-template-syntax-table
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4656 (syntax-table))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4657 (save-excursion
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4658 (and (c-syntactic-re-search-forward "[;={]" start t t t)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4659 (eq (char-before) ?=)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4660 (c-syntactic-re-search-forward "[;{]" start t t)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4661 (eq (char-before) ?{)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4662 (c-safe (goto-char (c-up-list-forward (point))) t)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4663 (not (c-syntactic-re-search-forward ";" start t t))))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4664 (cons 'same nil)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4665 (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
4666
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
4667 (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
4668 ;; 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
4669 ;; 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
4670 ;; `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
4671 ;; 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
4672 ;; 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
4673 ;; 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
4674 ;; 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
4675 ;; `c-end-of-macro' instead in those cases.
30403
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
4676 (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
4677 (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
4678 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
4679 (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
4680 (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
4681 (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
4682
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
4683 (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
4684 (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
4685 (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
4686 ;; 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
4687 ;; 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
4688 ;; `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
4689 ;; start.
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4690 (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
4691
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
4692 (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
4693 ;; 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
4694 (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
4695 (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
4696 (error (goto-char (point-max))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4697 (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
4698 (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
4699 (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
4700 (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
4701 (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
4702 (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
4703 (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
4704 ;; 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
4705 ;; 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
4706 (c-syntactic-re-search-forward
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4707 (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
4708 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
4709 "\\)")
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4710 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
4711 (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
4712 (not (eq (char-before) ?_))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4713 ;; 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
4714 ;; the block.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4715 (c-syntactic-re-search-forward "[;=\(\[{]"
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4716 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
4717 (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
4718 ;; 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
4719 ;; `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
4720 ;; 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
4721 (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
4722
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
4723 (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
4724 (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
4725 (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
4726 (throw 'return t))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4727 (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
4728 nil)))
30403
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
4729
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
4730 (defun c-beginning-of-member-init-list (&optional limit)
53073
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
4731 ;; Go to the beginning of a member init list (i.e. just after the
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4732 ;; ':') if inside one. Returns t in that case, nil otherwise.
30403
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
4733 (or limit
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
4734 (setq limit (point-min)))
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
4735 (skip-chars-forward " \t")
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4736
30403
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
4737 (if (eq (char-after) ?,)
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
4738 (forward-char 1)
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
4739 (c-backward-syntactic-ws limit))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4740
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4741 (catch 'exit
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4742 (while (and (< limit (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4743 (eq (char-before) ?,))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4744
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4745 ;; this will catch member inits with multiple
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4746 ;; line arglists
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4747 (forward-char -1)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4748 (c-backward-syntactic-ws limit)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4749 (if (eq (char-before) ?\))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4750 (unless (c-safe (c-backward-sexp 1))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4751 (throw 'exit nil)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4752 (c-backward-syntactic-ws limit)
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 ;; Skip over any template arg to the class. This way with a
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4755 ;; syntax table is bogus but it'll have to do for now.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4756 (if (and (eq (char-before) ?>)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4757 (c-major-mode-is 'c++-mode))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4758 (c-with-syntax-table c++-template-syntax-table
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4759 (unless (c-safe (c-backward-sexp 1))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4760 (throw 'exit nil))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4761 (c-safe (c-backward-sexp 1))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4762 (c-backward-syntactic-ws limit)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4763
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4764 ;; Skip backwards over a fully::qualified::name.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4765 (while (and (eq (char-before) ?:)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4766 (save-excursion
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4767 (forward-char -1)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4768 (eq (char-before) ?:)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4769 (backward-char 2)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4770 (c-safe (c-backward-sexp 1)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4771
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4772 ;; If we've stepped over a number then this is a bitfield.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4773 (when (and c-opt-bitfield-key
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4774 (looking-at "[0-9]"))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4775 (throw 'exit nil))
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 ;; now continue checking
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4778 (c-backward-syntactic-ws limit))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4779
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4780 (and (< limit (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4781 (eq (char-before) ?:))))
30403
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
4782
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
4783 (defun c-search-uplist-for-classkey (paren-state)
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4784 ;; search for the containing class, returning a 2 element vector if
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
4785 ;; found. aref 0 contains the bufpos of the boi of the class key
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
4786 ;; line, and aref 1 contains the bufpos of the open brace.
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
4787 (if (null 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
4788 ;; no paren-state means we cannot be inside a class
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4789 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
4790 (let ((carcache (car paren-state))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4791 search-start search-end)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4792 (if (consp carcache)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4793 ;; a cons cell in the first element means that there is some
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4794 ;; balanced sexp before the current bufpos. this we can
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4795 ;; ignore. the nth 1 and nth 2 elements define for us the
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4796 ;; search boundaries
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
4797 (setq search-start (nth 2 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
4798 search-end (nth 1 paren-state))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4799 ;; if the car was not a cons cell then nth 0 and nth 1 define
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4800 ;; for us the search boundaries
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
4801 (setq search-start (nth 1 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
4802 search-end (nth 0 paren-state)))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4803 ;; if search-end is nil, or if the search-end character isn't an
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4804 ;; open brace, we are definitely not in a class
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4805 (if (or (not search-end)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4806 (< search-end (point-min))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4807 (not (eq (char-after search-end) ?{)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4808 nil
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4809 ;; now, we need to look more closely at search-start. if
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4810 ;; search-start is nil, then our start boundary is really
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4811 ;; point-min.
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4812 (if (not search-start)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4813 (setq search-start (point-min))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4814 ;; if search-start is a cons cell, then we can start
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4815 ;; searching from the end of the balanced sexp just ahead of
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4816 ;; us
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4817 (if (consp search-start)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4818 (setq search-start (cdr search-start))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4819 ;; Otherwise we start searching within the surrounding paren sexp.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4820 (setq search-start (1+ search-start))))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4821 ;; now we can do a quick regexp search from search-start to
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4822 ;; search-end and see if we can find a class key. watch for
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4823 ;; class like strings in literals
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4824 (save-excursion
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4825 (save-restriction
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4826 (goto-char search-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
4827 (let (foundp class match-end)
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4828 (while (and (not foundp)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4829 (progn
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
4830 (c-forward-syntactic-ws search-end)
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4831 (> search-end (point)))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4832 ;; Add one to the search limit, to allow
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4833 ;; matching of the "{" in the regexp.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4834 (re-search-forward c-decl-block-key
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4835 (1+ search-end)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4836 t))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4837 (setq class (match-beginning 0)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4838 match-end (match-end 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
4839 (goto-char class)
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4840 (if (c-in-literal search-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
4841 (goto-char match-end) ; its in a comment or string, ignore
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
4842 (c-skip-ws-forward)
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4843 (setq foundp (vector (c-point 'boi) search-end))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4844 (cond
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4845 ;; check for embedded keywords
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4846 ((let ((char (char-after (1- class))))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4847 (and char
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4848 (memq (char-syntax char) '(?w ?_))))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4849 (goto-char match-end)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4850 (setq foundp nil))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4851 ;; make sure we're really looking at the start 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
4852 ;; class definition, and not an ObjC method.
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
4853 ((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
4854 (re-search-forward c-opt-method-key search-end t)
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
4855 (not (c-in-literal class)))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4856 (setq foundp nil))
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
4857 ;; Check if this is an anonymous inner class.
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
4858 ((and c-opt-inexpr-class-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
4859 (looking-at c-opt-inexpr-class-key))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4860 (while (and (zerop (c-forward-token-2 1 t))
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
4861 (looking-at "(\\|\\w\\|\\s_\\|\\.")))
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
4862 (if (eq (point) search-end)
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
4863 ;; We're done. Just trap this case in the cond.
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
4864 nil
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
4865 ;; False alarm; all conditions aren't satisfied.
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
4866 (setq foundp nil)))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4867 ;; Its impossible to define a regexp for this, and
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4868 ;; nearly so to do it programmatically.
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4869 ;;
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4870 ;; ; picks up forward decls
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4871 ;; = picks up init lists
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4872 ;; ) picks up return types
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4873 ;; > picks up templates, but remember that we can
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4874 ;; inherit from templates!
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4875 ((let ((skipchars "^;=)"))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4876 ;; try to see if we found the `class' keyword
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4877 ;; inside a template arg list
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4878 (save-excursion
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4879 (skip-chars-backward "^<>" search-start)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4880 (if (eq (char-before) ?<)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4881 (setq skipchars (concat skipchars ">"))))
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
4882 (while (progn
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
4883 (skip-chars-forward skipchars search-end)
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
4884 (c-in-literal class))
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
4885 (forward-char))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4886 (/= (point) search-end))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4887 (setq foundp nil))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4888 )))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4889 foundp))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4890 )))))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4891
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
4892 (defun c-inside-bracelist-p (containing-sexp paren-state)
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4893 ;; return the buffer position of the beginning of the brace list
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4894 ;; statement if we're inside a brace list, otherwise return nil.
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4895 ;; CONTAINING-SEXP is the buffer pos of the innermost containing
36920
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
4896 ;; paren. BRACE-STATE is the remainder of the state of enclosing
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
4897 ;; braces
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4898 ;;
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4899 ;; N.B.: This algorithm can potentially get confused by cpp macros
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4900 ;; places in inconvenient locations. Its a trade-off we make for
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4901 ;; speed.
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4902 (or
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4903 ;; 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
4904 (c-safe
5e5fa0a34cb0 (c-inside-bracelist-p): Fix for enum test.
Richard M. Stallman <rms@gnu.org>
parents: 20914
diff changeset
4905 (save-excursion
5e5fa0a34cb0 (c-inside-bracelist-p): Fix for enum test.
Richard M. Stallman <rms@gnu.org>
parents: 20914
diff changeset
4906 (goto-char containing-sexp)
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
4907 (c-forward-sexp -1)
21106
5e5fa0a34cb0 (c-inside-bracelist-p): Fix for enum test.
Richard M. Stallman <rms@gnu.org>
parents: 20914
diff changeset
4908 (let (bracepos)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4909 (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
4910 (progn (c-forward-sexp -1)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4911 (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
4912 (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
4913 (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
4914 (- bracepos 2))))
5e5fa0a34cb0 (c-inside-bracelist-p): Fix for enum test.
Richard M. Stallman <rms@gnu.org>
parents: 20914
diff changeset
4915 (point)))))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4916 ;; 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
4917 (save-excursion
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
4918 (let ((class-key
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
4919 ;; 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
4920 ;; check for the class key here.
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
4921 (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
4922 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
4923 bufpos braceassignp lim next-containing)
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4924 (while (and (not bufpos)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4925 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
4926 (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
4927 (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
4928 (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
4929 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
4930 (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
4931 (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
4932 (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
4933 paren-state (cdr paren-state))))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4934 (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
4935 (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
4936 ;; 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
4937 ;; 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
4938 ;; 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
4939 ;; 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
4940 (setq containing-sexp nil)
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
4941 ;; 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
4942 ;; 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
4943 (setq braceassignp 'dontknow)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4944 (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
4945 ;; 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
4946 (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
4947 (eq (char-after) ?\[))
1dc57e616e8d (c-inside-bracelist-p): Tighter test for
Richard M. Stallman <rms@gnu.org>
parents: 24335
diff changeset
4948 ;; 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
4949 ;; 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
4950 ;; earlier.
1dc57e616e8d (c-inside-bracelist-p): Tighter test for
Richard M. Stallman <rms@gnu.org>
parents: 24335
diff changeset
4951 (while (eq braceassignp 'dontknow)
1dc57e616e8d (c-inside-bracelist-p): Tighter test for
Richard M. Stallman <rms@gnu.org>
parents: 24335
diff changeset
4952 (setq braceassignp
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4953 (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
4954 ((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
4955 ((looking-at "\\sw\\|\\s_\\|[.[]")
1dc57e616e8d (c-inside-bracelist-p): Tighter test for
Richard M. Stallman <rms@gnu.org>
parents: 24335
diff changeset
4956 ;; 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
4957 ;; identifier (may contain "." in Java)
1dc57e616e8d (c-inside-bracelist-p): Tighter test for
Richard M. Stallman <rms@gnu.org>
parents: 24335
diff changeset
4958 ;; or another "[]" sexp.
1dc57e616e8d (c-inside-bracelist-p): Tighter test for
Richard M. Stallman <rms@gnu.org>
parents: 24335
diff changeset
4959 'dontknow)
1dc57e616e8d (c-inside-bracelist-p): Tighter test for
Richard M. Stallman <rms@gnu.org>
parents: 24335
diff changeset
4960 (t nil)))))
1dc57e616e8d (c-inside-bracelist-p): Tighter test for
Richard M. Stallman <rms@gnu.org>
parents: 24335
diff changeset
4961 ;; 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
4962 ;; beginning of the statement.
1dc57e616e8d (c-inside-bracelist-p): Tighter test for
Richard M. Stallman <rms@gnu.org>
parents: 24335
diff changeset
4963 (while (eq braceassignp 'dontknow)
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
4964 (cond ((eq (char-after) ?\;)
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
4965 (setq braceassignp nil))
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
4966 ((and class-key
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
4967 (looking-at class-key))
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
4968 (setq braceassignp nil))
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
4969 ((eq (char-after) ?=)
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
4970 ;; 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
4971 ;; 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
4972 (setq braceassignp 'maybe)
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
4973 (while (and (eq braceassignp 'maybe)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
4974 (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
4975 (setq braceassignp
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
4976 (cond
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
4977 ;; Check 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
4978 ((looking-at "operator\\>[^_]") nil)
36920
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
4979 ;; Check for `<opchar>= in Pike.
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
4980 ((and (c-major-mode-is 'pike-mode)
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
4981 (or (eq (char-after) ?`)
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
4982 ;; Special case for Pikes
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
4983 ;; `[]=, since '[' is not in
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
4984 ;; the punctuation class.
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
4985 (and (eq (char-after) ?\[)
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
4986 (eq (char-before) ?`))))
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
4987 nil)
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
4988 ((looking-at "\\s.") 'maybe)
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
4989 ;; 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
4990 ;; 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
4991 ((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
4992 (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
4993 (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
4994 (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
4995 (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
4996 (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
4997 (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
4998 (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
4999 (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
5000 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
5001 (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
5002 ))))
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
5003 nil)
25178
1dc57e616e8d (c-inside-bracelist-p): Tighter test for
Richard M. Stallman <rms@gnu.org>
parents: 24335
diff changeset
5004 (t t))))))
1dc57e616e8d (c-inside-bracelist-p): Tighter test for
Richard M. Stallman <rms@gnu.org>
parents: 24335
diff changeset
5005 (if (and (eq braceassignp 'dontknow)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5006 (/= (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
5007 (setq braceassignp nil)))
1dc57e616e8d (c-inside-bracelist-p): Tighter test for
Richard M. Stallman <rms@gnu.org>
parents: 24335
diff changeset
5008 (if (not braceassignp)
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
5009 (if (eq (char-after) ?\;)
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
5010 ;; 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
5011 (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
5012 ;; 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
5013 (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
5014 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
5015 next-containing nil))
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
5016 ;; 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
5017 (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
5018 (c-most-enclosing-brace paren-state))
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
5019 (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
5020 )
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5021 bufpos))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5022 ))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5023
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
5024 (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
5025 ;; 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
5026 ;; `([ ])', `(< >)' 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
5027 ;; 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
5028 ;; 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
5029 ;; 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
5030 ;; 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
5031 ;; 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
5032 ;; 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
5033 ;; a special brace list).
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
5034 (if c-special-brace-lists
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
5035 (condition-case ()
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
5036 (save-excursion
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
5037 (let ((beg (point))
56646
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
5038 inner-beg end type)
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
5039 (c-forward-syntactic-ws)
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
5040 (if (eq (char-after) ?\()
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
5041 (progn
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
5042 (forward-char 1)
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
5043 (c-forward-syntactic-ws)
56646
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
5044 (setq inner-beg (point))
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
5045 (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
5046 (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
5047 (progn
56646
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
5048 (setq inner-beg (point))
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
5049 (c-backward-syntactic-ws)
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
5050 (forward-char -1)
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
5051 (setq beg (if (eq (char-after) ?\()
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
5052 (point)
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
5053 nil)))))
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
5054 (if (and beg type)
56646
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
5055 (if (and (c-safe
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
5056 (goto-char beg)
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
5057 (c-forward-sexp 1)
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
5058 (setq end (point))
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
5059 (= (char-before) ?\)))
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
5060 (c-safe
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
5061 (goto-char inner-beg)
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
5062 (if (looking-at "\\s(")
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
5063 ;; Check balancing of the inner paren
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
5064 ;; below.
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
5065 (progn
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
5066 (c-forward-sexp 1)
56646
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
5067 t)
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
5068 ;; 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
5069 ;; 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
5070 ;; check the char before the outer
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
5071 ;; closing paren.
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
5072 (goto-char end)
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
5073 (backward-char)
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
5074 (c-backward-syntactic-ws)
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
5075 (= (char-before) (cdr type)))))
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
5076 (if (or (/= (char-syntax (char-before)) ?\))
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
5077 (= (progn
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
5078 (c-forward-syntactic-ws)
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
5079 (point))
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
5080 (1- end)))
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
5081 (cons (cons beg end) type))
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
5082 (cons (list beg) type)))))
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
5083 (error nil))))
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
5084
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5085 (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
5086 ;; 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
5087 ;; point is not inside a literal or comment.
30403
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
5088 (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
5089 (c-backward-syntactic-ws lim)
30403
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
5090 (or (bobp)
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5091 ;; Return t if at the start inside some parenthesis expression
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5092 ;; too, to catch macros that have statements as arguments.
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5093 (memq (char-before) '(?\; ?} ?\())
30403
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
5094 (and (eq (char-before) ?{)
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
5095 (not (and c-special-brace-lists
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
5096 (progn (backward-char)
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
5097 (c-looking-at-special-brace-list))))))))
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
5098
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5099 (defun c-looking-at-inexpr-block (lim containing-sexp)
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
5100 ;; Returns non-nil if we're looking at the beginning of a block
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
5101 ;; 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
5102 ;; either 'inlambda, 'inexpr-statement or 'inexpr-class and the
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
5103 ;; position of the beginning of the construct. LIM limits 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
5104 ;; backward search. CONTAINING-SEXP is the start position 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
5105 ;; closest containing list. If it's nil, the containing paren isn'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
5106 ;; used to decide whether we're inside an expression or not. 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
5107 ;; both LIM and CONTAINING-SEXP is used, LIM needs to be farther
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5108 ;; back.
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
5109 (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
5110 (let ((res 'maybe) passed-bracket
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5111 (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
5112 ;; 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
5113 ;; 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
5114 (block-follows (and (eq (char-after) ?{) (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
5115 (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
5116 (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
5117 (> (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
5118 (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
5119 (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
5120 (looking-at "[\]\).]\\|\\w\\|\\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
5121 (progn (forward-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
5122 (goto-char (scan-sexps (point) -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
5123 (setq res
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5124 (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
5125 ((and block-follows
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5126 c-opt-inexpr-class-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
5127 (looking-at c-opt-inexpr-class-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
5128 (and (not passed-bracket)
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5129 (or (not (looking-at c-class-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
5130 ;; If the class definition is at the start 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
5131 ;; a statement, we don't consider it an
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5132 ;; in-expression 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
5133 (let ((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
5134 (while (and
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5135 (= (c-backward-token-2 1 nil closest-lim) 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
5136 (eq (char-syntax (char-after)) ?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
5137 (setq 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
5138 (goto-char prev)
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5139 (not (c-looking-at-bos)))
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5140 ;; Also, in Pike we treat it as an
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5141 ;; in-expression class if it's used in an
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5142 ;; object clone expression.
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5143 (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
5144 (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
5145 (progn (goto-char block-follows)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5146 (zerop (c-forward-token-2 1 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
5147 (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
5148 (cons 'inexpr-class (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
5149 ((and c-opt-inexpr-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
5150 (looking-at c-opt-inexpr-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
5151 (cons 'inexpr-statement (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
5152 ((and c-opt-lambda-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
5153 (looking-at c-opt-lambda-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
5154 (cons 'inlambda (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
5155 ((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
5156 (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
5157 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
5158 (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
5159 (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
5160 (setq passed-bracket 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
5161 '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
5162 (if (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
5163 (when (and block-follows
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5164 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
5165 (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
5166 (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
5167 (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
5168 (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
5169 (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
5170 (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
5171 (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
5172 (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
5173 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
5174 (cons 'inexpr-statement (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
5175 res))))
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
5176
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5177 (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
5178 ;; 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
5179 ;; 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
5180 ;; PAREN-STATE is the paren state relevant at the current position.
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
5181 (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
5182 ;; 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
5183 (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
5184 (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
5185 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
5186 (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
5187 (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
5188 (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
5189 (= (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
5190 (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
5191 (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
5192 (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
5193 (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
5194 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
5195 containing-sexp)))))
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
5196
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5197 (defun c-narrow-out-enclosing-class (paren-state 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
5198 ;; Narrow the buffer so that the enclosing class is hidden. Uses
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5199 ;; and returns the value from c-search-uplist-for-classkey.
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5200 (setq paren-state (c-whack-state-after (point) paren-state))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5201 (let (inclass-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
5202 (and 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
5203 (setq inclass-p (c-search-uplist-for-classkey paren-state))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5204 (narrow-to-region
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5205 (progn
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5206 (goto-char (1+ (aref inclass-p 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
5207 (c-skip-ws-forward lim)
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5208 ;; if point is now left of the class opening brace, we're
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5209 ;; hosed, so try a different tact
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5210 (if (<= (point) (aref inclass-p 1))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5211 (progn
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5212 (goto-char (1+ (aref inclass-p 1)))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5213 (c-forward-syntactic-ws lim)))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5214 (point))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5215 ;; end point is the end of the current line
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5216 (progn
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5217 (goto-char lim)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5218 (c-point 'eol))))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5219 ;; return the class vector
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5220 inclass-p))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5221
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5222
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5223 ;; `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
5224 ;; 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
5225 ;; 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
5226
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5227 ;; 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
5228 ;; auto newline analysis.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5229 (defvar c-auto-newline-analysis nil)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5230
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5231 (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
5232 ;; 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
5233 ;; `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
5234 ;; 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
5235 ;; 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
5236 (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
5237 c-syntactic-context)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5238
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5239 (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
5240 ;; 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
5241 ;; (Normally not necessary.)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5242 (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
5243 (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
5244
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5245 (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
5246 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
5247 stop-at-boi-only
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5248 at-block-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
5249 containing-sexp
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5250 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
5251 ;; 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
5252 ;; 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
5253 ;; 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
5254 ;; 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
5255 ;; 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
5256 ;;
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5257 ;; 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
5258 ;; 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
5259 ;; 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
5260 ;; 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
5261 ;;
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5262 ;; 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
5263 ;; 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
5264 ;;
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5265 ;; If STOP-AT-BOI-ONLY is nil, we might stop in the middle 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
5266 ;; line if another statement precedes the current one on this 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
5267 ;;
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5268 ;; If AT-BLOCK-START is non-nil, point is taken to be 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
5269 ;; beginning of a block or brace list, which then might be nested
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5270 ;; inside an expression. If AT-BLOCK-START is nil, this is found
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5271 ;; out by checking whether the character at point is "{" or 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
5272 (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
5273 ;; 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
5274 ;; treatment.
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5275 (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
5276
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5277 (let ((savepos (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5278 (syntax-last c-syntactic-context)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5279 (boi (c-point 'boi))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5280 (prev-paren (if at-block-start ?{ (char-after)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5281 step-type step-tmp at-comment special-list)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5282 (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
5283
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5284 ;; Begin by skipping any labels and containing statements 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
5285 ;; are on the same 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
5286 (while (and (/= (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
5287 (if (memq (setq step-tmp
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5288 (c-beginning-of-statement-1 boi 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
5289 '(up 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
5290 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
5291 (goto-char savepos)
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5292 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
5293 (/= (point) savepos))
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5294 (setq savepos (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
5295 step-type step-tmp))
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5296
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
5297 (catch 'done
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5298 ;; Loop if we have to back out of the containing 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
5299 (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
5300 (progn
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5301
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5302 ;; Loop if we have to back up another 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
5303 (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
5304 (progn
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
5305
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5306 ;; Always start by skipping over any comments 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
5307 ;; stands between the statement and 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
5308 (while (and (/= (setq savepos (point)) boi)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5309 (c-backward-single-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
5310 (setq at-comment 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
5311 boi (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
5312 (goto-char savepos)
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
5313
17fef404cef1 (c-add-stmt-syntax): Fixed some cases of wrong anchoring, e.g. for
Martin Stjernholm <mast@lysator.liu.se>
parents: 45049
diff changeset
5314 (and
17fef404cef1 (c-add-stmt-syntax): Fixed some cases of wrong anchoring, e.g. for
Martin Stjernholm <mast@lysator.liu.se>
parents: 45049
diff changeset
5315 (or at-comment
17fef404cef1 (c-add-stmt-syntax): Fixed some cases of wrong anchoring, e.g. for
Martin Stjernholm <mast@lysator.liu.se>
parents: 45049
diff changeset
5316 (eq step-type 'label)
17fef404cef1 (c-add-stmt-syntax): Fixed some cases of wrong anchoring, e.g. for
Martin Stjernholm <mast@lysator.liu.se>
parents: 45049
diff changeset
5317 (/= savepos boi))
17fef404cef1 (c-add-stmt-syntax): Fixed some cases of wrong anchoring, e.g. for
Martin Stjernholm <mast@lysator.liu.se>
parents: 45049
diff changeset
5318
53073
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
5319 (let ((save-step-type step-type))
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
5320 ;; Current position might not be good enough;
17fef404cef1 (c-add-stmt-syntax): Fixed some cases of wrong anchoring, e.g. for
Martin Stjernholm <mast@lysator.liu.se>
parents: 45049
diff changeset
5321 ;; skip backward another statement.
17fef404cef1 (c-add-stmt-syntax): Fixed some cases of wrong anchoring, e.g. for
Martin Stjernholm <mast@lysator.liu.se>
parents: 45049
diff changeset
5322 (setq step-type (c-beginning-of-statement-1
17fef404cef1 (c-add-stmt-syntax): Fixed some cases of wrong anchoring, e.g. for
Martin Stjernholm <mast@lysator.liu.se>
parents: 45049
diff changeset
5323 containing-sexp))
17fef404cef1 (c-add-stmt-syntax): Fixed some cases of wrong anchoring, e.g. for
Martin Stjernholm <mast@lysator.liu.se>
parents: 45049
diff changeset
5324
17fef404cef1 (c-add-stmt-syntax): Fixed some cases of wrong anchoring, e.g. for
Martin Stjernholm <mast@lysator.liu.se>
parents: 45049
diff changeset
5325 (if (and (not stop-at-boi-only)
17fef404cef1 (c-add-stmt-syntax): Fixed some cases of wrong anchoring, e.g. for
Martin Stjernholm <mast@lysator.liu.se>
parents: 45049
diff changeset
5326 (/= savepos boi)
17fef404cef1 (c-add-stmt-syntax): Fixed some cases of wrong anchoring, e.g. for
Martin Stjernholm <mast@lysator.liu.se>
parents: 45049
diff changeset
5327 (memq step-type '(up previous)))
17fef404cef1 (c-add-stmt-syntax): Fixed some cases of wrong anchoring, e.g. for
Martin Stjernholm <mast@lysator.liu.se>
parents: 45049
diff changeset
5328 ;; If stop-at-boi-only is nil, we shouldn't
17fef404cef1 (c-add-stmt-syntax): Fixed some cases of wrong anchoring, e.g. for
Martin Stjernholm <mast@lysator.liu.se>
parents: 45049
diff changeset
5329 ;; back up over previous or containing
17fef404cef1 (c-add-stmt-syntax): Fixed some cases of wrong anchoring, e.g. for
Martin Stjernholm <mast@lysator.liu.se>
parents: 45049
diff changeset
5330 ;; statements to try to reach boi, so go
17fef404cef1 (c-add-stmt-syntax): Fixed some cases of wrong anchoring, e.g. for
Martin Stjernholm <mast@lysator.liu.se>
parents: 45049
diff changeset
5331 ;; back to the last position and exit.
17fef404cef1 (c-add-stmt-syntax): Fixed some cases of wrong anchoring, e.g. for
Martin Stjernholm <mast@lysator.liu.se>
parents: 45049
diff changeset
5332 (progn
17fef404cef1 (c-add-stmt-syntax): Fixed some cases of wrong anchoring, e.g. for
Martin Stjernholm <mast@lysator.liu.se>
parents: 45049
diff changeset
5333 (goto-char savepos)
17fef404cef1 (c-add-stmt-syntax): Fixed some cases of wrong anchoring, e.g. for
Martin Stjernholm <mast@lysator.liu.se>
parents: 45049
diff changeset
5334 nil)
17fef404cef1 (c-add-stmt-syntax): Fixed some cases of wrong anchoring, e.g. for
Martin Stjernholm <mast@lysator.liu.se>
parents: 45049
diff changeset
5335 (if (and (not stop-at-boi-only)
17fef404cef1 (c-add-stmt-syntax): Fixed some cases of wrong anchoring, e.g. for
Martin Stjernholm <mast@lysator.liu.se>
parents: 45049
diff changeset
5336 (memq step-type '(up previous beginning)))
17fef404cef1 (c-add-stmt-syntax): Fixed some cases of wrong anchoring, e.g. for
Martin Stjernholm <mast@lysator.liu.se>
parents: 45049
diff changeset
5337 ;; If we've moved into another statement
17fef404cef1 (c-add-stmt-syntax): Fixed some cases of wrong anchoring, e.g. for
Martin Stjernholm <mast@lysator.liu.se>
parents: 45049
diff changeset
5338 ;; then we should no longer try to stop
17fef404cef1 (c-add-stmt-syntax): Fixed some cases of wrong anchoring, e.g. for
Martin Stjernholm <mast@lysator.liu.se>
parents: 45049
diff changeset
5339 ;; after boi.
17fef404cef1 (c-add-stmt-syntax): Fixed some cases of wrong anchoring, e.g. for
Martin Stjernholm <mast@lysator.liu.se>
parents: 45049
diff changeset
5340 (setq stop-at-boi-only t))
17fef404cef1 (c-add-stmt-syntax): Fixed some cases of wrong anchoring, e.g. for
Martin Stjernholm <mast@lysator.liu.se>
parents: 45049
diff changeset
5341
17fef404cef1 (c-add-stmt-syntax): Fixed some cases of wrong anchoring, e.g. for
Martin Stjernholm <mast@lysator.liu.se>
parents: 45049
diff changeset
5342 ;; Record this a substatement if we skipped up
17fef404cef1 (c-add-stmt-syntax): Fixed some cases of wrong anchoring, e.g. for
Martin Stjernholm <mast@lysator.liu.se>
parents: 45049
diff changeset
5343 ;; one level, but not if we're still on the
17fef404cef1 (c-add-stmt-syntax): Fixed some cases of wrong anchoring, e.g. for
Martin Stjernholm <mast@lysator.liu.se>
parents: 45049
diff changeset
5344 ;; same line. This so e.g. a sequence of "else
17fef404cef1 (c-add-stmt-syntax): Fixed some cases of wrong anchoring, e.g. for
Martin Stjernholm <mast@lysator.liu.se>
parents: 45049
diff changeset
5345 ;; if" clauses won't indent deeper and deeper.
17fef404cef1 (c-add-stmt-syntax): Fixed some cases of wrong anchoring, e.g. for
Martin Stjernholm <mast@lysator.liu.se>
parents: 45049
diff changeset
5346 (when (and (eq step-type 'up)
17fef404cef1 (c-add-stmt-syntax): Fixed some cases of wrong anchoring, e.g. for
Martin Stjernholm <mast@lysator.liu.se>
parents: 45049
diff changeset
5347 (< (point) boi))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5348 (c-add-syntax 'substatement nil))
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
5349
17fef404cef1 (c-add-stmt-syntax): Fixed some cases of wrong anchoring, e.g. for
Martin Stjernholm <mast@lysator.liu.se>
parents: 45049
diff changeset
5350 (setq boi (c-point 'boi))
53073
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
5351 (if (= (point) savepos)
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
5352 (progn
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
5353 (setq step-type save-step-type)
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
5354 nil)
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
5355 t)))))
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
5356
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5357 (setq savepos (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
5358 at-comment 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
5359 (setq at-comment 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
5360
53073
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
5361 (when (and containing-sexp
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
5362 (if (memq step-type '(nil same))
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
5363 (/= (point) boi)
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
5364 (eq step-type 'label)))
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5365 (goto-char containing-sexp)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5366
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5367 ;; Don't stop in the middle of a special brace list opener
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5368 ;; like "({".
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5369 (when (and c-special-brace-lists
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5370 (setq special-list
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5371 (c-looking-at-special-brace-list)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5372 (setq containing-sexp (car (car special-list)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5373 (goto-char containing-sexp))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5374
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5375 (setq paren-state (c-whack-state-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
5376 paren-state)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5377 containing-sexp (c-most-enclosing-brace paren-state)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5378 savepos (point)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5379 boi (c-point 'boi))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5380
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5381 (if (eq (setq prev-paren (char-after)) ?\()
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5382 (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5383 (c-backward-syntactic-ws containing-sexp)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5384 (when (/= savepos boi)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5385 (if (and (or (not (looking-at "\\>"))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5386 (not (c-on-identifier)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5387 (not special-list)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5388 (save-excursion
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5389 (c-forward-syntactic-ws)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5390 (forward-char)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5391 (c-forward-syntactic-ws)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5392 (eq (char-after) ?{)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5393 ;; We're in an in-expression statement.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5394 ;; This syntactic element won't get an anchor pos.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5395 (c-add-syntax 'inexpr-statement)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5396 (c-add-syntax 'arglist-cont-nonempty nil savepos)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5397 (goto-char (max boi
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5398 (if containing-sexp
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5399 (1+ containing-sexp)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5400 (point-min))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5401 (setq step-type 'same))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5402 (setq step-type
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5403 (c-beginning-of-statement-1 containing-sexp)))
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5404
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5405 (let ((at-bod (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
5406 (/= savepos (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
5407 (eq prev-paren ?{))))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5408
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5409 (when (= savepos 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
5410 ;; If the open brace was at boi, we're always
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5411 ;; done. The c-beginning-of-statement-1 call
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5412 ;; above is necessary anyway, to decide the 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
5413 ;; of block-intro to add.
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5414 (goto-char savepos)
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5415 (setq savepos 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
5416
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5417 (when (eq prev-paren ?{)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5418 (c-add-syntax (if at-bod
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5419 'defun-block-intro
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5420 'statement-block-intro)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5421 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
5422
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5423 (when (and (not at-bod) savepos)
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5424 ;; Loop if the brace wasn't at boi, and we didn'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
5425 ;; arrive at a defun 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
5426 (if (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
5427 ;; Avoid backing up another sexp if the 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
5428 ;; we're at now is found to be good enough 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
5429 ;; the loop above.
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5430 (setq step-type nil))
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
5431 (if (and (not stop-at-boi-only)
17fef404cef1 (c-add-stmt-syntax): Fixed some cases of wrong anchoring, e.g. for
Martin Stjernholm <mast@lysator.liu.se>
parents: 45049
diff changeset
5432 (memq step-type '(up previous beginning)))
17fef404cef1 (c-add-stmt-syntax): Fixed some cases of wrong anchoring, e.g. for
Martin Stjernholm <mast@lysator.liu.se>
parents: 45049
diff changeset
5433 (setq stop-at-boi-only t))
17fef404cef1 (c-add-stmt-syntax): Fixed some cases of wrong anchoring, e.g. for
Martin Stjernholm <mast@lysator.liu.se>
parents: 45049
diff changeset
5434 (setq boi (c-point 'boi)))))
17fef404cef1 (c-add-stmt-syntax): Fixed some cases of wrong anchoring, e.g. for
Martin Stjernholm <mast@lysator.liu.se>
parents: 45049
diff changeset
5435 )))
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5436
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5437 ;; 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
5438 ;; added above.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5439 (let ((p c-syntactic-context))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5440 (while (not (eq p syntax-last))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5441 (if (cdr (car p))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5442 (setcar (cdr (car p)) (point)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5443 (setq p (cdr p))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5444
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5445 )))
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5446
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5447 (defun c-add-class-syntax (symbol classkey 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
5448 ;; 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
5449 ;; 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
5450 ;; Therefore it's collected 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
5451 (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
5452 (widen)
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5453 (let (inexpr anchor 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
5454 (goto-char (aref classkey 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
5455 (if (and (eq symbol 'inclass) (= (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
5456 (c-add-syntax symbol (setq 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
5457 (c-add-syntax symbol (setq anchor (aref classkey 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
5458 (if (and c-opt-inexpr-class-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
5459 (setq containing-sexp (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
5460 (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
5461 inexpr (cdr (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
5462 (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
5463 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
5464 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
5465 (/= inexpr (c-point 'boi inexpr)))
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5466 (c-add-syntax '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
5467 anchor)))
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5468
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5469 (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
5470 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
5471 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
5472 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
5473 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
5474 ;; 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
5475 ;; 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
5476 ;; construct of some kind.
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5477
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5478 (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
5479 (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
5480 (skip-chars-forward " \t")
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5481
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5482 (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
5483 ;; (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
5484 ;; 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
5485 ((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
5486 (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
5487 (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
5488 (eq char-after-ip ?{)))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5489
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5490 (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
5491 ;; 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
5492 ((save-excursion
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5493 (skip-chars-forward "{")
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5494 (let ((decl (c-search-uplist-for-classkey (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
5495 (and decl
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5496 (setq beg-of-same-or-containing-stmt (aref decl 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
5497 ))
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5498 (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
5499
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5500 ;; 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
5501 ((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
5502 (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
5503 (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
5504 (c-syntactic-re-search-forward "=\\([^=]\\|$\\)"
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5505 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
5506 ;; 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
5507 ;; 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
5508 ;; 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
5509 ;; 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
5510 ;; 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
5511 ;; 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
5512 (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
5513 (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
5514 ;; 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
5515 ;; analyzing the nature of the brace
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5516 ;; for the auto newline feature.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5517 'brace-list-open
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5518 'statement-cont)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5519 nil nil nil
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5520 containing-sexp paren-state))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5521
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5522 ;; 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
5523 ;; 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
5524 ;; 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
5525 ;; C.f. cases E, 16F and 17G.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5526 ((and (not (c-looking-at-bos))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5527 (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
5528 'same)
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
5529 (save-excursion
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
5530 ;; Look for a type followed by a symbol, i.e. the start of a
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
5531 ;; function declaration. Doesn't work for declarations like
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
5532 ;; "int *foo() ..."; we'd need to refactor the more competent
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
5533 ;; analysis in `c-font-lock-declarations' for that.
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
5534 (and (c-forward-type)
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
5535 (progn
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
5536 (c-forward-syntactic-ws)
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
5537 (looking-at c-symbol-start)))))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5538 (c-add-stmt-syntax 'defun-open nil t nil
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5539 containing-sexp paren-state))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5540
53073
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
5541 ;; 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
5542 ;; 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
5543 ;; `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
5544 ;; 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
5545 ;; 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
5546 ;; 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
5547 (t
53073
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
5548 (c-add-stmt-syntax 'substatement-open nil nil nil
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
5549 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
5550 ))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5551
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5552 ;; 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
5553 ((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
5554 (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
5555 (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
5556 ;; 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
5557 ;; 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
5558 (when (c-syntactic-re-search-forward
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5559 "\\(<<\\|>>\\)\\([^=]\\|$\\)" 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
5560 (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
5561 t))))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5562
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5563 ;; 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
5564 ;; 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
5565 ((and (save-excursion
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5566 ;; 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
5567 ;; 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
5568 ;; 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
5569 ;; declarations or throws clauses there.
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5570 ;;
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5571 ;; 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
5572 ;; 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
5573 ;; 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
5574 ;; 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
5575 ;; 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
5576 (c-forward-syntactic-ws)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5577 (eq (char-after) ?{))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5578 (not (c-looking-at-bos))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5579 (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
5580 'same)
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
5581 (save-excursion
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
5582 ;; Look for a type followed by a symbol, i.e. the start of a
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
5583 ;; function declaration. Doesn't work for declarations like "int
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
5584 ;; *foo() ..."; we'd need to refactor the more competent analysis
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
5585 ;; in `c-font-lock-declarations' for that.
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
5586 (and (c-forward-type)
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
5587 (progn
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
5588 (c-forward-syntactic-ws)
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
5589 (looking-at c-symbol-start)))))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5590 (c-add-stmt-syntax 'func-decl-cont nil t nil
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5591 containing-sexp paren-state))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5592
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5593 ;; 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
5594 (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
5595 (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
5596 (c-add-stmt-syntax 'statement-cont nil nil nil
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5597 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
5598 )))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5599
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5600 (defun c-guess-basic-syntax ()
51829
d508ffa43505 2003-07-08 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents: 51714
diff changeset
5601 "Return the syntactic context of the current line.
d508ffa43505 2003-07-08 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents: 51714
diff changeset
5602 This function does not do any hidden buffer changes."
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5603 (save-excursion
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5604 (save-restriction
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5605 (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
5606 (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
5607 ((indent-point (point))
d508ffa43505 2003-07-08 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents: 51714
diff changeset
5608 (case-fold-search nil)
d508ffa43505 2003-07-08 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents: 51714
diff changeset
5609 (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
5610 literal containing-sexp char-before-ip char-after-ip lim
d508ffa43505 2003-07-08 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents: 51714
diff changeset
5611 c-syntactic-context placeholder c-in-literal-cache step-type
d508ffa43505 2003-07-08 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents: 51714
diff changeset
5612 tmpsymbol keyword injava-inher special-brace-list
d508ffa43505 2003-07-08 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents: 51714
diff changeset
5613 ;; narrow out any enclosing class or extern "C" block
d508ffa43505 2003-07-08 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents: 51714
diff changeset
5614 (inclass-p (c-narrow-out-enclosing-class paren-state
d508ffa43505 2003-07-08 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents: 51714
diff changeset
5615 indent-point))
d508ffa43505 2003-07-08 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents: 51714
diff changeset
5616 ;; `c-state-cache' is shadowed here so that we don't
d508ffa43505 2003-07-08 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents: 51714
diff changeset
5617 ;; throw it away due to the narrowing that might be done
d508ffa43505 2003-07-08 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents: 51714
diff changeset
5618 ;; by the function above. That means we must not do any
d508ffa43505 2003-07-08 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents: 51714
diff changeset
5619 ;; changes during the execution of this function, since
d508ffa43505 2003-07-08 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents: 51714
diff changeset
5620 ;; `c-invalidate-state-cache' then would change this local
d508ffa43505 2003-07-08 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents: 51714
diff changeset
5621 ;; variable and leave a bogus value in the global one.
d508ffa43505 2003-07-08 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents: 51714
diff changeset
5622 (c-state-cache (if inclass-p
d508ffa43505 2003-07-08 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents: 51714
diff changeset
5623 (c-whack-state-before (point-min) paren-state)
d508ffa43505 2003-07-08 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents: 51714
diff changeset
5624 paren-state))
d508ffa43505 2003-07-08 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents: 51714
diff changeset
5625 (c-state-cache-start (point-min))
d508ffa43505 2003-07-08 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents: 51714
diff changeset
5626 inenclosing-p macro-start in-macro-expr
d508ffa43505 2003-07-08 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents: 51714
diff changeset
5627 ;; There's always at most one syntactic element which got
d508ffa43505 2003-07-08 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents: 51714
diff changeset
5628 ;; a relpos. It's stored in syntactic-relpos.
d508ffa43505 2003-07-08 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents: 51714
diff changeset
5629 syntactic-relpos
d508ffa43505 2003-07-08 Martin Stjernholm <bug-cc-mode@gnu.org>
Martin Stjernholm <mast@lysator.liu.se>
parents: 51714
diff changeset
5630 (c-stmt-delim-chars c-stmt-delim-chars))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5631 ;; Check for meta top-level enclosing constructs such as
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5632 ;; extern language definitions.
20914
8f189ffad604 (c-forward-syntactic-ws, c-backward-syntactic-ws):
Richard M. Stallman <rms@gnu.org>
parents: 20142
diff changeset
5633 (save-excursion
8f189ffad604 (c-forward-syntactic-ws, c-backward-syntactic-ws):
Richard M. Stallman <rms@gnu.org>
parents: 20142
diff changeset
5634 (save-restriction
8f189ffad604 (c-forward-syntactic-ws, c-backward-syntactic-ws):
Richard M. Stallman <rms@gnu.org>
parents: 20142
diff changeset
5635 (widen)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5636 (when (and inclass-p
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5637 (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5638 (goto-char (aref inclass-p 0))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5639 (looking-at c-other-decl-block-key)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5640 (setq inenclosing-p (match-string 1))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5641 (if (string-equal inenclosing-p "extern")
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5642 ;; Compatibility with legacy choice of name for the
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5643 ;; extern-lang syntactic symbols.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5644 (setq inenclosing-p "extern-lang")))))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5645
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5646 ;; Init some position variables:
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5647 ;;
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5648 ;; containing-sexp is the open paren of the closest
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5649 ;; surrounding sexp or nil if there is none that hasn't been
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5650 ;; narrowed 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
5651 ;;
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5652 ;; lim is the position after the closest preceding brace 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
5653 ;; (nested sexps are ignored), or the position 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
5654 ;; containing-sexp if there is none, or (point-min) 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
5655 ;; containing-sexp is 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
5656 ;;
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5657 ;; c-state-cache is the state from c-parse-state 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
5658 ;; indent-point, without any parens outside the region
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5659 ;; narrowed by c-narrow-out-enclosing-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
5660 ;;
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5661 ;; paren-state is the state from c-parse-state outside
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5662 ;; containing-sexp, or at indent-point if containing-sexp 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
5663 ;; nil. paren-state is not limited to the narrowed region, as
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5664 ;; opposed to 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
5665 (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
5666 (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
5667 (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
5668 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
5669 (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
5670 (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
5671 (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
5672 (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
5673 ;; 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
5674 ;; 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
5675 (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
5676 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
5677 ;; 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
5678 ;; 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
5679 (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
5680 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
5681 (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
5682 (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
5683
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5684 ;; 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
5685 ;; "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
5686 ;; 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
5687 ;; 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
5688 ;; 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
5689 (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
5690 (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
5691 (setq c-stmt-delim-chars c-stmt-delim-chars-with-comma))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5692
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5693 ;; cache char before and after indent point, and move point to
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5694 ;; the most likely position to perform the majority of tests
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5695 (goto-char indent-point)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5696 (c-backward-syntactic-ws lim)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5697 (setq char-before-ip (char-before))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5698 (goto-char indent-point)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5699 (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
5700 (setq char-after-ip (char-after))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5701
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5702 ;; are we in a literal?
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5703 (setq literal (c-in-literal lim))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5704
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5705 ;; now figure out syntactic qualities of the current line
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5706 (cond
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5707 ;; 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
5708 ((eq literal 'string)
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5709 (c-add-syntax 'string (c-point 'bopl)))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5710 ;; 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
5711 ((and (memq literal '(c c++))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5712 ;; 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
5713 ;; `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
5714 ;; recognize "\*/" to end a block comment.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5715 ;; `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
5716 ;; `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
5717 ;; 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
5718 ;; `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
5719 ;; we're inside a comment.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5720 (setq placeholder (c-literal-limits lim)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5721 (c-add-syntax literal (car placeholder)))
30403
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
5722 ;; 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
5723 ((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
5724 (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
5725 (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
5726 (/= 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
5727 (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
5728 (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
5729 (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
5730 (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
5731 (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
5732 ;; 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
5733 ;; 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
5734 ;; 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
5735 ;; 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
5736 ;; 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
5737 ;; 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
5738 (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
5739 (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
5740 (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
5741 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
5742 (= (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
5743 (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
5744 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
5745 (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
5746 (setq macro-start 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
5747 ;; 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
5748 ((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
5749 (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
5750 (c-add-stmt-syntax 'else-clause nil t nil
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5751 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
5752 ;; 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
5753 ((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
5754 (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
5755 (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
5756 '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
5757 (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
5758 (goto-char placeholder)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5759 (c-add-stmt-syntax 'do-while-closure nil t nil
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5760 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
5761 ;; 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
5762 ;; 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
5763 ;; 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
5764 ((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
5765 (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
5766 (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
5767 ((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
5768 (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
5769 (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
5770 (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
5771 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
5772 (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
5773 (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
5774 (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
5775 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
5776 (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
5777 (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
5778 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
5779 (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
5780 (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
5781 (goto-char placeholder)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5782 (c-add-stmt-syntax 'catch-clause nil t nil
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5783 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
5784 ;; 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
5785 ((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
5786 (and c-opt-block-stmt-key
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5787 (if (c-mode-is-new-awk-p)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5788 (c-awk-prev-line-incomplete-p containing-sexp) ; ACM 2002/3/29
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5789 (not (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
5790 (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
5791 (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
5792 (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
5793 (> (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
5794 (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
5795 ;; 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
5796 ;; 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
5797 (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
5798 (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
5799 (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
5800 '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
5801 (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
5802 (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
5803 (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
5804 (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
5805 (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
5806 ;; 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
5807 ;; 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
5808 (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
5809 (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
5810 (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
5811 (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
5812 '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
5813 (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
5814 (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
5815 ;; 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
5816 (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
5817 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
5818 (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
5819 ;; 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
5820 ;; 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
5821 ;; 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
5822 ;; modifier.
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5823 (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
5824 (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
5825 (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
5826 (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
5827 ;; 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
5828 (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
5829 (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
5830 (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
5831 ((eq char-after-ip ?{)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5832 (c-add-stmt-syntax 'substatement-open nil 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
5833 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
5834 ((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
5835 (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
5836 (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
5837 (looking-at c-label-key))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5838 (c-add-stmt-syntax 'substatement-label nil 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
5839 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
5840 (t
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5841 (c-add-stmt-syntax 'substatement nil 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
5842 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
5843 ;; 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
5844 ;; 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
5845 (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
5846 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
5847 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
5848 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
5849 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
5850 ;; 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
5851 ;; 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
5852 ((and (or c-opt-inexpr-class-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
5853 c-opt-inexpr-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
5854 c-opt-lambda-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
5855 (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
5856 (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
5857 containing-sexp)))
30403
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
5858 (setq tmpsymbol (assq (car placeholder)
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
5859 '((inexpr-class . class-open)
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
5860 (inexpr-statement . block-open))))
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
5861 (if tmpsymbol
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
5862 ;; 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
5863 (setq tmpsymbol (cdr tmpsymbol))
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
5864 ;; 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
5865 ;; 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
5866 ;; opener.
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
5867 (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
5868 'inline-open
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
5869 'lambda-intro-cont)))
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
5870 (goto-char (cdr placeholder))
36920
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
5871 (back-to-indentation)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5872 (c-add-stmt-syntax tmpsymbol nil t 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
5873 (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
5874 (c-whack-state-after (point) paren-state))
36920
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
5875 (unless (eq (point) (cdr placeholder))
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
5876 (c-add-syntax (car placeholder))))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5877 ;; CASE 5: Line is at top level.
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5878 ((null containing-sexp)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5879 (cond
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
5880 ;; 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
5881 ;; or inline-inclass method opening brace
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
5882 ((setq special-brace-list
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
5883 (or (and c-special-brace-lists
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
5884 (c-looking-at-special-brace-list))
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
5885 (eq char-after-ip ?{)))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5886 (cond
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5887 ;; CASE 5A.1: Non-class declaration block open.
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5888 ((save-excursion
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5889 (goto-char indent-point)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5890 (skip-chars-forward " \t")
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5891 (and (c-safe (c-backward-sexp 2) 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
5892 (looking-at c-other-decl-block-key)
20914
8f189ffad604 (c-forward-syntactic-ws, c-backward-syntactic-ws):
Richard M. Stallman <rms@gnu.org>
parents: 20142
diff changeset
5893 (setq keyword (match-string 1)
8f189ffad604 (c-forward-syntactic-ws, c-backward-syntactic-ws):
Richard M. Stallman <rms@gnu.org>
parents: 20142
diff changeset
5894 placeholder (point))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5895 (if (string-equal keyword "extern")
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5896 ;; Special case for extern-lang-open. The
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5897 ;; check for a following string is disabled
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5898 ;; since it doesn't disambiguate anything.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5899 (and ;;(progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5900 ;; (c-forward-sexp 1)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5901 ;; (c-forward-syntactic-ws)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5902 ;; (eq (char-after) ?\"))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5903 (setq tmpsymbol 'extern-lang-open))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5904 (setq tmpsymbol (intern (concat keyword "-open"))))
20914
8f189ffad604 (c-forward-syntactic-ws, c-backward-syntactic-ws):
Richard M. Stallman <rms@gnu.org>
parents: 20142
diff changeset
5905 ))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5906 (goto-char placeholder)
20914
8f189ffad604 (c-forward-syntactic-ws, c-backward-syntactic-ws):
Richard M. Stallman <rms@gnu.org>
parents: 20142
diff changeset
5907 (c-add-syntax tmpsymbol (c-point 'boi)))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5908 ;; CASE 5A.2: we are looking at a class opening brace
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5909 ((save-excursion
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5910 (goto-char indent-point)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5911 (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
5912 (let ((decl (c-search-uplist-for-classkey (c-parse-state))))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5913 (and decl
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5914 (setq placeholder (aref decl 0)))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5915 ))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5916 (c-add-syntax 'class-open placeholder))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5917 ;; CASE 5A.3: brace list open
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5918 ((save-excursion
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5919 (c-beginning-of-decl-1 lim)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5920 (while (looking-at c-specifier-key)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5921 (goto-char (match-end 1))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5922 (c-forward-syntactic-ws indent-point))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5923 (setq placeholder (c-point 'boi))
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
5924 (or (consp special-brace-list)
36920
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
5925 (and (or (save-excursion
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
5926 (goto-char indent-point)
36920
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
5927 (setq tmpsymbol nil)
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
5928 (while (and (> (point) placeholder)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5929 (zerop (c-backward-token-2 1 t))
36920
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
5930 (/= (char-after) ?=))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5931 (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
5932 (not tmpsymbol)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5933 (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
5934 (setq tmpsymbol 'topmost-intro-cont)))
36920
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
5935 (eq (char-after) ?=))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5936 (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
5937 (save-excursion
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
5938 (while (and (< (point) indent-point)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5939 (zerop (c-forward-token-2 1 t))
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
5940 (not (memq (char-after) '(?\; ?\()))))
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
5941 (not (memq (char-after) '(?\; ?\()))
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
5942 ))))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5943 (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
5944 (c-major-mode-is 'java-mode)
36920
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
5945 (eq tmpsymbol 'topmost-intro-cont))
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
5946 ;; 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
5947 ;; belongs to a "new Foo[]" initialization list,
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
5948 ;; which means the brace list is part of an
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
5949 ;; expression and not a top level definition. We
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
5950 ;; therefore treat it as any topmost continuation
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
5951 ;; even though the semantically correct symbol still
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
5952 ;; 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
5953 ;; case B.2.
36920
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
5954 (progn
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
5955 (c-beginning-of-statement-1 lim)
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
5956 (c-add-syntax 'topmost-intro-cont (c-point 'boi)))
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
5957 (c-add-syntax 'brace-list-open placeholder)))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5958 ;; CASE 5A.4: inline defun open
20914
8f189ffad604 (c-forward-syntactic-ws, c-backward-syntactic-ws):
Richard M. Stallman <rms@gnu.org>
parents: 20142
diff changeset
5959 ((and inclass-p (not inenclosing-p))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5960 (c-add-syntax 'inline-open)
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
5961 (c-add-class-syntax 'inclass inclass-p paren-state))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5962 ;; CASE 5A.5: ordinary defun open
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5963 (t
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5964 (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
5965 (if (or inclass-p macro-start)
21106
5e5fa0a34cb0 (c-inside-bracelist-p): Fix for enum test.
Richard M. Stallman <rms@gnu.org>
parents: 20914
diff changeset
5966 (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
5967 ;; 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
5968 (c-add-syntax 'defun-open (c-point 'bol)))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5969 )))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5970 ;; CASE 5B: first K&R arg decl or member init
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
5971 ((c-just-after-func-arglist-p lim)
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5972 (cond
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5973 ;; CASE 5B.1: a member init
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5974 ((or (eq char-before-ip ?:)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5975 (eq char-after-ip ?:))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5976 ;; this line should be indented relative to the beginning
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5977 ;; of indentation for the topmost-intro line that contains
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5978 ;; the prototype's open paren
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5979 ;; TBD: is the following redundant?
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5980 (if (eq char-before-ip ?:)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5981 (forward-char -1))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5982 (c-backward-syntactic-ws lim)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5983 ;; TBD: is the preceding redundant?
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5984 (if (eq (char-before) ?:)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5985 (progn (forward-char -1)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5986 (c-backward-syntactic-ws lim)))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5987 (if (eq (char-before) ?\))
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
5988 (c-backward-sexp 1))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5989 (setq placeholder (point))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5990 (save-excursion
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
5991 (and (c-safe (c-backward-sexp 1) t)
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5992 (looking-at "throw[^_]")
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
5993 (c-safe (c-backward-sexp 1) t)
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5994 (setq placeholder (point))))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5995 (goto-char placeholder)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5996 (c-add-syntax 'member-init-intro (c-point 'boi))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5997 ;; we don't need to add any class offset since this
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5998 ;; should be relative to the ctor's indentation
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5999 )
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6000 ;; 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
6001 ((and c-recognize-knr-p
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
6002 (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
6003 (c-beginning-of-statement-1 lim)
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6004 (c-add-syntax 'knr-argdecl-intro (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
6005 (if inclass-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
6006 (c-add-class-syntax 'inclass inclass-p paren-state)))
30403
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
6007 ;; CASE 5B.3: Inside a member init list.
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
6008 ((c-beginning-of-member-init-list lim)
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
6009 (c-forward-syntactic-ws)
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
6010 (c-add-syntax 'member-init-cont (point)))
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
6011 ;; CASE 5B.4: Nether region after a C++ or Java func
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6012 ;; decl, which could include a `throws' declaration.
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6013 (t
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6014 (c-beginning-of-statement-1 lim)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6015 (c-add-syntax 'func-decl-cont (c-point 'boi))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6016 )))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6017 ;; CASE 5C: inheritance line. could be first inheritance
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6018 ;; 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
6019 ((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
6020 (progn
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
6021 (when (eq char-after-ip ?,)
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
6022 (skip-chars-forward " \t")
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
6023 (forward-char))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6024 (looking-at c-opt-postfix-decl-spec-key)))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6025 (and (or (eq char-before-ip ?:)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6026 ;; watch out for scope operator
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6027 (save-excursion
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6028 (and (eq char-after-ip ?:)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6029 (c-safe (forward-char 1) t)
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6030 (not (eq (char-after) ?:))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6031 )))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6032 (save-excursion
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6033 (c-backward-syntactic-ws lim)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6034 (if (eq char-before-ip ?:)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6035 (progn
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6036 (forward-char -1)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6037 (c-backward-syntactic-ws lim)))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6038 (back-to-indentation)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6039 (looking-at c-class-key)))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6040 ;; for Java
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6041 (and (c-major-mode-is 'java-mode)
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6042 (let ((fence (save-excursion
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6043 (c-beginning-of-statement-1 lim)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6044 (point)))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6045 cont done)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6046 (save-excursion
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6047 (while (not done)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6048 (cond ((looking-at c-opt-postfix-decl-spec-key)
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6049 (setq injava-inher (cons cont (point))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6050 done t))
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6051 ((or (not (c-safe (c-forward-sexp -1) t))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6052 (<= (point) fence))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6053 (setq done t))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6054 )
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6055 (setq cont t)))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6056 injava-inher)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6057 (not (c-crosses-statement-barrier-p (cdr injava-inher)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6058 (point)))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6059 ))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6060 (cond
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6061 ;; CASE 5C.1: non-hanging colon on an inher intro
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6062 ((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
6063 (c-beginning-of-statement-1 lim)
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6064 (c-add-syntax 'inher-intro (c-point 'boi))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6065 ;; don't add inclass symbol since relative point already
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6066 ;; contains any class offset
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6067 )
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6068 ;; CASE 5C.2: hanging colon on an inher intro
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6069 ((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
6070 (c-beginning-of-statement-1 lim)
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6071 (c-add-syntax 'inher-intro (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
6072 (if inclass-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
6073 (c-add-class-syntax 'inclass inclass-p paren-state)))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6074 ;; CASE 5C.3: in a Java implements/extends
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6075 (injava-inher
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6076 (let ((where (cdr injava-inher))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6077 (cont (car injava-inher)))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6078 (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
6079 (cond ((looking-at "throws\\>[^_]")
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6080 (c-add-syntax 'func-decl-cont
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6081 (progn (c-beginning-of-statement-1 lim)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6082 (c-point 'boi))))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6083 (cont (c-add-syntax 'inher-cont where))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6084 (t (c-add-syntax 'inher-intro
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6085 (progn (goto-char (cdr injava-inher))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6086 (c-beginning-of-statement-1 lim)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6087 (point))))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6088 )))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6089 ;; CASE 5C.4: a continued inheritance line
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6090 (t
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6091 (c-beginning-of-inheritance-list lim)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6092 (c-add-syntax 'inher-cont (point))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6093 ;; don't add inclass symbol since relative point already
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6094 ;; contains any class offset
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6095 )))
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
6096 ;; 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
6097 ;; member init list continuation, or a template argument
03befb219d03 Installed version 5.26
Gerd Moellmann <gerd@gnu.org>
parents: 25178
diff changeset
6098 ;; list continuation.
03befb219d03 Installed version 5.26
Gerd Moellmann <gerd@gnu.org>
parents: 25178
diff changeset
6099 ((c-with-syntax-table (if (c-major-mode-is 'c++-mode)
03befb219d03 Installed version 5.26
Gerd Moellmann <gerd@gnu.org>
parents: 25178
diff changeset
6100 c++-template-syntax-table
03befb219d03 Installed version 5.26
Gerd Moellmann <gerd@gnu.org>
parents: 25178
diff changeset
6101 (syntax-table))
03befb219d03 Installed version 5.26
Gerd Moellmann <gerd@gnu.org>
parents: 25178
diff changeset
6102 (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
6103 ;; Note: We use the fact that lim is always after any
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
6104 ;; preceding brace sexp.
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6105 (while (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
6106 (not (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
6107 (or (memq (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
6108 (and (c-major-mode-is 'c++-mode)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6109 (zerop (c-backward-token-2 1 nil 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
6110 (eq (char-after) ?<)))))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6111 (goto-char indent-point)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6112 (setq placeholder
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6113 (c-beginning-of-member-init-list lim))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6114 (cond
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6115 ;; CASE 5D.1: hanging member init colon, but watch out
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6116 ;; for bogus matches on access specifiers inside classes.
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6117 ((and placeholder
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6118 (save-excursion
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6119 (setq placeholder (point))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6120 (c-backward-token-2 1 t lim)
26817
03befb219d03 Installed version 5.26
Gerd Moellmann <gerd@gnu.org>
parents: 25178
diff changeset
6121 (and (eq (char-after) ?:)
03befb219d03 Installed version 5.26
Gerd Moellmann <gerd@gnu.org>
parents: 25178
diff changeset
6122 (not (eq (char-before) ?:))))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6123 (save-excursion
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6124 (goto-char placeholder)
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6125 (back-to-indentation)
30403
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
6126 (or
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
6127 (/= (car (save-excursion
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
6128 (parse-partial-sexp (point) placeholder)))
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
6129 0)
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
6130 (and
44728
7a3ac6c387fe CC Mode 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 (if c-opt-access-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
6132 (not (looking-at c-opt-access-key)) t)
30403
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
6133 (not (looking-at c-class-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
6134 (if c-opt-bitfield-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
6135 (not (looking-at c-opt-bitfield-key)) t))
30403
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
6136 )))
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6137 (goto-char placeholder)
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6138 (c-forward-syntactic-ws)
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6139 (c-add-syntax 'member-init-cont (point))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6140 ;; we do not need to add class offset since relative
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6141 ;; point is the member init above us
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6142 )
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6143 ;; CASE 5D.2: non-hanging member init colon
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6144 ((progn
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6145 (c-forward-syntactic-ws indent-point)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6146 (eq (char-after) ?:))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6147 (skip-chars-forward " \t:")
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6148 (c-add-syntax 'member-init-cont (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
6149 ;; 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
6150 ((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
6151 (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
6152 (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
6153 (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
6154 (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
6155 (setq placeholder (c-up-list-backward (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
6156 (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
6157 (eq (char-after 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
6158 ;; we can probably indent it just like an arglist-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
6159 (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
6160 (c-beginning-of-statement-1 lim 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
6161 (c-add-syntax 'template-args-cont (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
6162 ;; 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
6163 ((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
6164 (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
6165 (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
6166 (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
6167 (if (looking-at "static\\>[^_]")
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6168 (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
6169 (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
6170 (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
6171 (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
6172 (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
6173 (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
6174 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
6175 (eq (char-after) ?:))))
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6176 (goto-char placeholder)
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6177 (c-add-syntax 'inher-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
6178 ;; 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
6179 ;; top level construct.
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6180 (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
6181 (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
6182 '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
6183 (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
6184 (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
6185 (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
6186 (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
6187 (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
6188 ;; 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
6189 ;; 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
6190 ;; 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
6191 ;; 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
6192 '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
6193 'statement-cont)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6194 nil nil nil containing-sexp paren-state))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6195 ))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6196 ;; CASE 5E: we are looking at a access specifier
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6197 ((and inclass-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
6198 c-opt-access-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
6199 (looking-at c-opt-access-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
6200 (setq placeholder (c-add-class-syntax 'inclass inclass-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
6201 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
6202 ;; Append access-label with the same anchor point as inclass gets.
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6203 (c-append-syntax 'access-label placeholder))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6204 ;; CASE 5F: Close of a non-class declaration level block.
20914
8f189ffad604 (c-forward-syntactic-ws, c-backward-syntactic-ws):
Richard M. Stallman <rms@gnu.org>
parents: 20142
diff changeset
6205 ((and inenclosing-p
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6206 (eq char-after-ip ?}))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6207 (c-add-syntax (intern (concat inenclosing-p "-close"))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6208 (aref inclass-p 0)))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6209 ;; CASE 5G: we are looking at the brace which closes the
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6210 ;; enclosing nested class decl
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6211 ((and inclass-p
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6212 (eq char-after-ip ?})
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6213 (save-excursion
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6214 (save-restriction
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6215 (widen)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6216 (forward-char 1)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6217 (and (c-safe (c-backward-sexp 1) t)
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6218 (= (point) (aref inclass-p 1))
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6219 ))))
44728
7a3ac6c387fe CC Mode 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 (c-add-class-syntax 'class-close inclass-p paren-state))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6221 ;; CASE 5H: we could be looking at subsequent knr-argdecls
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6222 ((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
6223 (not (eq char-before-ip ?}))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6224 (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
6225 (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
6226 (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
6227 ;; 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
6228 ;; 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
6229 ;; (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
6230 ;; 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
6231 (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
6232 (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
6233 (< placeholder indent-point))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6234 (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
6235 (c-add-syntax 'knr-argdecl (point)))
30403
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
6236 ;; 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
6237 ((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
6238 (looking-at 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
6239 (c-beginning-of-statement-1 lim)
30403
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
6240 (c-add-syntax 'objc-method-intro (c-point 'boi)))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6241 ;; 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
6242 ;; thereof.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6243 ((c-mode-is-new-awk-p)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6244 (setq placeholder (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6245 (c-add-stmt-syntax
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6246 (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
6247 (/= (point) placeholder))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6248 'topmost-intro-cont
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6249 'topmost-intro)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6250 nil nil nil
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6251 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
6252 ;; 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
6253 ;; 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
6254 ;; end at the closing '}'. C.f. case 5D.5.
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6255 ((progn
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6256 (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
6257 (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
6258 (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
6259 (let ((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
6260 (if 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
6261 ;; Speed up the backward search a bit.
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
6262 (goto-char (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
6263 (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
6264 (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
6265 (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
6266 ;; 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
6267 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
6268 (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
6269 (>= (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
6270 (goto-char placeholder)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6271 (c-add-stmt-syntax 'topmost-intro-cont nil 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
6272 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
6273 ;; 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
6274 ;; sure we skip back past any access specifiers
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
6275 ((progn
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6276 (while (and inclass-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
6277 c-opt-access-key
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6278 (not (bobp))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6279 (save-excursion
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6280 (c-safe (c-backward-sexp 1) 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
6281 (looking-at c-opt-access-key)))
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6282 (c-backward-sexp 1)
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6283 (c-backward-syntactic-ws lim))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6284 (or (bobp)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6285 (if (c-mode-is-new-awk-p)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6286 (not (c-awk-prev-line-incomplete-p))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6287 (memq (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
6288 (and (c-major-mode-is 'objc-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
6289 (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
6290 (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
6291 (eq (char-after) ?@)))))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6292 ;; real beginning-of-line could be narrowed out due to
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6293 ;; enclosure in a class block
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6294 (save-restriction
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6295 (widen)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6296 (c-add-syntax 'topmost-intro (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
6297 ;; Using bol instead of boi above is highly bogus, 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
6298 ;; it makes our lives hard to remain compatible. :P
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6299 (if inclass-p
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6300 (progn
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6301 (goto-char (aref inclass-p 1))
19251
6a7d40ec4b29 (c-beginning-of-statement-1): When checking for bare semi, don't match
Richard M. Stallman <rms@gnu.org>
parents: 18844
diff changeset
6302 (or (= (point) (c-point 'boi))
6a7d40ec4b29 (c-beginning-of-statement-1): When checking for bare semi, don't match
Richard M. Stallman <rms@gnu.org>
parents: 18844
diff changeset
6303 (goto-char (aref inclass-p 0)))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6304 (if inenclosing-p
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6305 (c-add-syntax (intern (concat "in" inenclosing-p))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6306 (c-point 'boi))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6307 (c-add-class-syntax 'inclass inclass-p paren-state))
20914
8f189ffad604 (c-forward-syntactic-ws, c-backward-syntactic-ws):
Richard M. Stallman <rms@gnu.org>
parents: 20142
diff changeset
6308 ))
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
6309 (when (and 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
6310 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
6311 (/= macro-start (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
6312 (c-add-syntax '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
6313 (setq macro-start nil))
20914
8f189ffad604 (c-forward-syntactic-ws, c-backward-syntactic-ws):
Richard M. Stallman <rms@gnu.org>
parents: 20142
diff changeset
6314 ))
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
6315 ;; CASE 5K: we are at an ObjC method definition
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6316 ;; 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
6317 ((and c-opt-method-key
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6318 (progn
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6319 (c-beginning-of-statement-1 lim)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6320 (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
6321 (looking-at c-opt-method-key)))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6322 (c-add-syntax 'objc-method-args-cont (point)))
30403
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
6323 ;; 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
6324 ;; arglist that begins on the previous line.
03befb219d03 Installed version 5.26
Gerd Moellmann <gerd@gnu.org>
parents: 25178
diff changeset
6325 ((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
6326 (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
6327 (c-add-syntax 'template-args-cont (c-point 'boi)))
30403
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
6328 ;; CASE 5M: we are at a topmost continuation line
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6329 (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
6330 (c-beginning-of-statement-1 (c-safe-position (point) paren-state))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6331 (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
6332 ))
30403
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
6333 ;; (CASE 6 has been removed.)
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6334 ;; CASE 7: line is an expression, not a statement. Most
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6335 ;; likely we are either in a function prototype or a function
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6336 ;; call argument list
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6337 ((not (or (and c-special-brace-lists
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6338 (save-excursion
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6339 (goto-char containing-sexp)
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6340 (c-looking-at-special-brace-list)))
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6341 (eq (char-after containing-sexp) ?{)))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6342 (cond
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6343 ;; 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
6344 ;; 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
6345 ((memq char-after-ip '(?\) ?\]))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6346 (goto-char containing-sexp)
30403
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
6347 (setq placeholder (c-point 'boi))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6348 (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
6349 (>= (point) placeholder))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6350 (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6351 (forward-char)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6352 (skip-chars-forward " \t"))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6353 (goto-char placeholder))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6354 (c-add-stmt-syntax 'arglist-close (list containing-sexp) t nil
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6355 (c-most-enclosing-brace paren-state (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6356 (c-whack-state-after (point) paren-state)))
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6357 ;; 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
6358 ;; 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
6359 ;; 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
6360 ((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
6361 (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
6362 (setq placeholder (c-inside-bracelist-p (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
6363 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
6364 (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
6365 (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
6366 (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
6367 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
6368 (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
6369 (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
6370 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
6371 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
6372 ;; 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
6373 ;; 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
6374 ;; 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
6375 )))
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
6376 (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
6377 (back-to-indentation)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6378 (c-add-stmt-syntax (car tmpsymbol) nil t 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
6379 (c-most-enclosing-brace paren-state (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
6380 (c-whack-state-after (point) 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
6381 (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
6382 (c-add-syntax (cdr tmpsymbol))))
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6383 ;; 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
6384 ;; argument list. Use arglist-close if we're actually
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6385 ;; looking at a close paren or bracket.
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6386 ((memq char-before-ip '(?\( ?\[))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6387 (goto-char containing-sexp)
30403
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
6388 (setq placeholder (c-point 'boi))
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
6389 (when (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
6390 (>= (point) placeholder))
30403
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
6391 (forward-char)
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
6392 (skip-chars-forward " \t")
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
6393 (setq placeholder (point)))
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
6394 (c-add-syntax 'arglist-intro placeholder))
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6395 ;; CASE 7D: we are inside a conditional test clause. treat
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6396 ;; 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
6397 ((progn
20914
8f189ffad604 (c-forward-syntactic-ws, c-backward-syntactic-ws):
Richard M. Stallman <rms@gnu.org>
parents: 20142
diff changeset
6398 (goto-char containing-sexp)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6399 (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
6400 (looking-at "\\<for\\>[^_]")))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6401 (goto-char (1+ containing-sexp))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6402 (c-forward-syntactic-ws indent-point)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6403 (if (eq char-before-ip ?\;)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6404 (c-add-syntax 'statement (point))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6405 (c-add-syntax 'statement-cont (point))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6406 ))
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
6407 ;; 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
6408 ;; 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
6409 ;; 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
6410 ((and c-opt-method-key
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6411 (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
6412 (progn
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6413 (goto-char (1- containing-sexp))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6414 (c-backward-syntactic-ws (c-point 'bod))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6415 (if (not (looking-at c-symbol-key))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6416 (c-add-syntax 'objc-method-call-cont containing-sexp))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6417 )))
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6418 ;; CASE 7F: we are looking at an arglist continuation line,
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6419 ;; but the preceding argument is on the same line as the
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6420 ;; opening paren. This case includes multi-line
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6421 ;; 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
6422 ;; 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
6423 ((progn
36920
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
6424 (goto-char (1+ containing-sexp))
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
6425 (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
6426 (and (not (eolp))
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
6427 (not (looking-at "\\\\$"))))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6428 (goto-char containing-sexp)
30403
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
6429 (setq placeholder (c-point 'boi))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6430 (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
6431 (>= (point) placeholder))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6432 (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6433 (forward-char)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6434 (skip-chars-forward " \t"))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6435 (goto-char placeholder))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6436 (c-add-stmt-syntax 'arglist-cont-nonempty (list containing-sexp)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6437 t nil
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6438 (c-most-enclosing-brace c-state-cache (point))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6439 (c-whack-state-after (point) paren-state)))
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6440 ;; CASE 7G: we are looking at just a normal arglist
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6441 ;; 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
6442 (t (c-forward-syntactic-ws indent-point)
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6443 (c-add-syntax 'arglist-cont (c-point 'boi)))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6444 ))
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6445 ;; 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
6446 ((and (c-major-mode-is 'c++-mode)
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6447 (save-excursion
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6448 (goto-char indent-point)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6449 (skip-chars-forward " \t")
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6450 (looking-at c-opt-postfix-decl-spec-key)))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6451 (goto-char indent-point)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6452 (skip-chars-forward " \t")
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6453 (cond
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6454 ;; CASE 8A: non-hanging colon on an inher intro
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6455 ((eq char-after-ip ?:)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6456 (c-backward-syntactic-ws lim)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6457 (c-add-syntax 'inher-intro (c-point 'boi)))
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6458 ;; CASE 8B: hanging colon on an inher intro
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6459 ((eq char-before-ip ?:)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6460 (c-add-syntax 'inher-intro (c-point 'boi)))
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6461 ;; CASE 8C: a continued inheritance line
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6462 (t
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6463 (c-beginning-of-inheritance-list lim)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6464 (c-add-syntax 'inher-cont (point))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6465 )))
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6466 ;; CASE 9: we are inside a brace-list
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6467 ((and (not (c-mode-is-new-awk-p)) ; Maybe this isn't needed (ACM, 2002/3/29)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6468 (setq special-brace-list
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6469 (or (and c-special-brace-lists
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6470 (save-excursion
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6471 (goto-char containing-sexp)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6472 (c-looking-at-special-brace-list)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6473 (c-inside-bracelist-p containing-sexp paren-state))))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6474 (cond
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6475 ;; 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
6476 ((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
6477 (save-excursion
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
6478 (goto-char containing-sexp)
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
6479 (eq (char-after) ?\())
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6480 (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
6481 (goto-char (car (car special-brace-list)))
26817
03befb219d03 Installed version 5.26
Gerd Moellmann <gerd@gnu.org>
parents: 25178
diff changeset
6482 (skip-chars-backward " \t")
36920
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
6483 (if (and (bolp)
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
6484 (assoc 'statement-cont
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
6485 (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
6486 (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
6487 (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
6488 (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
6489 (c-forward-token-2 0)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6490 (while (looking-at c-specifier-key)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6491 (goto-char (match-end 1))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6492 (c-forward-syntactic-ws))
26817
03befb219d03 Installed version 5.26
Gerd Moellmann <gerd@gnu.org>
parents: 25178
diff changeset
6493 (c-add-syntax 'brace-list-open (c-point 'boi))))
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6494 ;; CASE 9B: brace-list-close brace
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6495 ((if (consp special-brace-list)
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6496 ;; Check special brace list closer.
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6497 (progn
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6498 (goto-char (car (car special-brace-list)))
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6499 (save-excursion
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6500 (goto-char indent-point)
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6501 (back-to-indentation)
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6502 (or
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6503 ;; 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
6504 (and (eq (char-after) ?\))
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6505 (eq (1+ (point)) (cdr (car special-brace-list))))
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6506 ;; We were before the special close char.
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6507 (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
6508 (zerop (c-forward-token-2))
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6509 (eq (1+ (point)) (cdr (car special-brace-list)))))))
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6510 ;; Normal brace list check.
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6511 (and (eq char-after-ip ?})
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6512 (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
6513 (= (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
6514 (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
6515 (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
6516 (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
6517 (c-beginning-of-statement-1 lim)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6518 (c-add-stmt-syntax 'brace-list-close nil t t lim
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6519 (c-whack-state-after (point) paren-state))))
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6520 (t
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6521 ;; 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
6522 ;; token following the opening brace
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6523 (if (consp special-brace-list)
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6524 (progn
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6525 (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
6526 (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
6527 (goto-char containing-sexp))
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6528 (forward-char)
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6529 (let ((start (point)))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6530 (c-forward-syntactic-ws indent-point)
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6531 (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
6532 (c-skip-ws-forward indent-point)
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6533 (cond
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6534 ;; 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
6535 ((= (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
6536 (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
6537 (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
6538 (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
6539 (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
6540 (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
6541 (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
6542 (c-beginning-of-statement-1 lim)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6543 (c-add-stmt-syntax 'brace-list-intro nil t t lim
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6544 (c-whack-state-after (point) paren-state))))
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6545 ;; 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
6546 ;; brace-entry-open
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6547 (t (if (or (eq char-after-ip ?{)
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6548 (and c-special-brace-lists
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6549 (save-excursion
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6550 (goto-char indent-point)
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6551 (c-forward-syntactic-ws (c-point 'eol))
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6552 (c-looking-at-special-brace-list (point)))))
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6553 (c-add-syntax 'brace-entry-open (point))
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6554 (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
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 ))))
7a3ac6c387fe CC Mode 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 ;; CASE 10: A continued statement or top level construct.
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6558 ((and (if (c-mode-is-new-awk-p)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6559 (c-awk-prev-line-incomplete-p containing-sexp) ; ACM 2002/3/29
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6560 (and (not (memq char-before-ip '(?\; ?:)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6561 (or (not (eq char-before-ip ?}))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6562 (c-looking-at-inexpr-block-backward c-state-cache))))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6563 (> (point)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6564 (save-excursion
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6565 (c-beginning-of-statement-1 containing-sexp)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6566 (setq placeholder (point))))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6567 (/= 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
6568 ;; 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
6569 (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
6570 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
6571 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
6572 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
6573 paren-state))
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6574 ;; CASE 14: A case or default label
44728
7a3ac6c387fe CC Mode 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 ((looking-at c-label-kwds-regexp)
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6576 (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
6577 (setq lim (c-most-enclosing-brace c-state-cache 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
6578 (c-backward-to-block-anchor lim)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6579 (c-add-stmt-syntax 'case-label nil t nil
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6580 lim paren-state))
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6581 ;; CASE 15: any other label
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6582 ((looking-at c-label-key)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6583 (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
6584 (setq lim (c-most-enclosing-brace c-state-cache 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
6585 (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
6586 (setq tmpsymbol
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
6587 (if (and (eq (c-beginning-of-statement-1 lim) '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
6588 (looking-at "switch\\>[^_]"))
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
6589 ;; If the surrounding statement is a switch 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
6590 ;; let's analyze all labels as switch labels, so
7a3ac6c387fe CC Mode 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 ;; that they get lined up consistently.
7a3ac6c387fe CC Mode 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 'case-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
6593 '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
6594 (c-backward-to-block-anchor lim)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6595 (c-add-stmt-syntax tmpsymbol nil t nil
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6596 lim paren-state))
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6597 ;; CASE 16: block close brace, possibly closing the defun or
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6598 ;; the class
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6599 ((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
6600 ;; 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
6601 (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
6602 (goto-char containing-sexp)
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6603 (cond
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
6604 ;; 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
6605 ;; 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
6606 ;; 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
6607 ;; 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
6608 ((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
6609 (c-backward-to-block-anchor lim)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6610 (c-add-stmt-syntax 'block-close nil t nil
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6611 lim paren-state))
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6612 ;; 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
6613 ;; 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
6614 ((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
6615 (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
6616 nil))
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6617 (setq tmpsymbol (if (eq (car placeholder) 'inlambda)
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6618 'inline-close
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6619 'block-close))
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6620 (goto-char containing-sexp)
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6621 (back-to-indentation)
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6622 (if (= containing-sexp (point))
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6623 (c-add-syntax tmpsymbol (point))
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6624 (goto-char (cdr placeholder))
36920
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
6625 (back-to-indentation)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6626 (c-add-stmt-syntax tmpsymbol nil t 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
6627 (c-most-enclosing-brace paren-state (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
6628 (c-whack-state-after (point) paren-state))
36920
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
6629 (if (/= (point) (cdr placeholder))
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
6630 (c-add-syntax (car placeholder)))))
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6631 ;; 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
6632 ;; a non-class declaration level 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
6633 ((setq placeholder (c-search-uplist-for-classkey 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
6634 (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
6635 (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
6636 (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
6637 (goto-char (aref placeholder 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
6638 (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
6639 (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
6640 (c-add-syntax 'inline-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
6641 ;; 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
6642 ;; 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
6643 ;; 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
6644 ;; 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
6645 ;; C.f. cases B.3 and 17G.
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
6646 ((and (not inenclosing-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
6647 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
6648 (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
6649 (and (not (c-looking-at-bos))
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
6650 (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
6651 (setq placeholder (point))
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
6652 ;; Look for a type or identifier followed by a
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
6653 ;; symbol, i.e. the start of a function declaration.
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
6654 ;; Doesn't work for declarations like "int *foo()
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
6655 ;; ..."; we'd need to refactor the more competent
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
6656 ;; analysis in `c-font-lock-declarations' for that.
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
6657 (c-forward-type)
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
6658 (progn
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
6659 (c-forward-syntactic-ws)
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
6660 (looking-at c-symbol-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
6661 (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
6662 (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
6663 (goto-char placeholder))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6664 (c-add-stmt-syntax 'defun-close nil t nil
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6665 lim paren-state))
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6666 ;; CASE 16C: if there an enclosing brace that hasn't
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6667 ;; been narrowed out by a class, then this is 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
6668 ;; block-close. C.f. case 17H.
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
6669 ((and (not inenclosing-p) 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
6670 ;; 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
6671 ;; the same line, we anchor at the first preceding 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
6672 ;; at 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
6673 ;; 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
6674 ;; the indentation compatible with version 5.28 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
6675 ;; earlier.
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
6676 (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
6677 (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
6678 (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
6679 (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
6680 (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
6681 (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
6682 ;; 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
6683 ;; situations are handled in case 16E above.
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6684 (c-add-stmt-syntax 'block-close nil t nil
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6685 lim paren-state)))
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6686 ;; CASE 16D: find out whether we're closing a top-level
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6687 ;; class or a defun
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6688 (t
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6689 (save-restriction
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6690 (narrow-to-region (point-min) indent-point)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6691 (let ((decl (c-search-uplist-for-classkey (c-parse-state))))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6692 (if decl
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
6693 (c-add-class-syntax 'class-close decl 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
6694 (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
6695 (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
6696 (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
6697 (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
6698 )))
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
6699 ;; CASE 17: Statement or defun catchall.
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6700 (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
6701 (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
6702 ;; 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
6703 (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
6704 (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
6705 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
6706 (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
6707 (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
6708 (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
6709 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
6710 (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
6711 (/= (point) (c-point 'boi)))))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6712 (cond
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6713 ;; 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
6714 ((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
6715 (/= (point) indent-point))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6716 (c-add-stmt-syntax 'statement-cont nil 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
6717 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
6718 ;; 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
6719 ((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
6720 (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
6721 (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
6722 (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
6723 (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
6724 (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
6725 (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
6726 '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
6727 'statement-case-intro)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6728 nil t nil containing-sexp paren-state))
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6729 ;; 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
6730 ((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
6731 (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
6732 (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
6733 (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
6734 (eq step-type 'previous))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6735 (c-add-stmt-syntax 'statement nil t nil
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6736 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
6737 (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
6738 (c-add-syntax 'block-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
6739 ;; 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
6740 ((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
6741 ;; 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
6742 (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
6743 ;; 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
6744 (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
6745 (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
6746 (c-backward-to-block-anchor lim)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6747 (c-add-stmt-syntax 'statement-block-intro nil t nil
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6748 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
6749 (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
6750 (c-add-syntax 'block-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
6751 ;; 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
6752 ;; 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
6753 ((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
6754 (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
6755 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
6756 (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
6757 '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
6758 'statement-block-intro))
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6759 (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
6760 (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
6761 (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
6762 (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
6763 (back-to-indentation)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6764 (c-add-stmt-syntax tmpsymbol nil t 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
6765 (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
6766 (c-whack-state-after (point) 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
6767 (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
6768 (c-add-syntax (car placeholder))))
24282
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6769 (if (eq char-after-ip ?{)
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6770 (c-add-syntax 'block-open)))
5b0864259a4b Installed CC Mode 5.25.
Barry A. Warsaw <barry@zope.org>
parents: 21106
diff changeset
6771 ;; CASE 17F: first statement in an inline, or first
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6772 ;; statement in a top-level defun. we can tell this is it
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6773 ;; 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
6774 ;; 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
6775 ((save-excursion
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6776 (save-restriction
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6777 (widen)
44728
7a3ac6c387fe CC Mode 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 (c-narrow-out-enclosing-class 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
6779 (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
6780 (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
6781 (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
6782 (c-add-syntax 'defun-block-intro (point)))
30403
68e734ab7d5d (c-looking-at-inexpr-block): Replaced a call to
Gerd Moellmann <gerd@gnu.org>
parents: 26817
diff changeset
6783 ;; 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
6784 ;; 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
6785 ;; 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
6786 ;; 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
6787 ((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
6788 (and (not (c-looking-at-bos))
7a3ac6c387fe CC Mode 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 (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
6790 (setq placeholder (point))
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
6791 ;; Look for a type or identifier followed by a
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
6792 ;; symbol, i.e. the start of a function declaration.
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
6793 ;; Doesn't work for declarations like "int *foo()
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
6794 ;; ..."; we'd need to refactor the more competent
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
6795 ;; analysis in `c-font-lock-declarations' for that.
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
6796 (c-forward-type)
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
6797 (progn
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
6798 (c-forward-syntactic-ws)
49f65e04ba8e CC Mode update (5.30.8).
Martin Stjernholm <mast@lysator.liu.se>
parents: 52605
diff changeset
6799 (looking-at c-symbol-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
6800 (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
6801 (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
6802 (goto-char placeholder))
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6803 (c-add-stmt-syntax 'defun-block-intro nil t nil
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6804 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
6805 ;; CASE 17H: First statement in a block. C.f. case 16C.
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
6806 (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
6807 ;; 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
6808 ;; 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
6809 ;; 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
6810 ;; 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
6811 ;; indentation compatible with version 5.28 and earlier.
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
6812 (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
6813 (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
6814 (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
6815 (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
6816 (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
6817 (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
6818 ;; 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
6819 ;; situations are handled in case 17I above.
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6820 (c-add-stmt-syntax 'statement-block-intro nil t nil
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6821 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
6822 (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
6823 (c-add-syntax 'block-open)))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6824 ))
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6825 )
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6826 ;; now we need to look at any modifiers
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6827 (goto-char indent-point)
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6828 (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
6829 ;; 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
6830 (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
6831 (/= (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
6832 (c-append-syntax 'comment-intro))
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
6833 ;; 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
6834 (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
6835 (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
6836 (c-append-syntax 'friend))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6837
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6838 ;; Set syntactic-relpos.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6839 (let ((p c-syntactic-context))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6840 (while (and p
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6841 (if (integerp (car-safe (cdr-safe (car p))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6842 (progn
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6843 (setq syntactic-relpos (car (cdr (car p))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6844 nil)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6845 t))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6846 (setq p (cdr p))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6847
44728
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
6848 ;; 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
6849 (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
6850 (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
6851 (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
6852 (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
6853 (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
6854 (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
6855 (if in-macro-expr
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6856 (when (or
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6857 (< syntactic-relpos macro-start)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6858 (not (or
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6859 (assq 'arglist-intro c-syntactic-context)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6860 (assq 'arglist-cont c-syntactic-context)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6861 (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
6862 (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
6863 ;; 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
6864 ;; 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
6865 ;; 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
6866 ;; 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
6867 ;; 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
6868 ;; expression.
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6869 (setq c-syntactic-context nil)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6870 (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
6871 (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
6872 (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
6873 (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
6874 (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
6875 (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
6876 (<= (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
6877 ;; 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
6878 ;; 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
6879 ;; 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
6880 ;; 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
6881 (c-add-syntax 'cpp-define-intro)))))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6882 ;; return the syntax
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6883 c-syntactic-context))))
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6884
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6885
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6886 ;; Indentation calculation.
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6887
36920
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
6888 (defun c-evaluate-offset (offset langelem symbol)
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
6889 ;; 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
6890 ;; the symbols + or -
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
6891 (cond
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
6892 ((eq offset '+) c-basic-offset)
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
6893 ((eq offset '-) (- c-basic-offset))
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
6894 ((eq offset '++) (* 2 c-basic-offset))
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
6895 ((eq offset '--) (* 2 (- c-basic-offset)))
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
6896 ((eq offset '*) (/ c-basic-offset 2))
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
6897 ((eq offset '/) (/ (- c-basic-offset) 2))
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
6898 ((numberp offset) offset)
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
6899 ((functionp offset) (c-evaluate-offset
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6900 (funcall offset
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6901 (cons (car langelem)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6902 (car-safe (cdr langelem))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6903 langelem symbol))
36920
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
6904 ((vectorp offset) offset)
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
6905 ((null offset) nil)
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
6906 ((listp offset)
56646
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
6907 (if (eq (car offset) 'quote)
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
6908 (error
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
6909 "Setting in c-offsets-alist element \"(%s . '%s)\" was mistakenly quoted"
b7446b6f097d Updated CC Mode to 5.30.9.
Martin Stjernholm <mast@lysator.liu.se>
parents: 53073
diff changeset
6910 symbol (cadr offset)))
36920
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
6911 (let (done)
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
6912 (while (and (not done) offset)
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
6913 (setq done (c-evaluate-offset (car offset) langelem symbol)
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
6914 offset (cdr 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
6915 (if (and c-strict-syntax-p (not 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
6916 (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
6917 done))
36920
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
6918 (t (symbol-value offset))
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
6919 ))
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
6920
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6921 (defun c-calc-offset (langelem)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6922 ;; 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
6923 ;; 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
6924 ;; That data may be zero or more elements, but if at least one is
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6925 ;; given then the first is the relpos (or nil). The symbol is
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6926 ;; matched against `c-offsets-alist' and the offset calculated from
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6927 ;; that is returned.
36920
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
6928 (let* ((symbol (car langelem))
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
6929 (match (assq symbol c-offsets-alist))
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
6930 (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
6931 (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
6932 (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
6933 (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
6934 (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
6935 (setq offset 0))
36920
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
6936 (if (vectorp offset)
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
6937 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
6938 (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
6939 (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
6940 0))
36920
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
6941 ))
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
6942
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6943 (defun c-get-offset (langelem)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6944 ;; 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
6945 ;; someone is calling it directly. It takes an old style syntactic
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6946 ;; element on the form (SYMBOL . RELPOS) and converts it to the new
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6947 ;; list form.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6948 (if (cdr langelem)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6949 (c-calc-offset (list (car langelem) (cdr langelem)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6950 (c-calc-offset langelem)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6951
36920
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
6952 (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
6953 ;; 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
6954 ;; as returned by `c-guess-syntax'.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6955 ;;
44728
7a3ac6c387fe CC Mode 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 ;; Note that topmost-intro always has a relpos at bol, 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
6957 ;; 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
6958 ;; that has more sane positions. Since we always use the first
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
6959 ;; found relpos, we rely on that these other symbols always precede
7a3ac6c387fe CC Mode update to version 5.29. This is for testing; it's not a released
Martin Stjernholm <mast@lysator.liu.se>
parents: 44510
diff changeset
6960 ;; topmost-intro in the LANGELEMS 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
6961 (let ((indent 0) anchor)
51714
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6962
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6963 (while langelems
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6964 (let* ((c-syntactic-element (car langelems))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6965 (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
6966
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6967 (if (vectorp res)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6968 ;; 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
6969 ;; 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
6970 ;; 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
6971 ;; further down the langelems list.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6972 (setq indent (elt res 0)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6973 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
6974
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6975 ;; 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
6976 ;; indentation.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6977 (setq indent (+ indent res))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6978
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6979 ;; 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
6980 ;; element with one.
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6981 (unless anchor
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6982 (let ((relpos (car-safe (cdr (car langelems)))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6983 (if relpos
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6984 (setq anchor relpos)))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6985
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6986 (setq langelems (cdr langelems))))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6987
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6988 (if anchor
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6989 (+ indent (save-excursion
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6990 (goto-char anchor)
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6991 (current-column)))
bc91cbf50c24 Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents: 50273
diff changeset
6992 indent)))
26817
03befb219d03 Installed version 5.26
Gerd Moellmann <gerd@gnu.org>
parents: 25178
diff changeset
6993
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6994
36920
32a4317c6aa5 Update to version 5.28.
Gerd Moellmann <gerd@gnu.org>
parents: 34304
diff changeset
6995 (cc-provide 'cc-engine)
38422
7a94f1c588c4 Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 36920
diff changeset
6996
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 52339
diff changeset
6997 ;;; arch-tag: 149add18-4673-4da5-ac47-6805e4eae089
18720
fc6d08b9bbe2 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6998 ;;; cc-engine.el ends here