Mercurial > emacs
annotate lisp/progmodes/cc-engine.el @ 62047:71210632feca
(cc-define-list-program): Remove this
recent addition.
author | Nick Roberts <nickrob@snap.net.nz> |
---|---|
date | Tue, 03 May 2005 06:45:54 +0000 |
parents | b7446b6f097d |
children | 3ae147d964be d8411455de48 |
rev | line source |
---|---|
18720 | 1 ;;; cc-engine.el --- core syntax guessing engine for CC mode |
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 | 7 ;; 1987 Dave Detlefs and Stewart Clamen |
8 ;; 1985 Richard M. Stallman | |
24282 | 9 ;; Maintainer: bug-cc-mode@gnu.org |
18720 | 10 ;; Created: 22-Apr-1997 (split from cc-mode.el) |
20142 | 11 ;; Version: See cc-mode.el |
18720 | 12 ;; Keywords: c languages oop |
13 | |
14 ;; This file is part of GNU Emacs. | |
15 | |
16 ;; GNU Emacs is free software; you can redistribute it and/or modify | |
17 ;; it under the terms of the GNU General Public License as published by | |
18 ;; the Free Software Foundation; either version 2, or (at your option) | |
19 ;; any later version. | |
20 | |
21 ;; GNU Emacs is distributed in the hope that it will be useful, | |
22 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
23 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
24 ;; GNU General Public License for more details. | |
25 | |
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 | 28 ;; the Free Software Foundation, Inc., 59 Temple Place - Suite 330, |
18720 | 29 ;; Boston, MA 02111-1307, USA. |
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 | 125 (eval-when-compile |
126 (let ((load-path | |
36920 | 127 (if (and (boundp 'byte-compile-dest-file) |
128 (stringp byte-compile-dest-file)) | |
129 (cons (file-name-directory byte-compile-dest-file) load-path) | |
26817 | 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 | 132 |
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 | 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 | 149 |
150 ;; Silence the compiler. | |
151 (cc-bytecomp-defun buffer-syntactic-context) ; XEmacs | |
26817 | 152 |
18720 | 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 | 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 | 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 | 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 | 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 | 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 | 976 |
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 | 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 | 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 | 1739 |
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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 4295 (defun c-beginning-of-inheritance-list (&optional lim) |
4296 ;; Go to the first non-whitespace after the colon that starts a | |
4297 ;; multiple inheritance introduction. Optional LIM is the farthest | |
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 | 4308 |
4309 (defun c-in-method-def-p () | |
4310 ;; Return nil if we aren't in a method definition, otherwise the | |
4311 ;; position of the initial [+-]. | |
4312 (save-excursion | |
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 | 4316 (point)) |
4317 )) | |
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 | 4355 ;; paren and its opening brace. Note that the list close brace |
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 | 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 | 4367 ;; could be looking at const specifier |
4368 (if (and (eq (char-before) ?t) | |
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 | 4372 ;; otherwise, we could be looking at a hanging member init |
4373 ;; colon | |
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 | 4386 (if (and (eq (char-before) ?:) |
4387 (progn | |
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 | 4391 nil |
4392 (goto-char checkpoint)) | |
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 | 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 | 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 | 4485 |
4486 (defun c-skip-conditional () | |
4487 ;; skip forward over conditional at point, including any predicate | |
4488 ;; statements in parentheses. No error checking is performed. | |
24282 | 4489 (c-forward-sexp (cond |
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 | 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 | 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 | 4501 (t 2)))) |
18720 | 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 | 4784 ;; search for the containing class, returning a 2 element vector if |
24282 | 4785 ;; found. aref 0 contains the bufpos of the boi of the class key |
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 | 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 | 4791 search-start search-end) |
4792 (if (consp carcache) | |
4793 ;; a cons cell in the first element means that there is some | |
4794 ;; balanced sexp before the current bufpos. this we can | |
4795 ;; ignore. the nth 1 and nth 2 elements define for us the | |
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 | 4799 ;; if the car was not a cons cell then nth 0 and nth 1 define |
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 | 4803 ;; if search-end is nil, or if the search-end character isn't an |
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 | 4809 ;; now, we need to look more closely at search-start. if |
4810 ;; search-start is nil, then our start boundary is really | |
4811 ;; point-min. | |
4812 (if (not search-start) | |
4813 (setq search-start (point-min)) | |
4814 ;; if search-start is a cons cell, then we can start | |
4815 ;; searching from the end of the balanced sexp just ahead of | |
4816 ;; us | |
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 | 4821 ;; now we can do a quick regexp search from search-start to |
4822 ;; search-end and see if we can find a class key. watch for | |
4823 ;; class like strings in literals | |
4824 (save-excursion | |
4825 (save-restriction | |
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 | 4828 (while (and (not foundp) |
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 | 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 | 4837 (setq class (match-beginning 0) |
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 | 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 | 4843 (setq foundp (vector (c-point 'boi) search-end)) |
4844 (cond | |
4845 ;; check for embedded keywords | |
4846 ((let ((char (char-after (1- class)))) | |
4847 (and char | |
4848 (memq (char-syntax char) '(?w ?_)))) | |
4849 (goto-char match-end) | |
4850 (setq foundp nil)) | |
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 | 4855 (not (c-in-literal class))) |
18720 | 4856 (setq foundp nil)) |
24282 | 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 | 4861 (looking-at "(\\|\\w\\|\\s_\\|\\."))) |
4862 (if (eq (point) search-end) | |
4863 ;; We're done. Just trap this case in the cond. | |
4864 nil | |
4865 ;; False alarm; all conditions aren't satisfied. | |
4866 (setq foundp nil))) | |
18720 | 4867 ;; Its impossible to define a regexp for this, and |
4868 ;; nearly so to do it programmatically. | |
4869 ;; | |
4870 ;; ; picks up forward decls | |
4871 ;; = picks up init lists | |
4872 ;; ) picks up return types | |
4873 ;; > picks up templates, but remember that we can | |
4874 ;; inherit from templates! | |
4875 ((let ((skipchars "^;=)")) | |
4876 ;; try to see if we found the `class' keyword | |
4877 ;; inside a template arg list | |
4878 (save-excursion | |
4879 (skip-chars-backward "^<>" search-start) | |
4880 (if (eq (char-before) ?<) | |
4881 (setq skipchars (concat skipchars ">")))) | |
24282 | 4882 (while (progn |
4883 (skip-chars-forward skipchars search-end) | |
4884 (c-in-literal class)) | |
4885 (forward-char)) | |
18720 | 4886 (/= (point) search-end)) |
4887 (setq foundp nil)) | |
4888 ))) | |
4889 foundp)) | |
4890 ))))) | |
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 | 4893 ;; return the buffer position of the beginning of the brace list |
4894 ;; statement if we're inside a brace list, otherwise return nil. | |
4895 ;; CONTAINING-SEXP is the buffer pos of the innermost containing | |
36920 | 4896 ;; paren. BRACE-STATE is the remainder of the state of enclosing |
4897 ;; braces | |
18720 | 4898 ;; |
4899 ;; N.B.: This algorithm can potentially get confused by cpp macros | |
4900 ;; places in inconvenient locations. Its a trade-off we make for | |
4901 ;; speed. | |
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 | 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 | 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 | 4916 ;; this will pick up array/aggregate init lists, even if they are nested. |
4917 (save-excursion | |
24282 | 4918 (let ((class-key |
4919 ;; Pike can have class definitions anywhere, so we must | |
4920 ;; check for the class key here. | |
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 | 4924 (while (and (not bufpos) |
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 | 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 | 4940 (setq containing-sexp nil) |
4941 ;; see if the open brace is preceded by = or [...] in | |
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 | 4964 (cond ((eq (char-after) ?\;) |
4965 (setq braceassignp nil)) | |
4966 ((and class-key | |
4967 (looking-at class-key)) | |
4968 (setq braceassignp nil)) | |
4969 ((eq (char-after) ?=) | |
4970 ;; We've seen a =, but must check earlier tokens so | |
4971 ;; that it isn't something that should be ignored. | |
4972 (setq braceassignp 'maybe) | |
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 | 4975 (setq braceassignp |
4976 (cond | |
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 | 4979 ;; Check for `<opchar>= in Pike. |
4980 ((and (c-major-mode-is 'pike-mode) | |
4981 (or (eq (char-after) ?`) | |
4982 ;; Special case for Pikes | |
4983 ;; `[]=, since '[' is not in | |
4984 ;; the punctuation class. | |
4985 (and (eq (char-after) ?\[) | |
4986 (eq (char-before) ?`)))) | |
4987 nil) | |
24282 | 4988 ((looking-at "\\s.") 'maybe) |
4989 ;; make sure we're not in a C++ template | |
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 | 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 | 5009 (if (eq (char-after) ?\;) |
5010 ;; Brace lists can't contain a semicolon, so we're done. | |
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 | 5016 ;; we've hit the beginning of the aggregate list |
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 | 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 | 5021 bufpos)) |
5022 )) | |
5023 | |
24282 | 5024 (defun c-looking-at-special-brace-list (&optional lim) |
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 | 5027 ;; positions and its entry in c-special-brace-lists is returned, nil |
5028 ;; otherwise. The ending position is nil if the list is still open. | |
5029 ;; LIM is the limit for forward search. The point may either be at | |
5030 ;; the `(' or at the following paren character. Tries to check the | |
5031 ;; matching closer, but assumes it's correct if no balanced paren is | |
5032 ;; found (i.e. the case `({ ... } ... )' is detected as _not_ being | |
5033 ;; a special brace list). | |
5034 (if c-special-brace-lists | |
5035 (condition-case () | |
5036 (save-excursion | |
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 | 5039 (c-forward-syntactic-ws) |
5040 (if (eq (char-after) ?\() | |
5041 (progn | |
5042 (forward-char 1) | |
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 | 5045 (setq type (assq (char-after) c-special-brace-lists))) |
5046 (if (setq type (assq (char-after) c-special-brace-lists)) | |
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 | 5049 (c-backward-syntactic-ws) |
5050 (forward-char -1) | |
5051 (setq beg (if (eq (char-after) ?\() | |
5052 (point) | |
5053 nil))))) | |
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 | 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 | 5076 (if (or (/= (char-syntax (char-before)) ?\)) |
5077 (= (progn | |
5078 (c-forward-syntactic-ws) | |
5079 (point)) | |
5080 (1- end))) | |
5081 (cons (cons beg end) type)) | |
5082 (cons (list beg) type))))) | |
5083 (error nil)))) | |
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 | 5100 ;; Returns non-nil if we're looking at the beginning of a block |
5101 ;; inside an expression. The value returned is actually a cons of | |
5102 ;; either 'inlambda, 'inexpr-statement or 'inexpr-class and the | |
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 | 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 | 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 | 5178 ;; Returns non-nil if we're looking at the end of an in-expression |
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 | 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 | 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 | 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 | 5204 (narrow-to-region |
5205 (progn | |
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 | 5208 ;; if point is now left of the class opening brace, we're |
5209 ;; hosed, so try a different tact | |
5210 (if (<= (point) (aref inclass-p 1)) | |
5211 (progn | |
5212 (goto-char (1+ (aref inclass-p 1))) | |
5213 (c-forward-syntactic-ws lim))) | |
5214 (point)) | |
5215 ;; end point is the end of the current line | |
5216 (progn | |
5217 (goto-char lim) | |
5218 (c-point 'eol)))) | |
5219 ;; return the class vector | |
5220 inclass-p)) | |
5221 | |
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 | 5599 |
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 | 5603 (save-excursion |
5604 (save-restriction | |
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 | 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 | 5692 |
5693 ;; cache char before and after indent point, and move point to | |
5694 ;; the most likely position to perform the majority of tests | |
5695 (goto-char indent-point) | |
5696 (c-backward-syntactic-ws lim) | |
5697 (setq char-before-ip (char-before)) | |
5698 (goto-char indent-point) | |
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 | 5701 |
5702 ;; are we in a literal? | |
5703 (setq literal (c-in-literal lim)) | |
5704 | |
5705 ;; now figure out syntactic qualities of the current line | |
5706 (cond | |
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 | 5709 (c-add-syntax 'string (c-point 'bopl))) |
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 | 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 | 5875 (unless (eq (point) (cdr placeholder)) |
5876 (c-add-syntax (car placeholder)))) | |
18720 | 5877 ;; CASE 5: Line is at top level. |
5878 ((null containing-sexp) | |
5879 (cond | |
24282 | 5880 ;; CASE 5A: we are looking at a defun, brace list, class, |
5881 ;; or inline-inclass method opening brace | |
5882 ((setq special-brace-list | |
5883 (or (and c-special-brace-lists | |
5884 (c-looking-at-special-brace-list)) | |
5885 (eq char-after-ip ?{))) | |
18720 | 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 | 5888 ((save-excursion |
5889 (goto-char indent-point) | |
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 | 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 | 5908 ;; CASE 5A.2: we are looking at a class opening brace |
5909 ((save-excursion | |
5910 (goto-char indent-point) | |
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 | 5913 (and decl |
5914 (setq placeholder (aref decl 0))) | |
5915 )) | |
5916 (c-add-syntax 'class-open placeholder)) | |
5917 ;; CASE 5A.3: brace list open | |
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 | 5923 (setq placeholder (c-point 'boi)) |
24282 | 5924 (or (consp special-brace-list) |
36920 | 5925 (and (or (save-excursion |
24282 | 5926 (goto-char indent-point) |
36920 | 5927 (setq tmpsymbol nil) |
24282 | 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 | 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 | 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 | 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 | 5940 (not (memq (char-after) '(?\; ?\())))) |
5941 (not (memq (char-after) '(?\; ?\())) | |
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 | 5945 (eq tmpsymbol 'topmost-intro-cont)) |
5946 ;; We're in Java and have found that the open brace | |
5947 ;; belongs to a "new Foo[]" initialization list, | |
5948 ;; which means the brace list is part of an | |
5949 ;; expression and not a top level definition. We | |
5950 ;; therefore treat it as any topmost continuation | |
5951 ;; even though the semantically correct symbol still | |
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 | 5954 (progn |
5955 (c-beginning-of-statement-1 lim) | |
5956 (c-add-syntax 'topmost-intro-cont (c-point 'boi))) | |
5957 (c-add-syntax 'brace-list-open placeholder))) | |
18720 | 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 | 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 | 5962 ;; CASE 5A.5: ordinary defun open |
5963 (t | |
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 | 5969 ))) |
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 | 5972 (cond |
5973 ;; CASE 5B.1: a member init | |
5974 ((or (eq char-before-ip ?:) | |
5975 (eq char-after-ip ?:)) | |
5976 ;; this line should be indented relative to the beginning | |
5977 ;; of indentation for the topmost-intro line that contains | |
5978 ;; the prototype's open paren | |
5979 ;; TBD: is the following redundant? | |
5980 (if (eq char-before-ip ?:) | |
5981 (forward-char -1)) | |
5982 (c-backward-syntactic-ws lim) | |
5983 ;; TBD: is the preceding redundant? | |
5984 (if (eq (char-before) ?:) | |
5985 (progn (forward-char -1) | |
5986 (c-backward-syntactic-ws lim))) | |
5987 (if (eq (char-before) ?\)) | |
24282 | 5988 (c-backward-sexp 1)) |
18720 | 5989 (setq placeholder (point)) |
5990 (save-excursion | |
24282 | 5991 (and (c-safe (c-backward-sexp 1) t) |
18720 | 5992 (looking-at "throw[^_]") |
24282 | 5993 (c-safe (c-backward-sexp 1) t) |
18720 | 5994 (setq placeholder (point)))) |
5995 (goto-char placeholder) | |
5996 (c-add-syntax 'member-init-intro (c-point 'boi)) | |
5997 ;; we don't need to add any class offset since this | |
5998 ;; should be relative to the ctor's indentation | |
5999 ) | |
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 | 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 | 6012 ;; decl, which could include a `throws' declaration. |
6013 (t | |
6014 (c-beginning-of-statement-1 lim) | |
6015 (c-add-syntax 'func-decl-cont (c-point 'boi)) | |
6016 ))) | |
6017 ;; CASE 5C: inheritance line. could be first inheritance | |
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 | 6025 (and (or (eq char-before-ip ?:) |
6026 ;; watch out for scope operator | |
6027 (save-excursion | |
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 | 6030 (not (eq (char-after) ?:)) |
6031 ))) | |
6032 (save-excursion | |
6033 (c-backward-syntactic-ws lim) | |
6034 (if (eq char-before-ip ?:) | |
6035 (progn | |
6036 (forward-char -1) | |
6037 (c-backward-syntactic-ws lim))) | |
6038 (back-to-indentation) | |
6039 (looking-at c-class-key))) | |
6040 ;; for Java | |
24282 | 6041 (and (c-major-mode-is 'java-mode) |
18720 | 6042 (let ((fence (save-excursion |
6043 (c-beginning-of-statement-1 lim) | |
6044 (point))) | |
6045 cont done) | |
6046 (save-excursion | |
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 | 6049 (setq injava-inher (cons cont (point)) |
6050 done t)) | |
24282 | 6051 ((or (not (c-safe (c-forward-sexp -1) t)) |
18720 | 6052 (<= (point) fence)) |
6053 (setq done t)) | |
6054 ) | |
6055 (setq cont t))) | |
6056 injava-inher) | |
6057 (not (c-crosses-statement-barrier-p (cdr injava-inher) | |
6058 (point))) | |
6059 )) | |
6060 (cond | |
6061 ;; CASE 5C.1: non-hanging colon on an inher intro | |
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 | 6064 (c-add-syntax 'inher-intro (c-point 'boi)) |
6065 ;; don't add inclass symbol since relative point already | |
6066 ;; contains any class offset | |
6067 ) | |
6068 ;; CASE 5C.2: hanging colon on an inher intro | |
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 | 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 | 6074 ;; CASE 5C.3: in a Java implements/extends |
6075 (injava-inher | |
6076 (let ((where (cdr injava-inher)) | |
6077 (cont (car injava-inher))) | |
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 | 6080 (c-add-syntax 'func-decl-cont |
6081 (progn (c-beginning-of-statement-1 lim) | |
6082 (c-point 'boi)))) | |
6083 (cont (c-add-syntax 'inher-cont where)) | |
6084 (t (c-add-syntax 'inher-intro | |
6085 (progn (goto-char (cdr injava-inher)) | |
6086 (c-beginning-of-statement-1 lim) | |
6087 (point)))) | |
6088 ))) | |
6089 ;; CASE 5C.4: a continued inheritance line | |
6090 (t | |
6091 (c-beginning-of-inheritance-list lim) | |
6092 (c-add-syntax 'inher-cont (point)) | |
6093 ;; don't add inclass symbol since relative point already | |
6094 ;; contains any class offset | |
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 | 6097 ;; member init list continuation, or a template argument |
6098 ;; list continuation. | |
6099 ((c-with-syntax-table (if (c-major-mode-is 'c++-mode) | |
6100 c++-template-syntax-table | |
6101 (syntax-table)) | |
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 | 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 | 6114 (cond |
6115 ;; CASE 5D.1: hanging member init colon, but watch out | |
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 | 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 | 6121 (and (eq (char-after) ?:) |
6122 (not (eq (char-before) ?:)))) | |
18720 | 6123 (save-excursion |
24282 | 6124 (goto-char placeholder) |
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 | 6137 (goto-char placeholder) |
6138 (c-forward-syntactic-ws) | |
6139 (c-add-syntax 'member-init-cont (point)) | |
18720 | 6140 ;; we do not need to add class offset since relative |
6141 ;; point is the member init above us | |
6142 ) | |
6143 ;; CASE 5D.2: non-hanging member init colon | |
6144 ((progn | |
6145 (c-forward-syntactic-ws indent-point) | |
6146 (eq (char-after) ?:)) | |
6147 (skip-chars-forward " \t:") | |
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 | 6176 (goto-char placeholder) |
18720 | 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 | 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 | 6195 )) |
6196 ;; CASE 5E: we are looking at a access specifier | |
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 | 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 | 6209 ;; CASE 5G: we are looking at the brace which closes the |
6210 ;; enclosing nested class decl | |
6211 ((and inclass-p | |
6212 (eq char-after-ip ?}) | |
6213 (save-excursion | |
6214 (save-restriction | |
6215 (widen) | |
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 | 6218 (= (point) (aref inclass-p 1)) |
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 | 6221 ;; CASE 5H: we could be looking at subsequent knr-argdecls |
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 | 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 | 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 | 6255 ((progn |
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 | 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 | 6278 (not (bobp)) |
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 | 6282 (c-backward-sexp 1) |
18720 | 6283 (c-backward-syntactic-ws lim)) |
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 | 6292 ;; real beginning-of-line could be narrowed out due to |
6293 ;; enclosure in a class block | |
6294 (save-restriction | |
6295 (widen) | |
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 | 6299 (if inclass-p |
6300 (progn | |
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 | 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 | 6318 (progn |
6319 (c-beginning-of-statement-1 lim) | |
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 | 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 | 6324 ;; arglist that begins on the previous line. |
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 | 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 | 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 | 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 | 6334 ;; CASE 7: line is an expression, not a statement. Most |
18720 | 6335 ;; likely we are either in a function prototype or a function |
6336 ;; call argument list | |
24282 | 6337 ((not (or (and c-special-brace-lists |
6338 (save-excursion | |
6339 (goto-char containing-sexp) | |
6340 (c-looking-at-special-brace-list))) | |
6341 (eq (char-after containing-sexp) ?{))) | |
18720 | 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 | 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 | 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 | 6383 ;; CASE 7C: we are looking at the first argument in an empty |
18720 | 6384 ;; argument list. Use arglist-close if we're actually |
6385 ;; looking at a close paren or bracket. | |
6386 ((memq char-before-ip '(?\( ?\[)) | |
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 | 6395 ;; CASE 7D: we are inside a conditional test clause. treat |
18720 | 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 | 6401 (goto-char (1+ containing-sexp)) |
6402 (c-forward-syntactic-ws indent-point) | |
6403 (if (eq char-before-ip ?\;) | |
6404 (c-add-syntax 'statement (point)) | |
6405 (c-add-syntax 'statement-cont (point)) | |
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 | 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 | 6413 (goto-char (1- containing-sexp)) |
6414 (c-backward-syntactic-ws (c-point 'bod)) | |
6415 (if (not (looking-at c-symbol-key)) | |
6416 (c-add-syntax 'objc-method-call-cont containing-sexp)) | |
6417 ))) | |
24282 | 6418 ;; CASE 7F: we are looking at an arglist continuation line, |
18720 | 6419 ;; but the preceding argument is on the same line as the |
6420 ;; opening paren. This case includes multi-line | |
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 | 6424 (goto-char (1+ containing-sexp)) |
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 | 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 | 6440 ;; CASE 7G: we are looking at just a normal arglist |
18720 | 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 | 6443 (c-add-syntax 'arglist-cont (c-point 'boi))) |
6444 )) | |
24282 | 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 | 6447 (save-excursion |
6448 (goto-char indent-point) | |
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 | 6451 (goto-char indent-point) |
6452 (skip-chars-forward " \t") | |
6453 (cond | |
24282 | 6454 ;; CASE 8A: non-hanging colon on an inher intro |
18720 | 6455 ((eq char-after-ip ?:) |
6456 (c-backward-syntactic-ws lim) | |
6457 (c-add-syntax 'inher-intro (c-point 'boi))) | |
24282 | 6458 ;; CASE 8B: hanging colon on an inher intro |
18720 | 6459 ((eq char-before-ip ?:) |
6460 (c-add-syntax 'inher-intro (c-point 'boi))) | |
24282 | 6461 ;; CASE 8C: a continued inheritance line |
18720 | 6462 (t |
6463 (c-beginning-of-inheritance-list lim) | |
6464 (c-add-syntax 'inher-cont (point)) | |
6465 ))) | |
24282 | 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 | 6474 (cond |
24282 | 6475 ;; CASE 9A: In the middle of a special brace list opener. |
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 | 6480 (eq char-after-ip (car (cdr special-brace-list)))) |
6481 (goto-char (car (car special-brace-list))) | |
26817 | 6482 (skip-chars-backward " \t") |
36920 | 6483 (if (and (bolp) |
6484 (assoc 'statement-cont | |
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 | 6493 (c-add-syntax 'brace-list-open (c-point 'boi)))) |
24282 | 6494 ;; CASE 9B: brace-list-close brace |
6495 ((if (consp special-brace-list) | |
6496 ;; Check special brace list closer. | |
6497 (progn | |
6498 (goto-char (car (car special-brace-list))) | |
6499 (save-excursion | |
6500 (goto-char indent-point) | |
6501 (back-to-indentation) | |
6502 (or | |
6503 ;; We were between the special close char and the `)'. | |
6504 (and (eq (char-after) ?\)) | |
6505 (eq (1+ (point)) (cdr (car special-brace-list)))) | |
6506 ;; We were before the special close char. | |
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 | 6509 (eq (1+ (point)) (cdr (car special-brace-list))))))) |
6510 ;; Normal brace list check. | |
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 | 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 | 6520 (t |
6521 ;; Prepare for the rest of the cases below by going to the | |
6522 ;; token following the opening brace | |
6523 (if (consp special-brace-list) | |
6524 (progn | |
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 | 6527 (goto-char containing-sexp)) |
6528 (forward-char) | |
6529 (let ((start (point))) | |
18720 | 6530 (c-forward-syntactic-ws indent-point) |
24282 | 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 | 6533 (cond |
6534 ;; CASE 9C: we're looking at the first line in a brace-list | |
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 | 6545 ;; CASE 9D: this is just a later brace-list-entry or |
36920 | 6546 ;; brace-entry-open |
24282 | 6547 (t (if (or (eq char-after-ip ?{) |
6548 (and c-special-brace-lists | |
6549 (save-excursion | |
6550 (goto-char indent-point) | |
6551 (c-forward-syntactic-ws (c-point 'eol)) | |
6552 (c-looking-at-special-brace-list (point))))) | |
6553 (c-add-syntax 'brace-entry-open (point)) | |
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 | 6563 (> (point) |
6564 (save-excursion | |
6565 (c-beginning-of-statement-1 containing-sexp) | |
6566 (setq placeholder (point)))) | |
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 | 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 | 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 | 6581 ;; CASE 15: any other label |
18720 | 6582 ((looking-at c-label-key) |
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 | 6597 ;; CASE 16: block close brace, possibly closing the defun or |
18720 | 6598 ;; the class |
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 | 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 | 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 | 6617 (setq tmpsymbol (if (eq (car placeholder) 'inlambda) |
6618 'inline-close | |
6619 'block-close)) | |
6620 (goto-char containing-sexp) | |
6621 (back-to-indentation) | |
6622 (if (= containing-sexp (point)) | |
6623 (c-add-syntax tmpsymbol (point)) | |
6624 (goto-char (cdr placeholder)) | |
36920 | 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 | 6629 (if (/= (point) (cdr placeholder)) |
6630 (c-add-syntax (car placeholder))))) | |
24282 | 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 | 6666 ;; CASE 16C: if there an enclosing brace that hasn't |
18720 | 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 | 6686 ;; CASE 16D: find out whether we're closing a top-level |
18720 | 6687 ;; class or a defun |
6688 (t | |
6689 (save-restriction | |
6690 (narrow-to-region (point-min) indent-point) | |
6691 (let ((decl (c-search-uplist-for-classkey (c-parse-state)))) | |
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 | 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 | 6712 (cond |
24282 | 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 | 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 | 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 | 6769 (if (eq char-after-ip ?{) |
6770 (c-add-syntax 'block-open))) | |
6771 ;; CASE 17F: first statement in an inline, or first | |
18720 | 6772 ;; statement in a top-level defun. we can tell this is it |
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 | 6775 ((save-excursion |
6776 (save-restriction | |
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 | 6824 )) |
6825 ) | |
6826 ;; now we need to look at any modifiers | |
6827 (goto-char indent-point) | |
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 | 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 | 6884 |
6885 | |
51714
bc91cbf50c24
Updated CC Mode to version 5.30.
Martin Stjernholm <mast@lysator.liu.se>
parents:
50273
diff
changeset
|
6886 ;; Indentation calculation. |
18720 | 6887 |
36920 | 6888 (defun c-evaluate-offset (offset langelem symbol) |
6889 ;; offset can be a number, a function, a variable, a list, or one of | |
6890 ;; the symbols + or - | |
6891 (cond | |
6892 ((eq offset '+) c-basic-offset) | |
6893 ((eq offset '-) (- c-basic-offset)) | |
6894 ((eq offset '++) (* 2 c-basic-offset)) | |
6895 ((eq offset '--) (* 2 (- c-basic-offset))) | |
6896 ((eq offset '*) (/ c-basic-offset 2)) | |
6897 ((eq offset '/) (/ (- c-basic-offset) 2)) | |
6898 ((numberp offset) offset) | |
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 | 6904 ((vectorp offset) offset) |
6905 ((null offset) nil) | |
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 | 6911 (let (done) |
6912 (while (and (not done) offset) | |
6913 (setq done (c-evaluate-offset (car offset) langelem symbol) | |
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 | 6918 (t (symbol-value offset)) |
6919 )) | |
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 | 6928 (let* ((symbol (car langelem)) |
6929 (match (assq symbol c-offsets-alist)) | |
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 | 6936 (if (vectorp offset) |
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 | 6941 )) |
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 | 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 | 6993 |
18720 | 6994 |
36920 | 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 | 6997 ;;; arch-tag: 149add18-4673-4da5-ac47-6805e4eae089 |
18720 | 6998 ;;; cc-engine.el ends here |